X-Git-Url: http://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppd%2Foptions.c;h=536973c0db67d55d1622a9b0fa107f98d7c0b88e;hp=a8ded25a9bc90666c736075c25a8db747e5e8b8c;hb=954dd16d7da0a063b664075a9c8eebb8b5c15066;hpb=ba68145197d2cf11987325628a330ee0ca651787 diff --git a/pppd/options.c b/pppd/options.c index a8ded25..536973c 100644 --- a/pppd/options.c +++ b/pppd/options.c @@ -18,7 +18,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: options.c,v 1.9 1994/05/25 06:25:48 paulus Exp $"; +static char rcsid[] = "$Id: options.c,v 1.13 1994/09/01 00:13:16 paulus Exp $"; #endif #include @@ -44,6 +44,7 @@ static char rcsid[] = "$Id: options.c,v 1.9 1994/05/25 06:25:48 paulus Exp $"; #include "ipcp.h" #include "upap.h" #include "chap.h" +#include "ccp.h" #define FALSE 0 #define TRUE 1 @@ -53,9 +54,38 @@ char *strdup __ARGS((char *)); #endif #ifndef GIDSET_TYPE -#define GIDSET_TYPE int +#define GIDSET_TYPE gid_t #endif +/* + * Option variables and default values. + */ +int debug = 0; /* Debug flag */ +int kdebugflag = 0; /* Tell kernel to print debug messages */ +int default_device = 1; /* Using /dev/tty or equivalent */ +char devnam[MAXPATHLEN] = "/dev/tty"; /* Device name */ +int crtscts = 0; /* Use hardware flow control */ +int modem = 1; /* Use modem control lines */ +int inspeed = 0; /* Input/Output speed requested */ +uint32 netmask = 0; /* IP netmask to set on interface */ +int lockflag = 0; /* Create lock file to lock the serial dev */ +int nodetach = 0; /* Don't detach from controlling tty */ +char *connector = NULL; /* Script to establish physical link */ +char *disconnector = NULL; /* Script to disestablish physical link */ +char user[MAXNAMELEN]; /* Username for PAP */ +char passwd[MAXSECRETLEN]; /* Password for PAP */ +int auth_required = 0; /* Peer is required to authenticate */ +int defaultroute = 0; /* assign default route through interface */ +int proxyarp = 0; /* Set up proxy ARP entry for peer */ +int persist = 0; /* Reopen link after it goes down */ +int uselogin = 0; /* Use /etc/passwd for checking PAP */ +int lcp_echo_interval = 0; /* Interval between LCP echo-requests */ +int lcp_echo_fails = 0; /* Tolerance to unanswered echo-requests */ +char our_name[MAXNAMELEN]; /* Our name for authentication purposes */ +char remote_name[MAXNAMELEN]; /* Peer's name for authentication */ +int usehostname = 0; /* Use hostname for our_name */ +int disable_defaultip = 0; /* Don't use hostname for default IP adrs */ + /* * Prototypes */ @@ -121,40 +151,12 @@ static int setipcpaccl __ARGS((void)); static int setipcpaccr __ARGS((void)); static int setlcpechointv __ARGS((char **)); static int setlcpechofails __ARGS((char **)); +static int setbsdcomp __ARGS((char **)); +static int setnobsdcomp __ARGS((void)); static int number_option __ARGS((char *, long *, int)); static int readable __ARGS((int fd)); -/* - * Option variables - */ -extern char *progname; -extern int debug; -extern int kdebugflag; -extern int modem; -extern int lockflag; -extern int crtscts; -extern int nodetach; -extern char *connector; -extern char *disconnector; -extern int inspeed; -extern char devname[]; -extern int default_device; -extern u_long netmask; -extern int detach; -extern char user[]; -extern char passwd[]; -extern int auth_required; -extern int proxyarp; -extern int persist; -extern int uselogin; -extern u_long lcp_echo_interval; -extern u_long lcp_echo_fails; -extern char our_name[]; -extern char remote_name[]; -int usehostname; -int disable_defaultip; - /* * Valid arguments. */ @@ -228,6 +230,8 @@ static struct cmd { {"chap-interval", 1, setchapintv}, /* Set interval for rechallenge */ {"ipcp-accept-local", 0, setipcpaccl}, /* Accept peer's address for us */ {"ipcp-accept-remote", 0, setipcpaccr}, /* Accept peer's address for it */ + {"bsdcomp", 1, setbsdcomp}, /* request BSD-Compress */ + {"-bsdcomp", 0, setnobsdcomp}, /* don't allow BSD-Compress */ {NULL, 0, NULL} }; @@ -425,9 +429,9 @@ options_for_tty() char *dev, *path; int ret; - dev = strrchr(devname, '/'); + dev = strrchr(devnam, '/'); if (dev == NULL) - dev = devname; + dev = devnam; else ++dev; if (strcmp(dev, "tty") == 0) @@ -835,6 +839,10 @@ setupapfile(argv) fprintf(stderr, "unable to open user login data file %s\n", *argv); return 0; } + if (!readable(fileno(ufile))) { + fprintf(stderr, "%s: access denied\n", *argv); + return 0; + } check_access(ufile, *argv); /* get username */ @@ -1060,8 +1068,8 @@ setdevname(cp) return -1; } - (void) strncpy(devname, cp, MAXPATHLEN); - devname[MAXPATHLEN-1] = 0; + (void) strncpy(devnam, cp, MAXPATHLEN); + devnam[MAXPATHLEN-1] = 0; default_device = FALSE; return 1; @@ -1077,7 +1085,7 @@ setipaddr(arg) { struct hostent *hp; char *colon, *index(); - u_long local, remote; + uint32 local, remote; ipcp_options *wo = &ipcp_wantoptions[0]; /* @@ -1180,7 +1188,7 @@ void setipdefault() { struct hostent *hp; - u_long local; + uint32 local; ipcp_options *wo = &ipcp_wantoptions[0]; /* @@ -1210,7 +1218,7 @@ static int setnetmask(argv) char **argv; { - u_long mask; + uint32 mask; if ((mask = inet_addr(*argv)) == -1 || (netmask & ~mask) != 0) { fprintf(stderr, "Invalid netmask %s\n", *argv); @@ -1226,9 +1234,9 @@ setnetmask(argv) * been set. */ /* ARGSUSED */ -u_long +uint32 GetMask(addr) - u_long addr; + uint32 addr; { return(netmask); } @@ -1446,3 +1454,20 @@ static int setchapintv(argv) { return int_option(*argv, &chap[0].chal_interval); } + +static int setbsdcomp(argv) + char **argv; +{ + int bits; + + if (!int_option(*argv, &bits)) + return 0; + ccp_wantoptions[0].bsd_compress = 1; + ccp_wantoptions[0].bsd_bits = bits; + return 1; +} + +static int setnobsdcomp() +{ + ccp_allowoptions[0].bsd_compress = 0; +}