muddleftpd-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Muddleftpd-cvs] CVSROOT: /cvsroot/muddleftpd


From: Joerg Jaspert
Subject: [Muddleftpd-cvs] CVSROOT: /cvsroot/muddleftpd
Date: Sun, 02 Nov 2003 13:51:36 -0500

Module name:    muddleftpd
Branch:         release_1_3_13
Changes by:     Joerg Jaspert <address@hidden>  03/11/02 13:51:35
Reply-to: address@hidden

CVSROOT:        /cvsroot/muddleftpd
Module name:    muddleftpd
Branch:         release_1_3_13
Changes by:     Joerg Jaspert <address@hidden>  03/11/02 13:51:35

Modified files:
        src            : Makefile.in 
        modules/auth/authlibsmb: auth.h README Makefile.in 
        modules/auth/authlibmysql: configure.ac auth.h README 
                                   Makefile.in 
        modules/auth/authlibmud: auth.h README Makefile.in 
        modules/auth/authlibmsql: auth.h README Makefile.in 
        modules/auth/authlibexample: auth.h Makefile.in 
        doc            : Makefile.in 
        .              : configure.ac NEWS Makefile.in ChangeLog 

Log message:
        * configure.ac, modules/auth/authlibmysql/configure.ac: Changed
        way we look for mysql. Thats easier for users now.
        
        * modules/auth/: authlibmsql/auth.h, authlibmysql/auth.h,
        authlibsmb/auth.h, authlibmud/auth.h, authlibexample/auth.h:
        Changed include from varargs.h to stdarg.h as gcc no longer
        includes varargs.h
        
        * modules/auth/: authlibmsql/README, authlibmysql/README,
        authlibsmb/README, authlibmud/README, authlibexample/README:
        Changed documentation to be in sync with new configure/makefile
        things.
        
        * modules/auth: authlibmsql/Makefile.in,
        authlibmysql/Makefile.in, authlibexample/Makefile.in,
        authlibsmb/Makefile.in, authlibmud/Makefile.in: Change Install
        Target from TODO to something useful. Install the autlibfile in
        libdir/muddleftpd set by configure run.
        Also install the READMEs as README.auth$MODULE in the
        documentation dir (see below).
        
        * doc/Makefile.in: Added things to install txt documentation in
        prefix/share/doc/muddleftpd/*

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/src/Makefile.in.diff?only_with_tag=release_1_3_13&tr1=1.1&tr2=1.1.10.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibsmb/auth.h.diff?only_with_tag=release_1_3_13&tr1=1.1&tr2=1.1.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibsmb/README.diff?only_with_tag=release_1_3_13&tr1=1.2&tr2=1.2.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibsmb/Makefile.in.diff?only_with_tag=release_1_3_13&tr1=1.1&tr2=1.1.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibmysql/configure.ac.diff?only_with_tag=release_1_3_13&tr1=1.1&tr2=1.1.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibmysql/auth.h.diff?only_with_tag=release_1_3_13&tr1=1.1&tr2=1.1.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibmysql/README.diff?only_with_tag=release_1_3_13&tr1=1.2&tr2=1.2.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibmysql/Makefile.in.diff?only_with_tag=release_1_3_13&tr1=1.1&tr2=1.1.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibmud/auth.h.diff?only_with_tag=release_1_3_13&tr1=1.1&tr2=1.1.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibmud/README.diff?only_with_tag=release_1_3_13&tr1=1.1&tr2=1.1.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibmud/Makefile.in.diff?only_with_tag=release_1_3_13&tr1=1.1&tr2=1.1.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibmsql/auth.h.diff?only_with_tag=release_1_3_13&tr1=1.1&tr2=1.1.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibmsql/README.diff?only_with_tag=release_1_3_13&tr1=1.2&tr2=1.2.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibmsql/Makefile.in.diff?only_with_tag=release_1_3_13&tr1=1.1&tr2=1.1.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibexample/auth.h.diff?only_with_tag=release_1_3_13&tr1=1.1&tr2=1.1.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/modules/auth/authlibexample/Makefile.in.diff?only_with_tag=release_1_3_13&tr1=1.1&tr2=1.1.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/doc/Makefile.in.diff?only_with_tag=release_1_3_13&tr1=1.3&tr2=1.3.4.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/configure.ac.diff?only_with_tag=release_1_3_13&tr1=1.3&tr2=1.3.2.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/NEWS.diff?only_with_tag=release_1_3_13&tr1=1.3&tr2=1.3.2.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/Makefile.in.diff?only_with_tag=release_1_3_13&tr1=1.4&tr2=1.4.8.1&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/muddleftpd/muddleftpd/ChangeLog.diff?only_with_tag=release_1_3_13&tr1=1.7&tr2=1.7.2.1&r1=text&r2=text

Patches:
Index: muddleftpd/ChangeLog
diff -c /dev/null muddleftpd/ChangeLog:1.7.2.1
*** /dev/null   Sun Nov  2 13:51:35 2003
--- muddleftpd/ChangeLog        Sun Nov  2 13:51:35 2003
***************
*** 0 ****
--- 1,259 ----
+ 2003-11-02  Joerg Jaspert  <address@hidden>
+ 
+       * configure.ac, modules/auth/authlibmysql/configure.ac: Changed
+       way we look for mysql. Thats easier for users now.
+ 
+       * modules/auth/: authlibmsql/auth.h, authlibmysql/auth.h,
+       authlibsmb/auth.h, authlibmud/auth.h, authlibexample/auth.h:
+       Changed include from varargs.h to stdarg.h as gcc no longer
+       includes varargs.h
+ 
+       * modules/auth/: authlibmsql/README, authlibmysql/README,
+       authlibsmb/README, authlibmud/README, authlibexample/README:
+       Changed documentation to be in sync with new configure/makefile
+       things.
+ 
+       * modules/auth: authlibmsql/Makefile.in,
+       authlibmysql/Makefile.in, authlibexample/Makefile.in,
+       authlibsmb/Makefile.in, authlibmud/Makefile.in: Change Install
+       Target from TODO to something useful. Install the autlibfile in
+       libdir/muddleftpd set by configure run.
+       Also install the READMEs as README.auth$MODULE in the
+       documentation dir (see below).
+ 
+       * doc/Makefile.in: Added things to install txt documentation in
+       prefix/share/doc/muddleftpd/*
+ 
+ 2003-11-02  Beau Kuiper <address@hidden>
+ 
+       * src/ftpd.h: removed headers for string.h since they are in
+       string.h. Updated prototype for safe_vsnprintf().
+ 
+       * src/string.c: fixed double use of varargs in string_catvprintf().
+       This fixed muddleftpd problems on PPC and possibly other archs.
+ 
+       * src/string.h: updated prototype for string_catvprintf()
+ 
+       * src/ftpout.c: modified ftp_write to use fixed string_catvprintf()
+ 
+       * src/logger.c: modified debuglog() to use fixed safe_vsnprint()
+ 
+       * src/utils.c: fixed possible double use of varargs in safe_vsnprintf()
+       Fixed safe_snprintf() so it does not use safe_vsnprintf() to prevent
+       performance degredation due to new design.
+ 
+       * Configure.ac: Added a check for stdarg.h, since the replacement
+       snprintf code needs it.
+ 
+ 2003-04-15  Beau Kuiper <address@hidden>
+ 
+       * src/main.c: mainprog(): added code to close all file descriptors.
+       After the server is started, it will also close the terminal file
+       desciptors, so ssh sessions are not stalled at logout.
+ 
+       * src/utils.c: fd_closeall_nonterminal(): determines the max file
+       descriptors number and attempts to close all open fds. The terminal
+       file descriptors are left untouched.
+ 
+ 2002-11-20  Beau Kuiper <address@hidden>
+ 
+       * src/acl.c: transfer_config(): Added code that allows the server
+       to retrieve the gid a user will operate as from the password file.
+       Just put "!" in front of the gid parameter. (eg gid !anuser) will
+       give the user the gid of the user anuser.
+ 
+ 2002-10-29  Beau Kuiper <address@hidden>
+ 
+       * src/string.c: string_filterbadchars(): Added code to only allow
+       /r and /n characters if and only if they are together as a TELNET
+       newline (/r/n). This fixes the bug of muddleftpd accepting input
+       with those characters in it and then mucking the log files up with
+       it.
+ 
+       * src/logger.c: Removed code that replaces /r and /n with spaces.
+       It doesn't need it anymore, since I have cured the original bug.
+ 
+ 2002-10-21  Joerg Jaspert  <address@hidden>
+ 
+       * modules/auth/authlibexample/COPYING: Added back. This license
+       is different (a public domain one) and not GPL as I blindly
+       assumed from the name. Sorry Beau.
+ 
+ 2002-10-20  Joerg Jaspert  <address@hidden>
+ 
+       * NEWS: Added. Contains summaries of changes between releases.
+ 
+       * CHANGES: Removed, that is now in NEWS.
+ 
+       * modules/auth/: authlibmsql/README, authlibmysql/README,
+       authlibsmb/README: No need to mention that it depends
+       on muddleftpd. Of course it does, it is distributed with it. :)
+ 
+       * tools/muddlestats.0.3.0/: AUTHORS, COPYING: Removed.
+       AUTHORS integrated into the main AUTHORS, license is the same as
+       Muddleftpd, GPL.
+ 
+       * AUTHORS: Rewrote so it reflects current state of the Art.
+ 
+       * modules/auth/: authlibmysql/AUTHORS, authlibmysql/COPYING,
+       authlibsmb/AUTHORS, authlibsmb/COPYING,
+       authlibexample/AUTHORS, authlibexample/COPYING,
+       authlibmsql/AUTHORS, authlibmsql/COPYING,
+       authlibmud/AUTHORS, authlibmud/COPYING: Removed.
+       Authors is now integrated into the main AUTHORS file and license is
+       same as Muddleftpd.
+ 
+ 2002-10-20  Joerg Jaspert  <address@hidden>
+ 
+       * Developer.txt: Added Section about Changelogs/Commit
+       Messages.  Changed (C) for new Files to be for the Muddleftpd team.
+ 
+ 2002-10-20  Beau Kuiper  <address@hidden>
+ 
+       * modules/auth/: authlibexample/AUTHORS,
+       authlibexample/CHANGES, authlibexample/COPYING,
+       authlibexample/Makefile.in, authlibexample/README,
+       authlibexample/auth.h, authlibexample/authunix.c,
+       authlibexample/configure.ac, authlibmsql/AUTHORS,
+       authlibmsql/CHANGES, authlibmsql/COPYING,
+       authlibmsql/Makefile.in, authlibmsql/README,
+       authlibmsql/auth.h, authlibmsql/authmsql.c,
+       authlibmsql/configure.ac, authlibmud/AUTHORS,
+       authlibmud/CHANGES, authlibmud/COPYING,
+       authlibmud/Makefile.in, authlibmud/README,
+       authlibmud/auth.h, authlibmud/authmud.c,
+       authlibmud/configure.ac, authlibmysql/AUTHORS,
+       authlibmysql/CHANGES, authlibmysql/COPYING,
+       authlibmysql/Makefile.in, authlibmysql/README,
+       authlibmysql/auth.h, authlibmysql/authmysql.c,
+       authlibmysql/configure.ac, authlibsmb/AUTHORS,
+       authlibsmb/CHANGES, authlibsmb/COPYING,
+       authlibsmb/Makefile.in, authlibsmb/README,
+       authlibsmb/auth.h, authlibsmb/authsmb.c,
+       authlibsmb/configure.ac, authlibsmb/valid.h,
+       authlibsmb/smbval/Makefile.in, authlibsmb/smbval/byteorder.h,
+       authlibsmb/smbval/md4.c,
+       authlibsmb/smbval/rfcnb-common.h,
+       authlibsmb/smbval/rfcnb-error.h, authlibsmb/smbval/rfcnb-io.c,
+       authlibsmb/smbval/rfcnb-io.h,
+       authlibsmb/smbval/rfcnb-priv.h,
+       authlibsmb/smbval/rfcnb-util.c,
+       authlibsmb/smbval/rfcnb-util.h, authlibsmb/smbval/rfcnb.h,
+       authlibsmb/smbval/session.c,
+       authlibsmb/smbval/smbdes.c, authlibsmb/smbval/smbencrypt.c,
+       authlibsmb/smbval/smblib-common.h,
+       authlibsmb/smbval/smblib-priv.h,
+       authlibsmb/smbval/smblib-util.c, authlibsmb/smbval/smblib.c,
+       authlibsmb/smbval/smblib.h,
+       authlibsmb/smbval/std-defines.h,
+       authlibsmb/smbval/std-includes.h, authlibsmb/smbval/valid.c,
+       authlibsmb/smbval/valid.h: Finally added module code
+       into CVS
+ 
+ 2002-10-20  Beau Kuiper  <address@hidden>
+ 
+       * Makefile.in, autogen.sh, configure.ac,
+       defaults.h, defaults.h.in, install-sh: Imported
+       authentication modules into build system.
+       
+       Install does not work properly for modules, and there are still
+       some more tweaks to do
+ 
+ 2002-10-20  Joerg Jaspert  <address@hidden>
+ 
+       * Developer.txt: Added suggestions from Beau
+ 
+ 2002-10-19  Joerg Jaspert  <address@hidden>
+ 
+       * Developer.txt: First version of Guidelines for People
+       working on Muddleftpd
+ 
+ 2002-10-17  Beau Kuiper  <address@hidden>
+ 
+       * Makefile.in, config.h.in, src/version.c:
+       updated to autoconf 2.54
+ 
+ 2002-10-17  Beau Kuiper  <address@hidden>
+ 
+       * Makefile.in, configure, configure.ac,
+       configure.in: updated to autoconf 2.54
+ 
+ 2002-10-16  Beau Kuiper  <address@hidden>
+ 
+       * src/logger.c: Logger patch was broken
+       
+       Character constants are in ', not in " And character 20 is not a
+       space, while 0x20 is
+ 
+ 2002-09-28  Joerg Jaspert  <address@hidden>
+ 
+       * src/util/seteguid.c~: Well, it exists in the original
+       tarball, but its a backup file -> delete it :)
+ 
+ 2002-09-28  Joerg Jaspert  <address@hidden>
+ 
+       * src/util/: pwgrent.c, seteguid.c, seteguid.c~,
+       snprintf.c, strerror.c, strerror.h: Uhh, looks
+       like i missed to add them into CVS
+ 
+ 2002-09-26  Joerg Jaspert  <address@hidden>
+ 
+       * defaults.h: Ok, devel version is odd, stable is even.
+ 
+ 2002-09-26  Joerg Jaspert  <address@hidden>
+ 
+       * defaults.h: This is now 1.3.12 and no longer 1.3.11-devel
+ 
+ 2002-09-26  Joerg Jaspert  <address@hidden>
+ 
+       * src/logger.c: Remove \r and \n before output to logfile
+ 
+ 2002-09-26  Joerg Jaspert  <address@hidden>
+ 
+       * AUTHORS: Changed debian maintainer
+ 
+ 2002-09-26  Joerg Jaspert  <address@hidden>
+ 
+       * AUTHORS, CHANGES, COPYING, INSTALL,
+       Makefile.defs, Makefile.in, README, TESTING,
+       TODO, config.h.in, configure, configure.in,
+       defaults.h, doc/Makefile.in, doc/cookie.txt,
+       doc/ftpcmds.txt, doc/muddleftpd.txt,
+       doc/mudlogd.txt, doc/mudpasswd.txt, doc/reference.txt,
+       doc/info/muddleftpd.info, doc/info/muddleftpd.texi,
+       doc/man/ftpwho.1, doc/man/muddleftpd.1,
+       doc/man/mudpasswd.1, examples/README,
+       examples/anon-only.conf, examples/anon-reigon.conf,
+       examples/mudlogd.conf, examples/ratios.conf,
+       examples/standard.conf, examples/vserver-host.conf,
+       examples/vserver.conf, examples/vserverbig.conf,
+       src/Makefile.in, src/acl.c, src/acl.h, src/auth.c,
+       src/auth.h, src/authanon.c, src/authdisable.c,
+       src/authint.c, src/authpam.c, src/authunix.c,
+       src/bufread.c, src/cfloader.c, src/checkip.c,
+       src/cmd.c, src/config.c, src/configfile.h,
+       src/datasock.c, src/dir.c, src/file.c, src/ftp.c,
+       src/ftpcmd.h, src/ftpd.h, src/ftplist.c,
+       src/ftpout.c, src/ftpsite.c, src/ftpstat.c,
+       src/ftpstate.c, src/ftptrans.c, src/ftpwho.c,
+       src/init.c, src/logger.c, src/main.c,
+       src/malloc.c, src/mudlogd.c, src/mudpasswd.c,
+       src/myglob.c, src/myglob.h, src/newfile.c,
+       src/pnums.h, src/procnum.c, src/proxy.c,
+       src/ratio.c, src/ratio.h, src/ratiotool.c,
+       src/reply.h, src/select.c, src/shmem.c,
+       src/socket.c, src/string.c, src/string.h,
+       src/tokset.h, src/utils.c, src/version.c,
+       tools/muddlestats.0.3.0/AUTHORS,
+       tools/muddlestats.0.3.0/COPYING,
+       tools/muddlestats.0.3.0/INSTALL,
+       tools/muddlestats.0.3.0/README, tools/muddlestats.0.3.0/TODO,
+       tools/muddlestats.0.3.0/muddleftpd.logrotate,
+       tools/muddlestats.0.3.0/muddlestats-gather.py,
+       tools/muddlestats.0.3.0/muddlestats.lsm,
+       tools/muddlestats.0.3.0/muddlestats.py: Imported muddleftpd
+ 
+ 
+ Copyright (C) 2002 Muddleftpd Team, http://www.nongnu.org/muddleftpd/
+ Copying and distribution of this file, with or without modification, are
+ permitted provided the copyright notice and this notice are preserved.
Index: muddleftpd/Makefile.in
diff -c /dev/null muddleftpd/Makefile.in:1.4.8.1
*** /dev/null   Sun Nov  2 13:51:35 2003
--- muddleftpd/Makefile.in      Sun Nov  2 13:51:35 2003
***************
*** 0 ****
--- 1,71 ----
+ # Copyright (C) 1999 Beau Kuiper
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+ 
+ include Makefile.defs
+ 
+ address@hidden@
+ # where the binary is stored
+ address@hidden@
+ 
+ # where the man pages are stored
+ address@hidden@
+ 
+ # where info files should be stored
+ address@hidden@
+ 
+ # directories to make
+ DIRS=src doc @subdirs@
+ 
+ # filenames to clean in distclean
+ DISTCLEAN_NAMES=\*.a \*.o \*~ \*.so config.status config.log config.cache 
config.h Makefile configure.scan defaults.h
+ 
+ # filenames to clean in maintainer-clean
+ MAINTAINERCLEAN_NAMES=$(DISTCLEAN_NAMES) configure config.h.in
+ 
+ all:
+       $(MAKE) recursive TARGET=all
+ 
+ recursive:
+       @for current_dir in $(DIRS); do                                 \
+               (cd $$current_dir && $(MAKE) $(TARGET)) || exit 1;      \
+       done
+ 
+ install:
+       $(MAKE) recursive TARGET=install
+ 
+ clean:
+       $(MAKE) recursive TARGET=clean
+       rm -f *~ DEADJOE
+ 
+ distclean:
+       $(MAKE) recursive TARGET=distclean
+       @echo
+       @echo -n searching and removing files
+       @for file in $(DISTCLEAN_NAMES); do                             \
+               find -name "$$file" -print0 | xargs -0 rm -f;           \
+               echo -n .;                                              \
+       done
+       @echo done
+ 
+ maintainer-clean:
+       $(MAKE) recursive TARGET=maintainer-clean
+       @echo
+       @echo -n searching and removing files
+       @for file in $(MAINTAINERCLEAN_NAMES); do                       \
+               find -name "$$file" -print0 | xargs -0 rm -f;           \
+               echo -n .;                                              \
+       done
+       @echo done
Index: muddleftpd/NEWS
diff -c /dev/null muddleftpd/NEWS:1.3.2.1
*** /dev/null   Sun Nov  2 13:51:35 2003
--- muddleftpd/NEWS     Sun Nov  2 13:51:35 2003
***************
*** 0 ****
--- 1,964 ----
+ 
+ Version 1.3.13:
+ 
+       1) Change: Revamped build system to use new build tools.
+       2) Change: Included authentication modules into build system.
+                  They are installed (if selected at configure time) into
+                          the libdir from configure. Normally prefix/lib
+                (/usr/local/lib if not specified).
+       3) Bug Fix: Properly fixed bug in 1.3.12.1, so muddleftpd does not
+                   accept /r or /n from user input unless it is the form of
+                   a TELNET newline.
+       4) Bug Fix: Scrambled output on PPC systems fixed. (possibly other
+                   systems too)
+     5) Change: Install .txt documentation in prefix/share/doc/muddleftpd/*.
+ 
+ Version 1.3.12.1:
+ 
+       1) Bug Fix: Fixed logging of /r and /n so they are converted to
+                   spaces.
+ 
+ Version 1.3.12:
+ 
+       1) Bug Fix: Linux does not like custom PASV replies with ip-masq. 
+                   Using reply recommended (but not mandatory) in RFC959.
+                   (Beau Kuiper)
+       2) Change: Included support for large files (> 2 gig) on 32bit
+                  systems.
+       3) Change: Removed QUIET compile option, replaced by verbose
+                  parameter.
+       4) Change: Added support for HP-UX 11.00
+       5) Bug Fix: fixed warnings with GCC 3.X compiler
+ 
+ Version 1.3.11:
+ 
+       1) Change: Updated mudlogd. now sighup will reload config file.
+                  (Beau Kuiper)
+       2) Bug Fix: Overflowing port value allowed sending data to ports
+                   below 1024 dispite restrictions. (Beau Kuiper)
+       3) Bug Fix: Fixed storing files so they are truncated to the
+                   start position, like other ftpds. (Beau Kuiper)
+       4) Bug Fix: Removed races in the STOR and STOU commands. 
+                   (Beau Kuiper)
+       5) Bug Fix: Removed race in STOU unique filename generator.
+                   (Beau Kuiper)
+       6) Change: Minor optimizations, less malloc frobbing in some common
+                  code paths.
+ 
+ Version 1.3.10:
+ 
+       1) Bug Fix: Fixed warnings from gcc. (Beau Kuiper)
+       2) Change: Added %(x,*)d format for cookies. (Beau Kuiper)
+       3) Bug Fix: Fixed gid/uid handling, corrected casting,
+                   mainly useful for older machines with 16bit uid and gid
+                   (Beau Kuiper)
+       4) Bug Fix: Fixed manual page installation to put .1 at the end.
+                   (Decklen Foster)
+       5) Bug Fix: Fixed makefile problems. (Beau Kuiper)
+       6) Bug Fix: Fixed freeing of null pointers when specified configuration 
+                   file is a directory. (Beau Kuiper)
+       7) Bug Fix: Fixed gid/uid handling so NIS works. (Beau Kuiper)
+       8) Change: Now using new malloc library. It is much better than
+                  most other mallocs, including GNU's (Beau Kuiper)
+       9) Change: Added the package Muddlestats. It seems very good and
+                  has a promising future. (McRee)
+       10) Bug Fix: Fixed uploads on IBM AIX systems. This bug has existed
+                    a long time. (Beau Kuiper, helped by Sergey Novoselov)
+       11) Bug Fix: Fixed recursive directory listings again (Beau Kuiper,
+                    helped by Nik Soggia)
+       12) Documentation: Minor changes to example configs. (Beau Kuiper)
+       13) Documentation: Added mudlogd documentation. (Beau Kuiper)
+       14) Change: Added the mudlogd program, which works separatly from
+                   muddleftpd to allow simple log rotation. (Beau Kuiper)
+ 
+ Version 1.3.9:
+ 
+       1) Bug Fix: Connection rejections if DNS broken fixed. (Beau Kuiper)
+       2) Documentation: added mudpasswd manual page. (Decklen Foster)
+       3) Bug Fix: Better error reporting in ftpwho (Decklen Foster)
+       4) Documentation: Minor change to info page. (Decklen Foster)
+       5) Bug Fix: made forking into background a command line
+                   parameter instead of a #define (Beau Kuiper)
+       6) Change: added separate upload/download speed limiters for people
+                  with differing upload and download speeds, eg cable modem
+                  and ASDL. (Beau Kuiper)
+       7) Change: changed source tree directory structure, separating source 
+                  files into thier own directory. (Beau Kuiper)
+       8) Bug Fix: Fixed directory listing again, so even simpler and
+                   better. (Beau Kuiper)
+       9) Bug Fix: Small memory leak in listing code fixed. (Beau Kuiper)
+       10) Bug Fix: Finally fixed date parsing in list code so year is
+                    displayed if last modified was a different year.
+                    (Beau Kuiper)
+       11) Bug Fix: String length checking fixes for config files.
+                    (Tomas Ogren)
+       12) Bug Fix: Memory alignment issues fixed in configuration 
+                    include sections (Tomas Ogren)
+       13) Bug Fix: Some libc's don't like being told to vsnprintf
+                    without a buffer. Fixed autoconf script to
+                    check for this and use replacement if true.
+                    (reported by Tomas Ogren, fixed by Beau Kuiper)
+       14) Bug Fix: Moved HOST reply strings to reply.h (Beau Kuiper)
+       15) Change: added EPSV and EPRT commands, to support IPV6 at
+                   a later date. (Beau Kuiper)
+       16) Change: added busydumpdata directive option for main and 
+                   virtual server sections. Now the server won't blindly
+                   disconnect if too many users connect at the same
+                   time. (Idea by Tomas Ogren, done by Beau Kuiper)
+       17) Bug Fix: Fixed makefiles to use configure specified manpage
+                    and info directories. (Decklin Foster)
+       18) Bug Fix: Fixed ABOR to forget any data port information.
+                    (Beau Kuoper)
+       19) Bug Fix: Fixed default data port handling, with server using
+                    the wrong IP address. (Beau Kuiper)
+       20) Bug Fix: Fixed SITE error message with no parameters.
+                    (Beau Kuiper)
+ 
+ Version 1.3.8:
+ 
+       1) Bug Fix: Fixed bug in ratio record creation
+       2) Change: Added HOST support as outlined in the draft I have
+                  written.
+       3) Bug Fix: Minor fix for errorous exit. Now exits with 1 if an
+                   error occurs. Suggested by Decklin Foster
+       4) Bug Fix: More descriptive error messages for when the server
+                   has too many users.
+       5) Bug Fix: Recursive listing crashed muddleftpd if the last dir
+                   scanned but the recurse algorithm is empty.
+       6) Bug Fix: substantial fix to be more compatible with /bin/ls for
+                   recursive lists. Should fix mirror.pl
+       7) Bug Fix: upload resume using STOR command fixed. A very simple
+                   mistake that existed in the whole (1.3.X) series.
+       8) Bug Fix: Fixed free NULL pointer error when no ipacls specified.
+ 
+ Version 1.3.7:
+ 
+       1) Bug Fix: Listing ACL's did not work correctly.
+       2) Bug Fix: Major bug in freeing children caused major problems
+                   after server maxusers had logged in and out.
+       3) Bug Fix: Bind errors were being displayed when using runasuser
+                   directive. They are now ignored (they are harmless)
+       4) Bug Fix: SIGHUP is now not acted upon if runasuser is active.
+ 
+ Version 1.3.6:
+ 
+       1) Bug Fix: Fixed serious DOS bug when the new maxipconnect
+                   directive is used.
+ 
+ Version 1.3.5:
+ 
+       1) Change: Pam module now accepts option pam_user, to force
+                  the username it will read from the password file and
+                  return the credentials for.
+       2) Bug Fix: better logging of some failed calls.
+       3) Change: Now quitdump, cddump and welcome do not need to be
+                  specified specially for chroot mode.
+       4) Bug Fix: string.c changed for easier porting. Was GCC dependant.
+       5) Bug Fix: memcpy bug while resolving hostnames.
+       6) Bug Fix: Improper handling of uid, gid in authentication.
+       7) Bug Fix: Warnings repaired, prototypes rebuilt using scribe.
+       8) Change: Ftp list code now supports recursive listing. The listing
+                  code is very fast/memory efficient.
+       9) Bug Fix: Fixed memory leak while authenticating user.
+       10) Change: Added funtions to retrieve hostname/ip from
+                   authentication modules.
+       11) Change: I am using my own glob routines now, sorts correctly for
+                   machines without glob. 
+       12) Change: The fnmatch code I wrote is now being used regardless of
+                   whether the library has its own one.
+       13) Bug Fix: fnaccess and pfnaccess have been repaired, and can be
+                    used.
+       14) Change: Listing now shows total directory sizes like the real
+                   ls.
+       15) Bug Fix: Dumping relative files when changing directories caused
+                    the file for the last directory to be dumped
+       16) Bug Fix: ratiotool failed to set correct file permissions on
+                    a newly created ratio file.
+       17) Bug Fix: compile fixes for IRIX.
+       18) Bug Fix: Macros broken in ftpd.h
+       19) Bug Fix: Ips were shown backwards in ftpwho if reverse hostname
+                    was not found.
+       20) Change: Added option maxconnectperip. This limits the number of
+                   connections from a single IP address.
+       21) Bug Fix: Fix when user operation is more than 120 characters.
+                    This lead to ftpwho printing the hostname after the
+                    operation.
+       22) Bug Fix: cookies in access directives were not being applied 
+                    correctly.
+       23) Bug Fix: Signals must be blocked while reloading config, or
+                    deleting users, or bad things happen
+ 
+ Version 1.3.4:
+ 
+       1) Bug Fix: The internal password module was feeding the config
+                   error function the wrong variable.
+       2) Bug Fix: Fixed a bug in include handling that would prevent
+                   use in 64bit environments.
+       3) Bug Fix: Include looping is now checked before config file is
+                   loaded.
+       4) Change: Removed authparams option. Auth modules get to fend for
+                  themselves (this provides more functionality, and better
+                  directive names)
+       5) Bug Fix: Help was not being shown correctly.
+       6) Documentation: Updated some documentation.
+       7) Bug Fix: Possible to free NULL pointers in config.c
+       8) Change: Changed a few error messages to be more understandable.
+       9) Change: A temporary change that will lock up muddleftpd if it
+                  tries to free a NULL pointer. It locks muddleftpd up
+                  so a debugger can get a clean backtrace of the program.
+       10) Bug Fix: Fix for attempting to rotate logs while in droproot
+                    mode.
+       11) Bug Fix: Usernames are more rigourously checked because
+                    regular expression characters in accepted usernames
+                    may provide more access than intended.
+       12) Change: The anonymous authentication module now returns the uid
+                   and gid of nobody instead of the ftp user. This is
+                   more consistent with other ftp servers.
+       13) Change: Listing of devices is more accurate, showing the
+                   major and minor device numbers like real ls.
+       14) Change: Muddleftpd now uses the real hostname as the default
+                   hostname of the host and virtual servers.
+       15) Change: Ipacl for hostnames must be in brackets. Without
+                   brackets, it is always checked against the IP
+       16) Bug Fix: got rid of any use of inet_ntoa, since I wasn't
+                    using it right.    
+       17) Change: Set default logstrength to log everything.
+       18) Documentation: Documented all server directives.
+ 
+ Version 1.3.3:
+ 
+       1) Change: Can now use %v in group config to get current virtual
+                  server section name and %V to get current virtual server
+                  host name. Ratio %v and %V are now %a and %A
+       2) Change: Can now use tokens in greeting line.
+       3) Bug Fix: Fix for bug where directories with % in them did weird
+                   things (see version 1.2.10)
+       4) Change: New config option droproot. This option will drop all
+                  root prividges when a user logs. It also will use 
+                  capibilities so it can still use low numbered ports on
+                  linux 2.2 or better if libcap is installed.
+       5) Change: reply.h now contains macros to the replys the server
+                  generates, It allows replies for foriegn languages or
+                  other ftp servers to be used, basicly changing the
+                  persona of the ftp server.
+       6) Bug Fix: muddleftpd was not correctly enforcing the one command
+                   at a time requirement of FTP.
+       7) Bug Fix: muddleftpd was not updateing upload/download byte
+                   counter.
+ 
+ Version 1.3.2:
+ 
+       1) Bug Fix: Muddleftpd is much more careful now about the
+                   configuration file it listens to. The config file now
+                   must be owned by the user/group who runs it, and must
+                   not be world or group writable. This fixes a security
+                   vulnerability in ftpwho if it is setuid. Same for
+                   internal password files.
+       2) Change: Added the -n option to display IP's instead of hostnames
+                  in ftpwho.
+       3) Bug Fix: Fix for truncated replys where length of reply was more
+                   than 1024 characters.
+       4) Change: Implemented new directive include, which allows you to
+                  include another section in the current section. Good for
+                  creating templates.
+       5) Change: Changed how config errors were handled, improving error
+                  reporting and detection
+       6) Change: By default, muddleftpd is built to be quiet on startup.
+       7) Change: ratios now get data from groups section rather than a
+                  separate section. Use include to have ratio directives in 
+                  other sections.
+       8) Change: Sending SIGUSR1 to the server process will make it reopen
+                  the log file and instruct the children servers to do the
+                  same. Note that chrooted server children will not be able
+                  to reopen the log file.
+       9) Change: added fnmatch pattern based access controls, including
+                  controls to explicitly match slashes.
+       10) Bug Fix: Maximum process limit setting was broken, fixed.
+       11) Bug Fix: Symbolic links were always assumed readable in the
+                    listing code. Does not work because the /proc
+                    filesystem actually has non-world readable symbolic
+                    links.
+ 
+ Version 1.3.1:
+ 
+       1) Change: Minor changes to how the scratchfile is used.
+       2) Change: Muddleftpd now uses proper unix style arguments. It
+                  has a usage screen and a version option.
+       3) Change: PORT command more verbose, repling where it will connect
+                  to.
+       4) Change: root privliges are given for connecting to low number
+                  ports. This is for RFC951 complience.
+       5) Bug Fix: Fixed code so muddleftpd runs of FreeBSD. Borrowed :-)
+                   some code from proftpd (for functions fgetpwent and
+                   fgetgrent)
+       6) Bug Fix: snprintf replacement code has a bug causing very bad
+                   problems.
+       7) Bug Fix: removed TCP_CORK code since it only slows data transfers
+                   down.
+       8) Bug Fix: Fixed a few compile bugs.
+       9) Change: Changed log format and how log was written
+       10) Change: Added support of dlopen modules for authentication
+                   modules
+       11) Change: Minor updates to authentication module interfaces.
+       12) Change: Passwords used by anonymous users are now logged.
+       13) Bug Fix: Fixed %N cookie for user count.
+       14) Change: Got rid of pidfile support, now ftpwho -p will return
+                   the pid of the running standalone muddleftpd.
+       15) Change: Now scratchfile is used for locking in both inetd and
+                   standalone modes. This means the server doesn't need to
+                   lock against the config file and it could be changed
+                   without problems. 
+       16) Change: ftpwho program rewritten and much more useful now :-)
+       17) Bug Fix: A couple of missing returns fixed. Should have caused
+                    problems already :-)
+       18) Bug Fix: A bug in acl.c fixed where segfault would occur if no
+                    ACLs were specified for a user  
+       19) Change: Authentication modules can now cancel authentication of
+                   a user if a serious error occurs.
+       20) Change: Authentication is now cancelled if an authentication
+                   module cannot be found.
+       21) Change: If muddleftpd cannot bind to a port when it starts up,
+                   then it will exit. If it cannot bind to a port when
+                   you issue a SIGHUP, then it will log it and continue.
+       22) Change: Commands can now be disabled per group within the config
+                   file. 
+       23) Bug Fix: Data corruption bug after SIGHUP removes a virtual
+                    server fixed. 
+       24) Change: When a user connects, muddleftpd will fail to recognize
+                   all but a few commands needed to login.
+       25) Change: ftpwho reports vservers using their section names.
+       26) Change: Now download speed limits can be specified per group
+                   These are highly accurate and reasonably smooth.
+       27) Bug Fix: Porting fixes for weirder unixes including simple-glob
+                    fixes.
+       28) Bug Fix: Small bug parsing gid lists caused crashes with long
+                    suplemental gid lists.
+       29) Change: Speed limits now also apply to file lists and uploads.
+       30) Bug Fix: New listing code would possibly break when a partial write
+                    occured.
+       31) Change: Finished logindumpdata support.
+ 
+ Version 1.3.0:
+ 
+       1) Bug Fix: for large maxusers, the default settings would cause
+                   muddleftpd to croak. Fixed.
+       2) Bug Fix: for long usernames and non-default constant values, a
+                   possible problem with setting username has been fixed
+       3) Change: PAM module now does more logging to aid debugging.
+       4) Change: shared memory is more compact now, only storing thread
+                  users.
+       5) Change: EXPERIMENTAL INETD SUPPORT!!!!
+       6) Bug Fix: on systems that need -ldl for pam support, it would 
+                   cause pam support not to compile. Fixed.
+       7) Bug Fix: if muddleftpd is running inetd mode, now errormessages
+                   go to the system log.
+       8) Change: Log message now emmitted if non-existant auth method
+                  used.
+       9) Change: Better debug logging system now in place. Can work
+                  even with inetd
+       10) Bug Fix: Fix to MDTM. This broke netscape quite convincingly
+       11) Bug Fix: Fix for netscape race and maybe other clients.
+       12) Change: All configuration is in single file now! This improves
+                   performace muchly esp under load.
+       13) Documentation: Examples updated for new code!
+       14) Bug Fix: Fix to logging where SITE commands were logged twice.
+       15) Bug Fix: Listing bug fixed where files were being used as
+                    regular expressions.
+       16) Chnage: Replaced ACL code. New code also recognises mkdir and
+                   rmdir, chmod and chdir. Add only applies to files now.
+       17) Change: Now ip's can be denied as well as allowed with the new
+                   ipacl directive. Note that the order ipacl's are
+                   specified in is very important.
+       18) Change: Now log messages are generated when a user logs out
+                   of the server.
+       19) Bug Fix: User cannot specify PORT command with data port < 1024
+       20) Bug Fix: Total file size is now given when doing binary
+                    downloads, regardless of starting position. Other  
+                    ftp servers act this way, and some client expect it.
+       21) Bug Fix: Maximum timeout was not correctly set.
+       22) Change: Writing to control port now has timeout, so it cannot
+                   lock up.
+       23) Change: Continuation messages have new format that look nicer.
+       24) Change: New group system is working, It now traverses a list
+                   of groups in the user file to determine what group a
+                   user is. It needs more work ATM.
+       25) Change: added IP and name access lists to make group system
+                   very, very, very configurable.
+       26) Bug Fix: For systems which uses non-DES encryption, muddleftpd
+                    used crypt correctly.
+       27) Change: added hostname based matching and hostnames in logs. 
+       28) Change: reverse dns timout setting added
+       29) Change: Alternate long reply format option added, allows for bad
+                   proxys and stuff.
+       30) Change: VIRTUAL SERVER SUPPORT ADDED. Not yet completed or
+                   optimised for file descriptor usage.
+       31) Bug Fix: Fixed several small bugs found in 1.2.2.
+       32) Bug Fix: A minor bug working with parameters fixed.
+       33) Bug Fix: A bug when parsing config files caused tabs to be
+                    misinterpreted.
+       34) Change: Smart binding. This allow muddleftpd to minimize the
+                   number of file descriptors used when binding files.
+       35) Change: Zero binding. When used with smart binding above, allows
+                   virtual servers to be used on all servers. This basicly
+                   makes sure all binds are performed on address 0.0.0.0
+       36) Change: Using rlimits instead of manually checking memory size
+                   for determining overuse of memory.
+       37) Change: Made single configuration file loading to be less memory
+                   intensive.
+       38) Change: Server will now reload config file with a HUP signal.
+       39) Change: Server now lets you specify if you want to real chroot 
+                   to the rootdir instead of doing a pretend chroot. It is
+                   ignored if root access isn't avaliable. This provides
+                   extreme security for paranoid system administrators
+                   (like me!)
+       40) Change: When a user logs in, the uid/gid is switched to that
+                   user instead of being left as root. This reduces code
+                   size and improves security. I also seem to learn things
+                   the hard way (I should have had this ages ago)
+       41) Change: Ratio support. An external binary file is used for this,
+                   and users are added to it as they log in. Ratio's are
+                   implimented so multiple sessions are no problem. Ratios
+                   apply to both files and bytes, and can be persistant or
+                   non-persistant.
+       42) Change: Config changes. Now parameters are easier to specify,
+                   and including spaces is easy.
+       43) Change: By default, muddleftpd now doesn't allow access to non
+                   regular files (eg device files). To re-enable use
+                   devaccess in group sections.
+       44) Change: Full group support, include supplementry group lists.
+       45) Change: Added a ratio changing program, ratiotool. It can add,
+                   edit and psudo-delete ratio file entries. It is safe to
+                   use while the server is running.
+       46) Bug fix: Fixed a small bug that always put an extra / at the
+                    beginning of a filename in the log if rootdir is /
+       47) Change: If rootdir contains symlinks, they are now dereferenced
+                   as the user logs in.
+       48) Change: Added a realdir option. This will automaticly report the
+                   real directory name, with all symlinks dereferenced,
+                   instead of the internal construction.
+       49) Change: Added code to detect broken snprintf, and to work out
+                   which syntax it uses and use that syntax.
+       50) Change: Detects if double ints work correctly and disables
+                   ratios if they don't
+       51) Change: Added fxpallow option, so server-server transfers may
+                   work on a per-group basis.
+       52) Change: Implemented output buffer to make sure long replies are
+                   sent effeciently.
+       53) Change: Input from dumped files and user is now put through a
+                   filter that removes non-printable characters.
+       54) Change: Implemented options to specify long replies directly in
+                   the config file
+       55) Change: Data port handling rewritten, should be a little faster
+                   now.
+       56) Change: Sendfile() support implemented. This should improve 
+                   performace slightly, but linux needs a better sendfile :(
+       57) Change: Groups and vserver limits are handled in a much better
+                   way now. Faster for standalone operation, correct for
+                   inetd operation.
+       58) Change: Log now contains thread id so it is easier to trace what
+                   a specific user is doing
+ 
+ Version 1.2.10:
+ 
+       1) Bug Fix: Bug where % in pathname would cause weird errors when
+                   current directory was displayed. It was caused by using
+                   the output of one printf (with user supplied data)
+                   as the format string in the next. Fixed by removing all
+                   (except where it is obviously safe) non-constant format
+                   strings in the source. Entire source was checked for the
+                   problem.
+ 
+ Version 1.2.9:
+ 
+       1) Bug Fix: Mudpasswd backported from 1.3.X. Fixes problems with
+                   mudpasswd segfaulting.
+       2) Change: Included an init file for system V init scripts
+       3) Chnage: Added a spec file for rpm generation. Havn't tested it
+                  yet.
+ 
+ Version 1.2.8:
+       
+       1) Bug Fix: Another config file reading bug fixed. If you used tabs
+                   at the end of a value, they would not be discarded by
+                   the ftp server.
+       2) Bug Fix: Repaired the README file.
+ 
+ Version 1.2.7:
+ 
+       1) Bug Fix: Rename bug fixed. Ops :-) Occured because errno wasn't
+                   reset correctly.
+ 
+ Version 1.2.6:
+ 
+       1) Bug Fix: Fixed bug where garbage was printed if null password
+                   was supplied.
+ 
+ Version 1.2.5:
+ 
+       1) Bug Fix: snprintf madness fixed. Server now works for all known
+                   snprintf types.
+       2) Bug Fix: fixed the provided snprintf so it reports -1 if result
+                   is too long.
+       3) Bug Fix: ftpwho would segfault in certain denied access cases.
+ 
+ Version 1.2.4:
+ 
+       1) Bug Fix: Parsing problems with tab separating name and value
+                   pairs fixed. 
+       2) Change: Ftpwho program revamped. It can now do reverse IP lookups
+                  for hostnames and supports regular options. Run ftpwho -h
+                  to see options.
+       3) Bug Fix: Problems with zero length strings on ftp commands fixed.
+                   No real problems, just zero length parameters need to
+                   be detected and reported as missing parameters.
+       2) Bug Fix: A secuity problem with cddump relative files has been
+                   fixed. If the user could create a symlink as the name
+                   of a relative cddump file, the user could view any file
+                   on the system over the control connection.
+ 
+ Version 1.2.3 (was 1.1.1c)
+ 
+       1) Bug Fix: Active data connections now bind to specific interface.
+                   Old method seemed to fail when used with strict ip
+                   filewalls.
+       2) Bug Fix: If an error occured accepting a control connection, the
+                   server would bad.
+       3) Bug Fix: If the PASV command couldn't bind to a port, it wouldn't
+                   cleanly report the error.
+       4) Bug Fix: An extra close was hiding the real cause of data port
+                   connection failure.
+       5) Bug Fix: Some calls to create sockets were not checked correctly.
+       6) Bug Fix: No error was displayed if passive port connection 
+                   accept fails
+       7) Bug Fix: Slight change in Makefile so that CFLAGS is recognised.
+ 
+ Version 1.1.1b (now 1.2.2):
+ 
+       1) Bug Fix: if you didn't set authmethod in the config file, the
+                   server process would crash.
+       2) Bug Fix: if you use a non-DES crypt function, muddleftpd would
+                   not authenticate properly. This bugfix fixes for a least
+                   slackware 7.0.
+       3) Change: New versioning system. Now I copy the linux versioning
+                  system since I cannot get it right myself.
+       4) Bug Fix: if a list failed due that was not the fault of glob,
+                   then server would crash tring to free a non-existant
+                   variable:
+       5) Change: You can use group/usernames for uid/gid specification now
+                  in user config files and authentication modules.
+ 
+ Version 1.1.1a (now 1.2.1):
+ 
+       1) Bug Fix: Long usernames would cause the server to crash. Not an
+                   exploitable bug, but not very nice looking.
+       2) Bug Fix: files dumped over control connection were not logged
+                   correctly.
+ 
+ Version 1.1.1 (now 1.2.0):
+ 
+       1) Bug Fix: A minor memory leak was sealed.
+       2) Bug Fix: Changed ACL error code to EACCES instead of
+                   EPERM.
+       3) Documentation: Added the info file back.
+       4) Change: log entry generated when a user logs out of the ftp
+                  server
+       5) Bug Fix: Server will not allow client to specify a data port
+                   less than 1024.
+       6) Bug Fix: Changed byte count when starting download to total size
+                   of file regardless of restart position. Other ftp
+                   servers act this way, and some clients use this info.
+       7) Change: When authenticating users, the server will change to
+                  the configuration directory. This will improve
+                  robustness of marginally defined configurations.
+       8) Bug Fix: Maximum timeout was not set correctly when logging user
+                   in.
+       9) Bug Fix: Minor fixes for platform independance in mudpasswd.
+ 
+ Version 1.1.1beta3:
+ 
+       1) Bug Fix: invalid rootdir message didn't show root dir.
+       2) Bug Fix: fix for site commands being logged twice.
+       3) Documentation: info files removed for now since maintainer
+                         hasn't reponded to email.
+       4) Bug Fix: Directory listing problems solved.
+ 
+ Version 1.1.1beta2:
+ 
+       1) Bug Fix: Pam support didn't compile on system with dynamic linking
+                   in a library
+       2) Bug Fix: Small change to code to prevent problems if username
+                   length constants get changed.
+       3) Bug Fix: Fix to MDTM command, broke netscape access quite well :)
+       4) Bug Fix: Fix for netscape race and maybe other clients.
+ 
+ Version 1.1.1beta1:
+ 
+       1) Change: Changed the error message management system. Now much
+                  better.
+       2) Change: Help now contains descriptions for each command.
+       3) Change: Full shadow password support with account expiry.
+       4) Change: User now gets message as to why login fails.  
+       5) Bug Fix: strerror was compiled even if it already existed!
+       6) Change: PAM support has been added!
+       7) Bug Fix: now all root logins get demoted to user nobody like they
+                   should
+       8) Bug Fix: now user nobody from the password file is used to
+                   determine what user nobody is. Any system without a user
+                   nobody is in SERIOUS TROUBLE!
+       9) Change: Added the disabled user authentication which will disable
+                  a user.
+       10) Bug Fix: Added a copy of the usleep function for older computers.
+       11) Documentation: Fixed documentation for new features.
+       12) Bug Fix: Put limits on maximum generated string lengths to
+                    prevent users from filling virtual memory.
+       13) Change: Added SITE IDLE command.
+ 
+ Version 1.1.1beta0:
+ 
+       1) Change: Log message emitted when user cannot login due to bad
+                  root dir
+       2) Change: Error messages for socket connection are better handled.
+       3) Change: added -d option to list a directory instead of its
+                  contents.
+       4) Change: Major refit of auth code. Now all auth code is modularied
+                  into the different sources. Makes adding new auth schemes
+                  easily.
+       5) Change: new unix auth module can autodetect shadow passwords!
+       6) Change: config files can handle windows style files.
+       7) Change: added an internal password file support module.
+       8) Change: added runasuser option in main config file.
+       9) Change: removed runasuid and runasgid from main config file.
+       10) Change: created a simple mudpasswd program to modify internal
+                   password files.
+       11) Change: Minor server reply tweeks.
+       12) Documentation: Fixed examples for new code.
+       13) Change: Added the badauthwait option to the main config file to 
+                   cause the server to wait a specifed number of milliseconds 
+                   if the user doesn't provide the correct password.
+       14) Change: Added the userjail option to user files so when the user
+                   logs in, he/she will not be able to log into a new user.
+                   Good for anonymous accounts.
+       15) Change: Added the logintrys option to the main config file. This
+                   tells the server how many attempts a connection has to
+                   login before the server refuses to log the user in.
+ 
+ Version 1.1:
+ 
+       1) Documentation: Added man page and info pages. Thanks to 
+                         Jonas Oberg <address@hidden> for this.
+       2) Bug Fix: Spelling mistake in init.c fixed. Thanks to
+                   Jonas Oberg <address@hidden> for noticing my mistake.
+       3) Change: Server will now detect if it needs root access to bind to a
+                  port and gives a message to the user if it is so.
+                   
+ Version 1.1.beta3: Final beta if no bugs are found!
+ 
+       1) Bug Fix: Fixed Makefile so QUIET=1 option is recognised.
+       2) Bug Fix: Fixed spelling mistake in init.c (already instead of 
+                   aleady)
+       3) Documentation: Added some documentation on how to build and install
+                         muddleftpd (muddleftpd.txt)
+       4) Documentation: Updated README and INSTALL.
+       5) Bug Fix: If unixuser is specified and that specified user doesn't
+                   exist, login will fail automaticly.
+       6) Bug Fix: If it can't load a user's config file, it will now
+                   output a log message.
+       7) Bug Fix: Checks on files and directories now done in user auth
+                   files.
+       8) Change: Minor optimisations to improve processing of file
+                  dumping, streamlines code.
+       9) Bug Fix: busydump was crashing, due to incorrect working
+                   directory value, fixed!
+       10) Bug Fix: the username in the shared memory structure is properly
+                    updated at the correct time. Allows a user with
+                    maxconnect 1, to relogin.
+       11) Documentation: Added documentation for user configuration files.
+       12) Bug Fix: now mud authenication stuff is not compiled by default.
+       13) Documentation: Added documentation for cookies in user config
+                          files.
+       14) Documentation: Added documentation for accepted ftp commands.
+       15) Documentation: Gave up on HTML documentation!
+ 
+ Version 1.1.beta2:
+ 
+       1) Change: Failed magic cookie tranformations are logged so that the
+                  admin can find if cookies fail. (I decided that this
+                  change is minor enough and important enough to be added 
+                  before version 1.1)
+       2) Bug Fix: Download statistics were not correctly tallyed.
+       3) Documentation: Added documentation for dumped file magic cookies
+                         (cookies.txt)
+       4) Documentation: Added documentation for ftpwho. (ftpwho.txt)
+       5) Documentation: changed user.other so that if the example config
+                         is directly used, it won't open gaping holes in the
+                         system.
+       6) Bug Fix: Server dies improperly on startup if shared memory isn't 
+                   initalized
+       7) Bug Fix: Commented out error message about shadow passwords not
+                   working as root. Change 1 should produce a log entry if
+                   the user tries to use shadow passwords without root
+                   access.
+       8) Documentation: Created a new set of examples, that are more secure,
+                         and better for creating a full configuration.
+       9) Bug Fix: Updated socket.c, now if the server fails binding data
+                   connections for any reason, it lets the computer choose
+                   the port.
+ 
+ Version 1.1.beta1: Thanks to Mike Javorski <address@hidden> for the
+                  first 3 fixes.
+ 
+       1) Bug Fix: Removed SO_SNDLOWAT and SO_RCVLOWAT log messages because
+                   they are unimportant and seem to be annoying people :)
+                   The feature is still there, it will just fail quietly on
+                   systems that have problems with it.
+       2) Bug Fix: Manual page installation fixed (but commented out becuase
+                   the manual page is yet to be written.
+       3) Bug Fix: Fixed ftpwho.c for ANSI C complience. Now main returns 
+                   an int. 
+       4) Bug Fix: Defined prototypes for listing functions and found a bug
+                   where they wern't supplied correct parameters.
+       5) Bug Fix: Server now checks if you are already logged in before 
+                   accepting a password command.
+       6) Bug Fix: Ops, I must have been on drugs to not have noticed this
+                   bug before now (and write the broken code). SIZE in ascii 
+                   mode was badly broken.
+       7) Bug Fix: SITE CHMOD was broken and logged out the client
+       8) Bug Fix: HELP missed the first command when printing out a
+                   command list.
+       9) Bug Fix: When using runasuid/runasgid, the parent terminal holder
+                   would not get killed due to the process not having 
+                   permission after changing uid.
+       10) Bug Fix: When using runasuid/runasgid, and listening on ports
+                    less than 1024, muddleftpd would fail to create data
+                    ports because it couldn't bind to the port.
+       11) Bug Fix: prototypes in ftpd.h for procnum.c fixed.
+       12) Bug Fix: ftpwho.c now includes <unistd.h> as required.
+       13) Bug Fix: fixed compiler warning compiling sglob.c on systems
+                    without glob.
+       14) Bug Fix: Prototype for strerror if the system hasn't got an
+                    strerror
+       15) Bug Fix: Fixed problems about double defining crypt
+       16) Bug Fix: -lsocket and -lnsl should work for machines that need
+                    them now.
+ 
+ Version 1.1.beta0:
+ 
+       1) Bug Fix: forkwrapper is declared int instead of pid_t in ftpd.h
+                   fixed.
+       2) Bug Fix: On systems that don't support GLOB_PERIOD, compile will
+                   fail, fixed.
+       3) Documentation: Added some documentation for the main config file, 
+                         in doc/config.txt
+       4) Bug Fix: Compile warning fixed for ftp.c
+       5) Bug Fix: Fixed race condition in starting up program where tty
+                   could hang if the parent recieved the signal to
+                   give it back too soon.
+       6) Documentation: Added some HTML documentation (just a quick 
+                         conversion of doc/config.txt)
+       
+ Version 1.1.alpha5: Imposing a feature freeze for Version 1.1. Only bugfixes
+                   and documentation from here.
+ 
+       1) Change: Magic cookies when authing clients is now handled more
+                  gracefully. No user side changes. This allows Change 6.
+       2) Bug Fix: Empty listing caused memory leak. Fixed.
+       3) Change: Server now holds the terminal until after the startup
+                  messages so the prompt occurs after it.
+       4) Change: Startup message fixed for correctness.
+       5) Bug Fix: pids are now type pid_t, gids are now type gid_t, and
+                   uids are now type uid_t in my program. They were ints
+                   before!.
+       6) Change: Now magic cookies work in dumped files (eg welcome file)
+                  so you can give info out. The cookies are similar to the
+                  real wu.ftpd cookies.
+       7) Change: Added email option in config file for magic cookie %E.
+       8) Change: Now you can bind to a port to a specific interface by
+                  using port/ip as a parameter to ftpport. eg to bind 
+                  port 21 on the loopback device use "ftpport 21/127.0.0.1"
+                  in the config file.
+ 
+ Version 1.1.alpha4:
+ 
+       1) Change: SITE command now operates similarly to normal command. No
+                  user visible changes.
+       2) Change: Messages have changed so that the code is more general.
+       3) Change: STAT ACCESS has been moved over the SITE ACCESS.
+       4) Change: help routine is more generalized, giving better results,
+                  less code and more maintainablity.
+       5) Change: Now I use config.h instead of lots of compile options.
+                  Thanks to Decklin Foster <address@hidden> for the
+                  patch.
+       6) Change: The pidfile is used to check if muddleftpd is still
+                  running. If it is, muddleftpd refuses to start. Note, you
+                  can still have multiple instances of muddleftpd if they
+                  run with different config files.
+       7) Bug Fix: config file name was not initalized properly.
+       8) Change: Added a new user config option (quitdump) that prints a
+                  file when the user quits.
+ 
+ Version 1.1.alpha3:
+ 
+       1) Bug Fix: New parameter bug where process will segfault if it
+                   cannot correctly substitue a %(a,b)h parameter.
+       2) Change: Ftp listing is better now, it recognises the -a option
+                  and displays all files. This improves interpolability
+                  with misbehaving clients.
+       3) Change: I removed the status reporting option and the code that
+                  does it.
+       4) Change: Shared memory used by muddleftpd can now be externally
+                  accessed. (for things like ftpwho)
+       5) Change: Added a simple ftpwho program that actually works
+                  without races by accessing the shared memory.
+       6) Change: The default config file is now specified in config.h
+ 
+ Version 1.1.alpha2:
+ 
+       1) Change: Changed the status reporting so it now dumps info into a
+                  file that can be read by other programs.
+       3) Change: The admin now has the option to create a pidfile as
+                  muddleftpd starts.
+       2) Change: Changed the way parameters are processed. Now you can
+                  select a range of characters to include. eg %(10,12)h 
+                  means to substitute characters 10 through 12 into the
+                  string. The old %h still works.
+ 
+ Version 1.1.alpha1:
+ 
+       1) Change: Added simple shadow password support
+       2) Change: Changed the way listing works. Simpler, easier
+       3) Change: now STAT <filename> works.
+       4) Change: A list cannot be longer than MAXLISTSIZE
+       5) Bug Fix: A long running LIST -n ./ bug has been fixed. It caused
+                   an embarrasing infinite loop. Been in there for ages.
+                   A big thanks to Richard(address@hidden) for the 
+                   tipoff.
+       6) Bug Fix: Resume position should not be allowed to be negative.
+ 
+ Version 1.1.alpha0:   * means ported back to 1.0
+       
+       1)*Bug Fix: Rename fixed again to check if RNFR was run before RNTO
+       2) Change: The main routine now uses the select.c services.
+       3) Change: The server can bind to many ports, and serve ftp over
+                  them
+       4)*Bug Fix: Memory leak in displaying symbolic links in listing.
+       5) Change: Internal list function now displays setuid/setgid and
+                  sticky bit. Rewrote to be much smaller.
+       6)*Bug Fix: Fixed ENOTDIR error to becone MYERR_NODIR instead of
+                   MYERR_NOFILE in file.c
+       7)*Bug Fix: Minor changes to error descriptions in ftp.c
+       8) Change: ~ works for going to your home directory.
+       9) Change: Download/Upload now don't memmove buffer.
+       10) Change: make a substitute glob using old BSD re_comp calls
+                   for very old systems.
+       11)*Bug Fix: Uid/Gid cache full causes problems. 
+       12) Change: for passive downloads, makes sure the host that connects
+                   to the dataport is also the host that the control port
+                   is connected to
+       13)*Bug Fix: Obscure bug in ftplist.c fixed!
+       14) Change: The server sets the high and low water marks for the
+                   sockets on opening a data connection to improve
+                   performace.
+       15) Change: Added the STOU command!
+       16) Change: Added the ability to type a file before the user logs in
+         17) Change: Added the ability to type a file when the user enters a
+                   directory.
+       18) Change: The welcome file is now an absolute filename instead of
+                   relative to rootdir
+       19)*Bug Fix: Timeout didn't get updated properly when user logged on.
+       20) Change: Added timeout to STAT command.
+       21) Change: Added the APPE command!
+       22) Change: Added the ALLO command. Does nothing.
+       23) Change: Added the ACCT command. Does nothing.
+       24)*Bug Fix: The server didn't kill children ftpd processes. Now it
+                    does.
+       25)*Bug Fix: If you didn't specify a groupname in a user file, the
+                    server would crash.
+       26) Change: Changed maxthreads directive to maxusers.
+       27) Change: Cleaned up reading of commands.
+       28) Change: Started to use assertions to debug code.
+       29) Bug Fix: Server full log message not logged correctly.
+       30) Change: select.c adjusted to work better.
+       31) Bug Fix: server made 2 replys on logout.
+       32) Bug FIx: server can handle lots of dataconnections now.
+       33) Change: now too many login message is configurable per user
+                   using the busydump directive.
+       34) Change: ASCII upload resume disabled. It is not actually
+                   possible to this safely. Use the APPE command instead.
+       35) Change: Changed data collection to use shared memory rather than
+                   pipes. Faster, easier to access and allows future
+                   changes.
+       36) Change: Error messages now output the filename and line the
+                   error occured on.
+       37) Change: I am starting to use assersions to test features, find
+                   bugs.
+       38) Bug Fix: Server exits if it can't write to the log file, i.e
+                    disk full or other fatal error.
+       39) Change: Passive is handled better througth the main select
+                   handler.
+       40) Change: A simple strerror replacement has been thrown in for
+                   unlucky systems that don't have it.
+       41) Bug Fix: High and low water marks are only set if the constants
+                    for them exist. See 14.
+       42) Bug Fix: --prefix parameter in configure works as expected.
+ 
+ Version 1.0: These fixed are ported back from version 1.1.alpha0.
+ 
+       1) Bug Fix: very obscure and rare bug fixed in ftplist.c 
+       2) Bug Fix: Memory leak fixed in listing symbolic links.
+       3) Bug Fix: Rename fixed to check if the command RNFR was
+                   run first.
+       4) Bug Fix: Fixed ENOTDIR to become MYERR_NODIR instead of
+                   MYERR_NOFILE in file.c 
+       5) Bug Fix: Modified error descriptions in error.c 
+       6) Bug Fix: Fixed problems with full UID/GID caches.
+       7) Bug FIx: Timeout wasn't updated when user logged in. 
+       8) Bug Fix: children processes are now automaticly killed when 
+                   you kill the parent. 
+       9) Change: Changed maxthreads to maxusers in the config file
+       10) Bug Fix: If you don't specify a groupname in the user config 
+                    file, then the server will crash. 
+ 
+ Version 1.0.beta3:
+ 
+       1) Bug Fix: Buffers in acl.c fixed. Checked the rest of the code for
+                   possible buffer problems.
+       2) Bug Fix: stats.c buffers fixed. (not really a problem)
+       3) Bug Fix: pnums.c buffers fixed. (not really a problem)
+       4) Bug Fix: ftplist.c buffers fixed. (not really a problem)
+       5) Bug Fix: Rename properly fixed. For some reason it worked with
+                   the bug, and that worries me a little!
+       6) Change: reentrant.c (old name for original threaded version)
+                  cleaned up a little.
+ 
+ Version 1.0.beta2:
+ 
+       1) Bug Fix: QUIT stopped working on 1.0.beta1, now fixed. 
+       2) Bug Fix: Buffers in auth.c fixed completely.
+       3) Bug Fix: newfile.c has a realloc bug in it. ie it used a
+                   pointer to the buffer after remalloc was run, and since
+                   realloc may move the data to a new location, it was
+                   unstable but difficult to debug!
+       4) Bug Fix: a couple of memory over-freeing bugs fixed.
+       5) Change: Symbolic links listed properly.
+       
+ Version 1.0.beta1:
+ 
+       1) Bug Fix: unimplemented type would print response code twice.
+       2) Bug Fix: %U wasn't recognized unless unixuser was specified.
+       3) Bug Fix: Permanent group changes specified in config file would
+                   not work.
+ 
+       4) Change: FTP server now runs data transfers (almost) completely
+                  non-blocking. Timeout and ABOR work properly. ASCII
+                  resume works now too.  
+       5) Change: Most of the code has been rewritten to use dynamic
+                  buffers, removing most problems with fixed buffer code.
+       6) Change: cdup, pwd, and cwd all use the same code now, thus all
+                  return the current directory
+       7) Change: mkdir now uses the 257 return code.
+       8) Change: all commands now give better error messages based on
+                  the real error, not the most likely error.
+ 
+ Version 1.0.beta0:
+ 
+       1) First Version with CHANGES file.
Index: muddleftpd/configure.ac
diff -c /dev/null muddleftpd/configure.ac:1.3.2.1
*** /dev/null   Sun Nov  2 13:51:35 2003
--- muddleftpd/configure.ac     Sun Nov  2 13:51:35 2003
***************
*** 0 ****
--- 1,223 ----
+ dnl Process this file with autoconf to produce a configure script.
+ AC_INIT
+ AC_PREREQ(2.54)
+ 
+ AC_CONFIG_SRCDIR([src/acl.c])
+ AC_CONFIG_HEADER(config.h)
+ 
+ dnl Checks for programs.
+ AC_PROG_CC
+ 
+ dnl Damn this, I hate writing tests like this!
+ AC_DEFUN(AC_PROG_CC_SWITCH, [
+ dnl just run gcc program with -dynamic switch
+ 
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=
+ echo $ac_n "checking whether ${CC-cc} accepts -$1""... $ac_c" 1>&6
+ echo "configure: checking whether ${CC-cc} accepts -$1" >&5
+ echo 'void f(){}' > conftest.c
+ if test -z "`${CC-cc} -$1 -c conftest.c 2>&1`"; then 
+   ac_cv_prog_cc_switch=yes
+ else
+   ac_cv_prog_cc_switch=no
+ fi
+ rm -f conftest*  
+ 
+ echo "$ac_t""$ac_cv_prog_cc_switch" 1>&6
+ if test "$ac_cv_prog_cc_switch" = yes; then
+   CFLAGS="$ac_save_CFLAGS -$1"
+ else
+   CFLAGS=$ac_save_CFLAGS
+ fi
+ ])
+ 
+ 
+ dnl Replace `main' with a function in -lcrypt:
+ AC_CHECK_LIB(crypt, main)
+ AC_SEARCH_LIBS(connect, socket)
+ AC_SEARCH_LIBS(gethostbyname, nsl)
+ AC_SEARCH_LIBS(dlopen, dl)
+ AC_CHECK_LIB(pam, main)
+ AC_CHECK_LIB(cap, cap_init)
+ 
+ dnl Checks for header files.
+ AC_HEADER_DIRENT
+ AC_HEADER_STDC
+ AC_HEADER_SYS_WAIT
+ AC_CHECK_HEADERS(fcntl.h sys/time.h syslog.h unistd.h sys/uio.h)
+ AC_CHECK_HEADERS(crypt.h dlfcn.h sys/capability.h netinet/in_systm.h stdarg.h)
+ 
+ dnl Checks for typedefs, structures, and compiler characteristics.
+ AC_HEADER_TIME
+ AC_STRUCT_TM
+ AC_TYPE_UID_T
+ 
+ dnl Checks for library functions.
+ AC_TYPE_SIGNAL
+ AC_FUNC_STRFTIME
+ AC_CHECK_FUNCS(mkdir rmdir select socket strstr)
+ 
+ dnl
+ dnl check to see if snprintf returns what we expect.
+ dnl
+ AC_MSG_CHECKING([to see if snprintf work correctly])
+ 
+ AC_TRY_RUN([
+ #include <stdio.h>
+ #include <unistd.h>
+ 
+ int main()
+ {
+       FILE *outfile = fopen("snprintf-ok", "w");
+       char buffer[20];
+       int result;
+       int ok;
+       buffer[10] = 32;
+       if (outfile == NULL) exit(1);
+       result = snprintf(buffer, 10, "hellohellohello");
+ 
+       ok = 0;
+       if ((result == 15) && (buffer[10] == 32))
+               ok = 1;
+       
+       if (ok)
+               result = snprintf(NULL, 0, "hellohellohello");
+ 
+       if ((result == 15) && ok)
+               fprintf(outfile, "yes");
+       else
+               fprintf(outfile, "no");
+       fclose(outfile);
+       exit(0);
+ }],[
+ SNPCOMPAT=`cat snprintf-ok`
+ rm -f snprintf-ok
+ AC_MSG_RESULT([$SNPCOMPAT])],
+ [AC_MSG_RESULT([error, assuming no])],
+ [AC_MSG_RESULT([cross-compiling, assuming no])])
+ 
+ if test "$SNPCOMPAT" = "yes"; then
+       AC_CHECK_FUNCS(snprintf vsnprintf)
+ fi
+ 
+ AC_CHECK_TYPE(off_t)
+ 
+ dnl
+ dnl check to see if we have LFS under linux
+ dnl
+ 
+ AC_SYS_LARGEFILE()
+ 
+ dnl AC_MSG_CHECKING([for Linux LFS])
+ 
+ dnl AC_TRY_RUN([
+ dnl #define _GNU_SOURCE
+ dnl #define _LARGEFILE64_SOURCE
+ dnl #define _FILE_OFFSET_BITS 64
+ dnl #include <stdio.h>
+ dnl #include <unistd.h>
+ 
+ dnl int main()
+ dnl {
+ dnl   FILE *outfile = fopen("lfs-ok", "w");
+ dnl 
+ dnl   if (outfile == NULL) exit(1);
+ dnl   
+ dnl   if ((sizeof(off_t) == 8) && (sizeof(long int) == 4))
+ dnl           fprintf(outfile, "yes");
+ dnl   else
+ dnl           fprintf(outfile, "no");
+ dnl   fclose(outfile);
+ dnl   exit(0);
+ dnl }],[
+ dnl LINUXLFS=`cat lfs-ok`
+ dnl rm -f lfs-ok
+ dnl AC_MSG_RESULT([$LINUXLFS])],
+ dnl [AC_MSG_RESULT([error, assuming no])],
+ dnl [AC_MSG_RESULT([cross-compiling, assuming no])])
+ 
+ dnl if test "$LINUXLFS" = "yes"; then
+ dnl   AC_DEFINE(HAVE_LINUX_LFS,,[linux like large file support for 32 bit 
systems])
+ dnl fi
+ 
+ AC_CHECK_FUNCS(memmove dlopen)
+ AC_CHECK_FUNCS(strerror getspnam)
+ AC_CHECK_FUNCS(usleep pam_start fgetpwent fgetgrent sendfile)
+ AC_CHECK_FUNCS(cap_init seteuid setegid)
+ AC_PROG_CC_SWITCH(rdynamic)
+ 
+ dnl check for additional features
+ 
+ dnl Checks for libraries.
+ 
+ # MUD module
+ AC_ARG_WITH(authmud,
+       AC_HELP_STRING([--with-authmud], [create MUD authentication module. 
(no)]), 
+       authmud=$withval, authmud=no
+ )
+ 
+ if test "$authmud" != no; then
+       AC_CONFIG_SUBDIRS(modules/auth/authlibmud)
+       modules="$modules authmud"
+ fi
+ 
+ # SMB module
+ AC_ARG_WITH(authsmb,
+       AC_HELP_STRING([--with-authsmb], [create SMB authentication module. 
(yes)]), 
+       authsmb=$withval, authsmb=yes
+ )
+ 
+ if test "$authsmb" != no; then
+       AC_CONFIG_SUBDIRS(modules/auth/authlibsmb)
+       modules="$modules authsmb"
+ fi
+ 
+ # MSQL module
+ AC_ARG_WITH(authmsql,
+       AC_HELP_STRING([--with-authmsql], [create mSQL authentication module. 
(no)]), 
+       authmsql=$withval, authmsql=no
+ )
+ 
+ AC_ARG_WITH(msqlpath, 
+       AC_HELP_STRING([--with-msqlpath], [specify the top level of the msql 
installation tree.  (default is /usr/local/Hughes)]),
+         msqltop=$withval, msqltop=/usr/local/Hughes
+ )
+ 
+ if test "$authmsql" != no; then
+       AC_CONFIG_SUBDIRS(modules/auth/authlibmsql)
+       modules="$modules authmsql"
+ fi
+ 
+ # MYSQL module
+ AC_ARG_WITH(authmysql, 
+     AC_HELP_STRING([--with-authmysql=DIR], [creates MySQL authentication 
module, optionally specifies the DIR of mysql files]),
+     [authmysql="$withval"],
+     [authmysql=no])
+ 
+ if test "$authmysql" != no; then
+       AC_CONFIG_SUBDIRS(modules/auth/authlibmysql)
+       modules="$modules authmysql"
+ fi
+ 
+ # work out zerobind default (false on linux, true on other systems)
+ 
+ case `uname -s` in
+       Linux)
+               zero_bind=FALSE
+               ;;
+       *)
+               zero_bind=TRUE
+               ;;
+ esac
+ AC_SUBST(zerobind, "$zero_bind")
+ 
+ AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile defaults.h])
+ AC_OUTPUT
+ 
+ echo
+ echo Muddleftpd is now ready to be compiled!
+ echo
+ echo Modules selected for compile: $modules
+ echo
+ 
Index: muddleftpd/doc/Makefile.in
diff -c /dev/null muddleftpd/doc/Makefile.in:1.3.4.1
*** /dev/null   Sun Nov  2 13:51:35 2003
--- muddleftpd/doc/Makefile.in  Sun Nov  2 13:51:35 2003
***************
*** 0 ****
--- 1,70 ----
+ # Copyright (C) 1999 Beau Kuiper
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+ 
+ include ../Makefile.defs
+ 
+ address@hidden@
+ # where the man pages are stored
+ address@hidden@
+ 
+ # where info files should be stored
+ address@hidden@
+ 
+ address@hidden@
+ DOCSRC = info/muddleftpd.texi
+ 
+ DOCTARGET =
+ 
+ ifdef MAKEINFO
+ DOCOBJ = $(DOCSRC:.texi=.info)
+ DOCTARGET += infofile
+ endif
+ 
+ all: doc
+ 
+ ifdef MAKEINFO
+ infofile:
+       $(MAKEINFO) $(DOCSRC) -o $(DOCOBJ)
+ 
+ doc: $(DOCTARGET)
+ else
+ 
+ doc:
+       echo There is no makeinfo on this machine
+ endif
+ 
+ install: all
+       mkdir -p $(MANDIR)/man1
+       install man/muddleftpd.1 -m 644 $(MANDIR)/man1/$(MUDOUTPROG).1
+       install man/ftpwho.1 -m 644 $(MANDIR)/man1/$(WHOPROG).1
+       install man/mudpasswd.1 -m 644 $(MANDIR)/man1/$(MUDPASSWDPROG).1
+       mkdir -p $(INFODIR)
+       install $(DOCOBJ) -m 644 $(INFODIR)
+       mkdir -p $(DOCDIR)/doc/muddleftpd
+       install -m 644 cookie.txt $(DOCDIR)/doc/muddleftpd/cookie.txt
+       install -m 644 ftpcmds.txt $(DOCDIR)/doc/muddleftpd/ftpcmds.txt
+       install -m 644 muddleftpd.txt $(DOCDIR)/doc/muddleftpd/muddleftpd.txt
+       install -m 644 mudlogd.txt $(DOCDIR)/doc/muddleftpd/mudlogd.txt
+       install -m 644 mudpasswd.txt $(DOCDIR)/doc/muddleftpd/mudpasswd.txt
+       install -m 644 reference.txt $(DOCDIR)/doc/muddleftpd/reference.txt
+ 
+ clean:
+ 
+ distclean: clean
+       rm -f Makefile *~
+ 
+ maintainer-clean: distclean
+       rm -f $(DOCOBJ)
Index: muddleftpd/modules/auth/authlibexample/Makefile.in
diff -c /dev/null muddleftpd/modules/auth/authlibexample/Makefile.in:1.1.8.1
*** /dev/null   Sun Nov  2 13:51:35 2003
--- muddleftpd/modules/auth/authlibexample/Makefile.in  Sun Nov  2 13:51:35 2003
***************
*** 0 ****
--- 1,36 ----
+ 
+ address@hidden@
+ address@hidden@
+ address@hidden@
+ address@hidden@
+ 
+ SRC=authunix.c
+ OBJ=$(SRC:.c=.o)
+ 
+ address@hidden@
+ address@hidden@
+ 
+ address@hidden@/muddleftpd
+ LIBNAME=libauthunix.so
+ address@hidden@
+ 
+ all: $(OBJ)
+       $(CC) $(CFLAGS) $(LIBS) -shared -Xlinker -x -o $(LIBNAME) $(OBJ)
+ 
+ clean: 
+       rm -fr autom4te.cache
+       rm -f *.o *~ DEADJOE $(LIBNAME)
+ 
+ install: all
+       mkdir -p $(libdir)
+       mkdir -p $(DOCDIR)/doc/muddleftpd
+ 
+       install README -m 644 $(DOCDIR)/doc/muddleftpd/README.authexample
+       install $(LIBNAME) -m 644 $(libdir)
+ 
+ 
+ distclean: clean
+       rm -f config.h Makefile config.log config.cache config.status
+ 
+ maintainer-clean: distclean
+       rm -f configure config.h.in
Index: muddleftpd/modules/auth/authlibexample/auth.h
diff -c /dev/null muddleftpd/modules/auth/authlibexample/auth.h:1.1.8.1
*** /dev/null   Sun Nov  2 13:51:35 2003
--- muddleftpd/modules/auth/authlibexample/auth.h       Sun Nov  2 13:51:35 2003
***************
*** 0 ****
--- 1,150 ----
+ /* Copyright (C) 1999 Beau Kuiper
+ 
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2, or (at your option)
+    any later version.
+ 
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+ 
+ /* Includes */
+ 
+ #include <stdio.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <stdarg.h>
+ 
+ #ifndef INT_MAX
+ #define INT_MAX 0x7FFFFFFF
+ #endif
+ 
+ /* Inportant Constants */
+ 
+ /* yep, true and false */
+ #define               FALSE           0
+ #define               TRUE            !FALSE
+ 
+ /* constants declaring various log levels.  */
+ #define               MYLOG_DACCESS   1    /* denied access to server because 
of ip */
+ #define               MYLOG_FTRANS    2    /* file transfer */
+ #define               MYLOG_COMMAND   4    /* command from client */
+ #define               MYLOG_RESPONSE  8    /* respone to client commands */
+ #define               MYLOG_INFO      16   /* informational logs */
+ #define       MYLOG_LOGIN     32   /* login information */
+ #define       MYLOG_DEBUG     64   /* debug log */
+ 
+ /* set err to this to tell the server the result of getting an auth handle */
+ #define               AUTH_OK         0       /* got handle, everything good 
*/
+ #define               AUTH_USERNKNOW  1       /* This module is not 
responsible for
+                                          current user, move to next module */
+ #define               AUTH_ERROR      2       /* A bad error occured, stop 
attempting
+                                          to authenticate user */
+ 
+ /* a couple of macros to help :-) */
+ #define MAXIMUM(x, y)         (x) > (y) ? (x) : (y)
+ #define MINIMUM(x, y)         (x) > (y) ? (y) : (x)
+ 
+ /* Typedefs */
+ 
+ /* NEWFILE is a structure used with muddleftpd special text file handling
+    routines. Don't directly modify its structure */
+ typedef struct
+ {
+       int fd;
+       void *buffer;
+       int eof;
+ } NEWFILE;
+ 
+ /* here as some prototypes for functions you can use */
+ 
+ /* MEMORY FUNCTIONS */
+ 
+ /* Just like malloc, but it checks for out of memory */
+ extern void *mallocwrapper(int size);
+ 
+ /* Almost same a realloc, execpt supply double pointer of memory area(inarea)
+  * and the new size */
+ void reallocwrapper(int size, void **inarea);
+ 
+ /* Same as strdup, but checks for out of memory result */
+ char *strdupwrapper(char *s);
+ 
+ /* to free areas created by strdupwrapper and mallocwrapper, It also updates
+  * counters used to determine memory leakage, so you should use this instead
+  * of plain free() */
+ void freewrapper(void *tofree);
+ 
+ /* just memmove because muddleftpd will supply a replacement if the system
+  * doesn't supply one */
+ #ifndef HAVE_MEMMOVE
+ char *memmove(void *dest, void *src, int n);
+ #endif
+ 
+ /* STRING FUNCTIONS */
+ 
+ /* This drops all characaters with a code < 32 in the string suppled. This is 
+  * done in place */
+ void strtrimspace(char *string);
+ 
+ /* This counts to number of occurences of char tok in the supplied string */
+ int strchrcount(char *string, char tok);
+ 
+ /* this is vsprintf except the result is given as a string allocated using
+  * mallocwrapper. Use freewrapper to reclaim the space it uses */
+ char *safe_vsnprintf(char *format, va_list ap);
+ 
+ /* this is the same as sprintf execpt the result is given as a string 
allocated
+  * in dynamic memory using mallocwrapper. Use freewrapper to free it */
+ char *safe_snprintf(char *format, ...);
+ 
+ /* gets suplementary gids of user */
+ gid_t *getusergrouplist(char *username);
+ 
+ /* these are for really bad errors. Don't use either errormsg or 
errormsgfatal.
+  * Use the ERRORMSG and ERRORMSGFATAL macros instead. BTW, ONLY USE THESE
+  * FOR ERRORS THAT CANNOT BE SOLVED ANYWAY ELSE */
+ void errormsg( char *errmessage, char *file, int line );
+ void errormsgfatal( char *errmessage, char *file, int line );
+ #define ERRORMSGFATAL(x)      errormsgfatal(x, __FILE__, __LINE__)
+ #define ERRORMSG(x)           errormsg(x, __FILE__, __LINE__)
+ 
+ /* LOG OPERATIONS */
+ 
+ /* Adds a log entry to muddleftpd's logs. type is one of the constants
+  * specified above. peer is the same peer pointer passed to the gethandle
+  * function. desc is the string to add to the log */
+ extern void log_addentry(int type, void *peer, char *desc);
+ 
+ /* Exactly the same a log_addentry, but muddleftpd will use freewrapper
+  * on desc so you can use safe_snprintf for desc */
+ extern void log_giveentry(int type, void *peer, char *desc);
+ 
+ /* the debug log */
+ extern void debuglog(char *format, ...);
+ 
+ /* CONFIF FILE OPERATIONS */
+ 
+ char *strsplit(char *, char *, char *);
+ void substitute(char **inputstr, char *strin, char *strout);
+ int loadconfigfile(char *filename, int (* confighandler)(char *, char *, int, 
void *), void *configdata);
+ void *loadconfigcache(char *filename);
+ char *mktokconfstr(void *tset, int section, char *setting, char *defaul);
+ void loadintfromconfig(void *cache, int section, char *setting, int *to, int 
def);
+ void loadstrfromconfig(void *cache, int section, char *setting, char **to, 
char *def);
+ void freeconfigcache(void *cache);
+ char **makeconfiglist(void *cache, char *section, char *label);
+ 
+ extern NEWFILE *nfopen(char *filename);
+ extern NEWFILE *nfdopen(int fd);
+ extern char *nfgetcs(NEWFILE *file, char testchar);
+ extern void nfclose(NEWFILE *file);
+ 
+ extern int chkpassword(char *, char *);
+ 
Index: muddleftpd/modules/auth/authlibmsql/Makefile.in
diff -c /dev/null muddleftpd/modules/auth/authlibmsql/Makefile.in:1.1.8.1
*** /dev/null   Sun Nov  2 13:51:35 2003
--- muddleftpd/modules/auth/authlibmsql/Makefile.in     Sun Nov  2 13:51:35 2003
***************
*** 0 ****
--- 1,36 ----
+ 
+ address@hidden@
+ address@hidden@
+ address@hidden@
+ address@hidden@
+ 
+ SRC=authmsql.c
+ OBJ=$(SRC:.c=.o)
+ 
+ address@hidden@
+ address@hidden@
+ 
+ address@hidden@/muddleftpd
+ LIBNAME=libauthmsql.so
+ address@hidden@
+ 
+ all: $(OBJ)
+       $(CC) $(CFLAGS) -shared -Xlinker -x -o $(LIBNAME) $(OBJ) $(LIBS)
+ 
+ install: all
+       mkdir -p $(libdir)
+       mkdir -p $(DOCDIR)/doc/muddleftpd
+ 
+       install README -m 644 $(DOCDIR)/doc/muddleftpd/README.authmsql
+       install $(LIBNAME) -m 644 $(libdir)
+ 
+ 
+ clean: 
+       rm -f *.o *~ DEADJOE $(LIBNAME)
+ 
+ distclean: clean
+       rm -f config.h Makefile config.log config.cache config.status
+ 
+ maintainer-clean: distclean
+       rm -f config.h.in configure
+ 
Index: muddleftpd/modules/auth/authlibmsql/README
diff -c /dev/null muddleftpd/modules/auth/authlibmsql/README:1.2.8.1
*** /dev/null   Sun Nov  2 13:51:35 2003
--- muddleftpd/modules/auth/authlibmsql/README  Sun Nov  2 13:51:35 2003
***************
*** 0 ****
--- 1,152 ----
+ mSQL authentication Module. (authlibmsql) Version 0.1
+ 
+ This module allows muddleftpd 1.3.4 and above authenticate using a mSQL
+ server. This module will read client information from a supplied
+ table/database within mSQL. It does not modify any data on the server. It
+ supports:
+ 
+       * Password encryption: Passwords can be encrypted on the mSQL
+         server in either plaintext (no encryption) or crypt based methods.
+       * Support for custom SELECT query strings. This allows tremendous
+         flexibility for choosing the structure of the tables muddleftpd
+         retreive data from.
+ 
+ Note: This server is based very heavily off the mysql authentication module.
+       Please excuse any reference to mysql I may make here as most of this
+       module is copied directly from the mysql module.
+ 
+ DEPENDANCIES:
+ 
+ mSQL 2.0.11 or better. This module may compile and work on earlier versions, 
+ but it hasn't been tested for any older version.
+ 
+ Unless you specify a custom query for authlibmsql to perform, the table
+ containing user data must have the following fields, with these names:
+ 
+       username        The username
+       password        The password for the username
+       homedir         The home directory for the user.
+       rootdir         The root directory for the user.
+       uid             The uid of the user.
+       gid             The gid of the user.
+ 
+ BUILDING:
+ 
+ To build, execute the following in the authlibmsql source directory:
+ 
+       ./configure [--with-msql=<msqldir>]
+       make
+ 
+ Or simply build it with the rest of muddleftpd, add --with-authmsql to
+ the configuration options of that configure script.
+ If mSQL is not installed in the default location (/usr/local/Hughes), you
+ need to supply the --with-msql option with the path to the base directory
+ of your mSQL setup.
+ 
+ After you have run make, the file libauthmsql.so can be copied to the 
+ directory you wish to store muddleftpd modules in. This directory must be 
+ secure, so users cannot overwrite the module with a cracked version.
+ By default it is put into @prefix@/lib from configure, if you dont set
+ prefix this is /usr/local/lib/muddleftpd.
+ 
+ USAGE:
+ 
+ In the groups that you wish authlibmsql to authenticate, you need to use
+ the following to tell muddleftpd to use the authlibmsql module, replacing the
+ directory here with the directory the authentication module is stored in:
+ (If unsure a locate libauthmsql.so may help).
+ 
+ authmethod /usr/local/lib/muddleftpd/libauthmsql.so
+ 
+ To configure authlibmsql, the following directives have been added. You must
+ specify these in the group section that is being configured.
+ 
+ msql_host <hostname>
+ 
+       This specifies the host the mSQL server is located on. If you do
+       not specify this value, authlibmsql will assume the host is
+       'localhost'. (the same computer as the ftp server)
+ 
+ msql_port <portnumber>
+ 
+       This specifies what TCP port number to connect to the mSQL server
+       using. If it is not supplied, the default mSQL port is used.
+ 
+ msql_database <databasename>
+ 
+       This specifies what database to use on the mSQL server. It is
+       advisable not to use the master database. You must specify this
+       value for authlibmsql to work.
+ 
+ msql_table <tablename>
+ 
+       This specifies the table to read user password data from. By
+       default, this is 'users'. This is not used if you specify a custom
+       query string.
+ 
+ msql_encryption <encryptiontype>
+ 
+       This specifies the type of encryption to use on passwords. There are
+       two options avaliable:
+ 
+       a) 'plaintext'
+               Passwords are stored with no encryption at all. Anybody with
+               read access to the database can steal the passwords. You
+               should set muddleftpd.conf to 600 permissions if you use this 
+               setting.
+ 
+       b) 'crypt'
+               Use the standard unix crypt() call to test passwords, so
+               they typically end up as the same format as the password file
+ 
+       The default option for msql_encryption is 'crypt'
+ 
+ msql_query <querystring>
+ 
+       (ADVANCED OPTION) This specifies the query to use to get data from
+       the database. It should be a SELECT query that returns data in the
+       following order:
+ 
+       1) password:       The password of the user, in the selected encrypted
+                          form.
+       2) home directory: The home directory of the user.
+       3) root directory: The root directory of the user.
+       4) uid:            An integer value for the user's uid.
+       5) gid:            An integer value for the user's gid.
+ 
+       This SELECT query should only return 1 result if the user exists,
+       or no results if the user does not exist. You can use this option if
+       the field names do not match the ones documented above. An example
+       (must be entered on a single line in the config file):
+ 
+       mysql_query SELECT pass,home,root,useruid,usergid FROM usertable
+                   WHERE user='%U'
+ 
+       You can also use this option if data is spread among multiple
+       tables. Another example (must still be on a single line in the
+       config file!):
+ 
+       mysql_query SELECT P.pass,C.home,C.root,C.uid,C.gid FROM passwd P,
+                   credtable C WHERE P.user=C.user AND P.user='%U'
+ 
+       This gets data from the password table, and joins it with data from
+       the credentials table to provide data for authlibmsql.
+ 
+ 
+ GROUP EFFECTS:
+ 
+ If authlibmsql finds a single result for a query, and the data checks out 
+ ok, then it will accept the username, and authenticate for it. If it finds
+ no result for the query, then it will pass the username onto the next group
+ section. If more than one result is returned, or an error occured along the
+ way, authlibmsql will cancel authentication for that user.
+ 
+ FURTHER NOTES:
+ 
+       * You should avoid using plaintext stored passwords, especially
+         since anyone who can read the configuration file can steal all
+         the passwords in the mSQL database.
+ 
+ AUTHORS:
+ 
+ Beau Kuiper (address@hidden)
Index: muddleftpd/modules/auth/authlibmsql/auth.h
diff -c /dev/null muddleftpd/modules/auth/authlibmsql/auth.h:1.1.8.1
*** /dev/null   Sun Nov  2 13:51:36 2003
--- muddleftpd/modules/auth/authlibmsql/auth.h  Sun Nov  2 13:51:35 2003
***************
*** 0 ****
--- 1,150 ----
+ /* Copyright (C) 1999 Beau Kuiper
+ 
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2, or (at your option)
+    any later version.
+ 
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+ 
+ /* Includes */
+ 
+ #include <stdio.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <stdarg.h>
+ 
+ #ifndef INT_MAX
+ #define INT_MAX 0x7FFFFFFF
+ #endif
+ 
+ /* Inportant Constants */
+ 
+ /* yep, true and false */
+ #define               FALSE           0
+ #define               TRUE            !FALSE
+ 
+ /* constants declaring various log levels.  */
+ #define               MYLOG_DACCESS   1    /* denied access to server because 
of ip */
+ #define               MYLOG_FTRANS    2    /* file transfer */
+ #define               MYLOG_COMMAND   4    /* command from client */
+ #define               MYLOG_RESPONSE  8    /* respone to client commands */
+ #define               MYLOG_INFO      16   /* informational logs */
+ #define       MYLOG_LOGIN     32   /* login information */
+ #define       MYLOG_DEBUG     64   /* debug log */
+ 
+ /* set err to this to tell the server the result of getting an auth handle */
+ #define               AUTH_OK         0       /* got handle, everything good 
*/
+ #define               AUTH_USERNKNOW  1       /* This module is not 
responsible for
+                                          current user, move to next module */
+ #define               AUTH_ERROR      2       /* A bad error occured, stop 
attempting
+                                          to authenticate user */
+ 
+ /* a couple of macros to help :-) */
+ #define MAXIMUM(x, y)         (x) > (y) ? (x) : (y)
+ #define MINIMUM(x, y)         (x) > (y) ? (y) : (x)
+ 
+ /* Typedefs */
+ 
+ /* NEWFILE is a structure used with muddleftpd special text file handling
+    routines. Don't directly modify its structure */
+ typedef struct
+ {
+       int fd;
+       void *buffer;
+       int eof;
+ } NEWFILE;
+ 
+ /* here as some prototypes for functions you can use */
+ 
+ /* MEMORY FUNCTIONS */
+ 
+ /* Just like malloc, but it checks for out of memory */
+ extern void *mallocwrapper(int size);
+ 
+ /* Almost same a realloc, execpt supply double pointer of memory area(inarea)
+  * and the new size */
+ void reallocwrapper(int size, void **inarea);
+ 
+ /* Same as strdup, but checks for out of memory result */
+ char *strdupwrapper(char *s);
+ 
+ /* to free areas created by strdupwrapper and mallocwrapper, It also updates
+  * counters used to determine memory leakage, so you should use this instead
+  * of plain free() */
+ void freewrapper(void *tofree);
+ 
+ /* just memmove because muddleftpd will supply a replacement if the system
+  * doesn't supply one */
+ #ifndef HAVE_MEMMOVE
+ char *memmove(void *dest, void *src, int n);
+ #endif
+ 
+ /* STRING FUNCTIONS */
+ 
+ /* This drops all characaters with a code < 32 in the string suppled. This is 
+  * done in place */
+ void strtrimspace(char *string);
+ 
+ /* This counts to number of occurences of char tok in the supplied string */
+ int strchrcount(char *string, char tok);
+ 
+ /* this is vsprintf except the result is given as a string allocated using
+  * mallocwrapper. Use freewrapper to reclaim the space it uses */
+ char *safe_vsnprintf(char *format, va_list ap);
+ 
+ /* this is the same as sprintf execpt the result is given as a string 
allocated
+  * in dynamic memory using mallocwrapper. Use freewrapper to free it */
+ char *safe_snprintf(char *format, ...);
+ 
+ /* gets suplementary gids of user */
+ gid_t *getusergrouplist(char *username);
+ 
+ /* these are for really bad errors. Don't use either errormsg or 
errormsgfatal.
+  * Use the ERRORMSG and ERRORMSGFATAL macros instead. BTW, ONLY USE THESE
+  * FOR ERRORS THAT CANNOT BE SOLVED ANYWAY ELSE */
+ void errormsg( char *errmessage, char *file, int line );
+ void errormsgfatal( char *errmessage, char *file, int line );
+ #define ERRORMSGFATAL(x)      errormsgfatal(x, __FILE__, __LINE__)
+ #define ERRORMSG(x)           errormsg(x, __FILE__, __LINE__)
+ 
+ /* LOG OPERATIONS */
+ 
+ /* Adds a log entry to muddleftpd's logs. type is one of the constants
+  * specified above. peer is the same peer pointer passed to the gethandle
+  * function. desc is the string to add to the log */
+ extern void log_addentry(int type, void *peer, char *desc);
+ 
+ /* Exactly the same a log_addentry, but muddleftpd will use freewrapper
+  * on desc so you can use safe_snprintf for desc */
+ extern void log_giveentry(int type, void *peer, char *desc);
+ 
+ /* the debug log */
+ extern void debuglog(char *format, ...);
+ 
+ /* CONFIF FILE OPERATIONS */
+ 
+ char *strsplit(char *, char *, char *);
+ void substitute(char **inputstr, char *strin, char *strout);
+ int loadconfigfile(char *filename, int (* confighandler)(char *, char *, int, 
void *), void *configdata);
+ void *loadconfigcache(char *filename);
+ char *mktokconfstr(void *tset, int section, char *setting, char *defaul);
+ void loadintfromconfig(void *cache, int section, char *setting, int *to, int 
def);
+ void loadstrfromconfig(void *cache, int section, char *setting, char **to, 
char *def);
+ void freeconfigcache(void *cache);
+ char **makeconfiglist(void *cache, char *section, char *label);
+ 
+ extern NEWFILE *nfopen(char *filename);
+ extern NEWFILE *nfdopen(int fd);
+ extern char *nfgetcs(NEWFILE *file, char testchar);
+ extern void nfclose(NEWFILE *file);
+ 
+ extern int chkpassword(char *, char *);
+ 
Index: muddleftpd/modules/auth/authlibmud/Makefile.in
diff -c /dev/null muddleftpd/modules/auth/authlibmud/Makefile.in:1.1.8.1
*** /dev/null   Sun Nov  2 13:51:36 2003
--- muddleftpd/modules/auth/authlibmud/Makefile.in      Sun Nov  2 13:51:34 2003
***************
*** 0 ****
--- 1,35 ----
+ 
+ address@hidden@
+ address@hidden@
+ address@hidden@
+ address@hidden@
+ 
+ SRC=authmud.c
+ OBJ=$(SRC:.c=.o)
+ 
+ address@hidden@
+ address@hidden@
+ 
+ address@hidden@/muddleftpd
+ LIBNAME=libauthmud.so
+ address@hidden@
+ 
+ all: $(OBJ)
+       $(CC) $(CFLAGS) $(LIBS) -shared -Xlinker -x -o $(LIBNAME) $(OBJ)
+ 
+ install: all
+       mkdir -p $(libdir)
+       mkdir -p $(DOCDIR)/doc/muddleftpd
+ 
+       install README -m 644 $(DOCDIR)/doc/muddleftpd/README.authmud
+       install $(LIBNAME) -m 644 $(libdir)
+ 
+ clean: 
+       rm -fr autom4te.cache
+       rm -f *.o *~ DEADJOE $(LIBNAME)
+ 
+ distclean: clean
+       rm -f config.h Makefile config.log config.cache config.status
+ 
+ maintainer-clean: distclean
+       rm -f configure config.h.in
Index: muddleftpd/modules/auth/authlibmud/README
diff -c /dev/null muddleftpd/modules/auth/authlibmud/README:1.1.8.1
*** /dev/null   Sun Nov  2 13:51:36 2003
--- muddleftpd/modules/auth/authlibmud/README   Sun Nov  2 13:51:34 2003
***************
*** 0 ****
--- 1,76 ----
+ Mud authentication Module. (authlibmud) Version 0.1
+ 
+ This module allows muddleftpd 1.3.4 and above authenticate against player
+ files on a mud server. 
+ 
+ Note: This module is designed to run on a non-root execution of muddleftpd.
+       It does not provide uid, gid information about a user.
+ 
+ Note: This module does not provide any information other than the success of
+       authenticating a user. No home or root directory information is passed
+       on. You will need to configure these things in the config file.
+ 
+ Note: You may need to modify the code to get this to work on your mud. YMMV.
+       Contact me if you have any difficulties.
+ 
+ DEPENDANCIES:
+ 
+ None. However this module is useless unless you are using muddleftpd 1.3.4
+ or better. 
+ 
+ Without modifing the code, authlibmud assumes:
+ 
+       * People level 21 and above are wizards and can login.
+       * Passwords in the player files are encrypted using the unix crypt()
+         call.
+       * The fields for the level and password in the player file are
+         labeled "Level" and "Password" in the same order.
+ 
+ BUILDING:
+ 
+ To build, execute the following in the authlibmud source directory:
+ 
+       ./configure
+       make
+ 
+ Or simply build it with the rest of muddleftpd, add --with-authmud to
+ the configuration options of that configure script.
+ Then the file libauthmud.so can be copied to the directory you with to
+ store muddleftpd modules in. This directory must be secure, so users cannot
+ overwrite the module with a cracked version. By default it is put into
+ @prefix@/lib from configure, if you dont set prefix this is
+ /usr/local/lib/muddleftpd.
+ 
+ USAGE:
+ 
+ In the groups that you wish authlibmud to authenticate, you need to use
+ the following to tell muddleftpd to use the authlibmud module, replacing the
+ directory with the directory the authentication module is stored in:
+ (If unsure a locate libauthmud.so may help).
+ 
+ authmethod /usr/local/lib/muddleftpd/libauthmud.so
+ 
+ To configure libauthmud, the following directives have been added. You must
+ specify these in the group section that is being configured. 
+ 
+ playerfile <playerfilename>
+ 
+       This is the path and filename of the user filename. You should
+       construct this using the %U token, so it changes depending on
+       who is logging in. For example if player files are stored in
+       /usr/local/mud/players/<first letter of name>/<name>.passwd then you
+       would use in the config file:
+ 
+               playerfile /usr/local/mud/players/%(0,0)U/%U.passwd
+ 
+ GROUP EFFECTS:
+ 
+ If the player file is found, and the player has a level greater than 20,
+ then authlibmud will accept the username and authenticate for it. If the
+ player file is found, but the player has a level less than or equal to 20,
+ then authentication is cancelled. If the player file is not found,
+ authlibmud will pass the username to the next group section.
+ 
+ AUTHORS:
+ 
+ Beau Kuiper (address@hidden)
Index: muddleftpd/modules/auth/authlibmud/auth.h
diff -c /dev/null muddleftpd/modules/auth/authlibmud/auth.h:1.1.8.1
*** /dev/null   Sun Nov  2 13:51:36 2003
--- muddleftpd/modules/auth/authlibmud/auth.h   Sun Nov  2 13:51:34 2003
***************
*** 0 ****
--- 1,151 ----
+ /* Copyright (C) 1999 Beau Kuiper
+ 
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2, or (at your option)
+    any later version.
+ 
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+ 
+ /* Includes */
+ 
+ #include <stdio.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <stdarg.h>
+ 
+ #ifndef INT_MAX
+ #define INT_MAX 0x7FFFFFFF
+ #endif
+ 
+ /* Inportant Constants */
+ 
+ /* yep, true and false */
+ #define               FALSE           0
+ #define               TRUE            !FALSE
+ 
+ /* constants declaring various log levels.  */
+ #define               MYLOG_DACCESS   1    /* denied access to server because 
of ip */
+ #define               MYLOG_FTRANS    2    /* file transfer */
+ #define               MYLOG_COMMAND   4    /* command from client */
+ #define               MYLOG_RESPONSE  8    /* respone to client commands */
+ #define               MYLOG_INFO      16   /* informational logs */
+ #define       MYLOG_LOGIN     32   /* login information */
+ #define       MYLOG_DEBUG     64   /* debug log */
+ 
+ /* set err to this to tell the server the result of getting an auth handle */
+ #define               AUTH_OK         0       /* got handle, everything good 
*/
+ #define               AUTH_USERNKNOW  1       /* This module is not 
responsible for
+                                          current user, move to next module */
+ #define               AUTH_ERROR      2       /* A bad error occured, stop 
attempting
+                                          to authenticate user */
+ 
+ /* a couple of macros to help :-) */
+ #define MAXIMUM(x, y)         (x) > (y) ? (x) : (y)
+ #define MINIMUM(x, y)         (x) > (y) ? (y) : (x)
+ 
+ /* Typedefs */
+ 
+ /* NEWFILE is a structure used with muddleftpd special text file handling
+    routines. Don't directly modify its structure */
+ typedef struct
+ {
+       int fd;
+       void *buffer;
+       int eof;
+ } NEWFILE;
+ 
+ /* here as some prototypes for functions you can use */
+ 
+ /* MEMORY FUNCTIONS */
+ 
+ /* Just like malloc, but it checks for out of memory */
+ extern void *mallocwrapper(int size);
+ 
+ /* Almost same a realloc, execpt supply double pointer of memory area(inarea)
+  * and the new size */
+ void reallocwrapper(int size, void **inarea);
+ 
+ /* Same as strdup, but checks for out of memory result */
+ char *strdupwrapper(char *s);
+ 
+ /* to free areas created by strdupwrapper and mallocwrapper, It also updates
+  * counters used to determine memory leakage, so you should use this instead
+  * of plain free() */
+ void freewrapper(void *tofree);
+ 
+ /* just memmove because muddleftpd will supply a replacement if the system
+  * doesn't supply one */
+ #ifndef HAVE_MEMMOVE
+ char *memmove(void *dest, void *src, int n);
+ #endif
+ 
+ /* STRING FUNCTIONS */
+ 
+ /* This drops all characaters with a code < 32 in the string suppled. This is 
+  * done in place */
+ void strtrimspace(char *string);
+ 
+ /* This counts to number of occurences of char tok in the supplied string */
+ int strchrcount(char *string, char tok);
+ 
+ /* this is vsprintf except the result is given as a string allocated using
+  * mallocwrapper. Use freewrapper to reclaim the space it uses */
+ char *safe_vsnprintf(char *format, va_list ap);
+ 
+ /* this is the same as sprintf execpt the result is given as a string 
allocated
+  * in dynamic memory using mallocwrapper. Use freewrapper to free it */
+ char *safe_snprintf(char *format, ...);
+ 
+ /* gets suplementary gids of user */
+ gid_t *getusergrouplist(char *username);
+ 
+ /* these are for really bad errors. Don't use either errormsg or 
errormsgfatal.
+  * Use the ERRORMSG and ERRORMSGFATAL macros instead. BTW, ONLY USE THESE
+  * FOR ERRORS THAT CANNOT BE SOLVED ANYWAY ELSE */
+ void errormsg( char *errmessage, char *file, int line );
+ void errormsgfatal( char *errmessage, char *file, int line );
+ #define ERRORMSGFATAL(x)      errormsgfatal(x, __FILE__, __LINE__)
+ #define ERRORMSG(x)           errormsg(x, __FILE__, __LINE__)
+ 
+ /* LOG OPERATIONS */
+ 
+ /* Adds a log entry to muddleftpd's logs. type is one of the constants
+  * specified above. peer is the same peer pointer passed to the gethandle
+  * function. desc is the string to add to the log */
+ extern void log_addentry(int type, void *peer, char *desc);
+ 
+ /* Exactly the same a log_addentry, but muddleftpd will use freewrapper
+  * on desc so you can use safe_snprintf for desc */
+ extern void log_giveentry(int type, void *peer, char *desc);
+ 
+ /* the debug log */
+ extern void debuglog(char *format, ...);
+ 
+ /* CONFIF FILE OPERATIONS */
+ 
+ char *strsplit(char *, char *, char *);
+ void substitute(char **inputstr, char *strin, char *strout);
+ int loadconfigfile(char *filename, int (* confighandler)(char *, char *, int, 
void *), void *configdata,
+       int besecure, int *hendlererror, int *linenum);
+ void *loadconfigcache(char *filename);
+ char *mktokconfstr(void *tset, int section, char *setting, char *defaul);
+ void loadintfromconfig(void *cache, int section, char *setting, int *to, int 
def);
+ void loadstrfromconfig(void *cache, int section, char *setting, char **to, 
char *def);
+ void freeconfigcache(void *cache);
+ char **makeconfiglist(void *cache, char *section, char *label);
+ 
+ extern NEWFILE *nfopen(char *filename);
+ extern NEWFILE *nfdopen(int fd);
+ extern char *nfgetcs(NEWFILE *file, char testchar);
+ extern void nfclose(NEWFILE *file);
+ 
+ extern int chkpassword(char *, char *);
+ 
Index: muddleftpd/modules/auth/authlibmysql/Makefile.in
diff -c /dev/null muddleftpd/modules/auth/authlibmysql/Makefile.in:1.1.8.1
*** /dev/null   Sun Nov  2 13:51:36 2003
--- muddleftpd/modules/auth/authlibmysql/Makefile.in    Sun Nov  2 13:51:34 2003
***************
*** 0 ****
--- 1,36 ----
+ 
+ address@hidden@
+ address@hidden@
+ address@hidden@
+ address@hidden@
+ 
+ SRC=authmysql.c
+ OBJ=$(SRC:.c=.o)
+ 
+ address@hidden@
+ address@hidden@
+ 
+ address@hidden@/muddleftpd
+ LIBNAME=libauthmysql.so
+ address@hidden@
+ 
+ all: $(OBJ)
+       $(CC) $(CFLAGS) -shared -Xlinker $(OBJ) $(LIBS) -o $(LIBNAME)
+ 
+ install: all
+       mkdir -p $(libdir)
+       mkdir -p $(DOCDIR)/doc/muddleftpd
+ 
+       install README -m 644 $(DOCDIR)/doc/muddleftpd/README.authmysql
+       install $(LIBNAME) -m 644 $(libdir)
+ 
+ 
+ clean: 
+       rm -f *.o *~ DEADJOE $(LIBNAME)
+ 
+ distclean: clean
+       rm -f config.h Makefile config.log config.cache config.status
+ 
+ maintainer-clean: distclean
+       rm -f configure config.h.in
+ 
Index: muddleftpd/modules/auth/authlibmysql/README
diff -c /dev/null muddleftpd/modules/auth/authlibmysql/README:1.2.8.1
*** /dev/null   Sun Nov  2 13:51:36 2003
--- muddleftpd/modules/auth/authlibmysql/README Sun Nov  2 13:51:34 2003
***************
*** 0 ****
--- 1,161 ----
+ MySQL authentication Module. (authlibmysql) Version 0.1
+ 
+ This module allows muddleftpd 1.3.4 and above authenticate using a MySQL
+ server. This module will read client information from a supplied
+ table/database within MySQL. It does not modify any data on the server. It
+ supports:
+ 
+       * Password encryption: Passwords can be encrypted on the MySQL
+         server in either plaintext (no encryption), crypt based, or the
+         portable mysql password format.
+       * Support for custom SELECT query strings. This allows tremendous
+         flexibility for choosing the structure of the tables muddleftpd
+         retreive data from.
+ 
+ DEPENDANCIES:
+ 
+ MySQL 3.22.32 or better. This module may compile and work on earlier
+ versions, but it hasn't been tested for any older version.
+ 
+ Unless you specify a custom query for authlibmysql to perform, the table
+ containing user data must have the following fields, with these names:
+ 
+       username        The username
+       password        The password for the username
+       homedir         The home directory for the user.
+       rootdir         The root directory for the user.
+       uid             The uid of the user.
+       gid             The gid of the user.
+ 
+ BUILDING:
+ 
+ To build, execute the following in the authlibmysql source directory:
+ 
+       ./configure [--with-mysql=<mysqldir>]
+       make
+ 
+ Or simply build it with the rest of muddleftpd, add --with-authmysql to
+ the configuration options of that configure script.
+ 
+ When you have run make, the file libauthmysql.so can be copied to the 
+ directory you wish to store muddleftpd modules in. This directory must be 
+ secure, so users cannot overwrite the module with a cracked version.
+ By default it is put into @prefix@/lib from configure, if you dont set
+ prefix this is /usr/local/lib/muddleftpd.
+ 
+ USAGE:
+ 
+ In the groups that you wish authlibmysql to authenticate, you need to use
+ the following to tell muddleftpd to use the authlibmysql module, replacing the
+ directory here with the directory the authentication module is stored in:
+ (If unsure a locate libauthmysql.so may help).
+ 
+ authmethod /usr/local/lib/muddleftpd/libauthmysql.so
+ 
+ To configure authlibmysql, the following directives have been added. You must
+ specify these in the group section that is being configured.
+ 
+ mysql_host <hostname>
+ 
+       This specifies the host the MySQL server is located on. If you do
+       not specify this value, authlibmysql will assume the host is
+       'localhost'. (the same computer as the ftp server)
+ 
+ mysql_port <portnumber>
+ 
+       This specifies what TCP port number to connect to the MySQL server
+       using. If it is not supplied, the default MySQL port is used.
+ 
+ mysql_database <databasename>
+ 
+       This specifies what database to use on the MySQL server. It is
+       advisable not to use the master database. You must specify this
+       value for authlibmysql to work.
+ 
+ mysql_user <username>
+ 
+       This specifies the username to access the MySQL server as. This user
+       should only require read access. You must specify this value,
+       otherwise authlibmysql will refuse to work.
+ 
+ mysql_password <password>
+ 
+       This specifies the password paired to the username used to access the 
+       MySQL server. You must specify this value.
+ 
+ mysql_table <tablename>
+ 
+       This specifies the table to read user password data from. By
+       default, this is 'users'. This is not used if you specify a custom
+       query string.
+ 
+ mysql_encryption <encryptiontype>
+ 
+       This specifies the type of encryption to use on passwords. There are
+       three options avaliable:
+ 
+       a) 'plaintext'
+               Passwords are stored with no encryption at all. Anybody with
+               read access to the database can steal the passwords. You
+               should set muddleftpd.conf to 600 permissions if you use this 
+               setting.
+ 
+       b) 'crypt'
+               Use the standard unix crypt() call to test passwords, so
+               they typically end up as the same format as the password file
+ 
+       c) 'mysql'
+               Use MySQL's builtin function password() to test passwords.
+               This is portable, and is easy to use within MySQL scripts.
+ 
+       The default option for mysql_encryption is 'mysql'
+ 
+ mysql_query <querystring>
+ 
+       (ADVANCED OPTION) This specifies the query to use to get data from
+       the database. It should be a SELECT query that returns data in the
+       following order:
+ 
+       1) password:       The password of the user, in the selected encrypted
+                          form.
+       2) home directory: The home directory of the user.
+       3) root directory: The root directory of the user.
+       4) uid:            An integer value for the user's uid.
+       5) gid:            An integer value for the user's gid.
+ 
+       This SELECT query should only return 1 result if the user exists,
+       or no results if the user does not exist. You can use this option if
+       the field names do not match the ones documented above. An example
+       (must be entered on a single line in the config file):
+ 
+       mysql_query SELECT pass,home,root,useruid,usergid FROM usertable
+                   WHERE user='%U'
+ 
+       You can also use this option if data is spread among multiple
+       tables. Another example (must still be on a single line in the
+       config file!):
+ 
+       mysql_query SELECT P.pass,C.home,C.root,C.uid,C.gid FROM passwd P,
+                   credtable C WHERE P.user=C.user AND P.user='%U'
+ 
+       This gets data from the password table, and joins it with data from
+       the credentials table to provide data for authlibmysql.
+ 
+ 
+ GROUP EFFECTS:
+ 
+ If authlibmysql finds a single result for a query, and the data checks out 
+ ok, then it will accept the username, and authenticate for it. If it finds
+ no result for the query, then it will pass the username onto the next group
+ section. If more than one result is returned, or an error occured along the
+ way, authlibmysql will cancel authentication for that user.
+ 
+ FURTHER NOTES:
+ 
+       * You should avoid using plaintext stored passwords, especially
+         since anyone who can read the configuration file can steal all
+         the passwords in the MySQL database.
+ 
+ AUTHORS:
+ 
+ Beau Kuiper (address@hidden)
Index: muddleftpd/modules/auth/authlibmysql/auth.h
diff -c /dev/null muddleftpd/modules/auth/authlibmysql/auth.h:1.1.8.1
*** /dev/null   Sun Nov  2 13:51:36 2003
--- muddleftpd/modules/auth/authlibmysql/auth.h Sun Nov  2 13:51:34 2003
***************
*** 0 ****
--- 1,150 ----
+ /* Copyright (C) 1999 Beau Kuiper
+ 
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2, or (at your option)
+    any later version.
+ 
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+ 
+ /* Includes */
+ 
+ #include <stdio.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <stdarg.h>
+ 
+ #ifndef INT_MAX
+ #define INT_MAX 0x7FFFFFFF
+ #endif
+ 
+ /* Inportant Constants */
+ 
+ /* yep, true and false */
+ #define               FALSE           0
+ #define               TRUE            !FALSE
+ 
+ /* constants declaring various log levels.  */
+ #define               MYLOG_DACCESS   1    /* denied access to server because 
of ip */
+ #define               MYLOG_FTRANS    2    /* file transfer */
+ #define               MYLOG_COMMAND   4    /* command from client */
+ #define               MYLOG_RESPONSE  8    /* respone to client commands */
+ #define               MYLOG_INFO      16   /* informational logs */
+ #define       MYLOG_LOGIN     32   /* login information */
+ #define       MYLOG_DEBUG     64   /* debug log */
+ 
+ /* set err to this to tell the server the result of getting an auth handle */
+ #define               AUTH_OK         0       /* got handle, everything good 
*/
+ #define               AUTH_USERNKNOW  1       /* This module is not 
responsible for
+                                          current user, move to next module */
+ #define               AUTH_ERROR      2       /* A bad error occured, stop 
attempting
+                                          to authenticate user */
+ 
+ /* a couple of macros to help :-) */
+ #define MAXIMUM(x, y)         (x) > (y) ? (x) : (y)
+ #define MINIMUM(x, y)         (x) > (y) ? (y) : (x)
+ 
+ /* Typedefs */
+ 
+ /* NEWFILE is a structure used with muddleftpd special text file handling
+    routines. Don't directly modify its structure */
+ typedef struct
+ {
+       int fd;
+       void *buffer;
+       int eof;
+ } NEWFILE;
+ 
+ /* here as some prototypes for functions you can use */
+ 
+ /* MEMORY FUNCTIONS */
+ 
+ /* Just like malloc, but it checks for out of memory */
+ extern void *mallocwrapper(int size);
+ 
+ /* Almost same a realloc, execpt supply double pointer of memory area(inarea)
+  * and the new size */
+ void reallocwrapper(int size, void **inarea);
+ 
+ /* Same as strdup, but checks for out of memory result */
+ char *strdupwrapper(char *s);
+ 
+ /* to free areas created by strdupwrapper and mallocwrapper, It also updates
+  * counters used to determine memory leakage, so you should use this instead
+  * of plain free() */
+ void freewrapper(void *tofree);
+ 
+ /* just memmove because muddleftpd will supply a replacement if the system
+  * doesn't supply one */
+ #ifndef HAVE_MEMMOVE
+ char *memmove(void *dest, void *src, int n);
+ #endif
+ 
+ /* STRING FUNCTIONS */
+ 
+ /* This drops all characaters with a code < 32 in the string suppled. This is 
+  * done in place */
+ void strtrimspace(char *string);
+ 
+ /* This counts to number of occurences of char tok in the supplied string */
+ int strchrcount(char *string, char tok);
+ 
+ /* this is vsprintf except the result is given as a string allocated using
+  * mallocwrapper. Use freewrapper to reclaim the space it uses */
+ char *safe_vsnprintf(char *format, va_list ap);
+ 
+ /* this is the same as sprintf execpt the result is given as a string 
allocated
+  * in dynamic memory using mallocwrapper. Use freewrapper to free it */
+ char *safe_snprintf(char *format, ...);
+ 
+ /* gets suplementary gids of user */
+ gid_t *getusergrouplist(char *username);
+ 
+ /* these are for really bad errors. Don't use either errormsg or 
errormsgfatal.
+  * Use the ERRORMSG and ERRORMSGFATAL macros instead. BTW, ONLY USE THESE
+  * FOR ERRORS THAT CANNOT BE SOLVED ANYWAY ELSE */
+ void errormsg( char *errmessage, char *file, int line );
+ void errormsgfatal( char *errmessage, char *file, int line );
+ #define ERRORMSGFATAL(x)      errormsgfatal(x, __FILE__, __LINE__)
+ #define ERRORMSG(x)           errormsg(x, __FILE__, __LINE__)
+ 
+ /* LOG OPERATIONS */
+ 
+ /* Adds a log entry to muddleftpd's logs. type is one of the constants
+  * specified above. peer is the same peer pointer passed to the gethandle
+  * function. desc is the string to add to the log */
+ extern void log_addentry(int type, void *peer, char *desc);
+ 
+ /* Exactly the same a log_addentry, but muddleftpd will use freewrapper
+  * on desc so you can use safe_snprintf for desc */
+ extern void log_giveentry(int type, void *peer, char *desc);
+ 
+ /* the debug log */
+ extern void debuglog(char *format, ...);
+ 
+ /* CONFIF FILE OPERATIONS */
+ 
+ char *strsplit(char *, char *, char *);
+ void substitute(char **inputstr, char *strin, char *strout);
+ int loadconfigfile(char *filename, int (* confighandler)(char *, char *, int, 
void *), void *configdata);
+ void *loadconfigcache(char *filename);
+ char *mktokconfstr(void *tset, int section, char *setting, char *defaul);
+ void loadintfromconfig(void *cache, int section, char *setting, int *to, int 
def);
+ void loadstrfromconfig(void *cache, int section, char *setting, char **to, 
char *def);
+ void freeconfigcache(void *cache);
+ char **makeconfiglist(void *cache, char *section, char *label);
+ 
+ extern NEWFILE *nfopen(char *filename);
+ extern NEWFILE *nfdopen(int fd);
+ extern char *nfgetcs(NEWFILE *file, char testchar);
+ extern void nfclose(NEWFILE *file);
+ 
+ extern int chkpassword(char *, char *);
+ 
Index: muddleftpd/modules/auth/authlibmysql/configure.ac
diff -c /dev/null muddleftpd/modules/auth/authlibmysql/configure.ac:1.1.8.1
*** /dev/null   Sun Nov  2 13:51:36 2003
--- muddleftpd/modules/auth/authlibmysql/configure.ac   Sun Nov  2 13:51:34 2003
***************
*** 0 ****
--- 1,137 ----
+ dnl Process this file with autoconf to produce a configure script.
+ AC_INIT
+ AC_PREREQ(2.54)
+ 
+ AC_CONFIG_SRCDIR([authmysql.c])
+ AC_CONFIG_HEADER(config.h)
+ 
+ dnl Checks for programs.
+ AC_PROG_CC
+ 
+ dnl Checks for libraries.
+ 
+ dnl Checks for header files.
+ AC_CHECK_HEADERS(unistd.h)
+ 
+ dnl Checks for typedefs, structures, and compiler characteristics.
+ AC_STRUCT_TM
+ 
+ dnl Checks for library functions.
+ AC_HEADER_STDC
+ 
+ dnl Check functions
+ AC_CHECK_FUNCS(memmove)
+ 
+ default_directory="/usr /usr/local"
+ 
+ AC_DEFUN(FAIL_MESSAGE,[
+    echo
+    echo
+    echo "**********************************************"
+    echo "  ERROR: unable to find" $1
+    echo "  checked in the following places"
+    for i in `echo $2`; do
+      echo "        $i"
+    done
+    echo "**********************************************"
+    echo
+    exit
+ ])
+ 
+ AC_ARG_WITH(authmysql, 
+     AC_HELP_STRING([--with-authmysql=DIR],[Create MySQL authentication 
module, optionally specify dir of mysql files]),
+     [ with_mysql="$withval" ],
+     [ with_mysql=no ])
+ 
+ if test "$with_mysql" != "no"; then
+   if test "$with_mysql" = "yes"; then
+     mysql_directory="$default_directory"; 
+     mysql_fail="yes"
+   elif test -d $withval; then
+     mysql_directory="$withval"
+     mysql_fail="no"
+   elif test "$with_mysql" = ""; then
+     mysql_directory="$default_directory"; 
+     mysql_fail="no"
+   fi
+ 
+   AC_MSG_CHECKING(for mysql)
+ 
+   for i in $mysql_directory; do
+     if test -r $i/include/mysql/mysql.h; then
+       MYSQL_DIR=$i
+       MYSQL_INC_DIR=$i/include/mysql
+     elif test -r $i/include/mysql.h; then
+       MYSQL_DIR=$i
+       MYSQL_INC_DIR=$i/include
+     fi
+   done
+ 
+   if test -z "$MYSQL_DIR"; then
+     if test "$mysql_fail" != "no"; then
+       tmp=""
+       for i in $mysql_directory; do
+         tmp="$tmp $i/include $i/include/mysql" 
+       done
+       FAIL_MESSAGE("mysql headers (mysql.h)", $tmp)
+     else
+       AC_MSG_RESULT(no)
+     fi
+   else
+ 
+     for i in lib lib/mysql; do
+       str="$MYSQL_DIR/$i/libmysqlclient.*"
+       for j in `echo $str`; do
+         if test -r $j; then
+           MYSQL_LIB_DIR="$MYSQL_DIR/$i"
+           break 2
+         fi
+       done
+     done
+ 
+     if test -z "$MYSQL_LIB_DIR"; then
+       if test "$mysql_fail" != "no"; then
+         FAIL_MESSAGE("mysqlclient library", 
+                      "$MYSQL_DIR/lib $MYSQL_DIR/lib/mysql")
+       else
+         AC_MSG_RESULT(no)
+       fi
+     else
+       AC_MSG_RESULT(yes)
+               CFLAGS="$CFLAGS -I${MYSQL_INC_DIR}"
+               LDFLAGS="${LDFLAGS} -L${MYSQL_LIB_DIR}"
+ dnl      CPPFLAGS="${CPPFLAGS} -I${MYSQL_INC_DIR} -DENABLE_MYSQL"
+           LIBS="-lmysqlclient ${LIBS}"
+     fi
+   fi
+ fi
+ 
+ dnl   CFLAGS="$CFLAGS -I$mysqltop/include"
+ dnl   LIBS="$LIBS $mysqltop/lib/libmysqlclient.a"
+ 
+ 
+ dnl AC_ARG_WITH(mysqlpath,
+ dnl   AC_HELP_STRING([--with-mysqlpath], [specify the top level of the mysql 
installation tree.  (default is /usr/local/mysql)]), 
+ dnl   mysqltop=$withval, mysqltop=/usr/local/mysql
+ dnl ) 
+ 
+ dnl AC_MSG_CHECKING([for mysql in directory $mysqltop])
+ 
+ dnl if test "X$mysqltop" = "X"
+ dnl then
+ dnl   AC_MSG_RESULT([no])
+ dnl   AC_MSG_ERROR([msql directory not specified])
+ dnl fi
+ 
+ dnl if test -d $mysqltop
+ dnl then
+ dnl   AC_MSG_RESULT([yes])
+ dnl   CFLAGS="$CFLAGS -I$mysqltop/include"
+ dnl   LIBS="$LIBS $mysqltop/lib/libmysqlclient.a"
+ dnl else
+ dnl   AC_MSG_RESULT([no])
+ dnl   AC_MSG_ERROR([mysql directory not found!])
+ dnl fi
+ 
+ AC_CONFIG_FILES([Makefile])
+ AC_OUTPUT
Index: muddleftpd/modules/auth/authlibsmb/Makefile.in
diff -c /dev/null muddleftpd/modules/auth/authlibsmb/Makefile.in:1.1.8.1
*** /dev/null   Sun Nov  2 13:51:36 2003
--- muddleftpd/modules/auth/authlibsmb/Makefile.in      Sun Nov  2 13:51:34 2003
***************
*** 0 ****
--- 1,39 ----
+ 
+ address@hidden@
+ address@hidden@
+ address@hidden@
+ address@hidden@ 
+ 
+ SRC=authsmb.c
+ OBJ=$(SRC:.c=.o)
+ 
+ address@hidden@
+ address@hidden@
+ 
+ address@hidden@/muddleftpd
+ LIBNAME=libauthsmb.so
+ address@hidden@
+ 
+ all: $(OBJ) smbvalid
+       $(CC) $(CFLAGS) $(LIBS) -shared -Xlinker -x -o $(LIBNAME) $(OBJ) 
smbval/smbvalid.a
+ 
+ smbvalid:
+       $(MAKE) -C smbval
+ 
+ install: all
+       mkdir -p $(libdir)
+       mkdir -p $(DOCDIR)/doc/muddleftpd
+ 
+       install README -m 644 $(DOCDIR)/doc/muddleftpd/README.authsmb
+       install $(LIBNAME) -m 644 $(libdir)
+ 
+ 
+ clean: 
+       $(MAKE) -C smbval clean
+       rm -f *.o *~ DEADJOE $(LIBNAME)
+ 
+ distclean: clean
+       rm -f config.h Makefile config.log config.cache config.status
+ 
+ maintainer-clean: distclean
+       rm -f configure config.h.in
Index: muddleftpd/modules/auth/authlibsmb/README
diff -c /dev/null muddleftpd/modules/auth/authlibsmb/README:1.2.8.1
*** /dev/null   Sun Nov  2 13:51:36 2003
--- muddleftpd/modules/auth/authlibsmb/README   Sun Nov  2 13:51:34 2003
***************
*** 0 ****
--- 1,88 ----
+ SMB authentication Module. (authlibsmb) Version 0.1
+ 
+ This module allows muddleftpd 1.3.4 and above authenticate against SMB
+ servers. This module will authenticate against the user list on any SMB
+ domain server, including both windows NT and Samba.
+ 
+ Note: This code is heavily dirived from the smb pam module. It is
+       essentually a front end for the smb pam module backend. Kudos to the
+       maintainers smb pam module for the good work.
+ 
+ Note: Although this code is dirived from the smb pam module, It does not
+       require pam to operate.
+ 
+ DEPENDANCIES:
+ 
+ A smb server somewhere available.
+ 
+ Also, authlibsmb requires that each user you wish to authenticate has a
+ local password entry. (unless you use the smb_localuser directive, where
+ all smb users use the same local username)
+ 
+ BUILDING:
+ 
+ To build, execute the following in the authlibsmb source directory:
+ 
+       ./configure
+       make
+ 
+ Or simply build it with the rest of muddleftpd, add --with-authsmb to
+ the configuration options of that configure script.
+ Then the file libauthsmb.so can be copied to the directory you with to
+ store muddleftpd modules in. This directory must be secure, so users cannot
+ overwrite the module with a cracked version. By default it is put into
+ @prefix@/lib from configure, if you dont set prefix this is
+ /usr/local/lib/muddleftpd.
+ 
+ USAGE:
+ 
+ In the groups that you wish authlibsmb to authenticate, you need to use
+ the following to tell muddleftpd to use the authlibsmb module, replacing the
+ directory with the directory the authentication module is stored in:
+ (If unsure a locate libauthsmb.so may help).
+ 
+ authmodule /usr/local/lib/muddleftpd/libauthsmb.so
+ 
+ To configure libauthsmb, the following directives have been added. You must
+ specify these in the group section that is being configured. 
+ 
+ smb_domain <workgroup>
+ 
+       This specifies is the domain/workgroup that contains the domain server 
+       to authenticate against. THIS PARAMTER IS REQUIRED
+ 
+ smb_primary <server>
+ 
+       This specifies the netbios name of the domain server, that is used to
+       authenticate against. THIS PARAMETER IS REQUIRED
+ 
+ smb_secondary <server>
+ 
+       This specifies the netbios name of the secondary domain server, that 
+       is used to authenticate against. THIS PARAMETER IS OPTIONAL
+ 
+ smb_localuser <localusername>
+ 
+       This specifies the local user on the system (from the password file)
+       that smb users will access the system ass. If omitted, authlibsmb will
+       use the login username.
+  
+ GROUP EFFECTS:
+ 
+ If smb_localuser is specified, authlibsmb will accept any username given to
+ it, regardless of whether or not it exists on the SMB server. This does not 
+ mean it will log the user in, it will simply not pass the username onto the
+ next group section. You will have to use nameacl to limit this if required.
+ 
+ If smb_localuser is not specified, authlibsmb will only accept usernames
+ that also exist in the local password file. Users not found in the local
+ password file will be passed onto the next muddleftpd group section.
+ 
+ FURTHER NOTES:
+ 
+       * authlibsmb cannot detect the difference between a username not
+         existing on a domain server and the password being incorrect.
+ 
+ AUTHORS:
+ 
+ Beau Kuiper (address@hidden)
Index: muddleftpd/modules/auth/authlibsmb/auth.h
diff -c /dev/null muddleftpd/modules/auth/authlibsmb/auth.h:1.1.8.1
*** /dev/null   Sun Nov  2 13:51:36 2003
--- muddleftpd/modules/auth/authlibsmb/auth.h   Sun Nov  2 13:51:34 2003
***************
*** 0 ****
--- 1,150 ----
+ /* Copyright (C) 1999 Beau Kuiper
+ 
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2, or (at your option)
+    any later version.
+ 
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+ 
+ /* Includes */
+ 
+ #include <stdio.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <stdarg.h>
+ 
+ #ifndef INT_MAX
+ #define INT_MAX 0x7FFFFFFF
+ #endif
+ 
+ /* Inportant Constants */
+ 
+ /* yep, true and false */
+ #define               FALSE           0
+ #define               TRUE            !FALSE
+ 
+ /* constants declaring various log levels.  */
+ #define               MYLOG_DACCESS   1    /* denied access to server because 
of ip */
+ #define               MYLOG_FTRANS    2    /* file transfer */
+ #define               MYLOG_COMMAND   4    /* command from client */
+ #define               MYLOG_RESPONSE  8    /* respone to client commands */
+ #define               MYLOG_INFO      16   /* informational logs */
+ #define       MYLOG_LOGIN     32   /* login information */
+ #define       MYLOG_DEBUG     64   /* debug log */
+ 
+ /* set err to this to tell the server the result of getting an auth handle */
+ #define               AUTH_OK         0       /* got handle, everything good 
*/
+ #define               AUTH_USERNKNOW  1       /* This module is not 
responsible for
+                                          current user, move to next module */
+ #define               AUTH_ERROR      2       /* A bad error occured, stop 
attempting
+                                          to authenticate user */
+ 
+ /* a couple of macros to help :-) */
+ #define MAXIMUM(x, y)         (x) > (y) ? (x) : (y)
+ #define MINIMUM(x, y)         (x) > (y) ? (y) : (x)
+ 
+ /* Typedefs */
+ 
+ /* NEWFILE is a structure used with muddleftpd special text file handling
+    routines. Don't directly modify its structure */
+ typedef struct
+ {
+       int fd;
+       void *buffer;
+       int eof;
+ } NEWFILE;
+ 
+ /* here as some prototypes for functions you can use */
+ 
+ /* MEMORY FUNCTIONS */
+ 
+ /* Just like malloc, but it checks for out of memory */
+ extern void *mallocwrapper(int size);
+ 
+ /* Almost same a realloc, execpt supply double pointer of memory area(inarea)
+  * and the new size */
+ void reallocwrapper(int size, void **inarea);
+ 
+ /* Same as strdup, but checks for out of memory result */
+ char *strdupwrapper(char *s);
+ 
+ /* to free areas created by strdupwrapper and mallocwrapper, It also updates
+  * counters used to determine memory leakage, so you should use this instead
+  * of plain free() */
+ void freewrapper(void *tofree);
+ 
+ /* just memmove because muddleftpd will supply a replacement if the system
+  * doesn't supply one */
+ #ifndef HAVE_MEMMOVE
+ char *memmove(void *dest, void *src, int n);
+ #endif
+ 
+ /* STRING FUNCTIONS */
+ 
+ /* This drops all characaters with a code < 32 in the string suppled. This is 
+  * done in place */
+ void strtrimspace(char *string);
+ 
+ /* This counts to number of occurences of char tok in the supplied string */
+ int strchrcount(char *string, char tok);
+ 
+ /* this is vsprintf except the result is given as a string allocated using
+  * mallocwrapper. Use freewrapper to reclaim the space it uses */
+ char *safe_vsnprintf(char *format, va_list ap);
+ 
+ /* this is the same as sprintf execpt the result is given as a string 
allocated
+  * in dynamic memory using mallocwrapper. Use freewrapper to free it */
+ char *safe_snprintf(char *format, ...);
+ 
+ /* gets suplementary gids of user */
+ gid_t *getusergrouplist(char *username);
+ 
+ /* these are for really bad errors. Don't use either errormsg or 
errormsgfatal.
+  * Use the ERRORMSG and ERRORMSGFATAL macros instead. BTW, ONLY USE THESE
+  * FOR ERRORS THAT CANNOT BE SOLVED ANYWAY ELSE */
+ void errormsg( char *errmessage, char *file, int line );
+ void errormsgfatal( char *errmessage, char *file, int line );
+ #define ERRORMSGFATAL(x)      errormsgfatal(x, __FILE__, __LINE__)
+ #define ERRORMSG(x)           errormsg(x, __FILE__, __LINE__)
+ 
+ /* LOG OPERATIONS */
+ 
+ /* Adds a log entry to muddleftpd's logs. type is one of the constants
+  * specified above. peer is the same peer pointer passed to the gethandle
+  * function. desc is the string to add to the log */
+ extern void log_addentry(int type, void *peer, char *desc);
+ 
+ /* Exactly the same a log_addentry, but muddleftpd will use freewrapper
+  * on desc so you can use safe_snprintf for desc */
+ extern void log_giveentry(int type, void *peer, char *desc);
+ 
+ /* the debug log */
+ extern void debuglog(char *format, ...);
+ 
+ /* CONFIF FILE OPERATIONS */
+ 
+ char *strsplit(char *, char *, char *);
+ void substitute(char **inputstr, char *strin, char *strout);
+ int loadconfigfile(char *filename, int (* confighandler)(char *, char *, int, 
void *), void *configdata);
+ void *loadconfigcache(char *filename);
+ char *mktokconfstr(void *tset, int section, char *setting, char *defaul);
+ void loadintfromconfig(void *cache, int section, char *setting, int *to, int 
def);
+ void loadstrfromconfig(void *cache, int section, char *setting, char **to, 
char *def);
+ void freeconfigcache(void *cache);
+ char **makeconfiglist(void *cache, char *section, char *label);
+ 
+ extern NEWFILE *nfopen(char *filename);
+ extern NEWFILE *nfdopen(int fd);
+ extern char *nfgetcs(NEWFILE *file, char testchar);
+ extern void nfclose(NEWFILE *file);
+ 
+ extern int chkpassword(char *, char *);
+ 
Index: muddleftpd/src/Makefile.in
diff -c /dev/null muddleftpd/src/Makefile.in:1.1.10.1
*** /dev/null   Sun Nov  2 13:51:36 2003
--- muddleftpd/src/Makefile.in  Sun Nov  2 13:51:34 2003
***************
*** 0 ****
--- 1,119 ----
+ 
+ # Copyright (C) 1999 Beau Kuiper
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2, or (at your option)
+ # any later version.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ 
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+ 
+ # **** TRY TO LEAVE EVERYTHING BELOW HERE ALONE!
+ 
+ include ../Makefile.defs
+ 
+ address@hidden@
+ address@hidden@
+ 
+ # where the binary is stored
+ address@hidden@
+ 
+ SRC = acl.c auth.c authanon.c authdisable.c authint.c authpam.c authunix.c \
+       bufread.c cfloader.c checkip.c cmd.c config.c datasock.c dir.c file.c \
+       ftp.c ftplist.c ftpout.c ftpsite.c ftpstat.c ftpstate.c ftptrans.c \
+       init.c logger.c main.c myglob.c newfile.c procnum.c proxy.c ratio.c \
+       select.c shmem.c socket.c string.c utils.c version.c \
+       util/pwgrent.c util/snprintf.c util/strerror.c
+ 
+ WHOSRC = ftpwho.c util/strerror.c utils.c string.c config.c newfile.c \
+          version.c util/snprintf.c util/pwgrent.c
+ 
+ MUDPASSWDSRC = mudpasswd.c util/strerror.c version.c util/snprintf.c
+ 
+ RATIOTOOLSRC = ratiotool.c util/strerror.c version.c utils.c util/snprintf.c \
+              util/pwgrent.c
+ 
+ MUDLOGDSRC = mudlogd.c util/strerror.c util/snprintf.c config.c utils.c \
+            newfile.c version.c string.c
+ 
+ ifdef NEWMALLOC
+ SRC += malloc.c
+ WHOSRC += malloc.c
+ MUDPASSWDSRC += malloc.c
+ RATIOTOOLSRC += malloc.c
+ endif
+ 
+ # Build a debug version (NOT RECOMMENDED FOR REAL USE)
+ #DEBUG = 1
+ 
+ # these flags are needed regardless of if DEBUG is used 
+ 
+ address@hidden@
+ address@hidden@ -D$(shell uname)
+ address@hidden@
+ CFLAGSSHD:=$(DEFS) @CFLAGS@
+ 
+ # Set for debugging mode
+ 
+ ifdef DEBUG
+ CFLAGS=$(DEFS) -g -Wall -Wshadow -Wpointer-arith -Waggregate-return 
-Wstrict-prototypes -DDEBUG #-Werror
+ # else set for optimising output code
+ else
+ CFLAGS=$(CFLAGSSHD)
+ endif
+ 
+ OBJ = $(SRC:.c=.o)
+ WHOOBJ = $(WHOSRC:.c=.o)
+ MUDPASSWDOBJ = $(MUDPASSWDSRC:.c=.o)
+ RATIOTOOLOBJ = $(RATIOTOOLSRC:.c=.o)
+ MUDLOGDOBJ = $(MUDLOGDSRC:.c=.o)
+ 
+ TARGETS = $(MUDOUTPROG) $(WHOPROG) $(MUDPASSWDPROG) $(RATIOTOOLPROG) \
+         $(MUDLOGD)
+ 
+ all: $(TARGETS)
+ 
+ # always force rebuilding of version.c, so it always has the current
+ # date
+ .PHONY : version.o
+ version.o:
+       $(CC) $(CFLAGS) -DDATESTR="\"$(shell date)\"" -c $(@:.o=.c) -o $@
+ 
+ $(WHOPROG): $(WHOOBJ)
+       $(CC) $(CFLAGS) $(LIBS) -o $(WHOPROG) $(WHOOBJ)
+ 
+ $(MUDPASSWDPROG): $(MUDPASSWDOBJ)
+       $(CC) $(CFLAGS) $(LIBS) -o $(MUDPASSWDPROG) $(MUDPASSWDOBJ)
+ 
+ $(RATIOTOOLPROG): $(RATIOTOOLOBJ)
+       $(CC) $(CFLAGS) $(LIBS) -o $(RATIOTOOLPROG) $(RATIOTOOLOBJ)
+ 
+ $(MUDOUTPROG): $(OBJ)
+       $(CC) $(CFLAGS) $(LIBS) -o $(MUDOUTPROG) $(OBJ)
+ 
+ $(MUDLOGD): $(MUDLOGDOBJ)
+       $(CC) $(CFLAGS) $(LIBS) -o $(MUDLOGD) $(MUDLOGDOBJ)
+ 
+ install: all
+       mkdir -p $(BINDIR)
+ 
+       install $(MUDOUTPROG) -m 755 $(BINDIR)
+       install $(WHOPROG) -m 755 $(BINDIR)
+       install $(MUDPASSWDPROG) -m 755 $(BINDIR)
+       install $(MUDLOGD) -m 755 $(BINDIR)
+ 
+ clean:
+       rm -f $(MUDOUTPROG) $(WHOPROG) *.o *~ core DEADJOE util/*.o
+       rm -f $(MUDPASSWDPROG) $(RATIOTOOLPROG) $(MUDLOGD)
+ 
+ distclean: clean
+       rm -f Makefile
+ 
+ maintainer-clean: distclean




reply via email to

[Prev in Thread] Current Thread [Next in Thread]