X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fauth.c;h=0eb7566014c5360e9c702183b52f034e5083fd46;hb=cd2dfed2fbda503198203b172abae419b1ebf8eb;hp=c87f4003a244b2328c3aebfdce0602bf4057e67f;hpb=f65f63638727f0f0c1b32c9a1cce26818201e753;p=ppp.git diff --git a/pppd/auth.c b/pppd/auth.c index c87f400..0eb7566 100644 --- a/pppd/auth.c +++ b/pppd/auth.c @@ -33,7 +33,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: auth.c,v 1.25 1996/07/01 01:10:24 paulus Exp $"; +static char rcsid[] = "$Id: auth.c,v 1.27 1996/09/26 06:20:35 paulus Exp $"; #endif #include @@ -54,7 +54,7 @@ static char rcsid[] = "$Id: auth.c,v 1.25 1996/07/01 01:10:24 paulus Exp $"; #ifdef SVR4 #include #else -#ifdef SUNOS4 +#if defined(SUNOS4) || defined(ULTRIX) extern char *crypt(); #endif #endif @@ -80,10 +80,6 @@ extern char *crypt(); #include "chap.h" #include "pathnames.h" -#if defined(sun) && defined(sparc) -#include -#endif /*sparc*/ - /* Used for storing a sequence of words. Usually malloced. */ struct wordlist { struct wordlist *next; @@ -244,7 +240,7 @@ link_established(unit) auth |= PAP_PEER; } if (ho->neg_chap) { - ChapAuthWithPeer(unit, our_name, ho->chap_mdtype); + ChapAuthWithPeer(unit, user, ho->chap_mdtype); auth |= CHAP_WITHPEER; } else if (ho->neg_upap) { if (passwd[0] == 0) { @@ -451,6 +447,7 @@ 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); @@ -468,6 +465,12 @@ auth_check_options() ipcp_options *ipwo = &ipcp_wantoptions[0]; u_int32_t remote; + /* Check that we are running as root. */ + if (geteuid() != 0) { + option_error("must be run with root privileges"); + exit(1); + } + /* Default our_name to hostname, and user to our_name */ if (our_name[0] == 0 || usehostname) strcpy(our_name, hostname); @@ -491,11 +494,27 @@ auth_check_options() } if (auth_required && !can_auth) { - fprintf(stderr, "\ -pppd: peer authentication required but no suitable secret(s) found\n"); + option_error("peer authentication required but no suitable secret(s) found\n"); exit(1); } + /* + * Check whether the user tried to override certain values + * set by root. + */ + if (!auth_required && auth_req_info.priv > 0) { + if (!default_device && devnam_info.priv == 0) { + 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) { + option_error("can't override connect, disconnect or welcome"); + option_error("option values when noauth option used"); + exit(1); + } + } } /* @@ -514,7 +533,7 @@ auth_reset(unit) ao->neg_upap = !refuse_pap && (passwd[0] != 0 || get_pap_passwd(NULL)); ao->neg_chap = !refuse_chap - && have_chap_secret(our_name, remote_name, (u_int32_t)0); + && have_chap_secret(user, remote_name, (u_int32_t)0); if (go->neg_upap && !uselogin && !have_pap_secret()) go->neg_upap = 0; @@ -900,7 +919,8 @@ null_login(unit) * could be found. */ static int -get_pap_passwd(char *passwd) +get_pap_passwd(passwd) + char *passwd; { char *filename; FILE *f;