sundry fixes and reformattings
[ppp.git] / pppd / sys-linux.c
index 19755b0c6bcf64dbff0d5823cb7e39208eb27381..7d203c7a3a8cd0b6a2aafd729cde519b687a9643 100644 (file)
  * TODO:
  */
 
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+#include <sys/errno.h>
+
 #include <stdio.h>
+#include <stdlib.h>
 #include <syslog.h>
 #include <string.h>
 #include <time.h>
 #include <memory.h>
 #include <utmp.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/time.h>
-#include <sys/errno.h>
 #include <mntent.h>
+#include <signal.h>
+#include <fcntl.h>
 
 #include <net/if.h>
 #include <net/ppp_defs.h>
 #include <net/if_arp.h>
-#include <linux/ppp.h>
-#include <linux/route.h>
+#include <net/if_ppp.h>
+#include <net/if_route.h>
 #include <linux/if_ether.h>
 #include <netinet/in.h>
-#include <signal.h>
 
 #include "pppd.h"
 #include "fsm.h"
@@ -91,27 +94,10 @@ void sys_init(void)
     }
 }
 
-/*
- * ccp_fatal_error - returns 1 if decompression was disabled as a
- * result of an error detected after decompression of a packet,
- * 0 otherwise.  This is necessary because of patent nonsense.
- */
-int ccp_fatal_error (int unit)
-{
-    int x;
-
-    if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
-       syslog(LOG_ERR, "ioctl(PPPIOCGFLAGS): %m");
-       return 0;
-    }
-    return x & SC_DC_FERROR;
-}
-
 /*
  * note_debug_level - note a change in the debug level.
  */
