X-Git-Url: http://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppd%2Fsys-str.c;h=c197d4bf3cd2e79c6d260d373b13ec942782fe1e;hp=774c86a4f49b4dcfee4b3dac2e6bed426c339d16;hb=b07a2a0e2055cb2ba2b3addd5c50f2c9682a0777;hpb=f97ca9765d35deddd325ba7b82b437fab22112dd diff --git a/pppd/sys-str.c b/pppd/sys-str.c index 774c86a..c197d4b 100644 --- a/pppd/sys-str.c +++ b/pppd/sys-str.c @@ -26,6 +26,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -40,7 +43,6 @@ #include "pppd.h" #include "ppp.h" -#include #include #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); +}