1af57ed9fSAtsushi Murai /* 2af57ed9fSAtsushi Murai * PPP Secret Key Module 3af57ed9fSAtsushi Murai * 4af57ed9fSAtsushi Murai * Written by Toshiharu OHNO (tony-o@iij.ad.jp) 5af57ed9fSAtsushi Murai * 6af57ed9fSAtsushi Murai * Copyright (C) 1994, Internet Initiative Japan, Inc. All rights reserverd. 7af57ed9fSAtsushi Murai * 8af57ed9fSAtsushi Murai * Redistribution and use in source and binary forms are permitted 9af57ed9fSAtsushi Murai * provided that the above copyright notice and this paragraph are 10af57ed9fSAtsushi Murai * duplicated in all such forms and that any documentation, 11af57ed9fSAtsushi Murai * advertising materials, and other materials related to such 12af57ed9fSAtsushi Murai * distribution and use acknowledge that the software was developed 13af57ed9fSAtsushi Murai * by the Internet Initiative Japan, Inc. The name of the 14af57ed9fSAtsushi Murai * IIJ may not be used to endorse or promote products derived 15af57ed9fSAtsushi Murai * from this software without specific prior written permission. 16af57ed9fSAtsushi Murai * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 17af57ed9fSAtsushi Murai * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 18af57ed9fSAtsushi Murai * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 19af57ed9fSAtsushi Murai * 20af57ed9fSAtsushi Murai * $Id:$ 21af57ed9fSAtsushi Murai * 22af57ed9fSAtsushi Murai * TODO: 23af57ed9fSAtsushi Murai * o Imprement check against with registerd IP addresses. 24af57ed9fSAtsushi Murai */ 25af57ed9fSAtsushi Murai #include "fsm.h" 26af57ed9fSAtsushi Murai #include "ipcp.h" 27af57ed9fSAtsushi Murai 28af57ed9fSAtsushi Murai extern FILE *OpenSecret(); 29af57ed9fSAtsushi Murai extern void CloseSecret(); 30af57ed9fSAtsushi Murai 31af57ed9fSAtsushi Murai int 32af57ed9fSAtsushi Murai AuthValidate(fname, system, key) 33af57ed9fSAtsushi Murai char *fname, *system, *key; 34af57ed9fSAtsushi Murai { 35af57ed9fSAtsushi Murai FILE *fp; 36af57ed9fSAtsushi Murai int n; 37af57ed9fSAtsushi Murai char *vector[20]; 38af57ed9fSAtsushi Murai char buff[200]; 39af57ed9fSAtsushi Murai char passwd[100]; 40af57ed9fSAtsushi Murai 41af57ed9fSAtsushi Murai fp = OpenSecret(fname); 42af57ed9fSAtsushi Murai if (fp == NULL) 43af57ed9fSAtsushi Murai return(0); 44af57ed9fSAtsushi Murai while (fgets(buff, sizeof(buff), fp)) { 45af57ed9fSAtsushi Murai if (buff[0] == '#') 46af57ed9fSAtsushi Murai continue; 47af57ed9fSAtsushi Murai buff[strlen(buff)-1] = 0; 48af57ed9fSAtsushi Murai bzero(vector, sizeof(vector)); 49af57ed9fSAtsushi Murai n = MakeArgs(buff, &vector); 50af57ed9fSAtsushi Murai if (n < 2) 51af57ed9fSAtsushi Murai continue; 52af57ed9fSAtsushi Murai if (strcmp(vector[0], system) == 0) { 53af57ed9fSAtsushi Murai ExpandString(vector[1], passwd, 0); 54af57ed9fSAtsushi Murai if (strcmp(passwd, key) == 0) { 55af57ed9fSAtsushi Murai CloseSecret(fp); 56af57ed9fSAtsushi Murai bzero(&DefHisAddress, sizeof(DefHisAddress)); 57af57ed9fSAtsushi Murai n -= 2; 58af57ed9fSAtsushi Murai if (n > 0) { 59af57ed9fSAtsushi Murai ParseAddr(n--, &vector[2], 60af57ed9fSAtsushi Murai &DefHisAddress.ipaddr, &DefHisAddress.mask, &DefHisAddress.width); 61af57ed9fSAtsushi Murai } 62af57ed9fSAtsushi Murai IpcpInit(); 63af57ed9fSAtsushi Murai return(1); /* Valid */ 64af57ed9fSAtsushi Murai } 65af57ed9fSAtsushi Murai } 66af57ed9fSAtsushi Murai } 67af57ed9fSAtsushi Murai CloseSecret(fp); 68af57ed9fSAtsushi Murai return(0); /* Invalid */ 69af57ed9fSAtsushi Murai } 70af57ed9fSAtsushi Murai 71af57ed9fSAtsushi Murai char * 72af57ed9fSAtsushi Murai AuthGetSecret(fname, system, len, setaddr) 73af57ed9fSAtsushi Murai char *fname, *system; 74af57ed9fSAtsushi Murai int len, setaddr; 75af57ed9fSAtsushi Murai { 76af57ed9fSAtsushi Murai FILE *fp; 77af57ed9fSAtsushi Murai int n; 78af57ed9fSAtsushi Murai char *vector[20]; 79af57ed9fSAtsushi Murai char buff[200]; 80af57ed9fSAtsushi Murai static char passwd[100]; 81af57ed9fSAtsushi Murai 82af57ed9fSAtsushi Murai fp = OpenSecret(fname); 83af57ed9fSAtsushi Murai if (fp == NULL) 84af57ed9fSAtsushi Murai return(NULL); 85af57ed9fSAtsushi Murai while (fgets(buff, sizeof(buff), fp)) { 86af57ed9fSAtsushi Murai if (buff[0] == '#') 87af57ed9fSAtsushi Murai continue; 88af57ed9fSAtsushi Murai buff[strlen(buff)-1] = 0; 89af57ed9fSAtsushi Murai bzero(vector, sizeof(vector)); 90af57ed9fSAtsushi Murai n = MakeArgs(buff, &vector); 91af57ed9fSAtsushi Murai if (n < 2) 92af57ed9fSAtsushi Murai continue; 93af57ed9fSAtsushi Murai if (strlen(vector[0]) == len && strncmp(vector[0], system, len) == 0) { 94af57ed9fSAtsushi Murai ExpandString(vector[1], passwd, 0); 95af57ed9fSAtsushi Murai if (setaddr) { 96af57ed9fSAtsushi Murai bzero(&DefHisAddress, sizeof(DefHisAddress)); 97af57ed9fSAtsushi Murai } 98af57ed9fSAtsushi Murai n -= 2; 99af57ed9fSAtsushi Murai if (n > 0 && setaddr) { 100af57ed9fSAtsushi Murai #ifdef DEBUG 101af57ed9fSAtsushi Murai LogPrintf(LOG_LCP, "*** n = %d, %s\n", n, vector[2]); 102af57ed9fSAtsushi Murai #endif 103af57ed9fSAtsushi Murai ParseAddr(n--, &vector[2], 104af57ed9fSAtsushi Murai &DefHisAddress.ipaddr, &DefHisAddress.mask, &DefHisAddress.width); 105af57ed9fSAtsushi Murai IpcpInit(); 106af57ed9fSAtsushi Murai } 107af57ed9fSAtsushi Murai return(passwd); 108af57ed9fSAtsushi Murai } 109af57ed9fSAtsushi Murai } 110af57ed9fSAtsushi Murai CloseSecret(fp); 111af57ed9fSAtsushi Murai return(NULL); /* Invalid */ 112af57ed9fSAtsushi Murai } 113