remove-insecure-and-ntp-20050403
authorDerrick Brashear <shadow@dementia.org>
Mon, 4 Apr 2005 06:02:56 +0000 (06:02 +0000)
committerDerrick Brashear <shadow@dementia.org>
Mon, 4 Apr 2005 06:02:56 +0000 (06:02 +0000)
rcmds, inetd, ftpd and ntp are gone. leaving the files in the cvs head for now.

====================
This delta was composed from multiple commits as part of the CVS->Git migration.
The checkin message with each commit was inconsistent.
The following are the additional commit messages.
====================

rcmds, inetd, ftpd and ntp are gone. in 1.4, files also go away.

60 files changed:
Makefile.in
src/ftpd43+/.cvsignore [deleted file]
src/ftpd43+/Makefile.in [deleted file]
src/ftpd43+/ftp.h [deleted file]
src/ftpd43+/ftpcmd.y [deleted file]
src/ftpd43+/ftpd.8 [deleted file]
src/ftpd43+/ftpd.c [deleted file]
src/ftpd43+/getusershell.c [deleted file]
src/ftpd43+/glob.c [deleted file]
src/ftpd43+/logwtmp.c [deleted file]
src/ftpd43+/newvers.sh [deleted file]
src/ftpd43+/popen.c [deleted file]
src/ftpd43+/telnet.h [deleted file]
src/ftpd43+/vers.c [deleted file]
src/ftpd43+/version [deleted file]
src/inetd/.cvsignore [deleted file]
src/inetd/Makefile.in [deleted file]
src/inetd/getenv.c [deleted file]
src/inetd/inetd.8 [deleted file]
src/inetd/inetd.c [deleted file]
src/inetd/inetd.conf [deleted file]
src/inetd/inetd.conf.dux40 [deleted file]
src/inetd/inetd.conf.sgi [deleted file]
src/inetd/inetd.conf.solaris [deleted file]
src/inetd/setenv.c [deleted file]
src/inetd/ta-rauth.c [deleted file]
src/ntp/.cvsignore [deleted file]
src/ntp/Makefile.in [deleted file]
src/ntp/README [deleted file]
src/ntp/mkntpconf.c [deleted file]
src/ntp/ntp.c [deleted file]
src/ntp/ntp.conf [deleted file]
src/ntp/ntp.h [deleted file]
src/ntp/ntp_adjust.c [deleted file]
src/ntp/ntp_proto.c [deleted file]
src/ntp/ntp_sock.c [deleted file]
src/ntp/ntpd.c [deleted file]
src/ntp/ntpdc.c [deleted file]
src/ntp/ntpsubs.c [deleted file]
src/ntp/patchlevel.h [deleted file]
src/ntp/read_local.c [deleted file]
src/ntp/read_psti.c [deleted file]
src/ntp/runntp.c [deleted file]
src/ntp/test.c [deleted file]
src/rcp/.cvsignore [deleted file]
src/rcp/Makefile.in [deleted file]
src/rcp/rcp.1 [deleted file]
src/rcp/rcp.c [deleted file]
src/rlogind/.cvsignore [deleted file]
src/rlogind/Makefile.in [deleted file]
src/rlogind/rexecd.c [deleted file]
src/rlogind/rlogind.8 [deleted file]
src/rlogind/rlogind.c [deleted file]
src/rsh/.cvsignore [deleted file]
src/rsh/Makefile.in [deleted file]
src/rsh/herror.c [deleted file]
src/rsh/rcmd.c [deleted file]
src/rsh/rlogin.c [deleted file]
src/rsh/rsh.1 [deleted file]
src/rsh/rsh.c [deleted file]

index efe8860..09c946b 100644 (file)
@@ -552,13 +552,13 @@ jafs: libjafs
 
 jafsadm: libjafsadm
 
-finale: project cmd comerr afsd allrcmds butc tbutc @ENABLE_KERNEL_MODULE@ libuafs audit kauth log package \
+finale: project cmd comerr afsd butc tbutc @ENABLE_KERNEL_MODULE@ libuafs audit kauth log package \
        ptserver scout bu_utils ubik uss bozo vfsck volser tvolser \
        venus update xstat afsmonitor dauth rxdebug libafsrpc \
        libafsauthent shlibafsrpc shlibafsauthent libadmin
        ${COMPILE_PART1} finale ${COMPILE_PART2}
 
-finale_nolibafs: project cmd comerr afsd allrcmds butc tbutc libuafs audit kauth log package \
+finale_nolibafs: project cmd comerr afsd butc tbutc libuafs audit kauth log package \
        ptserver scout bu_utils ubik uss bozo vfsck volser tvolser \
        venus update xstat afsmonitor dauth rxdebug libafsrpc \
        libafsauthent shlibafsrpc shlibafsauthent libadmin
