*/
#ifndef lint
-static char rcsid[] = "$Id: main.c,v 1.35 1996/08/28 06:41:16 paulus Exp $";
+static char rcsid[] = "$Id: main.c,v 1.39 1996/10/08 06:43:49 paulus Exp $";
#endif
#include <stdio.h>
#include "pathnames.h"
#include "patchlevel.h"
+#ifdef CBCP_SUPPORT
+#include "cbcp.h"
+#endif
+
#if defined(SUNOS4)
extern char *strerror();
#endif
#define O_NONBLOCK O_NDELAY
#endif
-#ifdef PRIMITIVE_SYSLOG
+#ifdef ULTRIX
#define setlogmask(x)
#endif
&lcp_protent,
&pap_protent,
&chap_protent,
+#ifdef CBCP_SUPPORT
+ &cbcp_protent,
+#endif
&ipcp_protent,
&ccp_protent,
#ifdef IPX_CHANGE
strcpy(default_devnam, devnam);
/* Initialize syslog facilities */
-#ifdef PRIMITIVE_SYSLOG
+#ifdef ULTRIX
openlog("pppd", LOG_PID);
#else
openlog("pppd", LOG_PID | LOG_NDELAY, LOG_PPP);
#endif
if (gethostname(hostname, MAXNAMELEN) < 0 ) {
- syslog(LOG_ERR, "couldn't get hostname: %m");
+ option_error("Couldn't get hostname: %m");
die(1);
}
hostname[MAXNAMELEN-1] = 0;
exit(1);
}
+ /*
+ * Check that we are running as root.
+ */
+ if (geteuid() != 0) {
+ option_error("must be root to run %s, since it is not setuid-root",
+ argv[0]);
+ die(1);
+ }
+
/*
* Check that the options given are valid and consistent.
*/
* real serial device back to its normal mode of operation.
*/
clean_check();
-#ifdef _linux_
- disestablish_ppp(ttyfd);
-#endif
if (demand)
restore_loop();
-#ifndef _linux_
disestablish_ppp(ttyfd);
-#endif
/*
* Run disconnector script, if requested.
#define OUTCHAR(c) (buflen > 0? (--buflen, *buf++ = (c)): 0)
int
-vfmtmsg(char *buf, int buflen, char *fmt, va_list args)
+vfmtmsg(buf, buflen, fmt, args)
+ char *buf;
+ int buflen;
+ char *fmt;
+ va_list args;
{
int c, i, n;
int width, prec, fillch;
unsigned long val;
char *str, *f, *buf0;
unsigned char *p;
- va_list a;
+ void *a;
char num[32];
time_t t;
- static char hexchars[16] = "0123456789abcdef";
+ static char hexchars[] = "0123456789abcdef";
buf0 = buf;
--buflen;
break;
case 'r':
f = va_arg(args, char *);
- a = va_arg(args, va_list);
+ /*
+ * XXX We assume a va_list is either a pointer or an array, so
+ * what gets passed for a va_list is like a void * in some sense.
+ */
+ a = va_arg(args, void *);
n = vfmtmsg(buf, buflen + 1, f, a);
buf += n;
buflen -= n;