*/
#ifndef lint
-static char rcsid[] = "$Id: options.c,v 1.15 1994/09/16 02:34:52 paulus Exp $";
+static char rcsid[] = "$Id: options.c,v 1.19 1995/04/27 00:20:16 paulus Exp $";
#endif
#include <stdio.h>
#include <sys/stat.h>
#include <netinet/in.h>
-#include "ppp.h"
#include "pppd.h"
#include "pathnames.h"
#include "patchlevel.h"
#include "chap.h"
#include "ccp.h"
+#include <net/ppp-comp.h>
+
#define FALSE 0
#define TRUE 1
-#ifdef ultrix
-char *strdup __ARGS((char *));
+#if defined(ultrix) || defined(NeXT)
+char *strdup __P((char *));
#endif
#ifndef GIDSET_TYPE
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 */
+u_int32_t 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 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 */
+char *ipparam = NULL; /* Extra parameter for ip up/down scripts */
+int cryptpap; /* Passwords in pap-secrets are encrypted */
+
+#ifdef _linux_
+int idle_time_limit = 0;
+static int setidle __P((char **));
+#endif
/*
* Prototypes
*/
-static int setdebug __ARGS((void));
-static int setkdebug __ARGS((char **));
-static int setpassive __ARGS((void));
-static int setsilent __ARGS((void));
-static int noopt __ARGS((void));
-static int setnovj __ARGS((void));
-static int setnovjccomp __ARGS((void));
-static int setvjslots __ARGS((char **));
-static int reqpap __ARGS((void));
-static int nopap __ARGS((void));
-static int setupapfile __ARGS((char **));
-static int nochap __ARGS((void));
-static int reqchap __ARGS((void));
-static int setspeed __ARGS((char *));
-static int noaccomp __ARGS((void));
-static int noasyncmap __ARGS((void));
-static int noipaddr __ARGS((void));
-static int nomagicnumber __ARGS((void));
-static int setasyncmap __ARGS((char **));
-static int setescape __ARGS((char **));
-static int setmru __ARGS((char **));
-static int setmtu __ARGS((char **));
-static int nomru __ARGS((void));
-static int nopcomp __ARGS((void));
-static int setconnector __ARGS((char **));
-static int setdisconnector __ARGS((char **));
-static int setdomain __ARGS((char **));
-static int setnetmask __ARGS((char **));
-static int setcrtscts __ARGS((void));
-static int setnocrtscts __ARGS((void));
-static int setxonxoff __ARGS((void));
-static int setnodetach __ARGS((void));
-static int setmodem __ARGS((void));
-static int setlocal __ARGS((void));
-static int setlock __ARGS((void));
-static int setname __ARGS((char **));
-static int setuser __ARGS((char **));
-static int setremote __ARGS((char **));
-static int setauth __ARGS((void));
-static int readfile __ARGS((char **));
-static int setdefaultroute __ARGS((void));
-static int setproxyarp __ARGS((void));
-static int setpersist __ARGS((void));
-static int setdologin __ARGS((void));
-static int setusehostname __ARGS((void));
-static int setnoipdflt __ARGS((void));
-static int setlcptimeout __ARGS((char **));
-static int setlcpterm __ARGS((char **));
-static int setlcpconf __ARGS((char **));
-static int setlcpfails __ARGS((char **));
-static int setipcptimeout __ARGS((char **));
-static int setipcpterm __ARGS((char **));
-static int setipcpconf __ARGS((char **));
-static int setipcpfails __ARGS((char **));
-static int setpaptimeout __ARGS((char **));
-static int setpapreqs __ARGS((char **));
-static int setchaptimeout __ARGS((char **));
-static int setchapchal __ARGS((char **));
-static int setchapintv __ARGS((char **));
-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));
+static int setdebug __P((void));
+static int setkdebug __P((char **));
+static int setpassive __P((void));
+static int setsilent __P((void));
+static int noopt __P((void));
+static int setnovj __P((void));
+static int setnovjccomp __P((void));
+static int setvjslots __P((char **));
+static int reqpap __P((void));
+static int nopap __P((void));
+static int setupapfile __P((char **));
+static int nochap __P((void));
+static int reqchap __P((void));
+static int setspeed __P((char *));
+static int noaccomp __P((void));
+static int noasyncmap __P((void));
+static int noipaddr __P((void));
+static int nomagicnumber __P((void));
+static int setasyncmap __P((char **));
+static int setescape __P((char **));
+static int setmru __P((char **));
+static int setmtu __P((char **));
+static int nomru __P((void));
+static int nopcomp __P((void));
+static int setconnector __P((char **));
+static int setdisconnector __P((char **));
+static int setdomain __P((char **));
+static int setnetmask __P((char **));
+static int setcrtscts __P((void));
+static int setnocrtscts __P((void));
+static int setxonxoff __P((void));
+static int setnodetach __P((void));
+static int setmodem __P((void));
+static int setlocal __P((void));
+static int setlock __P((void));
+static int setname __P((char **));
+static int setuser __P((char **));
+static int setremote __P((char **));
+static int setauth __P((void));
+static int readfile __P((char **));
+static int setdefaultroute __P((void));
+static int setproxyarp __P((void));
+static int setpersist __P((void));
+static int setdologin __P((void));
+static int setusehostname __P((void));
+static int setnoipdflt __P((void));
+static int setlcptimeout __P((char **));
+static int setlcpterm __P((char **));
+static int setlcpconf __P((char **));
+static int setlcpfails __P((char **));
+static int setipcptimeout __P((char **));
+static int setipcpterm __P((char **));
+static int setipcpconf __P((char **));
+static int setipcpfails __P((char **));
+static int setpaptimeout __P((char **));
+static int setpapreqs __P((char **));
+static int setchaptimeout __P((char **));
+static int setchapchal __P((char **));
+static int setchapintv __P((char **));
+static int setipcpaccl __P((void));
+static int setipcpaccr __P((void));
+static int setlcpechointv __P((char **));
+static int setlcpechofails __P((char **));
+static int setbsdcomp __P((char **));
+static int setnobsdcomp __P((void));
+static int setipparam __P((char **));
+static int setpapcrypt __P((void));
+
+static int number_option __P((char *, long *, int));
+static int readable __P((int fd));
+
+void usage();
/*
* Valid arguments.
{"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 */
+ {"ipparam", 1, setipparam}, /* set ip script parameter */
+ {"papcrypt", 0, setpapcrypt}, /* PAP passwords encrypted */
+#ifdef _linux_
+ {"idle-disconnect", 1, setidle}, /* seconds for disconnect of idle IP */
+#endif
{NULL, 0, NULL}
};
/*
* usage - print out a message telling how to use the program.
*/
+void
usage()
{
fprintf(stderr, usage_string, VERSION, PATCHLEVEL, IMPLEMENTATION,
if (!number_option(*argv, &mtu, 0))
return 0;
if (mtu < MINMRU || mtu > MAXMRU) {
- fprintf(stderr, "mtu option value of %d is too %s\n", mtu,
+ fprintf(stderr, "mtu option value of %ld is too %s\n", mtu,
(mtu < MINMRU? "small": "large"));
return 0;
}
{
lcp_wantoptions[0].neg_upap = 1;
auth_required = 1;
+ return 1;
}
{
ipcp_wantoptions[0].cflag = 0;
ipcp_allowoptions[0].cflag = 0;
+ return 1;
}
}
p = endp;
if (n < 0 || 0x20 <= n && n <= 0x3F || n == 0x5E || n > 0xFF) {
- fprintf(stderr, "%s: can't escape character 0x%x\n", n);
+ fprintf(stderr, "%s: can't escape character 0x%x\n", progname, n);
ret = 0;
} else
xmit_accm[0][n >> 5] |= 1 << (n & 0x1F);
char *arg;
{
struct hostent *hp;
- char *colon, *index();
- uint32 local, remote;
+ char *colon;
+ u_int32_t local, remote;
ipcp_options *wo = &ipcp_wantoptions[0];
/*
* IP address pair separated by ":".
*/
- if ((colon = index(arg, ':')) == NULL)
+ if ((colon = strchr(arg, ':')) == NULL)
return 0;
/*
fprintf(stderr, "unknown host: %s\n", arg);
return -1;
} else {
- local = *(long *)hp->h_addr;
+ local = *(u_int32_t *)hp->h_addr;
if (our_name[0] == 0) {
strncpy(our_name, arg, MAXNAMELEN);
our_name[MAXNAMELEN-1] = 0;
fprintf(stderr, "unknown host: %s\n", colon);
return -1;
} else {
- remote = *(long *)hp->h_addr;
+ remote = *(u_int32_t *)hp->h_addr;
if (remote_name[0] == 0) {
strncpy(remote_name, colon, MAXNAMELEN);
remote_name[MAXNAMELEN-1] = 0;
setipdefault()
{
struct hostent *hp;
- uint32 local;
+ u_int32_t local;
ipcp_options *wo = &ipcp_wantoptions[0];
/*
wo->accept_local = 1; /* don't insist on this default value */
if ((hp = gethostbyname(hostname)) == NULL)
return;
- local = *(long *)hp->h_addr;
+ local = *(u_int32_t *)hp->h_addr;
if (local != 0 && !bad_ip_adrs(local))
wo->ouraddr = local;
}
setnetmask(argv)
char **argv;
{
- uint32 mask;
+ u_int32_t mask;
if ((mask = inet_addr(*argv)) == -1 || (netmask & ~mask) != 0) {
fprintf(stderr, "Invalid netmask %s\n", *argv);
return (1);
}
-/*
- * Return user specified netmask. A value of zero means no netmask has
- * been set.
- */
-/* ARGSUSED */
-uint32
-GetMask(addr)
- uint32 addr;
-{
- return(netmask);
-}
-
-
static int
setcrtscts()
{
return int_option(*argv, &lcp_fsm[0].timeouttime);
}
-static int setlcpterm(argv)
+static int
+setlcpterm(argv)
char **argv;
{
return int_option(*argv, &lcp_fsm[0].maxtermtransmits);
}
-static int setlcpconf(argv)
+static int
+setlcpconf(argv)
char **argv;
{
return int_option(*argv, &lcp_fsm[0].maxconfreqtransmits);
}
-static int setlcpfails(argv)
+static int
+setlcpfails(argv)
char **argv;
{
return int_option(*argv, &lcp_fsm[0].maxnakloops);
}
-static int setipcptimeout(argv)
+static int
+setipcptimeout(argv)
char **argv;
{
return int_option(*argv, &ipcp_fsm[0].timeouttime);
}
-static int setipcpterm(argv)
+static int
+setipcpterm(argv)
char **argv;
{
return int_option(*argv, &ipcp_fsm[0].maxtermtransmits);
}
-static int setipcpconf(argv)
+static int
+setipcpconf(argv)
char **argv;
{
return int_option(*argv, &ipcp_fsm[0].maxconfreqtransmits);
}
-static int setipcpfails(argv)
+static int
+setipcpfails(argv)
char **argv;
{
return int_option(*argv, &lcp_fsm[0].maxnakloops);
}
-static int setpaptimeout(argv)
+static int
+setpaptimeout(argv)
char **argv;
{
return int_option(*argv, &upap[0].us_timeouttime);
}
-static int setpapreqs(argv)
+static int
+setpapreqs(argv)
char **argv;
{
return int_option(*argv, &upap[0].us_maxtransmits);
}
-static int setchaptimeout(argv)
+static int
+setchaptimeout(argv)
char **argv;
{
return int_option(*argv, &chap[0].timeouttime);
}
-static int setchapchal(argv)
+static int
+setchapchal(argv)
char **argv;
{
return int_option(*argv, &chap[0].max_transmits);
}
-static int setchapintv(argv)
+static int
+setchapintv(argv)
char **argv;
{
return int_option(*argv, &chap[0].chal_interval);
}
-static int setbsdcomp(argv)
+static int
+setbsdcomp(argv)
char **argv;
{
int rbits, abits;
progname);
return 0;
}
- if (rbits != 0 && (rbits < MIN_BSD_BITS || rbits > MAX_BSD_BITS)
- || abits != 0 && (abits < MIN_BSD_BITS || abits > MAX_BSD_BITS)) {
+ if (rbits != 0 && (rbits < BSD_MIN_BITS || rbits > BSD_MAX_BITS)
+ || abits != 0 && (abits < BSD_MIN_BITS || abits > BSD_MAX_BITS)) {
fprintf(stderr, "%s: bsdcomp option values must be 0 or %d .. %d\n",
- progname, MIN_BSD_BITS, MAX_BSD_BITS);
+ progname, BSD_MIN_BITS, BSD_MAX_BITS);
return 0;
}
if (rbits > 0) {
return 1;
}
-static int setnobsdcomp()
+static int
+setnobsdcomp()
{
ccp_wantoptions[0].bsd_compress = 0;
ccp_allowoptions[0].bsd_compress = 0;
+ return 1;
+}
+
+static int
+setipparam(argv)
+ char **argv;
+{
+ ipparam = strdup(*argv);
+ if (ipparam == NULL)
+ novm("ipparam string");
+
+ return 1;
+}
+
+static int
+setpapcrypt()
+{
+ cryptpap = 1;
+ return 1;
}
+
+#ifdef _linux_
+static int setidle (argv)
+ char **argv;
+{
+ return int_option(*argv, &idle_time_limit);
+}
+#endif