;; IPv6 patch for uucpd on FreeBSD 3.4-RELEASE ;; Jan 29, 2000 by Hajimu UMEMOTO ;; diff -ur /usr/src/libexec/uucpd/Makefile libexec/uucpd/Makefile --- /usr/src/libexec/uucpd/Makefile Mon Aug 30 00:04:22 1999 +++ libexec/uucpd/Makefile Thu Jan 27 21:17:31 2000 @@ -3,6 +3,7 @@ PROG= uucpd MAN8= uucpd.8 -LDADD= -lcrypt -lutil +CFLAGS+=-DINET6 +LDADD= -L/usr/local/v6/lib -linet6 -lcrypt -lutil DPADD= ${LIBCRYPT} ${LIBUTIL} .include diff -ur /usr/src/libexec/uucpd/uucpd.c libexec/uucpd/uucpd.c --- /usr/src/libexec/uucpd/uucpd.c Mon Aug 30 00:04:23 1999 +++ libexec/uucpd/uucpd.c Thu Jan 27 21:36:51 2000 @@ -83,9 +83,15 @@ #define SCPYN(a, b) strncpy(a, b, sizeof (a)) +#ifdef INET6 +struct sockaddr_storage hisctladdr; +int hisaddrlen = sizeof hisctladdr; +struct sockaddr_storage myctladdr; +#else struct sockaddr_in hisctladdr; int hisaddrlen = sizeof hisctladdr; struct sockaddr_in myctladdr; +#endif int mypid; char Username[64], Logname[64]; @@ -97,10 +103,18 @@ extern char **environ; extern void logwtmp(char *line, char *name, char *host); +#ifdef INET6 +void doit(struct sockaddr *sinp); +#else void doit(struct sockaddr_in *sinp); +#endif void dologout(void); int readline(char start[], int num, int passw); +#ifdef INET6 +void dologin(struct passwd *pw, struct sockaddr *sin); +#else void dologin(struct passwd *pw, struct sockaddr_in *sin); +#endif int main(int argc, char **argv) { @@ -113,16 +127,29 @@ syslog(LOG_ERR, "getpeername: %m"); _exit(1); } +#ifdef INET6 + doit((struct sockaddr *)&hisctladdr); +#else doit(&hisctladdr); +#endif dologout(); exit(0); } +#ifdef INET6 +void badlogin(char *name, struct sockaddr *sin) +#else void badlogin(char *name, struct sockaddr_in *sin) +#endif { char remotehost[MAXHOSTNAMELEN]; +#ifdef INET6 + getnameinfo(sin, sin->sa_len, remotehost, sizeof(remotehost), + NULL, 0, 0); +#else realhostname(remotehost, sizeof(remotehost) - 1, &sin->sin_addr); +#endif remotehost[sizeof(remotehost) - 1] = '\0'; syslog(LOG_NOTICE, "LOGIN FAILURE FROM %s", remotehost); @@ -133,7 +160,11 @@ exit(1); } +#ifdef INET6 +void doit(struct sockaddr *sinp) +#else void doit(struct sockaddr_in *sinp) +#endif { char user[64], passwd[64]; char *xpasswd, *crypt(); @@ -240,15 +271,24 @@ /* * Record login in wtmp file. */ +#ifdef INET6 +void dologin(struct passwd *pw, struct sockaddr *sin) +#else void dologin(struct passwd *pw, struct sockaddr_in *sin) +#endif { char line[32]; char remotehost[UT_HOSTSIZE + 1]; int f; time_t cur_time; +#ifdef INET6 + getnameinfo(sin, sin->sa_len, remotehost, sizeof remotehost, + NULL, 0, 0); +#else realhostname(remotehost, sizeof remotehost - 1, &sin->sin_addr); remotehost[sizeof remotehost - 1] = '\0'; +#endif /* hack, but must be unique and no tty line */ sprintf(line, "uucp%ld", (long)getpid());