diff --git a/src/ftpd43+/.cvsignore b/src/ftpd43+/.cvsignore
deleted file mode 100644 (file)
index f3c7a7c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Makefile
diff --git a/src/ftpd43+/Makefile.in b/src/ftpd43+/Makefile.in
deleted file mode 100644 (file)
index 027e8ea..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#
-# Copyright (c) 1988 Regents of the University of California.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms are permitted
-# provided that the above copyright notice and this paragraph are
-# duplicated in all such forms and that any documentation,
-# advertising materials, and other materials related to such
-# distribution and use acknowledge that the software was developed
-# by the University of California, Berkeley.  The name of the
-# University may not be used to endorse or promote products derived
-# from this software without specific prior written permission.
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-#
-
-srcdir=@srcdir@
-include @TOP_OBJDIR@/src/config/Makefile.config
-
-include ../config/Makefile.version
-
-AFSLIBS=${TOP_LIBDIR}/libkauth.a ${TOP_LIBDIR}/libprot.a ${TOP_LIBDIR}/libubik.a \
-         ${TOP_LIBDIR}/libauth.a ${TOP_LIBDIR}/librxkad.a ${TOP_LIBDIR}/libsys.a \
-         ${TOP_LIBDIR}/libdes.a ${TOP_LIBDIR}/librx.a ${TOP_LIBDIR}/liblwp.a \
-          ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/libcom_err.a ${TOP_LIBDIR}/util.a \
-          ${TOP_LIBDIR}/libaudit.a
-
-LIBS = ${AFSLIBS} 
-LIBC=  /lib/libc.a 
-SRCS=  ftpd.c ftpcmd.c getusershell.c glob.c logwtmp.c popen.c vers.c
-OBJS=  ftpd.o ftpcmd.o getusershell.o glob.o logwtmp.o popen.o vers.o
-MAN=   ftpd.8
-
-
-noversion: install
-
-all: ${MAN}
-
-ftpd: ${OBJS} ${LIBS}
-       case ${SYS_NAME} in \
-       sun4c_53 | sun4m_53 | sun4_53 | sun4_54 | sun4c_54 | sun4m_54 | sun4x_5? | sunx86_*) \
-               ${CC} -o $@ ${OBJS} ${LIBS} ${XLIBS} -lsocket -lnsl -lauth -ldl ;; \
-       rs_aix*) \
-               ${CC} -o $@ ${OBJS} ${LIBS} ${XLIBS} -ls  ;; \
-         * )   ${CC} -o $@ ${OBJS} ${LIBS} ${XLIBS} ;; \
-       esac
-
-ftpd.o: ftpd.c AFS_component_version_number.c
-
-vers.o: ftpd.c ftpcmd.y
-       ${CC} ${CFLAGS} -c vers.c
-#      sh newvers.sh
-
-clean:
-       $(RM) -f ${OBJS} ftpd core ftpcmd.c AFS_component_version_number.c
-
-cleandir: clean
-       $(RM) -f ${MAN} .depend
-
-depend: ${SRCS}
-       mkdep ${CFLAGS} ${SRCS}
-
-install:      ${DESTDIR}${sbindir}/ftpd
-
-${DEST}/etc/ftpd: ftpd
-       ${INSTALL} $? $@
-
-${DESTDIR}${sbindir}/ftpd: ftpd
-       ${INSTALL} $? $@
-
-
-dest:   ${DEST}/etc/ftpd
-
diff --git a/src/ftpd43+/ftp.h b/src/ftpd43+/ftp.h
deleted file mode 100644 (file)
index dd332a5..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 1983, 1989 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- *     @(#)ftp.h       5.4 (Berkeley) 2/21/89
- */
-
-/*
- * Definitions for FTP
- * See RFC-765
- */
-
-/*
- * Reply codes.
- */
-#define PRELIM         1       /* positive preliminary */
-#define COMPLETE       2       /* positive completion */
-#define CONTINUE       3       /* positive intermediate */
-#define TRANSIENT      4       /* transient negative completion */
-#define ERROR          5       /* permanent negative completion */
-
-/*
- * Type codes
- */
-#define        TYPE_A          1       /* ASCII */
-#define        TYPE_E          2       /* EBCDIC */
-#define        TYPE_I          3       /* image */
-#define        TYPE_L          4       /* local byte size */
-
-#ifdef FTP_NAMES
-char *typenames[] = { "0", "ASCII", "EBCDIC", "Image", "Local" };
-#endif
-
-/*
- * Form codes
- */
-#define        FORM_N          1       /* non-print */
-#define        FORM_T          2       /* telnet format effectors */
-#define        FORM_C          3       /* carriage control (ASA) */
-#ifdef FTP_NAMES
-char *formnames[] = { "0", "Nonprint", "Telnet", "Carriage-control" };
-#endif
-
-/*
- * Structure codes
- */
-#define        STRU_F          1       /* file (no record structure) */
-#define        STRU_R          2       /* record structure */
-#define        STRU_P          3       /* page structure */
-#ifdef FTP_NAMES
-char *strunames[] = { "0", "File", "Record", "Page" };
-#endif
-
-/*
- * Mode types
- */
-#define        MODE_S          1       /* stream */
-#define        MODE_B          2       /* block */
-#define        MODE_C          3       /* compressed */
-#ifdef FTP_NAMES
-char *modenames[] = { "0", "Stream", "Block", "Compressed" };
-#endif
-
-/*
- * Record Tokens
- */
-#define        REC_ESC         '\377'  /* Record-mode Escape */
-#define        REC_EOR         '\001'  /* Record-mode End-of-Record */
-#define REC_EOF                '\002'  /* Record-mode End-of-File */
-
-/*
- * Block Header
- */
-#define        BLK_EOR         0x80    /* Block is End-of-Record */
-#define        BLK_EOF         0x40    /* Block is End-of-File */
-#define BLK_ERRORS     0x20    /* Block is suspected of containing errors */
-#define        BLK_RESTART     0x10    /* Block is Restart Marker */
-
-#define        BLK_BYTECOUNT   2       /* Bytes in this block */
diff --git a/src/ftpd43+/ftpcmd.y b/src/ftpd43+/ftpcmd.y
deleted file mode 100644 (file)
index d74f605..0000000
+++ /dev/null
@@ -1,1307 +0,0 @@
-/*
- * Copyright (c) 1985, 1988 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- *     @(#)ftpcmd.y    5.20.1.1 (Berkeley) 3/2/89
- */
-
-/*
- * Grammar for FTP commands.
- * See RFC 959.
- */
-
-%{
-
-#include <afs/param.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#ifndef AFS_HPUX_ENV
-#include <arpa/ftp.h>
-#else
-#include "ftp.h"
-#endif
-
-#define        unix
-#include <stdlib.h>
-#include <stdio.h>
-#include <signal.h>
-#include <ctype.h>
-#include <pwd.h>
-#include <setjmp.h>
-#include <syslog.h>
-#include <sys/stat.h>
-#include <time.h>
-
-#ifdef AFS_AIX32_ENV
-#ifdef _CSECURITY
-#include "tcpip_audit.h"
-#define tcpip_auditlog null
-void null()
-{
-       return;
-}
-/* Security New Stuff */
-#include <sys/id.h>
-#include <sys/priv.h>
-extern         afs_uint32      remote_addr;
-extern         uid_t saved_uid, effective_uid;
-extern priv_t priv;
-
-/* Restore privs and set the invoker back to uid saved_uid */
-#define GET_PRIV(a)            \
-        getpriv(PRIV_MAXIMUM, &priv,sizeof(priv_t)); \
-        setpriv(PRIV_SET|PRIV_EFFECTIVE|PRIV_BEQUEATH, &priv,sizeof(priv_t)); \
-        setuidx(ID_EFFECTIVE|ID_REAL|ID_SAVED, (a));
-
-/* Drop privs and set the invoker to uid a */
-#define DROP_PRIV(a)           \
-        priv.pv_priv[0] = 0;    \
-        priv.pv_priv[1] = 0;    \
-        setpriv(PRIV_SET|PRIV_EFFECTIVE|PRIV_BEQUEATH, &priv,sizeof(priv_t)); \
-        setuidx(ID_EFFECTIVE|ID_REAL|ID_SAVED, (a));
-
-#endif /* _CSECURITY */
-
-#define MSGSTR(n,s) s
-#endif /* AFS_AIX32_ENV */
-
-extern struct sockaddr_in data_dest;
-extern int logged_in;
-extern struct passwd *pw;
-extern int guest;
-extern int logging;
-extern int type;
-extern int form;
-extern int debug;
-extern int timeout;
-extern int maxtimeout;
-extern  int pdata;
-extern char hostname[], remotehost[];
-extern char proctitle[];
-extern char *globerr;
-extern int usedefault;
-extern  int transflag;
-extern  char tmpline[];
-extern int allowPortAttack; 
-extern  struct sockaddr_in his_addr;
-char   **glob();
-
-#ifdef AFS_OSF_ENV
-off_t  restart_point;
-#endif
-
-static unsigned short cliport = 0;
-static struct   sockaddr_in  cliaddr;
-static int cmd_type;
-static int cmd_form;
-static int cmd_bytesz;
-char   cbuf[512];
-char   *fromname;
-
-char   *index();
-#define        CMD     0       /* beginning of command */
-#define        ARGS    1       /* expect miscellaneous arguments */
-#define        STR1    2       /* expect SP followed by STRING */
-#define        STR2    3       /* expect STRING */
-#define        OSTR    4       /* optional SP then STRING */
-#define        ZSTR1   5       /* SP then optional STRING */
-#define        ZSTR2   6       /* optional STRING after SP */
-#define        SITECMD 7       /* SITE command */
-#define        NSTR    8       /* Number followed by a string */
-
-#if defined(AFS_AIX41_ENV) || defined(AFS_LINUX20_ENV)
-struct tab {
-       char    *name;
-       short   token;
-       short   state;
-       short   implemented;    /* 1 if command is implemented */
-       char    *help;
-};
-struct tab cmdtab[];
-struct tab sitetab[];
-#endif /* AFS_AIX41_ENV || AFS_LINUX20_ENV */
-%}
-
-%token
-       A       B       C       E       F       I
-       L       N       P       R       S       T
-
-       SP      CRLF    COMMA   STRING  NUMBER
-
-       USER    PASS    ACCT    REIN    QUIT    PORT
-       PASV    TYPE    STRU    MODE    RETR    STOR
-       APPE    MLFL    MAIL    MSND    MSOM    MSAM
-       MRSQ    MRCP    ALLO    REST    RNFR    RNTO
-       ABOR    DELE    CWD     LIST    NLST    SITE
-       STAT    HELP    NOOP    MKD     RMD     PWD
-       CDUP    STOU    SMNT    SYST    SIZE    MDTM
-
-       UMASK   IDLE    CHMOD
-
-       LEXERR
-
-%start cmd_list
-
-%%
-
-cmd_list:      /* empty */
-       |       cmd_list cmd
-               = {
-                       fromname = (char *) 0;
-#ifdef AFS_OSF_ENV
-                       restart_point = (off_t) 0;
-#endif
-               }
-       |       cmd_list rcmd
-       ;
-
-cmd:           USER SP username CRLF
-               = {
-                       user((char *) $3);
-                       free((char *) $3);
-               }
-       |       PASS SP password CRLF
-               = {
-                       pass((char *) $3);
-                       free((char *) $3);
-               }
-       |       PORT SP host_port CRLF
-               = {
-                       usedefault = 0;
-                       if (pdata >= 0) {
-                               (void) close(pdata);
-                               pdata = -1;
-                       }
-                        if (allowPortAttack) {
-                               /* full RFC conformant */
-                       }
-                       else if ( cliaddr.sin_addr.s_addr != his_addr.sin_addr.s_addr ) {
-                               reply(500, "PORT host addr must be %s",
-                                      inet_ntoa(his_addr.sin_addr));
-                               break;
-                       }
-                       else if ((cliport<IPPORT_RESERVED) && (cliport!=20)) {
-                               /* 
-                               ** port 20 is the ftp data port. We allow the 
-                               ** ftp server to connect to any non-reserved 
-                               ** port and  port 20 
-                               */
-                               reply(500, "PORT argument must be ",
-                                            "%u or greater.",
-                                            IPPORT_RESERVED);
-                               break;
-                       }
-                       data_dest = cliaddr;
-                       data_dest.sin_port = cliport;
-                        reply(200, "PORT command ",
-                               "successful.");
-               }
-       |       PASV CRLF
-               = {
-                       passive();
-               }
-       |       TYPE SP type_code CRLF
-               = {
-                       switch (cmd_type) {
-
-                       case TYPE_A:
-                               if (cmd_form == FORM_N) {
-                                       reply(200, "Type set to A.");
-                                       type = cmd_type;
-                                       form = cmd_form;
-                               } else
-                                       reply(504, "Form must be N.");
-                               break;
-
-                       case TYPE_E:
-                               reply(504, "Type E not implemented.");
-                               break;
-
-                       case TYPE_I:
-                               reply(200, "Type set to I.");
-                               type = cmd_type;
-                               break;
-
-                       case TYPE_L:
-#if NBBY == 8
-                               if (cmd_bytesz == 8) {
-                                       reply(200,
-                                           "Type set to L (byte size 8).");
-                                       type = cmd_type;
-                               } else
-                                       reply(504, "Byte size must be 8.");
-#else /* NBBY == 8 */
-                               UNIMPLEMENTED for NBBY != 8
-#endif /* NBBY == 8 */
-                       }
-               }
-       |       STRU SP struct_code CRLF
-               = {
-                       switch ($3) {
-
-                       case STRU_F:
-                               reply(200, "STRU F ok.");
-                               break;
-
-                       default:
-                               reply(504, "Unimplemented STRU type.");
-                       }
-               }
-       |       MODE SP mode_code CRLF
-               = {
-                       switch ($3) {
-
-                       case MODE_S:
-                               reply(200, "MODE S ok.");
-                               break;
-
-                       default:
-                               reply(502, "Unimplemented MODE type.");
-                       }
-               }
-       |       ALLO SP NUMBER CRLF
-               = {
-                       reply(202, "ALLO command ignored.");
-               }
-       |       ALLO SP NUMBER SP R SP NUMBER CRLF
-               = {
-                       reply(202, "ALLO command ignored.");
-               }
-       |       RETR check_login SP pathname CRLF
-               = {
-                       if ($2 && $4 != NULL)
-                               retrieve((char *) 0, (char *) $4);
-                       if ($4 != NULL)
-                               free((char *) $4);
-               }
-       |       STOR check_login SP pathname CRLF
-               = {
-                       if ($2 && $4 != NULL)
-                               store((char *) $4, "w", 0);
-                       if ($4 != NULL)
-                               free((char *) $4);
-               }
-       |       APPE check_login SP pathname CRLF
-               = {
-                       if ($2 && $4 != NULL)
-                               store((char *) $4, "a", 0);
-                       if ($4 != NULL)
-                               free((char *) $4);
-               }
-       |       NLST check_login CRLF
-               = {
-                       if ($2)
-                               retrieve("/bin/ls", "");
-               }
-       |       NLST check_login SP STRING CRLF
-               = {
-                       if ($2 && $4 != NULL) 
-                               retrieve("/bin/ls %s", (char *) $4);
-                       if ($4 != NULL)
-                               free((char *) $4);
-               }
-       |       LIST check_login CRLF
-               = {
-                       if ($2)
-                               retrieve("/bin/ls -lgA", "");
-               }
-       |       LIST check_login SP pathname CRLF
-               = {
-                       if ($2 && $4 != NULL)
-                               retrieve("/bin/ls -lgA %s", (char *) $4);
-                       if ($4 != NULL)
-                               free((char *) $4);
-               }
-       |       STAT check_login SP pathname CRLF
-               = {
-                       if ($2 && $4 != NULL)
-                               statfilecmd((char *) $4);
-                       if ($4 != NULL)
-                               free((char *) $4);
-               }
-       |       STAT CRLF
-               = {
-                       statcmd();
-               }
-       |       DELE check_login SP pathname CRLF
-               = {
-                       if ($2 && $4 != NULL)
-                               delete((char *) $4);
-                       if ($4 != NULL)
-                               free((char *) $4);
-               }
-       |       RNTO SP pathname CRLF
-               = {
-                       if (fromname) {
-                               renamecmd(fromname, (char *) $3);
-                               free(fromname);
-                               fromname = (char *) 0;
-                       } else {
-                               reply(503, "Bad sequence of commands.");
-                       }
-                       free((char *) $3);
-               }
-       |       ABOR CRLF
-               = {
-                       reply(225, "ABOR command successful.");
-               }
-       |       CWD check_login CRLF
-               = {
-                       if ($2)
-                               cwd(pw->pw_dir);
-               }
-       |       CWD check_login SP pathname CRLF
-               = {
-                       if ($2 && $4 != NULL)
-                               cwd((char *) $4);
-                       if ($4 != NULL)
-                               free((char *) $4);
-               }
-       |       HELP CRLF
-               = {
-                       help(cmdtab, (char *) 0);
-               }
-       |       HELP SP STRING CRLF
-               = {
-                       register char *cp = (char *)$3;
-
-                       if (strncasecmp(cp, "SITE", 4) == 0) {
-                               cp = (char *)$3 + 4;
-                               if (*cp == ' ')
-                                       cp++;
-                               if (*cp)
-                                       help(sitetab, cp);
-                               else
-                                       help(sitetab, (char *) 0);
-                       } else
-                               help(cmdtab, (char *) $3);
-               }
-       |       NOOP CRLF
-               = {
-                       reply(200, "NOOP command successful.");
-               }
-       |       MKD check_login SP pathname CRLF
-               = {
-                       if ($2 && $4 != NULL)
-                               makedir((char *) $4);
-                       if ($4 != NULL)
-                               free((char *) $4);
-               }
-       |       RMD check_login SP pathname CRLF
-               = {
-                       if ($2 && $4 != NULL)
-                               removedir((char *) $4);
-                       if ($4 != NULL)
-                               free((char *) $4);
-               }
-       |       PWD check_login CRLF
-               = {
-                       if ($2)
-                               pwd();
-               }
-       |       CDUP check_login CRLF
-               = {
-                       if ($2)
-                               cwd("..");
-               }
-       |       SITE SP HELP CRLF
-               = {
-                       help(sitetab, (char *) 0);
-               }
-       |       SITE SP HELP SP STRING CRLF
-               = {
-                       help(sitetab, (char *) $5);
-               }
-       |       SITE SP UMASK check_login CRLF
-               = {
-                       int oldmask;
-
-                       if ($4) {
-                               oldmask = umask(0);
-                               (void) umask(oldmask);
-                               reply(200, "Current UMASK is %03o", oldmask);
-                       }
-               }
-       |       SITE SP UMASK check_login SP octal_number CRLF
-               = {
-                       int oldmask;
-
-                       if ($4) {
-                               if (($6 == -1) || ($6 > 0777)) {
-                                       reply(501, "Bad UMASK value");
-                               } else {
-                                       oldmask = umask($6);
-                                       reply(200,
-                                           "UMASK set to %03o (was %03o)",
-                                           $6, oldmask);
-                               }
-                       }
-               }
-       |       SITE SP CHMOD check_login SP octal_number SP pathname CRLF
-               = {
-                       if ($4 && ($8 != NULL)) {
-                               if ($6 > 0777)
-                                       reply(501,
-                               "CHMOD: Mode value must be between 0 and 0777");
-                               else if (chmod((char *) $8, $6) < 0)
-                                       perror_reply(550, (char *) $8);
-                               else
-                                       reply(200, "CHMOD command successful.");
-                       }
-                       if ($8 != NULL)
-                               free((char *) $8);
-               }
-       |       SITE SP IDLE CRLF
-               = {
-                       reply(200,
-                           "Current IDLE time limit is %d seconds; max %d",
-                               timeout, maxtimeout);
-               }
-       |       SITE SP IDLE SP NUMBER CRLF
-               = {
-                       if ($5 < 30 || $5 > maxtimeout) {
-                               reply(501,
-                       "Maximum IDLE time must be between 30 and %d seconds",
-                                   maxtimeout);
-                       } else {
-                               timeout = $5;
-                               (void) alarm((unsigned) timeout);
-                               reply(200,
-                                   "Maximum IDLE time set to %d seconds",
-                                   timeout);
-                       }
-               }
-       |       STOU check_login SP pathname CRLF
-               = {
-                       if ($2 && $4 != NULL)
-                               store((char *) $4, "w", 1);
-                       if ($4 != NULL)
-                               free((char *) $4);
-               }
-       |       SYST CRLF
-               = {
-#ifdef unix
-#if    defined(BSD) && !defined(AFS_SUN5_ENV)
-                       reply(215, "UNIX Type: L%d Version: BSD-%d (afs-@sys: %s)",
-                               NBBY, BSD, SYS_NAME);
-#else /* BSD */
-                       reply(215, "UNIX Type: L%d (afs-@sys: %s)", NBBY, SYS_NAME);
-#endif /* BSD */
-#else /* unix */
-                       reply(215, "UNKNOWN Type: L%d (afs-@sys: %s)", NBBY, SYS_NAME);
-#endif /* unix */
-               }
-
-               /*
-                * SIZE is not in RFC959, but Postel has blessed it and
-                * it will be in the updated RFC.
-                *
-                * Return size of file in a format suitable for
-                * using with RESTART (we just count bytes).
-                */
-       |       SIZE check_login SP pathname CRLF
-               = {
-                       if ($2 && $4 != NULL)
-                               sizecmd((char *) $4);
-                       if ($4 != NULL)
-                               free((char *) $4);
-               }
-
-               /*
-                * MDTM is not in RFC959, but Postel has blessed it and
-                * it will be in the updated RFC.
-                *
-                * Return modification time of file as an ISO 3307
-                * style time. E.g. YYYYMMDDHHMMSS or YYYYMMDDHHMMSS.xxx
-                * where xxx is the fractional second (of any precision,
-                * not necessarily 3 digits)
-                */
-       |       MDTM check_login SP pathname CRLF
-               = {
-                       if ($2 && $4 != NULL) {
-                               struct stat stbuf;
-                               if (stat((char *) $4, &stbuf) < 0)
-                                       perror_reply(550, "%s", (char *) $4);
-                               else if ((stbuf.st_mode&S_IFMT) != S_IFREG) {
-                                       reply(550, "%s: not a plain file.",
-                                               (char *) $4);
-                               } else {
-                                       register struct tm *t;
-                                       struct tm *gmtime();
-                                       t = gmtime(&stbuf.st_mtime);
-                                       if (t->tm_year>=100) /* after 2000 */
-                                           reply(213,
-                                           "%04d%02d%02d%02d%02d%02d",
-                                           t->tm_year+1900, t->tm_mon+1, t->tm_mday,
-                                           t->tm_hour, t->tm_min, t->tm_sec);
-                                        else if (0<=t->tm_year && t->tm_year<=68)
-                                           reply(213,
-                                           "20%02d%02d%02d%02d%02d%02d",
-                                           t->tm_year, t->tm_mon+1, t->tm_mday,
-                                           t->tm_hour, t->tm_min, t->tm_sec);
-                                        else if (69<=t->tm_year && t->tm_year<=99)
-                                           reply(213,
-                                           "19%02d%02d%02d%02d%02d%02d",
-                                           t->tm_year, t->tm_mon+1, t->tm_mday,
-                                           t->tm_hour, t->tm_min, t->tm_sec);
-                               }
-                       }
-                       if ($4 != NULL)
-                               free((char *) $4);
-               }
-       |       QUIT CRLF
-               = {
-                       reply(221, "Goodbye.");
-#ifdef _CSECURITY
-                       GET_PRIV(saved_uid);
-                       CONNECTION_WRITE(remote_addr,"ftp/tcp","close",
-                                               MSGSTR(GOODBYE1, "Goodbye."),0);
-                       DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-                       dologout(0);
-               }
-       |       error CRLF
-               = {
-                       yyerrok;
-               }
-       ;
-rcmd:          RNFR check_login SP pathname CRLF
-               = {
-                       char *renamefrom();
-
-#ifdef AFS_OSF_ENV
-                       restart_point = (off_t) 0;
-#endif
-                       if ($2 && $4) {
-                               fromname = renamefrom((char *) $4);
-                               if (fromname == (char *) 0 && $4) {
-                                       free((char *) $4);
-                               }
-                       }
-               }
-/*
-       |       REST SP byte_size CRLF
-                = {
-                        long atol();
-
-                        fromname = (char *) 0;
-                        restart_point = $3;
-                        reply(350, MSGSTR( FTPD_RESTARTING, 
-                       "Restarting at %ld. %s"), restart_point,
-                            "Send STORE or RETRIEVE to initiate transfer.");
-                }
-*/
-       ;
-
-username:      STRING
-       ;
-
-password:      /* empty */
-               = {
-                       *(char **)&($$) = "";
-               }
-       |       STRING
-       ;
-
-byte_size:     NUMBER
-       ;
-
-host_port:     NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA 
-               NUMBER COMMA NUMBER
-               = {
-                       register char *a;
-
-                       a = (char *)&cliaddr.sin_addr;
-                       a[0] = $1; a[1] = $3; a[2] = $5; a[3] = $7;
-
-                       cliport = ($9 << 8) + $11;
-                       cliaddr.sin_family = AF_INET;
-               }
-       ;
-
-form_code:     N
-       = {
-               $$ = FORM_N;
-       }
-       |       T
-       = {
-               $$ = FORM_T;
-       }
-       |       C
-       = {
-               $$ = FORM_C;
-       }
-       ;
-
-type_code:     A
-       = {
-               cmd_type = TYPE_A;
-               cmd_form = FORM_N;
-       }
-       |       A SP form_code
-       = {
-               cmd_type = TYPE_A;
-               cmd_form = $3;
-       }
-       |       E
-       = {
-               cmd_type = TYPE_E;
-               cmd_form = FORM_N;
-       }
-       |       E SP form_code
-       = {
-               cmd_type = TYPE_E;
-               cmd_form = $3;
-       }
-       |       I
-       = {
-               cmd_type = TYPE_I;
-       }
-       |       L
-       = {
-               cmd_type = TYPE_L;
-               cmd_bytesz = NBBY;
-       }
-       |       L SP byte_size
-       = {
-               cmd_type = TYPE_L;
-               cmd_bytesz = $3;
-       }
-       /* this is for a bug in the BBN ftp */
-       |       L byte_size
-       = {
-               cmd_type = TYPE_L;
-               cmd_bytesz = $2;
-       }
-       ;
-
-struct_code:   F
-       = {
-               $$ = STRU_F;
-       }
-       |       R
-       = {
-               $$ = STRU_R;
-       }
-       |       P
-       = {
-               $$ = STRU_P;
-       }
-       ;
-
-mode_code:     S
-       = {
-               $$ = MODE_S;
-       }
-       |       B
-       = {
-               $$ = MODE_B;
-       }
-       |       C
-       = {
-               $$ = MODE_C;
-       }
-       ;
-
-pathname:      pathstring
-       = {
-               /*
-                * Problem: this production is used for all pathname
-                * processing, but only gives a 550 error reply.
-                * This is a valid reply in some cases but not in others.
-                */
-               if (logged_in && $1 && strncmp((char *) $1, "~", 1) == 0) {
-                       *(char **)&($$) = *glob((char *) $1);
-                       if (globerr != NULL) {
-                               reply(550, globerr);
-                               $$ = NULL;
-                       }
-                       free((char *) $1);
-               } else
-                       $$ = $1;
-       }
-       ;
-
-pathstring:    STRING
-       ;
-
-octal_number:  NUMBER
-       = {
-               register int ret, dec, multby, digit;
-
-               /*
-                * Convert a number that was read as decimal number
-                * to what it would be if it had been read as octal.
-                */
-               dec = $1;
-               multby = 1;
-               ret = 0;
-               while (dec) {
-                       digit = dec%10;
-                       if (digit > 7) {
-                               ret = -1;
-                               break;
-                       }
-                       ret += digit * multby;
-                       multby *= 8;
-                       dec /= 10;
-               }
-               $$ = ret;
-       }
-       ;
-
-check_login:   /* empty */
-       = {
-               if (logged_in)
-                       $$ = 1;
-               else {
-                       reply(530, "Please login with USER and PASS.");
-                       $$ = 0;
-               }
-       }
-       ;
-
-%%
-#if !defined(AFS_AIX41_ENV) && !defined(AFS_LINUX20_ENV)
-struct tab {
-       char    *name;
-       short   token;
-       short   state;
-       short   implemented;    /* 1 if command is implemented */
-       char    *help;
-};
-#endif /* !AFS_AIX41_ENV */
-
-struct tab cmdtab[] = {                /* In order defined in RFC 765 */
-       { "USER", USER, STR1, 1,        "<sp> username" },
-       { "PASS", PASS, ZSTR1, 1,       "<sp> password" },
-       { "ACCT", ACCT, STR1, 0,        "(specify account)" },
-       { "SMNT", SMNT, ARGS, 0,        "(structure mount)" },
-       { "REIN", REIN, ARGS, 0,        "(reinitialize server state)" },
-       { "QUIT", QUIT, ARGS, 1,        "(terminate service)", },
-       { "PORT", PORT, ARGS, 1,        "<sp> b0, b1, b2, b3, b4" },
-       { "PASV", PASV, ARGS, 1,        "(set server in passive mode)" },
-       { "TYPE", TYPE, ARGS, 1,        "<sp> [ A | E | I | L ]" },
-       { "STRU", STRU, ARGS, 1,        "(specify file structure)" },
-       { "MODE", MODE, ARGS, 1,        "(specify transfer mode)" },
-       { "RETR", RETR, STR1, 1,        "<sp> file-name" },
-       { "STOR", STOR, STR1, 1,        "<sp> file-name" },
-       { "APPE", APPE, STR1, 1,        "<sp> file-name" },
-       { "MLFL", MLFL, OSTR, 0,        "(mail file)" },
-       { "MAIL", MAIL, OSTR, 0,        "(mail to user)" },
-       { "MSND", MSND, OSTR, 0,        "(mail send to terminal)" },
-       { "MSOM", MSOM, OSTR, 0,        "(mail send to terminal or mailbox)" },
-       { "MSAM", MSAM, OSTR, 0,        "(mail send to terminal and mailbox)" },
-       { "MRSQ", MRSQ, OSTR, 0,        "(mail recipient scheme question)" },
-       { "MRCP", MRCP, STR1, 0,        "(mail recipient)" },
-       { "ALLO", ALLO, ARGS, 1,        "allocate storage (vacuously)" },
-       { "REST", REST, ARGS, 0,        "(restart command)" },
-       { "RNFR", RNFR, STR1, 1,        "<sp> file-name" },
-       { "RNTO", RNTO, STR1, 1,        "<sp> file-name" },
-       { "ABOR", ABOR, ARGS, 1,        "(abort operation)" },
-       { "DELE", DELE, STR1, 1,        "<sp> file-name" },
-       { "CWD",  CWD,  OSTR, 1,        "[ <sp> directory-name ]" },
-       { "XCWD", CWD,  OSTR, 1,        "[ <sp> directory-name ]" },
-       { "LIST", LIST, OSTR, 1,        "[ <sp> path-name ]" },
-       { "NLST", NLST, OSTR, 1,        "[ <sp> path-name ]" },
-       { "SITE", SITE, SITECMD, 1,     "site-cmd [ <sp> arguments ]" },
-       { "SYST", SYST, ARGS, 1,        "(get type of operating system)" },
-       { "STAT", STAT, OSTR, 1,        "[ <sp> path-name ]" },
-       { "HELP", HELP, OSTR, 1,        "[ <sp> <string> ]" },
-       { "NOOP", NOOP, ARGS, 1,        "" },
-       { "MKD",  MKD,  STR1, 1,        "<sp> path-name" },
-       { "XMKD", MKD,  STR1, 1,        "<sp> path-name" },
-       { "RMD",  RMD,  STR1, 1,        "<sp> path-name" },
-       { "XRMD", RMD,  STR1, 1,        "<sp> path-name" },
-       { "PWD",  PWD,  ARGS, 1,        "(return current directory)" },
-       { "XPWD", PWD,  ARGS, 1,        "(return current directory)" },
-       { "CDUP", CDUP, ARGS, 1,        "(change to parent directory)" },
-       { "XCUP", CDUP, ARGS, 1,        "(change to parent directory)" },
-       { "STOU", STOU, STR1, 1,        "<sp> file-name" },
-       { "SIZE", SIZE, OSTR, 1,        "<sp> path-name" },
-       { "MDTM", MDTM, OSTR, 1,        "<sp> path-name" },
-       { NULL,   0,    0,    0,        0 }
-};
-
-struct tab sitetab[] = {
-       { "UMASK", UMASK, ARGS, 1,      "[ <sp> umask ]" },
-       { "IDLE", IDLE, ARGS, 1,        "[ <sp> maximum-idle-time ]" },
-       { "CHMOD", CHMOD, NSTR, 1,      "<sp> mode <sp> file-name" },
-       { "HELP", HELP, OSTR, 1,        "[ <sp> <string> ]" },
-       { NULL,   0,    0,    0,        0 }
-};
-
-extern jmp_buf errcatch;
-
-
-struct tab *
-lookup(p, cmd)
-       register struct tab *p;
-       char *cmd;
-{
-
-       for (; p->name != NULL; p++)
-               if (strcmp(cmd, p->name) == 0)
-                       return (p);
-       return (0);
-}
-
-#ifndef AFS_HPUX_ENV
-#include <arpa/telnet.h>
-#else
-#include "telnet.h"
-#endif
-
-/*
- * getline - a hacked up version of fgets to ignore TELNET escape codes.
- */
-char *
-getline(s, n, iop)
-       char *s;
-       register FILE *iop;
-{
-       register c;
-       register char *cs;
-
-       cs = s;
-/* tmpline may contain saved command from urgent mode interruption */
-       for (c = 0; tmpline[c] != '\0' && --n > 0; ++c) {
-               *cs++ = tmpline[c];
-               if (tmpline[c] == '\n') {
-                       *cs++ = '\0';
-                       if (debug)
-                               syslog(LOG_DEBUG, "command: %s", s);
-                       tmpline[0] = '\0';
-                       return(s);
-               }
-               if (c == 0)
-                       tmpline[0] = '\0';
-       }
-       while ((c = getc(iop)) != EOF) {
-               c &= 0377;
-               if (c == IAC) {
-                   if ((c = getc(iop)) != EOF) {
-                       c &= 0377;
-                       switch (c) {
-                       case WILL:
-                       case WONT:
-                               c = getc(iop);
-                               printf("%c%c%c", IAC, DONT, 0377&c);
-                               (void) fflush(stdout);
-                               continue;
-                       case DO:
-                       case DONT:
-                               c = getc(iop);
-                               printf("%c%c%c", IAC, WONT, 0377&c);
-                               (void) fflush(stdout);
-                               continue;
-                       case IAC:
-                               break;
-                       default:
-                               continue;       /* ignore command */
-                       }
-                   }
-               }
-               *cs++ = c;
-               if (--n <= 0 || c == '\n')
-                       break;
-       }
-       if (c == EOF && cs == s)
-               return (NULL);
-       *cs++ = '\0';
-       if (debug)
-               syslog(LOG_DEBUG, "command: %s", s);
-       return (s);
-}
-
-static void
-toolong(x)
-{
-       time_t now;
-
-       reply(421,
-         "Timeout (%d seconds): closing control connection.", timeout);
-       (void) time(&now);
-       if (logging) {
-               syslog(LOG_INFO,
-                       "User %s timed out after %d seconds at %s",
-                       (pw ? pw -> pw_name : "unknown"), timeout, ctime(&now));
-       }
-#ifdef _CSECURITY
-                       GET_PRIV(saved_uid);
-                        CONNECTION_WRITE(remote_addr, "ftp/tcp", "close",
-                                "Control connection timeout", -1);
-                       DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-       dologout(1);
-}
-
-yylex()
-{
-       static int cpos, state;
-       register char *cp, *cp2;
-       register struct tab *p;
-       int n;
-       char c, *strpbrk();
-       char *copy();
-
-       for (;;) {
-               switch (state) {
-
-               case CMD:
-                       (void) signal(SIGALRM, toolong);
-                       (void) alarm((unsigned) timeout);
-                       if (getline(cbuf, sizeof(cbuf)-1, stdin) == NULL) {
-                               reply(221, "You could at least say goodbye.");
-#ifdef _CSECURITY
-                       GET_PRIV(saved_uid);
-                        CONNECTION_WRITE(remote_addr, "ftp/tcp", "close",
-                       MSGSTR(GOODBY, "You could at least say goodbye."), -1);
-                       DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-                               dologout(0);
-                       }
-                       (void) alarm(0);
-#ifdef SETPROCTITLE
-                       if (strncasecmp(cbuf, "PASS", 4) != NULL)
-                               setproctitle("%s: %s", proctitle, cbuf);
-#endif /* SETPROCTITLE */
-                       if ((cp = strchr(cbuf, '\r'))) {
-                               *cp++ = '\n';
-                               *cp = '\0';
-                       }
-                       if ((cp = strpbrk(cbuf, " \n")))
-                               cpos = cp - cbuf;
-                       if (cpos == 0)
-                               cpos = 4;
-                       c = cbuf[cpos];
-                       cbuf[cpos] = '\0';
-                       upper(cbuf);
-                       p = lookup(cmdtab, cbuf);
-                       cbuf[cpos] = c;
-                       if (p != 0) {
-                               if (p->implemented == 0) {
-                                       nack(p->name);
-                                       longjmp(errcatch,0);
-                                       /* NOTREACHED */
-                               }
-                               state = p->state;
-                               *(char **)&yylval = p->name;
-                               return (p->token);
-                       }
-                       break;
-
-               case SITECMD:
-                       if (cbuf[cpos] == ' ') {
-                               cpos++;
-                               return (SP);
-                       }
-                       cp = &cbuf[cpos];
-                       if ((cp2 = strpbrk(cp, " \n")))
-                               cpos = cp2 - cbuf;
-                       c = cbuf[cpos];
-                       cbuf[cpos] = '\0';
-                       upper(cp);
-                       p = lookup(sitetab, cp);
-                       cbuf[cpos] = c;
-                       if (p != 0) {
-                               if (p->implemented == 0) {
-                                       state = CMD;
-                                       nack(p->name);
-                                       longjmp(errcatch,0);
-                                       /* NOTREACHED */
-                               }
-                               state = p->state;
-                               *(char **)&yylval = p->name;
-                               return (p->token);
-                       }
-                       state = CMD;
-                       break;
-
-               case OSTR:
-                       if (cbuf[cpos] == '\n') {
-                               state = CMD;
-                               return (CRLF);
-                       }
-                       /* FALLTHROUGH */
-
-               case STR1:
-               case ZSTR1:
-               dostr1:
-                       if (cbuf[cpos] == ' ') {
-                               cpos++;
-                               state = state == OSTR ? STR2 : ++state;
-                               return (SP);
-                       }
-                       break;
-
-               case ZSTR2:
-                       if (cbuf[cpos] == '\n') {
-                               state = CMD;
-                               return (CRLF);
-                       }
-                       /* FALLTHROUGH */
-
-               case STR2:
-                       cp = &cbuf[cpos];
-                       n = strlen(cp);
-                       cpos += n - 1;
-                       /*
-                        * Make sure the string is nonempty and \n terminated.
-                        */
-                       if (n > 1 && cbuf[cpos] == '\n') {
-                               cbuf[cpos] = '\0';
-                               *(char **)&yylval = copy(cp);
-                               cbuf[cpos] = '\n';
-                               state = ARGS;
-                               return (STRING);
-                       }
-                       break;
-
-               case NSTR:
-                       if (cbuf[cpos] == ' ') {
-                               cpos++;
-                               return (SP);
-                       }
-                       if (isdigit(cbuf[cpos])) {
-                               cp = &cbuf[cpos];
-                               while (isdigit(cbuf[++cpos]))
-                                       ;
-                               c = cbuf[cpos];
-                               cbuf[cpos] = '\0';
-                               yylval = atoi(cp);
-                               cbuf[cpos] = c;
-                               state = STR1;
-                               return (NUMBER);
-                       }
-                       state = STR1;
-                       goto dostr1;
-
-               case ARGS:
-                       if (isdigit(cbuf[cpos])) {
-                               cp = &cbuf[cpos];
-                               while (isdigit(cbuf[++cpos]))
-                                       ;
-                               c = cbuf[cpos];
-                               cbuf[cpos] = '\0';
-                               yylval = atoi(cp);
-                               cbuf[cpos] = c;
-                               return (NUMBER);
-                       }
-                       switch (cbuf[cpos++]) {
-
-                       case '\n':
-                               state = CMD;
-                               return (CRLF);
-
-                       case ' ':
-                               return (SP);
-
-                       case ',':
-                               return (COMMA);
-
-                       case 'A':
-                       case 'a':
-                               return (A);
-
-                       case 'B':
-                       case 'b':
-                               return (B);
-
-                       case 'C':
-                       case 'c':
-                               return (C);
-
-                       case 'E':
-                       case 'e':
-                               return (E);
-
-                       case 'F':
-                       case 'f':
-                               return (F);
-
-                       case 'I':
-                       case 'i':
-                               return (I);
-
-                       case 'L':
-                       case 'l':
-                               return (L);
-
-                       case 'N':
-                       case 'n':
-                               return (N);
-
-                       case 'P':
-                       case 'p':
-                               return (P);
-
-                       case 'R':
-                       case 'r':
-                               return (R);
-
-                       case 'S':
-                       case 's':
-                               return (S);
-
-                       case 'T':
-                       case 't':
-                               return (T);
-
-                       }
-                       break;
-
-               default:
-                       fatal("Unknown state in scanner.");
-               }
-               yyerror((char *) 0);
-               state = CMD;
-               longjmp(errcatch,0);
-       }
-}
-
-upper(s)
-       register char *s;
-{
-       while (*s != '\0') {
-               if (islower(*s))
-                       *s = toupper(*s);
-               s++;
-       }
-}
-
-char *
-copy(s)
-       char *s;
-{
-       char *p;
-       extern char *strcpy();
-
-       p = malloc((unsigned) strlen(s) + 1);
-       if (p == NULL)
-               fatal("Ran out of memory.");
-       (void) strcpy(p, s);
-       return (p);
-}
-
-help(ctab, s)
-       struct tab *ctab;
-       char *s;
-{
-       register struct tab *c;
-       register int width, NCMDS;
-       char *type;
-
-       if (ctab == sitetab)
-               type = "SITE ";
-       else
-               type = "";
-       width = 0, NCMDS = 0;
-       for (c = ctab; c->name != NULL; c++) {
-               int len = strlen(c->name);
-
-               if (len > width)
-                       width = len;
-               NCMDS++;
-       }
-       width = (width + 8) &~ 7;
-       if (s == 0) {
-               register int i, j, w;
-               int columns, lines;
-
-               lreply(214, "The following %scommands are recognized %s.",
-                   type, "(* =>'s unimplemented)");
-               columns = 76 / width;
-               if (columns == 0)
-                       columns = 1;
-               lines = (NCMDS + columns - 1) / columns;
-               for (i = 0; i < lines; i++) {
-                       printf("   ");
-                       for (j = 0; j < columns; j++) {
-                               c = ctab + j * lines + i;
-                               printf("%s%c", c->name,
-                                       c->implemented ? ' ' : '*');
-                               if (c + lines >= &ctab[NCMDS])
-                                       break;
-                               w = strlen(c->name) + 1;
-                               while (w < width) {
-                                       putchar(' ');
-                                       w++;
-                               }
-                       }
-                       printf("\r\n");
-               }
-               (void) fflush(stdout);
-               reply(214, "Direct comments to ftp-bugs@%s.", hostname);
-               return;
-       }
-       upper(s);
-       c = lookup(ctab, s);
-       if (c == (struct tab *)0) {
-               reply(502, "Unknown command %s.", s);
-               return;
-       }
-       if (c->implemented)
-               reply(214, "Syntax: %s%s %s", type, c->name, c->help);
-       else
-               reply(214, "%s%-*s\t%s; unimplemented.", type, width,
-                   c->name, c->help);
-}
-
-sizecmd(filename)
-char *filename;
-{
-       switch (type) {
-       case TYPE_L:
-       case TYPE_I: {
-               struct stat stbuf;
-               if (stat(filename, &stbuf) < 0 ||
-                   (stbuf.st_mode&S_IFMT) != S_IFREG)
-                       reply(550, "%s: not a plain file.", filename);
-               else
-                       reply(213, "%lu", stbuf.st_size);
-               break;}
-       case TYPE_A: {
-               FILE *fin;
-               register int c, count;
-               struct stat stbuf;
-               fin = fopen(filename, "r");
-               if (fin == NULL) {
-                       perror_reply(550, filename);
-                       return;
-               }
-               if (fstat(fileno(fin), &stbuf) < 0 ||
-                   (stbuf.st_mode&S_IFMT) != S_IFREG) {
-                       reply(550, "%s: not a plain file.", filename);
-                       (void) fclose(fin);
-                       return;
-               }
-
-               count = 0;
-               while((c=getc(fin)) != EOF) {
-                       if (c == '\n')  /* will get expanded to \r\n */
-                               count++;
-                       count++;
-               }
-               (void) fclose(fin);
-
-               reply(213, "%ld", count);
-               break;}
-       default:
-               reply(504, "SIZE not implemented for Type %c.", "?AEIL"[type]);
-       }
-}
diff --git a/src/ftpd43+/ftpd.8 b/src/ftpd43+/ftpd.8
deleted file mode 100644 (file)
index 1b763f2..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-.\" Copyright (c) 1985, 1988 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms are permitted
-.\" provided that the above copyright notice and this paragraph are
-.\" duplicated in all such forms and that any documentation,
-.\" advertising materials, and other materials related to such
-.\" distribution and use acknowledge that the software was developed
-.\" by the University of California, Berkeley.  The name of the
-.\" University may not be used to endorse or promote products derived
-.\" from this software without specific prior written permission.
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-.\" WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-.\"
-.\"    @(#)ftpd.8      6.7.1.1 (Berkeley) 3/2/89
-.\"
-.TH FTPD 8 "February 23, 1989"
-.UC 5
-.SH NAME
-ftpd \- DARPA Internet File Transfer Protocol server
-.SH SYNOPSIS
-.B /etc/ftpd
-[
-.B \-d
-] [
-.B \-l
-] [
-.BR \-t timeout
-] [
-.BR \-T maxtimeout
-]
-.SH DESCRIPTION
-.I Ftpd
-is the DARPA Internet File Transfer Protocol
-server process.  The server uses the TCP protocol
-and listens at the port specified in the ``ftp''
-service specification; see
-.IR services (5).
-.PP
-If the 
-.B \-d
-option is specified,
-debugging information is written to the syslog.
-.PP
-If the
-.B \-l
-option is specified,
-each ftp session is logged in the syslog.
-.PP
-The ftp server
-will timeout an inactive session after 15 minutes.
-If the
-.B \-t
-option is specified,
-the inactivity timeout period will be set to
-.I timeout
-seconds.
-A client may also request a different timeout period;
-the maximum period allowed may be set to
-.I timeout
-seconds with the
-.B \-T
-option.
-The default limit is 2 hours.
-.PP
-The ftp server currently supports the following ftp
-requests; case is not distinguished.
-.PP
-.nf
-.ta \w'Request        'u
-\fBRequest     Description\fP
-ABOR   abort previous command
-ACCT   specify account (ignored)
-ALLO   allocate storage (vacuously)
-APPE   append to a file
-CDUP   change to parent of current working directory
-CWD    change working directory
-DELE   delete a file
-HELP   give help information
-LIST   give list files in a directory (``ls -lgA'')
-MKD    make a directory
-MDTM   show last modification time of file
-MODE   specify data transfer \fImode\fP
-NLST   give name list of files in directory 
-NOOP   do nothing
-PASS   specify password
-PASV   prepare for server-to-server transfer
-PORT   specify data connection port
-PWD    print the current working directory
-QUIT   terminate session
-RETR   retrieve a file
-RMD    remove a directory
-RNFR   specify rename-from file name
-RNTO   specify rename-to file name
-SITE   non-standard commands (see next section)
-SIZE   return size of file
-STAT   return status of server
-STOR   store a file
-STOU   store a file with a unique name
-STRU   specify data transfer \fIstructure\fP
-SYST   show operating system type of server system
-TYPE   specify data transfer \fItype\fP
-USER   specify user name
-XCUP   change to parent of current working directory (deprecated)
-XCWD   change working directory (deprecated)
-XMKD   make a directory (deprecated)
-XPWD   print the current working directory (deprecated)
-XRMD   remove a directory (deprecated)
-.fi
-.PP
-The following non-standard or UNIX specific commands are supported
-by the SITE request.
-.PP
-.nf
-.ta \w'Request        'u
-\fBRequest     Description\fP
-UMASK  change umask. \fIE.g.\fP SITE UMASK 002
-IDLE   set idle-timer. \fIE.g.\fP SITE IDLE 60
-CHMOD  change mode of a file. \fIE.g.\fP SITE CHMOD 755 filename
-HELP   give help information. \fIE.g.\fP SITE HELP
-.fi
-.PP
-The remaining ftp requests specified in Internet RFC 959 are
-recognized, but not implemented.
-MDTM and SIZE are not specified in
-RFC 959, but will appear in the next updated FTP RFC.
-.PP
-The ftp server will abort an active file transfer only when the
-ABOR command is preceded by a Telnet "Interrupt Process" (IP)
-signal and a Telnet "Synch" signal in the command Telnet stream,
-as described in Internet RFC 959.
-If a STAT command is received during a data transfer, preceded by a Telnet IP
-and Synch, transfer status will be returned.
-.PP
-.I Ftpd
-interprets file names according to the ``globbing''
-conventions used by
-.IR csh (1).
-This allows users to utilize the metacharacters ``*?[]{}~''.
-.PP
-.I Ftpd
-authenticates users according to three rules. 
-.IP 1)
-The user name must be in the password data base,
-.IR /etc/passwd ,
-and not have a null password.  In this case a password
-must be provided by the client before any file operations
-may be performed.
-.IP 2)
-The user name must not appear in the file
-.IR /etc/ftpusers .
-.IP 3)
-The user must have a standard shell returned by 
-.IR getusershell (3).
-.IP 4)
-If the user name is ``anonymous'' or ``ftp'', an
-anonymous ftp account must be present in the password
-file (user ``ftp'').  In this case the user is allowed
-to log in by specifying any password (by convention this
-is given as the client host's name).
-.PP
-In the last case, 
-.I ftpd
-takes special measures to restrict the client's access privileges.
-The server performs a 
-.IR chroot (2)
-command to the home directory of the ``ftp'' user.
-In order that system security is not breached, it is recommended
-that the ``ftp'' subtree be constructed with care;  the following
-rules are recommended.
-.IP ~ftp)
-Make the home directory owned by ``ftp'' and unwritable by anyone.
-.IP ~ftp/bin)
-Make this directory owned by the super-user and unwritable by
-anyone.  The program
-.IR ls (1)
-must be present to support the list command.  This
-program should have mode 111.
-.IP ~ftp/etc)
-Make this directory owned by the super-user and unwritable by
-anyone.  The files
-.IR passwd (5)
-and
-.IR group (5)
-must be present for the 
-.I ls
-command to be able to produce owner names rather than numbers.
-The password field in
-.I passwd
-is not used, and should not contain real encrypted passwords.
-These files should be mode 444.
-.IP ~ftp/pub)
-Make this directory mode 777 and owned by ``ftp''.  Users
-should then place files which are to be accessible via the
-anonymous account in this directory.
-.SH "SEE ALSO"
-ftp(1), getusershell(3), syslogd(8)
-.SH BUGS
-The anonymous account is inherently dangerous and should
-avoided when possible.
-.PP
-The server must run as the super-user
-to create sockets with privileged port numbers.  It maintains
-an effective user id of the logged in user, reverting to
-the super-user only when binding addresses to sockets.  The
-possible security holes have been extensively
-scrutinized, but are possibly incomplete.
diff --git a/src/ftpd43+/ftpd.c b/src/ftpd43+/ftpd.c
deleted file mode 100644 (file)
index 26f3a9e..0000000
+++ /dev/null
@@ -1,2140 +0,0 @@
-/*
- * Copyright (c) 1985, 1988 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/*
- * FTP server.
- */
-
-#include <afs/param.h>
-#ifdef AFS_AIX32_ENV
-#define        _CSECURITY 1            /* XXX */
-#endif
-#include <sys/param.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <sys/file.h>
-#include <sys/wait.h>
-#include <dirent.h>
-#ifdef _CSECURITY
-/* Security New Stuff */
-#include <sys/id.h>
-#include <sys/priv.h>
-#endif /* _CSECURITY */
-#include <netinet/in.h>
-
-#define        FTP_NAMES
-#include "ftp.h"
-#include <arpa/inet.h>
-#ifndef AFS_HPUX_ENV
-#include <arpa/telnet.h>
-#endif
-#include <ctype.h>
-#include <stdio.h>
-#include <signal.h>
-#include <pwd.h>
-#include <setjmp.h>
-#include <netdb.h>
-#include <errno.h>
-#include <string.h>
-#include <unistd.h>
-#include <time.h>
-#if defined(AIX)
-#include <sys/syslog.h>
-#else /* defined(AIX) */
-#include <syslog.h>
-#endif /* defined(AIX) */
-#if     defined(AFS_SUN5_ENV) && !defined(_STDARG_H)
-#include <varargs.h>
-#endif
-#if    defined(AFS_SUN53_ENV)
-#include <shadow.h>
-#include <security/ia_appl.h>
-char *shadow_pass();
-#endif /* AFS_SUN53_ENV */
-
-#ifdef AFS_AIX32_ENV
-#include <usersec.h>
-#include <userconf.h>
-
-#ifdef _CSECURITY
-#define tcpip_auditlog null
-void
-null()
-{
-    return;
-}
-
-#include "tcpip_audit.h"
-#endif /* _CSECURITY */
-
-#define MSGSTR(n,s) s
-
-#ifdef _CSECURITY
-int remote_addr;
-char *audit_tail[TCPIP_MAX_TAIL_FIELDS];
-uid_t saved_uid, effective_uid;
-priv_t priv;
-
-/* Restore privs and set the invoker back to uid saved_uid */
-#define GET_PRIV(a)            \
-        getpriv(PRIV_MAXIMUM, &priv,sizeof(priv_t)); \
-        setpriv(PRIV_SET|PRIV_EFFECTIVE|PRIV_BEQUEATH, &priv,sizeof(priv_t)); \
-        setuidx(ID_EFFECTIVE|ID_REAL|ID_SAVED, (a));
-
-/* Drop privs and set the invoker to uid 100 */
-#define DROP_PRIV(a)           \
-        priv.pv_priv[0] = 0;   \
-        priv.pv_priv[1] = 0;   \
-        setpriv(PRIV_SET|PRIV_EFFECTIVE|PRIV_BEQUEATH, &priv,sizeof(priv_t)); \
-        setuidx(ID_EFFECTIVE|ID_REAL|ID_SAVED, (a));
-
-#endif /* _CSECURITY */
-#if defined(NLS) || defined(KJI)
-#include <locale.h>
-#endif
-
-int tracing = 0;
-#endif /* AFS_AIX32_ENV */
-
-/*
- * File containing login names
- * NOT to be used on this machine.
- * Commonly used to disallow uucp.
- */
-#define        FTPUSERS        "/etc/ftpusers"
-
-#ifndef AFS_LINUX20_ENV
-extern int errno;
-extern char *sys_errlist[];
-extern int sys_nerr;
-#endif
-extern char *crypt();
-extern char version[];
-extern char *home;             /* pointer to home directory for glob */
-extern FILE *ftpd_popen(), *fopen(), *freopen();
-extern int ftpd_pclose(), fclose();
-extern char *getline();
-extern char cbuf[];
-
-struct sockaddr_in ctrl_addr;
-struct sockaddr_in data_source;
-struct sockaddr_in data_dest;
-struct sockaddr_in his_addr;
-struct sockaddr_in pasv_addr;
-
-int data;
-jmp_buf errcatch, urgcatch;
-int logged_in;
-struct passwd *pw;
-int debug;
-int timeout = 900;             /* timeout after 15 minutes of inactivity */
-int maxtimeout = 7200;         /* don't allow idle time to be set beyond 2 hours */
-int logging;
-int guest;
-int type;
-int form;
-int stru;                      /* avoid C keyword */
-int mode;
-int usedefault = 1;            /* for data transfers */
-int pdata = -1;                        /* for passive mode */
-int transflag;
-off_t file_size;
-off_t byte_count;
-#if !defined(CMASK) || CMASK == 0
-#undef CMASK
-#define CMASK 027
-#endif
-int defumask = CMASK;          /* default umask value */
-char tmpline[7];
-char hostname[32];
-char remotehost[32];
-
-#ifndef        FD_SETSIZE
-/* Yuck - we should have a AFS_BSD42 macro for these stuff */
-typedef u_short uid_t;
-typedef u_short gid_t;
-#endif
-
-/* disallow ftp PORT command to connect to a third host */
-int allowPortAttack = 0;
-
-/*
- * Timeout intervals for retrying connections
- * to hosts that don't accept PORT cmds.  This
- * is a kludge, but given the problems with TCP...
- */
-#define        SWAITMAX        90      /* wait at most 90 seconds */
-#define        SWAITINT        5       /* interval between retries */
-
-int swaitmax = SWAITMAX;
-int swaitint = SWAITINT;
-
-void lostconn();
-void myoob();
-FILE *getdatasock(), *dataconn();
-
-#ifdef AFS_OSF_ENV
-#include <sia.h>
-#include <paths.h>
-#define     _PATH_FTPUSERS  "/etc/ftpusers"
-extern off_t restart_point;
-int sia_argc;                  /* SIA */
-char **sia_argv;               /* SIA */
-SIAENTITY *entity = NULL;      /* SIA */
-#endif
-
-#ifdef SETPROCTITLE
-char **Argv = NULL;            /* pointer to argument vector */
-char *LastArgv = NULL;         /* end of argv */
-char proctitle[BUFSIZ];                /* initial part of title */
-#endif /* SETPROCTITLE */
-
-#if defined(AFS_HPUX_ENV)
-/* HPUX uses a different call to set[res][gu]ids: */
-#define seteuid(newEuid)       setresuid(-1, (newEuid), -1)
-#define setegid(newEgid)       setresgid(-1, (newEgid), -1)
-#endif /* defined(AFS_HPUX_ENV) */
-
-#ifdef AFS_AIX_ENV
-#define setegid(newEgid)       setgid(newEgid)
-#endif
-
-main(argc, argv, envp)
-     int argc;
-     char *argv[];
-     char **envp;
-{
-    int addrlen, on = 1;
-    char *cp;
-#ifdef AFS_AIX32_ENV
-    struct sigaction sa;
-    void trace_handler();
-    int pid;
-#ifdef _CSECURITY
-    char AllClass[] = "ALL\0";
-#endif /* _CSECURITY */
-
-#ifdef notdef
-    /*
-     *  If we're being called as a non-afs version of the program, and if AFS
-     * extensions have been loaded, run the AFS version of the program.
-     */
-    check_and_run_afs_vers(argv);
-#endif
-
-#if defined(NLS) || defined(KJI)
-    setlocale(LC_ALL, "");
-#endif
-    /* New Security Code */
-    saved_uid = getuidx(ID_SAVED);
-#ifdef MSG
-    catd = NLcatopen(MF_FTPD, 0);
-#endif
-#ifdef _CSECURITY
-    if ((auditproc(0, AUDIT_STATUS, AUDIT_SUSPEND, 0)) < 0) {
-       syslog(LOG_ALERT, "ftpd: auditproc: %m");
-       exit(1);
-    }
-    if (auditproc(0, AUDIT_EVENTS, AllClass, 5) < 0) {
-       syslog(LOG_ALERT, "ftpd: auditproc: %m");
-       exit(1);
-    }
-#endif /* _CSECURITY */
-#endif /* AFS_AIX32_ENV */
-
-#ifdef AFS_OSF_ENV
-    sia_argc = argc;           /* SIA */
-    sia_argv = argv;           /* SIA */
-#endif
-    addrlen = sizeof(his_addr);
-    if (getpeername(0, (struct sockaddr *)&his_addr, &addrlen) < 0) {
-       syslog(LOG_ERR, "getpeername (%s): %m", argv[0]);
-       exit(1);
-    }
-#ifdef _CSECURITY
-    remote_addr = his_addr.sin_addr.s_addr;
-#endif /* _CSECURITY */
-    addrlen = sizeof(ctrl_addr);
-    if (getsockname(0, (struct sockaddr *)&ctrl_addr, &addrlen) < 0) {
-       syslog(LOG_ERR, "getsockname (%s): %m", argv[0]);
-       exit(1);
-    }
-    data_source.sin_port = htons(ntohs(ctrl_addr.sin_port) - 1);
-    debug = 0;
-    openlog("ftpd", LOG_PID, LOG_DAEMON);
-#ifdef SETPROCTITLE
-    /*
-     *  Save start and extent of argv for setproctitle.
-     */
-    Argv = argv;
-    while (*envp)
-       envp++;
-    LastArgv = envp[-1] + strlen(envp[-1]);
-#endif /* SETPROCTITLE */
-
-
-    argc--, argv++;
-    while (argc > 0 && *argv[0] == '-') {
-       for (cp = &argv[0][1]; *cp; cp++)
-           switch (*cp) {
-           case 'd':
-           case 'v':
-               debug = 1;
-               break;
-
-           case 'l':
-               logging = 1;
-               break;
-
-#ifdef AFS_AIX32_ENV
-           case 's':
-               tracing = 1;
-               break;
-#endif
-           case 't':
-               timeout = atoi(++cp);
-               if (maxtimeout < timeout)
-                   maxtimeout = timeout;
-               goto nextopt;
-
-           case 'T':
-               maxtimeout = atoi(++cp);
-               if (timeout > maxtimeout)
-                   timeout = maxtimeout;
-               goto nextopt;
-
-           case 'u':
-               {
-                   int val = 0;
-
-                   while (*++cp && *cp >= '0' && *cp <= '9')
-                       val = val * 8 + *cp - '0';
-                   if (*cp)
-                       fprintf(stderr, "ftpd: Bad value for -u\n");
-                   else
-                       defumask = val;
-                   goto nextopt;
-               }
-
-           case 'z':           /* allow ftp PORT command to connect to a
-                                ** third-party host */
-               allowPortAttack = 1;
-               break;
-
-           default:
-               fprintf(stderr, "ftpd: Unknown flag -%c ignored.\n", *cp);
-               break;
-           }
-      nextopt:
-       argc--, argv++;
-    }
-#ifdef AFS_AIX32_ENV
-    if (tracing
-       && setsockopt(0, SOL_SOCKET, SO_DEBUG, (char *)&on, sizeof(on)) < 0)
-       syslog(LOG_ERR, MSGSTR(SOCKOPT, "setsockopt: %m"));
-
-    /* set-up signal handler routines for SRC TRACE ON/OFF support */
-    memset((char *)&sa, 0, sizeof(sa));
-    sa.sa_mask.losigs = sigmask(SIGUSR2);
-    sa.sa_handler = trace_handler;
-    sigaction(SIGUSR1, &sa, NULL);
-    sa.sa_mask.losigs = sigmask(SIGUSR1);
-    sa.sa_handler = trace_handler;
-    sigaction(SIGUSR2, &sa, NULL);
-#endif /* AFS_AIX32_ENV */
-
-#ifdef AFS_OSF_ENV
-    (void)freopen(_PATH_DEVNULL, "w", stderr);
-#else
-    (void)freopen("/dev/null", "w", stderr);
-#endif
-    (void)signal(SIGPIPE, lostconn);
-    (void)signal(SIGCHLD, SIG_IGN);
-    if ((int)signal(SIGURG, myoob) < 0)
-       syslog(LOG_ERR, "signal: %m");
-
-    /* handle urgent data inline */
-    /* Sequent defines this, but it doesn't work */
-#ifdef SO_OOBINLINE
-    if (setsockopt(0, SOL_SOCKET, SO_OOBINLINE, (char *)&on, sizeof(on)) < 0)
-       syslog(LOG_ERR, "setsockopt: %m");
-#endif
-#ifdef AFS_AIX32_ENV
-    pid = getpid();
-    if (ioctl(fileno(stdin), SIOCSPGRP, (char *)&pid) == -1)
-       syslog(LOG_ERR, MSGSTR(EIOCTL, "ioctl SIOCSPGRP: %m"));
-#endif
-#ifdef F_SETOWN
-    if (fcntl(fileno(stdin), F_SETOWN, getpid()) == -1)
-       syslog(LOG_ERR, "fcntl F_SETOWN: %m");
-#endif
-    dolog(&his_addr);
-    /*
-     * Set up default state
-     */
-    data = -1;
-    type = TYPE_A;
-    form = FORM_N;
-    stru = STRU_F;
-    mode = MODE_S;
-    tmpline[0] = '\0';
-    (void)gethostname(hostname, sizeof(hostname));
-    reply(220, "%s FTP server (%s) ready.", hostname, version);
-    (void)setjmp(errcatch);
-    for (;;)
-       (void)yyparse();
-    /* NOTREACHED */
-}
-
-
-#ifdef AFS_AIX32_ENV
-/*
- * trace_handler - SRC TRACE ON/OFF signal handler
- */
-void
-trace_handler(sig)
-     int sig;
-{
-    int onoff;
-
-    onoff = (sig == SIGUSR1) ? 1 : 0;
-    if (setsockopt(0, SOL_SOCKET, SO_DEBUG, &onoff, sizeof(onoff)) < 0)
-       syslog(LOG_ERR, MSGSTR(SOCKOPT, "setsockopt: %m"));
-}
-#endif
-
-
-void
-lostconn()
-{
-
-    if (debug)
-       syslog(LOG_DEBUG, "lost connection");
-#ifdef _CSECURITY
-    GET_PRIV(saved_uid);
-    CONNECTION_WRITE(remote_addr, "ftp/tcp", "close",
-                    MSGSTR(LOSTCONN, "Lost connection"), -1);
-    DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-    dologout(-1);
-}
-
-static char ttyline[20];
-#ifdef AFS_OSF_ENV
-extern void *malloc();
-#else
-extern char *malloc();
-#endif
-/*
- * Helper function for sgetpwnam().
- */
-char *
-sgetsave(s)
-     char *s;
-{
-    char *new = malloc((unsigned)strlen(s) + 1);
-
-    if (new == NULL) {
-       perror_reply(421, "Local resource failure: malloc");
-       dologout(1);
-       /* NOTREACHED */
-    }
-    (void)strcpy(new, s);
-    return (new);
-}
-
-/*
- * Save the result of a getpwnam.  Used for USER command, since
- * the data returned must not be clobbered by any other command
- * (e.g., globbing).
- */
-struct passwd *
-sgetpwnam(name)
-     char *name;
-{
-    static struct passwd save;
-    register struct passwd *p;
-    struct passwd *getpwnam();
-    char *sgetsave();
-
-#ifdef AFS_AIX32_ENV
-    void getnonflatname();
-
-    getnonflatname(name);
-#endif
-    if ((p = getpwnam(name)) == NULL)
-       return (p);
-
-    if (save.pw_name) {
-       free(save.pw_name);
-       free(save.pw_passwd);
-       free(save.pw_gecos);
-       free(save.pw_dir);
-       free(save.pw_shell);
-    }
-    save = *p;
-    save.pw_name = sgetsave(p->pw_name);
-    save.pw_passwd = sgetsave(p->pw_passwd);
-    save.pw_gecos = sgetsave(p->pw_gecos);
-    save.pw_dir = sgetsave(p->pw_dir);
-    save.pw_shell = sgetsave(p->pw_shell);
-    return (&save);
-}
-
-#ifdef AFS_AIX32_ENV
-/*
- * NAME: getnonflatname()
- *                                                                    
- * FUNCTION: gets the name in /etc/passwd and replaces the
- *             flattened name that might have been passed in.
- *                                                                    
- * EXECUTION ENVIRONMENT: static
- *                                                                   
- * RETURNS: none.
- *
- */
-
-void
-getnonflatname(char *user)
-{
-    struct passwd *pw;         /* return from getpwent() */
-    char currflat[16];         /* name we are looking for */
-    char dataflat[16];         /* name from data base */
-    register int siz;
-    register int members = 0;
-
-#ifdef _KJI
-    setpwent();
-    while ((pw = getpwent()) != NULL) {
-       /* Map NLS characters in name to ascii */
-       NLflatstr(user, currflat, 16);
-       NLflatstr(pw->pw_name, dataflat, 16);
-       if (strcmp(currflat, dataflat) == 0) {
-           strcpy(user, pw->pw_name);
-           break;
-       }
-    }
-    endpwent();
-#endif
-}
-#endif
-
-int login_attempts;            /* number of failed login attempts */
-int askpasswd;                 /* had user command, ask for passwd */
-
-/*
- * USER command.
- * Sets global passwd pointer pw if named account exists
- * and is acceptable; sets askpasswd if a PASS command is
- * expected. If logged in previously, need to reset state.
- * If name is "ftp" or "anonymous" and ftp account exists,
- * set guest and pw, then just return.
- * If account doesn't exist, ask for passwd anyway.
- * Otherwise, check user requesting login privileges.
- * Disallow anyone who does not have a standard
- * shell returned by getusershell() (/etc/shells).
- * Disallow anyone mentioned in the file FTPUSERS
- * to allow people such as root and uucp to be avoided.
- */
-user(name)
-     char *name;
-{
-    register char *cp = NULL;
-    FILE *fd;
-    char *shell, *validshells = NULL;
-    char line[BUFSIZ], *getusershell();
-
-
-    if (logged_in) {
-       if (guest) {
-           reply(530, "Can't change user from guest login.");
-           return;
-       }
-       end_login();
-    }
-
-    guest = 0;
-    if (strcmp(name, "ftp") == 0 || strcmp(name, "anonymous") == 0) {
-#ifdef AFS_OSF_ENV
-       if (checkuser("ftp") || checkuser("anonymous")) {
-           reply(530, "User %s access denied.", name);
-           if (logging)
-               syslog(LOG_NOTICE, "FTP LOGIN REFUSED FROM %s, %s",
-                      remotehost, name);
-       } else
-#endif
-       if ((pw = sgetpwnam("ftp")) != NULL) {
-           guest = 1;
-           askpasswd = 1;
-           reply(331, "Guest login ok, send ident as password.");
-       } else
-           reply(530, "User %s unknown.", name);
-       return;
-    }
-    if (pw = sgetpwnam(name)) {
-       if ((shell = pw->pw_shell) == NULL || *shell == 0)
-           shell = "/bin/sh";
-#ifdef AFS_AIX32_ENV
-       if (getconfattr(SC_SYS_LOGIN, SC_SHELLS, &validshells, SEC_LIST)) {
-           reply(530, MSGSTR(DENIED, "User %s access denied."), name);
-           if (logging)
-               syslog(LOG_NOTICE,
-                      MSGSTR(GETCONFATTR,
-                             "Getconfattr failed with error: %m"));
-           pw = (struct passwd *)NULL;
-           return;
-       }
-       while (*(cp = validshells) != NULL) {
-           if (strcmp(cp, shell) == 0)
-               break;
-           else
-               validshells += strlen(validshells) + 1;
-       }
-#else
-       while ((cp = getusershell()) != NULL)
-           if (strcmp(cp, shell) == 0)
-               break;
-       endusershell();
-#endif /* AFS_AIX32_ENV */
-#ifdef AFS_AIX32_ENV
-       if (*cp == NULL) {
-#else
-#ifdef AFS_OSF_ENV
-       if (cp == NULL || checkuser(name)) {
-#else
-       if (cp == NULL) {
-#endif
-#endif
-           reply(530, "User %s access denied.", name);
-           if (logging)
-               syslog(LOG_NOTICE, "FTP LOGIN REFUSED FROM %s, %s",
-                      remotehost, name);
-           pw = (struct passwd *)NULL;
-           return;
-       }
-#ifndef        AFS_OSF_ENV
-       if ((fd = fopen(FTPUSERS, "r")) != NULL) {
-           while (fgets(line, sizeof(line), fd) != NULL) {
-               if ((cp = strchr(line, '\n')) != NULL)
-                   *cp = '\0';
-               if (strcmp(line, name) == 0) {
-                   reply(530, "User %s access denied.", name);
-                   if (logging)
-                       syslog(LOG_NOTICE, "FTP LOGIN REFUSED FROM %s, %s",
-                              remotehost, name);
-                   pw = (struct passwd *)NULL;
-                   return;
-               }
-           }
-       }
-       (void)fclose(fd);
-#endif
-    }
-    reply(331, "Password required for %s.", name);
-    askpasswd = 1;
-    /*
-     * Delay before reading passwd after first failed
-     * attempt to slow down passwd-guessing programs.
-     */
-    if (login_attempts)
-       sleep((unsigned)login_attempts);
-}
-
-#ifdef AFS_OSF_ENV
-/*
- * Check if a user is in the file _PATH_FTPUSERS
- */
-checkuser(name)
-     char *name;
-{
-    register FILE *fd;
-    register char *p;
-    char line[BUFSIZ];
-
-    if ((fd = fopen(_PATH_FTPUSERS, "r")) != NULL) {
-       while (fgets(line, sizeof(line), fd) != NULL) {
-           if ((p = strchr(line, '\n')) != NULL)
-               *p = '\0';
-           if (line[0] == '#')
-               continue;
-           if (strcmp(line, name) == 0)
-               return (1);
-       }
-       (void)fclose(fd);
-    }
-    return (0);
-}
-#endif
-
-
-/*
- * Terminate login as previous user, if any, resetting state;
- * used when USER command is given or login fails.
- */
-end_login()
-{
-
-#ifdef AFS_AIX32_ENV
-/* New Security Code (void) seteuid(saved_uid); */
-    GET_PRIV(saved_uid);
-#else
-    (void)seteuid((uid_t) 0);
-#endif
-    if (logged_in)
-       logwtmp(ttyline, "", "");
-    pw = NULL;
-    logged_in = 0;
-    guest = 0;
-}
-
-pass(passwd)
-     char *passwd;
-{
-    char *xpasswd = 0, *salt;
-    int afsauthok = 1;
-    int limit;
-#ifdef AFS_OSF_ENV
-    uid_t seuid;
-#endif
-#if    defined(AFS_SUN53_ENV)
-    struct ia_status out;
-    struct passwd *pwd;
-    int val;
-#endif
-    if (logged_in || pw == NULL || askpasswd == 0) {
-       reply(503, "Login with USER first.");
-#ifdef _CSECURITY
-       NET_ACCESS_WRITE(remote_addr, "File transfer", "",
-                        MSGSTR(LOGINUSER, "Login with USER first."), -1);
-#endif /* _CSECURITY */
-       return;
-    }
-    askpasswd = 0;
-
-    if (!guest) {              /* "ftp" is only account allowed no password */
-       char *reason;
-       int doafs = 0, co;
-
-       if (pw == NULL)
-           salt = "xx";
-       else
-           salt = pw->pw_passwd;
-       setpag();               /* set a pag */
-#ifdef AFS_OSF_ENV
-       /* SIA - sia session initialization */
-       if ((co =
-            sia_ses_init(&entity, sia_argc, sia_argv, hostname, pw->pw_name,
-                         (char *)NULL, FALSE, (char *)NULL)) != SIASUCCESS) {
-           reply(530, "Initialization failure");
-           return;
-       }
-       /* SIA - session authentication */
-       if (!strcmp(pw->pw_passwd, "X")) {
-           doafs = 1;
-       }
-
-       if (!doafs
-           && (co = sia_ses_authent(NULL, passwd, entity)) != SIASUCCESS) {
-           if (!doafs && pw->pw_uid) {
-               if (ka_UserAuthenticate
-                   (pw->pw_name, /*inst */ "", /*realm */ 0,
-                    passwd, /*sepag */ 1, &reason)) {
-                   goto bad2;
-               }
-               goto good1;
-           }
-           syslog(LOG_ERR, "ses_authent failed=%d\n", co);
-         bad1:
-           reply(530, "Login incorrect. ");
-           pw = NULL;
-           if (logging)
-               syslog(LOG_WARNING, "login %s from %s failed.", pw->pw_name,
-                      remotehost);
-           if (login_attempts++ >= 5) {
-               syslog(LOG_NOTICE, "repeated login failures from %s.",
-                      remotehost);
-               sia_ses_release(&entity);
-               exit(0);
-           }
-           sia_ses_release(&entity);
-           return;
-       }
-       if (pw->pw_uid
-           && ka_UserAuthenticate(pw->pw_name, /*inst */ "", /*realm */ 0,
-                                  passwd, /*sepag */ 1, &reason)) {
-         bad2:
-           syslog(LOG_ERR, "Afs UserAuth failed\n");
-           xpasswd = crypt(passwd, salt);
-           afsauthok = 0;
-           /* The strcmp does not catch null passwords! */
-           if (*pw->pw_passwd == '\0' || strcmp(xpasswd, pw->pw_passwd)) {
-               goto bad1;
-           }
-       }
-
-      good1:
-       /* SIA - sia session establishment */
-       if ((co = sia_ses_estab(NULL, entity)) != SIASUCCESS) {
-           syslog(LOG_ERR, "ses_estab failed=%d\n", co);
-           reply(530, "Login incorrect. ");
-           sia_ses_release(&entity);
-           return;
-       }
-
-       /* SIA - sia session launching */
-       if ((co = sia_ses_launch(NULL, entity)) != SIASUCCESS) {
-           syslog(LOG_ERR, "ses_launch failed=%d\n", co);
-           reply(530, "Login incorrect. ");
-           sia_ses_release(&entity);
-           return;
-       }
-       /* SIA - get the password entry structure from entity structure */
-       strncpy(pw->pw_name, entity->pwd->pw_name, sizeof(pw->pw_name));
-       strncpy(pw->pw_passwd, entity->pwd->pw_passwd, sizeof(pw->pw_passwd));
-       strncpy(pw->pw_gecos, entity->pwd->pw_gecos, sizeof(pw->pw_gecos));
-       strncpy(pw->pw_dir, entity->pwd->pw_dir, sizeof(pw->pw_dir));
-       strncpy(pw->pw_shell, entity->pwd->pw_shell, sizeof(pw->pw_shell));
-    }
-#else
-       if (
-#if    defined(AFS_AIX32_ENV) || defined(AFS_SUN53_ENV)
-              !pw->pw_uid ||
-#else
-#if defined(AFS_SUN5_ENV)
-              pw->pw_uid &&
-#endif
-#endif
-              ka_UserAuthenticate(pw->pw_name, /*inst */ "", /*realm */ 0,
-                                  passwd, /*sepag */ 1, &reason)) {
-#if defined(AFS_SUN53_ENV)
-           pw->pw_passwd = sgetsave(shadow_pass(pw->pw_name));
-           salt = pw->pw_passwd;
-#endif
-           if (passwd)
-               xpasswd = crypt(passwd, salt);
-           afsauthok = 0;
-           /* The strcmp does not catch null passwords! */
-           if (pw == NULL || *pw->pw_passwd == '\0' || !xpasswd
-               || strcmp(xpasswd, pw->pw_passwd)) {
-               reply(530, "Login incorrect");
-               pw = NULL;
-               if (login_attempts++ >= 5) {
-                   syslog(LOG_NOTICE, "repeated login failures from %s",
-                          remotehost);
-                   exit(0);
-               }
-               return;
-           }
-       }
-    }
-
-    (void)setegid((gid_t) pw->pw_gid);
-    (void)initgroups(pw->pw_name, pw->pw_gid);
-
-    /* open wtmp before chroot */
-    (void)sprintf(ttyline, "%dftp", getpid());
-    logwtmp(ttyline, pw->pw_name, remotehost);
-#endif
-    login_attempts = 0;                /* this time successful */
-    logged_in = 1;
-
-#ifdef AFS_AIX32_ENV
-    if (getuserattr(pw->pw_name, S_UFSIZE, &limit, SEC_INT) >= 0) {
-       if (limit > 0)
-           ulimit(2, limit);
-    }
-#endif
-
-    if (guest) {
-#ifdef AFS_OSF_ENV
-       /* 
-        * SIA -ses_estab has set the euid to be that of
-        * guest.  Save this and then set the euid to be
-        * root.
-        */
-       if ((seuid = geteuid()) < 0) {
-           reply(550, "Can't set guest privileges.");
-           goto bad;
-       }
-       if (seteuid((uid_t) 0) < 0) {
-           reply(550, "Can't set guest privileges.");
-           goto bad;
-       }
-#endif
-       /*
-        * We MUST do a chdir() after the chroot. Otherwise
-        * the old current directory will be accessible as "."
-        * outside the new root!
-        */
-       if (chroot(pw->pw_dir) < 0 || chdir("/") < 0) {
-           reply(550, "Can't set guest privileges.");
-#ifdef AFS_OSF_ENV
-           (void)seteuid(seuid);
-#endif
-           goto bad;
-       }
-    } else {
-#ifdef AFS_OSF_ENV
-       if (strcmp(pw->pw_dir, "/") == 0) {
-#ifdef notdef                  /* ingore the complains for root users like "rootl" */
-           if (strcmp(pw->pw_name, "root"))
-               lreply(230, "No directory! Logging in with home.");
-#endif
-       } else {
-#endif
-
-           if (chdir(pw->pw_dir) < 0) {
-               if (chdir("/") < 0) {
-                   reply(530, "User %s: can't change directory to %s.",
-                         pw->pw_name, pw->pw_dir);
-                   goto bad;
-               } else
-                   lreply(230, "No directory! Logging in with home=/");
-           }
-#ifdef AFS_OSF_ENV
-       }
-#endif
-    }
-
-
-#ifdef AFS_AIX32_ENV
-/* New Security Code   if (seteuid((uid_t)pw->pw_uid) < 0) */
-    effective_uid = pw->pw_uid;
-    priv.pv_priv[0] = 0;
-    priv.pv_priv[1] = 0;
-    setpriv(PRIV_SET | PRIV_EFFECTIVE | PRIV_BEQUEATH, &priv, sizeof(priv_t));
-    if (setuidx(ID_REAL | ID_EFFECTIVE | ID_SAVED, (uid_t) pw->pw_uid) < 0) {
-       reply(550, MSGSTR(NOSEETUID, "Can't set uid."));
-       goto bad;
-    }
-#else
-#ifndef        AFS_OSF_ENV
-    if (seteuid((uid_t) pw->pw_uid) < 0) {
-       reply(550, "Can't set uid.");
-       goto bad;
-    }
-#endif
-#endif
-    if (guest) {
-       reply(230, "Guest login ok, access restrictions apply.");
-#ifdef SETPROCTITLE
-       sprintf(proctitle, "%s: anonymous/%.*s", remotehost,
-               sizeof(proctitle) - sizeof(remotehost) -
-               sizeof(": anonymous/"), passwd);
-       setproctitle(proctitle);
-#endif /* SETPROCTITLE */
-       if (logging)
-           syslog(LOG_INFO, "ANONYMOUS FTP LOGIN FROM %s, %s", remotehost,
-                  passwd);
-    } else {
-       if (afsauthok)
-           reply(230, "User %s logged in.", pw->pw_name);
-       else
-           reply(230, "User %s logged in, no AFS authentication",
-                 pw->pw_name);
-#ifdef SETPROCTITLE
-       sprintf(proctitle, "%s: %s", remotehost, pw->pw_name);
-       setproctitle(proctitle);
-#endif /* SETPROCTITLE */
-       if (logging)
-           syslog(LOG_INFO, "FTP LOGIN FROM %s, %s", remotehost,
-                  pw->pw_name);
-    }
-#ifdef _CSECURITY
-    GET_PRIV(saved_uid);
-    NET_ACCESS_WRITE(remote_addr, "File transfer", pw->pw_name, "", 0);
-    DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-
-    home = pw->pw_dir;         /* home dir for globbing */
-    (void)umask(defumask);
-#ifdef AFS_OSF_ENV
-    sia_ses_release(&entity);  /* SIA */
-#endif
-    return;
-  bad:
-    /* Forget all about it... */
-#ifdef _CSECURITY
-    NET_ACCESS_WRITE(remote_addr, "File transfer", "",
-                    MSGSTR(LOGINERR, "Login incorrect."), -1);
-#endif /* _CSECURITY */
-    end_login();
-#ifdef AFS_OSF_ENV
-    sia_ses_release(&entity);  /* SIA */
-#endif
-}
-
-retrieve(cmd, name)
-     char *cmd, *name;
-{
-    FILE *fin, *dout;
-    struct stat st;
-    int (*closefunc) ();
-#ifdef _CSECURITY
-    char *local, *remote;
-
-    local = "";
-    remote = name;
-#endif /* _CSECURITY */
-    if (cmd == 0) {
-       fin = fopen(name, "r"), closefunc = fclose;
-       st.st_size = 0;
-    } else {
-       char line[BUFSIZ];
-
-       (void)sprintf(line, cmd, name), name = line;
-       fin = ftpd_popen(line, "r"), closefunc = ftpd_pclose;
-       st.st_size = -1;
-       st.st_blksize = BUFSIZ;
-    }
-    if (fin == NULL) {
-       if (errno != 0) {
-           perror_reply(550, name);
-#ifdef _CSECURITY
-           GET_PRIV(saved_uid);
-           EXPORT_DATA_WRITE(remote_addr, local, remote, sys_errlist[errno],
-                             errno);
-           DROP_PRIV(effective_uid);
-       } else {
-           GET_PRIV(saved_uid);
-           EXPORT_DATA_WRITE(remote_addr, local, remote,
-                             "Can't open remote file", -1);
-           DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-       }
-       return;
-    }
-    if (cmd == 0
-       && (fstat(fileno(fin), &st) < 0
-           || (st.st_mode & S_IFMT) != S_IFREG)) {
-       reply(550, "%s: not a plain file.", name);
-#ifdef _CSECURITY
-       GET_PRIV(saved_uid);
-       EXPORT_DATA_WRITE(remote_addr, local, remote,
-                         "Remote file is not plain", -1);
-       DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-       goto done;
-    }
-#ifdef AFS_OSF_ENV
-    if (restart_point) {
-       if (type == TYPE_A) {
-           register int i, n, c;
-
-           n = restart_point;
-           i = 0;
-           while (i++ < n) {
-               if ((c = getc(fin)) == EOF) {
-                   perror_reply(550, name);
-                   goto done;
-               }
-               if (c == '\n')
-                   i++;
-           }
-       } else if (lseek(fileno(fin), restart_point, L_SET) < 0) {
-           perror_reply(550, name);
-           goto done;
-       }
-    }
-#endif
-    dout = dataconn(name, st.st_size, "w");
-    if (dout == NULL) {
-#ifdef _CSECURITY
-       GET_PRIV(saved_uid);
-       EXPORT_DATA_WRITE(remote_addr, local, remote,
-                         "Data connection not established", -1);
-       DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-       goto done;
-    }
-    send_data(fin, dout, st.st_blksize);
-#ifdef _CSECURITY
-    GET_PRIV(saved_uid);
-    EXPORT_DATA_WRITE(remote_addr, local, remote, "", 0);
-    DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-    (void)fclose(dout);
-    data = -1;
-    pdata = -1;
-  done:
-    (*closefunc) (fin);
-}
-
-store(name, mode, unique)
-     char *name, *mode;
-     int unique;
-{
-    FILE *fout, *din;
-    struct stat st;
-    int (*closefunc) ();
-    char *gunique();
-    int c;
-
-#ifdef _CSECURITY
-    char *remote;
-
-    remote = "";
-#endif /* _CSECURITY */
-
-    if (unique && stat(name, &st) == 0 && (name = gunique(name)) == NULL)
-       return;
-#ifdef AFS_OSF_ENV
-    if (restart_point)
-       mode = "r+w";
-#endif
-    fout = fopen(name, mode);
-    closefunc = fclose;
-    if (fout == NULL) {
-       perror_reply(553, name);
-#ifdef _CSECURITY
-       GET_PRIV(saved_uid);
-       IMPORT_DATA_WRITE(remote_addr, name, remote, sys_errlist[errno],
-                         errno);
-       DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-       return;
-    }
-#ifdef AFS_OSF_ENV
-    if (restart_point) {
-       if (type == TYPE_A) {
-           register int i, n, c;
-
-           n = restart_point;
-           i = 0;
-           while (i++ < n) {
-               if ((c = getc(fout)) == EOF) {
-                   perror_reply(550, name);
-                   goto done;
-               }
-               if (c == '\n')
-                   i++;
-           }
-           /*
-            * We must do this seek to "current" position
-            * because we are changing from reading to
-            * writing.
-            */
-           if (fseek(fout, 0L, L_INCR) < 0) {
-               perror_reply(550, name);
-               goto done;
-           }
-       } else if (lseek(fileno(fout), restart_point, L_SET) < 0) {
-           perror_reply(550, name);
-           goto done;
-       }
-    }
-#endif
-    din = dataconn(name, (off_t) - 1, "r");
-    if (din == NULL) {
-#ifdef _CSECURITY
-       GET_PRIV(saved_uid);
-       IMPORT_DATA_WRITE(remote_addr, name, remote,
-                         MSGSTR(NODATACONN, "Can't build data connection"),
-                         -1);
-       DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-       goto done;
-    }
-    if (receive_data(din, fout) == 0) {
-       /*
-        * This is AFS, so close() can return a meaningful error code
-        */
-       c = (*closefunc) (fout);
-       if (c) {
-           perror_reply(452, "Error writing file");
-           (void)fclose(din);
-           return;
-       }
-       fout = NULL;
-       if (unique) {
-           reply(226, "Transfer complete (unique file name:%s).", name);
-#ifdef _CSECURITY
-           GET_PRIV(saved_uid);
-           IMPORT_DATA_WRITE(remote_addr, name, remote, sys_errlist[errno],
-                             errno);
-           DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-       } else {
-           reply(226, "Transfer complete.");
-#ifdef _CSECURITY
-           GET_PRIV(saved_uid);
-           IMPORT_DATA_WRITE(remote_addr, name, remote,
-                             MSGSTR(TRANSOK, "Transfer complete."), 0);
-           DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-       }
-    }
-    (void)fclose(din);
-    data = -1;
-    pdata = -1;
-  done:
-    if (fout)
-       (*closefunc) (fout);
-}
-
-FILE *
-getdatasock(mode)
-     char *mode;
-{
-    int s, tries, on = 1;
-    int bindretry = 0;
-
-    if (data >= 0)
-       return (fdopen(data, mode));
-#ifdef AFS_SUN5_ENV
-    (void)seteuid(0);
-#endif
-    s = socket(AF_INET, SOCK_STREAM, 0);
-    if (s < 0) {
-#ifndef        AFS_SUN5_ENV
-       (void)seteuid(pw->pw_uid);
-#endif
-       return (NULL);
-    }
-#ifdef AFS_AIX32_ENV
-/* New Security Code (void) seteuid(saved_uid); */
-    GET_PRIV(saved_uid);
-#else
-#ifndef        AFS_SUN5_ENV
-    (void)seteuid((uid_t) 0);
-#endif
-
-#endif
-    if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) < 0) {
-       goto bad;
-    }
-    /* anchor socket to avoid multi-homing problems */
-    data_source.sin_family = AF_INET;
-    data_source.sin_addr = ctrl_addr.sin_addr;
-#if    defined(AFS_AIX32_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_OSF_ENV)
-    while (bind(s, (struct sockaddr *)&data_source, sizeof(data_source)) < 0) {
-       if (bindretry > 5) {
-           goto bad;
-       }
-#if    defined(AFS_SUN5_ENV) || defined(AFS_OSF_ENV)
-       if (errno == EADDRINUSE) {
-           sleep(1);
-       } else
-           goto bad;
-#endif
-       bindretry++;
-       sleep(bindretry);
-    }
-/* New Security Code (void) seteuid((uid_t)pw->pw_uid); */
-#if    defined(AFS_SUN5_ENV) || defined(AFS_OSF_ENV)
-    (void)seteuid((uid_t) pw->pw_uid);
-#else
-    DROP_PRIV(effective_uid);
-#endif
-#else
-    if (bind(s, (struct sockaddr *)&data_source, sizeof(data_source)) < 0) {
-       goto bad;
-    }
-    (void)seteuid((uid_t) pw->pw_uid);
-#endif
-    return (fdopen(s, mode));
-  bad:
-#ifdef AFS_AIX32_ENV
-/* New Security Code (void) seteuid((uid_t)pw->pw_uid); */
-    DROP_PRIV(effective_uid);
-#else
-    (void)seteuid((uid_t) pw->pw_uid);
-#endif
-    (void)close(s);
-    return (NULL);
-}
-
-FILE *
-dataconn(name, size, mode)
-     char *name;
-     off_t size;
-     char *mode;
-{
-    char sizebuf[32];
-    FILE *file;
-    int retry = 0;
-#ifdef _CSECURITY
-    char portbuf[8];
-#endif /* _CSECURITY */
-
-    file_size = size;
-    byte_count = 0;
-    if (size != (off_t) - 1)
-       (void)sprintf(sizebuf, " (%ld bytes)", size);
-    else
-       (void)strcpy(sizebuf, "");
-    if (pdata >= 0) {
-       struct sockaddr_in from;
-       int s, fromlen = sizeof(from);
-
-       s = accept(pdata, (struct sockaddr *)&from, &fromlen);
-       if (s < 0) {
-           reply(425, "Can't open data connection.");
-           (void)close(pdata);
-           pdata = -1;
-#ifdef _CSECURITY
-           GET_PRIV(saved_uid);
-           CONNECTION_WRITE(remote_addr, "", "open",
-                            MSGSTR(NOCONN, "Can't open data connection."),
-                            errno);
-           DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-           return (NULL);
-       }
-       (void)close(pdata);
-       pdata = s;
-       reply(150, "Opening %s mode data connection for %s%s.",
-             type == TYPE_A ? "ASCII" : "BINARY", name, sizebuf);
-#ifdef _CSECURITY
-       sprintf(portbuf, "%d", ntohs(from.sin_port));
-       GET_PRIV(saved_uid);
-       CONNECTION_WRITE(from.sin_addr, portbuf, "open", "", 0);
-       DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-       return (fdopen(pdata, mode));
-    }
-    if (data >= 0) {
-       reply(125, "Using existing data connection for %s%s.", name, sizebuf);
-       usedefault = 1;
-       return (fdopen(data, mode));
-    }
-    if (usedefault)
-       data_dest = his_addr;
-    usedefault = 1;
-    file = getdatasock(mode);
-    if (file == NULL) {
-       reply(425, "Can't create data socket (%s,%d): %s.",
-             inet_ntoa(data_source.sin_addr), ntohs(data_source.sin_port),
-             errno < sys_nerr ? sys_errlist[errno] : "unknown error");
-#ifdef _CSECURITY
-       sprintf(portbuf, "%d", ntohs(data_source.sin_port));
-       GET_PRIV(saved_uid);
-       CONNECTION_WRITE(data_source.sin_addr, portbuf, "open",
-                        "Can't create data socket", -1);
-       DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-       return (NULL);
-    }
-    data = fileno(file);
-    while (connect(data, (struct sockaddr *)&data_dest, sizeof(data_dest)) <
-          0) {
-       if (errno == EADDRINUSE && retry < swaitmax) {
-           sleep((unsigned)swaitint);
-           retry += swaitint;
-           continue;
-       }
-       perror_reply(425, "Can't build data connection");
-       (void)fclose(file);
-       data = -1;
-#ifdef _CSECURITY
-       sprintf(portbuf, "%d", ntohs(data_dest.sin_port));
-       GET_PRIV(saved_uid);
-       CONNECTION_WRITE(data_dest.sin_addr, portbuf, "open",
-                        MSGSTR(NODATACONN, "Can't build data connection"),
-                        errno);
-       DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-       return (NULL);
-    }
-    reply(150, "Opening %s mode data connection for %s%s.",
-         type == TYPE_A ? "ASCII" : "BINARY", name, sizebuf);
-#ifdef _CSECURITY
-    sprintf(portbuf, "%d", ntohs(data_dest.sin_port));
-    GET_PRIV(saved_uid);
-    CONNECTION_WRITE(data_dest.sin_addr, portbuf, "open", "", 0);
-    DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-    return (file);
-}
-
-/*
- * Tranfer the contents of "instr" to
- * "outstr" peer using the appropriate
- * encapsulation of the data subject
- * to Mode, Structure, and Type.
- *
- * NB: Form isn't handled.
- */
-send_data(instr, outstr, blksize)
-     FILE *instr, *outstr;
-     off_t blksize;
-{
-    register int c, cnt;
-    register char *buf;
-    int netfd, filefd;
-
-    transflag++;
-    if (setjmp(urgcatch)) {
-       transflag = 0;
-       return;
-    }
-    switch (type) {
-
-    case TYPE_A:
-       while ((c = getc(instr)) != EOF) {
-           byte_count++;
-           if (c == '\n') {
-               if (ferror(outstr))
-                   goto data_err;
-               (void)putc('\r', outstr);
-           }
-           (void)putc(c, outstr);
-           if (ferror(outstr))
-               goto data_err;
-       }
-       fflush(outstr);
-       transflag = 0;
-       if (ferror(instr))
-           goto file_err;
-       if (ferror(outstr))
-           goto data_err;
-       reply(226, "Transfer complete.");
-       return;
-
-    case TYPE_I:
-    case TYPE_L:
-       if ((buf = malloc((u_int) blksize)) == NULL) {
-           transflag = 0;
-           perror_reply(451, "Local resource failure: malloc");
-           return;
-       }
-       netfd = fileno(outstr);
-       filefd = fileno(instr);
-       while ((cnt = read(filefd, buf, (u_int) blksize)) > 0
-              && write(netfd, buf, cnt) == cnt)
-           byte_count += cnt;
-       transflag = 0;
-       (void)free(buf);
-       if (cnt != 0) {
-           if (cnt < 0)
-               goto file_err;
-           goto data_err;
-       }
-       reply(226, "Transfer complete.");
-       return;
-    default:
-       transflag = 0;
-       reply(550, "Unimplemented TYPE %d in send_data", type);
-       return;
-    }
-
-  data_err:
-    transflag = 0;
-    perror_reply(426, "Data connection");
-    return;
-
-  file_err:
-    transflag = 0;
-    perror_reply(551, "Error on input file");
-}
-
-/*
- * Transfer data from peer to
- * "outstr" using the appropriate
- * encapulation of the data subject
- * to Mode, Structure, and Type.
- *
- * N.B.: Form isn't handled.
- */
-receive_data(instr, outstr)
-     FILE *instr, *outstr;
-{
-    register int c;
-    int cnt, d;
-    char buf[BUFSIZ], *bufp;
-
-    transflag++;
-    if (setjmp(urgcatch)) {
-       transflag = 0;
-       return (-1);
-    }
-    switch (type) {
-
-    case TYPE_I:
-    case TYPE_L:
-       errno = d = 0;
-       while ((cnt = read(fileno(instr), buf, sizeof buf)) > 0) {
-#ifdef AFS_AIX32_ENV
-           byte_count += cnt;
-           for (bufp = buf; cnt > 0; cnt -= d, bufp += d) {
-               if ((d = write(fileno(outstr), bufp, cnt)) <= 0)
-                   goto file_err;
-           }
-#else
-           if (write(fileno(outstr), buf, cnt) != cnt)
-               goto file_err;
-           byte_count += cnt;
-#endif
-       }
-       if (cnt < 0)
-           goto data_err;
-       transflag = 0;
-       return (0);
-
-    case TYPE_E:
-       reply(553, "TYPE E not implemented.");
-       transflag = 0;
-       return (-1);
-
-    case TYPE_A:
-       while ((c = getc(instr)) != EOF) {
-           byte_count++;
-           while (c == '\r') {
-               if (ferror(outstr))
-                   goto data_err;
-               if ((c = getc(instr)) != '\n') {
-                   (void)putc('\r', outstr);
-                   if (c == '\0' || c == EOF)
-                       goto contin2;
-               }
-           }
-           (void)putc(c, outstr);
-         contin2:;
-       }
-       fflush(outstr);
-       if (ferror(instr))
-           goto data_err;
-       if (ferror(outstr))
-           goto file_err;
-       transflag = 0;
-       return (0);
-    default:
-       reply(550, "Unimplemented TYPE %d in receive_data", type);
-       transflag = 0;
-       return (-1);
-    }
-
-  data_err:
-    transflag = 0;
-    perror_reply(426, "Data Connection");
-    return (-1);
-
-  file_err:
-    transflag = 0;
-    perror_reply(452, "Error writing file");
-    return (-1);
-}
-
-statfilecmd(filename)
-     char *filename;
-{
-    char line[BUFSIZ];
-    FILE *fin;
-    int c;
-
-    (void)sprintf(line, "/bin/ls -lgA %s", filename);
-    fin = ftpd_popen(line, "r");
-    lreply(211, "status of %s:", filename);
-    while ((c = getc(fin)) != EOF) {
-       if (c == '\n') {
-           if (ferror(stdout)) {
-               perror_reply(421, "control connection");
-               (void)ftpd_pclose(fin);
-               dologout(1);
-               /* NOTREACHED */
-           }
-           if (ferror(fin)) {
-               perror_reply(551, filename);
-               (void)ftpd_pclose(fin);
-               return;
-           }
-           (void)putc('\r', stdout);
-       }
-       (void)putc(c, stdout);
-    }
-    (void)ftpd_pclose(fin);
-    reply(211, "End of Status");
-}
-
-statcmd()
-{
-    struct sockaddr_in *sin;
-    u_char *a, *p;
-
-    lreply(211, "%s FTP server status:", hostname, version);
-    printf("     %s\r\n", version);
-    printf("     Connected to %s", remotehost);
-    if (isdigit(remotehost[0]))
-       printf(" (%s)", inet_ntoa(his_addr.sin_addr));
-    printf("\r\n");
-    if (logged_in) {
-       if (guest)
-           printf("     Logged in anonymously\r\n");
-       else
-           printf("     Logged in as %s\r\n", pw->pw_name);
-    } else if (askpasswd)
-       printf("     Waiting for password\r\n");
-    else
-       printf("     Waiting for user name\r\n");
-    printf("     TYPE: %s", typenames[type]);
-    if (type == TYPE_A || type == TYPE_E)
-       printf(", FORM: %s", formnames[form]);
-    if (type == TYPE_L)
-#if NBBY == 8
-       printf(" %d", NBBY);
-#else
-       printf(" %d", bytesize);        /* need definition! */
-#endif
-    printf("; STRUcture: %s; transfer MODE: %s\r\n", strunames[stru],
-          modenames[mode]);
-    if (data != -1)
-       printf("     Data connection open\r\n");
-    else if (pdata != -1) {
-       printf("     in Passive mode");
-       sin = &pasv_addr;
-       goto printaddr;
-    } else if (usedefault == 0) {
-       printf("     PORT");
-       sin = &data_dest;
-      printaddr:
-       a = (u_char *) & sin->sin_addr;
-       p = (u_char *) & sin->sin_port;
-#define UC(b) (((int) b) & 0xff)
-       printf(" (%d,%d,%d,%d,%d,%d)\r\n", UC(a[0]), UC(a[1]), UC(a[2]),
-              UC(a[3]), UC(p[0]), UC(p[1]));
-#undef UC
-    } else
-       printf("     No data connection\r\n");
-    reply(211, "End of status");
-}
-
-fatal(s)
-     char *s;
-{
-    reply(451, "Error in server: %s\n", s);
-    reply(221, "Closing connection due to server error.");
-#ifdef _CSECURITY
-    GET_PRIV(saved_uid);
-    CONNECTION_WRITE(remote_addr, "ftp/tcp", "close",
-                    MSGSTR(CLOSECONN,
-                           "Closing connection due to server error."), -1);
-    DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-    dologout(0);
-    /* NOTREACHED */
-}
-
-/* VARARGS2 */
-reply(n, fmt, p0, p1, p2, p3, p4, p5)
-     int n;
-     long p0, p1, p2, p3, p4, p5;
-     char *fmt;
-{
-    printf("%d ", n);
-    printf(fmt, p0, p1, p2, p3, p4, p5);
-    printf("\r\n");
-    (void)fflush(stdout);
-    if (debug) {
-       syslog(LOG_DEBUG, "<--- %d ", n);
-       syslog(LOG_DEBUG, fmt, p0, p1, p2, p3, p4, p5);
-    }
-}
-
-/* VARARGS2 */
-lreply(n, fmt, p0, p1, p2, p3, p4, p5)
-     int n;
-     long p0, p1, p2, p3, p4, p5;
-     char *fmt;
-{
-    printf("%d- ", n);
-    printf(fmt, p0, p1, p2, p3, p4, p5);
-    printf("\r\n");
-    (void)fflush(stdout);
-    if (debug) {
-       syslog(LOG_DEBUG, "<--- %d- ", n);
-       syslog(LOG_DEBUG, fmt, p0, p1, p2, p3, p4, p5);
-    }
-}
-
-ack(s)
-     char *s;
-{
-    reply(250, "%s command successful.", s);
-}
-
-nack(s)
-     char *s;
-{
-    reply(502, "%s command not implemented.", s);
-}
-
-/* ARGSUSED */
-yyerror(s)
-     char *s;
-{
-    char *cp;
-
-    if (cp = strchr(cbuf, '\n'))
-       *cp = '\0';
-    reply(500, "'%s': command not understood.", cbuf);
-}
-
-delete(name)
-     char *name;
-{
-    struct stat st;
-
-    if (stat(name, &st) < 0) {
-       perror_reply(550, name);
-       return;
-    }
-    if ((st.st_mode & S_IFMT) == S_IFDIR) {
-       if (rmdir(name) < 0) {
-           perror_reply(550, name);
-           return;
-       }
-       goto done;
-    }
-    if (unlink(name) < 0) {
-       perror_reply(550, name);
-       return;
-    }
-  done:
-    ack("DELE");
-}
-
-cwd(path)
-     char *path;
-{
-    if (chdir(path) < 0)
-       perror_reply(550, path);
-    else
-       ack("CWD");
-}
-
-makedir(name)
-     char *name;
-{
-    if (mkdir(name, 0777) < 0)
-       perror_reply(550, name);
-    else
-       reply(257, "MKD command successful.");
-}
-
-removedir(name)
-     char *name;
-{
-    if (rmdir(name) < 0)
-       perror_reply(550, name);
-    else
-       ack("RMD");
-}
-
-pwd()
-{
-    char path[MAXPATHLEN + 1];
-#if 0/*ndef HAVE_GETCWD*/      /* XXX enable when autoconf happens */
-    extern char *getwd();
-#define getcwd(x,y) getwd(x)
-#endif
-    if (getcwd(path, MAXPATHLEN + 1) == (char *)NULL)
-       reply(550, "%s.", path);
-    else
-       reply(257, "\"%s\" is current directory.", path);
-}
-
-char *
-renamefrom(name)
-     char *name;
-{
-    struct stat st;
-
-    if (stat(name, &st) < 0) {
-       perror_reply(550, name);
-       return (NULL);
-    }
-    reply(350, "File exists, ready for destination name");
-    return (name);
-}
-
-renamecmd(from, to)
-     char *from, *to;
-{
-    if (rename(from, to) < 0)
-       perror_reply(550, "rename");
-    else
-       ack("RNTO");
-}
-
-dolog(sin)
-     struct sockaddr_in *sin;
-{
-    struct hostent *hp = gethostbyaddr((char *)&sin->sin_addr,
-                                      sizeof(struct in_addr), AF_INET);
-    time_t t;
-
-    if (hp)
-       (void)strncpy(remotehost, hp->h_name, sizeof(remotehost));
-    else
-       (void)strncpy(remotehost, inet_ntoa(sin->sin_addr),
-                     sizeof(remotehost));
-#ifdef SETPROCTITLE
-    sprintf(proctitle, "%s: connected", remotehost);
-    setproctitle(proctitle);
-#endif /* SETPROCTITLE */
-
-    if (logging) {
-       t = time((time_t *) 0);
-       syslog(LOG_INFO, "connection from %s at %s", remotehost, ctime(&t));
-    }
-}
-
-/*
- * Record logout in wtmp file
- * and exit with supplied status.
- */
-dologout(status)
-     int status;
-{
-    /*
-     * Prevent reception of SIGURG from resulting in a resumption
-     * back to the main program loop.
-     */
-    transflag = 0;
-
-    if (logged_in) {
-       (void)seteuid((uid_t) 0);
-       logwtmp(ttyline, "", "");
-    }
-    /* beware of flushing buffers after a SIGPIPE */
-    ktc_ForgetAllTokens();
-    _exit(status);
-}
-
-void
-myoob()
-{
-    char *cp;
-
-    /* only process if transfer occurring */
-    if (!transflag)
-       return;
-    cp = tmpline;
-    if (getline(cp, 7, stdin) == NULL) {
-       reply(221, "You could at least say goodbye.");
-#ifdef _CSECURITY
-       GET_PRIV(saved_uid);
-       CONNECTION_WRITE(remote_addr, "ftp/tcp", "close",
-                        MSGSTR(GOODBYE, "You could at least say goodbye."),
-                        -1);
-       DROP_PRIV(effective_uid);
-#endif /* _CSECURITY */
-       dologout(0);
-    }
-    upper(cp);
-    if (strcmp(cp, "ABOR\r\n") == 0) {
-       tmpline[0] = '\0';
-       reply(426, "Transfer aborted. Data connection closed.");
-       reply(226, "Abort successful");
-       longjmp(urgcatch, 1);
-    }
-    if (strcmp(cp, "STAT\r\n") == 0) {
-       if (file_size != (off_t) - 1)
-           reply(213, "Status: %lu of %lu bytes transferred", byte_count,
-                 file_size);
-       else
-           reply(213, "Status: %lu bytes transferred", byte_count);
-    }
-}
-
-/*
- * Note: a response of 425 is not mentioned as a possible response to
- *     the PASV command in RFC959. However, it has been blessed as
- *     a legitimate response by Jon Postel in a telephone conversation
- *     with Rick Adams on 25 Jan 89.
- */
-passive()
-{
-    int len;
-    register char *p, *a;
-
-    pdata = socket(AF_INET, SOCK_STREAM, 0);
-    if (pdata < 0) {
-       perror_reply(425, "Can't open passive connection");
-       return;
-    }
-    pasv_addr = ctrl_addr;
-    pasv_addr.sin_port = 0;
-#ifdef AFS_AIX32_ENV
-/* New Security Code (void) seteuid((uid_t)0); */
-    GET_PRIV(saved_uid);
-    if (bind(pdata, (struct sockaddr *)&pasv_addr, sizeof(pasv_addr)) < 0) {
-/* New Security Code (void) seteuid((uid_t)pw->pw_uid); */
-       DROP_PRIV(effective_uid);
-       goto pasv_error;
-    }
-/* New Security Code (void) seteuid((uid_t)pw->pw_uid); */
-    DROP_PRIV(effective_uid);
-#else
-    (void)seteuid((uid_t) 0);
-    if (bind(pdata, (struct sockaddr *)&pasv_addr, sizeof(pasv_addr)) < 0) {
-       (void)seteuid((uid_t) pw->pw_uid);
-       goto pasv_error;
-    }
-    (void)seteuid((uid_t) pw->pw_uid);
-#endif
-    len = sizeof(pasv_addr);
-    if (getsockname(pdata, (struct sockaddr *)&pasv_addr, &len) < 0)
-       goto pasv_error;
-    if (listen(pdata, 1) < 0)
-       goto pasv_error;
-    a = (char *)&pasv_addr.sin_addr;
-    p = (char *)&pasv_addr.sin_port;
-
-#define UC(b) (((int) b) & 0xff)
-
-    reply(227, "Entering Passive Mode (%d,%d,%d,%d,%d,%d)", UC(a[0]),
-         UC(a[1]), UC(a[2]), UC(a[3]), UC(p[0]), UC(p[1]));
-    return;
-
-  pasv_error:
-    (void)close(pdata);
-    pdata = -1;
-    perror_reply(425, "Can't open passive connection");
-    return;
-}
-
-/*
- * Generate unique name for file with basename "local".
- * The file named "local" is already known to exist.
- * Generates failure reply on error.
- */
-char *
-gunique(local)
-     char *local;
-{
-    static char new[MAXPATHLEN];
-    struct stat st;
-    char *cp = strrchr(local, '/');
-    int count = 0;
-
-    if (cp)
-       *cp = '\0';
-    if (stat(cp ? local : ".", &st) < 0) {
-       perror_reply(553, cp ? local : ".");
-       return (NULL);
-    }
-    if (cp)
-       *cp = '/';
-    (void)strcpy(new, local);
-    cp = new + strlen(new);
-    *cp++ = '.';
-    for (count = 1; count < 100; count++) {
-       (void)sprintf(cp, "%d", count);
-       if (stat(new, &st) < 0)
-           return (new);
-    }
-    reply(452, "Unique file name cannot be created.");
-    return (NULL);
-}
-
-/*
- * Format and send reply containing system error number.
- */
-perror_reply(code, string)
-     int code;
-     char *string;
-{
-    if (errno < sys_nerr)
-       reply(code, "%s: %s.", string, sys_errlist[errno]);
-    else
-       reply(code, "%s: unknown error %d.", string, errno);
-}
-
-static char *onefile[] = {
-    "",
-    0
-};
-
-send_file_list(whichfiles)
-     char *whichfiles;
-{
-    struct stat st;
-    DIR *dirp = NULL;
-    struct dirent *dir;
-    FILE *dout = NULL;
-    register char **dirlist, *dirname;
-#ifndef AFS_LINUX22_ENV
-    char *strpbrk();
-#endif
-
-
-    if (strpbrk(whichfiles, "~{[*?") != NULL) {
-       extern char **glob(), *globerr;
-
-       globerr = NULL;
-       dirlist = glob(whichfiles);
-       if (globerr != NULL) {
-           reply(550, globerr);
-           return;
-       } else if (dirlist == NULL) {
-           errno = ENOENT;
-           perror_reply(550, whichfiles);
-           return;
-       }
-    } else {
-       onefile[0] = whichfiles;
-       dirlist = onefile;
-    }
-
-    if (setjmp(urgcatch)) {
-       transflag = 0;
-       return;
-    }
-    while (dirname = *dirlist++) {
-       if (stat(dirname, &st) < 0) {
-           /*
-            * If user typed "ls -l", etc, and the client
-            * used NLST, do what the user meant.
-            */
-           if (dirname[0] == '-' && *dirlist == NULL && transflag == 0) {
-               retrieve("/bin/ls %s", dirname);
-               return;
-           }
-           perror_reply(550, whichfiles);
-           if (dout != NULL) {
-               (void)fclose(dout);
-               transflag = 0;
-               data = -1;
-               pdata = -1;
-           }
-           return;
-       }
-
-       if ((st.st_mode & S_IFMT) == S_IFREG) {
-           if (dout == NULL) {
-               dout = dataconn(whichfiles, (off_t) - 1, "w");
-               if (dout == NULL)
-                   return;
-               transflag++;
-           }
-           fprintf(dout, "%s\n", dirname);
-           byte_count += strlen(dirname) + 1;
-           continue;
-       } else if ((st.st_mode & S_IFMT) != S_IFDIR)
-           continue;
-
-       if ((dirp = opendir(dirname)) == NULL)
-           continue;
-
-       while ((dir = readdir(dirp)) != NULL) {
-           char nbuf[MAXPATHLEN];
-
-           if (dir->d_name[0] == '.' && dir->d_name[1] == 0)
-               continue;
-           if (dir->d_name[0] == '.' && dir->d_name[1] == '.'
-               && dir->d_name[2] == 0)
-               continue;
-
-           sprintf(nbuf, "%s/%s", dirname, dir->d_name);
-
-           /*
-            * We have to do a stat to insure it's
-            * not a directory or special file.
-            */
-           if (stat(nbuf, &st) == 0 && (st.st_mode & S_IFMT) == S_IFREG) {
-               if (dout == NULL) {
-                   dout = dataconn(whichfiles, (off_t) - 1, "w");
-                   if (dout == NULL)
-                       return;
-                   transflag++;
-               }
-               if (nbuf[0] == '.' && nbuf[1] == '/')
-                   fprintf(dout, "%s\n", &nbuf[2]);
-               else
-                   fprintf(dout, "%s\n", nbuf);
-               byte_count += strlen(nbuf) + 1;
-           }
-       }
-       (void)closedir(dirp);
-    }
-
-    if (dout == NULL)
-       reply(550, "No files found.");
-    else if (ferror(dout) != 0)
-       perror_reply(550, "Data connection");
-    else
-       reply(226, "Transfer complete.");
-
-    transflag = 0;
-    if (dout != NULL)
-       (void)fclose(dout);
-    data = -1;
-    pdata = -1;
-}
-
-#ifdef SETPROCTITLE
-/*
- * clobber argv so ps will show what we're doing.
- * (stolen from sendmail)
- * warning, since this is usually started from inetd.conf, it
- * often doesn't have much of an environment or arglist to overwrite.
- */
-
-/*VARARGS1*/
-setproctitle(fmt, a, b, c)
-     char *fmt;
-     long a, b, c;
-{
-    register char *p, *bp, ch;
-    register int i;
-    char buf[BUFSIZ];
-
-    (void)sprintf(buf, fmt, a, b, c);
-
-    /* make ps print our process name */
-    p = Argv[0];
-    *p++ = '-';
-
-    i = strlen(buf);
-    if (i > LastArgv - p - 2) {
-       i = LastArgv - p - 2;
-       buf[i] = '\0';
-    }
-    bp = buf;
-    while (ch = *bp++)
-       if (ch != '\n' && ch != '\r')
-           *p++ = ch;
-    while (p < LastArgv)
-       *p++ = ' ';
-}
-#endif /* SETPROCTITLE */
-
-#if    defined(AFS_SUN53_ENV)
-char *
-shadow_pass(name)
-     char *name;
-{
-    struct spwd *sp;
-    static char *Nothing = "";
-    int oldeuid;
-
-    oldeuid = geteuid();
-    if (oldeuid && oldeuid != -1)
-       seteuid(0);
-    if ((sp = getspnam(name)) == NULL) {
-       if (oldeuid && oldeuid != -1)
-           seteuid(oldeuid);
-       return Nothing;
-    }
-    if (oldeuid && oldeuid != -1)
-       seteuid(oldeuid);
-    return (sp->sp_pwdp);
-}
-
-#endif
diff --git a/src/ftpd43+/getusershell.c b/src/ftpd43+/getusershell.c
deleted file mode 100644 (file)
index ca0a01d..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 1985 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#include <afs/param.h>
-#include <sys/param.h>
-#include <sys/file.h>
-#include <sys/stat.h>
-#include <ctype.h>
-#include <stdio.h>
-
-#define SHELLS "/etc/shells"
-
-/*
- * Do not add local shells here.  They should be added in /etc/shells
- */
-static char *okshells[] = { "/bin/sh", "/bin/csh", 0 };
-
-static char **shells, *strings;
-static char **curshell = NULL;
-static char **initshells();
-
-/*
- * Get a list of shells from SHELLS, if it exists.
- */
-char *
-getusershell()
-{
-    char *ret;
-
-    if (curshell == NULL)
-       curshell = initshells();
-    ret = *curshell;
-    if (ret != NULL)
-       curshell++;
-    return (ret);
-}
-
-#ifdef AFS_AIX42_ENV
-void
-#endif
-endusershell()
-{
-
-    if (shells != NULL)
-       free((char *)shells);
-    shells = NULL;
-    if (strings != NULL)
-       free(strings);
-    strings = NULL;
-    curshell = NULL;
-}
-
-static char **
-initshells()
-{
-    register char **sp, *cp;
-    register FILE *fp;
-    struct stat statb;
-    extern char *malloc(), *calloc();
-
-    if (shells != NULL)
-       free((char *)shells);
-    shells = NULL;
-    if (strings != NULL)
-       free(strings);
-    strings = NULL;
-    if ((fp = fopen(SHELLS, "r")) == (FILE *) 0)
-       return (okshells);
-    if (fstat(fileno(fp), &statb) == -1) {
-       (void)fclose(fp);
-       return (okshells);
-    }
-    if ((strings = malloc((unsigned)statb.st_size)) == NULL) {
-       (void)fclose(fp);
-       return (okshells);
-    }
-    shells = (char **)calloc((unsigned)statb.st_size / 3, sizeof(char *));
-    if (shells == NULL) {
-       (void)fclose(fp);
-       free(strings);
-       strings = NULL;
-       return (okshells);
-    }
-    sp = shells;
-    cp = strings;
-    while (fgets(cp, MAXPATHLEN + 1, fp) != NULL) {
-       while (*cp != '#' && *cp != '/' && *cp != '\0')
-           cp++;
-       if (*cp == '#' || *cp == '\0')
-           continue;
-       *sp++ = cp;
-       while (!isspace(*cp) && *cp != '#' && *cp != '\0')
-           cp++;
-       *cp++ = '\0';
-    }
-    *sp = NULL;
-    (void)fclose(fp);
-    return (shells);
-}
-
-#ifdef AFS_AIX42_ENV
-void
-#endif
-setusershell()
-{
-
-    curshell = initshells();
-}
diff --git a/src/ftpd43+/glob.c b/src/ftpd43+/glob.c
deleted file mode 100644 (file)
index 120d8ee..0000000
+++ /dev/null
@@ -1,1089 +0,0 @@
-/*
- * Copyright (c) 1980 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/*
- * C-shell glob for random programs.
- */
-
-#include <afs/param.h>
-#include <sys/param.h>
-#include <sys/stat.h>
-#include <dirent.h>
-
-#include <stdio.h>
-#include <errno.h>
-#include <pwd.h>
-#if defined (NLS) || defined (KJI)
-#include <NLchar.h>
-#include <NLctype.h>
-#endif
-/*
-#ifdef MSG
-#include "ftpd_msg.h" 
-extern nl_catd catd;
-#define MSGSTR(n,s) NLcatgets(catd,MS_FTPD,n,s) 
-#else*/
-#define MSGSTR(n,s) s
-/*#endif*/
-
-#define        QUOTE 0200
-#define        TRIM 0177
-#define        eq(a,b)         (strcmp(a, b)==0)
-#define        GAVSIZ          (NCARGS/6)
-#define        isdir(d)        ((d.st_mode & S_IFMT) == S_IFDIR)
-
-static char **gargv;           /* Pointer to the (stack) arglist */
-static int gargc;              /* Number args in gargv */
-static int gnleft;
-static short gflag;
-static int tglob();
-char **glob();
-char *globerr;
-char *home;
-struct passwd *getpwnam();
-extern int errno;
-static char *strspl(), *strend();
-char *malloc(), *strcpy(), *strcat();
-char **copyblk();
-
-static int globcnt;
-
-char *globchars = "`{[*?";
-
-static char *gpath, *gpathp, *lastgpathp;
-static int globbed;
-static char *entp;
-static char **sortbas;
-#if defined(AFS_AIX32_ENV) || defined(AFS_LINUX20_ENV)
-static ginit(char **);
-static collect(register char *);
-static acollect(register char *);
-static sort();
-static expand(char *);
-static matchdir(char *);
-static execbrc(char *, char *);
-static match(char *, char *);
-static amatch(char *, char *);
-static Gmatch(char *, char *);
-static Gcat(register char *, register char *);
-
-int any(register int, register char *);
-int blklen(register char **);
-char **blkcpy(char **, register char **);
-static char *strspl(register char *, register char *);
-char **copyblk(register char **);
-static char *strend(register char *);
-int gethdir(char *);
-
-static addpath();
-static rscan();
-
-#ifdef notdef
-static addpath(char);
-static rscan(register char **, int (*)(char));
-int letter(register char);
-int digit(register char);
-void blkfree(char **);
-#endif
-#endif
-
-char **
-glob(v)
-     register char *v;
-{
-    char agpath[BUFSIZ];
-    char *agargv[GAVSIZ];
-    char *vv[2];
-
-    vv[0] = strcpy(malloc((unsigned)strlen(v) + 1), v);
-    vv[1] = 0;
-    gflag = 0;
-    rscan(vv, tglob);
-    if (gflag == 0)
-       return (copyblk(vv));
-
-    globerr = 0;
-    gpath = agpath;
-    gpathp = gpath;
-    *gpathp = 0;
-    lastgpathp = &gpath[sizeof agpath - 2];
-    ginit(agargv);
-    globcnt = 0;
-    collect(v);
-    if (globcnt == 0 && (gflag & 1)) {
-/*             blkfree(gargv); */
-       gargv = 0;
-       return (0);
-    } else
-       return (gargv = copyblk(gargv));
-}
-
-static
-ginit(agargv)
-     char **agargv;
-{
-
-    agargv[0] = 0;
-    gargv = agargv;
-    sortbas = agargv;
-    gargc = 0;
-    gnleft = NCARGS - 4;
-}
-
-static
-collect(as)
-     register char *as;
-{
-    if (eq(as, "{") || eq(as, "{}")) {
-       Gcat(as, "");
-       sort();
-    } else
-       acollect(as);
-}
-
-static
-acollect(as)
-     register char *as;
-{
-    register int ogargc = gargc;
-
-    gpathp = gpath;
-    *gpathp = 0;
-    globbed = 0;
-    expand(as);
-    if (gargc != ogargc)
-       sort();
-}
-
-static
-sort()
-{
-    register char **p1, **p2, *c;
-    char **Gvp = &gargv[gargc];
-
-    p1 = sortbas;
-    while (p1 < Gvp - 1) {
-       p2 = p1;
-       while (++p2 < Gvp)
-#if defined (NLS) || defined (KJI)
-           if (NLstrcmp(*p1, *p2) > 0)
-#else
-           if (strcmp(*p1, *p2) > 0)
-#endif
-               c = *p1, *p1 = *p2, *p2 = c;
-       p1++;
-    }
-    sortbas = Gvp;
-}
-
-static
-expand(as)
-     char *as;
-{
-    register char *cs;
-    register char *sgpathp, *oldcs;
-    struct stat stb;
-#if defined (NLS) || defined (KJI)
-    int c, c1, two_bytes;
-#endif
-
-    sgpathp = gpathp;
-    cs = as;
-    if (*cs == '~' && gpathp == gpath) {
-       addpath('~');
-#if defined (NLS) || defined (KJI)
-       while (c = *++cs) {
-           two_bytes = 0;
-           if (NCisshift(c)) {
-               two_bytes++;
-               c1 = *++cs;
-               _NCdec2(c, c1, c);
-               cs--;           /* need to pass 1st char to addpath */
-           }
-           if (NCisalpha(c) || NCisdigit(c) || *cs == '-') {
-               addpath(*cs);
-               if (two_bytes)
-                   addpath(*cs++);
-           } else {
-               break;
-           }
-       }
-#else
-       for (cs++; letter(*cs) || digit(*cs) || *cs == '-';)
-           addpath(*cs++);
-#endif
-       if (!*cs || *cs == '/') {
-           if (gpathp != gpath + 1) {
-               *gpathp = 0;
-               if (gethdir(gpath + 1))
-                   globerr = "Unknown user name after ~";
-               (void)strcpy(gpath, gpath + 1);
-           } else
-               (void)strcpy(gpath, home);
-           gpathp = strend(gpath);
-       }
-    }
-    while (!any(*cs, globchars)) {
-       if (*cs == 0) {
-           if (!globbed)
-               Gcat(gpath, "");
-           else if (stat(gpath, &stb) >= 0) {
-               Gcat(gpath, "");
-               globcnt++;
-           }
-           goto endit;
-       }
-#if defined (NLS) || defined (KJI)
-       /* need extra call to addpath for two byte NLS char */
-       if (NCisshift(*cs))
-           addpath(*cs++);
-#endif
-       addpath(*cs++);
-    }
-    oldcs = cs;
-    while (cs > as && *cs != '/')
-       cs--, gpathp--;
-    if (*cs == '/')
-       cs++, gpathp++;
-    *gpathp = 0;
-    if (*oldcs == '{') {
-       (void)execbrc(cs, (NULL));
-       return;
-    }
-    matchdir(cs);
-  endit:
-    gpathp = sgpathp;
-    *gpathp = 0;
-}
-
-#ifndef AFS_LINUX20_ENV
-#define dirfd(D) (D)->dd_fd
-#endif
-
-static
-matchdir(pattern)
-     char *pattern;
-{
-    struct stat stb;
-    register struct dirent *dp;
-    DIR *dirp;
-
-    /*
-     * This fixes the problem of using the local
-     * path on the remote machine.  (PTM #35291).
-     */
-    if (strcmp(gpath, "") == 0)
-       dirp = opendir(".");
-    else
-       dirp = opendir(gpath);
-    if (dirp == NULL) {
-       if (globbed)
-           return;
-       goto patherr2;
-    }
-    if (fstat(dirfd(dirp), &stb) < 0)
-       goto patherr1;
-    if (!isdir(stb)) {
-       errno = ENOTDIR;
-       goto patherr1;
-    }
-    while ((dp = readdir(dirp)) != NULL) {
-       if (dp->d_ino == 0)
-           continue;
-       if (match(dp->d_name, pattern)) {
-           Gcat(gpath, dp->d_name);
-           globcnt++;
-       }
-    }
-    closedir(dirp);
-    return;
-
-  patherr1:
-    closedir(dirp);
-  patherr2:
-    globerr = "Bad directory components";
-}
-
-static
-execbrc(p, s)
-     char *p, *s;
-{
-    char restbuf[BUFSIZ + 2];
-    register char *pe, *pm, *pl;
-    int brclev = 0;
-    char *lm, savec, *sgpathp;
-#if defined (NLS) || defined (KJI)
-    int tc;
-#endif
-
-    for (lm = restbuf; *p != '{'; *lm++ = *p++) {
-#if defined (NLS) || defined (KJI)
-       if (NCisshift(*p)) {
-           *lm++ = *p++;
-           if (_NCdec2(*lm, *p, *lm) == 1) {
-               lm--;
-               p--;
-           }
-       }
-#endif
-       continue;
-    }
-    for (pe = ++p; *pe; pe++)
-       switch (*pe) {
-
-       case '{':
-           brclev++;
-           continue;
-
-       case '}':
-           if (brclev == 0)
-               goto pend;
-           brclev--;
-           continue;
-
-       case '[':
-           for (pe++; *pe && *pe != ']'; pe++) {
-#if defined (NLS) || defined (KJI)
-               if (NCisshift(*pe)) {
-                   tc = *p++;
-                   if (_NCdec2(tc, *pe, tc) == 1)
-                       pe--;
-               }
-#endif
-               continue;
-           }
-           continue;
-#if defined (NLS) || defined (KJI)
-       default:
-           if (NCisshift(*pe)) {
-               tc = *pe++;
-               if (_NCdec2(tc, *pe, tc) == 1)
-                   pe--;
-           }
-           continue;
-#endif
-
-       }
-  pend:
-    brclev = 0;
-    for (pl = pm = p; pm <= pe; pm++)
-#if defined (NLS) || defined (KJI)
-       switch (*pm) {
-#else
-       switch (*pm & (QUOTE | TRIM)) {
-#endif
-       case '{':
-           brclev++;
-           continue;
-
-       case '}':
-           if (brclev) {
-               brclev--;
-               continue;
-           }
-           goto doit;
-
-#if defined (NLS) || defined (KJI)
-       case ',':
-#else
-       case ',' | QUOTE:
-       case ',':
-#endif
-           if (brclev)
-               continue;
-         doit:
-           savec = *pm;
-           *pm = 0;
-           (void)strcpy(lm, pl);
-           (void)strcat(restbuf, pe + 1);
-           *pm = savec;
-           if (s == 0) {
-               sgpathp = gpathp;
-               expand(restbuf);
-               gpathp = sgpathp;
-               *gpathp = 0;
-           } else if (amatch(s, restbuf))
-               return (1);
-           sort();
-           pl = pm + 1;
-           if (brclev)
-               return (0);
-           continue;
-
-       case '[':
-           for (pm++; *pm && *pm != ']'; pm++) {
-#if defined (NLS) || defined (KJI)
-               if (NCisshift(*pm)) {
-                   tc = *pm++;
-                   if (_NCdec2(tc, *pm, tc) == 1)
-                       pm--;
-               }
-#endif
-               continue;
-           }
-           if (!*pm)
-               pm--;
-           continue;
-#if defined (NLS) || defined (KJI)
-       default:
-           if (NCisshift(*pm)) {
-               tc = *pm++;
-               if (_NCdec2(tc, *pm, tc) == 1)
-                   pm--;
-           }
-           continue;
-#endif
-       }
-    if (brclev)
-       goto doit;
-    return (0);
-}
-
-static
-match(s, p)
-     char *s, *p;
-{
-    register int c;
-    register char *sentp;
-    char sglobbed = globbed;
-
-    if (*s == '.' && *p != '.')
-       return (0);
-    sentp = entp;
-    entp = s;
-    c = amatch(s, p);
-    entp = sentp;
-    globbed = sglobbed;
-    return (c);
-}
-
-static
-amatch(s, p)
-     register char *s, *p;
-{
-    register int scc;
-    int ok, lc;
-    char *sgpathp;
-    struct stat stb;
-    int c, cc;
-#if defined (NLS) || defined (KJI)
-    register int cc1, scc1;
-    static int s_is2 = 0;
-#endif
-
-    globbed = 1;
-    for (;;) {
-#if defined (NLS) || defined (KJI)
-       s_is2 = 0;
-       scc = *s++;
-       if (NCisshift(scc)) {
-           scc1 = *s++;
-           if (_NCdec2(scc, scc1, scc) == 1)
-               s--;
-           else
-               s_is2 = 1;
-       }
-#else
-       scc = *s++ & TRIM;
-#endif
-       switch (c = *p++) {
-
-       case '{':
-#if defined (NLS) || defined (KJI)
-           if (s_is2)
-               return (execbrc(p - 1, s - 2));
-           else
-#endif
-               return (execbrc(p - 1, s - 1));
-
-       case '[':
-           ok = 0;
-           lc = 077777;
-           while (cc = *p++) {
-#if defined (NLS) || defined (KJI)
-               if (NCisshift(cc))
-                   if (_NCdec2(cc, *p, cc) == 2)
-                       p++;
-#endif
-               if (cc == ']') {
-                   if (ok)
-                       break;
-                   return (0);
-               }
-#if defined (NLS) || defined (KJI)
-               if (cc == '[')
-                   if (p[1] == ':') {
-                       if (!strncmp(p, "[:alpha:]", 9)) {
-                           ok |= (isascii(scc) && isalpha(scc));
-                           p += 8;
-                           break;
-                       }
-                       if (!strncmp(p, "[:upper:]", 9)) {
-                           ok |= (isascii(scc) && isupper(scc));
-                           p += 8;
-                           break;
-                       }
-                       if (!strncmp(p, "[:lower:]", 9)) {
-                           ok |= (isascii(scc) && islower(scc));
-                           p += 8;
-                           break;
-                       }
-                       if (!strncmp(p, "[:digit:]", 9)) {
-                           ok |= (isascii(scc) && isdigit(scc));
-                           p += 8;
-                           break;
-                       }
-                       if (!strncmp(p, "[:alnum:]", 9)) {
-                           ok |= (isascii(scc) && isalnum(scc));
-                           p += 8;
-                           break;
-                       }
-                       if (!strncmp(p, "[:print:]", 9)) {
-                           ok |= (isascii(scc) && isprint(scc));
-                           p += 8;
-                           break;
-                       }
-                       if (!strncmp(p, "[:punct:]", 9)) {
-                           ok |= (isascii(scc) && ispunct(scc));
-                           p += 8;
-                           break;
-                       }
-#ifdef KJI
-                       if (!strncmp(p, "[:jalpha:]", 10)) {
-                           ok |= isjalpha(scc);
-                           p += 9;
-                           break;
-                       }
-                       if (!strncmp(p, "[:jdigit:]", 10)) {
-                           ok |= isjdigit(scc);
-                           p += 9;
-                           break;
-                       }
-                       if (!strncmp(p, "[:jpunct:]", 10)) {
-                           ok |= isjpunct(scc);
-                           p += 9;
-                           break;
-                       }
-                       if (!strncmp(p, "[:jparen:]", 10)) {
-                           ok |= isjparen(scc);
-                           p += 9;
-                           break;
-                       }
-                       if (!strncmp(p, "[:jkanji:]", 10)) {
-                           ok |= isjkanji(scc);
-                           p += 9;
-                           break;
-                       }
-                       if (!strncmp(p, "[:jhira:]", 9)) {
-                           ok |= isjhira(scc);
-                           p += 8;
-                           break;
-                       }
-                       if (!strncmp(p, "[:jkata:]", 9)) {
-                           ok |= isjkata(scc);
-                           p += 8;
-                           break;
-                       }
-#endif                  /*KJI*/
-                   }
-               if ((cc == '-') && (lc > 0)) {
-                   int cu1, lcu, scu1, tco;
-
-                   cc1 = *p++;
-                   if (NCisshift(cc1))
-                       if (_NCdec2(cc1, *p, cc1) == 1)
-                           p--;
-                   cu1 = NCcoluniq(cc1);
-                   if (((tco = NCcollate(cc1)) < 0)
-                       && (tco = _NCxcolu(tco, &p, 0, &cu1)));
-
-                   lcu = NCcoluniq(lc);
-                   if ((tco = NCcollate(lc)) < 0) {
-                       char tb[3], *tbp = tb;
-
-                       tb[0] = tb[1] = tb[2] = '\0';
-                       _NCe2(lc, tb[0], tb[1]);
-                       tco = _NCxcolu(tco, &tbp, 0, &lcu);
-                   }
-                   scu1 = NCcoluniq(scc);
-                   if (((tco = NCcollate(scc)) < 0)
-                       && (tco = _NCxcolu(tco, &s, 0, &scu1)));
-
-                   /* if we have nonzero collate vals */
-                   if (lcu && cu1 && scu1)
-                       ok += (lcu <= scu1 && scu1 <= cu1);
-                   else
-                       ok += (lc == scc || scc == cu1);
-#else
-               if (cc == '-') {
-                   if (lc <= scc && scc <= *p++)
-                       ok++;
-#endif /* KJI || NLS */
-               } else if (scc == (lc = cc))
-                   ok++;
-           }
-           if (cc == 0)
-               if (ok)
-                   p--;
-               else
-                   return 0;
-           continue;
-
-       case '*':
-           if (!*p)
-               return (1);
-           if (*p == '/') {
-               p++;
-               goto slash;
-           }
-#if defined (NLS) || defined (KJI)
-           if (s_is2)
-               s--;
-#endif
-           s--;
-           do {
-               if (amatch(s, p))
-                   return (1);
-           } while (*s++);
-           return (0);
-
-       case 0:
-           return (scc == 0);
-
-       default:
-#if defined (NLS) || defined (KJI)
-           if (NCisshift(c))
-               if (_NCdec2(c, *p, c) == 2)
-                   p++;
-#endif
-           if (c != scc)
-               return (0);
-           continue;
-
-       case '?':
-           if (scc == 0)
-               return (0);
-           continue;
-
-       case '/':
-           if (scc)
-               return (0);
-         slash:
-           s = entp;
-           sgpathp = gpathp;
-           while (*s)
-               addpath(*s++);
-           addpath('/');
-           if (stat(gpath, &stb) == 0 && isdir(stb))
-               if (*p == 0) {
-                   Gcat(gpath, "");
-                   globcnt++;
-               } else
-                   expand(p);
-           gpathp = sgpathp;
-           *gpathp = 0;
-           return (0);
-       }
-    }
-}
-
-static
-Gmatch(s, p)
-     register char *s, *p;
-{
-    register int scc;
-    int ok, lc;
-    int c, cc;
-#if defined (NLS) || defined (KJI)
-    register int scc1, cc1;
-    int s_is2;
-#endif
-
-    for (;;) {
-#if defined (NLS) || defined (KJI)
-       s_is2 = 0;
-       scc = *s++;
-       if (NCisshift(scc)) {
-           scc1 = *s++;
-           if (_NCdec2(scc, scc1, scc) == 1)
-               s--;
-           else
-               s_is2 = 1;
-       }
-#else
-       scc = *s++ & TRIM;
-#endif
-       switch (c = *p++) {
-
-       case '[':
-           ok = 0;
-           lc = 077777;
-           while (cc = *p++) {
-#if defined (NLS) || defined (KJI)
-               if (NCisshift(cc))
-                   if (_NCdec2(cc, *p, cc) == 2)
-                       p++;
-#endif
-               if (cc == ']') {
-                   if (ok)
-                       break;
-                   return (0);
-               }
-#if defined (NLS) || defined (KJI)
-               if (cc == '[')
-                   if (p[1] == ':') {
-                       if (!strncmp(p, "[:alpha:]", 9)) {
-                           ok |= (isascii(scc) && isalpha(scc));
-                           p += 8;
-                           break;
-                       }
-                       if (!strncmp(p, "[:upper:]", 9)) {
-                           ok |= (isascii(scc) && isupper(scc));
-                           p += 8;
-                           break;
-                       }
-                       if (!strncmp(p, "[:lower:]", 9)) {
-                           ok |= (isascii(scc) && islower(scc));
-                           p += 8;
-                           break;
-                       }
-                       if (!strncmp(p, "[:digit:]", 9)) {
-                           ok |= (isascii(scc) && isdigit(scc));
-                           p += 8;
-                           break;
-                       }
-                       if (!strncmp(p, "[:alnum:]", 9)) {
-                           ok |= (isascii(scc) && isalnum(scc));
-                           p += 8;
-                           break;
-                       }
-                       if (!strncmp(p, "[:print:]", 9)) {
-                           ok |= (isascii(scc) && isprint(scc));
-                           p += 8;
-                           break;
-                       }
-                       if (!strncmp(p, "[:punct:]", 9)) {
-                           ok |= (isascii(scc) && ispunct(scc));
-                           p += 8;
-                           break;
-                       }
-#ifdef KJI
-                       if (!strncmp(p, "[:jalpha:]", 10)) {
-                           ok |= isjalpha(scc);
-                           p += 9;
-                           break;
-                       }
-                       if (!strncmp(p, "[:jdigit:]", 10)) {
-                           ok |= isjdigit(scc);
-                           p += 9;
-                           break;
-                       }
-                       if (!strncmp(p, "[:jpunct:]", 10)) {
-                           ok |= isjpunct(scc);
-                           p += 9;
-                           break;
-                       }
-                       if (!strncmp(p, "[:jparen:]", 10)) {
-                           ok |= isjparen(scc);
-                           p += 9;
-                           break;
-                       }
-                       if (!strncmp(p, "[:jkanji:]", 10)) {
-                           ok |= isjkanji(scc);
-                           p += 9;
-                           break;
-                       }
-                       if (!strncmp(p, "[:jhira:]", 9)) {
-                           ok |= isjhira(scc);
-                           p += 8;
-                           break;
-                       }
-                       if (!strncmp(p, "[:jkata:]", 9)) {
-                           ok |= isjkata(scc);
-                           p += 8;
-                           break;
-                       }
-#endif /* KJI */
-                   }
-               if ((cc == '-') && (lc > 0)) {
-                   int cu1, scu1, lcu, tco;
-
-                   cc1 = *p++;
-                   if (NCisshift(cc1))
-                       if (_NCdec2(cc1, *p, cc1) == 1)
-                           p--;
-                   cu1 = NCcoluniq(cc1);
-                   if (((tco = NCcollate(cc1)) < 0)
-                       && (tco = _NCxcolu(tco, &p, 0, &cu1)));
-
-                   lcu = NCcoluniq(lc);
-                   if ((tco = NCcollate(lc)) < 0) {
-                       char tb[3], *tbp = tb;
-
-                       tb[0] = tb[1] = tb[2] = '\0';
-                       _NCe2(lc, tb[0], tb[1]);
-                       tco = _NCxcolu(tco, &tbp, 0, &lcu);
-                   }
-                   scu1 = NCcoluniq(scc);
-                   if (((tco = NCcollate(scc)) < 0)
-                       && (tco = _NCxcolu(tco, &s, 0, &scu1)));
-
-                   /* if we have nonzero collate vals */
-                   if (lcu && cu1 && scu1)
-                       ok += (lcu <= scu1 && scu1 <= cu1);
-                   else
-                       ok += (lc == scc || scc == cu1);
-#else
-               if (cc == '-') {
-                   if (lc <= scc && scc <= *p++)
-                       ok++;
-#endif /* KJI || NLS */
-               } else if (scc == (lc = cc))
-                   ok++;
-           }
-           if (cc == 0)
-               if (ok)
-                   p--;
-               else
-                   return 0;
-           continue;
-
-       case '*':
-           if (!*p)
-               return (1);
-#if defined (NLS) || defined (KJI)
-           if (s_is2)
-               s--;
-#endif
-           for (s--; *s; s++)
-               if (Gmatch(s, p))
-                   return (1);
-           return (0);
-
-       case 0:
-           return (scc == 0);
-
-       default:
-#if defined (NLS) || defined (KJI)
-           if (NCisshift(c))
-               if (_NCdec2(c, *p, c) == 2)
-                   p++;
-           if (c != scc)
-#else
-           if ((c & TRIM) != scc)
-#endif
-               return (0);
-           continue;
-
-       case '?':
-           if (scc == 0)
-               return (0);
-           continue;
-
-       }
-    }
-}
-
-static
-Gcat(s1, s2)
-     register char *s1, *s2;
-{
-    register int len = strlen(s1) + strlen(s2) + 1;
-
-    if (len >= gnleft || gargc >= GAVSIZ - 1)
-       globerr = "Arguments too long";
-    else {
-       gargc++;
-       gnleft -= len;
-       gargv[gargc] = 0;
-       gargv[gargc - 1] = strspl(s1, s2);
-    }
-}
-
-static
-addpath(c)
-     char c;
-{
-
-    if (gpathp >= lastgpathp)
-       globerr = "Pathname too long";
-    else {
-       *gpathp++ = c;
-       *gpathp = 0;
-    }
-}
-
-static
-rscan(t, f)
-     register char **t;
-     int (*f) ();
-{
-    register char *p, c;
-
-    while (p = *t++) {
-       if (f == tglob)
-           if (*p == '~')
-               gflag |= 2;
-           else if (eq(p, "{") || eq(p, "{}"))
-               continue;
-       while (c = *p++)
-           (*f) (c);
-    }
-}
-
-/*
-static
-scan(t, f)
-       register char **t;
-       int (*f)();
-{
-       register char *p, c;
-
-       while (p = *t++)
-               while (c = *p)
-                       *p++ = (*f)(c);
-} */
-
-static
-tglob(c)
-     register char c;
-{
-
-    if (any(c, globchars))
-       gflag |= c == '{' ? 2 : 1;
-    return (c);
-}
-
-/*
-static
-trim(c)
-       char c;
-{
-
-       return (c & TRIM);
-} */
-
-
-letter(c)
-     register char c;
-{
-
-    return (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c == '_');
-}
-
-digit(c)
-     register char c;
-{
-
-    return (c >= '0' && c <= '9');
-}
-
-any(c, s)
-     register int c;
-     register char *s;
-{
-
-    while (*s)
-       if (*s++ == c)
-           return (1);
-    return (0);
-}
-
-blklen(av)
-     register char **av;
-{
-    register int i = 0;
-
-    while (*av++)
-       i++;
-    return (i);
-}
-
-char **
-blkcpy(oav, bv)
-     char **oav;
-     register char **bv;
-{
-    register char **av = oav;
-
-    while (*av++ = *bv++)
-       continue;
-    return (oav);
-}
-
-blkfree(av0)
-     char **av0;
-{
-    register char **av = av0;
-
-    while (*av)
-       free(*av++);
-}
-
-static
-char *
-strspl(cp, dp)
-     register char *cp, *dp;
-{
-    register char *ep = malloc((unsigned)(strlen(cp) + strlen(dp) + 1));
-
-    if (ep == NULL)
-       fatal("Out of memory");
-    (void)strcpy(ep, cp);
-    (void)strcat(ep, dp);
-    return (ep);
-}
-
-char **
-copyblk(v)
-     register char **v;
-{
-    register char **nv =
-       (char **)malloc((unsigned)((blklen(v) + 1) * sizeof(char **)));
-    if (nv == NULL)
-       fatal("Out of memory");
-
-    return (blkcpy(nv, v));
-}
-
-static
-char *
-strend(cp)
-     register char *cp;
-{
-
-    while (*cp)
-       cp++;
-    return (cp);
-}
-
-/*
- * Extract a home directory from the password file
- * The argument points to a buffer where the name of the
- * user whose home directory is sought is currently.
- * We write the home directory of the user back there.
- */
-gethdir(home)
-     char *home;
-{
-    register struct passwd *pp = getpwnam(home);
-
-    if (!pp || home + strlen(pp->pw_dir) >= lastgpathp)
-       return (1);
-    (void)strcpy(home, pp->pw_dir);
-    return (0);
-}
diff --git a/src/ftpd43+/logwtmp.c b/src/ftpd43+/logwtmp.c
deleted file mode 100644 (file)
index 700e36a..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 1988 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- */
-
-#include <afs/param.h>
-#include <sys/types.h>
-#include <sys/file.h>
-#ifdef AFS_SUN5_ENV
-#include <fcntl.h>
-#endif
-#include <sys/time.h>
-#include <sys/stat.h>
-#include <utmp.h>
-#include <time.h>
-#include <string.h>
-
-#define        WTMPFILE        "/usr/adm/wtmp"
-#define        WTMPFILEALT     "/var/adm/wtmp"
-
-static int fd = 0;
-
-#ifdef AFS_LINUX20_ENV
-/* Need to conform to declaration in utmp.h */
-void
-logwtmp(const char *line, const char *name, const char *host)
-#else
-logwtmp(line, name, host)
-     char *line, *name, *host;
-#endif
-{
-    struct utmp ut;
-    struct stat buf;
-
-    if (!fd && (fd = open(WTMPFILE, O_WRONLY | O_APPEND, 0)) < 0) {
-       if ((fd = open(WTMPFILEALT, O_WRONLY | O_APPEND, 0)) < 0)
-           return;
-    }
-
-    memset((char *)&ut, 0, sizeof(ut));
-    if (!fstat(fd, &buf)) {
-       (void)strncpy(ut.ut_line, line, sizeof(ut.ut_line));
-       (void)strncpy(ut.ut_name, name, sizeof(ut.ut_name));
-#if !defined(AFS_SUN5_ENV)
-       (void)strncpy(ut.ut_host, host, sizeof(ut.ut_host));
-#endif /* !defined(AFS_SUN5_ENV) */
-#ifdef AFS_AIX32_ENV
-       (void)strncpy(ut.ut_id, line, sizeof(ut.ut_id));
-       ut.ut_exit.e_termination = 0;
-       ut.ut_exit.e_exit = 0;
-#endif
-#if    !defined(AFS_SUN_ENV) || defined(AFS_SUN5_ENV)
-       ut.ut_type = ((name && strlen(name)) ? USER_PROCESS : DEAD_PROCESS);
-       ut.ut_pid = getpid();
-#endif
-       (void)time(&ut.ut_time);
-       if (write(fd, (char *)&ut, sizeof(struct utmp)) !=
-           sizeof(struct utmp))
-           (void)ftruncate(fd, buf.st_size);
-    }
-}
diff --git a/src/ftpd43+/newvers.sh b/src/ftpd43+/newvers.sh
deleted file mode 100644 (file)
index b467e59..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh -
-#
-# Copyright (c) 1983 The Regents of the University of California.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms are permitted
-# provided that the above copyright notice and this paragraph are
-# duplicated in all such forms and that any documentation,
-# advertising materials, and other materials related to such
-# distribution and use acknowledge that the software was developed
-# by the University of California, Berkeley.  The name of the
-# University may not be used to endorse or promote products derived
-# from this software without specific prior written permission.
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-#
-#      @(#)newvers.sh  5.3 (Berkeley) 10/31/88
-#
-if [ ! -r version ]; then echo 0 > version; fi
-touch version
-awk '  {       version = $1 + 1; }\
-END    {       printf "char version[] = \"Version 4.%d ", version > "vers.c";\
-               printf "%d\n", version > "version"; }' < version
-echo `date`'";' >> vers.c
diff --git a/src/ftpd43+/popen.c b/src/ftpd43+/popen.c
deleted file mode 100644 (file)
index 31b3fea..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 1988 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software written by Ken Arnold and
- * published in UNIX Review, Vol. 6, No. 8.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- */
-
-#include <afs/param.h>
-#include <sys/types.h>
-#include <sys/signal.h>
-#include <stdio.h>
-
-#ifndef        AFS_AIX32_ENV
-#ifndef        FD_SETSIZE              /* XXX */
-typedef u_short uid_t;
-#endif
-#endif
-
-/*
- * Special version of popen which avoids call to shell.  This insures noone
- * may create a pipe to a hidden program as a side effect of a list or dir
- * command.
- */
-static uid_t *pids;
-static int fds;
-
-FILE *
-ftpd_popen(program, type)
-     char *program, *type;
-{
-    register char *cp;
-    FILE *iop;
-    int argc, gargc, pdes[2], pid;
-    char **pop, *argv[100], *gargv[1000], *vv[2];
-    extern char **glob(), **copyblk(), *strtok();
-
-    if (*type != 'r' && *type != 'w' || type[1])
-       return (NULL);
-
-    if (!pids) {
-       if ((fds = getdtablesize()) <= 0)
-           return (NULL);
-       if (!(pids = (uid_t *) malloc((u_int) (fds * sizeof(uid_t)))))
-           return (NULL);
-       memset(pids, 0, fds * sizeof(uid_t));
-    }
-    if (pipe(pdes) < 0)
-       return (NULL);
-
-    /* break up string into pieces */
-    for (argc = 0, cp = program;; cp = NULL)
-       if (!(argv[argc++] = strtok(cp, " \t\n")))
-           break;
-
-    /* glob each piece */
-    gargv[0] = argv[0];
-    for (gargc = argc = 1; argv[argc]; argc++) {
-       if (!(pop = glob(argv[argc]))) {        /* globbing failed */
-           vv[0] = argv[argc];
-           vv[1] = NULL;
-           pop = copyblk(vv);
-       }
-       argv[argc] = (char *)pop;       /* save to free later */
-       while (*pop && gargc < 1000)
-           gargv[gargc++] = *pop++;
-    }
-    gargv[gargc] = NULL;
-
-    iop = NULL;
-    switch (pid = vfork()) {
-    case -1:                   /* error */
-       (void)close(pdes[0]);
-       (void)close(pdes[1]);
-       goto free;
-       /* NOTREACHED */
-    case 0:                    /* child */
-       if (*type == 'r') {
-           if (pdes[1] != 1) {
-               dup2(pdes[1], 1);
-               (void)close(pdes[1]);
-           }
-           (void)close(pdes[0]);
-       } else {
-           if (pdes[0] != 0) {
-               dup2(pdes[0], 0);
-               (void)close(pdes[0]);
-           }
-           (void)close(pdes[1]);
-       }
-       execv(gargv[0], gargv);
-       _exit(1);
-    }
-    /* parent; assume fdopen can't fail...  */
-    if (*type == 'r') {
-       iop = fdopen(pdes[0], type);
-       (void)close(pdes[1]);
-    } else {
-       iop = fdopen(pdes[1], type);
-       (void)close(pdes[0]);
-    }
-    pids[fileno(iop)] = pid;
-
-  free:for (argc = 1; argv[argc] != NULL; argc++)
-       blkfree((char **)argv[argc]);
-    return (iop);
-}
-
-ftpd_pclose(iop)
-     FILE *iop;
-{
-    register int fdes;
-    sigset_t oset;
-    sigset_t sigBlock;
-    int someSignals[100];
-    int pid, stat_loc;
-    u_int waitpid();
-
-    /*
-     * pclose returns -1 if stream is not associated with a
-     * `popened' command, or, if already `pclosed'.
-     */
-    if (pids[fdes = fileno(iop)] == 0)
-       return (-1);
-    (void)fclose(iop);
-    memset((char *)someSignals, 0, sizeof(someSignals));
-    someSignals[0] =
-       (1 << (SIGINT - 1)) + (1 << (SIGQUIT - 1)) + (1 << (SIGHUP - 1));
-    sigBlock = *((sigset_t *) someSignals);
-    sigprocmask(SIG_BLOCK, &sigBlock, &oset);
-    while ((pid = wait(&stat_loc)) != pids[fdes] && pid != -1);
-    sigprocmask(SIG_SETMASK, &oset, (sigset_t *) 0);
-    pids[fdes] = 0;
-    return (stat_loc);
-}
diff --git a/src/ftpd43+/telnet.h b/src/ftpd43+/telnet.h
deleted file mode 100644 (file)
index 625a62a..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * LICENSED MATERIALS - PROPERTY OF IBM
- */
-
-/*
- * Copyright (c) 1983 Regents of the University of California.
- * All rights reserved.  The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
- *
- *     @(#)telnet.h    5.1 (Berkeley) 5/30/85
- */
-
-/*
- * Definitions for the TELNET protocol.
- */
-#define        IAC     255             /* interpret as command: */
-#define        DONT    254             /* you are not to use option */
-#define        DO      253             /* please, you use option */
-#define        WONT    252             /* I won't use option */
-#define        WILL    251             /* I will use option */
-#define        SB      250             /* interpret as subnegotiation */
-#define        GA      249             /* you may reverse the line */
-#define        EL      248             /* erase the current line */
-#define        EC      247             /* erase the current character */
-#define        AYT     246             /* are you there */
-#define        AO      245             /* abort output--but let prog finish */
-#define        IP      244             /* interrupt process--permanently */
-#define        BREAK   243             /* break */
-#define        DM      242             /* data mark--for connect. cleaning */
-#define        NOP     241             /* nop */
-#define        SE      240             /* end sub negotiation */
-#define EOR     239            /* end of record (transparent mode) */
-
-#define SYNCH  242             /* for telfunc calls */
-
-#ifdef TELCMDS
-char *telcmds[] = {
-    "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
-    "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC",
-};
-#endif
-
-/* telnet options */
-#define TELOPT_BINARY  0       /* 8-bit data path */
-#define TELOPT_ECHO    1       /* echo */
-#define        TELOPT_RCP      2       /* prepare to reconnect */
-#define        TELOPT_SGA      3       /* suppress go ahead */
-#define        TELOPT_NAMS     4       /* approximate message size */
-#define        TELOPT_STATUS   5       /* give status */
-#define        TELOPT_TM       6       /* timing mark */
-#define        TELOPT_RCTE     7       /* remote controlled transmission and echo */
-#define TELOPT_NAOL    8       /* negotiate about output line width */
-#define TELOPT_NAOP    9       /* negotiate about output page size */
-#define TELOPT_NAOCRD  10      /* negotiate about CR disposition */
-#define TELOPT_NAOHTS  11      /* negotiate about horizontal tabstops */
-#define TELOPT_NAOHTD  12      /* negotiate about horizontal tab disposition */
-#define TELOPT_NAOFFD  13      /* negotiate about formfeed disposition */
-#define TELOPT_NAOVTS  14      /* negotiate about vertical tab stops */
-#define TELOPT_NAOVTD  15      /* negotiate about vertical tab disposition */
-#define TELOPT_NAOLFD  16      /* negotiate about output LF disposition */
-#define TELOPT_XASCII  17      /* extended ascic character set */
-#define        TELOPT_LOGOUT   18      /* force logout */
-#define        TELOPT_BM       19      /* byte macro */
-#define        TELOPT_DET      20      /* data entry terminal */
-#define        TELOPT_SUPDUP   21      /* supdup protocol */
-#define        TELOPT_SUPDUPOUTPUT 22  /* supdup output */
-#define        TELOPT_SNDLOC   23      /* send location */
-#define        TELOPT_TTYPE    24      /* terminal type */
-#define        TELOPT_EOR      25      /* end or record */
-#define TELOPT_EXOPL   255     /* extended-options-list */
-
-#ifdef TELOPTS
-#define        NTELOPTS        (1+TELOPT_EOR)
-char *telopts[NTELOPTS] = {
-    "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
-    "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
-    "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
-    "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
-    "DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT",
-    "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
-};
-#endif
-
-/* sub-option qualifiers */
-#define        TELQUAL_IS      0       /* option is... */
-#define        TELQUAL_SEND    1       /* send option */
diff --git a/src/ftpd43+/vers.c b/src/ftpd43+/vers.c
deleted file mode 100644 (file)
index b135a6b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-char version[] = "Version 4.162 Tue Nov 1 10:50:37 PST 1988";
diff --git a/src/ftpd43+/version b/src/ftpd43+/version
deleted file mode 100644 (file)
index 0234b51..0000000
+++ /dev/null
@@ -1 +0,0 @@
-162
diff --git a/src/inetd/.cvsignore b/src/inetd/.cvsignore
deleted file mode 100644 (file)
index f3c7a7c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Makefile
diff --git a/src/inetd/Makefile.in b/src/inetd/Makefile.in
deleted file mode 100644 (file)
index 2fead04..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-srcdir=@srcdir@
-include @TOP_OBJDIR@/src/config/Makefile.config
-
-AFSLIBS =  ${TOP_LIBDIR}/libkauth.a ${TOP_LIBDIR}/libubik.a\
-                  ${TOP_LIBDIR}/libauth.a ${TOP_LIBDIR}/libsys.a \
-                  ${TOP_LIBDIR}/librx.a \
-                  ${TOP_LIBDIR}/libsys.a \
-                  ${TOP_LIBDIR}/liblwp.a ${TOP_LIBDIR}/librxkad.a\
-                  ${TOP_LIBDIR}/libdes.a ${TOP_LIBDIR}/libcmd.a \
-                  ${TOP_LIBDIR}/libcom_err.a ${TOP_LIBDIR}/util.a 
-LIBS = ${AFSLIBS} ${LIBRES} ${XLIBS}
-OBJS = inetd.o setenv.o getenv.o
-
-include ../config/Makefile.version
-
-noversion: install
-
-# ta-rauth.o is used by rlogin, rsh, rcp, rlogind
-all : inetd ta-rauth.o
-
-inetd: ${OBJS}
-       set -x; \
-       case "${SYS_NAME}" in \
-       alpha_osf1 | alpha_osf20 |  alpha_osf30 | alpha_dux?? ) \
-               ${CC} ${CFLAGS} -o $@ ${OBJS} ${LIBS} -lutil ;; \
-       *) \
-               ${CC} ${CFLAGS} -o $@ ${OBJS} ${LIBS} ;; \
-       esac
-
-inetd.o: inetd.c AFS_component_version_number.c
-ta-rauth.o: ta-rauth.c
-
-clean:
-       $(RM) -f inetd *.o *.BAK *~ core AFS_component_version_number.c
-
-install: ${DESTDIR}${sbindir}/inetd
-
-dest: ${DEST}/etc/inetd
-       set -x; \
-       case "${SYS_NAME}" in \
-       sun4* ) \
-               ${INSTALL} -m 644 -f inetd.conf.solaris ${DEST}/etc/inetd.conf ;; \
-       sgi_* ) \
-               ${INSTALL} -m 644 -f inetd.conf.sgi ${DEST}/etc/inetd.conf ;; \
-       alpha_dux?? ) \
-               ${INSTALL} -m 644 -f inetd.conf.dux40 ${DEST}/etc/inetd.conf ;; \
-       * ) \
-               ${INSTALL} -m 644 inetd.conf ${DEST}/etc/inetd.conf ;; \
-       esac
-
-${DESTDIR}${sbindir}/inetd: inetd
-       ${INSTALL} $? $@
-
-${DEST}/etc/inetd: inetd
-       ${INSTALL} $? $@
diff --git a/src/inetd/getenv.c b/src/inetd/getenv.c
deleted file mode 100644 (file)
index 90c5940..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 1987 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#include <afsconfig.h>
-#include <afs/param.h>
-
-RCSID
-    ("$Header$");
-
-#include <stdio.h>
-
-/*
- * _findenv --
- *     Returns pointer to value associated with name, if any, else NULL.
- *     Sets offset to be the offset of the name/value combination in the
- *     environmental array, for use by setenv(3) and unsetenv(3).
- *     Explicitly removes '=' in argument name.
- *
- *     This routine *should* be a static; don't use it.
- */
-char *
-_findenv(name, offset)
-     register char *name;
-     int *offset;
-{
-    extern char **environ;
-    register int len;
-    register char **P, *C;
-
-    for (C = name, len = 0; *C && *C != '='; ++C, ++len);
-    for (P = environ; *P; ++P)
-       if (!strncmp(*P, name, len))
-           if (*(C = *P + len) == '=') {
-               *offset = P - environ;
-               return (++C);
-           }
-    return (NULL);
-}
diff --git a/src/inetd/inetd.8 b/src/inetd/inetd.8
deleted file mode 100644 (file)
index 96c0f94..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-.\" Copyright (c) 1985 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms are permitted
-.\" provided that the above copyright notice and this paragraph are
-.\" duplicated in all such forms and that any documentation,
-.\" advertising materials, and other materials related to such
-.\" distribution and use acknowledge that the software was developed
-.\" by the University of California, Berkeley.  The name of the
-.\" University may not be used to endorse or promote products derived
-.\" from this software without specific prior written permission.
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-.\" WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-.\"
-.\"    @(#)inetd.8     6.5 (Berkeley) 9/19/88
-.\"
-.TH INETD 8 "September 19, 1988"
-.UC 6
-.SH NAME
-inetd \- internet ``super\-server''
-.SH SYNOPSIS
-.B /etc/inetd
-[
-.B \-d
-] [ configuration file ]
-.SH DESCRIPTION
-.I Inetd
-should be run at boot time by
-.IR /etc/rc.local .
-It then listens for connections on certain
-internet sockets.  When a connection is found on one
-of its sockets, it decides what service the socket
-corresponds to, and invokes a program to service the request.
-After the program is
-finished, it continues to listen on the socket (except in some cases which
-will be described below).  Essentially,
-.I inetd
-allows running one daemon to invoke several others,
-reducing load on the system.
-.PP
-Upon execution,
-.I inetd
-reads its configuration information from a configuration
-file which, by default, is
-.IR /etc/inetd.conf .
-There must be an entry for each field of the configuration
-file, with entries for each field separated by a tab or
-a space.  Comments are denoted by a ``#'' at the beginning
-of a line.  There must be an entry for each field.  The
-fields of the configuration file are as follows:
-.br
-       service name
-.br
-       socket type
-.br
-       protocol
-.br
-       wait/nowait
-.br
-       user
-.br
-       server program
-.br
-       server program arguments
-.PP
-The
-.I service name
-entry is the name of a valid service in
-the file
-.IR /etc/services/ .
-For ``internal'' services (discussed below), the service
-name
-.I must
-be the official name of the service (that is, the first entry in
-.IR /etc/services ).
-.PP
-The
-.I socket type
-should be one of ``stream'', ``dgram'', ``raw'', ``rdm'', or ``seqpacket'',
-depending on whether the socket is a stream, datagram, raw,
-reliably delivered message, or sequenced packet socket.
-.PP
-The
-.I protocol
-must be a valid protocol as given in
-.IR /etc/protocols .
-Examples might be ``tcp'' or ``udp''.
-.PP
-The
-.I wait/nowait
-entry is applicable to datagram sockets only (other sockets should
-have a ``nowait'' entry in this space).  If a datagram server connects
-to its peer, freeing the socket so
-.I inetd
-can received further messages on the socket, it is said to be
-a ``multi-threaded'' server, and should use the ``nowait''
-entry.  For datagram servers which process all incoming datagrams
-on a socket and eventually time out, the server is said to be
-``single-threaded'' and should use a ``wait'' entry.  ``Comsat'' (``biff'')
-and ``talk'' are both examples of the latter type of
-datagram server.
-.I Tftpd
-is an exception; it is a datagram server that establishes pseudo-connections.
-It must be listed as ``wait'' in order to avoid a race;
-the server reads the first packet, creates a new socket,
-and then forks and exits to allow
-.I inetd
-to check for new service requests to spawn new servers.
-.PP
-The
-.I user
-entry should contain the user name of the user as whom the server
-should run.  This allows for servers to be given less permission
-than root.
-The
-.I server program
-entry should contain the pathname of the program which is to be
-executed by
-.I inetd
-when a request is found on its socket.  If
-.I inetd
-provides this service internally, this entry should
-be ``internal''.
-.PP
-The arguments to the server program should be just as they
-normally are, starting with argv[0], which is the name of
-the program.  If the service is provided internally, the
-word ``internal'' should take the place of this entry.
-.PP
-.I Inetd
-provides several ``trivial'' services internally by use of
-routines within itself.  These services are ``echo'',
-``discard'', ``chargen'' (character generator), ``daytime''
-(human readable time), and ``time'' (machine readable time,
-in the form of the number of seconds since midnight, January
-1, 1900).  All of these services are tcp based.  For
-details of these services, consult the appropriate RFC
-from the Network Information Center.
-.PP
-.I Inetd
-rereads its configuration file when it receives a hangup signal, SIGHUP.
-Services may be added, deleted or modified when the configuration file
-is reread.
-.SH "SEE ALSO"
-comsat(8), fingerd(8), ftpd(8), rexecd(8), rlogind(8), rshd(8),
-telnetd(8), tftpd(8)
diff --git a/src/inetd/inetd.c b/src/inetd/inetd.c
deleted file mode 100644 (file)
index fbe5f7a..0000000
+++ /dev/null
@@ -1,1535 +0,0 @@
-/* inetd.c */
-
-/*
- * Copyright (c) 1983 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/*
- * Inetd - Internet super-server
- *
- * This program invokes all internet services as needed.
- * connection-oriented services are invoked each time a
- * connection is made, by creating a process.  This process
- * is passed the connection as file descriptor 0 and is
- * expected to do a getpeername to find out the source host
- * and port.
- *
- * Datagram oriented services are invoked when a datagram
- * arrives; a process is created and passed a pending message
- * on file descriptor 0.  Datagram servers may either connect
- * to their peer, freeing up the original socket for inetd
- * to receive further messages on, or ``take over the socket'',
- * processing all arriving datagrams and, eventually, timing
- * out.         The first type of server is said to be ``multi-threaded'';
- * the second type of server ``single-threaded''. 
- *
- * Inetd uses a configuration file which is read at startup
- * and, possibly, at some later time in response to a hangup signal.
- * The configuration file is ``free format'' with fields given in the
- * order shown below.  Continuation lines for an entry must being with
- * a space or tab.  All fields must be present in each entry.
- *
- *     service name                    must be in /etc/services
- *     socket type                     stream/dgram/raw/rdm/seqpacket
- *     protocol                        must be in /etc/protocols
- *     wait/nowait                     single-threaded/multi-threaded
- *     user                            user to run daemon as
- *     server program                  full path name
- *     server program arguments        maximum of MAXARGS (5)
- *
- * Comment lines are indicated by a `#' in column 1.
- */
-#include <afsconfig.h>
-#include <afs/param.h>
-
-RCSID
-    ("$Header$");
-
-#include <sys/param.h>
-#include <sys/stat.h>
-#ifdef AFS_SUN5_ENV
-#define BSD_COMP
-#endif
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <sys/file.h>
-#ifdef AFS_SUN5_ENV
-#include <fcntl.h>
-#endif
-#include <sys/wait.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <afs/auth.h>
-#include <afs/cellconfig.h>
-#include <afs/afsutil.h>
-#include <errno.h>
-#include <signal.h>
-#include <netdb.h>
-#ifdef AIX
-#include <sys/syslog.h>
-#else
-#include <syslog.h>
-#endif /* AIX */
-#include <pwd.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include <stdlib.h>
-#include <time.h>
-
-#define        TOOMANY         40      /* don't start more than TOOMANY */
-#define        CNT_INTVL       60      /* servers in CNT_INTVL sec. */
-#define        RETRYTIME       (60*10) /* retry after bind or server fail */
-
-void config(), reapchild(), retry();
-
-int debug = 0;
-int nsock, maxsock;
-fd_set allsock;
-int options;
-int timingout;
-struct servent *sp;
-
-struct servtab {
-    char *se_service;          /* name of service */
-    int se_socktype;           /* type of socket to use */
-    char *se_proto;            /* protocol used */
-    short se_wait;             /* single threaded server */
-    short se_checked;          /* looked at during merge */
-    char *se_user;             /* user name to run as */
-    struct biltin *se_bi;      /* if built-in, description */
-    char *se_server;           /* server program */
-#define MAXARGV 5
-    char *se_argv[MAXARGV + 1];        /* program arguments */
-    int se_fd;                 /* open descriptor */
-    struct sockaddr_in se_ctrladdr;    /* bound address */
-    int se_count;              /* number started since se_time */
-    struct timeval se_time;    /* start of se_count */
-    struct servtab *se_next;
-} *servtab;
-
-int echo_stream(), discard_stream(), machtime_stream();
-int daytime_stream(), chargen_stream();
-int echo_dg(), discard_dg(), machtime_dg(), daytime_dg(), chargen_dg();
-int auth_stream(), auth_dg();
-
-struct biltin {
-    char *bi_service;          /* internally provided service name */
-    int bi_socktype;           /* type of socket supported */
-    short bi_fork;             /* 1 if should fork before call */
-    short bi_wait;             /* 1 if should wait for child */
-    int (*bi_fn) ();           /* function which performs it */
-} biltins[] = {
-    /* Echo received data */
-    "echo", SOCK_STREAM, 1, 0, echo_stream, "echo", SOCK_DGRAM, 0, 0, echo_dg,
-       /* Internet /dev/null */
-       "discard", SOCK_STREAM, 1, 0, discard_stream, "discard", SOCK_DGRAM,
-       0, 0, discard_dg,
-       /* Return 32 bit time since 1970 */
-       "time", SOCK_STREAM, 0, 0, machtime_stream, "time", SOCK_DGRAM, 0, 0,
-       machtime_dg,
-       /* Return human-readable time */
-       "daytime", SOCK_STREAM, 0, 0, daytime_stream, "daytime", SOCK_DGRAM,
-       0, 0, daytime_dg,
-       /* Familiar character generator */
-       "chargen", SOCK_STREAM, 1, 0, chargen_stream, "chargen", SOCK_DGRAM,
-       0, 0, chargen_dg,
-       /* Remote authentication services */
-"ta-rauth", SOCK_STREAM, 1, 0, auth_stream, "ta-rauth", SOCK_DGRAM, 0,
-       0, auth_dg, 0};
-
-#define NUMINT (sizeof(intab) / sizeof(struct inent))
-char *CONFIG = "/etc/inetd.conf";
-char **Argv;
-char *LastArg;
-int backlog = 10;              /* listen() queue length */
-
-#include "AFS_component_version_number.c"
-
-long allZeroes[100];
-sigset_t sigNone;
-sigset_t sigBlock;
-
-int afs_didsetpag = 0;
-main(argc, argv, envp)
-     int argc;
-     char *argv[], *envp[];
-{
-    extern char *optarg;
-    extern int optind;
-    register struct servtab *sep;
-    register struct passwd *pwd;
-    struct passwd *getpwnam();
-    register int tmpint;
-    struct sigaction sa;
-    int ch, pid, dofork;
-    char buf[50];
-#if defined(AFS_HPUX_ENV)
-    int consoleFid;
-    pid_t newSessionID;
-#endif /* defined(AFS_HPUX_ENV) */
-
-    memset((char *)allZeroes, '\0', sizeof(allZeroes));
-    memset((char *)allZeroes, 0, sizeof(allZeroes));
-
-    sigNone = *((sigset_t *) allZeroes);
-    allZeroes[0] =
-       (1 << (SIGCHLD - 1)) + (1 << (SIGHUP - 1)) + (1 << (SIGALRM - 1));
-    sigBlock = *((sigset_t *) allZeroes);
-
-    setpag();                  /* disassociate with PAG of person starting inetd */
-
-    Argv = argv;
-    if (envp == 0 || *envp == 0)
-       envp = argv;
-    while (*envp)
-       envp++;
-    LastArg = envp[-1] + strlen(envp[-1]);
-
-    while ((ch = getopt(argc, argv, "dl:")) != EOF)
-       switch (ch) {
-       case 'd':
-           debug = 1;
-           options |= SO_DEBUG;
-           break;
-       case 'l':
-           /* undocumented option to set listen() queue length */
-           backlog = atoi(optarg);
-           break;
-       case '?':
-       default:
-           fprintf(stderr, "usage: inetd [-d]");
-           exit(1);
-       }
-    argc -= optind;
-    argv += optind;
-
-    if (argc > 0)
-       CONFIG = argv[0];
-    if (debug == 0) {
-#if    defined(AFS_OSF_ENV) && !defined(AFS_OSF32_ENV)
-       daemon(0, 0);
-#else
-       if (fork()) {
-           exit(0);
-       }
-#ifdef AFS_HPUX_ENV
-       for (tmpint = 0; tmpint < getnumfds(); tmpint++)
-#else
-       for (tmpint = 0; tmpint < 10; tmpint++)
-#endif
-           (void)close(tmpint);
-       (void)open("/", O_RDONLY);
-       (void)dup2(0, 1);
-       (void)dup2(0, 2);
-#ifndef AFS_HPUX_ENV
-       tmpint = open("/dev/tty", O_RDWR);
-       if (tmpint > 0) {
-           ioctl(tmpint, TIOCNOTTY, NULL);
-           close(tmpint);
-       }
-#else
-#ifdef notdef
-       /*
-        * the way to get rid of the controlling terminal in hp-ux, if we
-        * are not a process group leader
-        */
-       newSessionID = setsid();
-       if (newSessionID == -1) {
-           /*
-            * we are already a process group leader, & extensive experimentation
-            * indicates that (contrary to the documentation, once again), there
-            * doesn't seem to be any way to get rid of our control tty, other
-            * than the following ugliness:
-            */
-           if (fork())
-               exit(0);
-       }
-#endif
-#endif
-#ifdef AFS_HPUX_ENV
-       (void)setpgrp();
-#else
-       (void)setpgrp(0, 0);
-#endif
-
-#if !defined(AIX)
-       (void)signal(SIGTSTP, SIG_IGN);
-       (void)signal(SIGTTIN, SIG_IGN);
-       (void)signal(SIGTTOU, SIG_IGN);
-#endif /* !defined(AIX) */
-#endif /* AFS_OSF_ENV */
-    }
-
-    openlog("inetd", LOG_PID | LOG_NOWAIT, LOG_DAEMON);
-
-    memset((char *)&sa, '\0', sizeof(sa));
-    sa.sa_mask = sigBlock;
-    sa.sa_handler = retry;
-    sigaction(SIGALRM, &sa, NULL);
-    config();
-    sa.sa_handler = config;
-    sigaction(SIGHUP, &sa, NULL);
-    sa.sa_handler = reapchild;
-    sigaction(SIGCHLD, &sa, NULL);
-    {
-       /* space for daemons to overwrite environment for ps */
-#define        DUMMYSIZE       100
-       char dummy[DUMMYSIZE];
-
-       (void)memset(dummy, 'x', sizeof(DUMMYSIZE) - 1);
-       dummy[DUMMYSIZE - 1] = '\0';
-       (void)setenv("inetd_dummy", dummy, 1);
-    }
-
-    for (;;) {
-       int n, ctrl;
-       fd_set readable;
-
-       if (nsock == 0) {
-           (void)sigprocmask(SIG_BLOCK, &sigBlock, (sigset_t *) 0);
-           while (nsock == 0)
-               sigpause(0L);
-           (void)sigprocmask(SIG_SETMASK, &sigNone, (sigset_t *) 0);
-       }
-       readable = allsock;
-       if ((n =
-            select(maxsock + 1, &readable, (fd_set *) 0, (fd_set *) 0,
-                   NULL)) <= 0) {
-           if (n < 0 && errno != EINTR)
-               syslog(LOG_WARNING, "select: %m\n");
-           sleep(1);
-           continue;
-       }
-       for (sep = servtab; n && sep; sep = sep->se_next)
-           if ((sep->se_fd != -1) && FD_ISSET(sep->se_fd, &readable)) {
-               n--;
-               if (debug)
-                   fprintf(stderr, "someone wants %s\n", sep->se_service);
-               if (!sep->se_wait && sep->se_socktype == SOCK_STREAM) {
-                   ctrl = accept(sep->se_fd, NULL, (int *)0);
-                   if (debug)
-                       fprintf(stderr, "accept, ctrl %d\n", ctrl);
-                   if (ctrl < 0) {
-                       if (errno == EINTR)
-                           continue;
-                       syslog(LOG_WARNING, "accept: %m");
-                       continue;
-                   }
-               } else
-                   ctrl = sep->se_fd;
-               (void)sigprocmask(SIG_BLOCK, &sigBlock, (sigset_t *) 0);
-               pid = 0;
-               dofork = (sep->se_bi == 0 || sep->se_bi->bi_fork);
-               if (dofork) {
-                   if (debug)
-                       fprintf(stderr, "forking\n");
-                   if (sep->se_socktype == SOCK_DGRAM) {
-                       if (sep->se_count++ == 0)
-                           (void)gettimeofday(&sep->se_time, NULL);
-                       else if (sep->se_count >= TOOMANY) {
-                           struct timeval now;
-
-                           (void)gettimeofday(&now, NULL);
-                           if (now.tv_sec - sep->se_time.tv_sec > CNT_INTVL) {
-                               sep->se_time = now;
-                               sep->se_count = 1;
-                           } else {
-                               syslog(LOG_ERR,
-                                      "%s/%s server failing (looping), service terminated %d\n",
-                                      sep->se_service, sep->se_proto,
-                                      sep->se_socktype);
-                               FD_CLR(sep->se_fd, &allsock);
-                               (void)close(sep->se_fd);
-                               sep->se_fd = -1;
-                               sep->se_count = 0;
-                               nsock--;
-                               sigprocmask(SIG_SETMASK, &sigNone,
-                                           (sigset_t *) 0);
-                               if (!timingout) {
-                                   timingout = 1;
-                                   alarm(RETRYTIME);
-                               }
-                               continue;
-                           }
-                       }
-                   }
-                   pid = fork();
-               }
-               if (pid < 0) {
-                   if (!sep->se_wait && sep->se_socktype == SOCK_STREAM)
-                       close(ctrl);
-                   sigprocmask(SIG_SETMASK, &sigNone, (sigset_t *) 0);
-                   sleep(1);
-                   continue;
-               }
-               if (pid && sep->se_wait) {
-                   sep->se_wait = pid;
-                   FD_CLR(sep->se_fd, &allsock);
-                   nsock--;
-               }
-               sigprocmask(SIG_SETMASK, &sigNone, (sigset_t *) 0);
-               if (pid == 0) {
-                   if (debug) {
-#ifdef AFS_OSF_ENV
-                       setsid();
-#else
-                       if (dofork && (tmpint = open("/dev/tty", O_RDWR)) > 0) {
-#ifndef AFS_HPUX_ENV
-                           ioctl(tmpint, TIOCNOTTY, 0);
-#endif
-                           close(tmpint);
-                       }
-                       (void)setpgrp(0, 0);
-#if !defined(AIX)
-                       (void)signal(SIGTSTP, SIG_IGN);
-                       (void)signal(SIGTTIN, SIG_IGN);
-                       (void)signal(SIGTTOU, SIG_IGN);
-#endif /* !defined(AIX) */
-#endif
-                   }
-                   if (dofork) {
-#ifdef AFS_HPUX_ENV
-                       /* make child session leader */
-                       setsid();
-                       resetsignals();
-                       sigsetmask(0L);
-                       for (tmpint = getnumfds(); --tmpint > 2;)
-#else
-                       for (tmpint = getdtablesize(); --tmpint > 2;)
-#endif
-                           if (tmpint != ctrl)
-                               close(tmpint);
-                   }
-                   afs_didsetpag = 0;
-                   if (sep->se_bi)
-                       (*sep->se_bi->bi_fn) (ctrl, sep);
-                   else {
-#ifdef AFS_HPUX_ENV
-                       int pgid = -getpid();
-#else
-#ifndef        AFS_OSF_ENV
-                       (void)setpgrp(0, 0);
-#endif
-#endif
-                       dup2(ctrl, 0);
-                       close(ctrl);
-                       dup2(0, 1);
-                       dup2(0, 2);
-#ifdef AFS_HPUX_ENV
-                       /* make child socket process group leader */
-                       ioctl(0, SIOCSPGRP, (char *)&pgid);
-#endif
-                       if ((pwd = getpwnam(sep->se_user)) == NULL) {
-                           fprintf(stderr, "getpwnam failed\n");
-                           syslog(LOG_ERR, "getpwnam: %s: No such user",
-                                  sep->se_user);
-                           if (sep->se_socktype != SOCK_STREAM)
-                               recv(0, buf, sizeof(buf), 0);
-                           _exit(1);
-                       }
-                       if (pwd->pw_uid) {
-#ifdef AFS_HPUX_ENV
-                           (void)initgroups((uid_t) pwd->pw_name,
-                                            (gid_t) pwd->pw_gid);
-                           (void)setgid((gid_t) pwd->pw_gid);
-#else
-                           (void)setgid((gid_t) pwd->pw_gid);
-                           initgroups(pwd->pw_name, pwd->pw_gid);
-#endif
-                           (void)setuid((uid_t) pwd->pw_uid);
-                       }
-                       if (!afs_didsetpag
-                           && (!strcmp(sep->se_service, "login")
-                               || !strcmp(sep->se_service, "shell"))) {
-                           setpag();   /* to disassociate it from current group... */
-                       }
-#ifdef AFS_HPUX_ENV
-#ifdef notdef
-                       if (sep->se_argv[0] != NULL) {
-                           if (!strcmp(sep->se_argv[0], "%A")) {
-                               char addrbuf[32];
-                               sprintf(addrbuf, "%s.%d",
-                                       inet_ntoa(his_addr.sin_addr.s_addr),
-                                       ntohs(his_addr.sin_port));
-                               execl(sep->se_server,
-                                     strrchr(sep->se_server, '/') + 1,
-                                     sep->se_socktype ==
-                                     SOCK_DGRAM ? (char *)0 : addrbuf, NULL);
-                           } else
-                               execv(sep->se_server, sep->se_argv);
-                       } else
-#endif
-#endif
-                           execv(sep->se_server, sep->se_argv);
-                       if (debug)
-                           fprintf(stderr, "%d execl %s\n", getpid(),
-                                   sep->se_server);
-                       if (sep->se_socktype != SOCK_STREAM)
-                           recv(0, buf, sizeof(buf), 0);
-                       syslog(LOG_ERR, "execv %s: %m", sep->se_server);
-                       _exit(1);
-                   }
-               }
-               if (!sep->se_wait && sep->se_socktype == SOCK_STREAM)
-                   close(ctrl);
-           }
-    }
-}
-
-void
-reapchild()
-{
-    int status;
-    int pid;
-    register struct servtab *sep;
-
-    for (;;) {
-       pid = wait3(&status, WNOHANG, NULL);
-       if (pid <= 0)
-           break;
-       if (debug)
-           fprintf(stderr, "%d <reaped (status %d)\n", pid, status);
-       for (sep = servtab; sep; sep = sep->se_next)
-           if (sep->se_wait == pid) {
-               if (status)
-                   syslog(LOG_WARNING, "%s: exit status 0x%x",
-                          sep->se_server, status);
-               if (debug)
-                   fprintf(stderr, "restored %s, fd %d\n", sep->se_service,
-                           sep->se_fd);
-               FD_SET(sep->se_fd, &allsock);
-               nsock++;
-               sep->se_wait = 1;
-           }
-    }
-}
-
-void
-config()
-{
-    register struct servtab *sep, *cp, **sepp;
-    struct servtab *getconfigent(), *enter();
-    sigset_t oset;
-
-    if (!setconfig()) {
-       syslog(LOG_ERR, "%s: %m", CONFIG);
-       return;
-    }
-    for (sep = servtab; sep; sep = sep->se_next)
-       sep->se_checked = 0;
-    while (cp = getconfigent()) {
-#if 0
-       /* fix a bug on rt */
-       if (cp->se_service == 0 || *cp->se_service == '\0')
-           break;
-#endif /* 0 */
-       for (sep = servtab; sep; sep = sep->se_next)
-           if (strcmp(sep->se_service, cp->se_service) == 0
-               && strcmp(sep->se_proto, cp->se_proto) == 0)
-               break;
-       if (sep != 0) {
-           int i;
-
-           sigprocmask(SIG_BLOCK, &sigBlock, &oset);
-           if (cp->se_bi == 0)
-               sep->se_wait = cp->se_wait;
-#define SWAP(a, b) { char *c = a; a = b; b = c; }
-           if (cp->se_user)
-               SWAP(sep->se_user, cp->se_user);
-           if (cp->se_server)
-               SWAP(sep->se_server, cp->se_server);
-           for (i = 0; i < MAXARGV; i++)
-               SWAP(sep->se_argv[i], cp->se_argv[i]);
-           sigprocmask(SIG_SETMASK, &oset, (sigset_t *) 0);
-           freeconfig(cp);
-           if (debug)
-               print_service("REDO", sep);
-       } else {
-           sep = enter(cp);
-           if (debug)
-               print_service("ADD ", sep);
-       }
-       sep->se_checked = 1;
-       sp = getservbyname(sep->se_service, sep->se_proto);
-       if (sp == 0) {
-           syslog(LOG_ERR, "%s/%s: unknown service", sep->se_service,
-                  sep->se_proto);
-           continue;
-       }
-       if (sp->s_port != sep->se_ctrladdr.sin_port) {
-           sep->se_ctrladdr.sin_port = sp->s_port;
-           if (sep->se_fd != -1)
-               (void)close(sep->se_fd);
-           sep->se_fd = -1;
-       }
-       if (sep->se_fd == -1)
-           setup(sep);
-    }
-    endconfig();
-    /*
-     * Purge anything not looked at above.
-     */
-    sigprocmask(SIG_BLOCK, &sigBlock, &oset);
-    sepp = &servtab;
-    while (sep = *sepp) {
-       if (sep->se_checked) {
-           sepp = &sep->se_next;
-           continue;
-       }
-       *sepp = sep->se_next;
-       if (sep->se_fd != -1) {
-           FD_CLR(sep->se_fd, &allsock);
-           nsock--;
-           (void)close(sep->se_fd);
-       }
-       if (debug)
-           print_service("FREE", sep);
-       freeconfig(sep);
-       free((char *)sep);
-    }
-    sigprocmask(SIG_SETMASK, &oset, (sigset_t *) 0);
-}
-
-void
-retry()
-{
-    register struct servtab *sep;
-
-    timingout = 0;
-    for (sep = servtab; sep; sep = sep->se_next)
-       if (sep->se_fd == -1)
-           setup(sep);
-}
-
-setup(sep)
-     register struct servtab *sep;
-{
-    int on = 1;
-
-    if ((sep->se_fd = socket(AF_INET, sep->se_socktype, 0)) < 0) {
-       syslog(LOG_ERR, "%s/%s: socket: %m", sep->se_service, sep->se_proto);
-       return;
-    }
-#define        turnon(fd, opt) \
-setsockopt(fd, SOL_SOCKET, opt, (char *)&on, sizeof (on))
-    if (strcmp(sep->se_proto, "tcp") == 0 && (options & SO_DEBUG)
-       && turnon(sep->se_fd, SO_DEBUG) < 0)
-       syslog(LOG_ERR, "setsockopt (SO_DEBUG): %m");
-    if (turnon(sep->se_fd, SO_REUSEADDR) < 0)
-       syslog(LOG_ERR, "setsockopt (SO_REUSEADDR): %m");
-#undef turnon
-    if (bind
-       (sep->se_fd, (struct sockaddr *)&sep->se_ctrladdr,
-        sizeof(sep->se_ctrladdr)) < 0) {
-       syslog(LOG_ERR, "%s/%s: bind: %m", sep->se_service, sep->se_proto);
-       (void)close(sep->se_fd);
-       sep->se_fd = -1;
-       if (!timingout) {
-           timingout = 1;
-           alarm(RETRYTIME);
-       }
-       return;
-    }
-    if (sep->se_socktype == SOCK_STREAM)
-       listen(sep->se_fd, backlog);
-    FD_SET(sep->se_fd, &allsock);
-    nsock++;
-    if (sep->se_fd > maxsock)
-       maxsock = sep->se_fd;
-}
-
-struct servtab *
-enter(cp)
-     struct servtab *cp;
-{
-    register struct servtab *sep;
-    sigset_t oset;
-
-    sep = (struct servtab *)malloc(sizeof(*sep));
-    if (sep == NULL) {
-       syslog(LOG_ERR, "Out of memory.");
-       exit(-1);
-    }
-    *sep = *cp;
-    sep->se_fd = -1;
-    sigprocmask(SIG_BLOCK, &sigBlock, &oset);
-    sep->se_next = servtab;
-    servtab = sep;
-    sigprocmask(SIG_SETMASK, &oset, (sigset_t *) 0);
-    return (sep);
-}
-
-FILE *fconfig = NULL;
-struct servtab serv;
-char line[256];
-char *skip(), *nextline();
-
-setconfig()
-{
-
-    if (fconfig != NULL) {
-       fseek(fconfig, 0L, L_SET);
-       return (1);
-    }
-    fconfig = fopen(CONFIG, "r");
-    return (fconfig != NULL);
-}
-
-endconfig()
-{
-    if (fconfig) {
-       (void)fclose(fconfig);
-       fconfig = NULL;
-    }
-}
-
-struct servtab *
-getconfigent()
-{
-    register struct servtab *sep = &serv;
-    int argc;
-    char *cp, *arg, *copyofstr();
-
-  more:
-    /* modified to skip blank lines... */
-    while ((cp = nextline(fconfig)) && (*cp == '#' || (strlen(cp) < 2)));
-    if (cp == NULL)
-       return (NULL);
-    sep->se_service = copyofstr(skip(&cp));
-    arg = skip(&cp);
-    if (strcmp(arg, "stream") == 0)
-       sep->se_socktype = SOCK_STREAM;
-    else if (strcmp(arg, "dgram") == 0)
-       sep->se_socktype = SOCK_DGRAM;
-    else if (strcmp(arg, "rdm") == 0)
-       sep->se_socktype = SOCK_RDM;
-    else if (strcmp(arg, "seqpacket") == 0)
-       sep->se_socktype = SOCK_SEQPACKET;
-    else if (strcmp(arg, "raw") == 0)
-       sep->se_socktype = SOCK_RAW;
-    else
-       sep->se_socktype = -1;
-    sep->se_proto = copyofstr(skip(&cp));
-    arg = skip(&cp);
-    sep->se_wait = strcmp(arg, "wait") == 0;
-    sep->se_user = copyofstr(skip(&cp));
-    sep->se_server = copyofstr(skip(&cp));
-    if (strcmp(sep->se_server, "internal") == 0) {
-       register struct biltin *bi;
-
-       for (bi = biltins; bi->bi_service; bi++)
-           if (bi->bi_socktype == sep->se_socktype
-               && strcmp(bi->bi_service, sep->se_service) == 0)
-               break;
-       if (bi->bi_service == 0) {
-           syslog(LOG_ERR, "internal service %s unknown\n", sep->se_service);
-           goto more;
-       }
-       sep->se_bi = bi;
-       sep->se_wait = bi->bi_wait;
-    } else
-       sep->se_bi = NULL;
-    argc = 0;
-    for (arg = skip(&cp); cp; arg = skip(&cp))
-       if (argc < MAXARGV)
-           sep->se_argv[argc++] = copyofstr(arg);
-    while (argc <= MAXARGV)
-       sep->se_argv[argc++] = NULL;
-    return (sep);
-}
-
-freeconfig(cp)
-     register struct servtab *cp;
-{
-    int i;
-
-    if (cp->se_service)
-       free(cp->se_service);
-    if (cp->se_proto)
-       free(cp->se_proto);
-    if (cp->se_user)
-       free(cp->se_user);
-    if (cp->se_server)
-       free(cp->se_server);
-    for (i = 0; i < MAXARGV; i++)
-       if (cp->se_argv[i])
-           free(cp->se_argv[i]);
-}
-
-char *
-skip(cpp)
-     char **cpp;
-{
-    register char *cp = *cpp;
-    char *start;
-
-  again:
-    while (*cp == ' ' || *cp == '\t')
-       cp++;
-    if (*cp == '\0') {
-       char c;
-
-       c = getc(fconfig);
-       (void)ungetc(c, fconfig);
-       if (c == ' ' || c == '\t')
-           if (cp = nextline(fconfig))
-               goto again;
-       *cpp = NULL;
-       return (NULL);
-    }
-    start = cp;
-    while (*cp && *cp != ' ' && *cp != '\t')
-       cp++;
-    if (*cp != '\0')
-       *cp++ = '\0';
-    *cpp = cp;
-    return (start);
-}
-
-char *
-nextline(fd)
-     FILE *fd;
-{
-    char *cp;
-
-    if (fgets(line, sizeof(line), fd) == NULL)
-       return (NULL);
-    cp = strchr(line, '\n');
-    if (cp)
-       *cp = '\0';
-    return (line);
-}
-
-char *
-copyofstr(cp)
-     const char *cp;
-{
-    char *new;
-
-    if (cp == NULL)
-       cp = "";
-    new = malloc((unsigned)(strlen(cp) + 1));
-    if (new == NULL) {
-       syslog(LOG_ERR, "Out of memory.");
-       exit(-1);
-    }
-    (void)strcpy(new, cp);
-    return (new);
-}
-
-setproctitle(a, s)
-     char *a;
-     int s;
-{
-    int size;
-    register char *cp;
-    struct sockaddr_in sin;
-    char buf[80];
-
-    cp = Argv[0];
-    size = sizeof(sin);
-    if (getpeername(s, (struct sockaddr *)&sin, &size) == 0)
-       (void)sprintf(buf, "-%s [%s]", a, inet_ntoa(sin.sin_addr));
-    else
-       (void)sprintf(buf, "-%s", a);
-    strncpy(cp, buf, LastArg - cp);
-    cp += strlen(cp);
-    while (cp < LastArg)
-       *cp++ = ' ';
-}
-
-/*
- * Internet services provided internally by inetd:
- */
-
-/* ARGSUSED */
-echo_stream(s, sep)            /* Echo service -- echo data back */
-     int s;
-     struct servtab *sep;
-{
-    char buffer[BUFSIZ];
-    int i;
-
-    setproctitle(sep->se_service, s);
-    while ((i = read(s, buffer, sizeof(buffer))) > 0
-          && write(s, buffer, i) > 0);
-    exit(0);
-}
-
-/* ARGSUSED */
-echo_dg(s, sep)                        /* Echo service -- echo data back */
-     int s;
-     struct servtab *sep;
-{
-    char buffer[BUFSIZ];
-    int i, size;
-    struct sockaddr sa;
-
-    size = sizeof(sa);
-    if ((i = recvfrom(s, buffer, sizeof(buffer), 0, &sa, &size)) < 0)
-       return;
-    (void)sendto(s, buffer, i, 0, &sa, sizeof(sa));
-}
-
-/* ARGSUSED */
-discard_stream(s, sep)         /* Discard service -- ignore data */
-     int s;
-     struct servtab *sep;
-{
-    char buffer[BUFSIZ];
-
-    setproctitle(sep->se_service, s);
-    while (1) {
-       while (read(s, buffer, sizeof(buffer)) > 0);
-       if (errno != EINTR)
-           break;
-    }
-    exit(0);
-}
-
-/* ARGSUSED */
-discard_dg(s, sep)             /* Discard service -- ignore data */
-     int s;
-     struct servtab *sep;
-{
-    char buffer[BUFSIZ];
-
-    (void)read(s, buffer, sizeof(buffer));
-}
-
-#define LINESIZ 72
-char ring[128];
-char *endring;
-
-initring()
-{
-    register int i;
-
-    endring = ring;
-
-    for (i = 0; i <= 128; ++i)
-       if (isprint(i))
-           *endring++ = i;
-}
-
-/* ARGSUSED */
-chargen_stream(s, sep)         /* Character generator */
-     int s;
-     struct servtab *sep;
-{
-    register char *rs;
-    int len;
-    char text[LINESIZ + 2];
-
-    setproctitle(sep->se_service, s);
-
-    if (!endring) {
-       initring();
-       rs = ring;
-    }
-
-    text[LINESIZ] = '\r';
-    text[LINESIZ + 1] = '\n';
-    for (rs = ring;;) {
-       if ((len = endring - rs) >= LINESIZ)
-           memcpy(text, rs, LINESIZ);
-       else {
-           memcpy(text, rs, len);
-           memcpy(text + len, ring, LINESIZ - len);
-       }
-       if (++rs == endring)
-           rs = ring;
-       if (write(s, text, sizeof(text)) != sizeof(text))
-           break;
-    }
-    exit(0);
-}
-
-/* ARGSUSED */
-chargen_dg(s, sep)             /* Character generator */
-     int s;
-     struct servtab *sep;
-{
-    struct sockaddr sa;
-    static char *rs;
-    int len, size;
-    char text[LINESIZ + 2];
-
-    if (endring == 0) {
-       initring();
-       rs = ring;
-    }
-
-    size = sizeof(sa);
-    if (recvfrom(s, text, sizeof(text), 0, &sa, &size) < 0)
-       return;
-
-    if ((len = endring - rs) >= LINESIZ)
-       memcpy(text, rs, LINESIZ);
-    else {
-       memcpy(text, rs, len);
-       memcpy(text + len, ring, LINESIZ - len);
-    }
-    if (++rs == endring)
-       rs = ring;
-    text[LINESIZ] = '\r';
-    text[LINESIZ + 1] = '\n';
-    (void)sendto(s, text, sizeof(text), 0, &sa, sizeof(sa));
-}
-
-/*
- * Return a machine readable date and time, in the form of the
- * number of seconds since midnight, Jan 1, 1900.  Since gettimeofday
- * returns the number of seconds since midnight, Jan 1, 1970,
- * we must add 2208988800 seconds to this figure to make up for
- * some seventy years Bell Labs was asleep.
- */
-
-afs_int32
-machtime()
-{
-    struct timeval tv;
-
-    if (gettimeofday(&tv, NULL) < 0) {
-       fprintf(stderr, "Unable to get time of day\n");
-       return (0L);
-    }
-    return (htonl((afs_int32) tv.tv_sec + 2208988800U));
-}
-
-/* ARGSUSED */
-machtime_stream(s, sep)
-     int s;
-     struct servtab *sep;
-{
-    afs_int32 result;
-
-    result = machtime();
-    (void)write(s, (char *)&result, sizeof(result));
-}
-
-/* ARGSUSED */
-machtime_dg(s, sep)
-     int s;
-     struct servtab *sep;
-{
-    afs_int32 result;
-    struct sockaddr sa;
-    int size;
-
-    size = sizeof(sa);
-    if (recvfrom(s, (char *)&result, sizeof(result), 0, &sa, &size) < 0)
-       return;
-    result = machtime();
-    (void)sendto(s, (char *)&result, sizeof(result), 0, &sa, sizeof(sa));
-}
-
-/* ARGSUSED */
-daytime_stream(s, sep)         /* Return human-readable time of day */
-     int s;
-     struct servtab *sep;
-{
-    char buffer[256];
-    time_t clock;
-
-    clock = time((time_t *) 0);
-
-    (void)sprintf(buffer, "%.24s\r\n", ctime(&clock));
-    (void)write(s, buffer, strlen(buffer));
-}
-
-/* ARGSUSED */
-daytime_dg(s, sep)             /* Return human-readable time of day */
-     int s;
-     struct servtab *sep;
-{
-    char buffer[256];
-    time_t clock;
-    struct sockaddr sa;
-    int size;
-
-    clock = time((time_t *) 0);
-
-    size = sizeof(sa);
-    if (recvfrom(s, buffer, sizeof(buffer), 0, &sa, &size) < 0)
-       return;
-    (void)sprintf(buffer, "%.24s\r\n", ctime(&clock));
-    (void)sendto(s, buffer, strlen(buffer), 0, &sa, sizeof(sa));
-}
-
-/*
- * print_service:
- *     Dump relevant information to stderr
- */
-print_service(action, sep)
-     char *action;
-     struct servtab *sep;
-{
-    fprintf(stderr,
-           "%s: %s proto=%s, wait=%d, user=%s builtin=%x server=%s\n",
-           action, sep->se_service, sep->se_proto, sep->se_wait,
-           sep->se_user, (int)sep->se_bi, sep->se_server);
-}
-
-/*
- * Copyright 2000, International Business Machines Corporation and others.
- * All Rights Reserved.
- * 
- * This software has been released under the terms of the IBM Public
- * License.  For details, see the LICENSE file in the top-level source
- * directory or online at http://www.openafs.org/dl/license10.html
- */
-
-/*
- * This program is a front-end for the various remote access programs
- * (e.g. rsh, rcp, rlogin, ftp) to allow for weak remote authentication.
- * It will be used by a call to a well-known restricted tcp port;  if
- * there is a service on that port, we will attempt authentication.
- *
- * Note, this only affects the Kerberos portion of the authentication;
- * the program still requires its existing authentication (although it
- * seems reasonable to change this in the future.)
- *
- * The advantage to this scheme (rather than modifying each program to
- * incorporate this authentication scheme) is it allows us to modify
- * the authentication mechanism without requiring additonal code
- * changes to the other programs.
- *
- * Current format of authentication packet:
- *
- *   (1) User;
- *   (2) Service;
- *   (3) Token length (null terminated);
- *   (4) Token (not null terminated).
- *
- * The code to add/delete to the AFS ticket cache is taken from the
- * authentication library.
- */
-
-/*
- * routine to do the actual authentication.  At this time, it is
- * very simple -- the remote end passes a token length and a token.
- *
- * This routine returns the name of the requested service.
- */
-
-#define gettime(tl) do { struct timezone tzp; struct timeval tv; \
-                         gettimeofday(&tv,&tzp); tl = tv.tv_sec; } while(0)
-#define RAUTH_TOKENLIFE (60 * 60 * 2)  /* 2 hours */
-
-#define        NOPAG   0xffffffff
-int
-get_pag_from_groups(g0, g1)
-     afs_uint32 g0, g1;
-{
-    afs_uint32 h, l, result;
-
-    g0 -= 0x3f00;
-    g1 -= 0x3f00;
-    if (g0 < 0xc000 && g1 < 0xc000) {
-       l = ((g0 & 0x3fff) << 14) | (g1 & 0x3fff);
-       h = (g0 >> 14);
-       h = (g1 >> 14) + h + h + h;
-       result = ((h << 28) | l);
-       /* Additional testing */
-       if (((result >> 24) & 0xff) == 'A')
-           return result;
-       else
-           return NOPAG;
-    }
-    return NOPAG;
-}
-
-auth_stream(s, sepent)
-     int s;
-     struct servtab *sepent;
-{
-    char service[100], remoteName[64];
-    struct sockaddr_in from;
-    int fromlen;
-    int code;
-    struct afsconf_dir *tdir;
-    struct ktc_principal tserver, tclient;
-    struct ktc_token token;
-    register struct servtab *sep;
-
-    /*
-     * First, obtain information on remote end of connection.
-     */
-    if (debug)
-       fprintf(stderr, "auth_stream: entered\n");
-#ifndef        AFS_SUN5_ENV
-    if (getpeername(s, &from, &fromlen) < 0) {
-       syslog(LOG_ERR, "getpeername failed");
-       if (debug)
-           fprintf(stderr, "auth_stream: getpeername failed\n");
-       exit(1);
-    }
-#endif
-    if (intoken(s, &token, service, remoteName) != 0) {
-       syslog(LOG_ERR, "invalid remote authentication");
-       if (debug)
-           fprintf(stderr, "auth_stream: invalid remote authentication\n");
-       exit(1);
-    }
-    /* lookup the name of the local cell */
-
-    if (debug)
-       fprintf(stderr, "auth_stream: look up local cell name\n");
-
-    tdir = afsconf_Open(AFSDIR_CLIENT_ETC_DIRPATH);
-    if (!tdir) {
-       syslog(LOG_NOTICE, "Can't open dir %s\n", AFSDIR_CLIENT_ETC_DIRPATH);
-       if (debug)
-           fprintf(stderr, "Can't open dir %s\n", AFSDIR_CLIENT_ETC_DIRPATH);
-       exit(1);
-    }
-    /* done with configuration stuff now */
-    afsconf_Close(tdir);
-    /* set ticket in local cell */
-    strcpy(tserver.cell, remoteName);
-    strcpy(tserver.name, "afs");
-    tclient = tserver;
-    /* now, set the token */
-
-    if (debug) {
-       fprintf(stderr,
-               "token information: service is %s\ntoken length is %d\n",
-               service, token.ticketLen);
-       fprintf(stderr, "token is %s\n", token.ticket);
-       fprintf(stderr, "cell name is %s\n", remoteName);
-    }
-    setpag();
-    afs_didsetpag = 1;
-    code = ktc_SetToken(&tserver, &token, &tclient, 0);
-    if (code) {
-       write(s, "0", 1);       /* say "no" to other side */
-       printf("Login incorrect.(%d)", code);
-       syslog(LOG_ERR, "Invalid token from %s", inet_ntoa(from.sin_addr));
-       exit(1);
-    }
-    write(s, "1", 1);          /* say "yes" to other side */
-
-    if (debug)
-       fprintf(stderr, "Finished authentication code\n");
-    for (sep = servtab; sep; sep = sep->se_next)
-       if (strcmp(sep->se_service, service) == 0) {
-           int dofork = (sep->se_bi == 0 || sep->se_bi->bi_fork);
-           int tmpint;
-
-           if (dofork) {
-               for (tmpint = getdtablesize(); --tmpint > 2;)
-                   if (tmpint != s)
-                       close(tmpint);
-           }
-           if (sep->se_bi) {
-               (*sep->se_bi->bi_fn) (s, sep);
-           } else {
-               register struct passwd *pwd;
-               struct passwd *getpwnam();
-               char buf[BUFSIZ];
-
-               if ((pwd = getpwnam(sep->se_user)) == NULL) {
-                   syslog(LOG_ERR, "getpwnam: %s: No such user",
-                          sep->se_user);
-                   if (sep->se_socktype != SOCK_STREAM)
-                       recv(0, buf, sizeof(buf), 0);
-                   abort();
-                   _exit(1);
-               }
-               if (pwd->pw_uid) {
-                   (void)setgid((gid_t) pwd->pw_gid);
-                   initgroups(pwd->pw_name, pwd->pw_gid);
-                   (void)setuid((uid_t) pwd->pw_uid);
-               }
-               dup2(s, 0);
-               close(s);
-               dup2(0, 1);
-               if (debug)
-                   fprintf(stderr, "going to exec program %s(errno = %d)\n",
-                           sep->se_server, errno);
-               errno = 0;
-               debug = 0;
-               dup2(0, 2);
-
-               if (!afs_didsetpag && (!strcmp(sep->se_service, "login")
-                                      || !strcmp(sep->se_service, "shell"))) {
-                   setpag();   /* to disassociate it from current group... */
-               }
-               execv(sep->se_server, sep->se_argv);
-               abort();
-               if (sep->se_socktype != SOCK_STREAM)
-                   recv(0, buf, sizeof(buf), 0);
-               syslog(LOG_ERR, "execv %s: %m", sep->se_server);
-               _exit(1);
-           }
-       }
-    fprintf(stderr, "service not available\n");
-    syslog(LOG_ERR, "auth_stream: invalid service requested %s\n", service);
-    exit(0);
-}
-
-
-auth_dg()
-{
-    syslog(LOG_NOTICE,
-          "datagram remote authentication requested, not supported");
-}
-
-/*
- * intoken:
- *
- * This routine accepts a token on the specified file handle;
- * The input format for a token is:
- *
- *   Field #    Contents         description
- *    (0)       Service Name     char[]
- *    (1)       Version #        unsigned integer (< 2^32)
- *    (2)       cellName         char[]
- *    (3)       startTime        unsigned afs_int32 (< 2^32)
- *    (4)       endTime          unsigned afs_int32 (< 2^32)
- *    (5)       sessionKey       char[8]
- *    (6)       kvno             short (< 2^16)
- *    (7)       ticketLen        unsigned integer (< 2^32)
- *    (8)       ticket           char[MAXKTCTICKETLEN]
- *
- * Each field is comma separated;  the last is variable length.  The
- * converted token is placed into the token structure pointed to by
- * the variable "token".
- */
-
-intoken(s, token, svc, cell)
-     int s;
-     struct ktc_token *token;
-     char *svc, *cell;
-{
-    char buf[1024], *bp;
-    int count;
-    unsigned index, version;
-
-    if (debug)
-       fprintf(stderr, "intoken: entered\n");
-
-    if ((count = recv(s, buf, sizeof buf, 0)) == -1) {
-       if (debug) {
-           fprintf(stderr, "error on fd %d\n", s);
-           perror("intoken recv");
-       }
-       return (-1);
-    }
-
-    /* (0) Service Name */
-    for (index = 0; index < count && buf[index] != ','; index++);
-
-    if (index == count) {
-       if (debug)
-           fprintf(stderr, "overran buffer while searching for svc name\n");
-       return (-1);
-    }
-
-    if (buf[index] != ',') {
-       if (debug)
-           fprintf(stderr,
-                   "Didn't stop on a comma, searching for svc name\n");
-       return (-1);
-    }
-
-    buf[index] = '\0';
-
-    strcpy(svc, buf);
-
-    /* (1) Version # */
-
-    bp = buf + index + 1;
-
-    for (; index < count && buf[index] != ','; index++);
-
-    if (index == count) {
-       if (debug)
-           fprintf(stderr, "overran buffer while searching for version #\n");
-       return (-1);
-    }
-
-    if (buf[index] != ',') {
-       if (debug)
-           fprintf(stderr,
-                   "Didn't stop on a comma, searching for version #\n");
-       return (-1);
-    }
-
-    buf[index] = '\0';
-
-    sscanf(bp, "%u", &version);
-
-    if (version > 2) {
-       if (debug)
-           fprintf(stderr, "Incompatible (newer) version encountered: %d\n",
-                   version);
-       return (-1);
-    }
-
-    if (version > 1) {
-       /* we didn't include cell name in prior versions */
-       bp = buf + index + 1;
-
-       for (index = 0; index < count && buf[index] != ','; index++);
-
-       if (index == count) {
-           if (debug)
-               fprintf(stderr, "overran buffer while searching for cell\n");
-           return (-1);
-       }
-
-       if (buf[index] != ',') {
-           if (debug)
-               fprintf(stderr,
-                       "Didn't stop on a comma, searching for cell\n");
-           return (-1);
-       }
-       buf[index] = '\0';
-       strcpy(cell, bp);
-    }
-
-    /* (2) startTime */
-
-    bp = buf + index + 1;
-
-    for (; index < count && buf[index] != ','; index++);
-
-    if (index == count) {
-       if (debug)
-           fprintf(stderr,
-                   "overran buffer while searching for startTime #\n");
-       exit(1);
-    }
-
-    if (buf[index] != ',') {
-       if (debug)
-           fprintf(stderr,
-                   "Didn't stop on a comma, searching for startTime #\n");
-       return (-1);
-    }
-
-    buf[index] = '\0';
-
-    sscanf(bp, "%u", &token->startTime);
-
-    /* (3) endTime */
-
-    bp = buf + index + 1;
-
-    for (; index < count && buf[index] != ','; index++);
-
-    if (index == count) {
-       if (debug)
-           fprintf(stderr, "overran buffer while searching for endTime #\n");
-       return (-1);
-    }
-
-    if (buf[index] != ',') {
-       if (debug)
-           fprintf(stderr,
-                   "Didn't stop on a comma, searching for endTime #\n");
-       return (-1);
-    }
-
-    buf[index] = '\0';
-
-    sscanf(bp, "%u", &token->endTime);
-
-    /* (4) sessionKey */
-
-    bp = buf + index + 1;
-    memcpy(&token->sessionKey, bp, 8);
-
-    /* (5) kvno */
-
-    bp += 8;
-    for (index += 9; index < count && buf[index] != ','; index++);
-
-    if (index == count) {
-       if (debug)
-           fprintf(stderr, "overran buffer while searching for kvno\n");
-       return (-1);
-    }
-
-    if (buf[index] != ',') {
-       if (debug)
-           fprintf(stderr, "Didn't stop on a comma, searching for kvno\n");
-       return (-1);
-    }
-
-    buf[index] = '\0';
-
-    /* kvno is actually a short, so insist that it scan a short */
-
-    sscanf(bp, "%hu", &token->kvno);
-
-    /* (6) ticketLen */
-
-    bp = buf + index + 1;
-
-    for (; index < count && buf[index] != ','; index++);
-
-    if (index == count) {
-       if (debug)
-           fprintf(stderr, "overran buffer while searching for ticketLen\n");
-       return (-1);
-    }
-
-    if (buf[index] != ',') {
-       if (debug)
-           fprintf(stderr,
-                   "Didn't stop on a comma, searching for ticketLen\n");
-       return (-1);
-    }
-
-    buf[index] = '\0';
-
-    sscanf(bp, "%u", &token->ticketLen);
-
-    /* (7) ticketLen */
-
-    bp = buf + index + 1;
-
-    if (index + token->ticketLen > count) {
-       if (debug)
-           fprintf(stderr, "overran buffer while copying ticket\n");
-       return (-1);
-    }
-
-    memcpy(token->ticket, bp, token->ticketLen);
-
-    return 0;
-}
-
-#ifdef AFS_HPUX_ENV
-resetsignals()
-{
-    struct sigaction act, oact;
-    int sign;
-
-    memset(&act, '\0', sizeof(act));
-    act.sa_handler = SIG_DFL;
-    for (sign = 1; sign < NSIG; sign++)
-       sigaction(sign, &act, &oact);
-}
-#endif
diff --git a/src/inetd/inetd.conf b/src/inetd/inetd.conf
deleted file mode 100644 (file)
index 6672dd9..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# AFS version of Internet server configuration database
-#
-ta-rauth stream        tcp     nowait  root    internal                ta-rauth
-shell   stream tcp     nowait  root    /usr/sbin/rshd          rshd
-login   stream tcp     nowait  root    /usr/sbin/rlogind.afs   rlogind.afs
diff --git a/src/inetd/inetd.conf.dux40 b/src/inetd/inetd.conf.dux40
deleted file mode 100644 (file)
index 010be85..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# AFS version of Internet server configuration database
-#
-# The "shell" line should be commented out in the vendor inetd.conf.
-#
-ta-rauth       stream  tcp     nowait  root    internal        ta-rauth
-shell          stream  tcp     nowait  root    /usr/sbin/rshd  rshd
diff --git a/src/inetd/inetd.conf.sgi b/src/inetd/inetd.conf.sgi
deleted file mode 100644 (file)
index 292a87f..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# AFS version of Internet server configuration database
-#
-shell   stream tcp     nowait  root    /usr/etc/rshd           rshd
-login   stream tcp     nowait  root    /usr/etc/rlogind.afs    rlogind.afs
-ta-rauth stream        tcp     nowait  root    internal                ta-rauth
diff --git a/src/inetd/inetd.conf.solaris b/src/inetd/inetd.conf.solaris
deleted file mode 100644 (file)
index 61063ba..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# AFS version of Internet server configuration database
-#
-ta-rauth stream        tcp     nowait  root    internal                ta-rauth
-shell   stream tcp     nowait  root    /usr/sbin/in.rshd       in.rshd
-login   stream tcp     nowait  root    /usr/sbin/in.rlogind    in.rlogind
diff --git a/src/inetd/setenv.c b/src/inetd/setenv.c
deleted file mode 100644 (file)
index b1c3604..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 1987 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#include <afsconfig.h>
-#include <afs/param.h>
-
-RCSID
-    ("$Header$");
-
-#include <sys/types.h>
-#include <stdio.h>
-
-extern char *malloc(), *realloc(), *_findenv();
-/*
- * setenv --
- *     Set the value of the environmental variable "name" to be
- *     "value".  If rewrite is set, replace any current value.
- */
-setenv(name, value, rewrite)
-     register char *name, *value;
-     int rewrite;
-{
-    extern char **environ;
-    static int alloced;                /* if allocated space before */
-    register char *C;
-    int l_value, offset;
-
-    if (*value == '=')         /* no `=' in value */
-       ++value;
-    l_value = strlen(value);
-    if ((C = _findenv(name, &offset))) {       /* find if already exists */
-       if (!rewrite)
-           return (0);
-       if (strlen(C) >= l_value) {     /* old larger; copy over */
-           while (*C++ = *value++);
-           return (0);
-       }
-    } else {                   /* create new slot */
-       register int cnt;
-       register char **P;
-
-       for (P = environ, cnt = 0; *P; ++P, ++cnt);
-       if (alloced) {          /* just increase size */
-           environ =
-               (char **)realloc((char *)environ,
-                                (u_int) (sizeof(char *) * (cnt + 2)));
-           if (!environ)
-               return (-1);
-       } else {                /* get new space */
-           alloced = 1;        /* copy old entries into it */
-           P = (char **)malloc((u_int) (sizeof(char *) * (cnt + 2)));
-           if (!P)
-               return (-1);
-           memcpy(P, environ, cnt * sizeof(char *));
-           environ = P;
-       }
-       environ[cnt + 1] = NULL;
-       offset = cnt;
-    }
-    for (C = name; *C && *C != '='; ++C);      /* no `=' in name */
-    if (!(environ[offset] =    /* name + `=' + value */
-         malloc((u_int) ((int)(C - name) + l_value + 2))))
-       return (-1);
-    for (C = environ[offset]; (*C = *name++) && *C != '='; ++C);
-    for (*C++ = '='; *C++ = *value++;);
-    return (0);
-}
-
-/*
- * unsetenv(name) --
- *     Delete environmental variable "name".
- */
-void
-unsetenv(name)
-     char *name;
-{
-    extern char **environ;
-    register char **P;
-    int offset;
-
-    while (_findenv(name, &offset))    /* if set multiple times */
-       for (P = &environ[offset];; ++P)
-           if (!(*P = *(P + 1)))
-               break;
-}
diff --git a/src/inetd/ta-rauth.c b/src/inetd/ta-rauth.c
deleted file mode 100644 (file)
index 700c7da..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright 2000, International Business Machines Corporation and others.
- * All Rights Reserved.
- * 
- * This software has been released under the terms of the IBM Public
- * License.  For details, see the LICENSE file in the top-level source
- * directory or online at http://www.openafs.org/dl/license10.html
- */
-
-/*
- * This code is used for application programs who want to transfer a
- * token from the local system to the remote system.
- */
-#include <afsconfig.h>
-#include <afs/param.h>
-
-RCSID
-    ("$Header$");
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <sys/file.h>
-#include <sys/wait.h>
-#include <sys/time.h>
-
-#include <netinet/in.h>
-
-#include <afs/auth.h>
-#include <afs/cellconfig.h>
-
-#include <stdio.h>
-#include <ctype.h>
-#include <signal.h>
-#include <strings.h>
-#if defined(AIX)
-#include <sys/syslog.h>
-#else /* defined(AIX) */
-#include <syslog.h>
-#endif /* defined(AIX) */
-#include <errno.h>
-#include <pwd.h>
-#include <afs/afsutil.h>
-
-
-#ifndef RAUTH_PORT
-#define RAUTH_PORT (601)
-#endif
-
- /* ta_rauth provides a single entry point into the remote */
- /* authentication scheme.  This allows us to simply pass the service */
- /* name; this routine will in turn obtain whatever remote */
- /* authentication information necessary and will negotiate with the */
- /* remote connection.  There are three possible return codes: */
- /*  (0) There is no remote authentication system; continue without */
- /*      any authentication. */
- /*  (1) Remote authentication was negotiated successfully */
- /*  (-1) Remote authentication failed (but did exist) */
- /*  (-2) The call could not complete due to internal failure */
- /*  (-3) The remote connection failed */
- /* Note that raddr is in *network* byte order! */
-
-int ta_debug = 0;
-
-int
-ta_rauth(s, svc_name, raddr)
-     int s;
-     char *svc_name;
-     struct in_addr raddr;
-{
-    char localName[64];
-    int code;
-    struct afsconf_dir *tdir;
-    struct ktc_principal tserver;
-    struct ktc_token token;
-    struct sockaddr_in name;
-
-    /* extract the token */
-
-    tdir = afsconf_Open(AFSDIR_CLIENT_ETC_DIRPATH);
-    if (!tdir) {
-       if (ta_debug) {
-           syslog(LOG_ERR, "ta_rauth: afsconf_Open failed\n");
-       }
-       return (-2);
-    }
-    code = afsconf_GetLocalCell(tdir, localName, sizeof(localName));
-    if (code) {
-       if (ta_debug) {
-           syslog(LOG_ERR, "ta_rauth: afsconf_GetLocalCell failed\n");
-       }
-       return (-2);
-    }
-    afsconf_Close(tdir);
-
-    strcpy(tserver.cell, localName);
-    strcpy(tserver.name, "afs");
-
-    code = ktc_GetToken(&tserver, &token, sizeof(token), NULL);
-    if (code) {
-       syslog(LOG_WARNING, "ta_rauth: no tokens available");
-       return 0;               /* try port without authentication */
-    }
-
-    name.sin_family = AF_INET;
-    name.sin_port = htons(RAUTH_PORT);
-    name.sin_addr = raddr;
-    if (connect(s, (struct sockaddr *)&name, sizeof(name)) == -1) {
-       extern int errno;
-
-       if (ta_debug) {
-           syslog(LOG_ERR,
-                  "ta_rauth(%s): connect call to (%d:%d) failed=%d\n",
-                  svc_name, raddr.s_addr, htons(RAUTH_PORT), errno);
-           perror("socket");
-       }
-       switch (errno) {
-#ifdef AFS_AIX_ENV
-           /* On conn failure aix doesn't return any error! */
-       case 0:
-#endif
-       case ECONNREFUSED:
-           return 0;
-       case ETIMEDOUT:
-       case ENETUNREACH:
-           return -3;
-       default:
-           return -2;
-       }
-    }
-
-    if (outtoken(s, &token, svc_name, localName) == 0) {
-       char result;
-
-       if (read(s, &result, 1) != 1) {
-           syslog(LOG_ERR, "Invalid return from remote authenticator\n");
-           exit(1);
-       }
-       if (result == '0')      /* remote authentication denied */
-           return -1;
-       else                    /* remote authentication allowed */
-           return 1;
-    }
-
-    return (-2);
-}
-
-/*
- * outtoken:
- *
- * This routine writes a token on the specified file handle;
- * The output format for a token is:
- *
- *   Field #    Contents         description
- *    (0)       Service requested char[]
- *    (1)       Version #        unsigned integer (< 2^32)
- *    (2)       startTime        unsigned afs_int32 (< 2^32)
- *    (3)       endTime          unsigned afs_int32 (< 2^32)
- *    (4)       sessionKey       char[8]
- *    (5)       kvno             short (< 2^16)
- *    (6)       ticketLen        unsigned integer (< 2^32)
- *    (7)       ticket           char[MAXKTCTICKETLEN]
- *
- *  All fields are comma separated except (4) and (5) because (4) is fixed
- *  length; since field (7) is variable length, it is presumed to
- *  begin after the ',' and to be ticketLen afs_int32.
- */
-outtoken(s, token, svc, localName)
-     int s;
-     struct ktc_token *token;
-     char *svc, *localName;
-{
-    char buf[1024], *bp;
-    int count;
-
-    /* (0) - (3) */
-    sprintf(buf, "%s,%d,%s,%ld,%ld,", svc, 2, localName, token->startTime,
-           token->endTime);
-
-    /* (4) sessionKey */
-    bp = buf + strlen(buf);
-    memcpy(bp, &token->sessionKey, 8);
-    bp += 8;
-
-    /* (5) - (6) */
-    sprintf(bp, "%u,%u,", token->kvno, token->ticketLen);
-
-    /* (7) ticket */
-    bp += strlen(bp);
-    memcpy(bp, token->ticket, token->ticketLen);
-    bp += token->ticketLen;
-
-    if ((count = write(s, buf, (int)(bp - buf))) == -1) {
-       perror("outtoken write");
-       exit(1);
-    }
-    if (ta_debug) {
-       fprintf(stderr, "sent buffer %s\n", buf);
-    }
-    return 0;
-}
diff --git a/src/ntp/.cvsignore b/src/ntp/.cvsignore
deleted file mode 100644 (file)
index c6c769e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-AFS_component_version_number.c
-Makefile
diff --git a/src/ntp/Makefile.in b/src/ntp/Makefile.in
deleted file mode 100644 (file)
index 1c79033..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-# Copyright 2000, International Business Machines Corporation and others.
-# All Rights Reserved.
-# 
-# This software has been released under the terms of the IBM Public
-# License.  For details, see the LICENSE file in the top-level source
-# directory or online at http://www.openafs.org/dl/license10.html
-
-srcdir=@srcdir@
-include @TOP_OBJDIR@/src/config/Makefile.config
-
-
-INCPATH=-I${TOP_OBJDIR}/src/config -I${TOP_INCDIR}
-BINDIR=/usr/local/etc
-LINKDIR=/etc
-LIBS=${TOP_LIBDIR}/util.a
-
-VERS=3.4
-
-#CC=gcc -g -W -Wall
-#afs#CC=cc -g -W
-
-#afs#INSTALL= install -c
-
-#
-# FEATURES include:
-#      DEBUG     - include DEBUG code
-#      BROADCAST_NTP - experimental support for broadcast NTP
-#      XADJTIME2 - experimental support for second-order clock adjustment
-#                  system call.
-#      SETTICKADJ - attempt to modify kernel's `tickadj' variable at run time.
-#      REFCLOCK  - define if you have a reference clock attached to your
-#                  machine.  (untested by UMD)
-#      PSTI - define along with REFCLOCK if you have a PSTI clock attached
-#              that you'd like to use a a reference clock.
-#      XTAL=0 - for line freq clock, or
-#      XTAL=1   for crystal controlled clock (default)
-#      LOG_NTP=foo - to change the syslog facility.  You could specify
-#                  something like -DLOG_NTP=LOG_LOCAL3 to log into the
-#                  LOG_LOCAL3 syslog facility
-#      NOSWAP - allow use of plock() to prevent swapping
-#
-
-#FEATURES= -DBROADCAST_NTP -DSETTICKADJ -DDEBUG
-#FEATURES= -DSETTICKADJ -DDEBUG -DREFCLOCK -DPSTI
-#afs#FEATURES= -DSETTICKADJ -DDEBUG -DREFCLOCK
-#afs# # SETTICKADJ is set in ntpd.c on SUNs.
-FEATURES= -DDEBUG -DREFCLOCK
-
-# for afs
-DEFINES= -DGENERIC_UNS_BUG -DSUN_FLT_BUG
-
-# for 4.3 BSD
-#afs#DEFINES=
-
-# for Sun
-#DEFINES= -DSUN_FLT_BUG
-
-# for Ultrix 2.0/2.2
-# don't forget to fix the broken definition of inet_addr in netdb.h
-# it should be declared as a u_long not a in_addr  (the doc is wrong also)
-# VAX_COMPILER_FLT_BUG is defined for pcc which doesn't know how to 
-# convert an unsigned long into a float/double
-#DEFINES= -DVAX_COMPILER_FLT_BUG -DNOSWAP
-
-#
-# for a NeXT system, define these pre-processor symbols.
-#DEFINES=-DSUN_FLT_BUG -DGENERIC_UNS_BUG 
-
-CFLAGS= -O ${DEFINES} ${FEATURES} ${INCPATH} ${XCFLAGS}
-LDFLAGS= ${XLDFLAGS}
-#
-# Header files
-#
-HDRS=  ntp.h patchlevel.h
-
-# Source files
-#
-NTPDSRC= ntpd.c ntpsubs.c ntp_proto.c ntp_sock.c ntp_adjust.c read_local.c \
-       read_psti.c
-SRCS=  ntp.c ntpdc.c test.c ${NTPDSRC}
-
-# Object files
-#
-NTPDOBJ= ntpd.o ntpsubs.o ntp_proto.o ntp_sock.o ntp_adjust.o read_local.o \
-       read_psti.o
-OBJS=  ntp.o ntpdc.o test.o ${NTPDOBJ}
-
-
-DIST= README Makefile man ${SRCS} ${HDRS} ntp.conf test.c extract.pl stat.pl
-PROGS= ntp ntpd ntpdc ntest
-
-include ../config/Makefile.version
-
-ntp.o: AFS_component_version_number.c
-ntpd.o: AFS_component_version_number.c
-ntpdc.o: AFS_component_version_number.c
-read_psti.o: AFS_component_version_number.c
-
-#all:  ${PROGS} runntp
-#      -@./ntest
-
-ntp:   ntp.o ntpsubs.o
-       ${CC} ${LDFLAGS} -o ntp ntp.o ntpsubs.o ${LIBS} ${XLIBS} ${XLIBELFA}
-
-ntpd:  ${NTPDOBJ}
-       case ${SYS_NAME} in \
-               sgi_*) \
-                       ${CC} ${LDFLAGS} -o ntpd ${NTPDOBJ} ${LIBS} -lelf ;; \
-               *) \
-                       ${CC} ${LDFLAGS} -o ntpd ${NTPDOBJ} ${LIBS} ${XLIBS} ${XLIBELFA} ;; \
-       esac
-
-
-ntpdc: ntpdc.o
-       ${CC} ${LDFLAGS} -o ntpdc ntpdc.o ${LIBS} ${XLIBS} ${XLIBELFA}
-
-ntest: test.o ntpsubs.o
-       ${CC} ${LDFLAGS} -o ntest test.o ntpsubs.o ${LIBS} ${XLIBS} ${XLIBELFA}
-       ./ntest
-
-sock_test: ntp_sock.c AFS_component_version_number.o
-       ${CC} ${LDFLAGS} -DTEST -o sock_test ntp_sock.c ${LIBS} ${XLIBS} ${XLIBELFA}
-
-${OBJS}: ntp.h # Makefile
-ntpd.o:        patchlevel.h
-
-# for afs
-
-all: AFS_component_version_number.c ntest ntpd ntp ntpdc runntp
-
-AFSLIBS=${TOP_LIBDIR}/libauth.a ${TOP_LIBDIR}/libcom_err.a ${TOP_LIBDIR}/util.a
-
-runntp.o: runntp.c ${TOP_INCDIR}/afs/cellconfig.h AFS_component_version_number.c
-       ${CC} ${CFLAGS} -I${TOP_INCDIR} -c runntp.c ${AFSLIBS} ${XLIBS}
-
-runntp: runntp.o ${AFSLIBS}
-       ${CC} ${LDFLAGS} -o runntp runntp.o ${AFSLIBS} ${XLIBS}
-
-install:       ${DESTDIR}${afssrvlibexecdir}/ntpd ${DESTDIR}${afssrvsbindir}/ntpdc ${DESTDIR}${sbindir}/ntp ${DESTDIR}${sbindir}/ntpdc ${DESTDIR}${afssrvlibexecdir}/runntp
-
-#
-# If you don't want a symlink to the daemon, comment out the next line
-#      make ${MFLAGS} DESTDIR=${DESTDIR} install-link
-
-install-man:
-       cd man; $(MAKE) ${MFLAGS} DESTDIR=${DESTDIR} install
-
-install-link:
-       $(RM) -f ${BINDIR}/${LINKDIR}/ntpd
-       ln -s ${BINDIR}/ntpd ${DESTDIR}/${LINKDIR}/ntpd
-
-print:
-       enscript -2r -p - Makefile ${HDRS} ${SRCS} | qpr -q lps40
-
-clean:
-       @rm -f *.o *~ core ${PROGS} ntp.tar ntest sock_test AFS_component_version_number.c
-
-dist:  ntp.tar.Z
-       mv ntp.tar.Z /usr/ftp/pub/ntp.${VERS}/ntp.tar.Z
-
-test-dist:     ntp.tar.Z
-       mv ntp.tar.Z /usr/ftp/pub/ntp.${VERS}/ntp-test.tar.Z
-
-ntp.tar.Z:     ${DIST}
-       $(RM) -f ntp.tar ntp.tar.Z
-       tar cf ntp.tar ${DIST}
-       compress  ntp.tar
-
-
-depend:
-       mkdep $(CFLAGS) $(SRCS)
-
-${DEST}/root.server/usr/afs/bin/ntpd: ntpd
-       ${INSTALL} $? $@
-
-${DESTDIR}${afssrvlibexecdir}/ntpd: ntpd
-       ${INSTALL} $? $@
-
-
-${DEST}/root.server/usr/afs/bin/ntpdc: ntpdc
-       ${INSTALL} $? $@
-
-${DESTDIR}${afssrvsbindir}/ntpdc: ntpdc
-       ${INSTALL} $? $@
-
-
-${DEST}/etc/ntp: ntp
-       ${INSTALL} $? $@
-
-${DESTDIR}${sbindir}/ntp: ntp
-       ${INSTALL} $? $@
-
-
-${DEST}/etc/ntpdc: ntpdc
-       ${INSTALL} $? $@
-
-${DESTDIR}${sbindir}/ntpdc: ntpdc
-       ${INSTALL} $? $@
-
-
-${DEST}/root.server/usr/afs/bin/runntp: runntp
-       ${INSTALL} $? $@
-
-${DESTDIR}${afssrvlibexecdir}/runntp: runntp
-       ${INSTALL} $? $@
-
-
-dest:       ${DEST}/root.server/usr/afs/bin/ntpd ${DEST}/root.server/usr/afs/bin/ntpdc ${DEST}/etc/ntp ${DEST}/etc/ntpdc ${DEST}/root.server/usr/afs/bin/runntp
-
-# DO NOT DELETE THIS LINE -- mkdep uses it.
-# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
-# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/src/ntp/README b/src/ntp/README
deleted file mode 100644 (file)
index e2f632d..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-Copyright 2000, International Business Machines Corporation and others.
-All Rights Reserved.
-
-This software has been released under the terms of the IBM Public
-License.  For details, see the LICENSE file in the top-level source
-directory or online at http://www.openafs.org/dl/license10.html
-
-README for UNIX NTP release $Date$ $Revision$
-
-
-
-NTP (Network Time Protocol) Daemons
-
-       There are three programs in the NTP distribution:
-       ntp     -       simple query program used for single
-                       sample queries
-
-       ntpd    -       A daemon that sets up peers and responds
-                       to queries.  Ntpd does the clock trimming.
-
-       ntpdc   -       program to query an ntpd.  It was useful in
-                       checking the filters and cleaning the windows
-
-Installation:
-
-       1) Add an entry to /etc/services to define the ntp port.
-
-       ntp     123/udp         # network time protocol (exp)
-
-       2) Make a /etc/ntp.conf with the clocks you want to track.
-               Please refer to the RFC's in the man directory, the man
-               pages, and the clock.txt file to assist you in selecting
-               clocks to peer with.  The supplied ntp.conf is only a 
-               sample, and is not suitable for use.
-
-
-       3) Change the Makefile definitions to suit your environment.
-       4) make
-       5) make install
-       6) adb or remake kernel and change "tickadj"
-               Recommended values for tickadj on various machines:
-
-               VAX:    5
-               Sun3:   10
-               Sun4:   5
-               NeXT:   7
-
-               This step is optional; new algorithms will allow you to
-               get by (with reduced accuracy) with the system supplied
-               value of tickadj.  For better preformence, you should
-               change the value of tickadj.  This can be done by making
-               a new kernel or by compiling ntpd with SETTICKADJ defined,
-               and having ntpd set it to the value you specify.  This is
-               clearly ugly.
-
-       7) Fire up ntpd in /etc/rc.local
-
-History:
-5/17/89
-       Yet another preprocessor define for broken unsigned long to double
-       conversions.  Define GENERIC_UNS_BUG, and the unsigned long is shifted
-       right one bit and cast to an int before conversion to a double.  This
-       seems to work much better.
-
-       Preliminary support for NeXT systems.  Be sure to define both
-       GENERIC_UNS_BUG and SUN_FLT_BUG.  The default value of tickadj in the
-       kernel is too large so you'll have to adjust it by using the
-       -t option and compiling with SETTICKADJ.  I don't think you can use
-       gdb on the running /dev/mem image.   NOTE: don't even think of trying
-       to run this on the 0.8 release of the system software.  You will
-       utterly and absolutely hang you system.  Current testing is being 
-       done on the 0.9 release.  So far, there seems to be some weirdness in
-       the kernel which is attempting to sync to the clock to the internal
-       clock chip every so ofter.  So while it compiles and runs, it really
-       doesn't work very well on the NeXT machine.
-
-       Integration of the reference clock code
-       has been done.  To configure a reference clock, check the
-       ntpd manual page.
-
-5/3/89
-       The changes to the ntp_proto.c module for clockhopper suppression have
-       been tweaked once more, ever so slightly to conform with the 21 April
-       1989 draft of the NTP spec.  We won't switch peers if the current 
-       peer makes it into the final selection list, unless the first peer on
-       the selection list is of a higher stratum than the current peer.
-
-       The ntpd.c/hourly() function now saves the value of the drift
-       compensation register to a file (/etc/ntp.drift by default).  In fact,
-       the last 5 hourly samples are written to the file, as well as how
-       many hours the ntpd process has been running.  Ntpd will also attempt
-       to intialize the value of the drift compensation register from this
-       file when it is started up.  The hourly stats: log message has been
-       augmented to log additional information.
-
-4/8/89
-       Changes to the ntp_proto.c module to supress peer switching when the
-       dispersion between the newly selected peer and the currently selected
-       peer is "small."  A new configuration option, NOSWAP, has been added
-       for use on Ultrix systems which can lock the ntpd process in memory;
-       very desirable for diskless workstations.  peer.reach is now not
-       cleared in the clear() procedure.  The stat.pl perl script can now
-       handle syslog records which span a month boundary correctly.  We're
-       getting real close to a "blessed" version now.
-
-3/29/89
-       A few fixes, clean up of unused #defines in ntp.h.  The receive()
-       procedure is now table driven per the 26 March 1989 draft of the
-       spec.  If no terrible errors or bugs are found, this version
-       will probably be packaged as a "blessed" working version before
-       the next stage of major hacking.
-
-3/22/89
-       A bunch of minor fixes here an there.  The RCS header is being
-       updated so that patches that are generated will apply; apparently
-       the new version of RCS puts the Locked: status in the Header
-
-       Minor fiddles to ntpd/ntpdc to eliminate some byte-sex dependencies.
-       Changs to ntp_proto.c to fix an mis-interpretation in the packet
-       procedure.
-
-       The ntp program now uses connected UDP sockets to pick up ICMP
-       generated errors.
-
-       ntpdc will now select a value of tickadj if you don't specify one.
-
-3/17/89
-       Another sort-of-working ntpd.  There might still be something weird
-       with the logical clock code; seems to be a little weird.  Would
-       really like your comments on this version.
-
-       Note that the a version that supports the Precision Time WWV clock
-       can be had via anonymous FTP from BITSY.MIT.EDU.  The version there
-       might lag the University of Maryland version.
-
-3/12/89
-       A snapshot of a more-or-less working ntpd.  There's been a few more
-       bug fixes and changes due to the NTP spec being revised.  A few more
-       changes have been made to the latest NTP spec (11 March 1989 version)
-       which have not yet been applied.
-
-       A few problems areas:  I currently observe some peer flapping between
-       two clock which are both of very good quality (UMD1.UMD.EDU and
-       TRUECHIMER.CSO.UIUC.EDU).  Not quite sure why this is happening yet
-       or if it is really a problem.
-
-       There are quite a few "Dropping peer <foo>" messages in the syslog.
-       Most of these are due to lower statum "transient" clocks peering with
-       the local daemon.  Need to find a way to supress the messages in
-       the transmit procedure when we've got no intention of keeping a
-       peer structure around for them.
-
-       There are changes in the works to improve the reliability of the 
-       ntpdc program.  The ntpd hooks are there now, and some work remains
-       in the ntpdc program.
-
-
-3/7/89
-       *** THIS IS A TEST RELEASE ***
-
-       This version contain most of the new algorithms from the 6 March 1989
-       draft of the NTP specification.  It still operates, however, as 
-       Version 1, and does not support the authentication feature.
-
-       The stratum 1 WWV clock code from Doug Kingston has not been tested or
-       changed for this release.  I would really like someone to change the
-       interface to have the clock appear as just another peer.
-
-       Quite a bit if clean-up and cosmetic changes were made in almost all
-       of the modules.  Note that the ntest program which tests certain
-       arithmetic operations on you machine is automatically run by the
-       Makefile.  If it fail *for any reason*, stop right there and find
-       out why.  Until ntest works correctly, don't even bother with the
-       rest of the code.  Note that at least Ultrix has problems, and there
-       is a define option in the makefile to accomodate the broken Ultrix
-       pcc compiler.  Recent version of GNU CC are known to work correctly
-       on a VAX platform, and is in fact used for development.  It is not
-       necessary to use the GNU C compiler on you machine, however.
-
-       The logical clock code in ntp_adjust.c has been changed to be more
-       self-contained and independent from NTP proper.  It has the tickadj
-       round-off residual accumulating code, and attempts to implemenet the
-       newest version of the NTP logical clock code.  A large change here is
-       that once an clock update has been passed to the logical clock, it will
-       ignore further updated for 1<<CLOCK_UPDATE seconds.  Note that the
-       units for tick_adj have changed in this version.  Eventually, a
-       normalized version of this value will be written to a file for use
-       on subsequent invocations.
-
-       There has been no work in the area of supporting broadcast NTP.  A
-       bunch of bug fixes have been made to the ntp_proto.c module, including
-       a significant one in the code which selects the clock; the dispersion
-       computed before was incorrect and resulted in poor clock choices.  This
-       is probably the cause of having long "strings" of peers rather then 
-       all syncing to one clock.
-
-       The ntpd will now actually delete peer entries when the hosts "go 
-       away."  This will hopefully save some memory.  The peer list is now
-       doublely linked, so deletions can happen very efficiently.
-
-       There is still a weirdness in there when interoperating with very old
-       broken versions of ntpd.  It manifests itself with peers being expunged
-       and them coming back.
-
-       Please beat on this version and let me know what bugs you find.  I
-       want to make another release, this one "blessed" until the Version 2
-       one is ready.
-
-
-1/12/89
-       *** THIS IS A TEST RELEASE ***
-       There have been a bunch of bug fixes, and an attemtp to unify the
-       the debug output and logging.  There is still a problem with the
-       verbose version of ntpdc; the offset values are clearly bogus.
-
-       Danger: don't attempt to run ntpd on a NeXT machine.  It provokes
-       a bug in the OS which hangs the machine quite absolutely.
-
-       There is some support for a statrum 1 clock in some code provided by
-       Doug Kingston (dpk@morgan.com).  I'm not really sure that its the
-       ``right'' way to do it; I'd rather have the clock appear just like
-       another peer, and have it selected as a reference, just like you'd
-       select any other clock.  In fact, by doing it that way with some other
-       support, you could even have a seperate process take care of reading
-       the clock, and talking to the main process with some UNIX domain
-       sockets... Hmm..
-
-12/8/88
-       *** THIS IS A TEST RELEASE ***
-       Really.  We have tested this code on a VAX platform, but not much of
-       anything else.  I would like to hear back about any bugs, but you 
-       should not treat this as a 'release' version.
-
-       Very large number of changes and updates.  Files have been reorganized
-       with ntpd.c containing intialization and other very UNIX specific code,
-       while the new file ntp_proto.c contains the bulk of the NTP code.
-       This version of the UNIX NTP daemon was re-written and updated to
-       conform with the revised NTP specification.
-
-       For all of the mucking about with tickadj, you can now define 
-       SETTICKADJ in the Makefile, and specify the value of tickadj in 
-       /etc/ntp.conf.  The ntpd will attempt to update `tickadj' using 
-       /dev/kmem.  Yow!
-
-       If possible, ntpd will attempt to discover the value of your kernel's
-       `hz' variable, and set the value of `precison' automagically.  If 
-       `precision' is specified in /etc/ntp.conf, it will override any 
-       automatic selection.
-
-       Only hosts which are configured or mentioned in /etc/ntp.conf on a
-       `peer', `server' or `passive' statement are elligable to be
-       synchronized to.  This solves the "ganging-up" problem, but is sorta
-       ugly.
-
-       The `peer' statement in /etc/ntp.conf works just as before; it sends
-       packets with MODE=SYMMETRIC-ACTIVE to the remote host.  The remote host
-       might synchronize to you if appropriate.  If reachability is lost,
-       polling will continue.
-
-       The new `server' statement in /etc/ntp.conf causes packets of MODE=
-       CLIENT to be sent to the specified host.  The remote host will *not*
-       synchronize to you under any circumstances.  If reachability is lost,
-       polling will continue.
-
-       The new `passive' statement in /etc/ntp.conf causes packets of
-       MODE=SYMMETRIC-PASSIVE to be sent to the remote host *when the local
-       host is polled*.  If reachability is lost, then polling will cease
-       until the remote host begins to the local host again.
-
-       Note conditional compilation define in the makefile for
-       VAX_COMPILER_FLT_BUG for old 4.2 and Ultrix 2.0/2.2/3.0 pcc compilers.
-       There is a bug in the code generated to convert an unsigned long to a 
-       double.  Previously, this code was always present, but it is now 
-       #ifdef'd.  The 4.3BSD-tahoe and GNU CC (1.30 and 1.31 at least) are
-       known to work correctly.  If you don't know if your compiler 
-       performs this conversion correctly, try making and running the
-       `ntest' program, and see if test3 passes or not.
-
-       The format of the data sent between ntpd and the ntpdc programs has
-       changed yet again.  It is likely to change again before the final
-       release of this version.  
-
-7/30/88
-       Added and updated manual entries contributed by Glenn Trewitt.
-               (trewitt@miasma.stanford.edu)
-7/27/88
-       Reorder peer list so configuted hosts are always first.  This
-       REALLY helps the faleticker code.
-
-       Changed ntpdc to have a larger RECV socket buffer. This fixes
-       the "only see 20 peers" problem. This is a side affect of using
-       UDP for the status return.
-
-6/20/88
-       Support for hosts with multiple interfaces.  Minor updates to
-       the ntpdc program; note that the format of the messages between
-       the ntpd and ntpdc programs is different in this version than the
-       last.  You should update both ntpd and ntpdc at the same time.
-
-       New file ``ntp_sock.c''.  Tested with Ultrix 2.4 field test, and 
-       4.3 BSD tahoe release.  Debug level can be adjusted by sending
-       SIGUSR1 to increase and SIGUSR2 to zero the debug level.
-
-5/17/88
-       Changed peer structure alloactor to stop allocating a perm
-       structure for non-peer relationships. This make the ntpdc
-       output a lot more understandable.
-       Installed faletick code.
-       Installed work around to bug in Ultrix C compiler.
-       The compiler has troubles converting unsigned longs to floats.
-       This caused a lot of off by 2 second problems.
-3/31/88
-       The world is ALL different now.  The NTP protocols have had
-       some major structural work.  This is the first rev that
-       attempts to meet NTP version 1 compliance.  There are a couple
-       of loose ends (faltickers code and clock slew rate) that
-       are not finished, but should be RSN.  This release is to
-       bridge the compatability with the old clock system.
-
-       CHANGES:
-       ntpsubs.c had a MAJOR bug in the tstamp routine.  Accuracy
-       should be much better now.
-
-       The ntp.conf file is much simpler.  List your precision
-       and peers, the rest is automagic.
-
-       The ntp/udp service mapping is now consitent.  No more hard
-       coded 123s. 
-
-       The math routines are more robust.  They now handle signed
-       conversion of longs and shorts.
-
-       The control structure of ntpd is radically different.  A peer
-       relation is NOT setup for clocks at a higher stratum.  This
-       reduces table clutter, but you lose the history of those
-       requesters.
-
-2/20/88
-       Removed the median filter and replaced it with a minimum
-       filter.  Experimentation by Dave Mills suggests this is
-       a better way to track network clocks.  Changed status field based
-       on updated RFC.
-
-12/29/87
-       Only believe samples were the round trip delay is positive.
-       I recommend HIGHLY that you change tickadj in /sys/conf/param.c
-       to equal 1 instead of 40.  This reduces the granularity of
-       clock slewing from 4ms/sec to .1ms/sec.  This should suffice
-       if your clock is less that 4.3 minutes per month. If this is
-       the case get a new clock, increase the value, or live with
-       periodic clock jumps due to setimeofday().  The basic problem is
-       that adjtime() slews only with "tickadj" granularity.  That's
-       argueably broken, but needs kernel mods to fix it.
-
-12/17/87
-       Added some of the changes from Greg Fowler and Ken Stone
-       of HP labs.  This adds "hpux" compatability.  Ken and Greg
-       also tighten up the "bestclock" determination so you
-       don't end up tracking yourself. (thanks again)
-
-       The Precision field in now correct, precision is the power
-       of 2 indication of internal clock tics.  (ex. 60-HZ = -6)
-       This is a constant for the machine and should be set in the
-       ntp.conf file.
-
-12/1/87
-       Massive cleanup in the daemon code.  There was a BIG problem
-       with "bestclock" peer calculation.  A clock of a lower type would
-       be tracked if the delay to that clock was lower than the delay
-       to the higher precision clock.  The peers listed in the ntp.conf
-       files are marked as PERM.  This causes a ntp gram to go to these
-       guys regardless of any recv activity. This eliminates the problem
-       of a peer being down and not talking ot him when he comes back
-       up because the activity indicator went to zero.  Using PERM
-       entries creates a fixed overhead, use it with caution.
-       There is the beginning of a second order filter that can be used
-       to adjust the kernel tick rate.  More on that when it's done.
-       The data structures have changed for queries.  Querying old
-       clocks will cause problems.  Note - the NTP protocol has NOT
-       changed, only the query hack.  The SET_THRESHOLD has been changed
-       to be more reasonable with the max slew rate of 4.3BSD.  This
-       will be relaxed when the second order stuff is working.
-
-5/29/87
-
-       All of the internal math is now done with doubles.  This removes
-a lot of the hair and cost.  On vaxen the double yields 54(5) bits of
-accuracy.  The NTP timestamps are 64 bits.  Converting to doubles
-will cause the loss of some bits on ost machines.  This is not bad
-since most machines don't have clocks that could track even the lower
-16 bits of the NTP timestamps.
-
-       NTP makes three choices on changing the local clock.
-       1) If the local clock apperars to be off by more than
-       WAYTOOBIG (1000.0) seconds, it refuses to do anything
-       but fill up you log.
-       2) If the local clock is off less than WAYTOOBIG but more
-       than SET_THRESHOLD (2.0) a settimeofday will be done.
-       3) If the clock is off less than SET_THRESHOLD an adjustime
-       is done.
-
-       Ntpd clears out the samples after every clock adjustment.
-       This helped to prevent the filter from overshouting based on old
-       data.
-===========================================================================
-Still cooking on the stove are:
-
-       modify adjtime - it won't allow small adjustments.
-               I may punt and put in a new adjtime that handles
-               the second order stuff.
-
-       making it handle broadcasted time like timed
-
-       man pages
diff --git a/src/ntp/mkntpconf.c b/src/ntp/mkntpconf.c
deleted file mode 100644 (file)
index d4629d5..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright 2000, International Business Machines Corporation and others.
- * All Rights Reserved.
- * 
- * This software has been released under the terms of the IBM Public
- * License.  For details, see the LICENSE file in the top-level source
- * directory or online at http://www.openafs.org/dl/license10.html
- */
-
-#include <afsconfig.h>
-#include <afs/param.h>
-
-RCSID
-    ("$Header$");
-
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <ctype.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <strings.h>
-#include <sysexits.h>
-
-#ifdef vax
-#define PRECISION      -7      /* HZ == 100 */
-#endif
-#ifdef sun
-#define PRECISION      -6      /* HZ == 50 */
-#endif
-#ifdef romp
-#define PRECISION      -6      /* HZ == 64 */
-#endif
-#ifdef multimax
-#define PRECISION      -3      /* HZ == 10 */
-#endif
-
-struct server {
-    char *s_name;
-    char *s_addr;
-};
-
-/*
- * primary servers
- */
-
-static struct server dcn5 = { "dcn5.udel.edu", "128.4.0.5" };
-static struct server wwvb = { "wwvb.isi.edu", "128.9.2.129" };
-static struct server sdsc = { "sdsc-fuzz.nsf.net", "192.12.207.1" };
-static struct server umd1 = { "umd1.umd.edu", "128.8.10.1" };
-
-/*
- * secondary servers
- */
-
-static struct server papaya = { "papaya.srv.cs.cmu.edu", "128.2.222.199" };
-static struct server guava = { "guava.srv.cs.cmu.edu", "128.2.250.187" };
-static struct server cluster1 =
-    { "cluster1.fs.andrew.cmu.edu", "128.2.249.123" };
-
-static char *name;
-
-static char *headers1[] = {
-    "",
-    "  DO NOT EDIT THIS FILE MANUALLY.  It is maintained by mkntpconf.",
-    "",
-    "          Local clock parameters",
-    "",
-    "  Precision of the local clock to the nearest power of 2",
-    "          ex.",
-    "                  60-HZ   = 2**-6",
-    "                  100-HZ  = 2**-7",
-    "                  1000-HZ = 2**-10",
-    0
-};
-
-static char *headers2[] = {
-    "",
-    "  Peers",
-    "",
-    0
-};
-
-extern char *mktemp();
-void peerline();
-
-
-main(ac, av)
-     int ac;
-     char **av;
-{
-    register char *p, **v;
-    register FILE *f, *g;
-    char hostname[MAXHOSTNAMELEN + 1];
-    char tempfn[MAXPATHLEN + 1], config[MAXPATHLEN + 1];
-    char line[BUFSIZ];
-    struct server serv;
-
-    name = (ac > 0) ? (ac--, *av++) : (ac = 0, "mkntpconf");
-    (void)strcpy(tempfn, name);
-    if ((p = strrchr(tempfn, '/')) == 0)
-       p = tempfn;
-    else
-       p += 1;
-    *p = 0;
-    (void)strcpy(config, tempfn);
-    (void)strcat(config, "ntp.conf");
-    (void)strcat(tempfn, "ntp.XXXXXX");
-    (void)mktemp(tempfn);
-    if (gethostname(hostname, MAXHOSTNAMELEN) == -1) {
-       perror("gethostname");
-       exit(EX_OSERR);
-    }
-    hostname[MAXHOSTNAMELEN] = 0;
-    for (p = hostname; *p; p++)
-       if (isupper(*p))
-           *p = tolower(*p);
-    if ((f = fopen(tempfn, "w")) == NULL) {
-       perror(tempfn);
-       exit(EX_OSERR);
-    }
-
-    for (v = headers1; *v; v++)
-       fprintf(f, "#%s\n", *v);
-    fprintf(f, "precision %d\n", PRECISION);
-    for (v = headers2; *v; v++)
-       fprintf(f, "#%s\n", *v);
-    if (strcmp(hostname, papaya.s_name) == 0
-       || strcmp(hostname, guava.s_name) == 0) {
-       if (strcmp(hostname, papaya.s_name) == 0) {
-           peerline(dcn5, f);
-           peerline(wwvb, f);
-       } else {
-           peerline(sdsc, f);
-           peerline(umd1, f);
-       }
-       peerline(papaya, f);
-       peerline(guava, f);
-       peerline(cluster1, f);
-    } else {
-       if ((p = strchr(hostname, '.')) != 0
-           && strcmp(p + 1, "srv.cs.cmu.edu") == 0) {
-           peerline(papaya, f);
-           peerline(guava, f);
-       }
-       serv.s_name = line;
-       serv.s_addr = 0;
-       if ((g = fopen("/etc/attributes", "r")) != NULL) {
-           while (fgets(line, sizeof(line), g) != NULL) {
-               if ((p = strchr(line, ':')) != 0)
-                   *p = 0;
-               if (strcmp(line, papaya.s_name) == 0
-                   || strcmp(line, guava.s_name) == 0)
-                   continue;
-               if ((p = strchr(line, '.')) == 0
-                   || strcmp(p + 1, "srv.cs.cmu.edu") != 0)
-                   continue;
-               peerline(serv, f);
-           }
-           (void)fclose(g);
-       }
-    }
-
-    (void)fclose(f);
-    if (rename(tempfn, config) == -1) {
-       perror("rename");
-       exit(EX_OSERR);
-    }
-    if (chmod(config, 0644) == -1) {
-       perror("chmod");
-       exit(EX_OSERR);
-    }
-    exit(EX_OK);
-}
-
-
-void
-peerline(s, f)
-     struct server s;
-     register FILE *f;
-{
-    register struct hostent *hp;
-
-    fprintf(f, "peer ");
-    if ((hp = gethostbyname(s.s_name)) != 0 && hp->h_addrtype == AF_INET)
-       fprintf(f, "%-15.15s # %s", inet_ntoa(*(struct in_addr *)hp->h_addr),
-               s.s_name);
-    else if (s.s_addr)
-       fprintf(f, "%-15.15s # %s", s.s_addr, s.s_name);
-    else
-       fprintf(f, "%s", s.s_name);
-    (void)fputc('\n', f);
-}
diff --git a/src/ntp/ntp.c b/src/ntp/ntp.c
deleted file mode 100644 (file)
index accf2bb..0000000
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * Copyright 2000, International Business Machines Corporation and others.
- * All Rights Reserved.
- * 
- * This software has been released under the terms of the IBM Public
- * License.  For details, see the LICENSE file in the top-level source
- * directory or online at http://www.openafs.org/dl/license10.html
- */
-
-/*
- * This program expects a list of host names.  It will send off a
- * network time protocol packet and print out the replies on the
- * terminal.
- * 
- * Example:
- *
- *  % ntp umd1.umd.edu
- *  Packet from: [128.8.10.1]
- *  Leap 0, version 1, mode Server, poll 6, precision -10 stratum 1 (WWVB)
- *  Synch Distance is 0000.1999  0.099991
- *  Synch Dispersion is 0000.0000  0.000000
- *  Reference Timestamp is a7bea6c3.88b40000 Tue Mar  7 14:06:43 1989
- *  Originate Timestamp is a7bea6d7.d7e6e652 Tue Mar  7 14:07:03 1989
- *  Receive Timestamp is   a7bea6d7.cf1a0000 Tue Mar  7 14:07:03 1989
- *  Transmit Timestamp is  a7bea6d8.0ccc0000 Tue Mar  7 14:07:04 1989
- *  Input Timestamp is     a7bea6d8.1a77e5ea Tue Mar  7 14:07:04 1989
- *  umd1: delay:0.019028 offset:-0.043890
- *  Tue Mar  7 14:07:04 1989
- *
- */
-
-#include <afsconfig.h>
-#include <afs/param.h>
-
-RCSID
-    ("$Header$");
-
-#include <stdio.h>
-#ifdef AFS_AIX32_ENV
-#include <signal.h>
-#endif
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/time.h>
-#include <sys/uio.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-
-#include <netinet/in.h>
-#include <netinet/in_systm.h>
-#include <netinet/ip.h>
-#include <netinet/udp.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <strings.h>
-
-#ifdef AFS_AIX32_ENV
-#include <sys/select.h>
-#endif
-
-#include <errno.h>
-#include "ntp.h"
-
-char *modename[8] = {
-    "Unspecified",
-    "Symmetric Active",
-    "Symmetric Passive",
-    "Client",
-    "Server",
-    "Broadcast",
-    "Reserved-1",
-    "Reserved-2"
-};
-
-#define RETRY_COUNT    2       /* number of times we want to retry */
-#define TIME_OUT        10     /* time to wait for reply, in secs */
-
-
-struct sockaddr_in sin = { AF_INET };
-struct sockaddr_in dst = { AF_INET };
-struct servent *sp;
-extern double ul_fixed_to_double(), s_fixed_to_double();
-extern int errno;
-int set, verbose, force;
-int debug;
-extern int optind;
-
-#include "AFS_component_version_number.c"
-
-main(argc, argv)
-     int argc;
-     char *argv[];
-{
-    struct hostent *hp;
-    struct in_addr clock_host;
-    struct l_fixedpt in_timestamp;
-    static struct ntpdata ntp_data;
-    struct ntpdata *pkt = &ntp_data;
-    struct timeval tp, timeout;
-    int host, n, retry, s;
-    fd_set readfds;
-    int dstlen = sizeof(dst);
-    double t1, t2, t3, t4, offset, delay;
-    char ref_clock[5];
-    time_t net_time;
-
-#ifdef AFS_AIX32_ENV
-    /*
-     * The following signal action for AIX is necessary so that in case of a 
-     * crash (i.e. core is generated) we can include the user's data section 
-     * in the core dump. Unfortunately, by default, only a partial core is
-     * generated which, in many cases, isn't too useful.
-     */
-    struct sigaction nsa;
-
-    sigemptyset(&nsa.sa_mask);
-    nsa.sa_handler = SIG_DFL;
-    nsa.sa_flags = SA_FULLDUMP;
-    sigaction(SIGSEGV, &nsa, NULL);
-#endif
-    ref_clock[4] = '\0';
-    timeout.tv_sec = TIME_OUT;
-    timeout.tv_usec = 0;
-    retry = RETRY_COUNT;
-
-    sp = getservbyname("ntp", "udp");
-    if (sp == NULL) {
-       fprintf(stderr, "udp/ntp: service unknown; using default %d\n",
-               NTP_PORT);
-       dst.sin_port = htons(NTP_PORT);
-    } else
-       dst.sin_port = sp->s_port;
-
-    dst.sin_family = AF_INET;
-    while ((n = getopt(argc, argv, "vsf")) != EOF) {
-       switch (n) {
-       case 'v':
-           verbose = 1;
-           break;
-       case 's':
-           set = 1;
-           break;
-       case 'f':
-           force = 1;
-           break;
-       }
-    }
-    for (host = optind; host < argc; ++host) {
-       afs_int32 HostAddr;
-
-       if (argv[host] == NULL)
-           continue;
-
-       hp = NULL;
-       HostAddr = inet_addr(argv[host]);
-       dst.sin_addr.s_addr = (afs_uint32) HostAddr;
-       if (HostAddr == -1) {
-           hp = gethostbyname(argv[host]);
-           if (hp == NULL) {
-               fprintf(stderr, "\nNo such host: %s\n", argv[host]);
-               continue;
-           }
-           memcpy((char *)&dst.sin_addr, hp->h_addr, hp->h_length);
-       }
-
-       memset((char *)pkt, 0, sizeof(ntp_data));
-
-       pkt->status = NTPVERSION_1 | NO_WARNING | MODE_CLIENT;
-       pkt->stratum = UNSPECIFIED;
-       pkt->ppoll = 0;
-
-       if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
-           perror("ntp socket");
-           exit(1);
-       }
-
-       FD_ZERO(&readfds);
-       FD_SET(s, &readfds);    /* since it's always modified on ret */
-
-       if (connect(s, (struct sockaddr *)&dst, dstlen)) {
-           perror("connect");
-           exit(1);
-       }
-
-       /*
-        * Needed to fill in the time stamp fields
-        */
-       (void)gettimeofday(&tp, NULL);
-       tstamp(&pkt->xmt, &tp);
-
-       if (send(s, (char *)pkt, sizeof(ntp_data), 0) < 0) {
-           perror("send");
-           exit(1);
-       }
-
-       /*
-        * Wait for the reply by watching the file descriptor 
-        */
-       if ((n =
-            select(FD_SETSIZE, (fd_set *) & readfds, (fd_set *) 0,
-                   (fd_set *) 0, &timeout)) < 0) {
-           perror("ntp select");
-           exit(1);
-       }
-
-       if (n == 0) {
-           fprintf(stderr, "*Timeout*\n");
-           if (--retry)
-               --host;
-           else {
-               fprintf(stderr, "Host %s is not responding\n", argv[host]);
-               retry = RETRY_COUNT;
-           }
-           continue;
-       }
-       if ((recvfrom
-            (s, (char *)pkt, sizeof(ntp_data), 0, (struct sockaddr *)&sin,
-             &dstlen)) < 0) {
-           perror("recvfrom");
-           exit(1);
-       }
-       (void)gettimeofday(&tp, NULL);
-       tstamp(&in_timestamp, &tp);
-
-       close(s);
-       if (verbose) {
-           printf("Packet from: [%s]\n", inet_ntoa(sin.sin_addr));
-           printf
-               ("Leap %d, version %d, mode %s, poll %d, precision %d stratum %d",
-                (pkt->status & LEAPMASK) >> 6,
-                (pkt->status & VERSIONMASK) >> 3,
-                modename[pkt->status & MODEMASK], pkt->ppoll, pkt->precision,
-                pkt->stratum);
-           switch (pkt->stratum) {
-           case 0:
-           case 1:
-               (void)strncpy(ref_clock, (char *)&pkt->refid, 4);
-               ref_clock[4] = '\0';
-               printf(" (%s)\n", ref_clock);
-               break;
-           default:
-               clock_host.s_addr = (afs_uint32) pkt->refid;
-               printf(" [%s]\n", inet_ntoa(clock_host));
-               break;
-           }
-           printf("Synch Distance is %04X.%04x  %f\n",
-                  ntohs(pkt->distance.int_part),
-                  ntohs(pkt->distance.fraction),
-                  s_fixed_to_double(&pkt->distance));
-
-           printf("Synch Dispersion is %04X.%04x  %f\n",
-                  ntohs(pkt->dispersion.int_part),
-                  ntohs(pkt->dispersion.fraction),
-                  s_fixed_to_double(&pkt->dispersion));
-
-           net_time = ntohl(pkt->reftime.int_part) - JAN_1970;
-           printf("Reference Timestamp is %08lx.%08lx %s",
-                  ntohl(pkt->reftime.int_part), ntohl(pkt->reftime.fraction),
-                  ctime(&net_time));
-
-           net_time = ntohl(pkt->org.int_part) - JAN_1970;
-           printf("Originate Timestamp is %08lx.%08lx %s",
-                  ntohl(pkt->org.int_part), ntohl(pkt->org.fraction),
-                  ctime(&net_time));
-
-           net_time = ntohl(pkt->rec.int_part) - JAN_1970;
-           printf("Receive Timestamp is   %08lx.%08lx %s",
-                  ntohl(pkt->rec.int_part), ntohl(pkt->rec.fraction),
-                  ctime(&net_time));
-
-           net_time = ntohl(pkt->xmt.int_part) - JAN_1970;
-           printf("Transmit Timestamp is  %08lx.%08lx %s",
-                  ntohl(pkt->xmt.int_part), ntohl(pkt->xmt.fraction),
-                  ctime(&net_time));
-       }
-       t1 = ul_fixed_to_double(&pkt->org);
-       t2 = ul_fixed_to_double(&pkt->rec);
-       t3 = ul_fixed_to_double(&pkt->xmt);
-       t4 = ul_fixed_to_double(&in_timestamp);
-
-       net_time = ntohl(in_timestamp.int_part) - JAN_1970;
-       if (verbose)
-           printf("Input Timestamp is     %08lx.%08lx %s",
-                  ntohl(in_timestamp.int_part), ntohl(in_timestamp.fraction),
-                  ctime(&net_time));
-
-       delay = (t4 - t1) - (t3 - t2);
-       offset = (t2 - t1) + (t3 - t4);
-       offset = offset / 2.0;
-       printf("%.20s: delay:%f offset:%f  ", hp ? hp->h_name : argv[host],
-              delay, offset);
-       net_time = ntohl(pkt->xmt.int_part) - JAN_1970 + delay;
-       fputs(ctime(&net_time), stdout);
-       (void)fflush(stdout);
-
-       if (!set)
-           continue;
-
-       if ((offset < 0 ? -offset : offset) > WAYTOOBIG && !force) {
-           fprintf(stderr,
-                   "Offset too large - use -f option to force clock set.\n");
-           continue;
-       }
-
-       if (pkt->status & LEAPMASK == ALARM) {
-           fprintf(stderr, "Can't set time from %s - unsynchronized\n",
-                   argv[host]);
-           continue;
-       }
-
-       /* set the clock */
-       gettimeofday(&tp, NULL);
-       offset += tp.tv_sec;
-       offset += tp.tv_usec / 1000000.0;
-       tp.tv_sec = offset;
-       tp.tv_usec = (offset - tp.tv_sec) * 1000000.0;
-
-       if (settimeofday(&tp, NULL)) {
-           perror("Can't set time (settimeofday)");
-       } else
-           set = 0;
-    }                          /* end of for each host */
-    exit(0);
-}                              /* end of main */
diff --git a/src/ntp/ntp.conf b/src/ntp/ntp.conf
deleted file mode 100644 (file)
index 2541ce0..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright 2000, International Business Machines Corporation and others.
-# All Rights Reserved.
-# 
-# This software has been released under the terms of the IBM Public
-# License.  For details, see the LICENSE file in the top-level source
-# directory or online at http://www.openafs.org/dl/license10.html
-
-#              Local clock parameters
-#
-#      Stratum MUST only be defined if you are a primary clock
-#              If so, include the 4 char clock type
-#stratum 1 WWVB
-#
-#      Precision of the local clock to the nearest power of 2
-#              ex.
-#                      60-HZ   = 2**-6
-#                      100-HZ  = 2**-7
-#                      1000-HZ = 2**-10
-precision -6
-#
-#      Peers           Type Name
-#
-# This is the peer list for cluster1.fs.andrew.cmu.edu, system control
-# machine for the Andrew cell
-#
-#peer       cluster1.fs.andrew.cmu.edu
-peer   192.5.146.42            #fuzzgate.psc.edu
-peer   GUAVA.SRV.CS.CMU.EDU    #128.2.250.187
-peer   PAPAYA.SRV.CS.CMU.EDU   #128.2.222.199
diff --git a/src/ntp/ntp.h b/src/ntp/ntp.h
deleted file mode 100644 (file)
index fc12952..0000000
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * Copyright 2000, International Business Machines Corporation and others.
- * All Rights Reserved.
- * 
- * This software has been released under the terms of the IBM Public
- * License.  For details, see the LICENSE file in the top-level source
- * directory or online at http://www.openafs.org/dl/license10.html
- */
-
-#ifndef FD_SET
-#define        NFDBITS         32
-#define        FD_SETSIZE      32
-#define        FD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
-#define        FD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
-#define        FD_ISSET(n, p)  ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
-#define FD_ZERO(p)     memset((char *)(p), 0, sizeof(*(p)))
-#endif
-
-#ifndef        NBBY
-#define        NBBY    8               /* number of bits per byte */
-#endif
-
-#define        MAXNETIF        10
-
-struct intf {
-    int fd;
-    char *name;
-    struct sockaddr_in sin;
-    struct sockaddr_in bcast;
-    struct sockaddr_in mask;
-    int uses;
-    int if_flags;
-};
-extern struct intf addrs[];
-extern int nintf;
-
-/*
- *  Definitions for the masses
- */
-#define        JAN_1970        2208988800      /* 1970 - 1900 in seconds */
-
-/*
- *  Daemon specific (ntpd.c)
- */
-#define        SHIFT_MASK      0xff    /* number of intervals to wait */
-
-#ifndef        WAYTOOBIG
-#define        WAYTOOBIG       1000.0  /* Too many seconds to correct, something is
-                                * really wrong */
-#endif
-
-#ifndef        XTAL
-#define        XTAL    1               /* crystal controlled clock by default */
-#endif
-
-#ifndef        NTPINITFILE
-#define        NTPINITFILE     "/etc/ntp.conf"
-#endif
-#ifndef        NTPDRIFTCOMP
-#define        NTPDRIFTCOMP    "/etc/ntp.drift"
-#endif
-
-struct list {
-    struct ntp_peer *head;
-    struct ntp_peer *tail;
-    int members;
-};
-
-#define        STRMCMP(a, cond, b) \
-       (((a) == UNSPECIFIED ? NTP_INFIN+1 : a) cond \
-        ((b) == UNSPECIFIED ? NTP_INFIN+1 : (b)))
-
-
-/*
- *  Definitions outlined in the NTP spec
- */
-#define        NTP_VERSION     1
-#define        NTP_PORT        123     /* for ref only (see /etc/services) */
-#define        NTP_INFIN       15
-#define        NTP_MAXAGE      86400
-#define        NTP_MAXSKW      0.01    /* seconds */
-#define        NTP_MINDIST     0.02    /* seconds */
-#ifdef REFCLOCK
-#define        NTP_REFMAXSKW   0.001   /* seconds (for REFCLOCKs) */
-#define        NTP_REFMINDIST  0.001   /* seconds (for REFCLOCKs) */
-#endif
-#define        NTP_MINPOLL     6       /* (64) seconds between messages */
-#define        NTP_MAXPOLL     10      /* (1024) secs to poll */
-#define        NTP_WINDOW      8       /* size of shift register */
-#define        NTP_MAXWGT      8       /* maximum allowable dispersion */
-#define        NTP_MAXLIST     5       /* max size of selection list */
-#define        NTP_MAXSTRA     2       /* max number of strata in selection list */
-#define        X_NTP_CANDIDATES 64     /* number of peers to consider when doing
-                                * clock selection */
-#define NTP_SELECT     0.75    /* weight used to compute dispersion */
-
-#define        PEER_MAXDISP    64.0    /* Maximum dispersion  */
-#define        PEER_THRESHOLD  0.5     /* dispersion threshold */
-#define        PEER_FILTER     0.5     /* filter weight */
-
-#if    XTAL == 0
-#define        PEER_SHIFT      4
-#define        NTP_WINDOW_SHIFT_MASK 0x0f
-#else
-#define        PEER_SHIFT      8
-#define        NTP_WINDOW_SHIFT_MASK 0xff
-#endif
-
-
-/*
- *  5.1 Uniform Phase Adjustments
- *  Clock parameters
- */
-#define        CLOCK_UPDATE    8       /* update interval (1<<CLOCK_UPDATE secs) */
-#if    XTAL
-#define        CLOCK_ADJ       2       /* adjustment interval (1<<CLOCK_ADJ secs) */
-
-#if defined (hpux)             /* must use settimeofday instead of adjtime */
-#define        CLOCK_PHASE     5       /* send bigger chunks */
-#define        CLOCK_MAX       0.128   /* maximum aperture (milliseconds) */
-
-#else
-
-#if defined (AFS_SUN_ENV)      /* these guys have such terrible clocks... */
-#define        CLOCK_PHASE     8       /* phase shift */
-#define        CLOCK_MAX       0.512   /* maximum aperture (milliseconds) */
-
-#else
-
-#if defined (AFS_AIX32_ENV)    /* there is a bug in adjtime */
-#define        CLOCK_PHASE     8       /* phase shift */
-#define        CLOCK_MAX       0.512   /* maximum aperture (milliseconds) */
-
-#else
-
-#define        CLOCK_PHASE     8       /* phase shift */
-#define        CLOCK_MAX       0.128   /* maximum aperture (milliseconds) */
-#endif
-#endif
-#endif
-
-#else /*!XTAL */
-#define        CLOCK_ADJ       0
-#define        CLOCK_PHASE     6       /* phase shift */
-#define        CLOCK_MAX       0.512   /* maximum aperture (milliseconds) */
-#endif
-#define        CLOCK_FREQ      10      /* frequency shift */
-#define        CLOCK_TRACK     8
-#define        CLOCK_COMP      4
-#define        CLOCK_FACTOR    18
-\f
-/*
- * Structure definitions for NTP fixed point values
- *
- *    0                          1                   2                   3
- *    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
- *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- *   |                        Integer Part                          |
- *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- *   |                        Fraction Part                         |
- *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- *
- *    0                          1                   2                   3
- *    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
- *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- *   |           Integer Part       |     Fraction Part             |
- *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-*/
-struct l_fixedpt {
-    afs_uint32 int_part;
-    afs_uint32 fraction;
-};
-
-struct s_fixedpt {
-    u_short int_part;
-    u_short fraction;
-};
-
-/* sign extension problem */
-#if defined(AFS_SUN_ENV) || defined(AFS_HPUX_ENV)
-#define s_char(v) char v
-#else
-#if defined(AFS_HPUX_ENV) || defined(AFS_AIX_ENV)
-#define s_char(v) signed char v
-#else
-#define s_char(v) int v:8
-#endif
-#endif
-
-/*  =================  Table 3.3. Packet Variables   ================= */
-/*
- *    0                          1                   2                   3
- *    0