X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fsys-str.c;h=0f9a78cd2fa33bf2495116994bb63705f355fb61;hb=73bed7c25b5e8f4015c8a274fbef1f34342bca65;hp=774c86a4f49b4dcfee4b3dac2e6bed426c339d16;hpb=f97ca9765d35deddd325ba7b82b437fab22112dd;p=ppp.git diff --git a/pppd/sys-str.c b/pppd/sys-str.c index 774c86a..0f9a78c 100644 --- a/pppd/sys-str.c +++ b/pppd/sys-str.c @@ -26,6 +26,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -360,6 +363,7 @@ sifvjcomp(u, vjcomp, cidcomp, maxcid) */ int sifup(u) + int u; { struct ifreq ifr; @@ -381,6 +385,7 @@ sifup(u) */ int sifdown(u) + int u; { struct ifreq ifr; strncpy(ifr.ifr_name, ifname, sizeof (ifr.ifr_name)); @@ -408,6 +413,8 @@ sifdown(u) */ int sifaddr(u, o, h, m) + int u; + u_long o, h, m; { int ret; struct ifreq ifr; @@ -442,6 +449,8 @@ sifaddr(u, o, h, m) */ int cifaddr(u, o, h) + int u; + u_long o, h; { struct rtentry rt; @@ -462,6 +471,8 @@ cifaddr(u, o, h) */ int sifdefaultroute(u, g) + int u; + u_long g; { struct rtentry rt; @@ -481,6 +492,8 @@ sifdefaultroute(u, g) */ int cifdefaultroute(u, g) + int u; + u_long g; { struct rtentry rt; @@ -551,7 +564,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 +610,7 @@ cifproxyarp(unit, hisaddr) static struct nlist nl[] = { #define N_IFNET 0 { "_ifnet" }, - 0 + { 0 } }; static void kread(); @@ -693,3 +706,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); +}