This file describes the changes to xinetd. The base version is 2.0.0. 2.0.0: (not released) 2.0.1: (not released) 2.0.2: Changes to the Makefile. Trivial mods to the usage() function 2.0.3: Changes to the Makefile. Fixed a bug in the usage() function 2.0.4: Distribution versions of the Makefile no longer contain any references to options.opt 2.0.5: 1) Clarified what an "unlisted RPC service" is in the man page 2) Fixed a bug in remote_address_check which caused access to be denied for all hosts if no_access was set and only_from was not set. 3) Fixed a bug which caused arbitrary syslog levels if the log_type was specified as SYSLOG in the "defaults" entry 2.0.6: bug fix in child.c: replaced strx_sprint with strx_print when naming interceptor processes ------------------------------------------------------------------------------- 2.1.0: (not released) This was mostly a clean-up of 2.0 List of changes: A. The man page has been split into 3 parts: xinetd.man : man page describing the program xinetd.conf.man : man page describing the configuration file This file now includes figures about the overhead of interception. xinetd.log.man : man page describing the log file B. New service attributes rpc_number : to support unlisted RPC services nice : to set the nice value of forked servers C. The IDONLY service flag was added D. Now uses the timer library unless NO_TIMERS is defined. If NO_TIMERS is not defined, the following are also available: a) a new option, -cc, to do periodic consistency checks b) timeout for reconfiguration E. Configuration file man page now mentions that access control is based on IP-address instead of domain address. F. The interception code now sets the TCP_NODELAY option. G. The timeout when contacting a remote identification server is configurable both when the service request has been accepted and when the request is rejected. In the former case it defaults to infinity while in the latter it defaults to 30 sec. H. The log line ids are now constants in an include file. I. The fsma library is no longer used. J. Most structure fields were renamed; certain functions were renamed too. Access to structure fields is now via macros. K. A bug in not restoring the number of descriptors to the soft limit was fixed. L. The -pid option works M. New internal services: "servers" : lists active servers "services" : lists active services 2.1.1: xinetd produces more meaningful messages if it can't start logging 2.1.2: Fixed 2 bugs: 1) xinetd would request a port number for unlisted RPC services One could get around this by simply specifying the port attribute for the service; the specified value would be ignored anyway. 2) xinetd initialization might fail sometimes in function msg_init() syslog logging was specified (i.e. the option -syslog was used) The cause of this bug was that the xlog_control( xlog, XLOG_GETFD, &fd ) operation will not fail for xlogs connected to syslog and the value of 'fd' would be used in the subsequent fcntl(). That value is arbitrary since 'fd' is a local variable. If 'fd' did not happen to refer to an open descriptor, the program would terminate since the fcntl() would fail (btw, the success of the fcntl() call would be harmless if 'fd' happened to refer to an open descriptor). 2.1.3: Bug fix: only_from/no_access addresses would get inverted on little-endian machines when such addresses were specified using the numeric notation (for example, 128.138.45.3). This bug was in the numeric_addr function which did not convert the result of inet_addr to host-byte-order. A work around for the bug would be to use the factorized address notation (for example, 128.138.45.{3}) 2.1.4: Bug fixes: 1) in dgram_echo(), sin_len was not being set before the invocation of recvfrom 2) in finger_shutdown(), it was possible for Srdline() to return NULL (if the remote end would close the socket without sending anything). If the RECORD option was set in the log_on_failure flags, this would cause the forked xinetd process which did the recording to die since it would try to dereference a NULL pointer. 2.1.5: Bug fixes: 1) in exec_server() service descriptor might be closed when execing server. This made it impossible to start servers for 'nowait' services. The bug occurred only Ultrix version 4.3a or (probably) later (bug discovered and fix provided by doug@seas.smu.edu) 2) for systems that supported supplementary group id's, the set_credentials() function did not set those group id's (they were being inherited from xinetd). Now initgroups(3) is called to set the supplementary group id's properly. (bug discovered and fix provided by maf+@osu.edu) 2.1.6: Bug fixes: 1) xinetd will crash after reconfiguration if there is a running server for a service that was removed from the configuration and which logs on exit. 2) xinetd forked process falls in infinite loop if identd server sends a reply that is missing the ending CR-LF. (bug discovered and fix provided by Laurent.Wacrenier@gin.obspm.fr). We also change the LOGUSER_SUCCESS_TIMEOUT constant in config.h from 0 seconds (i.e. infinite timeout) to 30 seconds. This avoids infinite waits in case the remote host does not send a RST reply when we attempt to connect to the IDENTD port, and there is no server listening at that port. 2.1.7: Bug fix: the HOST flag in the 'log_on_success' attribute was ignored; the code was incorrectly checking if the HOST flag was set in the log_on_failure attribute (bug discovered by frolich@corrine.cpc.cs.ucf.edu) 2.1.8.1: Added support for TCP redirect to a remote host. --bbraun 2.1.8.2: Added support for binding to specific interface. --bbraun 2.1.8.3: Changed redirect so that a remote port can be specified as well. --bbraun 2.1.8.4 10/98: Changed use of varargs to be more modern (and actually work on IRIX 6.5) Added use of 1.2.3.4/24 style address ranges for access control --bbraun 2.1.8.4p2 11/98: Fixed stupid error with logging of ip addresses. Pointed out by Todd R. Eigenschink 2.1.8.4p3 11/98: Fixed to compile correctly under HPUX Includes fixes from Pavel Roskin 2.1.8.4p4 11/98: Fixed to compile correctly under BSDi 2.1.8.4p5 11/98: Fixed Linux libc5 to work with RPC. Pointed out by Frodo Looijaard 2.1.8.4p8 11/98: Minor jump because I went through many revisions of testing things - Fixed littleendian bug with 1.2.3.4/26 style access control - Added support for inet_addr instead of inet_aton, as Solaris 2.5.1 does not support inet_aton. Both the previous bugs were found with the help of Thomas E. (tht@inlink.com) - Went entirely to stdarg.h version of variable arguement handling, since some newer platforms doen't handle varargs.h style very gracefully. If this breaks too many older architectures I'll ifdef all the old stuff back in... 2.1.8.5 11/98: Fixed /tmp/xinetd.dump symlink problem pointed out on BugTraq by Balazs Nagy 2.1.8.5p1 1/99: Fixed compilation problems on BSD systems. 2.1.8.5p2 1/99: Fixed compilation problems on AIX 4.1.x/powerpc 2.1.8.5p3 3/99: Fixed compilation problems on FreeBSD Thanks to Sascha Schumann Fixed a bug in sio/sprint.c Thanks to Steven Stanfield 2.1.8.6b1 4/99: Rudimentary administrative interface added (use the service name xadmin). Supports the "banner" directive, which is the name of the file that will be splatted when a connection is denied. Has a fixed open() on the dump file that is much better. Thanks to Steven Stanfield $REMOTE_HOST environment variable is set to the name of the remote host. Currently, if no name is available, it is set to NULL. 2.1.8.6b2 4/99: Fixed a problem with shells that don't define $PWD 2.1.8.6b3 4/99: Fixed a problem I introduced with automagic port selection If both a port and a protocol are specified, no checks are done. xinetd will believe the config, even if /etc/services says otherwise. xadmin service is an internal service now, just like tcp echo, etc. Use the INTERNAL flag. xadmin service now just calls server_dump when a "show run" command is executed. Added a NAMEINARGS flag, so that you can use tcpd with xinetd. Normally, xinetd takes argv[0] from the "server" directive. This prevents tcpd from working properly. Now, you can use tcp wrappers like this: service telnet { scoket_type = stream protocol = tcp flags = NAMEINARGS wait = no user = root server = /usr/libexec/tcpd server_args = /usr/libexec/telnetd } 2.1.86b4 4/99: Added support for libwrap. Compile with --with-libwrap. Access checking is done with libwrap (if compiled in) first, then with xinetd's internal access control. 2.1.8.6b5 4/99: Some versions of libwrap needed allow_severity. Added it. Changed severity to INFO from WARNING. 2.1.8.6b6 7/99: Added ability to use names for the bind and redirect functions. They lookup the name, and use the first address it returns. They only do the lookup once. Added "interface" as an alias to "bind" Fixed potential bug with redirection losing data. Pointed out by Solar Designer Fixed potential bug in the parsing of xadmin commands. Pointed out by Solar Designer Changed default location of the dump file to /var/run/xinetd.dump configurable in config.h Added Solar Designer's per_source feature. Allows you to limit the number of services spawned per source address. Added Solar Designer's supplementary groups fix. 2.1.8.6b7 7/99: Updated the make files to not require absolute paths. This will help with people having problems with the LOCATION Makefile variable. Updated configure to compile properly with Debian's version of libwrap and glibc (look for yp_get_default_domain in nsl) If banner directive is used, banner is printed regardless of access control. It is actually printed before access control check take place. banner_success and banner_fail are added to explicitly give a message depending on access control. Added banner_success option. This is a banner that is printed when access to the service is granted. This is before any attempt to execute the server has been made. The service may still fail but it will not be for access control reasons. Added banner_fail option. This is a banner that is printed when access to the service has been denied. This allows you to inform your users that they are doing something bad and they shouldn't be doing it anymore. Added max_load option. This option allows the operator to specify the max load at which to run the service. If the machine reaches the specified max load level, connections are denied to that service. Each service can have a different max_load, and it can be listed in the default service. Linux is working, Solaris is kind of wierd. Solaris people should try it, but don't use it as a real security mechanism yet. 2.6 and 2.7 should be fine. I'm not sure about 2.5.1 and earlier. 2.1.8.7 10/99: Fixed per_source to actually work properly. Added the NODELAY flag. This will set the TCP_NODELAY sockopt on the socket. If the service is not a TCP service, then this flag has no effect. Updated the man page with more explicit definition of the "groups" attribute. Includes xconv.pl to replace itox. xconv.pl handles most of the inetd.conf files I've seen, including the use of tcpd, even though it is recommended that you compile with libwrap instead of using tcpd. Includes a man page to itox donated by Norbert Veber of Debian. Updates to configure and Makefile to better handle the configuration of install directories. Again, changes donated by Debian group. Updates to itox to handle user.group syntax and checking on "wait". 2.1.8.8pre1 11/99 Fixed a problem with the banner_fail parser. Added IPv6 support to xinetd. 2.1.8.8pre2 12/99 Added the option "cps". This allows you to disable a service if the rate of incoming connections is too great. This number may be set higher than the instances or per_source number. This is used as a last ditch measure, if someone is bombarding a service, and either 1) logs are piling up because of failed attempts, or 2) way too much is happening, ditch the service. This actually does a close() on the socket, so nothing is listening to that port anymore. All connections will fail. 2.1.8.8pre3 12/99 Made the options mask_t an unsigned long long (64bits on x86) instead of an unsigned. xinetd was running out of bits to store options in. Eventually, a real solution will need to be implemented, but this works for the short term. This may break on compilers that don't understand long long's. Be aware. Most modern compilers are ok. Added the option "enabled", similar to the "disabled" function. If "enabled" is used, only the services listed in the enabled line are available, regardless of what other services are configured. Changed the behavior of only_from and no_access. First, if you specify a host by _name_ in only_from or no_access, a lookup happens when a client connects. The _canonical_ name that is returned is compared to the name specified in the access control option. If the _names_ match, access is granted or denied. See the readme for more information. Added the ability to specify .domain.com to the access control options. This is very similar to tcp wrapper's method of specifying domain access. If the connecting client's reverse lookup returns a name that ends in .domain.com then access is granted or denied. See the readme for more information. 2.1.8.8pre4 12/99 The enable function didn't work. It worked for one entry, but more than 1 entry would not be recognized and xinetd would exit with no services available. I believe this has been fixed. limits.h is included in parsers.c now, because of LONG_MIN and LONG_MAX. Some setups would automagically include limits.h through the other include files, and some wouldn't. This should fix compile problems on those that don't. Added a check for sys_siglist in the configuration script. This is better than statically defining #ifdef's in signals.c. 2.1.8.8pre5 12/99 Fixed numeric addresses being entered in the only_from field. host_addr parser was identifying them and marking them as HOST_ADDRs instead of NUMERIC_ADDRS. 2.1.8.8pre6 1/100 Fixed year formatting in log to print 00 instead of 100. 2.1.8.8pre7 1/00 Fixed the TIMEOFFSET macro in builtins.c so the 'time' service printed the correct output. 2.1.8.8pre8 1/00 Fixed a problem where banners would not work saying "could not find banner: bannername". 2.1.8.8pre9 1/00 The dump file was logging the ip address incorrectly for only_from addresses. For some reason xntoa() was reporting the wrong address. Changed to inet_ntoa, and works fine. BSDI 4.1 was not compiling correctly, "inet_ntoa" not found. This is because BSDI4.x switched to using bind 8 resolver libraries, so you have to include to #define all these functions to __func_name. Some BSD's don't let you set the group permissions of a process to NULL, so you get the setgroups(0,NULL) error whenever a connection is made. To avoid this, set 'groups = yes' and be aware of the extra group permissions the server may be running with. A message to this effect has been added to the syslog error, so confusion is minimized. 2.1.8.8pre10 2/00 Fixed a syntax error when compiling IPv6 support. 2.1.8.8pre11 2/00 Always call no_control_tty(). This calls setsid() and fixes a problem under FreeBSD. 2.1.8.8 2/00 Bumped version number. 2.1.8.9pre1 Added the "include" directive. You can now include other files into your .conf file. "include filename" Added preliminary an inetd compatibility mode. Start xinetd with -inetd-compat and specify /etc/inetd.conf as your configuration file. 2.1.8.9pre2 Fixed up RPC support 2.1.8.9pre3 Incorporated patches for Mac OS X and Tru64 support. Also incorporated a patch for the includedir directive. 2.1.8.9pre4 Incorporated a patch to allow logging to the AUTHPRIV level. patch from Trond Eivind Glomsr. Numerous cleanups. Mostly superficial, but gets rid of *lots* of compile warnings when using -Wall. These cleanups may have affected portability issues... Support for Darwin! Now compiles and runs fine. Note that xinetd doing mmap didn't work right (always lost the first byte of the file). Workaround is to disable mmapped io for Darwin. Added a DISABLE flag for services, that will prevent a service from starting. Added a "disable" boolean for services that does the same thing as the DISABLE flag. "groups" can now be specified in the defaults section. 2.1.8.9pre5 Implemented better error checking in redirect.c, so hopefully it will detect error conditions more reliably and prevent lots of child xinetd's running unecisarily. Ramon Krikken sent a redirector implementation that replaced the two process redirection with a single process using select. Modifications to his patch were integrated. includedir parses only regular files, or symlinks to regular files, that do not begin with '.'. Added includedir to the xinetd.conf man page. 2.1.8.9pre6 Fixed a bug in the access lists. If you specified a host by name in only_from, any connection from a host without a reverse dns entry would be accepted. 2.1.8.9pre8 Now allows you to specify multiple instances of the same service as long as all but one is disabled. Fixed a documentation issue in the xinetd.conf man page. The user attribute can be specified for an unlisted service, just not an internal service. When including files with "includedir", it parses the files in alphabetical order, as determined by strcmp(). Under Solaris, I've removed the no_control_tty() call in child.c. This was causing some confusion. xinetd its self still calls no_control_tty(). Fixed a compile error with --with-inet6 Changed the exiting behavior: xinetd now kills only the RPC services and internal services (like redir) when it exits (or does a hard reconfigure). This keeps things like telnet sessions open across restarts of xinetd (assuming you are using REUSE). 2.1.8.9pre9 Fixed a potential bug in parsing of filenames from includedir. Possibly fixed tcp wait=yes handling. Fixed man pages so they say they're installed in the sections they are really installed into. Added .cvsignore to empty directories 2.1.8.9pre10 Hopefully fixed a few compile errors on architectures such as DUNIX and Darwin. When compiled with libwrap support, xinetd passes the server name to be checked in hosts.{allow,deny} instead of the service name. Behavior should now match tcpd. Incorporated Trond's pidfile patch. You can now specify -pidfile on the command line, and xinetd will make a /var/run/xinetd.pid file. Note that this _replaces_ the -pid option. 2.1.8.9pre11 Removed '\n's from syslog messages. Also moved some of the syslog()'s to pasemsg()'s. Added a patch from mob@de.uu.net to make the bind attribute specifiable in the default section. Added the KEEPALIVE flag, which sets the SO_KEEPALIVE socketopt on tcp sockets. Added a patch from Trond at RedHat that will hopefully fix some of the remaining tcp wait=yes problems. More paranoid handling of access control in addr.c Always allow access to the internal pseudo services. For internal services and libwrap, access control is performed by the service name (instead of the server, since there is no server). The last two entries together fix problems with segfaults when doing access control. If a hostname is specified in only_from, xinetd will try to match the connecting address to any of the IP addresses associated with the hostname in only_from. For redirection services with libwrap support, the service name is used for access control rather than the server name, since the server name makes no sense. 2.1.8.9pre12 Remove the pidfile when exiting. Added a -stayalive option to keep xinetd running even when there are no services available. 2.1.8.9pre13 Added paranoid access control for the udp internal servers. Do not reply to udp packets on dangerous ports (avoid looping echo services). For libwrap, if the server isn't specified use the service _id_ instead of the service name (this usually is the service name). This makes more sense for things like the internal servers (echo-stream instead of using echo, which will get echo-stream and echo-dgram) Included an rlimit patch from Nick Burrett, which should help keep some nasty users at bay. He's even updated the man page. This patch brings a tear to my eye. 2.1.8.9pre14 Moved the libwrap and address checking to the child process. The purpose of this is to move the expensive checking into the child process (such as name resolution, exec()'ing, etc), but leave some of the lighter weigh checking in the parent in an attempt to prevent DoS'. Incorporated Charles Levert's NOLIBWRAP patch. This adds a flag, NOLIBWRAP, which will turn off libwrap access control for a single service. This is a good thing when you're wanting to use tcpd with a service. It's also useful when wanting libwrap for some lesser used services, but the high volume ones need higher performance. Included Motonobu Ichimura's patches for v6. The first one sets v6 services with incoming v4mapped or compatible addresses to AF_INET instead of AF_INET6. This should make incoming v4 connections to v4 servers work correctly. Motonobu Ichimura's second patch adds the service attribute v6config, which allows a v6 service to only accept v6 connections. Moved most of the configured defines into a config.h. This involved renaming xinetd/config.h to xinetd/xconfig.h The configure system actually works with --srcdir now. You can build xinetd from a directory other than the source directory now. Minor cleanups to remove warnings with -Wall 2.1.8.9pre15 5/20/2001 Added Steve Grubb's SENSOR patch which provides a SENSOR flag and deny_time attribute. These will help to stop script kiddies doing port scans by turning off all access to all services on all IP addresses until the timeout expires. Cleaned up pset stuff in the lib section. Continued fixing warnings produced by -Wall Added "child" security check for internal services. Fixed some possible memory leaks. Changed snprintf to the internal strx_nprint() function, standardizing on that. Removed the need for the snprintf() implementation for systems lacking snprintf(). Another attempt to fix the tcp wait condition. TCP wait services were being accept()'d when they shouldn't This caused services such as linuxconf, which accept() their own connections, to fail. Fixed a problem with displaying bound and redirected addresses in the xadmin service. Don't print banner always and banner success twice. Converted to ANSI C style prototypes instead of K&R. Use spaces instead of 3 character tabs. Use POSIX types for network, time, and other length specific purposes. Make the initial log message of compile time options atomic. When grow()'ing the environment variables, initialize things to prevent bad pointers. Mitigated consequences of possible SIGCHLD race with intercepted services. Removed all remnants of varargs syntax, and have completely moved to the stdarg style syntax. Added BSD/OS loadavg support from Robert Brewer at LavaNet. Fixed a potential buffer overflow when using USERID. Found by zen-parse. Added permissions to the pidfile's open call. Suggested by zen-parse. Changed xinetd's umask to 022 from 0. 2.1.8.9pre16 6/13/2001 Attempted to fix IPv6 support broken in the pre15 release. -Steve Grubb Moved remote_address_check ahead of the libwrap checks. This is needed so that SENSORS work without modifying the hosts.allow file if tcp_wrappers is compiled in. -Steve Grubb Added missing includes to several library files Fixed bug where DISABLE flag was being set/cleared in xflags rather than types. -Matthias Andree Fixed memory leak in attr_check. -Steve Grubb Continued converting to ANSI C prototypes. -Steve Grubb Fixed reads in service.c to continue through interupts. -Steve Grubb Corrected Includedir directive. -Solar Designer Changed umask to OR 022 with the current umask. -Solar Designer Cleaned up the address list dump to format the different addresses types correctly. -Steve Grubb Cleaned up parsing of address lists. -Steve Grubb Integrated support for building on OS X. Added wait/nowait support to "small services". Fixed IPv6 support for "small services". Added "umask" keyword to specify service's umask in octal. Umask situation is described in the umask section of xinetd.conf.man Inspect all configuration files. Will now emit warnings if any are world writeable, symlinks, or not owned by root.-Steve Grubb 2.3.0 Fixed a bounds checking case in strx* functions. Pointed out by Sebastian Krahmer. 2.3.1 Reworked all headers in xinetd directory. -Steve Grubb Fixed redirect & shutdown to read & write through signal interrupts. -Steve Grubb Inspect all servers. Prints warnings for things that look funny. Applied _many_ security and reliability fixes, see AUDIT. -Solar Designer Removed the Soft Reconfigure capability. Soft Reconfigure is now the same as Hard Reconfigure (SIGUSR1 = SIGUSR2). -Steve Grubb Attempt to fix segfaulting seen since 2.3.0. -Steve Grubb Moved the re-enable service after cps violation to run off of the flags system to avoid re-entrancy issues. -Steve Grubb Only call drain if service is active. Deactivated services close the descriptor. -Steve Grubb Reorganized flags to process terminating children first, -Steve Grubb 2.3.2 more K&R -> ANSI prototype -Steve Grubb Stop using C++ keywords (even though this is really C...) -Steve Grubb Fix a heap overrun in grow(). -teg@redhat.com Fix a parse error with multiple explict masks. If protocol is not specified, but socket type is, infer protocol from socket type. -Ahmon Dancy Added a check to the return value of env_addstr() in child.c to make sure we aren't exec()ing with an invalid environment. Wrap the remaining includes with autoconf macros. Removed all unused functions. -Steve Grubb Don't use SIGALRM for the cps directive. Instead, do a generic timer routine that evolves around the main event loop. 2.3.3 Fixed the filelog problem of printing garbage. Fixed the RPC parser to correctly handle RPC version ranges again. 2.3.4 Removed the old flags construct and replaced it with the timers added in 2.3.2. This will handle multiple of the same signals occuring before the event loop cycles. Removed all the old timer code that uses SIGALRM, and replace it with the timer code from 2.3.2. The conf timer bit the dust along the way, since the event loop hasn't started by the time the conf parser started. It was never built anyway, so not a big loss. Made xinetd unlink its pidfile properly. - Solar Designer Enabled loadavg support for Darwin. Remove the exit when user or group is specified and xinetd is not root. Enables running xinetd as non-root again. Fixed various portability issues: - strerror for SunOS 4 - difftime for SunOS 4 - inet_aton for Solaris 2.5.1 - uint{16,32,64}_t for systems without them - rlim_t for systems without them. Moved compat.c into the portable library, where it belonged. Added finer testing of the {e,f,g}cvt functions in autoconf. Begin transition to combined IPv4/IPv6 support. Add compatibility code from OpenSSH into the portable library. Made socket_type or protocol optional (only need to specify one) Removed syslog()'s, replaced with internal msg(). Fixed a parsing bug when specified server is invalid. Change the signal handling. Signal handlers write their signal to a pipe, which wakes up the main select(), and the signal is then dealt with. Removed the looping option. The cps directive duplicated much of the functionality. Fixed a bug re-enabling internal wait services. Continue syncing IPv4 and IPv6 code. Made a flag to specify IPv4 or IPv6 based service. Redirect currently only redirects between IPv4<->IPv4 or IPv6<->IPv6. It should handle IPv4<->IPv6 and vice versa Fixed the reconfig case where a bind directive changes. SIGHUP now reconfigures xinetd. SIGUSR1 now dumps the internal state. SIGUSR2 still reconfigures xinetd, but will be deprecated in future releases. Fixed a warning of redefined SA macro with some tcp wrapper header files. Make the configuration keyword comparisons case insensitive. This allows things like Service foo { blah } instead of just service foo { blah }. Merged IPv4 and IPv6 support. The only difference between compiling with IPv6 support is that services default to being IPv6. Manually set the service to IPv6 (or IPv4) with the IPv{4,6} service flags. The only_from numeric address specification works for IPv6 addresses, and mixing IPv4 style address specifications will now match for IPv4 mapped addresses on IPv6 services. Fixed an environment variable setting problem. Fixed a misuse of the sio routines in the banner routines. This will probably fix a variety of bugs related to banners. More code cleanups. -Steve Grubb. Pass the expected size of the address structure used to bind() calls rather than the total memory allocated. Fix some compile errors and warnings on BSD/OS. Prevent some possible unnecissary DNS lookups. Makefiles now accept make -j. This is only mildly useful at the moment, since the main chunk of xinetd blocks on all the libraries being built first, and the libraries are small but somewhat serialized. Fixed a problem with the access control on builtin services. (Introduced in the development cycle) Removed libpq. It is no longer needed. -Steve Grubb Removed the %n processing from __sio_converter(). It is not used and would cause a core dump if it was. -Steve Grubb Make the man page match the new signal change. - Steve Grubb Fix some potential problems with only_from access. Start using "const". Go const happy. All services now essentially default to having the REUSE flag. The -reuse option and the REUSE flag are now silently ignored. When dumping service configs, print out the redir config information, also fixes a hostname lookup problem when using systems that have a too strict getnameinfo(). Also print the CPS directive information. Print out symbolic system names that don't have strsignal(), but do have sys_siglist[]. Fix a potential crasher in xtimer_add(). Add %q and %ll modifiers to the sio library for displaying quad_t's or long long's. Restructure the argument parsing a little to reduce global memory usage. Fixed bug in service parameter verification. Prior versions did not verify that all require attributes were specified. Disable the service when a parse error is detected for its configuration. (Steve Grubb) 2.3.5 Included patch from Trond at RedHat to check signal pipe if there are no services running. Update the access_times parser to disable service if there is a parse error. Also corrected ti_add too. -Steve Grubb Updated all parsers to propagate errors so service will be disabled. -Steve Grubb Updated internal services to check the signal pipe periodically. -Steve Grubb Updated sendsig to wait for termed children so zombies aren't created and ports are clear to rebind to on hard_reconfig. -Steve Grubb Included a patch from Hendrik Visage for a problem with ident. 2.3.6 Updated only_from to 'and' both the remote address and the specified portion if a network mask type address is used. -Steve Grubb Updated explicit_mask to chose NUMERIC_ADDR if mask is 32. -Steve Grubb Many parser updates. -Steve Grubb Propogate default attributes even if not specified. log_on_success, log_on_failure, passenv were the main items affected by this problem. only_from and no_access now conform to this new propogation technique. -Steve Grubb Xremove now uses domain names in addition to ip addresses. -Steve Grubb Moved sensor code into its own file and changed it to use timer facility. -Steve Grubb Reworked remote_addr check & addrlist_match to not cache IP addresses and corrected several algorithmic problems. -Steve Grubb Off-by-one error corrected in pset_delete. -Steve Grubb Updated attrfill to use IPv4 addresses if bind specified. -Steve Grubb Fixed bug in libwrap code to check server better for NULL -Steve Grubb Added better testing of configuration if NAMEINARGS flag is set. -Steve Grubb Updated config.guess & config.sub. -Thomas Seyrat Added an rpm spec file. -Steve Grubb Removed sio/suite directory. It appears that key files have been deleted in the past so it no longer works. -Steve Grubb Make the file descriptor buffer allocation dynamic. This substantially reduces xinetd's normal memory footprint (~760KB). -Rob Braun Work around bugs in Mac OS X's getrlimit/setrlimit which causes them to be almost unusable. -Rob Braun 2.3.7 Added fixes or workarounds for issues introduced after 2.3.3 including the signal pipe leak into child processes (a security hole). -Solar Designer Made xinetd unlink its pidfile when there turns out to be no services configured on reload. -Solar Designer 2.3.8 Reworked redirect to better detect problems in its configuration. Also, redirect now allows service names for port numbers. -Steve Grubb Reworked attribute checking in confparse & updated attr.h. -Steve Grubb Ensure that children have the default signal handlers installed. Added support for DNS service registration ala Rendezvous. Fixed some compile errors on Mac OS X, FreeBSD, and OpenBSD. Added preliminary support for tcpmux -Philip Armstrong Update the xinetd man page to document the -version option. Now ignores the --with-inet6 compile option. Services will default to IPv4 unless configured otherwise. Bring back the inetd.conf parser in a different form. Parse all the xinetd config files first, then parse /etc/inetd.conf, and add services from there (if it exists). Use the -inetd_compat option to read inetd.conf. IPv6 updates for bind_parser, only_from, and no_access. -Steve Grubb 2.3.9 Fixed bug uncovered by IPv6 updates for bind parser. In the id_parser, a test was being performed for uniqueness. It relied on the address already being given. However, the address may not be known if more than one record came back from the getaddrinfo function call. -Steve Grubb Added code to service_fill to resolve port if unspecified. -Steve Grubb Consolidated duplicate services tests into check_entry. -Steve Grubb Fixed a bug with access control & internal services. Make sure we byteswap the value returned by time services. Fix an omission with the tcpmux integration. Fixed a race when there's 1 service configured and it is a wait service. 2.3.10 Close the service descriptors on fork. This only matters for internal forking services, since anything that calls exec() will get those closed automagically. This will help reduce the file discriptors used by the daemon when using some internal services Fix a numbering bug with xinetd's internal flag representation that was manifesting its self as all services being disabled upon recieving a SIGUSR2 (hard reconfig) Don't pass a hostname to dns registration calls, it'll pick a hostname automagically. Remove CLEANUP and other dead code. Make sure tcp internal non-forking services close their filedescriptors. Added syslog facilities for the xinetd log configuration to match SUS. - Steve Grubb Start reporting the Per Source value when dumping debugging output - Steve Grubb Correct the fake-getnameinfo.h to include appropriate macros. - Steve Grubb Up the default CPS value to 50 from 10. Document the default CPS values in the xinetd.conf man page. Fix a closing of the connection when there's an error handling the service. - Steve Grubb Fixed a bug in the includedir path where a reference was kept to free()'d memory. Fixed a bug in the consistency check mechanism where it would report the signal pipe as a problem. Clear memory before freeing it. This isn't strictly necessary, but aids in debugging. Add the pid to debugging messages. Remove access control calls for special services. The access control functions must always allow these services anyway. Fixed a bug with reconfiguring services using the interface attribute. -- Adam Lukosek Fixed a bug with deallocating dns registrations. Fixed a bug where tcp_wrappers would not identify an internal service since the internal service has no executable. -Steve Grubb Sclose was being used on the config file descriptor. Since sio never touches the descriptor, it failed to close it. - Steve Grubb Fix a potential memory leak with bind_addr and service reconfig. - Andrey Alekseyev Fix a reconfig timing issue. - Andrey Alekseyev 2.3.11 Fix some compile time errors on Solaris Fixed a bounds check in Sdone(). Patch from Dmitry V. Levin Added FreeBSD loadavg support. Patch from Vanilla I. Shu TCPMUX parser updates. -Steve Grubb TCPMUX was causing core dumps due to changes made in 2.3.10's child_process(), reverted changes. -Philip Armstrong Remove RECORD logging option. -Steve Grubb Change Sclose to make sure it always closes the fd. -Steve Grubb Added better error handling to filelog.c. -Steve Grubb Error messages now go to syslog instead of stderr in strparse.c. -Steve Grubb Fixed memory leaks found with valgrind. -Steve Grubb Correct problems with bind specified in the default section. -Steve Grubb Use Sclose to close banner commands. -Jay Fenlason Correct banner to match man pages. -Jay Fenlason 2.3.12 Cleanup some signal handling if not defined. -MARUYAMA Shinichi Make ident protocol work properly for multi-homed hosts. -Alan Sundell Code cleanup for const warnings. -Steve Grubb Make redirect protocol independent. -Cougar Make reconfig iterate over all services. Some may be in "not started" state and were being missed. -Steve Grubb Make redirected, forking builtins, & tcpmux close all listening descriptors so reconfig works. -Jay Fenlason Add support for the IPV6_V6ONLY socket option. Don't assume a default setting, as the default seems to be in flux. Address compare in readjust was wrong. Its now corrected to handle each address family separately. -Steve Grubb Add command line option to not fork. This will allow xinetd to be started by init or daemontools. -Matthias Andree Fixed a leak in reconfig. If log_type = file is used for a service and SIGHUP is sent to xinetd, it leaked a file descriptor and 44 bytes of memory per service using FILE. -Steve Grubb Change all close() calls to Sclose() to prevent future problems. -Steve Grubb Fixed bug if service name is unparsable and in an included directory that caused xinetd to core dump. -Steve Grubb Fixed bug where address lists had "version" uninitialized when the list used hostnames with no dots in the name. -Steve Grubb Numerous memory leaks when parsing errors occurred. -Steve Grubb Remove the servers and xadmin internal services. Update addrlist_match to use the address part of the IPv6 address structure. -Christof Meerwald Correct looping problems for udp connections rejected by the child access controls. -Steve Grubb Added TRAFFIC logging option to report total bytes in and out for a redirected service. -Christof Meerwald Correct a double-free condition if a retry was scheduled. -Steve Grubb Add filename to parse messages. -Steve Grubb Improve port error messages after parsing. -Steve Grubb Sclose dump_fd if SIO error causes dump abort. -Steve Grubb Smorefds wasn't allocating the proper amount of sio descriptor space if the fd was > 5 over its last known fd. -Steve Grubb 2.3.13 Add NULL entry to success_log_options to properly end the nvlist. -Steve Grubb Portability updates to libportable.h. -Matthias Andree Occasionally Smorefds didn't allocate more fds as expected. -Jay Fenlason Address list parsing considered the comma in factorized addresses to be an error. Updated test to allow factorized address. -Steve Grubb When parsing inet.conf, the filename wasn't being set for subsequent messages. -Steve Grubb Fix addrlist_match to correctly handle IPv4 mapped IPv6 addresses. -Christof Meerwald Fixed a bug where reloading configuration would core dump if file logging was enabled in defaults and a connection existed when SIGHUP was received. -Steve Grubb If too many connections hit and exhausts the file descriptors such that accept fails, deactivate the service like the cps access control does. This problem was reported by David Cook. -Steve Grubb Updated rpm.spec file and added default config files to contrib directory. -Steve Grubb Allow group & user to be specified by numeric value. -Steve Grubb 2.3.14 Applied patch from Art Haas for gcc 3.5 compat. Flush the descriptor after writing a banner. -Jay Fenlason Don't assume char is signed in the udp drain() function -Don Provan If log remote user is on, a descriptor between 0-2 is likely to be opened. Call msg_suspend before dup'ing socket to avoid this bug. -Glen Johnson Added confparse() RPC patch from RedHat's RHEL4 srpm. Fixed some service release bugs with accesses to dangling pointers. Updated BACKLOG to 64 from 7 Updated xconv.pl to understand ":" in inetd.conf files from FreeBSD ports patch. Added howl support for mdns advertising. Added a libwrap service attribute to specify the service name to check access via libwrap. Make some type cleanups to fix some warnings. Parse things as unsigned instead of signed where it makes sense. Based on a patch from Tony Ernst. Remove the <1024 port check for UDP builtin services. This check has been rather antiquated for years.