diff options
author | amurai <amurai@FreeBSD.org> | 1995-01-31 06:29:58 +0000 |
---|---|---|
committer | amurai <amurai@FreeBSD.org> | 1995-01-31 06:29:58 +0000 |
commit | 21ef2761fd1e5a4beb483da8bddf767d36540dce (patch) | |
tree | 3aecd1251d1647032ad1455f304eaeeaab4987d0 /usr.sbin/ppp/auth.c | |
parent | 0487956fcf018d602bfe99b0e3398c6f4d55680a (diff) | |
download | FreeBSD-src-21ef2761fd1e5a4beb483da8bddf767d36540dce.zip FreeBSD-src-21ef2761fd1e5a4beb483da8bddf767d36540dce.tar.gz |
Diffstat (limited to 'usr.sbin/ppp/auth.c')
-rw-r--r-- | usr.sbin/ppp/auth.c | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/usr.sbin/ppp/auth.c b/usr.sbin/ppp/auth.c new file mode 100644 index 0000000..d6a5f72 --- /dev/null +++ b/usr.sbin/ppp/auth.c @@ -0,0 +1,112 @@ +/* + * PPP Secret Key Module + * + * Written by Toshiharu OHNO (tony-o@iij.ad.jp) + * + * Copyright (C) 1994, Internet Initiative Japan, Inc. All rights reserverd. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the Internet Initiative Japan, Inc. The name of the + * IIJ may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * $Id:$ + * + * TODO: + * o Imprement check against with registerd IP addresses. + */ +#include "fsm.h" +#include "ipcp.h" + +extern FILE *OpenSecret(); +extern void CloseSecret(); + +int +AuthValidate(fname, system, key) +char *fname, *system, *key; +{ + FILE *fp; + int n; + char *vector[20]; + char buff[200]; + char passwd[100]; + + fp = OpenSecret(fname); + if (fp == NULL) + return(0); + while (fgets(buff, sizeof(buff), fp)) { + if (buff[0] == '#') + continue; + buff[strlen(buff)-1] = 0; + bzero(vector, sizeof(vector)); + n = MakeArgs(buff, &vector); + if (n < 2) + continue; + if (strcmp(vector[0], system) == 0) { + ExpandString(vector[1], passwd, 0); + if (strcmp(passwd, key) == 0) { + CloseSecret(fp); + bzero(&DefHisAddress, sizeof(DefHisAddress)); + n -= 2; + if (n > 0) { + ParseAddr(n--, &vector[2], + &DefHisAddress.ipaddr, &DefHisAddress.mask, &DefHisAddress.width); + } + IpcpInit(); + return(1); /* Valid */ + } + } + } + CloseSecret(fp); + return(0); /* Invalid */ +} + +char * +AuthGetSecret(fname, system, len, setaddr) +char *fname, *system; +int len, setaddr; +{ + FILE *fp; + int n; + char *vector[20]; + char buff[200]; + static char passwd[100]; + + fp = OpenSecret(fname); + if (fp == NULL) + return(NULL); + while (fgets(buff, sizeof(buff), fp)) { + if (buff[0] == '#') + continue; + buff[strlen(buff)-1] = 0; + bzero(vector, sizeof(vector)); + n = MakeArgs(buff, &vector); + if (n < 2) + continue; + if (strlen(vector[0]) == len && strncmp(vector[0], system, len) == 0) { + ExpandString(vector[1], passwd, 0); + if (setaddr) { + bzero(&DefHisAddress, sizeof(DefHisAddress)); + } + n -= 2; + if (n > 0 && setaddr) { +#ifdef DEBUG + LogPrintf(LOG_LCP, "*** n = %d, %s\n", n, vector[2]); +#endif + ParseAddr(n--, &vector[2], + &DefHisAddress.ipaddr, &DefHisAddress.mask, &DefHisAddress.width); + IpcpInit(); + } + return(passwd); + } + } + CloseSecret(fp); + return(NULL); /* Invalid */ +} |