X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fauth.c;h=1dfb148f28cd3e060de1d24bbb6df91ce045f788;hb=54a510907ca30d8a1651fdb5f7c2c360f4ef7e27;hp=5bc3943ec50ad862183ebaf4d82ad5a0c8fbf68b;hpb=6e0cd4b312a761ad9d2dd17a9b5fea0b4fb1d653;p=ppp.git diff --git a/pppd/auth.c b/pppd/auth.c index 5bc3943..1dfb148 100644 --- a/pppd/auth.c +++ b/pppd/auth.c @@ -33,7 +33,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: auth.c,v 1.30 1997/03/04 03:37:21 paulus Exp $"; +static char rcsid[] = "$Id: auth.c,v 1.32 1997/07/14 03:52:33 paulus Exp $"; #endif #include @@ -51,14 +51,6 @@ static char rcsid[] = "$Id: auth.c,v 1.30 1997/03/04 03:37:21 paulus Exp $"; #include #include -#if defined(SVR4) || defined(_linux_) -#include -#else -#if defined(SUNOS4) || defined(ULTRIX) -extern char *crypt(); -#endif -#endif - #ifdef USE_PAM #include #include @@ -66,7 +58,9 @@ extern char *crypt(); #ifdef HAS_SHADOW #include +#ifndef SVR4 #include +#endif #ifndef PW_PPP #define PW_PPP PW_LOGIN #endif @@ -128,11 +122,13 @@ static int passwd_from_file; #define CHAP_WITHPEER 4 #define CHAP_PEER 8 +extern char *crypt __P((const char *, const char *)); + /* Prototypes for procedures local to this file. */ static void network_phase __P((int)); -static void check_idle __P((caddr_t)); -static void connect_time_expired __P((caddr_t)); +static void check_idle __P((void *)); +static void connect_time_expired __P((void *)); static int login __P((char *, char *, char **, int *)); static void logout __P((void)); static int null_login __P((int)); @@ -308,6 +304,10 @@ network_phase(unit) if (protp->protocol != PPP_CCP) ++num_np_open; } + + if (num_np_open == 0) + /* nothing to do */ + lcp_close(0, "No network protocols running"); } /* @@ -419,8 +419,14 @@ void np_up(unit, proto) int unit, proto; { - if (num_np_up == 0 && idle_time_limit > 0) { - TIMEOUT(check_idle, NULL, idle_time_limit); + if (num_np_up == 0) { + /* + * At this point we consider that the link has come up successfully. + */ + need_holdoff = 0; + + if (idle_time_limit > 0) + TIMEOUT(check_idle, NULL, idle_time_limit); /* * Set a timeout to close the connection once the maximum @@ -463,7 +469,7 @@ np_finished(unit, proto) */ static void check_idle(arg) - caddr_t arg; + void *arg; { struct ppp_idle idle; time_t itime; @@ -474,7 +480,6 @@ check_idle(arg) if (itime >= idle_time_limit) { /* link is idle: shut it down. */ syslog(LOG_INFO, "Terminating connection due to lack of activity."); - need_holdoff = 0; lcp_close(0, "Link inactive"); } else { TIMEOUT(check_idle, NULL, idle_time_limit - itime); @@ -486,7 +491,7 @@ check_idle(arg) */ static void connect_time_expired(arg) - caddr_t arg; + void *arg; { syslog(LOG_INFO, "Connect time expired"); lcp_close(0, "Connect time expired"); /* Close connection */ @@ -544,9 +549,9 @@ auth_check_options() option_error("can't override device name when noauth option used"); exit(1); } - if (connector != NULL && connector_info.priv == 0 - || disconnector != NULL && disconnector_info.priv == 0 - || welcomer != NULL && welcomer_info.priv == 0) { + if ((connector != NULL && connector_info.priv == 0) + || (disconnector != NULL && disconnector_info.priv == 0) + || (welcomer != NULL && welcomer_info.priv == 0)) { option_error("can't override connect, disconnect or welcome"); option_error("option values when noauth option used"); exit(1); @@ -762,7 +767,6 @@ login(user, passwd, msg, msglen) #else /* #ifdef USE_PAM */ struct passwd *pw; - char *epasswd; #ifdef HAS_SHADOW struct spwd *spwd; @@ -878,6 +882,7 @@ get_pap_passwd(passwd) { char *filename; FILE *f; + int ret; struct wordlist *addrs; char secret[MAXWORDLEN]; @@ -887,9 +892,11 @@ get_pap_passwd(passwd) if (f == NULL) return 0; check_access(f, filename); - if (scan_authfile(f, user, - remote_name[0]? remote_name: NULL, - (u_int32_t)0, secret, NULL, filename) < 0) + ret = scan_authfile(f, user, + remote_name[0]? remote_name: NULL, + (u_int32_t)0, secret, NULL, filename); + fclose(f); + if (ret < 0) return 0; if (passwd != NULL) { strncpy(passwd, secret, MAXSECRETLEN); @@ -1135,7 +1142,7 @@ ip_addr_check(addr, addrs) if (ptr_mask != NULL) *ptr_mask = '/'; - if (a == -1L) + if (a == (u_int32_t)-1L) syslog (LOG_WARNING, "unknown host %s in auth. address list", addrs->word);