- if (lowdcd(0))
- syslog(LOG_NOTICE,
- "connection closed: loss of carrier %s%d: remote %s\n",
- SLIPIFNAME, unit, dstaddr);
- else if (lowdtr(0))
- syslog(LOG_NOTICE,
- "connection closed by foreign host %s%d: remote %s\n",
- SLIPIFNAME, unit, dstaddr);
-
- if (ioctl(0, TIOCSETD, (caddr_t)&odisc) < 0) {
- syslog(LOG_ERR, "ioctl(TIOCSETD) (2): %m");
- exit(1);
- }
- if (ioctl(0, TCSETA, (caddr_t)&otios) < 0) {
- syslog(LOG_ERR, "ioctl (TCSETA) (2): %m");
- exit(1);
- }
- exit(0);
-}
-
-findid(name)
- char *name;
-{
- char buf[BUFSIZ];
- static char mode[16];
- static char laddr[16];
- static char raddr[16];
- static char mask[16];
- char user[16];
- FILE *fp;
- struct passwd *pw;
- int n;
-
- if (name == NULL && (pw = getpwuid(getuid())) == NULL) {
- fprintf(stderr, "Your UID (%d) is unknown\n", getuid());
- syslog(LOG_ERR, "UID (%d) is unknown\n", getuid());
- exit(1);
- } else if (name == NULL)
- name = pw->pw_name;
- if ((fp = fopen(Accessfile, "r")) == NULL) {
- perror(Accessfile);
- syslog(LOG_ERR, "%s: %m\n", Accessfile);
- exit(3);
- }
- while (fgets(buf, sizeof(buf) - 1, fp)) {
- if (ferror(fp))
- break;
- n = sscanf(buf, "%15s%*[ \t]%15s%*[ \t]%15s%*[ \t]%15s%*[ \t]%15s\n",
- user, mode, laddr, raddr, mask);
- if (user[0] == '#' || n != 5)
- continue;
- if (strcmp(user, name) == 0) {
- char *p,*q; int val, i, domore;
-
- p = q = mode; val = 0;
- loop:
- while (isalnum(*p)) p++;
- if(ispunct(*p) || *p == '\0') {
- if(ispunct(*p)) domore = 1; else domore = 0;
- *p++ = '\0' ;
- for (i = 0; i <
- sizeof(modes)/sizeof(struct slip_modes)
- ; i++) {
- if (strcmp(modes[i].sm_name, q) == 0) {
- val |= modes[i].sm_value ;
- break;
- } ;
-}
- q = p;
- if(domore)goto loop;
- }
-
- slip_mode = val ;
- localaddr = laddr;
- dstaddr = raddr;
- netmask = mask;
- fclose(fp);
- return 0;
- }
- if (feof(fp))
- break;
- }
- fputs("SLIP access denied\n", stderr);
- syslog(LOG_ERR, "SLIP access denied for %s\n", name);
- exit(4);
-}
-
-in_getaddr(s, saddr, which)
- char *s;
- struct sockaddr *saddr;
- int which;
-{
- register struct sockaddr_in *sin = (struct sockaddr_in *)saddr;
- struct hostent *hp;
- struct netent *np;
- int val;
- extern struct in_addr inet_makeaddr();
-
- bzero((caddr_t)saddr, sizeof *saddr);
- if (which == ADDR) {
- sin->sin_len = sizeof (*sin);
- sin->sin_family = AF_INET;
- } else
- sin->sin_len = 8;
- val = inet_addr(s);
- if (val != -1) {
- sin->sin_addr.s_addr = val;
- return;
- }
- hp = gethostbyname(s);
- if (hp) {
- sin->sin_family = hp->h_addrtype;
- bcopy(hp->h_addr, (char *)&sin->sin_addr, hp->h_length);
- return;
- }
- np = getnetbyname(s);
- if (np) {
- sin->sin_family = np->n_addrtype;
- sin->sin_addr = inet_makeaddr(np->n_net, INADDR_ANY);
- return;
- }
- fprintf(stderr, "sliplogin: %s: bad value\n", s);
- syslog(LOG_ERR, "%s: bad value\n", s);
- exit(1);