*/
#ifndef lint
-static char rcsid[] = "$Id: main.c,v 1.8 1994/05/01 11:44:43 paulus Exp $";
+static char rcsid[] = "$Id: main.c,v 1.10 1994/05/18 06:00:48 paulus Exp $";
#endif
#define SETSID
#include <syslog.h>
#include <netdb.h>
#include <utmp.h>
+#include <pwd.h>
#include <sys/wait.h>
/*
* /etc/ppp/options exists.
*/
#ifndef REQ_SYSOPTIONS
-#define REQ_SYSOPTIONS 0
-#endif
-
-#ifdef STREAMS
-#undef SGTTY
+#define REQ_SYSOPTIONS 1
#endif
#ifdef SGTTY
char hostname[MAXNAMELEN]; /* Our hostname */
char our_name[MAXNAMELEN];
char remote_name[MAXNAMELEN];
+static char pidfilename[MAXPATHLEN];
static pid_t pid; /* Our pid */
static pid_t pgrpid; /* Process Group ID */
-static char pidfilename[MAXPATHLEN];
+uid_t uid; /* Our real user-id */
char devname[MAXPATHLEN] = "/dev/tty"; /* Device name */
int default_device = TRUE; /* use default device (stdin/out) */
-int fd; /* Device file descriptor */
+int fd = -1; /* Device file descriptor */
int s; /* Socket file descriptor */
int phase; /* where the link is at */
void (*) (void *, char *, ...), void *));
void pr_log __ARGS((void *, char *, ...));
-#ifdef STREAMS
extern char *ttyname __ARGS((int));
-#endif
extern char *getlogin __ARGS((void));
/*
struct cmd *cmdp;
FILE *pidfile;
char *p;
+ struct passwd *pw;
-#ifdef STREAMS
- p = ttyname(fileno(stdin));
+ p = ttyname(0);
if (p)
strcpy(devname, p);
-#endif
if (gethostname(hostname, MAXNAMELEN) < 0 ) {
perror("couldn't get hostname");
hostname[MAXNAMELEN-1] = 0;
pid = getpid();
+ uid = getuid();
if (!ppp_available()) {
fprintf(stderr, "Sorry - PPP is not available on this system\n");
progname = *argv;
- if (!options_from_file(_PATH_SYSOPTIONS, REQ_SYSOPTIONS) ||
+ if (!options_from_file(_PATH_SYSOPTIONS, REQ_SYSOPTIONS, 0) ||
!options_from_user() ||
- !parse_args(argc-1, argv+1))
+ !parse_args(argc-1, argv+1) ||
+ !options_for_tty())
die(1);
check_auth_options();
setipdefault();
magic_init();
p = getlogin();
- if (p == NULL)
- p = "(unknown)";
+ if (p == NULL) {
+ pw = getpwuid(uid);
+ if (pw != NULL && pw->pw_name != NULL)
+ p = pw->pw_name;
+ else
+ p = "(unknown)";
+ }
syslog(LOG_NOTICE, "pppd %s.%d started by %s, uid %d",
- VERSION, PATCHLEVEL, p, getuid());
+ VERSION, PATCHLEVEL, p, uid);
#ifdef SETSID
/*
int fd, local;
{
#ifndef SGTTY
- int speed;
+ int speed, x;
struct termios tios;
if (tcgetattr(fd, &tios) < 0) {
die(1);
}
+#ifdef ultrix
+ x = 0;
+ if (ioctl(fd, (crtscts || modem)? TIOCMODEM: TIOCNMODEM, &x) < 0)
+ syslog(LOG_WARNING, "TIOC(N)MODEM: %m");
+ if (ioctl(fd, (local || !modem)? TIOCNCAR: TIOCCAR) < 0)
+ syslog(LOG_WARNING, "TIOC(N)CAR: %m");
+#endif
+
#else /* SGTTY */
int speed;
struct sgttyb sgttyb;
if (modem)
setdtr(fd, FALSE);
- if (fcntl(fd, F_SETFL, initfdflags) < 0)
+ if (initfdflags != -1 && fcntl(fd, F_SETFL, initfdflags) < 0)
syslog(LOG_WARNING, "fcntl(F_SETFL, fdflags): %m");
disestablish_ppp();