-
-void note_debug_level(void)
+void note_debug_level (void)
 {
     if (debug) {
        syslog(LOG_INFO, "Debug turned ON, Level %d", debug);
@@ -226,99 +212,97 @@ void disestablish_ppp(void)
  * List of valid speeds.
  */
 struct speed {
-    unsigned int speed_int;
-    int          speed_val;
+    int speed_int, speed_val;
 } speeds[] = {
 #ifdef B50
-    { 50U, B50 },
+    { 50, B50 },
 #endif
 #ifdef B75
-    { 75U, B75 },
+    { 75, B75 },
 #endif
 #ifdef B110
-    { 110U, B110 },
+    { 110, B110 },
 #endif
 #ifdef B134
-    { 134U, B134 },
+    { 134, B134 },
 #endif
 #ifdef B150
-    { 150U, B150 },
+    { 150, B150 },
 #endif
 #ifdef B200
-    { 200U, B200 },
+    { 200, B200 },
 #endif
 #ifdef B300
-    { 300U, B300 },
+    { 300, B300 },
 #endif
 #ifdef B600
-    { 600U, B600 },
+    { 600, B600 },
 #endif
 #ifdef B1200
-    { 1200U, B1200 },
+    { 1200, B1200 },
 #endif
 #ifdef B1800
-    { 1800U, B1800 },
+    { 1800, B1800 },
 #endif
 #ifdef B2000
-    { 2000U, B2000 },
+    { 2000, B2000 },
 #endif
 #ifdef B2400
-    { 2400U, B2400 },
+    { 2400, B2400 },
 #endif
 #ifdef B3600
-    { 3600U, B3600 },
+    { 3600, B3600 },
 #endif
 #ifdef B4800
-    { 4800U, B4800 },
+    { 4800, B4800 },
 #endif
 #ifdef B7200
-    { 7200U, B7200 },
+    { 7200, B7200 },
 #endif
 #ifdef B9600
-    { 9600U, B9600 },
+    { 9600, B9600 },
 #endif
 #ifdef B19200
-    { 19200U, B19200 },
+    { 19200, B19200 },
 #endif
 #ifdef B38400
-    { 38400U, B38400 },
+    { 38400, B38400 },
 #endif
 #ifdef EXTA
-    { 19200U, EXTA },
+    { 19200, EXTA },
 #endif
 #ifdef EXTB
-    { 38400U, EXTB },
+    { 38400, EXTB },
 #endif
 #ifdef B57600
-    { 57600U, B57600 },
+    { 57600, B57600 },
 #endif
 #ifdef B115200
-    { 115200U, B115200 },
+    { 115200, B115200 },
 #endif
-    { 0U, 0 }
+    { 0, 0 }
 };
 
 /*
  * Translate from bits/second to a speed_t.
  */
-int translate_speed (unsigned int bps)
+int translate_speed (int bps)
 {
     struct speed *speedp;
 
-    if (bps == 0U)
+    if (bps == 0)
        return 0;
     for (speedp = speeds; speedp->speed_int; speedp++)
        if (bps == speedp->speed_int)
            return speedp->speed_val;
-    syslog(LOG_WARNING, "speed %u not supported", bps);
+    syslog(LOG_WARNING, "speed %d not supported", bps);
     return 0;
 }
 
 /*
  * Translate from a speed_t to bits/second.
  */
-
-unsigned int baud_rate_of (int speed)
+int baud_rate_of (int speed)
 {
     struct speed *speedp;
 
@@ -335,11 +319,9 @@ unsigned int baud_rate_of (int speed)
  * at the requested speed, etc.  If `local' is true, set CLOCAL
  * regardless of whether the modem option was specified.
  */
-
 void set_up_tty (int fd, int local)
 {
-    unsigned int speed;
-    int x;
+    int speed, x;
     struct termios tios;
 
     if (tcgetattr(fd, &tios) < 0) {
@@ -350,22 +332,26 @@ void set_up_tty (int fd, int local)
     if (!restore_term)
        inittermios = tios;
 
-    tios.c_cflag &= ~(CSIZE | CSTOPB | PARENB | CLOCAL | CRTSCTS);
+    tios.c_cflag &= ~(CSIZE | CSTOPB | PARENB | CLOCAL);
     if (crtscts == 1)
        tios.c_cflag |= CRTSCTS;
+    else if (crtscts < 0)
+       tios.c_cflag &= ~CRTSCTS;
 
     tios.c_cflag |= CS8 | CREAD | HUPCL;
+
     if (local || !modem)
        tios.c_cflag |= CLOCAL;
-    tios.c_iflag = IGNBRK | IGNPAR;
-    tios.c_oflag = 0;
-    tios.c_lflag = 0;
-    tios.c_cc[VMIN] = 1;
-    tios.c_cc[VTIME] = 0;
+
+    tios.c_iflag      = IGNBRK | IGNPAR;
+    tios.c_oflag      = 0;
+    tios.c_lflag      = 0;
+    tios.c_cc[VMIN]   = 1;
+    tios.c_cc[VTIME]  = 0;
 
     if (crtscts == 2) {
-       tios.c_iflag |= IXOFF;
-       tios.c_cc[VSTOP] = 0x13;        /* DC3 = XOFF = ^S */
+       tios.c_iflag     |= IXOFF;
+       tios.c_cc[VSTOP]  = 0x13;       /* DC3 = XOFF = ^S */
        tios.c_cc[VSTART] = 0x11;       /* DC1 = XON  = ^Q */
     }
 
@@ -409,7 +395,8 @@ void setdtr (int fd, int on)
 /*
  * restore_tty - restore the terminal to the saved settings.
  */
-void restore_tty(void)
+
+void restore_tty (void)
 {
     if (restore_term) {
        if (tcsetattr(fd, TCSAFLUSH, &inittermios) < 0)
@@ -442,7 +429,6 @@ void output (int unit, unsigned char *p, int len)
  * for the length of time specified by *timo (indefinite
  * if timo is NULL).
  */
-
 void wait_input (struct timeval *timo)
 {
     fd_set ready;
@@ -457,7 +443,6 @@ void wait_input (struct timeval *timo)
     }
 }
 
-
 /*
  * read_packet - get a PPP packet from the serial device.
  */
@@ -562,114 +547,148 @@ void ppp_recv_config (int unit,int mru,u_int32_t asyncmap,int pcomp,int accomp)
  * is acceptable for use.
  */
 int ccp_test (int unit, u_char *opt_ptr, int opt_len, int for_transmit)
-{
+  {
     struct ppp_option_data data;
 
-    data.ptr = opt_ptr;
-    data.length = opt_len;
+    data.ptr      = opt_ptr;
+    data.length   = opt_len;
     data.transmit = for_transmit;
+
     return ioctl(fd, PPPIOCSCOMPRESS, (caddr_t) &data) >= 0;
-}
+  }
 
 /*
  * ccp_flags_set - inform kernel about the current state of CCP.
  */
+
 void ccp_flags_set (int unit, int isopen, int isup)
-{
+  {
     int x;
 
-    if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
+    if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &x) < 0)
+      {
        syslog(LOG_ERR, "ioctl (PPPIOCGFLAGS): %m");
-       return;
-    }
-    x = isopen? x | SC_CCP_OPEN: x &~ SC_CCP_OPEN;
-    x = isup? x | SC_CCP_UP: x &~ SC_CCP_UP;
-    if (ioctl(fd, PPPIOCSFLAGS, (caddr_t) &x) < 0)
-       syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS): %m");
-}
+      }
+    else
+      {
+       x = isopen? x | SC_CCP_OPEN : x &~ SC_CCP_OPEN;
+       x = isup?   x | SC_CCP_UP   : x &~ SC_CCP_UP;
+
+       if (ioctl(fd, PPPIOCSFLAGS, (caddr_t) &x) < 0)
+         {
+           syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS): %m");
+         }
+      }
+  }
+
+/*
+ * ccp_fatal_error - returns 1 if decompression was disabled as a
+ * result of an error detected after decompression of a packet,
+ * 0 otherwise.  This is necessary because of patent nonsense.
+ */
+
+int ccp_fatal_error (int unit)
+  {
+    int x;
+
+    if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &x) < 0)
+      {
+       syslog(LOG_ERR, "ioctl(PPPIOCGFLAGS): %m");
+       return 0;
+      }
+    return x & SC_DC_FERROR;
+  }
 
 /*
  * sifvjcomp - config tcp header compression
  */
 
 int sifvjcomp (int u, int vjcomp, int cidcomp, int maxcid)
-{
+  {
     u_int x;
 
-    if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &x) < 0) {
+    if (ioctl(fd, PPPIOCGFLAGS, (caddr_t) &x) < 0)
+      {
        syslog(LOG_ERR, "ioctl (PPPIOCGFLAGS): %m");
        return 0;
-    }
+      }
 
     x = vjcomp  ? x | SC_COMP_TCP     : x &~ SC_COMP_TCP;
     x = cidcomp ? x & ~SC_NO_TCP_CCID : x | SC_NO_TCP_CCID;
 
-    if(ioctl(fd, PPPIOCSFLAGS, (caddr_t) &x) < 0) {
+    if (ioctl(fd, PPPIOCSFLAGS, (caddr_t) &x) < 0)
+      {
        syslog(LOG_ERR, "ioctl(PPPIOCSFLAGS): %m");
        return 0;
-    }
+      }
 
-    if (vjcomp) {
-        if (ioctl (fd, PPPIOCSMAXCID, (caddr_t) &maxcid) < 0) {
+    if (vjcomp)
+      {
+        if (ioctl (fd, PPPIOCSMAXCID, (caddr_t) &maxcid) < 0)
+         {
            syslog (LOG_ERR, "ioctl(PPPIOCSFLAGS): %m");
            return 0;
-        }
-    }
+         }
+      }
 
     return 1;
-}
+  }
 
 /*
  * sifup - Config the interface up and enable IP packets to pass.
  */
 
 int sifup (int u)
-{
+  {
     struct ifreq ifr;
 
     strncpy(ifr.ifr_name, ifname, sizeof (ifr.ifr_name));
-    if (ioctl(sockfd, SIOCGIFFLAGS, (caddr_t) &ifr) < 0) {
+    if (ioctl(sockfd, SIOCGIFFLAGS, (caddr_t) &ifr) < 0)
+      {
        syslog(LOG_ERR, "ioctl (SIOCGIFFLAGS): %m");
        return 0;
-    }
+      }
 
     ifr.ifr_flags |= (IFF_UP | IFF_POINTOPOINT);
-    if (ioctl(sockfd, SIOCSIFFLAGS, (caddr_t) &ifr) < 0) {
+    if (ioctl(sockfd, SIOCSIFFLAGS, (caddr_t) &ifr) < 0)
+      {
        syslog(LOG_ERR, "ioctl(SIOCSIFFLAGS): %m");
        return 0;
-    }
+      }
     return 1;
-}
+  }
 
 /*
  * sifdown - Config the interface down and disable IP.
  */
 
 int sifdown (int u)
-{
+  {
     struct ifreq ifr;
 
     strncpy(ifr.ifr_name, ifname, sizeof (ifr.ifr_name));
-    if (ioctl(sockfd, SIOCGIFFLAGS, (caddr_t) &ifr) < 0) {
+    if (ioctl(sockfd, SIOCGIFFLAGS, (caddr_t) &ifr) < 0)
+      {
        syslog(LOG_ERR, "ioctl (SIOCGIFFLAGS): %m");
        return 0;
-    }
+      }
 
     ifr.ifr_flags &= ~IFF_UP;
     ifr.ifr_flags |= IFF_POINTOPOINT;
-    if (ioctl(sockfd, SIOCSIFFLAGS, (caddr_t) &ifr) < 0) {
+    if (ioctl(sockfd, SIOCSIFFLAGS, (caddr_t) &ifr) < 0)
+      {
        syslog(LOG_ERR, "ioctl(SIOCSIFFLAGS): %m");
        return 0;
-    }
+      }
     return 1;
-}
+  }
 
 /*
  * sifaddr - Config the interface IP addresses and netmask.
  */
 
 int sifaddr (int unit, int our_adr, int his_adr, int net_mask)
-{
+  {
     struct ifreq   ifr; 
     struct rtentry rt;
     
@@ -682,31 +701,39 @@ int sifaddr (int unit, int our_adr, int his_adr, int net_mask)
  *  Set our IP address
  */
     ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr = our_adr;
-    if (ioctl(sockfd, SIOCSIFADDR, (caddr_t) &ifr) < 0) {
+    if (ioctl(sockfd, SIOCSIFADDR, (caddr_t) &ifr) < 0)
+      {
        if (errno != EEXIST)
+         {
            syslog (LOG_ERR, "ioctl(SIOCAIFADDR): %m");
+         }
         else
+         {
            syslog (LOG_WARNING, "ioctl(SIOCAIFADDR): Address already exists");
+         }
         return (0);
-    } 
+      
 /*
  *  Set the gateway address
  */
     ((struct sockaddr_in *) &ifr.ifr_dstaddr)->sin_addr.s_addr = his_adr;
-    if (ioctl(sockfd, SIOCSIFDSTADDR, (caddr_t) &ifr) < 0) {
+    if (ioctl(sockfd, SIOCSIFDSTADDR, (caddr_t) &ifr) < 0)
+      {
        syslog (LOG_ERR, "ioctl(SIOCSIFDSTADDR): %m"); 
        return (0);
-    } 
+      
 /*
  *  Set the netmask
  */
-    if (net_mask != 0) {
+    if (net_mask != 0)
+      {
        ((struct sockaddr_in *) &ifr.ifr_netmask)->sin_addr.s_addr = net_mask;
-       if (ioctl(sockfd, SIOCSIFNETMASK, (caddr_t) &ifr) < 0) {
+       if (ioctl(sockfd, SIOCSIFNETMASK, (caddr_t) &ifr) < 0)
+         {
            syslog (LOG_ERR, "ioctl(SIOCSIFNETMASK): %m"); 
            return (0);
-        } 
-    }
+         
+      }
 /*
  *  Add the device route
  */
@@ -720,12 +747,13 @@ int sifaddr (int unit, int our_adr, int his_adr, int net_mask)
     ((struct sockaddr_in *) &rt.rt_dst)->sin_addr.s_addr     = his_adr;
     rt.rt_flags = RTF_UP | RTF_HOST;
 
-    if (ioctl(sockfd, SIOCADDRT, &rt) < 0) {
+    if (ioctl(sockfd, SIOCADDRT, &rt) < 0)
+      {
         syslog (LOG_ERR, "ioctl(SIOCADDRT) device route: %m");
         return (0);
-    }
+      }
     return 1;
-}
+  }
 
 /*
  * cifaddr - Clear the interface IP addresses, and delete routes
@@ -733,7 +761,7 @@ int sifaddr (int unit, int our_adr, int his_adr, int net_mask)
  */
 
 int cifaddr (int unit, int our_adr, int his_adr)
-{
+  {
     struct rtentry rt;
 /*
  *  Delete the route through the device
@@ -748,12 +776,13 @@ int cifaddr (int unit, int our_adr, int his_adr)
     ((struct sockaddr_in *) &rt.rt_dst)->sin_addr.s_addr     = his_adr;
     rt.rt_flags = RTF_UP | RTF_HOST;
 
-    if (ioctl(sockfd, SIOCDELRT, &rt) < 0) {
+    if (ioctl(sockfd, SIOCDELRT, &rt) < 0)
+      {
         syslog (LOG_ERR, "ioctl(SIOCDELRT) device route: %m");
         return (0);
-    }
+      }
     return 1;
-}
+  }
 
 /*
  * path_to_route - determine the path to the proc file system data
@@ -773,17 +802,22 @@ static int defaultroute_exists (void);
  */
 
 static char *path_to_route (void)
-{
+  {
     struct mntent *mntent;
     FILE *fp;
 
     fp = fopen (MOUNTED, "r");
-    if (fp != 0) {
-        while ((mntent = getmntent (fp)) != 0) {
+    if (fp != 0)
+      {
+        while ((mntent = getmntent (fp)) != 0)
+         {
            if (strcmp (mntent->mnt_type, MNTTYPE_IGNORE) == 0)
+             {
                continue;
+             }
 
-           if (strcmp (mntent->mnt_type, "proc") == 0) {
+           if (strcmp (mntent->mnt_type, "proc") == 0)
+             {
                strncpy (route_buffer, mntent->mnt_dir,
                         sizeof (route_buffer)-10);
                route_buffer [sizeof (route_buffer)-10] = '\0';
@@ -791,66 +825,75 @@ static char *path_to_route (void)
 
                fclose (fp);
                return (route_buffer);
-           }
-       }
+             }
+         }
        fclose (fp);
-    }
+      }
     syslog (LOG_ERR, "proc file system not mounted");
     return 0;
-}
+  }
 
 /*
  * open_route_table - open the interface to the route table
  */
 
 static int open_route_table (void)
-{
+  {
     char *path;
 
     if (route_fd != (FILE *) 0)
+      {
         close_route_table();
+      }
 
     path = path_to_route();
     if (path == NULL)
+      {
         return 0;
+      }
 
     route_fd = fopen (path, "r");
-    if (route_fd == (FILE *) 0) {
+    if (route_fd == (FILE *) 0)
+      {
         syslog (LOG_ERR, "can not open %s: %m", path);
         return 0;
-    }
+      }
 
     /* read and discard the header line. */
-    if (fgets (route_buffer, sizeof (route_buffer), route_fd) == (char *) 0) {
+    if (fgets (route_buffer, sizeof (route_buffer), route_fd) == (char *) 0)
+      {
         close_route_table();
        return 0;
-    }
+      }
     return 1;
-}
+  }
 
 /*
  * close_route_table - close the interface to the route table
  */
 
 static void close_route_table (void)
-{
-    if (route_fd != (FILE *) 0) {
+  {
+    if (route_fd != (FILE *) 0)
+      {
         fclose (route_fd);
         route_fd = (FILE *) 0;
-    }
-}
+      }
+  }
 
 /*
  * read_route_table - read the next entry from the route table
  */
 
 static int read_route_table (struct rtentry *rt)
-{
+  {
     static char delims[] = " \t\n";
     char *dev_ptr, *ptr, *dst_ptr, *gw_ptr, *flag_ptr;
 
     if (fgets (route_buffer, sizeof (route_buffer), route_fd) == (char *) 0)
+      {
         return 0;
+      }
 
     memset (rt, '\0', sizeof (struct rtentry));
 
@@ -860,34 +903,40 @@ static int read_route_table (struct rtentry *rt)
     flag_ptr = strtok (NULL,         delims); /* flags */
 
     ((struct sockaddr_in *) &rt->rt_dst)->sin_addr.s_addr =
-      strtoul (dst_ptr, NULL, 16); /* network order */
+      strtoul (dst_ptr, NULL, 16);
 
     ((struct sockaddr_in *) &rt->rt_gateway)->sin_addr.s_addr =
-      strtoul (gw_ptr, NULL, 16);  /* network order */
+      strtoul (gw_ptr, NULL, 16);
 
     rt->rt_flags = (short) strtoul (flag_ptr, NULL, 16);
     rt->rt_dev   = dev_ptr;
 
     return 1;
-}
+  }
 
 /*
  * defaultroute_exists - determine if there is a default route
  */
 
 static int defaultroute_exists (void)
-{
+  {
     struct rtentry rt;
     int    result = 0;
 
     if (!open_route_table())
+      {
         return 0;
+      }
 
-    while (read_route_table(&rt) != 0) {
+    while (read_route_table(&rt) != 0)
+      {
         if (rt.rt_flags & RTF_UP == 0)
+         {
            continue;
+         }
 
-        if (((struct sockaddr_in *) &rt.rt_dst)->sin_addr.s_addr == 0L) {
+        if (((struct sockaddr_in *) &rt.rt_dst)->sin_addr.s_addr == 0L)
+         {
            syslog (LOG_ERR,
                    "ppp not replacing existing default route to %s[%s]",
                    rt.rt_dev,
@@ -895,22 +944,24 @@ static int defaultroute_exists (void)
                               sin_addr.s_addr));
            result = 1;
            break;
-       }
-    }
+         }
+      }
     close_route_table();
     return result;
-}
+  }
 
 /*
  * sifdefaultroute - assign a default route through the address given.
  */
 
 int sifdefaultroute (int unit, int gateway)
-{
+  {
     struct rtentry rt;
 
     if (defaultroute_exists())
+      {
         return 0;
+      }
 
     memset (&rt, '\0', sizeof (rt));
     SET_SA_FAMILY (rt.rt_dst,     AF_INET);
@@ -918,19 +969,20 @@ int sifdefaultroute (int unit, int gateway)
     ((struct sockaddr_in *) &rt.rt_gateway)->sin_addr.s_addr = gateway;
     
     rt.rt_flags = RTF_UP | RTF_GATEWAY;
-    if (ioctl(sockfd, SIOCADDRT, &rt) < 0) {
+    if (ioctl(sockfd, SIOCADDRT, &rt) < 0)
+      {
        syslog (LOG_ERR, "default route ioctl(SIOCADDRT): %m");
        return 0;
-    }
+      }
     return 1;
-}
+  }
 
 /*
  * cifdefaultroute - delete a default route through the address given.
  */
 
 int cifdefaultroute (int unit, int gateway)
-{
+  {
     struct rtentry rt;
   
     SET_SA_FAMILY (rt.rt_dst,     AF_INET);
@@ -938,19 +990,20 @@ int cifdefaultroute (int unit, int gateway)
     ((struct sockaddr_in *) &rt.rt_gateway)->sin_addr.s_addr = gateway;
     
     rt.rt_flags = RTF_UP | RTF_GATEWAY;
-    if (ioctl(sockfd, SIOCDELRT, &rt) < 0) {
+    if (ioctl(sockfd, SIOCDELRT, &rt) < 0)
+      {
        syslog (LOG_ERR, "default route ioctl(SIOCDELRT): %m");
        return 0;
-    }
+      }
     return 1;
-}
+  }
 
 /*
  * sifproxyarp - Make a proxy ARP entry for the peer.
  */
 
 int sifproxyarp (int unit, u_int32_t his_adr)
-{
+  {
     struct arpreq arpreq;
 
     memset (&arpreq, '\0', sizeof(arpreq));
@@ -958,40 +1011,43 @@ int sifproxyarp (int unit, u_int32_t his_adr)
  * Get the hardware address of an interface on the same subnet
  * as our local address.
  */
-    if (!get_ether_addr(his_adr, &arpreq.arp_ha)) {
+    if (!get_ether_addr(his_adr, &arpreq.arp_ha))
+      {
        syslog(LOG_ERR, "Cannot determine ethernet address for proxy ARP");
        return 0;
-    }
+      }
     
     SET_SA_FAMILY(arpreq.arp_pa, AF_INET);
     ((struct sockaddr_in *) &arpreq.arp_pa)->sin_addr.s_addr = his_adr;
     arpreq.arp_flags = ATF_PERM | ATF_PUBL;
     
-    if (ioctl(sockfd, SIOCSARP, (caddr_t)&arpreq) < 0) {
+    if (ioctl(sockfd, SIOCSARP, (caddr_t)&arpreq) < 0)
+      {
        syslog(LOG_ERR, "ioctl(SIOCSARP): %m");
        return 0;
-    }
+      }
     return 1;
-}
+  }
 
 /*
  * cifproxyarp - Delete the proxy ARP entry for the peer.
  */
 
 int cifproxyarp (int unit, u_int32_t his_adr)
-{
+  {
     struct arpreq arpreq;
   
     memset (&arpreq, '\0', sizeof(arpreq));
     SET_SA_FAMILY(arpreq.arp_pa, AF_INET);
     
     ((struct sockaddr_in *) &arpreq.arp_pa)->sin_addr.s_addr = his_adr;
-    if (ioctl(sockfd, SIOCDARP, (caddr_t)&arpreq) < 0) {
+    if (ioctl(sockfd, SIOCDARP, (caddr_t)&arpreq) < 0)
+      {
        syslog(LOG_WARNING, "ioctl(SIOCDARP): %m");
        return 0;
-    }
+      }
     return 1;
-}
+  }
      
 /*
  * get_ether_addr - get the hardware address of an interface on the
@@ -999,7 +1055,7 @@ int cifproxyarp (int unit, u_int32_t his_adr)
  */
 
 int get_ether_addr (u_int32_t ipaddr, struct sockaddr *hwaddr)
-{
+  {
     struct ifreq *ifr, *ifend, *ifp;
     int i;
     u_int32_t ina, mask;
@@ -1010,10 +1066,11 @@ int get_ether_addr (u_int32_t ipaddr, struct sockaddr *hwaddr)
     
     ifc.ifc_len = sizeof(ifs);
     ifc.ifc_req = ifs;
-    if (ioctl(sockfd, SIOCGIFCONF, &ifc) < 0) {
+    if (ioctl(sockfd, SIOCGIFCONF, &ifc) < 0)
+      {
        syslog(LOG_ERR, "ioctl(SIOCGIFCONF): %m");
        return 0;
-    }
+      }
     MAINDEBUG ((LOG_DEBUG, "proxy arp: scanning %d interfaces for IP %s",
                ifc.ifc_len / sizeof(struct ifreq), ip_ntoa(ipaddr)));
 /*
@@ -1021,8 +1078,10 @@ int get_ether_addr (u_int32_t ipaddr, struct sockaddr *hwaddr)
  * address on the same subnet as `ipaddr'.
  */
     ifend = ifs + (ifc.ifc_len / sizeof(struct ifreq));
-    for (ifr = ifc.ifc_req; ifr < ifend; ifr++) {
-       if (ifr->ifr_addr.sa_family == AF_INET) {
+    for (ifr = ifc.ifc_req; ifr < ifend; ifr++)
+      {
+       if (ifr->ifr_addr.sa_family == AF_INET)
+         {
            ina = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr.s_addr;
            strncpy(ifreq.ifr_name, ifr->ifr_name, sizeof(ifreq.ifr_name));
             MAINDEBUG ((LOG_DEBUG, "proxy arp: examining interface %s",
@@ -1032,44 +1091,49 @@ int get_ether_addr (u_int32_t ipaddr, struct sockaddr *hwaddr)
  * or loopback.
  */
            if (ioctl(sockfd, SIOCGIFFLAGS, &ifreq) < 0)
+             {
                continue;
+             }
            if ((ifreq.ifr_flags &
                 (IFF_UP|IFF_BROADCAST|IFF_POINTOPOINT|IFF_LOOPBACK|IFF_NOARP))
                != (IFF_UP|IFF_BROADCAST))
+             {
                continue;
+             }
 /*
  * Get its netmask and check that it's on the right subnet.
  */
            if (ioctl(sockfd, SIOCGIFNETMASK, &ifreq) < 0)
+             {
                continue;
+             }
            mask = ((struct sockaddr_in *) &ifreq.ifr_addr)->sin_addr.s_addr;
            MAINDEBUG ((LOG_DEBUG, "proxy arp: interface addr %s mask %lx",
                        ip_ntoa(ina), ntohl(mask)));
            if (((ipaddr ^ ina) & mask) != 0)
+             {
                continue;
+             }
            break;
-       }
-    }
+         }
+      }
     
     if (ifr >= ifend)
+      {
         return 0;
+      }
 
     syslog(LOG_INFO, "found interface %s for proxy arp", ifreq.ifr_name);
 /*
  * Now get the hardware address.
  */
-    if (ioctl (s, SIOCGIFHWADDR, &ifreq) < 0) {
+    if (ioctl (sockfd, SIOCGIFHWADDR, &ifreq) < 0)
+      {
         syslog(LOG_ERR, "SIOCGIFHWADDR(%s): %m", ifreq.ifr_name);
         return 0;
-    }
-
-    /* Use the proper family for token ring support. */
-    if (ifreq.ifr_hwaddr.sa_family == 0)
-        hwaddr->sa_family = ARPHRD_ETHER;
-    else
-        hwaddr->sa_family = ifreq.ifr_hwaddr.sa_family;
+      }
 
-    /* Well, ethernet has the longest address so far . . . . */
+    hwaddr->sa_family = ARPHRD_ETHER;
     memcpy (&hwaddr->sa_data, &ifreq.ifr_hwaddr.sa_data, ETH_ALEN);
 
     MAINDEBUG ((LOG_DEBUG,
@@ -1081,7 +1145,7 @@ int get_ether_addr (u_int32_t ipaddr, struct sockaddr *hwaddr)
                (int) ((unsigned char *) &hwaddr->sa_data)[4],
                (int) ((unsigned char *) &hwaddr->sa_data)[5]));
     return 1;
-}
+  }
 
 /*
  * Internal routine to decode the version.modification.patch level
@@ -1089,60 +1153,70 @@ int get_ether_addr (u_int32_t ipaddr, struct sockaddr *hwaddr)
 
 static void decode_version (char *buf, int *version,
                            int *modification, int *patch)
-{
+  {
 
-  *version      = (int) strtoul (buf, &buf, 10);
-  *modification = 0;
-  *patch        = 0;
-
-  if (*buf == '.') {
-      ++buf;
-      *modification = (int) strtoul (buf, &buf, 10);
-      if (*buf == '.') {
-         ++buf;
-         *patch = (int) strtoul (buf, &buf, 10);
+    *version      = (int) strtoul (buf, &buf, 10);
+    *modification = 0;
+    *patch        = 0;
+    
+    if (*buf == '.')
+      {
+       ++buf;
+       *modification = (int) strtoul (buf, &buf, 10);
+       if (*buf == '.')
+         {
+           ++buf;
+           *patch = (int) strtoul (buf, &buf, 10);
+         }
+      }
+    
+    if (*buf != '\0')
+      {
+       *version      =
+       *modification =
+       *patch        = 0;
       }
   }
 
-  if (*buf != '\0') {
-      *version      =
-      *modification =
-      *patch        = 0;
-  }
-}
-
 /*
  * ppp_available - check whether the system has any ppp interfaces
  * (in fact we check whether we can do an ioctl on ppp0).
  */
 
 int ppp_available(void)
-{
+  {
     int s, ok;
     struct ifreq ifr;
-    int my_version, my_modification, my_patch;
+    int my_version,     my_modification,     my_patch;
 /*
  * Open a socket for doing the ioctl operations.
  */    
     s = socket(AF_INET, SOCK_DGRAM, 0);
     if (s < 0)
+      {
        return 0;
+      }
     
     strncpy (ifr.ifr_name, "ppp0", sizeof (ifr.ifr_name));
-    ok = ioctl(sockfd, SIOCGIFFLAGS, (caddr_t) &ifr) >= 0;
+    ok = ioctl(s, SIOCGIFFLAGS, (caddr_t) &ifr) >= 0;
 /*
  * Ensure that the hardware address is for PPP and not something else
  */
     if (ok != 0)
+      {
         ok = ioctl (s, SIOCGIFHWADDR, (caddr_t) &ifr) >= 0;
+      }
 
     if (ok != 0 && ifr.ifr_hwaddr.sa_family != ARPHRD_PPP)
+      {
         ok = 0;
+      }
 /*
  *  This is the PPP device. Validate the version of the driver at this
  *  point to ensure that this program will work with the driver.
  */
-    if (ok != 0) {
+    if (ok != 0)
+      {
         char   abBuffer [1024];
        int    size;
 
@@ -1150,19 +1224,21 @@ int ppp_available(void)
        size = ioctl (s, SIOCGPPPVER, (caddr_t) &ifr);
        ok   = size >= 0;
 
-       if (ok != 0) {
+       if (ok != 0)
+         {
            decode_version (abBuffer,
                            &driver_version,
                            &driver_modification,
                            &driver_patch);
-       }
-    }
-
-    if (ok == 0) {
+         }
+      }
+    
+    if (ok == 0)
+      {
         driver_version      =
         driver_modification =
         driver_patch        = 0;
-    }
+      }
 /*
  * Validate the version of the driver against the version that we used.
  */
@@ -1173,27 +1249,42 @@ int ppp_available(void)
 
     /* The version numbers must match */
     if (driver_version != my_version)
+      {
         ok = 0;
+      }
       
     /* The modification levels must be legal */
     if (driver_modification < my_modification)
+      {
         ok = 0;
+      }
 
-    close(s);
-
-    if (ok == 0) {
+    if (ok == 0)
+      {
        fprintf(stderr, "Sorry - PPP driver version %d.%d.%d is out of date\n",
                driver_version, driver_modification, driver_patch);
-       exit (1); /* avoid confusing error message 'ppp is not supported'. */
-    }
-
+      }
+    
+    close(s);
     return ok;
-}
+  }
 
 int logwtmp (char *line, char *name, char *host)
-{
+  {
     struct utmp ut;
-
+    int    mode;
+/*
+ * Control the 'mesg' function based upon the state of the logon
+ * operation.
+ */
+    mode = (*name != '\0') ? 0600 : 0622;
+    if (chmod (devnam, mode) < 0)
+      {
+       syslog (LOG_ERR, "chmod(\"%s\", 0%o): %m", devnam, mode);
+      }
+/*
+ * Update the signon database for users.
+ */
     memset (&ut, 0, sizeof (ut));
     (void)strncpy(ut.ut_line, line, sizeof(ut.ut_line));
     (void)strncpy(ut.ut_name, name, sizeof(ut.ut_name));
@@ -1202,14 +1293,14 @@ int logwtmp (char *line, char *name, char *host)
        
     pututline (&ut);           /* Write the line to the proper place */
     endutent();                        /* Indicate operation is complete */
-}
+  }
 
 /*
  * Code for locking/unlocking the serial device.
  * This code is derived from chat.c.
  */
 
-#define LOCKPREFIX     "/usr/spool/uucp/LCK.."
+#define LOCK_PREFIX    "/var/lock/LCK.."
 
 /*
  * lock - create a lock file for the named device
@@ -1236,7 +1327,7 @@ lock(dev)
            n = read(fd, hdb_lock_buffer, 11);
            if (n > 0) {
                hdb_lock_buffer[n] = 0;
-               pid = atoi(hdb_lock_buffer);
+               sscanf (hdb_lock_buffer, " %d", &pid);
            }
            if (n <= 0) {
                syslog(LOG_ERR, "Can't read pid from lock file %s", lock_file);
@@ -1264,7 +1355,7 @@ lock(dev)
        return -1;
     }
 
-    sprintf(hdb_lock_buffer, "%10d\n", getpid());
+    sprintf(hdb_lock_buffer, "%010d\n", getpid());
     write(fd, hdb_lock_buffer, 11);
 
     close(fd);