]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/sys-str.c
Initial revision
[ppp.git] / pppd / sys-str.c
index 774c86a4f49b4dcfee4b3dac2e6bed426c339d16..c197d4bf3cd2e79c6d260d373b13ec942782fe1e 100644 (file)
@@ -26,6 +26,9 @@
 #include <errno.h>
 #include <syslog.h>
 #include <fcntl.h>
+#include <string.h>
+#include <time.h>
+#include <utmp.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -40,7 +43,6 @@
 
 #include "pppd.h"
 #include "ppp.h"
-#include <net/if_ppp.h>
 #include <net/ppp_str.h>
 
 #ifndef ifr_mtu
@@ -360,6 +362,7 @@ sifvjcomp(u, vjcomp, cidcomp, maxcid)
  */
 int
 sifup(u)
+    int u;
 {
     struct ifreq ifr;
 
@@ -381,6 +384,7 @@ sifup(u)
  */
 int
 sifdown(u)
+    int u;
 {
     struct ifreq ifr;
     strncpy(ifr.ifr_name, ifname, sizeof (ifr.ifr_name));
@@ -408,6 +412,8 @@ sifdown(u)
  */
 int
 sifaddr(u, o, h, m)
+    int u;
+    u_long o, h, m;
 {
     int ret;
     struct ifreq ifr;
@@ -442,6 +448,8 @@ sifaddr(u, o, h, m)
  */
 int
 cifaddr(u, o, h)
+    int u;
+    u_long o, h;
 {
     struct rtentry rt;
 
@@ -462,6 +470,8 @@ cifaddr(u, o, h)
  */
 int
 sifdefaultroute(u, g)
+    int u;
+    u_long g;
 {
     struct rtentry rt;
 
@@ -481,6 +491,8 @@ sifdefaultroute(u, g)
  */
 int
 cifdefaultroute(u, g)
+    int u;
+    u_long g;
 {
     struct rtentry rt;
 
@@ -551,7 +563,7 @@ cifproxyarp(unit, hisaddr)
  * get_ether_addr - get the hardware address of an interface on the
  * the same subnet as ipaddr.  Code borrowed from myetheraddr.c
  * in the cslip-2.6 distribution, which is subject to the following
- * copyright notice:
+ * copyright notice (which also applies to logwtmp below):
  *
  * Copyright (c) 1990, 1992 The Regents of the University of California.
  * All rights reserved.
@@ -597,7 +609,7 @@ cifproxyarp(unit, hisaddr)
 static struct nlist nl[] = {
 #define N_IFNET 0
        { "_ifnet" },
-       0
+       { 0 }
 };
 
 static void kread();
@@ -693,3 +705,26 @@ get_ether_addr(ipaddr, hwaddr)
     /* couldn't find one */
     return 0;
 }
+
+#define        WTMPFILE        "/usr/adm/wtmp"
+
+int
+logwtmp(line, name, host)
+    char *line, *name, *host;
+{
+    int fd;
+    struct stat buf;
+    struct utmp ut;
+
+    if ((fd = open(WTMPFILE, O_WRONLY|O_APPEND, 0)) < 0)
+       return;
+    if (!fstat(fd, &buf)) {
+       (void)strncpy(ut.ut_line, line, sizeof(ut.ut_line));
+       (void)strncpy(ut.ut_name, name, sizeof(ut.ut_name));
+       (void)strncpy(ut.ut_host, host, sizeof(ut.ut_host));
+       (void)time(&ut.ut_time);
+       if (write(fd, (char *)&ut, sizeof(struct utmp)) != sizeof(struct utmp))
+           (void)ftruncate(fd, buf.st_size);
+    }
+    close(fd);
+}