#include /* things everything seems to need */ #include #include #include #include #include #include #include #if USE_UNIX_DOMAIN_SOCKETS #include #endif #include #include #include #include /* If, when processing a logfile for replaying the last N lines, * we end up seeing more than MAXREPLAYLINELEN characters in a line, * abort processing and display the data. Why? There could be some * very large logfiles and very long lines and we'd chew up lots of * memory and send a LOT of data down to the client - all potentially * bad. If there's a line over this in size, would you really want to * see the whole thing (and possibly others)? */ #if !defined(MAXREPLAYLINELEN) # define MAXREPLAYLINELEN 10000 #endif /* the default escape sequence used to give meta commands */ #if !defined(DEFATTN) # define DEFATTN '\005' #endif #if !defined(DEFESC) # define DEFESC 'c' #endif /* For legacy compile-time setting of the port... */ #if ! defined(DEFPORT) # if defined(SERVICENAME) # define DEFPORT SERVICENAME # else # if defined(PORTNUMBER) # define DEFPORT PORTNUMBER # else # define DEFPORT "conserver" # endif # endif #endif #if STDC_HEADERS # include # include #else # include # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif #endif #if !HAVE_STRCASECMP && HAVE_STRICMP # define strcasecmp stricmp # define strncasecmp strnicmp #endif #ifdef HAVE_UNISTD_H # include #endif /* if you do not have fd_set's here is a possible emulation */ #ifdef HAVE_SYS_SELECT_H # include #endif #ifndef FD_ZERO typedef long fd_set; # define FD_ZERO(a) {*(a)=0;} # define FD_SET(d,a) {*(a) |= (1 << (d));} # define FD_CLR(d,a) {*(a) &= ~(1 << (d));} # define FD_ISSET(d,a) (*(a) & (1 << (d))) #endif #ifdef HAVE_SYS_IOCTL_H # include #endif #ifdef HAVE_SYS_IOCTL_COMPAT_H # include #endif #include #ifdef HAVE_STROPTS_H # include #endif #ifdef HAVE_TTYENT_H # include #endif #ifdef HAVE_SYS_TTOLD_H # include #endif #if HAVE_TYPES_H #include #endif #if HAVE_SYS_WAIT_H # include #endif #define LO(s) ((unsigned)((s) & 0377)) #define HI(s) ((unsigned)(((s) >> 8) & 0377)) #if !defined(WIFEXITED) #define WIFEXITED(s) (LO(s)==0) #endif #if !defined(WEXITSTATUS) #define WEXITSTATUS(s) HI(s) #endif #if !defined(WIFSIGNALED) #define WIFSIGNALED(s) ((LO(s)>0)&&(HI(s)==0)) #endif #if !defined(WTERMSIG) #define WTERMSIG(s) (LO(s)&0177) #endif #if !defined(WIFSTOPPED) #define WIFSTOPPED(s) ((LO(s)==0177)&&(HI(s)!=0)) #endif #if !defined(WSTOPSIG) #define WSTOPSIG(s) HI(s) #endif #if HAVE_SYSEXITS_H #include #else #define EX_OK 0 #define EX_UNAVAILABLE 69 #define EX_TEMPFAIL 75 #endif #include #if !defined(HAVE_STRERROR) extern int errno; extern char *sys_errlist[]; # define strerror(Me) (sys_errlist[Me]) #endif #if HAVE_H_ERRLIST extern int h_errno; extern char *h_errlist[]; # define hstrerror(Me) (h_errlist[Me]) #else # define hstrerror(Me) "host lookup error" #endif #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif #if HAVE_SHADOW_H # include #endif #ifdef HAVE_CRYPT_H # include #endif #ifdef HAVE_HPSECURITY_H # include #endif #ifdef HAVE_PROT_H # include #endif #ifdef HAVE_GETOPT_H # include #endif #ifdef HAVE_SYS_VLIMIT_H # include #else # include #endif #ifdef HAVE_SYS_RESOURCE_H # include #endif #ifdef HAVE_SYS_UIO_H # include #endif #ifdef HAVE_SYS_PROC_H # include #endif #ifdef HAVE_SYS_AUDIT_H # include #endif #ifdef HAVE_USERSEC_H #include #endif #ifdef HAVE_PTY_H #include #endif #ifdef HAVE_LIBUTIL_H #include #endif #ifdef HAVE_UTIL_H #include #endif #ifndef NGROUPS_MAX # define NGROUPS_MAX 8 #endif #ifndef HAVE_GETSID # define getsid(Mp) (Mp) #endif #ifndef HAVE_SETSID # define setsid() getpid() #endif #ifndef HAVE_SETGROUPS # define setgroups(x, y) 0 #endif #ifndef HAVE_IN_ADDR_T typedef unsigned long in_addr_t; #endif #ifndef HAVE_SOCKLEN_T typedef int socklen_t; #endif /* * IUCLC, OLCUC and XCASE were removed from IEEE Std 1003.1-200x * as legacy definitions. */ #ifndef IUCLC #define IUCLC 0 #endif #ifndef OLCUC #define OLCUC 0 #endif #ifndef XCASE #define XCASE 0 #endif /* Some systems don't have OFILL or *DLY. */ #ifndef OFILL #define OFILL 0 #endif #ifndef NLDLY #define NLDLY 0 #endif #ifndef CRDLY #define CRDLY 0 #endif #ifndef TABDLY #define TABDLY 0 #endif #ifndef BSDLY #define BSDLY 0 #endif #ifndef ONOCR #define ONOCR 0 #endif #ifndef ONLRET #define ONLRET 0 #endif #ifndef SEEK_SET #define SEEK_SET L_SET #endif #ifndef PARAMS # if PROTOTYPES # define PARAMS(protos) protos # else /* no PROTOTYPES */ # define PARAMS(protos) () # endif /* no PROTOTYPES */ #endif /* setup a conditional debugging line */ #ifndef CONDDEBUG #define CONDDEBUG(line) if (fDebug) {debugFileName=__FILE__; debugLineNo=__LINE__; Debug line;} #endif #if HAVE_DMALLOC #include #endif