diff options
author | Dag-Erling Smørgrav <des@FreeBSD.org> | 2022-10-02 01:37:29 +0000 |
---|---|---|
committer | Dag-Erling Smørgrav <des@FreeBSD.org> | 2022-10-02 01:37:29 +0000 |
commit | 0aa2700123e22c2b0a977375e087dc2759b8e980 (patch) | |
tree | 9e96aa2accccbade71fc7246a2dec949f65fcde0 | |
parent | a82308abab86740e9bc37499bd2a13568764d7a0 (diff) | |
download | src-0aa2700123e2.tar.gz src-0aa2700123e2.zip |
Put OPIE to rest.
Differential Revision: https://reviews.freebsd.org/D36592
120 files changed, 39 insertions, 25502 deletions
diff --git a/Makefile.inc1 b/Makefile.inc1 index 98cb357946f7..63e9b574eaaa 100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@ -2953,7 +2953,7 @@ _prebuild_libs= ${_kerberos5_lib_libasn1} \ lib/ncurses/tinfo \ lib/ncurses/ncurses \ lib/ncurses/form \ - lib/libopie lib/libpam/libpam lib/libthr \ + lib/libpam/libpam lib/libthr \ ${_lib_libradius} lib/libsbuf lib/libtacplus \ lib/libgeom \ ${_cddl_lib_libumem} ${_cddl_lib_libnvpair} \ @@ -3026,7 +3026,7 @@ _generic_libs+= ${_DIR} .endif .endfor -lib/libopie__L lib/libtacplus__L: lib/libmd__L +lib/libtacplus__L: lib/libmd__L .if ${MK_CDDL} != "no" _cddl_lib_libumem= cddl/lib/libumem diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc index 0a0c6dfb044a..3d9e7d4c6dd4 100644 --- a/ObsoleteFiles.inc +++ b/ObsoleteFiles.inc @@ -52,6 +52,36 @@ # xargs -n1 | sort | uniq -d; # done +# 20221001: deorbit opie +OLD_FILES+=etc/opieaccess +OLD_FILES+=etc/opiekeys +OLD_FILES+=usr/bin/opieinfo +OLD_FILES+=usr/bin/opiekey +OLD_FILES+=usr/bin/opiepasswd +OLD_FILES+=usr/bin/otp-md4 +OLD_FILES+=usr/bin/otp-md5 +OLD_FILES+=usr/bin/otp-sha1 +OLD_FILES+=usr/lib/libopie.a +OLD_FILES+=usr/lib/libopie.so +OLD_LIBS+=usr/lib/libopie.so.8 +OLD_FILES+=usr/lib/libopie_p.a +OLD_FILES+=usr/bin/opieinfo +OLD_FILES+=usr/lib/pam_opie.so +OLD_LIBS+=usr/lib/pam_opie.so.6 +OLD_FILES+=usr/lib/pam_opieaccess.so +OLD_LIBS+=usr/lib/pam_opieaccess.so.6 +OLD_FILES+=usr/share/man/man1/opieinfo.1.gz +OLD_FILES+=usr/share/man/man1/opiekey.1.gz +OLD_FILES+=usr/share/man/man1/opiepasswd.1.gz +OLD_FILES+=usr/share/man/man1/otp-md4.1.gz +OLD_FILES+=usr/share/man/man1/otp-md5.1.gz +OLD_FILES+=usr/share/man/man1/otp-sha1.1.gz +OLD_FILES+=usr/share/man/man4/opie.4.gz +OLD_FILES+=usr/share/man/man5/opieaccess.5.gz +OLD_FILES+=usr/share/man/man5/opiekeys.5.gz +OLD_FILES+=usr/share/man/man8/pam_opie.8.gz +OLD_FILES+=usr/share/man/man8/pam_opieaccess.8.gz + # 20220928: telnetd(8) removed OLD_FILES+=etc/pam.d/telnetd OLD_FILES+=usr/libexec/telnetd diff --git a/contrib/opie/BUG-REPORT b/contrib/opie/BUG-REPORT deleted file mode 100644 index c772d2d504fe..000000000000 --- a/contrib/opie/BUG-REPORT +++ /dev/null @@ -1,85 +0,0 @@ -OPIE Software Distribution, Release 2.4 Bug Reporting Form -======================================= ================== - - Before submitting a bug report, please check the README file and make -sure that your "bug" is not a known problem. - - Please make a copy of this file and then edit it with your favorite -text editor (NOT a word processor; the end result needs to be reasonable ASCII -text) to include the answers to the following questions: - -1. Your name and electronic mail address, in case we need more information. - If you can provide multiple addresses, please do so in case we - are unable to reply to the first one. - -2. Your exact operating system vendor, name, and version number. If available, - please provide the output of "uname -a" and/or the version of your C - runtime library. Please be more specific than "UNIX". - -3. The exact hardware the system was installed upon. - -4. Which compiler and C runtime you used and its version number. - For instance, some systems have been known to have the GNU libc - installed as well as its native one, or to have a "BSD - compatibility" environment. - -5. What version of OPIE you are using (the output of opiepasswd -v) and, - if you used the Autoconf install, a copy of the config.h, config.log, - and Makefile that Autoconf created. - -6. A clear description of what you did and what bug then appeared. - If your system has the script(1) command, please run a session - under that to demonstrate the bug. Window-system cut-and-paste - also works well. Sometimes, the exact output is critical to - finding the bug. - -If you can provide any of the following things, it will greatly assist -us in fixing the problem and improve the chances that we'll get back to you: - -7. A diagnosis of what is causing the problem. - -8. A test case that can repeatably demonstrate the problem. - -9. A fix for the problem. - - Bug reports should be sent by Internet electronic mail to -<opie-bugs@inner.net>. This mail is run through an automated sorter that helps -get the bug report into the hands of someone who can help you. In order to -make that program work, we ask that you: - - * Send this is normal RFC822 plain text or MIME text/plain. - - * DO NOT send this or any other file as an "attachment" from - your mailer. - - * DO NOT send a copy of your bug report to ANYONE other than - <opie-bugs@inner.net>. This includes listing more than one recipient - or sending it as a carbon-copy ("Cc:") to someone else. - - * DO NOT send a copy of your bug report directly to the - authors or to any mailing lists. This really makes the - authors angry, and will be interpreted as a request to not - provide you with any help. - - * DO NOT re-send bug reports because you didn't receive a - response. We attempt to respond to ALL properly submitted - bug reports. If we can't send mail back to you or you - didn't bother to follow the directions for submitting a - bug report, you won't receive a response. - - While OPIE is NOT a supported program, we generally try to respond -to all properly submitted bug reports as soon as we can. If your bug report -is properly submitted so our machine sorter can process it, this usually -takes one working day. If our machine sorter can't process your bug report, -it usually takes a week or two. - -Copyright -========= - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - diff --git a/contrib/opie/COPYRIGHT.NRL b/contrib/opie/COPYRIGHT.NRL deleted file mode 100644 index cfbffc348760..000000000000 --- a/contrib/opie/COPYRIGHT.NRL +++ /dev/null @@ -1,68 +0,0 @@ -# @(#)COPYRIGHT 1.1 (NRL) 17 January 1995 - -COPYRIGHT NOTICE - -All of the documentation and software included in this software -distribution from the US Naval Research Laboratory (NRL) are -copyrighted by their respective developers. - -Portions of the software are derived from the Net/2 and 4.4 Berkeley -Software Distributions (BSD) of the University of California at -Berkeley and those portions are copyright by The Regents of the -University of California. All Rights Reserved. The UC Berkeley -Copyright and License agreement is binding on those portions of the -software. In all cases, the NRL developers have retained the original -UC Berkeley copyright and license notices in the respective files in -accordance with the UC Berkeley copyrights and license. - -Portions of this software and documentation were developed at NRL by -various people. Those developers have each copyrighted the portions -that they developed at NRL and have assigned All Rights for those -portions to NRL. Outside the USA, NRL has copyright on some of the -software developed at NRL. The affected files all contain specific -copyright notices and those notices must be retained in any derived -work. - -NRL LICENSE - -NRL grants permission for redistribution and use in source and binary -forms, with or without modification, of the software and documentation -created at NRL provided that the following conditions are met: - -1. All terms of the UC Berkeley copyright and license must be followed. -2. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -3. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -4. All advertising materials mentioning features or use of this software - must display the following acknowledgements: - - This product includes software developed by the University of - California, Berkeley and its contributors. - - This product includes software developed at the Information - Technology Division, US Naval Research Laboratory. - -5. Neither the name of the NRL nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THE SOFTWARE PROVIDED BY NRL IS PROVIDED BY NRL AND CONTRIBUTORS ``AS -IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NRL OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation -are those of the authors and should not be interpreted as representing -official policies, either expressed or implied, of the US Naval -Research Laboratory (NRL). - ----------------------------------------------------------------------- diff --git a/contrib/opie/INSTALL b/contrib/opie/INSTALL deleted file mode 100644 index db23f84a2b76..000000000000 --- a/contrib/opie/INSTALL +++ /dev/null @@ -1,178 +0,0 @@ -OPIE Software Distribution, Release 2.4 Installation Instructions -======================================= ========================= - - Did you read the README file? - - If not, please go do so, then come back here. There is information in -the README file that you will probably need to know in order to build and use -OPIE, and you are better off doing it before you try to compile and install -it. - - OPIE uses Autoconf to automagically figure out as much as possible -about your system. There are four steps to installing OPIE. Please read them -all first before attempting to do them. - -1. Run the "configure" script. - - Normally, you will need to type: - - sh configure - - If you would like to use an access file to allow users from some hosts -to log into your system without using OTPs (thus opening up a big security -hole, but a necessary evil for some sites), type: - - sh configure --enable-access-file=/etc/opieaccess - - If you'd like the file to go somewhere else, adjust this appropriately. - - There are a number of configure-time options available for OPIE. You -probably don't want to change the defaults. To get a complete listing of the -currently available options, type: - - sh configure --help - - Some options that may be of interest are: - - --enable-access-file=FILENAME: Enable the OPIE access file FILENAME - The OPIE access file provides a system administrator with the ability - to make the use of OTP optional for certain hosts. Note that individual - users can create a file named ".opiealways" in their home directory to - require that OTP be used to access to their account. Note also that the - access file is based on addresses, but many of the clients that use it - are only given hostnames. This opens this entire scheme up to DNS - spoofing attacks, which is a major security problem. ALWAYS use a - package such as tcp_wrappers configured to do paranoid checking on DNS - information if you enable this option (it's good practice anyway). - - --enable-server-md4: Use MD4 instead of MD5 for the server - The old S/Key package used MD4 instead of MD5. MD4 is believed to be - less secure than MD5. Use this option only for compatibility with old - key files. - - --disable-user-locking: Disable user locking - OPIE only allows one session at a time to attempt to authenticate a - principal; this prevents a possible race attack on OTP. This locking - mechanism can cause problems in some applications, in which case you - might want to disable the locking. This option also provides a work- - around if the locking code doesn't work reliably on your system. - - --enable-user-locking[=DIR]: Put user lock files in DIR [/etc/opielocks] - The OPIE lock files need to be put in an isolated directory that is - only accessable by the super-user and has a parent directory that is - only writable by the super-user. If you are trying to use OPIE with - the key file shared by NFS, you need to make the lock directory - shared too. (But you read the README file, so you knew this) - - --enable-retype: Ask users to re-type their secret pass phrases - On the one hand, this helps prevent users from having to go generate - an OTP, type it into a remote system, and then found out they - mistyped. On the other hand, it's annoying. If this is enabled, users - can simply hit return at the second prompt and the generator will skip - the retype check, which allows users who don't like the retype check - to mostly skip it. - - --enable-su-star-check: Refuse to switch to disabled accounts - On many systems, an asterisk means one thing and one thing only: this - account is never meant for human users. Therefore, it doesn't make - much sense for anyone other than an attacker to try to su to that - account. Enabling this check causes su to refuse to switch to - accounts with an asterisk in their password field. While probably - better for security, this is not compatible with traditional *IX su - behavior, so it is disabled by default - - --disable-new-prompts: Use more compatible (but less informative) prompts - OPIE uses login prompts that tell you exactly what kind of response - (an OTP response and/or a cleartext password) it expects you to give. - This can break automatic login scripts that look for 'Password:' as - the prompt for the password. If you have users that use such scripts, - you might want to disable the more informative responses so as not to - break those scripts. - - --enable-insecure-override: Allow users to override insecure checks - While OPIE cannot determine whether or not a session is secure, it can - check for fairly common signs that it isn't secure. If it believes the - session is insecure, some programs like opiekey will refuse to run - because they prompt the user to send a secret pass phrase. Sometimes - these checks declare a session insecure when it is, and sometimes the - user wants to continue anyway even if the session is insecure. If this - option is enabled, many commands gain a '-f' option to force them to - operate even if OPIE thinks the session is insecure. - - --enable-anonymous-ftp Enable anonymous FTP support - By default, the OPIE FTP daemon does not support anonymous FTP - service. The FTP daemon contains many security related bug fixes - relative to the original source, but bugs probably remain. It was not - intended to be used for anonymous FTP, where it is more open to the - commands of potentially hostile users. If you enable this option, it - will once again support anonymous FTP, but it probably isn't secure - when that way. - - --disable-utmp Disable utmp logging - --disable-wtmp Disable wtmp logging - On some systems, logging to the utmp and/or wtmp files is just a lost - cause. If this is the case on your system, you might be better off - not having OPIE even try. - - --enable-opieauto Enable support for opieauto - opieauto is a facility that caches an intermediate result of the OTP - generator so that a user-selected number of OTPs can be generated on - demand for each time the user types in the secret pass phrase. This - is great for user convenience, as typing a twenty or thirty character - secret pass phrase can be annoying. It can also be a minor security - hole (see the README for details). - -2. Edit the Makefile - - The Makefile contains some options that you may wish to modify. Also -verify that Autoconf chose the correct options for your system. - - The Makefile created by Autoconf should be correct for most users -as-is. - -3. Build OPIE - - Normally, you will need to type: - - make - - If you only want to build the client programs, type: - - make client - - If you only want to build the server programs, type: - - make server - -4. Verify that OPIE works on your system and install - - Normall, you will need to type: - - make install - - If you only want to install the client programs, type: - - make client-install - - If you only want to install the server programs, type: - - make server-install - - If you encounter any problems, you may be able to run "make uninstall" -to remove the OPIE software from your system and revert back to almost the -way things were before. - -Copyright -========= - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this document are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. diff --git a/contrib/opie/License.TIN b/contrib/opie/License.TIN deleted file mode 100644 index 0ec9d214e272..000000000000 --- a/contrib/opie/License.TIN +++ /dev/null @@ -1,45 +0,0 @@ -The Inner Net License, Version 2 -================================ - - The author(s) grant permission for redistribution and use in source and -binary forms, with or without modification, of the software and documentation -provided that the following conditions are met: - -0. If you receive a version of the software that is specifically labelled - as not being for redistribution (check the version message and/or README), - you are not permitted to redistribute that version of the software in any - way or form. -1. All terms of the all other applicable copyrights and licenses must be - followed. -2. Redistributions of source code must retain the authors' copyright - notice(s), this list of conditions, and the following disclaimer. -3. Redistributions in binary form must reproduce the authors' copyright - notice(s), this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. -4. All advertising materials mentioning features or use of this software - must display the following acknowledgement with the name(s) of the - authors as specified in the copyright notice(s) substituted where - indicated: - - This product includes software developed by <name(s)>, The Inner - Net, and other contributors. - -5. Neither the name(s) of the author(s) nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY ITS AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - Please distribute a copy of this license with the software and make it -reasonably easy for others to find. - - If these license terms cause you a real problem, contact the author. diff --git a/contrib/opie/Makefile.in b/contrib/opie/Makefile.in deleted file mode 100644 index 77e0fc3b1bb1..000000000000 --- a/contrib/opie/Makefile.in +++ /dev/null @@ -1,327 +0,0 @@ -## -# Makefile.source and Makefile: Directions for building and installing OPIE. -# -# %%% portions-copyright-cmetz-96 -# Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -# Reserved. The Inner Net License Version 2 applies to these portions of -# the software. -# You should have received a copy of the license with this software. If -# you didn't get a copy, you may request one from <license@inner.net>. -# -# Portions of this software are Copyright 1995 by Randall Atkinson and Dan -# McDonald, All Rights Reserved. All Rights under this copyright are assigned -# to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -# License Agreement applies to this software. -# -# History: -# -# Modified by cmetz for OPIE 2.4. Add libmissing to include header path. -# Renamed realclean to distclean. Added opieauto rules. Made -# system program install more tolerant of non-existent files. -# Modified by cmetz for OPIE 2.31. Moved logwtmp.o into libopie. -# Modified by cmetz for OPIE 2.3. Removed manual config -- it's -# Autoconf or bust. Replaced user configuration options -# with options.h. Eliminated unused variables. Pass down -# $(DEBUG) instead of several other variables to the -# subdirs. Extended/standard key file support. Added -# dependencies on subdir files. Made opietest call silent. -# Removed opie-md4, opie-md5, and key aliases. Removed -# test target. Make uninstall remove man page aliases. -# Modified by cmetz for OPIE 2.22. Removed @LIBOBJS@ from MISSING for -# Autoconf target. Re-ordered LFLAGS because some ld's won't -# include libmissing properly if it's not at the end. -# Modified by cmetz for OPIE 2.21. Added getusershell.o to IRIX -# missing functions. -# Modified by cmetz for OPIE 2.2. Added NEW_PROMPTS definition. -# Added MISSING and new flags-passing for libmissing. -# Quote MISSING or lose. Update TEST target for FTPD -# variable. Removed line formatting for compile commands -# since macro expansion confuses the issue anyway. -# Added targets for opieserv. Added targets for opietest. -# Removed obselete options.h target. Swapped libmissing -# and libopie. Updated manual config options. Added more -# explanatory text. Fixed uses of old SYSV and BSD4_3 -# symbols. -# Modified at NRL for OPIE 2.2: Renamed LDFLAGS setting to LIBS, -# renamed LDFLAGS in targets to LFLAGS. Added targets for -# libopie and libmissing directories. Got rid of PROTOTYPES. -# Added opiegen. Fixed RANLIB Autoconf target. -# Modified at NRL for OPIE 2.11: Fixed fatal mistype of Autoconf. -# Modified at NRL for OPIE 2.1: Changed targets to reflect source -# file name changes. Changed explanation and flags for static -# linking. Changed opieinfo target. Removed WHOAMI. Added -# Autoconf targets. Changed if conditionals to use test -# instead of [. Changed SU_DIR to SU to help autoconf. -# Changed FTPDIR and FTPDNAME to FTPD to help autoconf. -# Changed HP-UX to HP-UX9 and HP-UX10. Make uninstall -# target depend on config. HPUX *is* no longer necessary, but -# something does have to be there. Sub in Autoconf @CC@. -# Modified at NRL for OPIE 2.04: Re-worded explanation of SU_STAR_CHECK. -# Modified at NRL for OPIE 2.02: Added SU_STAR_CHECK flag. -# Modified at NRL for OPIE 2.01: Test target makes opiesu and opielogin -# setuid. install target clears that. uninstall target needs to -# remove the opiekey symlinks. opieinfo target needs to -# substitute for $(EXISTS). ifdefs target needs to check for -# starting hash. $(LFLAGS) and -o should be at the end of all -# link commands to spoon-feed drain bamaged link editors. Added -# A/UX defaults. -# Modified heavily at NRL for OPIE 2.0. -# Written at Bellcore for the S/Key Version 1 software distribution -# (Makefile). - -#============================================================================ -# CONFIGURATION PARAMETERS -- CHANGE THESE TO SUIT YOUR MACHINE - -# Shell to use for make(1) -# It's usually a good idea to leave this as-is. On some systems, ksh or bash -# may be necessary -SHELL=/bin/sh - -# OWNER is the username who should own the OPIE binaries. -# GROUP is the groupname associated with the OPIE binaries. -# -OWNER=0 -GROUP=bin - -# Where should the OPIE standard and extended databases be stored? -# -# Some sites might want to put this elsewhere. If you want to use an old -# S/Key database, you should create a link from /etc/skeykeys to /etc/opiekeys. -KEY_FILE=/etc/opiekeys - -# Are we debugging? -# -# The first line will build a normal version of OPIE. You should use it. -# -# The second is for brave souls porting OPIE to a new system or trying to -# debug it and should definitely NOT be used to build a production copy -# of OPIE. -# -# The third is the above using nifty heap debugger called "Electric Fence". -DEBUG=-O -#DEBUG=-DDEBUG=1 -g -#DEBUG=-DDEBUG=1 -g -lefence - -# These parameters are determined by Autoconf and are probably correct. -# If OPIE doesn't build or work right, try tweaking these. -CC=@CC@ -YACC=@YACC@ -FTPD=@FTPD@ -LIBS=@LIBS@ -OPTIONS=@DEFS@ -EXISTS=@EXISTS@ -MKDIR=@MKDIR@ -CHOWN=@CHOWN@ -LOCALBIN=@LOCALBIN@ -LOCALMAN=@LOCALMAN@ -SU=@SU@ -ALT_SU=@ALT_SU@ -LOGIN=@LOGIN@ -LOCK_DIR=@LOCK_DIR@ -OPIEAUTO=@OPIEAUTO@ - -BACKUP=opie.old - -CFLAGS=$(DEBUG) -Ilibmissing - -LFLAGS=-Llibopie -Llibmissing -lopie $(LIBS) -lmissing -lopie -LDEPS=libmissing/libmissing.a libopie/libopie.a - -all: client server - -ifdefs: - egrep '^#*if*def' *.c *.h | cut -f2 -d: | sort | uniq - -client: libopie/libopie.a libmissing/libmissing.a opietest-passed opiekey opiegen $(OPIEAUTO) - -client-install: client - @echo "Installing OPIE client software..." - @echo "Copying OPIE key-related files" - @if test ! -d $(LOCALBIN); then $(MKDIR) $(LOCALBIN); chmod 755 $(LOCALBIN); fi - @cp opiekey $(OPIEAUTO) $(LOCALBIN) - @$(CHOWN) $(OWNER) $(LOCALBIN)/opiekey - @if test ! -z "$(OPIEAUTO)"; then $(CHOWN) $(OWNER) $(LOCALBIN)/opieauto; fi - @chgrp $(GROUP) $(LOCALBIN)/opiekey - @echo "Changing file permissions" - @chmod 0511 $(LOCALBIN)/opiekey - @if test ! -z "$(OPIEAUTO)"; then chmod 0511 $(LOCALBIN)/opieauto; fi - @echo "Symlinking aliases to opiekey" - @-ln -s $(LOCALBIN)/opiekey $(LOCALBIN)/otp-md4 - @-ln -s $(LOCALBIN)/opiekey $(LOCALBIN)/otp-md5 - @echo "Installing manual pages" - @-for i in otp-md4 otp-md5; do ln -s opiekey.1 $(LOCALMAN)/man1/$$i.1; done - @if test ! -d $(LOCALMAN)/man1; then $(MKDIR) $(LOCALMAN)/man1; chmod 755 $(LOCALMAN)/man1; fi; cp opiekey.1 $(LOCALMAN)/man1/opiekey.1; $(CHOWN) $(OWNER) $(LOCALMAN)/man1/opiekey.1; chgrp $(GROUP) $(LOCALMAN)/man1/opiekey.1; chmod 644 $(LOCALMAN)/man1/opiekey.1 - -server: libopie/libopie.a libmissing/libmissing.a opietest-passed opielogin opiesu opiepasswd opieinfo opieftpd opieserv - -server-install: server - @echo "Installing OPIE server software..." - @echo "Copying OPIE user programs" - @if test ! -d $(LOCALBIN); then $(MKDIR) $(LOCALBIN); chmod 755 $(LOCALBIN); fi - @cp opiepasswd opieinfo $(LOCALBIN) - @echo "Changing ownership" - @$(CHOWN) $(OWNER) $(LOCALBIN)/opiepasswd $(LOCALBIN)/opieinfo - @chgrp $(GROUP) $(LOCALBIN)/opiepasswd $(LOCALBIN)/opieinfo - @echo "Changing file permissions" - @chmod 0555 $(LOCALBIN)/opieinfo - @chmod 4511 $(LOCALBIN)/opiepasswd - @echo "Installing OPIE system programs..." - @if test ! -z $(LOGIN); \ - then \ - if test ! $(EXISTS) $(LOGIN).$(BACKUP); \ - then \ - echo "Renaming existing $(LOGIN) to $(LOGIN).$(BACKUP)"; \ - mv $(LOGIN) $(LOGIN).$(BACKUP); \ - echo "Clearing permissions on $(LOGIN)"; \ - chmod 0 $(LOGIN).$(BACKUP); \ - fi; \ - echo "Copying OPIE login to $(LOGIN)"; \ - cp opielogin $(LOGIN); \ - echo "Changing ownership of $(LOGIN)"; \ - $(CHOWN) $(OWNER) $(LOGIN); \ - chgrp $(GROUP) $(LOGIN); \ - echo "Changing file permissions of $(LOGIN)"; \ - chmod 4111 $(LOGIN); \ - fi - @if test ! -z $(SU); \ - then \ - if test ! $(EXISTS) $(SU).$(BACKUP); \ - then \ - echo "Renaming existing $(SU) to $(SU).$(BACKUP)"; \ - mv $(SU) $(SU).$(BACKUP); \ - echo "Clearing permissions on $(SU)"; \ - chmod 0 $(SU).$(BACKUP); \ - fi; \ - echo "Copying OPIE su to $(SU)"; \ - cp opiesu $(SU); \ - echo "Changing ownership of $(SU)"; \ - $(CHOWN) $(OWNER) $(SU); \ - chgrp $(GROUP) $(SU); \ - echo "Changing file permissions of $(SU)"; \ - chmod 4111 $(SU); \ - fi - @if test ! -z $(ALT_SU); \ - then \ - if test ! $(EXISTS) $(ALT_SU).$(BACKUP); \ - then \ - echo "Renaming existing $(ALT_SU) to $(ALT_SU).$(BACKUP)"; \ - mv $(ALT_SU) $(ALT_SU).$(BACKUP); \ - echo "Clearing permissions on $(ALT_SU)"; \ - chmod 0 $(ALT_SU).$(BACKUP); \ - fi; \ - echo "Copying OPIE su to $(ALT_SU)"; \ - cp opiesu $(ALT_SU); \ - echo "Changing ownership of $(ALT_SU)"; \ - $(CHOWN) $(OWNER) $(ALT_SU); \ - chgrp $(GROUP) $(ALT_SU); \ - echo "Changing file permissions of $(ALT_SU)"; \ - chmod 4111 $(ALT_SU); \ - fi - @if test ! -z $(FTPD); \ - then \ - if test ! $(EXISTS) $(FTPD).$(BACKUP); \ - then \ - echo "Renaming existing $(FTPD) to $(FTPD).$(BACKUP)"; \ - mv $(FTPD) $(FTPD).$(BACKUP); \ - echo "Clearing permissions on $(FTPD).$(BACKUP)"; \ - chmod 0 $(FTPD).$(BACKUP); \ - fi; \ - echo "Copying OPIE ftp daemon to $(FTPD)"; \ - cp opieftpd $(FTPD); \ - echo "Changing ownership of $(FTPD)"; \ - $(CHOWN) $(OWNER) $(FTPD); \ - chgrp $(GROUP) $(FTPD); \ - echo "Changing file permissions of $(FTPD)"; \ - chmod 0100 $(FTPD); \ - fi - @echo "Making sure OPIE database file exists"; - @touch $(KEY_FILE) - @echo "Changing permissions of OPIE database file" - @chmod 0644 $(KEY_FILE) - @echo "Changing ownership of OPIE database file" - @$(CHOWN) $(OWNER) $(KEY_FILE) - @chgrp $(GROUP) $(KEY_FILE) - @-if test ! -z "$(LOCK_DIR)"; then echo "Creating OPIE lock directory"; mkdir $(LOCK_DIR); $(CHOWN) 0 $(LOCK_DIR); chgrp 0 $(LOCK_DIR); chmod 0700 $(LOCK_DIR); fi; - @-if test ! -z "$(ACCESS_FILE)"; then echo "Creating OPIE access file (don't say we didn't warn you)"; touch $(ACCESS_FILE); $(CHOWN) 0 $(ACCESS_FILE); chgrp 0 $(ACCESS_FILE); chmod 0444 $(ACCESS_FILE); fi; - @echo "Installing manual pages" - @if test ! -d $(LOCALMAN); then $(MKDIR) $(LOCALMAN); chmod 755 $(LOCALMAN); fi - @for i in 1 4 5 8; do for j in *.$$i; do if test ! -d $(LOCALMAN)/man$$i; then $(MKDIR) $(LOCALMAN)/man$$i; chmod 755 $(LOCALMAN)/man$$i; fi; cp $$j $(LOCALMAN)/man$$i/$$j; $(CHOWN) $(OWNER) $(LOCALMAN)/man$$i/$$j; chgrp $(GROUP) $(LOCALMAN)/man$$i/$$j; chmod 644 $(LOCALMAN)/man$$i/$$j; done; done - @echo "REMEMBER to run opiepasswd on your users immediately." - -install: client-install server-install - -uninstall: - @echo "Un-installing OPIE..." - @echo "Removing symlinks" - @-for i in otp-md4 otp-md5; do rm $(LOCALBIN)/$$i; done - @echo "Removing OPIE programs" - @-for i in opiekey opiepasswd opieinfo; do rm $(LOCALBIN)/$$i; done - @echo "Removing OPIE manual pages" - @-for i in 1 4 5 8; do for j in *.$$i; do rm $(LOCALMAN)/man$$i/$$j; done; done - @-rm $(LOCALMAN)/man1/otp-md4.1 $(LOCALMAN)/man1/otp-md5.1 - @echo "Restoring old binaries" - @-for i in $(SU) $(ALT_SU) $(LOGIN) $(FTPD); do FILE=`basename $$i`; if test ! $(EXISTS) $$i.$(BACKUP); then echo "No $$i.$(BACKUP)! Aborting."; exit 1; else echo "Removing $$FILE"; rm $$i || true; echo "Restoring old $$FILE"; mv $$i.$(BACKUP) $$i; fi; done - @echo "Resetting permissions" - @chmod 4111 $(SU) $(LOGIN) - @chmod 0100 $(FTPD) - @if test ! -z "$(ALT_SU)"; then chmod 4111 $(ALT_SU); fi - @echo "OPIE is now un-installed." - @echo "Please verify by hand that this process worked." - -opietest-passed: opietest - -./opietest && touch opietest-passed - -libopie/libopie.a: libopie/*.c *.h - (cd libopie ; $(MAKE) libopie.a CFL='$(CFLAGS) -DKEY_FILE=\"$(KEY_FILE)\"') - -libmissing/libmissing.a: libmissing/*.c - (cd libmissing ; $(MAKE) libmissing.a CFL='$(CFLAGS)') - -clean: - -rm -f *.o opiekey opiegen opielogin opiepasswd opiesu opieftpd - -rm -f opieserv opieinfo opietest opieauto *core* opietest-passed - -rm -f Makefile.munge configure.munger y.tab.c .gdb* - (cd libopie ; $(MAKE) clean) - (cd libmissing ; $(MAKE) clean) - -realclean: distclean - -distclean: clean - -rm -f *~ core* "\#*\#" Makefile make.log - -rm -f config.log config.status config.cache config.h - (cd libopie ; $(MAKE) distclean) - (cd libmissing ; $(MAKE) distclean) - -opiekey: opiekey.o $(LDEPS) - $(CC) $(CFLAGS) opiekey.o $(LFLAGS) -o opiekey - -opiegen: opiegen.o $(LDEPS) - $(CC) $(CFLAGS) opiegen.o $(LFLAGS) -o opiegen - -opieserv: opieserv.o $(LDEPS) - $(CC) $(CFLAGS) opieserv.o $(LFLAGS) -o opieserv - -opieftpd: opieftpd.o glob.o popen.o y.tab.o $(LDEPS) - $(CC) $(CFLAGS) opieftpd.o glob.o popen.o y.tab.o $(LFLAGS) -o opieftpd - -opielogin: opielogin.o permsfile.o $(LDEPS) - $(CC) $(CFLAGS) opielogin.o permsfile.o $(LFLAGS) -o opielogin - -opiepasswd: opiepasswd.o $(LDEPS) - $(CC) $(CFLAGS) opiepasswd.o $(LFLAGS) -o opiepasswd - -opiesu: opiesu.o $(LDEPS) - $(CC) $(CFLAGS) opiesu.o $(LFLAGS) -o opiesu - -y.tab.c: ftpcmd.y - $(YACC) ftpcmd.y - -opieinfo: opieinfo.o $(LDEPS) - $(CC) $(CFLAGS) opieinfo.o $(LFLAGS) -o opieinfo - -opietest: opietest.o $(LDEPS) - $(CC) $(CFLAGS) opietest.o $(LFLAGS) -o opietest - -opieauto: opieauto.o $(LDEPS) - $(CC) $(CFLAGS) opieauto.o $(LFLAGS) -o opieauto - diff --git a/contrib/opie/README b/contrib/opie/README deleted file mode 100644 index a89e168adadb..000000000000 --- a/contrib/opie/README +++ /dev/null @@ -1,508 +0,0 @@ -OPIE Software Distribution, Release 2.4 Important Information -======================================= ===================== - -Introduction -============ - - "One-time Passwords In Everything" (OPIE) is a freely distributable -software package originally developed at and for the US Naval Research -Laboratory (NRL). Recent versions are the result of a cooperative effort -between of NRL, several of the original NRL authors, The Inner Net, and many -other contributors from the Internet community. - - OPIE is an implementation of the One-Time Password (OTP) System that -is being considered for the Internet standards-track. OPIE provides a one-time -password system. The system should be secure against the passive attacks -now commonplace on the Internet (see RFC 1704 for more details). The system -is vulnerable to active dictionary attacks, though these are not widespread -at present and can be detected through proper use of system audit -software. - - OPIE is primarily written for UNIX-like operating systems, but -we are working to make applicable portions portable to other operating systems. -The OPIE software is derived in part from and is fully interoperable with the -Bell Communications Research (Bellcore) S/Key Release 1 software. Because -Bellcore claims "S/Key" as a trademark for their software, NRL was forced to -use a different name (we picked "OPIE") for this software distribution. - - OPIE includes the following additions/modifications to the -original Bellcore S/Key(tm) Version 1 software: - -* Just about three command installation (unpack the software, run the - configure script, and run make install). While we still recommend that you - follow instructions and test things by hand, the more adventurous can - install OPIE quickly. - -* A modified BSD FTP daemon that does OTP. - -* A version of su that uses OTP by default. - -* MD5 support. MD5 is now the default algorithm, though MD4 is still supported - by changing a parameter in the Makefile. This change was made because MD5 is - widely believed to be cryptographically stronger than MD4 (see RFC 1321). - -* A more portable version of MD4 has been substituted for the original MD4. - This should solve the endian problems that were in S/Key. - -* Most of the system-dependencies have been moved to a new file "opie_cfg.h". - -* Configuration options have been moved to the Makefile. - -* Isolated system dependencies (e.g. BSDisms) with appropriate #ifdefs. - -* Revised the opiekey(1) program to simultaneously support MD4 and MD5, with - the default algorithm being tunable using the MDX symbol in the Makefile. - -* More operating systems are supported by recent versions of OPIE, but older - BSD systems that aren't close to being compliant with the POSIX standard are - no longer supported. - -* Transition mechanisms are optional to prevent potential back doors. - -* On systems using the /etc/opieaccess transition mechanism, users can choose - to require the use of OPIE to login to their accounts when it would - otherwise be optional. - -* Bug fixes - -* Cosmetic changes - -* Prompts (optionally) identify specifically what kind of entry (system - password, secret pass phrase, or OTP response) is allowed. - -* Changes to mostly conform with the draft Internet OTP standard. - -A Glance at What's New -====================== - - 2.4 TEST VERSION -- NOT FOR REDISTRIBUTION - - Merged in opieauto, which is disabled by default. - - Lots of documentation updates. - - Portability and bug fixes. - - 2.32 January 1, 1998. - - Indicate support for extended responses in challenges and check for such -indication before generating any extended responses. - - Lots of portability and bug fixes. - - 2.31 March 20, 1997. - - Removed active attack protection support due to patent problems. - - Removed the supplemental key file; it did more harm than good. - - Moved user locks to a separate directory. - - Moved user-serviceable configuration options to the configure script. - - Lots of portability and bug fixes. - - 2.3 September 22, 1996 - - Autoconf is now the only supported configuration method. - - Lots of internal functions got re-written in ways that will make some -planned future changes easier. - - OTP extended responses, such as automatic re-initialization. - - Support for a supplemental key file that stores information that was not -in the original /etc/skeykeys file. This allows OPIE to store extra data needed -for things like the OTP re-initialization extended response without breaking -interoperability with other S/Key derived programs. This file is named -"/etc/opiekeys.ext" by default. Unlike the standard key file, it MUST NOT be -world readable. - - OPIE should better support some of the native "features" of drain bamaged -OSs such as AIX, HP-UX, and Solaris. - - OPIE's utmp/wtmp handling has been completely re-written. This should solve -many of the utmp/wtmp problems people have been having. - - Lots of cleanups. - - Bug fixes. - - 2.22 May 3, 1996. - - More minor bug fixes. OPIE once again works on Solaris 2.x. - - 2.21 April 27, 1996. - - Minor bug fixes. - - 2.2 April 11, 1996. - - opiesubr.c, opiesubr2.c, and a few other functions moved into a -subdirectory and split into files with fine granularity. Ditto with missing -function replacements. This subdirectory structure changes a lot of things -around and more splitting like this should be expected in the near future. - - Added opiegenerator() library function that should make it very easy to -create OTP clients using the OPIE library (this function is subject to change: -there are a few problems remaining to be solved). Just about re-wrote -opiegetpass() to use raw I/O and got most of the OPIE programs actually using -that function. Autoconf build fixes. Lots of bug fixes. Lots of portability -fixes. Function declarations should be ANSI style for ANSI compilers. Several -fixes to bring OPIE in line with the latest OTP spec. MJR DES key crunch -de-implemented. - - Added sample programs: opiegen (client) and opieserv (server). - - Probably broke non-autoconf support along the way :(. I've tried to bring -this back in sync, but it may still be broken. - - 2.11 December 27, 1995. - - Minor bug fixes. - - 2.10 December 26, 1995. - - Optional autoconf support. opieinfo is now a normal program. Bugs fixed -- -should work much better on SunOS, HP-UX, and AIX. - - 2.01 -- 2.04 - - Bug fix releases. - - 2.00 - - Initial release of OPIE 2.0. - -System Requirements -=================== - - In order to build and run properly, OPIE requires: - - * A UNIX-like operating system - * An ANSI C compiler and run-time library - * POSIX.1- and X/Open XPG-compliance (including termios) - * The BSD sockets API - * Approximately five megabytes of free disk space - - In practice, we believe that many systems who are close to meeting -these requirements but aren't completely there (for example, SunOS with the -native compiler) will also work. Systems who aren't anywhere near close -(for example, DOS) are not likely to work without major adjustments to the -OPIE code. - -If OPIE Doesn't Work -==================== - - Under NO circumstances should you send trouble reports directly to the -authors or contributors. They WILL BE IGNORED. - - Make sure you have the latest version of OPIE. The latest version is -available by HTTP at: - - http://www.inner.net/pub/opie - - (sorry, but anonymous FTP is no longer available) - - If you have installed the OPIE software (either through "make test" -in (7) above or "make install" in (14)), you can run "make uninstall" from the -OPIE software distribution directory. This should remove the OPIE software and -restore the original system programs, but it will not work properly (and can -even result in the total loss of the old system programs -- beware!) if the -installation procedure itself did not work properly. - - If you are running a release version, try installing the latest public -test version (look around). These frequently have already fixed the problem -you are seeing, but may have new problems of their own (that's why they're -test versions!). Similarly, if you are running a test version, try installing -the latest released version. - - OPIE is NOT supported software. We don't promise to support you or -even to acknowledge your mail, but we are interested in bug reports and are -reasonable folks. We also have an interest in seeing OPIE work on as many -systems as we can. However, if your system doesn't meet the basic requirements -for OPIE, this will probably require an unreasonable amount of effort. - - The best bug reports include a diagnosis of the problem and a fix. -Your bug report can still be valuable if you can at least diagnose what the -problem is. If you just tell us "it doesn't work," then we won't be able to -do anything to help you. - - We've received a number of bug reports from people that look -interesting, only to find when we try to follow up on them that the user -either has an invalid return address or never bothered to respond to our -followup. Please make sure that bug reports you send us have an electronic -mail address that we can reply to somewhere in them (if necessary, just -put it in the message body). If we send you a response and you are unable -to invest the time to work with us to solve the problem, please tell us -- -few things are more irritating than when someone sends us information -about a bug that we'd like to fix and then is never heard from again. - - We try to respond to all properly submitted bug reports. Improperly -submitted bug reports will be responded to only if we have time left after -responding to properly submitted bug reports. We deliberately ignore bug -"reports" sent to mailing lists or USENET news groups instead of or before -our bug report address. At the least, the latter practice is lacking in -courtesy. - - The file BUG-REPORT contains our bug reporting form. Please use it -and follow the submission instructions in that file. We are going to switch -to machine-parsed bug report processing sometime in the near future to make -it easier to coordinate bug hunting. - -Gotchas -======= - - Solaris 2.x is just a lose. It does a lot of nonstandard and downright -broken things. If you want OPIE to be reliable on your box, upgrade to OpenBSD -or Linux. - - While an almost universal "feature", most people remain unaware that -an intruder can log into a system, then log in again by running the "login" -command from a shell. Because the second login is from the local host, the -utmp entry will not show a remote login host anymore. The OPIE replacement -for /bin/login currently carries on this behavior for compatibility reasons. -If you would like to prevent this from happening, you should change the -permissions of /bin/login to 0100, thus preventing unprivileged users from -executing it. This fix should work on non-OPIE /bin/login programs as well. - - On 4.3BSDish systems, the supplied /bin/login replacement obtains -the terminal type for the console comes from the console line in the /etc/ttys -file. Several systems contain a default entry in this file that specifies the -console terminal type as "unknown". This is probably not what you want. - - The OPIE FTP daemon responds with two 530 error messages if you have -not yet logged in and execute a command that will also do a PORT request. This -is a feature, not a bug, as the FTP client is really sending the server two -commands (for instance, a PORT and a LIST if you tell your BSD FTP client to do -a DIR command) and the server is responding to each of them with an error. The -stock BSD FTP daemon doesn't check the PORT commands to see if you are logged -in, so you would only get one error message. This change should not break any -standards-compliant FTP client, but there are a number of brain-damaged GUI -clients that have a track record for not dealing gracefully with any server -other than the stock BSD one. - - The /etc/opieaccess transition mechanism is, by definition, a security -hole in the OPIE software because an attacker could use it to circumvent the -requirement for OPIE authentication. You should compile the software with -support for this file disabled unless you absolutely cannot use the software -without it because of your environment. If you do use this support for -transition purposes, you should move people to OTP authentication as quickly -as possible and rebuild and reinstall OPIE with this transition support -disabled so that you won't have a lurking security hole. - - If this wasn't already clear, do not let your sequence number fall -below about ten. If your sequence number reaches zero, your OTP sequence -can only be reset by the superuser. System administrators should make this -caveat known to their users. - - On Solaris 2.x systems (and possibly others) running NIS+, users -should run keylogin(1) manually after login because opielogin(1) does not -do that automatically like the system login(1) program. - - There are reports that some versions of GNU C Compiler (GCC) -(when installed on some systems) use their own termios(4) instead of -the system's termios(4). This can cause problems. If you are having -compilation problems that seem to relate to termios and you are using -GCC, you should probably verify that it is using the system's -termios(4) and not some internal-to-GCC termios(4). One report -indicates that Sun's C compiler works fine with SunOS 4.1.3/4.1.4 on -SPARC, but that some version of GCC on the same system has this -termios(4) problem. We haven't reproduced these problems ourselves -and hence aren't sure what is happening, but we pass this along for -your information. (This may have something to do with the use of GNU -libc) - - If a user has a valid entry in the opiekeys database but has an -asterisk in their traditional password entry, they will not be able to -log in via opielogin, but opielogin will decrement their sequence number -if a valid response is received. - - On some systems, the OPIE login program does not always display -a "login:" prompt the first time. There is a race condition in many older -telnetds that is probably the cause of this problem. This should be fixed by -replacing your telnetd with the latest version of the stock telnetd -(ftp.cray.com:/src/telnet). - - The standard HPUX compiler is severely drain bamaged. One of the -worst parts is that it sometimes won't grok a symbol definition with forward -slashes in them properly and can choke badly on the definition of the key -file's location. If this happens to you, install and use GCC. (This problem -may or may not also come up with the optional HP ANSI C compiler -- we don't -know for sure what compilers have this problem). - - As of OPIE 2.2, the seed is converted to lower case and its length is -checked in order to comply with the OTP specification. If any of your users -have seeds that use capital letters or are too long, they need to run the OPIE -2.2 opiepasswd program to re-initialize their sequence to one with a different -seed. - - opielogin is a replacement for /bin/login. It is NOT an OPIE "shell." -You can use it as one, but don't be surprised if it doesn't behave the way -you expect -- we've seen various reports of success and failure when used this -way. An OPIE "shell" is on the TODO list. - - Clients that use opiegen() will automatically send a re-initialization -extended response if the sequence number falls below ten. If the server does -not support this, the user will need to log in using opiekey and reset his -sequence manually (using opiepasswd). - - For reasons that remain very unclear, Solaris passes the login name -from getty/telnetd to login by stuffing it in the terminal input buffer -instead of passing it on the command line like every other *IX. This is just -plain broken. Solaris has other problems with its telnetd and getty; you may -want to consider getting the telnet(d) sources (ftp.cray.com:/src/telnet) -and reasonable getty sources (try sunsite.unc.edu:/pub/Linux/system/Serial, at -least one of agetty, mingetty, and getty_ps should work) and replacing the -Solaris versions with these. OPIE should work *much* more happily with these -programs than the ones that come with Solaris. However, there could be negative -side effects -- this is not a procedure recommended for the faint of heart. - - OPIE is a lot more fussy than it used to be about lock files and where -it puts them. The lock file directory must be a directory used only for OPIE -lock files. It must be a directory, owned by the superuser, and must be mode -0700. - - opieauto is a potential security hole. It opens a limited window of -exposure by transmitting and storing information that can be used to -generate one or more OTPs earlier than the current sequence number. Every -effort has been made to limit the potential for compromise to the user- -specified window. However, an attacker with superuser priveleges or access to -your account on the client system can still generate OTPs based on the -information cached via opieauto. In practice, there are other ways for such an -an attacker to get your entire secret pass phrase, so this is probably not -creating a significant new security problem. However, because of this -potential for problems and because opieauto uses system features that are not -present on all systems, opieauto support is not compiled in by default and -must be specifically enabled at compile time. - - Many users are running OPIE with the key file on a shared NFS volume -in order to use OTP as a single-login system for a cluster of machines. OPIE -was NOT designed to be operated this way, though it does seem to work. If it -fails or if this proves insecure, this is not OPIE's fault. Note that, if you -do this, you probably want to share the OPIE lock files too. - -Gripes -====== - - Is it too much to ask that certain OS vendors just do the right thing -and not "fix" what isn't broken? (Look at all the ifdefs in the OPIE code and -the answer is clear) - - utmp and wtmp handling in OPIE has been a very, very sore subject. -Every vendor does things differently, and, of course, most of them swear they -are complying to some or other "standard." My (cmetz) conclusion is that the -only thing that is standard about utmp and wtmp handling is that it will be -nonstandard on any given system. I've tried a lot of things and I've wasted -*a lot* of time on trying to make utmp and wtmp handling work for everybody; -my conclusion is that it will never happen. While I am still interested in -hearing about fixes for utmp/wtmp on systems where they don't work, I'm not -likely to go out of my way to fix utmp/wtmp handling. If you want it fixed, -the best way to do it is to fix it yourself and contribute a patch. As long as -the patch is reasonable, it will be included in the next release. If you can't -wait, use the --disable-utmp option. - -Credits -======= - - First and foremost credit goes to Phil Karn, Neil M. Haller, and John -S. Walden of Bellcore for creating the S/Key Version 1 software distribution -and for making its source code freely available to the public. Without their -work, OPIE would not exist. Neil has also invested a good amount of his time -in the development of a standard for One-Time Passwords so that packages like -OPIE can interoperate. - - The first NRL OPIE distribution included modifications made primarily -by Dan McDonald of the U.S. Naval Research Laboratory (NRL) during March 1994. -The 2nd NRL OPIE distribution, which has a number of improvements in areas -such as portability of software and ease of installation, is primarily the -work of Ran Atkinson and Craig Metz. Other NRL contributors include Brian -Adamson, Steve Batsell, Preston Mullen, Bao Phan, Jim Ramsey, and Georg Thomas. - - Some of version 2.2 was developed at NRL and released as a work in -progress. Most of the release version was developed by Craig Metz (also of -NRL), others at The Inner Net, and contributors from the Internet community. -Versions beyond 2.2 were developed outside NRL, so don't blame them if they -don't work (But please credit them when it does. Without the NRL effort, there -wouldn't be an OPIE). - - We would like to also thank everyone who helped us by by beta testing, -reporting bugs, suggesting improvements, and/or sending us patches. We -appreciate your contributions -- they have helped to make OPIE more of a -community effort. These contributors include: - - Mowgli Assor - Lawrie Brown - Andrew Davis - Taso N. Devetzis - Carson Gaspar - Dennis Glatting - Ben Golding - Axel Grewe - "Hobbit" - Kojima Hajime - Darren Hosking - Matt Hucke - Kenji Kamizono - Charles Karney - Jeff Kletsky - Peter Koch - Martijn Koster - Osamu Kurati - Ayamura Kikuchi - Ronald van der Meer - Bret Musser - Hiroshi Nakano - Ikuo Nakagawa - Angelo Neri - C. R. Oldham - Ossama Othman - D. Jason Penney - John Perkins - Steve Price - Jim Simmons - Steve Simmons - Brad Smith - Werner Wiethege - Ken-ichi Yamasaki - Wietse Venema - - OPIE development at NRL was sponsored by the Information Security -Program Office (PD 71E), U.S. Space and Naval Warfare Systems Command, Crystal -City, Virginia. - - If you have problems with OPIE, please follow the instructions under -"If OPIE Doesn't Work." Under NO circumstances should you send trouble -reports directly to the authors or contributors. They WILL BE IGNORED. - -Trademarks -========== -S/Key is a trademark of Bell Communications Research (Bellcore). -UNIX is a trademark of X/Open. -NRL is a trademark of the U. S. Naval Research Laboratory. - -All other trademarks are trademarks of their respective owners. - -The term "OPIE" is in the public domain and hence cannot be legally -trademarked by anyone. Please do not abuse it. - -Copyrights -========== -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - -Portions of this software are copyright 1980-1990 Regents of the -University of California, all rights reserved. The Berkeley Software -License Agreement specifies the terms and conditions for redistribution. - -Portions of this software are copyright 1990 Bell Communications Research -(Bellcore), all rights reserved. diff --git a/contrib/opie/acconfig.h b/contrib/opie/acconfig.h deleted file mode 100644 index e33ebcf13058..000000000000 --- a/contrib/opie/acconfig.h +++ /dev/null @@ -1,226 +0,0 @@ -/* acconfig.h: Extra commentary for Autoheader - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -/* Define if the closedir function returns void instead of int. */ -#undef CLOSEDIR_VOID - -/* Define if you want the FTP daemon to support anonymous logins. */ -#undef DOANONYMOUS - -/* The default value of the PATH environment variable */ -#undef DEFAULT_PATH - -/* Defined if the file /etc/default/login exists - (and, presumably, should be looked at by login) */ -#undef HAVE_ETC_DEFAULT_LOGIN - -/* Defined to the name of a file that contains a list of files whose - permissions and ownerships should be changed on login. */ -#undef HAVE_LOGIN_PERMFILE - -/* Defined to the name of a file that contains a list of environment - values that should be set on login. */ -#undef HAVE_LOGIN_ENVFILE - -/* Defined if the file /etc/securetty exists - (and, presumably, should be looked at by login) */ -#undef HAVE_SECURETTY - -/* Defined if the file /etc/shadow exists - (and, presumably, should be looked at for shadow passwords) */ -#undef HAVE_ETC_SHADOW - -/* The path to the access file, if we're going to use it */ -#undef PATH_ACCESS_FILE - -/* The path to the mail spool, if we know it */ -#undef PATH_MAIL - -/* The path to the utmp file, if we know it */ -#undef PATH_UTMP_AC - -/* The path to the utmpx file, if we know it */ -#undef PATH_UTMPX_AC - -/* The path to the wtmp file, if we know it */ -#undef PATH_WTMP_AC - -/* The path to the wtmpx file, if we know it */ -#undef PATH_WTMPX_AC - -/* Defined if the system's profile (/etc/profile) displays - the motd file */ -#undef HAVE_MOTD_IN_PROFILE - -/* Defined if the system's profile (/etc/profile) informs the - user of new mail */ -#undef HAVE_MAILCHECK_IN_PROFILE - -/* Define if you have a nonstandard gettimeofday() that takes one argument - instead of two. */ -#undef HAVE_ONE_ARG_GETTIMEOFDAY - -/* Define if the system has the getenv function */ -#undef HAVE_GETENV - -/* Define if the system has the setenv function */ -#undef HAVE_SETENV - -/* Define if the system has the /var/adm/sulog file */ -#undef HAVE_SULOG - -/* Define if the system has the unsetenv function */ -#undef HAVE_UNSETENV - -/* Define if the compiler can handle ANSI-style argument lists */ -#undef HAVE_ANSIDECL - -/* Define if the compiler can handle ANSI-style prototypes */ -#undef HAVE_ANSIPROTO - -/* Define if the system has an ANSI-style printf (returns int instead of char *) */ -#undef HAVE_ANSISPRINTF - -/* Define if the compiler can handle ANSI-style variable argument lists */ -#undef HAVE_ANSISTDARG - -/* Define if the compiler can handle void argument lists to functions */ -#undef HAVE_VOIDARG - -/* Define if the compiler can handle void return "values" from functions */ -#undef HAVE_VOIDRET - -/* Define if the compiler can handle void pointers to our liking */ -#undef HAVE_VOIDPTR - -/* Define if the /bin/ls command seems to support the -g flag */ -#undef HAVE_LS_G_FLAG - -/* Define if there is a ut_pid field in struct utmp */ -#undef HAVE_UT_PID - -/* Define if there is a ut_type field in struct utmp */ -#undef HAVE_UT_TYPE - -/* Define if there is a ut_user field in struct utmp */ -#undef HAVE_UT_USER - -/* Define if there is a ut_name field in struct utmp */ -#undef HAVE_UT_NAME - -/* Define if there is a ut_host field in struct utmp */ -#undef HAVE_UT_HOST - -/* Define if there is a ut_id field in struct utmp */ -#undef HAVE_UT_ID - -/* Define if there is a ut_syslen field in struct utmp */ -#undef HAVE_UT_SYSLEN - -/* Define if there is a utx_syslen field in struct utmpx */ -#undef HAVE_UTX_SYSLEN - -/* Define if the system has getutline() */ -#undef HAVE_GETUTLINE - -/* Defined if the system has SunOS C2 security shadow passwords */ -#undef HAVE_SUNOS_C2_SHADOW - -/* Defined if you want to disable utmp support */ -#undef DISABLE_UTMP - -/* Defined if you want to disable wtmp support */ -#undef DISABLE_WTMP - -/* Defined if you want to allow users to override the insecure checks */ -#undef INSECURE_OVERRIDE - -/* Defined to the default hash value, always defined */ -#undef MDX - -/* Defined if new-style prompts are to be used */ -#undef NEW_PROMPTS - -/* Defined to the path of the OPIE lock directory */ -#undef OPIE_LOCK_DIR - -/* Defined if users are to be asked to re-type secret pass phrases */ -#undef RETYPE - -/* Defined if su should not switch to disabled accounts */ -#undef SU_STAR_CHECK - -/* Defined if user locking is to be used */ -#undef USER_LOCKING - -/* Defined if opieauto is to be used */ -#undef OPIEAUTO - -/* Define if you have the atexit function. */ -#undef HAVE_ATEXIT - -/* Define if you have the endutent function. */ -#undef HAVE_ENDUTENT - -/* Define if you have the initgroups function. */ -#undef HAVE_INITGROUPS - -/* Define if you have the memcmp function. */ -#undef HAVE_MEMCMP - -/* Define if you have the memcpy function. */ -#undef HAVE_MEMCPY - -/* Define if you have the memset function. */ -#undef HAVE_MEMSET - -/* Define if you have the getcwd function. */ -#undef HAVE_GETCWD - -/* Define if you have the getenv function. */ -#undef HAVE_GETENV - -/* Define if you have the getutline function. */ -#undef HAVE_GETUTLINE - -/* Define if you have the pututline function. */ -#undef HAVE_PUTUTLINE - -/* Define if you have the setenv function. */ -#undef HAVE_SETENV - -/* Define if you have the setegid function. */ -#undef HAVE_SETEGID - -/* Define if you have the seteuid function. */ -#undef HAVE_SETEUID - -/* Define if you have the setutent function. */ -#undef HAVE_SETUTENT - -/* Define if you have the sigprocmask function. */ -#undef HAVE_SIGPROCMASK - -/* Define if you have the strchr function. */ -#undef HAVE_STRCHR - -/* Define if you have the strrchr function. */ -#undef HAVE_STRRCHR - -/* Define if you have the strtoul function. */ -#undef HAVE_STRTOUL - -/* Define if you have the sysconf function. */ -#undef HAVE_SYSCONF - -/* Define if you have the uname function. */ -#undef HAVE_UNAME - -/* Define if you have the unsetenv function. */ -#undef HAVE_UNSETENV diff --git a/contrib/opie/config.h.in b/contrib/opie/config.h.in deleted file mode 100644 index ca700f7e7212..000000000000 --- a/contrib/opie/config.h.in +++ /dev/null @@ -1,450 +0,0 @@ -/* config.h.in. Generated automatically from configure.in by autoheader. */ - -/* Define if on AIX 3. - System headers sometimes define this. - We just want to avoid a redefinition error message. */ -#ifndef _ALL_SOURCE -#undef _ALL_SOURCE -#endif - -/* Define if using alloca.c. */ -#undef C_ALLOCA - -/* Define to empty if the keyword does not work. */ -#undef const - -/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. - This function is required for alloca.c support on those systems. */ -#undef CRAY_STACKSEG_END - -/* Define if you have alloca, as a function or macro. */ -#undef HAVE_ALLOCA - -/* Define if you have <alloca.h> and it should be used (not on Ultrix). */ -#undef HAVE_ALLOCA_H - -/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */ -#undef HAVE_SYS_WAIT_H - -/* Define if on MINIX. */ -#undef _MINIX - -/* Define if the system does not provide POSIX.1 features except - with this defined. */ -#undef _POSIX_1_SOURCE - -/* Define if you need to in order for stat and other things to work. */ -#undef _POSIX_SOURCE - -/* Define as the return type of signal handlers (int or void). */ -#undef RETSIGTYPE - -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at run-time. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown - */ -#undef STACK_DIRECTION - -/* Define if you want the FTP daemon to support anonymous logins. */ -#undef DOANONYMOUS - -/* The default value of the PATH environment variable */ -#undef DEFAULT_PATH - -/* Defined if the file /etc/default/login exists - (and, presumably, should be looked at by login) */ -#undef HAVE_ETC_DEFAULT_LOGIN - -/* Defined to the name of a file that contains a list of files whose - permissions and ownerships should be changed on login. */ -#undef HAVE_LOGIN_PERMFILE - -/* Defined to the name of a file that contains a list of environment - values that should be set on login. */ -#undef HAVE_LOGIN_ENVFILE - -/* Defined if the file /etc/securetty exists - (and, presumably, should be looked at by login) */ -#undef HAVE_SECURETTY - -/* Defined if the file /etc/shadow exists - (and, presumably, should be looked at for shadow passwords) */ -#undef HAVE_ETC_SHADOW - -/* The path to the access file, if we're going to use it */ -#undef PATH_ACCESS_FILE - -/* The path to the mail spool, if we know it */ -#undef PATH_MAIL - -/* The path to the utmp file, if we know it */ -#undef PATH_UTMP_AC - -/* The path to the wtmp file, if we know it */ -#undef PATH_WTMP_AC - -/* The path to the wtmpx file, if we know it */ -#undef PATH_WTMPX_AC - -/* Defined if the system's profile (/etc/profile) displays - the motd file */ -#undef HAVE_MOTD_IN_PROFILE - -/* Defined if the system's profile (/etc/profile) informs the - user of new mail */ -#undef HAVE_MAILCHECK_IN_PROFILE - -/* Define if you have a nonstandard gettimeofday() that takes one argument - instead of two. */ -#undef HAVE_ONE_ARG_GETTIMEOFDAY - -/* Define if the system has the getenv function */ -#undef HAVE_GETENV - -/* Define if the system has the setenv function */ -#undef HAVE_SETENV - -/* Define if the system has the /var/adm/sulog file */ -#undef HAVE_SULOG - -/* Define if the system has the unsetenv function */ -#undef HAVE_UNSETENV - -/* Define if the compiler can handle ANSI-style argument lists */ -#undef HAVE_ANSIDECL - -/* Define if the compiler can handle ANSI-style prototypes */ -#undef HAVE_ANSIPROTO - -/* Define if the system has an ANSI-style printf (returns int instead of char *) */ -#undef HAVE_ANSISPRINTF - -/* Define if the compiler can handle ANSI-style variable argument lists */ -#undef HAVE_ANSISTDARG - -/* Define if the compiler can handle void argument lists to functions */ -#undef HAVE_VOIDARG - -/* Define if the compiler can handle void return "values" from functions */ -#undef HAVE_VOIDRET - -/* Define if the compiler can handle void pointers to our liking */ -#undef HAVE_VOIDPTR - -/* Define if the /bin/ls command seems to support the -g flag */ -#undef HAVE_LS_G_FLAG - -/* Define if there is a ut_pid field in struct utmp */ -#undef HAVE_UT_PID - -/* Define if there is a ut_type field in struct utmp */ -#undef HAVE_UT_TYPE - -/* Define if there is a ut_name field in struct utmp */ -#undef HAVE_UT_NAME - -/* Define if there is a ut_host field in struct utmp */ -#undef HAVE_UT_HOST - -/* Define if there is a ut_id field in struct utmp */ -#undef HAVE_UT_ID - -/* Define if there is a utx_syslen field in struct utmpx */ -#undef HAVE_UTX_SYSLEN - -/* Define if the system has getutline() */ -#undef HAVE_GETUTLINE - -/* Defined if the system has SunOS C2 security shadow passwords */ -#undef HAVE_SUNOS_C2_SHADOW - -/* Defined if you want to disable utmp support */ -#undef DISABLE_UTMP - -/* Defined if you want to disable wtmp support */ -#undef DISABLE_WTMP - -/* Defined if you want to allow users to override the insecure checks */ -#undef INSECURE_OVERRIDE - -/* Defined to the default hash value, always defined */ -#undef MDX - -/* Defined if new-style prompts are to be used */ -#undef NEW_PROMPTS - -/* Defined to the path of the OPIE lock directory */ -#undef OPIE_LOCK_DIR - -/* Defined if users are to be asked to re-type secret pass phrases */ -#undef RETYPE - -/* Defined if su should not switch to disabled accounts */ -#undef SU_STAR_CHECK - -/* Defined if opieauto is to be used */ -#undef OPIEAUTO - -/* Define if you have the atexit function. */ -#undef HAVE_ATEXIT - -/* Define if you have the endutent function. */ -#undef HAVE_ENDUTENT - -/* Define if you have the initgroups function. */ -#undef HAVE_INITGROUPS - -/* Define if you have the memcmp function. */ -#undef HAVE_MEMCMP - -/* Define if you have the memcpy function. */ -#undef HAVE_MEMCPY - -/* Define if you have the memset function. */ -#undef HAVE_MEMSET - -/* Define if you have the getcwd function. */ -#undef HAVE_GETCWD - -/* Define if you have the getenv function. */ -#undef HAVE_GETENV - -/* Define if you have the getutline function. */ -#undef HAVE_GETUTLINE - -/* Define if you have the pututline function. */ -#undef HAVE_PUTUTLINE - -/* Define if you have the setenv function. */ -#undef HAVE_SETENV - -/* Define if you have the setegid function. */ -#undef HAVE_SETEGID - -/* Define if you have the seteuid function. */ -#undef HAVE_SETEUID - -/* Define if you have the setutent function. */ -#undef HAVE_SETUTENT - -/* Define if you have the sigprocmask function. */ -#undef HAVE_SIGPROCMASK - -/* Define if you have the strchr function. */ -#undef HAVE_STRCHR - -/* Define if you have the strrchr function. */ -#undef HAVE_STRRCHR - -/* Define if you have the strtoul function. */ -#undef HAVE_STRTOUL - -/* Define if you have the sysconf function. */ -#undef HAVE_SYSCONF - -/* Define if you have the uname function. */ -#undef HAVE_UNAME - -/* Define if you have the unsetenv function. */ -#undef HAVE_UNSETENV - -/* Define if you have the bcopy function. */ -#undef HAVE_BCOPY - -/* Define if you have the bzero function. */ -#undef HAVE_BZERO - -/* Define if you have the endspent function. */ -#undef HAVE_ENDSPENT - -/* Define if you have the fpurge function. */ -#undef HAVE_FPURGE - -/* Define if you have the getdtablesize function. */ -#undef HAVE_GETDTABLESIZE - -/* Define if you have the getgroups function. */ -#undef HAVE_GETGROUPS - -/* Define if you have the gethostname function. */ -#undef HAVE_GETHOSTNAME - -/* Define if you have the getspnam function. */ -#undef HAVE_GETSPNAM - -/* Define if you have the gettimeofday function. */ -#undef HAVE_GETTIMEOFDAY - -/* Define if you have the getttynam function. */ -#undef HAVE_GETTTYNAM - -/* Define if you have the getusershell function. */ -#undef HAVE_GETUSERSHELL - -/* Define if you have the getutxline function. */ -#undef HAVE_GETUTXLINE - -/* Define if you have the getwd function. */ -#undef HAVE_GETWD - -/* Define if you have the index function. */ -#undef HAVE_INDEX - -/* Define if you have the lstat function. */ -#undef HAVE_LSTAT - -/* Define if you have the on_exit function. */ -#undef HAVE_ON_EXIT - -/* Define if you have the pututxline function. */ -#undef HAVE_PUTUTXLINE - -/* Define if you have the rindex function. */ -#undef HAVE_RINDEX - -/* Define if you have the setgroups function. */ -#undef HAVE_SETGROUPS - -/* Define if you have the setlogin function. */ -#undef HAVE_SETLOGIN - -/* Define if you have the setpriority function. */ -#undef HAVE_SETPRIORITY - -/* Define if you have the setregid function. */ -#undef HAVE_SETREGID - -/* Define if you have the setresgid function. */ -#undef HAVE_SETRESGID - -/* Define if you have the setresuid function. */ -#undef HAVE_SETRESUID - -/* Define if you have the setreuid function. */ -#undef HAVE_SETREUID - -/* Define if you have the setvbuf function. */ -#undef HAVE_SETVBUF - -/* Define if you have the sigaddset function. */ -#undef HAVE_SIGADDSET - -/* Define if you have the sigblock function. */ -#undef HAVE_SIGBLOCK - -/* Define if you have the sigemptyset function. */ -#undef HAVE_SIGEMPTYSET - -/* Define if you have the sigsetmask function. */ -#undef HAVE_SIGSETMASK - -/* Define if you have the socket function. */ -#undef HAVE_SOCKET - -/* Define if you have the strerror function. */ -#undef HAVE_STRERROR - -/* Define if you have the strftime function. */ -#undef HAVE_STRFTIME - -/* Define if you have the strncasecmp function. */ -#undef HAVE_STRNCASECMP - -/* Define if you have the strstr function. */ -#undef HAVE_STRSTR - -/* Define if you have the ttyslot function. */ -#undef HAVE_TTYSLOT - -/* Define if you have the usleep function. */ -#undef HAVE_USLEEP - -/* Define if you have the <crypt.h> header file. */ -#undef HAVE_CRYPT_H - -/* Define if you have the <dirent.h> header file. */ -#undef HAVE_DIRENT_H - -/* Define if you have the <fcntl.h> header file. */ -#undef HAVE_FCNTL_H - -/* Define if you have the <lastlog.h> header file. */ -#undef HAVE_LASTLOG_H - -/* Define if you have the <limits.h> header file. */ -#undef HAVE_LIMITS_H - -/* Define if you have the <ndir.h> header file. */ -#undef HAVE_NDIR_H - -/* Define if you have the <paths.h> header file. */ -#undef HAVE_PATHS_H - -/* Define if you have the <pwd.h> header file. */ -#undef HAVE_PWD_H - -/* Define if you have the <shadow.h> header file. */ -#undef HAVE_SHADOW_H - -/* Define if you have the <signal.h> header file. */ -#undef HAVE_SIGNAL_H - -/* Define if you have the <stdlib.h> header file. */ -#undef HAVE_STDLIB_H - -/* Define if you have the <string.h> header file. */ -#undef HAVE_STRING_H - -/* Define if you have the <sys/dir.h> header file. */ -#undef HAVE_SYS_DIR_H - -/* Define if you have the <sys/file.h> header file. */ -#undef HAVE_SYS_FILE_H - -/* Define if you have the <sys/ioctl.h> header file. */ -#undef HAVE_SYS_IOCTL_H - -/* Define if you have the <sys/ndir.h> header file. */ -#undef HAVE_SYS_NDIR_H - -/* Define if you have the <sys/param.h> header file. */ -#undef HAVE_SYS_PARAM_H - -/* Define if you have the <sys/select.h> header file. */ -#undef HAVE_SYS_SELECT_H - -/* Define if you have the <sys/signal.h> header file. */ -#undef HAVE_SYS_SIGNAL_H - -/* Define if you have the <sys/time.h> header file. */ -#undef HAVE_SYS_TIME_H - -/* Define if you have the <sys/utsname.h> header file. */ -#undef HAVE_SYS_UTSNAME_H - -/* Define if you have the <syslog.h> header file. */ -#undef HAVE_SYSLOG_H - -/* Define if you have the <termios.h> header file. */ -#undef HAVE_TERMIOS_H - -/* Define if you have the <unistd.h> header file. */ -#undef HAVE_UNISTD_H - -/* Define if you have the <utmpx.h> header file. */ -#undef HAVE_UTMPX_H - -/* Define if you have the crypt library (-lcrypt). */ -#undef HAVE_LIBCRYPT - -/* Define if you have the nsl library (-lnsl). */ -#undef HAVE_LIBNSL - -/* Define if you have the posix library (-lposix). */ -#undef HAVE_LIBPOSIX - -/* Define if you have the socket library (-lsocket). */ -#undef HAVE_LIBSOCKET diff --git a/contrib/opie/config.testeflag b/contrib/opie/config.testeflag deleted file mode 100644 index cc16df4df3e7..000000000000 --- a/contrib/opie/config.testeflag +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/sh -if test -e README >/dev/null 2>/dev/null -then - if test -e a.non-existant-file >/dev/null 2>/dev/null - then - exit 1 - else - exit 0 - fi -else - exit 1 -fi diff --git a/contrib/opie/configure b/contrib/opie/configure deleted file mode 100755 index 2bfce6ea8d50..000000000000 --- a/contrib/opie/configure +++ /dev/null @@ -1,5247 +0,0 @@ -#! /bin/sh - -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.13 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_help= -ac_default_prefix=/usr/local -# Any additions from configure.in: -ac_help="$ac_help - --enable-access-file=FILENAME - Enable the OPIE access file FILENAME" -ac_help="$ac_help - --enable-server-md4 Use MD4 instead of MD5 for the server" -ac_help="$ac_help - --disable-user-locking Disable user locking - --enable-user-locking[=DIR] - Put user lock files in DIR [/etc/opielocks]" -ac_help="$ac_help - --enable-retype Ask users to re-type their secret pass phrases" -ac_help="$ac_help - --enable-su-star-check Refuse to switch to disabled accounts" -ac_help="$ac_help - --disable-new-prompts Use more compatible (but less informative) prompts" -ac_help="$ac_help - --enable-insecure-override - Allow users to override insecure checks" -ac_help="$ac_help - --enable-anonymous-ftp Enable anonymous FTP support" -ac_help="$ac_help - --disable-utmp Disable utmp logging" -ac_help="$ac_help - --disable-wtmp Disable wtmp logging" -ac_help="$ac_help - --enable-opieauto Enable support for opieauto" - -# Initialize some variables set by options. -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} -# Maximum number of lines to put in a shell here document. -ac_max_here_lines=12 - -ac_prev= -for ac_option -do - - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" - ac_prev= - continue - fi - - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$ac_optarg'" ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he) - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; - - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.13" - exit 0 ;; - - -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; - - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } - ;; - - *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 - -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=README - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } - fi -fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` - -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file -else - echo "creating cache $cache_file" - > $cache_file -fi - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -ac_exeext= -ac_objext=o -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi - - - -# Check whether --enable-access-file or --disable-access-file was given. -if test "${enable_access_file+set}" = set; then - enableval="$enable_access_file" - cat >> confdefs.h <<EOF -#define PATH_ACCESS_FILE "$enable_access_file" -EOF - echo "Using the access file in $enable_access_file -- don't say we didn't warn you!" -fi - -ACCESS_FILE="$enable_access_file" - -# Check whether --enable-server-md4 or --disable-server-md4 was given. -if test "${enable_server_md4+set}" = set; then - enableval="$enable_server_md4" - cat >> confdefs.h <<\EOF -#define MDX 4 -EOF - -else - cat >> confdefs.h <<\EOF -#define MDX 5 -EOF - -fi - - -# Check whether --enable-user-locking or --disable-user-locking was given. -if test "${enable_user_locking+set}" = set; then - enableval="$enable_user_locking" - : -fi - -if test "$enable_user_locking" != no; -then - if test -z "$enable_user_locking" - then - cat >> confdefs.h <<\EOF -#define OPIE_LOCK_DIR "/etc/opielocks" -EOF - - LOCK_DIR="/etc/opielocks" - else - cat >> confdefs.h <<EOF -#define OPIE_LOCK_DIR "$enable_user_locking" -EOF - - LOCK_DIR="$enable_user_locking" - fi -fi - - -# Check whether --enable-retype or --disable-retype was given. -if test "${enable_retype+set}" = set; then - enableval="$enable_retype" - cat >> confdefs.h <<\EOF -#define RETYPE 1 -EOF - -fi - -# Check whether --enable-su-star-check or --disable-su-star-check was given. -if test "${enable_su_star_check+set}" = set; then - enableval="$enable_su_star_check" - cat >> confdefs.h <<\EOF -#define SU_STAR_CHECK 1 -EOF - -fi - -# Check whether --enable-new-prompts or --disable-new-prompts was given. -if test "${enable_new_prompts+set}" = set; then - enableval="$enable_new_prompts" - : -else - cat >> confdefs.h <<\EOF -#define NEW_PROMPTS 1 -EOF - -fi - -# Check whether --enable-insecure-override or --disable-insecure-override was given. -if test "${enable_insecure_override+set}" = set; then - enableval="$enable_insecure_override" - cat >> confdefs.h <<\EOF -#define INSECURE_OVERRIDE 1 -EOF - -fi - -# Check whether --enable-anonymous-ftp or --disable-anonymous-ftp was given. -if test "${enable_anonymous_ftp+set}" = set; then - enableval="$enable_anonymous_ftp" - cat >> confdefs.h <<\EOF -#define DOANONYMOUS 1 -EOF - echo "enabling anonymous FTP support in ftp -- don't say we didn't warn you!" -fi - -# Check whether --enable-utmp or --disable-utmp was given. -if test "${enable_utmp+set}" = set; then - enableval="$enable_utmp" - cat >> confdefs.h <<\EOF -#define DISABLE_UTMP 1 -EOF - echo "disabling utmp logging" -fi - -# Check whether --enable-wtmp or --disable-wtmp was given. -if test "${enable_wtmp+set}" = set; then - enableval="$enable_wtmp" - cat >> confdefs.h <<\EOF -#define DISABLE_WTMP 1 -EOF - echo "disabling wtmp logging" -fi - -# Check whether --enable-opieauto or --disable-opieauto was given. -if test "${enable_opieauto+set}" = set; then - enableval="$enable_opieauto" - cat >> confdefs.h <<\EOF -#define OPIEAUTO 1 -EOF - OPIEAUTO=opieauto; echo "enabling opieauto support" -fi - - - -# Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:682: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:712: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_prog_rejected=no - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_save_ifs" -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# -gt 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - set dummy "$ac_dir/$ac_word" "$@" - shift - ac_cv_prog_CC="$@" - fi -fi -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - if test -z "$CC"; then - case "`uname -s`" in - *win32* | *WIN32*) - # Extract the first word of "cl", so it can be a program name with args. -set dummy cl; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:763: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="cl" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - ;; - esac - fi - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } -fi - -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:795: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -cat > conftest.$ac_ext << EOF - -#line 806 "configure" -#include "confdefs.h" - -main(){return(0);} -EOF -if { (eval echo configure:811: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - ac_cv_prog_cc_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - ac_cv_prog_cc_cross=no - else - ac_cv_prog_cc_cross=yes - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_prog_cc_works=no -fi -rm -fr conftest* -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 -if test $ac_cv_prog_cc_works = no; then - { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } -fi -echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:837: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 -echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 -cross_compiling=$ac_cv_prog_cc_cross - -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:842: checking whether we are using GNU C" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.c <<EOF -#ifdef __GNUC__ - yes; -#endif -EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:851: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi -fi - -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 - -if test $ac_cv_prog_gcc = yes; then - GCC=yes -else - GCC= -fi - -ac_test_CFLAGS="${CFLAGS+set}" -ac_save_CFLAGS="$CFLAGS" -CFLAGS= -echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:870: checking whether ${CC-cc} accepts -g" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then - ac_cv_prog_cc_g=yes -else - ac_cv_prog_cc_g=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 -if test "$ac_test_CFLAGS" = set; then - CFLAGS="$ac_save_CFLAGS" -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi - -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:902: checking how to run the C preprocessor" >&5 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and "${CC-cc}" will confuse make. - CPP="${CC-cc} -E" - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. - cat > conftest.$ac_ext <<EOF -#line 917 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:923: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -E -traditional-cpp" - cat > conftest.$ac_ext <<EOF -#line 934 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:940: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -nologo -E" - cat > conftest.$ac_ext <<EOF -#line 951 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:957: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP=/lib/cpp -fi -rm -f conftest* -fi -rm -f conftest* -fi -rm -f conftest* - ac_cv_prog_CPP="$CPP" -fi - CPP="$ac_cv_prog_CPP" -else - ac_cv_prog_CPP="$CPP" -fi -echo "$ac_t""$CPP" 1>&6 - -echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:982: checking whether ln -s works" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - rm -f conftestdata -if ln -s X conftestdata 2>/dev/null -then - rm -f conftestdata - ac_cv_prog_LN_S="ln -s" -else - ac_cv_prog_LN_S=ln -fi -fi -LN_S="$ac_cv_prog_LN_S" -if test "$ac_cv_prog_LN_S" = "ln -s"; then - echo "$ac_t""yes" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -# Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1005: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" -fi -fi -RANLIB="$ac_cv_prog_RANLIB" -if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -for ac_prog in 'bison -y' byacc -do -# Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1037: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$YACC"; then - ac_cv_prog_YACC="$YACC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_YACC="$ac_prog" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -YACC="$ac_cv_prog_YACC" -if test -n "$YACC"; then - echo "$ac_t""$YACC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -test -n "$YACC" && break -done -test -n "$YACC" || YACC="yacc" - - -echo $ac_n "checking for AIX""... $ac_c" 1>&6 -echo "configure:1069: checking for AIX" >&5 -cat > conftest.$ac_ext <<EOF -#line 1071 "configure" -#include "confdefs.h" -#ifdef _AIX - yes -#endif - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "yes" >/dev/null 2>&1; then - rm -rf conftest* - echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF -#define _ALL_SOURCE 1 -EOF - -else - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* - - -echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -echo "configure:1093: checking for POSIXized ISC" >&5 -if test -d /etc/conf/kconfig.d && - grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 -then - echo "$ac_t""yes" 1>&6 - ISC=yes # If later tests want to check for ISC. - cat >> confdefs.h <<\EOF -#define _POSIX_SOURCE 1 -EOF - - if test "$GCC" = yes; then - CC="$CC -posix" - else - CC="$CC -Xp" - fi -else - echo "$ac_t""no" 1>&6 - ISC= -fi - -ac_safe=`echo "minix/config.h" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6 -echo "configure:1115: checking for minix/config.h" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1120 "configure" -#include "confdefs.h" -#include <minix/config.h> -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1125: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - MINIX=yes -else - echo "$ac_t""no" 1>&6 -MINIX= -fi - -if test "$MINIX" = yes; then - cat >> confdefs.h <<\EOF -#define _POSIX_SOURCE 1 -EOF - - cat >> confdefs.h <<\EOF -#define _POSIX_1_SOURCE 2 -EOF - - cat >> confdefs.h <<\EOF -#define _MINIX 1 -EOF - -fi - - - -# Extract the first word of "chown", so it can be a program name with args. -set dummy chown; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1167: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_CHOWN'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$CHOWN" in - /*) - ac_cv_path_CHOWN="$CHOWN" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_CHOWN="$CHOWN" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="/usr/bin /bin /usr/sbin /sbin /usr/etc /etc" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_CHOWN="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_CHOWN" && ac_cv_path_CHOWN="/bin/chown" - ;; -esac -fi -CHOWN="$ac_cv_path_CHOWN" -if test -n "$CHOWN"; then - echo "$ac_t""$CHOWN" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - -# Extract the first word of "su", so it can be a program name with args. -set dummy su; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1204: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_SU'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$SU" in - /*) - ac_cv_path_SU="$SU" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_SU="$SU" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="/usr/bin /bin" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_SU="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_SU" && ac_cv_path_SU="/bin/su" - ;; -esac -fi -SU="$ac_cv_path_SU" -if test -n "$SU"; then - echo "$ac_t""$SU" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -# Extract the first word of "su", so it can be a program name with args. -set dummy su; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1240: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_ALT_SU'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$ALT_SU" in - /*) - ac_cv_path_ALT_SU="$ALT_SU" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_ALT_SU="$ALT_SU" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="/usr/sbin /sbin" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_ALT_SU="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - ;; -esac -fi -ALT_SU="$ac_cv_path_ALT_SU" -if test -n "$ALT_SU"; then - echo "$ac_t""$ALT_SU" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - -# Extract the first word of "scheme", so it can be a program name with args. -set dummy scheme; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1276: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_SCHEME'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$SCHEME" in - /*) - ac_cv_path_SCHEME="$SCHEME" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_SCHEME="$SCHEME" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="/usr/lib/iaf/scheme" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_SCHEME="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - ;; -esac -fi -SCHEME="$ac_cv_path_SCHEME" -if test -n "$SCHEME"; then - echo "$ac_t""$SCHEME" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -# Extract the first word of "login", so it can be a program name with args. -set dummy login; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1311: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_LOGIN'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$LOGIN" in - /*) - ac_cv_path_LOGIN="$LOGIN" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_LOGIN="$LOGIN" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="/usr/bin /bin" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_LOGIN="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_LOGIN" && ac_cv_path_LOGIN="/bin/login" - ;; -esac -fi -LOGIN="$ac_cv_path_LOGIN" -if test -n "$LOGIN"; then - echo "$ac_t""$LOGIN" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - -if test ! -z "$SCHEME"; -then - LOGIN="$SCHEME"; -fi - -# Extract the first word of "ftpd", so it can be a program name with args. -set dummy ftpd; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1353: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_FTPD'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$FTPD" in - /*) - ac_cv_path_FTPD="$FTPD" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_FTPD="$FTPD" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="/usr/libexec /usr/etc /etc /usr/sbin /sbin /usr/lbin" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_FTPD="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - ;; -esac -fi -FTPD="$ac_cv_path_FTPD" -if test -n "$FTPD"; then - echo "$ac_t""$FTPD" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - -# Extract the first word of "in.ftpd", so it can be a program name with args. -set dummy in.ftpd; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1388: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_path_INFTPD'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - case "$INFTPD" in - /*) - ac_cv_path_INFTPD="$INFTPD" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_INFTPD="$INFTPD" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="/usr/libexec /usr/etc /etc /usr/sbin /sbin /usr/lbin" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_INFTPD="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" - ;; -esac -fi -INFTPD="$ac_cv_path_INFTPD" -if test -n "$INFTPD"; then - echo "$ac_t""$INFTPD" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - - -if test -z "$FTPD" -then - if test ! -z "$INFTPD" - then - FTPD="$INFTPD" - fi -fi - -echo $ac_n "checking for default PATH entries""... $ac_c" 1>&6 -echo "configure:1430: checking for default PATH entries" >&5 -default_path="" -save_IFS="$IFS" -IFS=" " -for i in /usr/bin /bin /usr/ucb /usr/sbin /usr/bsd /sbin /usr/bin/X11 /etc /usr/local/X11/bin /usr/X11R6/bin /your-system-is-broken -do - IFS=":" - for j in $PATH - do - if test "$i" = "$j" - then - if test -d "$i" - then - if test -z "$default_path" - then - default_path="$i" - else - default_path="$default_path:$i" - fi - fi - fi - done - IFS=" " -done -cat >> confdefs.h <<EOF -#define DEFAULT_PATH "$default_path" -EOF - -echo "$ac_t""$default_path" 1>&6 - -echo $ac_n "checking for test -e flag""... $ac_c" 1>&6 -echo "configure:1461: checking for test -e flag" >&5 -if sh config.testeflag -then - result=yes - EXISTS="-e" -else - result=no - EXISTS="-f" -fi - -echo "$ac_t""$result" 1>&6 - -echo $ac_n "checking for mkdir -p flag""... $ac_c" 1>&6 -echo "configure:1474: checking for mkdir -p flag" >&5 -if test -d config.tmpdir -then - rmdir config.tmpdir/foo/bar >/dev/null 2>/dev/null - rmdir config.tmpdir/foo >/dev/null 2>/dev/null - rmdir config.tmpdir >/dev/null 2>/dev/null -fi - -result=no -if mkdir -p config.tmpdir/foo/bar >/dev/null 2>/dev/null -then - if test -d config.tmpdir - then - if test -d config.tmpdir/foo - then - if test -d config.tmpdir/foo/bar - then - result=yes - rmdir config.tmpdir/foo/bar >/dev/null 2>/dev/null - fi - rmdir config.tmpdir/foo >/dev/null 2>/dev/null - fi - rmdir config.tmpdir >/dev/null 2>/dev/null - fi -fi - -if test "$result" = yes -then - MKDIR="mkdir -p" -else - MKDIR="mkdir" -fi - -echo "$ac_t""$result" 1>&6 - -echo $ac_n "checking for ls group field""... $ac_c" 1>&6 -echo "configure:1510: checking for ls group field" >&5 -lsg=`/bin/ls -ldg / | wc -w | awk '{print $1}'`; -ls=`/bin/ls -ld / | wc -w | awk '{print $1}'`; -result="no" -if test $ls = 9; -then - result="yes" -else - if test "$ls" = 8 -a "$lsg" = 9; - then - result="yes, with -g" - cat >> confdefs.h <<\EOF -#define HAVE_LS_G_FLAG 1 -EOF - - fi -fi -echo "$ac_t""$result" 1>&6 - -echo $ac_n "checking for /etc/default/login""... $ac_c" 1>&6 -echo "configure:1530: checking for /etc/default/login" >&5 -if test $EXISTS /etc/default/login -then - result=yes - cat >> confdefs.h <<\EOF -#define HAVE_ETC_DEFAULT_LOGIN 1 -EOF - -else - result=no -fi -echo "$ac_t""$result" 1>&6 - -echo $ac_n "checking for /etc/securetty""... $ac_c" 1>&6 -echo "configure:1544: checking for /etc/securetty" >&5 -if test $EXISTS /etc/securetty -then - result=yes - cat >> confdefs.h <<\EOF -#define HAVE_SECURETTY 1 -EOF - -else - result=no -fi -echo "$ac_t""$result" 1>&6 - -echo $ac_n "checking for /etc/logindevperm""... $ac_c" 1>&6 -echo "configure:1558: checking for /etc/logindevperm" >&5 -if test $EXISTS /etc/logindevperm -then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_LOGIN_PERMFILE "/etc/logindevperm" -EOF - -else - echo "$ac_t""no" 1>&6 - - echo $ac_n "checking for /etc/fbtab""... $ac_c" 1>&6 -echo "configure:1570: checking for /etc/fbtab" >&5 - if test $EXISTS /etc/fbtab - then - result=yes - cat >> confdefs.h <<\EOF -#define HAVE_LOGIN_PERMFILE "/etc/fbtab" -EOF - - else - result=no - fi - echo "$ac_t""$result" 1>&6 -fi - -echo $ac_n "checking for /etc/environment""... $ac_c" 1>&6 -echo "configure:1585: checking for /etc/environment" >&5 -if test $EXISTS /etc/environment -then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_LOGIN_ENVFILE "/etc/environment" -EOF - -else - echo "$ac_t""no" 1>&6 - - echo $ac_n "checking for /etc/src.sh""... $ac_c" 1>&6 -echo "configure:1597: checking for /etc/src.sh" >&5 - if test $EXISTS /etc/src.sh - then - result=yes - cat >> confdefs.h <<\EOF -#define HAVE_LOGIN_ENVFILE "/etc/src.sh" -EOF - - else - result=no - fi - echo "$ac_t""$result" 1>&6 -fi - -echo $ac_n "checking for /etc/shadow""... $ac_c" 1>&6 -echo "configure:1612: checking for /etc/shadow" >&5 -if test $EXISTS /etc/shadow -then - result=yes - cat >> confdefs.h <<\EOF -#define HAVE_ETC_SHADOW 1 -EOF - -else - echo "$ac_t""no" 1>&6 - - echo $ac_n "checking for /etc/security/passwd.adjunct""... $ac_c" 1>&6 -echo "configure:1624: checking for /etc/security/passwd.adjunct" >&5 - if test $EXISTS /etc/security/passwd.adjunct - then - result=yes - cat >> confdefs.h <<\EOF -#define HAVE_SUNOS_C2_SHADOW 1 -EOF - - LIBOBJS="$LIBOBJS getspnam.o endspent.o" - else - result=no - fi -fi -echo "$ac_t""$result" 1>&6 - -echo $ac_n "checking for /var/adm/sulog""... $ac_c" 1>&6 -echo "configure:1640: checking for /var/adm/sulog" >&5 -if test $EXISTS /var/adm/sulog -then - result=yes - cat >> confdefs.h <<\EOF -#define HAVE_SULOG 1 -EOF - -else - result=no -fi -echo "$ac_t""$result" 1>&6 - -echo $ac_n "checking mail spool location""... $ac_c" 1>&6 -echo "configure:1654: checking mail spool location" >&5 -mail_spool="" -for i in /var/mail /usr/mail /var/spool/mail /usr/spool/mail -do - if test -d $i - then - mail_spool="$i" - fi -done -if test -z "$mail_spool" -then - result="not found" -else - result="$mail_spool" - cat >> confdefs.h <<EOF -#define PATH_MAIL "$mail_spool" -EOF - -fi -echo "$ac_t""$result" 1>&6 - -echo $ac_n "checking where your system puts the utmp file""... $ac_c" 1>&6 -echo "configure:1676: checking where your system puts the utmp file" >&5 -utmp_path="" -for i in /var/run /var/adm /usr/adm /etc -do - if test $EXISTS $i/utmp - then - utmp_path="$i" - fi -done -if test -z "$utmp_path" -then - result="not found" -else - result="$utmp_path" - cat >> confdefs.h <<EOF -#define PATH_UTMP_AC "$utmp_path/utmp" -EOF - -fi -echo "$ac_t""$result" 1>&6 - -echo $ac_n "checking where your system puts the utmpx file""... $ac_c" 1>&6 -echo "configure:1698: checking where your system puts the utmpx file" >&5 -utmp_path="" -for i in /var/run /var/adm /usr/adm /etc -do - if test $EXISTS $i/utmp - then - utmp_path="$i" - fi -done -if test -z "$utmp_path" -then - result="not found" - cat >> confdefs.h <<EOF -#define PATH_UTMP_AC "$utmp_path/utmpx" -EOF - -fi -echo "$ac_t""$result" 1>&6 - -echo $ac_n "checking where your system puts the wtmp file""... $ac_c" 1>&6 -echo "configure:1718: checking where your system puts the wtmp file" >&5 -wtmp_path="" -for i in /var/run /var/log /var/adm /usr/adm /etc -do - if test $EXISTS $i/wtmp - then - wtmp_path="$i" - fi -done -if test -z "$wtmp_path" -then - result="not found" -else - result="$wtmp_path" - cat >> confdefs.h <<EOF -#define PATH_WTMP_AC "$wtmp_path/wtmp" -EOF - -fi -echo "$ac_t""$result" 1>&6 - -echo $ac_n "checking where your system puts the wtmpx file""... $ac_c" 1>&6 -echo "configure:1740: checking where your system puts the wtmpx file" >&5 -wtmpx_path="" -for i in /var/run /var/log /var/adm /usr/adm /etc -do - if test $EXISTS $i/wtmpx - then - wtmpx_path="$i" - fi -done -if test -z "$wtmpx_path" -then - result="not found" -else - result="$wtmpx_path" - cat >> confdefs.h <<EOF -#define PATH_WTMPX_AC "$wtmpx_path/wtmpx" -EOF - -fi -echo "$ac_t""$result" 1>&6 - -echo $ac_n "checking whether the system profile displays the motd""... $ac_c" 1>&6 -echo "configure:1762: checking whether the system profile displays the motd" >&5 -result=no -if test $EXISTS /etc/profile -then - if grep motd /etc/profile >/dev/null 2>/dev/null - then - result=yes - fi -fi -if test "$result" = yes -then - cat >> confdefs.h <<\EOF -#define HAVE_MOTD_IN_PROFILE 1 -EOF - -fi -echo "$ac_t""$result" 1>&6 - -echo $ac_n "checking whether the system profile checks for mail""... $ac_c" 1>&6 -echo "configure:1781: checking whether the system profile checks for mail" >&5 -result=no -if test $EXISTS /etc/profile -then - if grep 'mail\.' /etc/profile >/dev/null 2>/dev/null - then - result=yes - fi -fi -if test "$result" = yes -then - cat >> confdefs.h <<\EOF -#define HAVE_MAILCHECK_IN_PROFILE 1 -EOF - -fi -echo "$ac_t""$result" 1>&6 - -echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:1800: checking for working const" >&5 -if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1805 "configure" -#include "confdefs.h" - -int main() { - -/* Ultrix mips cc rejects this. */ -typedef int charset[2]; const charset x; -/* SunOS 4.1.1 cc rejects this. */ -char const *const *ccp; -char **p; -/* NEC SVR4.0.2 mips cc rejects this. */ -struct point {int x, y;}; -static struct point const zero = {0,0}; -/* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in an arm - of an if-expression whose if-part is not a constant expression */ -const char *g = "string"; -ccp = &g + (g ? g-g : 0); -/* HPUX 7.0 cc rejects these. */ -++ccp; -p = (char**) ccp; -ccp = (char const *const *) p; -{ /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; -} -{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; -} -{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; -} -{ /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; -} -{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; -} - -; return 0; } -EOF -if { (eval echo configure:1854: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_c_const=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_c_const=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_c_const" 1>&6 -if test $ac_cv_c_const = no; then - cat >> confdefs.h <<\EOF -#define const -EOF - -fi - - -echo $ac_n "checking to see if your compiler can handle void arguments""... $ac_c" 1>&6 -echo "configure:1876: checking to see if your compiler can handle void arguments" >&5 -cat > conftest.$ac_ext <<EOF -#line 1878 "configure" -#include "confdefs.h" -foo(void) { } -int main() { - -; return 0; } -EOF -if { (eval echo configure:1885: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - cat >> confdefs.h <<\EOF -#define HAVE_VOIDARG 1 -EOF - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* - -echo $ac_n "checking to see if your compiler can handle void return values""... $ac_c" 1>&6 -echo "configure:1900: checking to see if your compiler can handle void return values" >&5 -cat > conftest.$ac_ext <<EOF -#line 1902 "configure" -#include "confdefs.h" -void foo() { } -int main() { - -; return 0; } -EOF -if { (eval echo configure:1909: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - cat >> confdefs.h <<\EOF -#define HAVE_VOIDRET 1 -EOF - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* - -echo $ac_n "checking to see if your compiler can handle void pointers""... $ac_c" 1>&6 -echo "configure:1924: checking to see if your compiler can handle void pointers" >&5 -cat > conftest.$ac_ext <<EOF -#line 1926 "configure" -#include "confdefs.h" -foo() { void *bar = (void *)0x42; bar = bar + 1; } -int main() { - -; return 0; } -EOF -if { (eval echo configure:1933: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - cat >> confdefs.h <<\EOF -#define HAVE_VOIDPTR 1 -EOF - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* - -echo $ac_n "checking to see if your compiler can handle ANSI argument lists""... $ac_c" 1>&6 -echo "configure:1948: checking to see if your compiler can handle ANSI argument lists" >&5 -cat > conftest.$ac_ext <<EOF -#line 1950 "configure" -#include "confdefs.h" -int foo(int bar, int baz) { return 0; } -int main() { - -; return 0; } -EOF -if { (eval echo configure:1957: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - cat >> confdefs.h <<\EOF -#define HAVE_ANSIDECL 1 -EOF - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* - -echo $ac_n "checking to see if your compiler can handle ANSI prototypes""... $ac_c" 1>&6 -echo "configure:1972: checking to see if your compiler can handle ANSI prototypes" >&5 -cat > conftest.$ac_ext <<EOF -#line 1974 "configure" -#include "confdefs.h" -extern int foo(int, int); -int main() { - -; return 0; } -EOF -if { (eval echo configure:1981: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - cat >> confdefs.h <<\EOF -#define HAVE_ANSIPROTO 1 -EOF - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* - -echo $ac_n "checking to see if your compiler can handle ANSI variable arguments""... $ac_c" 1>&6 -echo "configure:1996: checking to see if your compiler can handle ANSI variable arguments" >&5 -cat > conftest.$ac_ext <<EOF -#line 1998 "configure" -#include "confdefs.h" -#include <stdarg.h> -int foo(int arg, ...) { - va_list ap; - va_start(ap, arg); - va_end(ap); - return 0; -} -int main() { - -; return 0; } -EOF -if { (eval echo configure:2011: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - cat >> confdefs.h <<\EOF -#define HAVE_ANSISTDARG 1 -EOF - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* - -echo $ac_n "checking to see if you have an ANSI-style sprintf""... $ac_c" 1>&6 -echo "configure:2026: checking to see if you have an ANSI-style sprintf" >&5 -if test "$cross_compiling" = yes; then - echo "$ac_t""no" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2031 "configure" -#include "confdefs.h" -#include <stdio.h> -int main(argc, argv) -int argc; -char *argv[]; -{ - char buf[5]; - int i = 2; - i += sprintf(buf, "1234"); - return (i == 6) ? 0 : -1; -} -EOF -if { (eval echo configure:2044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - cat >> confdefs.h <<\EOF -#define HAVE_ANSISPRINTF 1 -EOF - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - echo "$ac_t""no" 1>&6 -fi -rm -fr conftest* -fi - - -echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:2061: checking for crypt in -lcrypt" >&5 -ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-lcrypt $LIBS" -cat > conftest.$ac_ext <<EOF -#line 2069 "configure" -#include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char crypt(); - -int main() { -crypt() -; return 0; } -EOF -if { (eval echo configure:2080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_lib=HAVE_LIB`echo crypt | sed -e 's/[^a-zA-Z0-9_]/_/g' \ - -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` - cat >> confdefs.h <<EOF -#define $ac_tr_lib 1 -EOF - - LIBS="-lcrypt $LIBS" - -else - echo "$ac_t""no" 1>&6 -fi - -echo $ac_n "checking for gethostname in -lnsl""... $ac_c" 1>&6 -echo "configure:2108: checking for gethostname in -lnsl" >&5 -ac_lib_var=`echo nsl'_'gethostname | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-lnsl $LIBS" -cat > conftest.$ac_ext <<EOF -#line 2116 "configure" -#include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char gethostname(); - -int main() { -gethostname() -; return 0; } -EOF -if { (eval echo configure:2127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/[^a-zA-Z0-9_]/_/g' \ - -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` - cat >> confdefs.h <<EOF -#define $ac_tr_lib 1 -EOF - - LIBS="-lnsl $LIBS" - -else - echo "$ac_t""no" 1>&6 -fi - -echo $ac_n "checking for main in -lposix""... $ac_c" 1>&6 -echo "configure:2155: checking for main in -lposix" >&5 -ac_lib_var=`echo posix'_'main | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-lposix $LIBS" -cat > conftest.$ac_ext <<EOF -#line 2163 "configure" -#include "confdefs.h" - -int main() { -main() -; return 0; } -EOF -if { (eval echo configure:2170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_lib=HAVE_LIB`echo posix | sed -e 's/[^a-zA-Z0-9_]/_/g' \ - -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` - cat >> confdefs.h <<EOF -#define $ac_tr_lib 1 -EOF - - LIBS="-lposix $LIBS" - -else - echo "$ac_t""no" 1>&6 -fi - -echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6 -echo "configure:2198: checking for socket in -lsocket" >&5 -ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-lsocket $LIBS" -cat > conftest.$ac_ext <<EOF -#line 2206 "configure" -#include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char socket(); - -int main() { -socket() -; return 0; } -EOF -if { (eval echo configure:2217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_lib=HAVE_LIB`echo socket | sed -e 's/[^a-zA-Z0-9_]/_/g' \ - -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` - cat >> confdefs.h <<EOF -#define $ac_tr_lib 1 -EOF - - LIBS="-lsocket $LIBS" - -else - echo "$ac_t""no" 1>&6 -fi - - -ac_header_dirent=no -for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h -do -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:2250: checking for $ac_hdr that defines DIR" >&5 -if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2255 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <$ac_hdr> -int main() { -DIR *dirp = 0; -; return 0; } -EOF -if { (eval echo configure:2263: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - eval "ac_cv_header_dirent_$ac_safe=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_dirent_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` - cat >> confdefs.h <<EOF -#define $ac_tr_hdr 1 -EOF - ac_header_dirent=$ac_hdr; break -else - echo "$ac_t""no" 1>&6 -fi -done -# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. -if test $ac_header_dirent = dirent.h; then -echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:2288: checking for opendir in -ldir" >&5 -ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-ldir $LIBS" -cat > conftest.$ac_ext <<EOF -#line 2296 "configure" -#include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir(); - -int main() { -opendir() -; return 0; } -EOF -if { (eval echo configure:2307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - LIBS="$LIBS -ldir" -else - echo "$ac_t""no" 1>&6 -fi - -else -echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:2329: checking for opendir in -lx" >&5 -ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-lx $LIBS" -cat > conftest.$ac_ext <<EOF -#line 2337 "configure" -#include "confdefs.h" -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir(); - -int main() { -opendir() -; return 0; } -EOF -if { (eval echo configure:2348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - LIBS="$LIBS -lx" -else - echo "$ac_t""no" 1>&6 -fi - -fi - -echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 -echo "configure:2371: checking for sys/wait.h that is POSIX.1 compatible" >&5 -if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2376 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <sys/wait.h> -#ifndef WEXITSTATUS -#define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) -#endif -#ifndef WIFEXITED -#define WIFEXITED(stat_val) (((stat_val) & 255) == 0) -#endif -int main() { -int s; -wait (&s); -s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; -; return 0; } -EOF -if { (eval echo configure:2392: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_header_sys_wait_h=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_header_sys_wait_h=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_header_sys_wait_h" 1>&6 -if test $ac_cv_header_sys_wait_h = yes; then - cat >> confdefs.h <<\EOF -#define HAVE_SYS_WAIT_H 1 -EOF - -fi - -for ac_hdr in crypt.h fcntl.h limits.h termios.h sys/file.h sys/ioctl.h sys/time.h syslog.h unistd.h paths.h shadow.h signal.h sys/signal.h lastlog.h sys/utsname.h pwd.h sys/param.h string.h stdlib.h utmpx.h sys/select.h -do -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2416: checking for $ac_hdr" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2421 "configure" -#include "confdefs.h" -#include <$ac_hdr> -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2426: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` - cat >> confdefs.h <<EOF -#define $ac_tr_hdr 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - - - -echo $ac_n "checking for ut_pid in struct utmp""... $ac_c" 1>&6 -echo "configure:2455: checking for ut_pid in struct utmp" >&5 -cat > conftest.$ac_ext <<EOF -#line 2457 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <utmp.h> -int main() { -struct utmp foo; return (int)foo.ut_pid; -; return 0; } -EOF -if { (eval echo configure:2465: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - cat >> confdefs.h <<\EOF -#define HAVE_UT_PID 1 -EOF - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* -echo $ac_n "checking for ut_type in struct utmp""... $ac_c" 1>&6 -echo "configure:2479: checking for ut_type in struct utmp" >&5 -cat > conftest.$ac_ext <<EOF -#line 2481 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <utmp.h> -int main() { -struct utmp foo; return (int)foo.ut_type; -; return 0; } -EOF -if { (eval echo configure:2489: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - cat >> confdefs.h <<\EOF -#define HAVE_UT_TYPE 1 -EOF - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* -echo $ac_n "checking for ut_name in struct utmp""... $ac_c" 1>&6 -echo "configure:2503: checking for ut_name in struct utmp" >&5 -cat > conftest.$ac_ext <<EOF -#line 2505 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <utmp.h> -int main() { -struct utmp foo; return (int)foo.ut_name[0]; -; return 0; } -EOF -if { (eval echo configure:2513: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - cat >> confdefs.h <<\EOF -#define HAVE_UT_NAME 1 -EOF - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* -echo $ac_n "checking for ut_host in struct utmp""... $ac_c" 1>&6 -echo "configure:2527: checking for ut_host in struct utmp" >&5 -cat > conftest.$ac_ext <<EOF -#line 2529 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <utmp.h> -int main() { -struct utmp foo; return (int)foo.ut_host[0]; -; return 0; } -EOF -if { (eval echo configure:2537: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - cat >> confdefs.h <<\EOF -#define HAVE_UT_HOST 1 -EOF - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* -echo $ac_n "checking for ut_id in struct utmp""... $ac_c" 1>&6 -echo "configure:2551: checking for ut_id in struct utmp" >&5 -cat > conftest.$ac_ext <<EOF -#line 2553 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <utmp.h> -int main() { -struct utmp foo; return (int)foo.ut_id[0]; -; return 0; } -EOF -if { (eval echo configure:2561: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - cat >> confdefs.h <<\EOF -#define HAVE_UT_ID 1 -EOF - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* -#AC_MSG_CHECKING(for ut_syslen in struct utmp) -#AC_TRY_COMPILE([#include <sys/types.h> -##include <utmp.h>], [struct utmp foo; return (int)foo.ut_syslen;], AC_DEFINE(HAVE_UT_SYSLEN) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) -echo $ac_n "checking for ut_syslen in struct utmpx""... $ac_c" 1>&6 -echo "configure:2578: checking for ut_syslen in struct utmpx" >&5 -cat > conftest.$ac_ext <<EOF -#line 2580 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <utmpx.h> -int main() { -struct utmpx foo; return (int)foo.ut_syslen; -; return 0; } -EOF -if { (eval echo configure:2588: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - cat >> confdefs.h <<\EOF -#define HAVE_UTX_SYSLEN 1 -EOF - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* - -echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:2603: checking return type of signal handlers" >&5 -if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2608 "configure" -#include "confdefs.h" -#include <sys/types.h> -#include <signal.h> -#ifdef signal -#undef signal -#endif -#ifdef __cplusplus -extern "C" void (*signal (int, void (*)(int)))(int); -#else -void (*signal ()) (); -#endif - -int main() { -int i; -; return 0; } -EOF -if { (eval echo configure:2625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_type_signal=void -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_type_signal=int -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_type_signal" 1>&6 -cat >> confdefs.h <<EOF -#define RETSIGTYPE $ac_cv_type_signal -EOF - - -for ac_func in gettimeofday socket strftime strstr setpriority getttynam setvbuf getspnam endspent setgroups getgroups fpurge setlogin lstat getutxline pututxline usleep -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2646: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2651 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:2674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - - -echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:2700: checking for 8-bit clean memcmp" >&5 -if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - ac_cv_func_memcmp_clean=no -else - cat > conftest.$ac_ext <<EOF -#line 2708 "configure" -#include "confdefs.h" - -main() -{ - char c0 = 0x40, c1 = 0x80, c2 = 0x81; - exit(memcmp(&c0, &c2, 1) < 0 && memcmp(&c1, &c2, 1) < 0 ? 0 : 1); -} - -EOF -if { (eval echo configure:2718: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - ac_cv_func_memcmp_clean=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_func_memcmp_clean=no -fi -rm -fr conftest* -fi - -fi - -echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6 -test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" - -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -echo "configure:2738: checking for working alloca.h" >&5 -if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2743 "configure" -#include "confdefs.h" -#include <alloca.h> -int main() { -char *p = alloca(2 * sizeof(int)); -; return 0; } -EOF -if { (eval echo configure:2750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - ac_cv_header_alloca_h=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_header_alloca_h=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_header_alloca_h" 1>&6 -if test $ac_cv_header_alloca_h = yes; then - cat >> confdefs.h <<\EOF -#define HAVE_ALLOCA_H 1 -EOF - -fi - -echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:2771: checking for alloca" >&5 -if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2776 "configure" -#include "confdefs.h" - -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include <malloc.h> -# define alloca _alloca -# else -# if HAVE_ALLOCA_H -# include <alloca.h> -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -# endif -# endif -# endif -# endif -#endif - -int main() { -char *p = (char *) alloca(1); -; return 0; } -EOF -if { (eval echo configure:2804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - ac_cv_func_alloca_works=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_func_alloca_works=no -fi -rm -f conftest* -fi - -echo "$ac_t""$ac_cv_func_alloca_works" 1>&6 -if test $ac_cv_func_alloca_works = yes; then - cat >> confdefs.h <<\EOF -#define HAVE_ALLOCA 1 -EOF - -fi - -if test $ac_cv_func_alloca_works = no; then - # The SVR3 libPW and SVR4 libucb both contain incompatible functions - # that cause trouble. Some versions do not even contain alloca or - # contain a buggy version. If you still want to use their alloca, - # use ar to extract alloca.o from them instead of compiling alloca.c. - ALLOCA=alloca.${ac_objext} - cat >> confdefs.h <<\EOF -#define C_ALLOCA 1 -EOF - - -echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:2836: checking whether alloca needs Cray hooks" >&5 -if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2841 "configure" -#include "confdefs.h" -#if defined(CRAY) && ! defined(CRAY2) -webecray -#else -wenotbecray -#endif - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "webecray" >/dev/null 2>&1; then - rm -rf conftest* - ac_cv_os_cray=yes -else - rm -rf conftest* - ac_cv_os_cray=no -fi -rm -f conftest* - -fi - -echo "$ac_t""$ac_cv_os_cray" 1>&6 -if test $ac_cv_os_cray = yes; then -for ac_func in _getb67 GETB67 getb67; do - echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2866: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2871 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:2894: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<EOF -#define CRAY_STACKSEG_END $ac_func -EOF - - break -else - echo "$ac_t""no" 1>&6 -fi - -done -fi - -echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:2921: checking stack direction for C alloca" >&5 -if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - ac_cv_c_stack_direction=0 -else - cat > conftest.$ac_ext <<EOF -#line 2929 "configure" -#include "confdefs.h" -find_stack_direction () -{ - static char *addr = 0; - auto char dummy; - if (addr == 0) - { - addr = &dummy; - return find_stack_direction (); - } - else - return (&dummy > addr) ? 1 : -1; -} -main () -{ - exit (find_stack_direction() < 0); -} -EOF -if { (eval echo configure:2948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - ac_cv_c_stack_direction=1 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_c_stack_direction=-1 -fi -rm -fr conftest* -fi - -fi - -echo "$ac_t""$ac_cv_c_stack_direction" 1>&6 -cat >> confdefs.h <<EOF -#define STACK_DIRECTION $ac_cv_c_stack_direction -EOF - -fi - -for ac_func in getusershell sigaddset sigemptyset strerror strncasecmp -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2972: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 2977 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3000: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}" -fi -done - - -MISSING="$LIBOBJS $ALLOCA " ; - -echo $ac_n "checking for atexit""... $ac_c" 1>&6 -echo "configure:3029: checking for atexit" >&5 -if eval "test \"`echo '$''{'ac_cv_func_atexit'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3034 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char atexit(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char atexit(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_atexit) || defined (__stub___atexit) -choke me -#else -atexit(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_atexit=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_atexit=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'atexit`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_ATEXIT 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}atexit.o "; for ac_func in on_exit -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3080: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3085 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -fi - -echo $ac_n "checking for endutent""... $ac_c" 1>&6 -echo "configure:3135: checking for endutent" >&5 -if eval "test \"`echo '$''{'ac_cv_func_endutent'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3140 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char endutent(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char endutent(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_endutent) || defined (__stub___endutent) -choke me -#else -endutent(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3163: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_endutent=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_endutent=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'endutent`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_ENDUTENT 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}endutent.o " -fi - -echo $ac_n "checking for initgroups""... $ac_c" 1>&6 -echo "configure:3187: checking for initgroups" >&5 -if eval "test \"`echo '$''{'ac_cv_func_initgroups'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3192 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char initgroups(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char initgroups(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_initgroups) || defined (__stub___initgroups) -choke me -#else -initgroups(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3215: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_initgroups=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_initgroups=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'initgroups`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_INITGROUPS 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}initgroups.o " -fi - -echo $ac_n "checking for memcmp""... $ac_c" 1>&6 -echo "configure:3239: checking for memcmp" >&5 -if eval "test \"`echo '$''{'ac_cv_func_memcmp'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3244 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char memcmp(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char memcmp(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_memcmp) || defined (__stub___memcmp) -choke me -#else -memcmp(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_memcmp=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_memcmp=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'memcmp`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_MEMCMP 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}memcmp.o " -fi - -echo $ac_n "checking for memcpy""... $ac_c" 1>&6 -echo "configure:3291: checking for memcpy" >&5 -if eval "test \"`echo '$''{'ac_cv_func_memcpy'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3296 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char memcpy(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char memcpy(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_memcpy) || defined (__stub___memcpy) -choke me -#else -memcpy(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_memcpy=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_memcpy=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'memcpy`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_MEMCPY 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}memcpy.o "; for ac_func in bcopy -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3342: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3347 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -fi - -echo $ac_n "checking for memset""... $ac_c" 1>&6 -echo "configure:3397: checking for memset" >&5 -if eval "test \"`echo '$''{'ac_cv_func_memset'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3402 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char memset(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char memset(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_memset) || defined (__stub___memset) -choke me -#else -memset(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3425: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_memset=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_memset=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'memset`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_MEMSET 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}memset.o "; for ac_func in bzero -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3448: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3453 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -fi - -echo $ac_n "checking for getcwd""... $ac_c" 1>&6 -echo "configure:3503: checking for getcwd" >&5 -if eval "test \"`echo '$''{'ac_cv_func_getcwd'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3508 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char getcwd(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char getcwd(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_getcwd) || defined (__stub___getcwd) -choke me -#else -getcwd(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3531: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_getcwd=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_getcwd=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'getcwd`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_GETCWD 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}getcwd.o "; for ac_func in getwd -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3554: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3559 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -fi - -echo $ac_n "checking for getenv""... $ac_c" 1>&6 -echo "configure:3609: checking for getenv" >&5 -if eval "test \"`echo '$''{'ac_cv_func_getenv'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3614 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char getenv(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char getenv(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_getenv) || defined (__stub___getenv) -choke me -#else -getenv(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_getenv=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_getenv=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'getenv`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_GETENV 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}env.o " -fi - -echo $ac_n "checking for getutline""... $ac_c" 1>&6 -echo "configure:3661: checking for getutline" >&5 -if eval "test \"`echo '$''{'ac_cv_func_getutline'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3666 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char getutline(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char getutline(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_getutline) || defined (__stub___getutline) -choke me -#else -getutline(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_getutline=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_getutline=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'getutline`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_GETUTLINE 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}getutline.o "; for ac_func in ttyslot -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3712: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3717 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -fi - -echo $ac_n "checking for pututline""... $ac_c" 1>&6 -echo "configure:3767: checking for pututline" >&5 -if eval "test \"`echo '$''{'ac_cv_func_pututline'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3772 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char pututline(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char pututline(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_pututline) || defined (__stub___pututline) -choke me -#else -pututline(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3795: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_pututline=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_pututline=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'pututline`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_PUTUTLINE 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}pututline.o "; for ac_func in ttyslot -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3818: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3823 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -fi - -echo $ac_n "checking for setenv""... $ac_c" 1>&6 -echo "configure:3873: checking for setenv" >&5 -if eval "test \"`echo '$''{'ac_cv_func_setenv'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3878 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char setenv(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char setenv(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_setenv) || defined (__stub___setenv) -choke me -#else -setenv(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_setenv=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_setenv=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'setenv`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_SETENV 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}env.o " -fi - -echo $ac_n "checking for setegid""... $ac_c" 1>&6 -echo "configure:3925: checking for setegid" >&5 -if eval "test \"`echo '$''{'ac_cv_func_setegid'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3930 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char setegid(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char setegid(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_setegid) || defined (__stub___setegid) -choke me -#else -setegid(); -#endif - -; return 0; } -EOF -if { (eval echo configure:3953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_setegid=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_setegid=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'setegid`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_SETEGID 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}setegid.o "; for ac_func in setregid setresgid -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3976: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 3981 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -fi - -echo $ac_n "checking for seteuid""... $ac_c" 1>&6 -echo "configure:4031: checking for seteuid" >&5 -if eval "test \"`echo '$''{'ac_cv_func_seteuid'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4036 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char seteuid(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char seteuid(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_seteuid) || defined (__stub___seteuid) -choke me -#else -seteuid(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_seteuid=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_seteuid=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'seteuid`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_SETEUID 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}seteuid.o "; for ac_func in setreuid setresuid -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4082: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4087 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -fi - -echo $ac_n "checking for setutent""... $ac_c" 1>&6 -echo "configure:4137: checking for setutent" >&5 -if eval "test \"`echo '$''{'ac_cv_func_setutent'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4142 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char setutent(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char setutent(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_setutent) || defined (__stub___setutent) -choke me -#else -setutent(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_setutent=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_setutent=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'setutent`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_SETUTENT 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}setutent.o " -fi - -echo $ac_n "checking for sigprocmask""... $ac_c" 1>&6 -echo "configure:4189: checking for sigprocmask" >&5 -if eval "test \"`echo '$''{'ac_cv_func_sigprocmask'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4194 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char sigprocmask(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char sigprocmask(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_sigprocmask) || defined (__stub___sigprocmask) -choke me -#else -sigprocmask(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_sigprocmask=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_sigprocmask=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'sigprocmask`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_SIGPROCMASK 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}sigprocmask.o "; for ac_func in sigblock sigsetmask -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4240: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4245 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -fi - -echo $ac_n "checking for strchr""... $ac_c" 1>&6 -echo "configure:4295: checking for strchr" >&5 -if eval "test \"`echo '$''{'ac_cv_func_strchr'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4300 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char strchr(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char strchr(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_strchr) || defined (__stub___strchr) -choke me -#else -strchr(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_strchr=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_strchr=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'strchr`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_STRCHR 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}strchr.o "; for ac_func in index -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4346: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4351 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -fi - -echo $ac_n "checking for strrchr""... $ac_c" 1>&6 -echo "configure:4401: checking for strrchr" >&5 -if eval "test \"`echo '$''{'ac_cv_func_strrchr'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4406 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char strrchr(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char strrchr(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_strrchr) || defined (__stub___strrchr) -choke me -#else -strrchr(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4429: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_strrchr=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_strrchr=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'strrchr`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_STRRCHR 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}strrchr.o "; for ac_func in rindex -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4452: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4457 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -fi - -echo $ac_n "checking for strtoul""... $ac_c" 1>&6 -echo "configure:4507: checking for strtoul" >&5 -if eval "test \"`echo '$''{'ac_cv_func_strtoul'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4512 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char strtoul(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char strtoul(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_strtoul) || defined (__stub___strtoul) -choke me -#else -strtoul(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_strtoul=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_strtoul=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'strtoul`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_STRTOUL 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}strtoul.o " -fi - -echo $ac_n "checking for sysconf""... $ac_c" 1>&6 -echo "configure:4559: checking for sysconf" >&5 -if eval "test \"`echo '$''{'ac_cv_func_sysconf'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4564 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char sysconf(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char sysconf(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_sysconf) || defined (__stub___sysconf) -choke me -#else -sysconf(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_sysconf=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_sysconf=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'sysconf`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_SYSCONF 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}sysconf.o "; for ac_func in getdtablesize -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4610: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4615 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4638: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -fi - -echo $ac_n "checking for uname""... $ac_c" 1>&6 -echo "configure:4665: checking for uname" >&5 -if eval "test \"`echo '$''{'ac_cv_func_uname'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4670 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char uname(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char uname(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_uname) || defined (__stub___uname) -choke me -#else -uname(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_uname=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_uname=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'uname`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_UNAME 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}uname.o "; for ac_func in gethostname -do -echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4716: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4721 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -$ac_func(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4744: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - cat >> confdefs.h <<EOF -#define $ac_tr_func 1 -EOF - -else - echo "$ac_t""no" 1>&6 -fi -done - -fi - -echo $ac_n "checking for unsetenv""... $ac_c" 1>&6 -echo "configure:4771: checking for unsetenv" >&5 -if eval "test \"`echo '$''{'ac_cv_func_unsetenv'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 4776 "configure" -#include "confdefs.h" -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char unsetenv(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char unsetenv(); - -int main() { - -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_unsetenv) || defined (__stub___unsetenv) -choke me -#else -unsetenv(); -#endif - -; return 0; } -EOF -if { (eval echo configure:4799: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_unsetenv=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_func_unsetenv=no" -fi -rm -f conftest* -fi - -if eval "test \"`echo '$ac_cv_func_'unsetenv`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -#define HAVE_UNSETENV 1 -EOF - -else - echo "$ac_t""no" 1>&6 -MISSING="${MISSING}env.o " -fi - - - -echo $ac_n "checking for nonstandard gettimeofday""... $ac_c" 1>&6 -echo "configure:4825: checking for nonstandard gettimeofday" >&5 -cat > conftest.$ac_ext <<EOF -#line 4827 "configure" -#include "confdefs.h" - -#if HAVE_SYS_TIME_H -#include <sys/time.h> -#endif /* HAVE_SYS_TIME_H */ -#if HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ - -int main() { -struct timeval tv; -gettimeofday(&tv, NULL) -; return 0; } -EOF -if { (eval echo configure:4842: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - echo "$ac_t""no" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""maybe" 1>&6 cat > conftest.$ac_ext <<EOF -#line 4850 "configure" -#include "confdefs.h" - -#if HAVE_SYS_TIME_H -#include <sys/time.h> -#endif /* HAVE_SYS_TIME_H */ -#if HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ - -int main() { -struct timeval tv; -gettimeofday(&tv) -; return 0; } -EOF -if { (eval echo configure:4865: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - cat >> confdefs.h <<\EOF -#define HAVE_ONE_ARG_GETTIMEOFDAY 1 -EOF - echo "$ac_t""yes" 1>&6 -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - echo "$ac_t""no" 1>&6 -fi -rm -f conftest* -fi -rm -f conftest* - -# Munge out LOCALBIN and LOCALMAN in canonical (no bletch) form -trap '' 1 2 15 -cat > confcache <<\EOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -(set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >> confcache -if cmp -s $cache_file confcache; then - : -else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - -DEFS=-DHAVE_CONFIG_H - -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} - -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS <<EOF -#! /bin/sh -# Generated automatically by configure. -# Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# $0 $ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option -do - case "\$ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.13" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; - esac -done - -ac_given_srcdir=$srcdir - -trap 'rm -fr `echo "configure.munger libmissing/Makefile libopie/Makefile Makefile.munge:Makefile.in config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS <<EOF - -# Protect against being on the right side of a sed subst in config.status. -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@SHELL@%$SHELL%g -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@FFLAGS@%$FFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@ACCESS_FILE@%$ACCESS_FILE%g -s%@LOCK_DIR@%$LOCK_DIR%g -s%@OPIEAUTO@%$OPIEAUTO%g -s%@CC@%$CC%g -s%@CPP@%$CPP%g -s%@LN_S@%$LN_S%g -s%@RANLIB@%$RANLIB%g -s%@YACC@%$YACC%g -s%@CHOWN@%$CHOWN%g -s%@SU@%$SU%g -s%@ALT_SU@%$ALT_SU%g -s%@SCHEME@%$SCHEME%g -s%@LOGIN@%$LOGIN%g -s%@FTPD@%$FTPD%g -s%@INFTPD@%$INFTPD%g -s%@EXISTS@%$EXISTS%g -s%@MKDIR@%$MKDIR%g -s%@LIBOBJS@%$LIBOBJS%g -s%@ALLOCA@%$ALLOCA%g -s%@MISSING@%$MISSING%g - -CEOF -EOF - -cat >> $CONFIG_STATUS <<\EOF - -# Split the substitutions into bite-sized pieces for seds with -# small command number limits, like on Digital OSF/1 and HP-UX. -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. -ac_file=1 # Number of current file. -ac_beg=1 # First line for current file. -ac_end=$ac_max_sed_cmds # Line after last line for current file. -ac_more_lines=: -ac_sed_cmds="" -while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file - else - sed "${ac_end}q" conftest.subs > conftest.s$ac_file - fi - if test ! -s conftest.s$ac_file; then - ac_more_lines=false - rm -f conftest.s$ac_file - else - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f conftest.s$ac_file" - else - ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" - fi - ac_file=`expr $ac_file + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_cmds` - fi -done -if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat -fi -EOF - -cat >> $CONFIG_STATUS <<EOF - -CONFIG_FILES=\${CONFIG_FILES-"configure.munger libmissing/Makefile libopie/Makefile Makefile.munge:Makefile.in"} -EOF -cat >> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file -fi; done -rm -f conftest.s* - -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' -ac_dC='\3' -ac_dD='%g' -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". -ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='\([ ]\)%\1#\2define\3' -ac_uC=' ' -ac_uD='\4%g' -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_eB='$%\1#\2define\3' -ac_eC=' ' -ac_eD='%g' - -if test "${CONFIG_HEADERS+set}" != set; then -EOF -cat >> $CONFIG_STATUS <<EOF - CONFIG_HEADERS="config.h" -EOF -cat >> $CONFIG_STATUS <<\EOF -fi -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - echo creating $ac_file - - rm -f conftest.frag conftest.in conftest.out - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - cat $ac_file_inputs > conftest.in - -EOF - -# Transform confdefs.h into a sed script conftest.vals that substitutes -# the proper values into config.h.in to produce config.h. And first: -# Protect against being on the right side of a sed subst in config.status. -# Protect against being in an unquoted here document in config.status. -rm -f conftest.vals -cat > conftest.hdr <<\EOF -s/[\\&%]/\\&/g -s%[\\$`]%\\&%g -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp -s%ac_d%ac_u%gp -s%ac_u%ac_e%gp -EOF -sed -n -f conftest.hdr confdefs.h > conftest.vals -rm -f conftest.hdr - -# This sed command replaces #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -cat >> conftest.vals <<\EOF -s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% -EOF - -# Break up conftest.vals because some shells have a limit on -# the size of here documents, and old seds have small limits too. - -rm -f conftest.tail -while : -do - ac_lines=`grep -c . conftest.vals` - # grep -c gives empty output for an empty file on some AIX systems. - if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi - # Write a limited-size here document to conftest.frag. - echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS - echo 'CEOF - sed -f conftest.frag conftest.in > conftest.out - rm -f conftest.in - mv conftest.out conftest.in -' >> $CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail - rm -f conftest.vals - mv conftest.tail conftest.vals -done -rm -f conftest.vals - -cat >> $CONFIG_STATUS <<\EOF - rm -f conftest.frag conftest.h - echo "/* $ac_file. Generated automatically by configure. */" > conftest.h - cat conftest.in >> conftest.h - rm -f conftest.in - if cmp -s $ac_file conftest.h 2>/dev/null; then - echo "$ac_file is unchanged" - rm -f conftest.h - else - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - fi - rm -f $ac_file - mv conftest.h $ac_file - fi -fi; done - -EOF -cat >> $CONFIG_STATUS <<EOF - -EOF -cat >> $CONFIG_STATUS <<\EOF - -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 - -sh configure.munger diff --git a/contrib/opie/configure.in b/contrib/opie/configure.in deleted file mode 100644 index 7c2bca2e1d4f..000000000000 --- a/contrib/opie/configure.in +++ /dev/null @@ -1,562 +0,0 @@ -dnl configure.in: Input for Autoconf -dnl -dnl %%% portions-copyright-cmetz-96 -dnl Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -dnl Reserved. The Inner Net License Version 2 applies to these portions of -dnl the software. -dnl You should have received a copy of the license with this software. If -dnl you didn't get a copy, you may request one from <license@inner.net>. -dnl -dnl Portions of this software are Copyright 1995 by Randall Atkinson and Dan -dnl McDonald, All Rights Reserved. All Rights under this copyright are assigned -dnl to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -dnl License Agreement applies to this software. -dnl -dnl History: -dnl -dnl Modified by cmetz for OPIE 2.4. Add --enable-opieauto option. Check -dnl for ut_id and ut_syslen. Make disable-wtmp disable wtmp not utmp. -dnl Define HAVE_foo if foo is found by the libmissing function check. -dnl Added checks for libmissing functions that were there but never -dnl actually checked for and therefore available. -dnl Modified by cmetz for OPIE 2.32. Substitute default for LOCK_DIR. -dnl Fix the --disable-user-locking bug. AC_DEFINE variables to 1. -dnl Really check for ut_host. -dnl Modified by cmetz for OPIE 2.31. Put back manual utmp[x]/wtmp[x] -dnl checks -- too many OSs can't be trusted to tell us where they are. -dnl Check for sys/select.h. Spell endutent right. Replace strtoul() -dnl if needed. Removed duplicate check for sysconf. Added check for -dnl SunOS C2 shadow passwords (may need more work). Replace -dnl setutent. Added options to disable use of utmp/wtmp. Replace -dnl seteuid and setegid. Check for usleep. Moved options.h options -dnl here as enable/disable options. -dnl Modified by cmetz for OPIE 2.3. Removed redundant memset/memcpy. -dnl Changed ls -g test around. Changed logindevperm/fbtab defines. -dnl Added check for /etc/environment and /etc/src.sh. Check for -dnl /var/adm/sulog. Check for {get,put}utxline, provide libmissing -dnl versionf of {get,put}utline. Added --enable option for anonymous -dnl FTP. Got rid of a few unneeded checks. Check for functions only -dnl used by libmissing only if the replacement function that needs -dnl them is itself needed. -dnl Modified by cmetz for OPIE 2.22. Check for Solaris drain bamaged ls. -dnl Check for setlogin(). Removed duplicate checks for some funcs. -dnl Modified by cmetz for OPIE 2.21. Filename must be in utmp[x]/wtmp[x] -dnl defines. -dnl Modified by cmetz for OPIE 2.2. Misc changes. Changed for libmissing -dnl support and building its target object list. Changed to support -dnl FUNCTION declaration et al. Added a LOT of checks and a LOT of -dnl fixes. -dnl Created at NRL for OPIE 2.1. - -AC_INIT(README) -AC_CONFIG_HEADER(config.h) -AC_ARG_ENABLE(access-file, [ --enable-access-file=FILENAME - Enable the OPIE access file FILENAME], AC_DEFINE_UNQUOTED(PATH_ACCESS_FILE, "$enable_access_file") echo "Using the access file in $enable_access_file -- don't say we didn't warn you!") -ACCESS_FILE="$enable_access_file" -AC_SUBST(ACCESS_FILE) -AC_ARG_ENABLE(server-md4, [ --enable-server-md4 Use MD4 instead of MD5 for the server], AC_DEFINE(MDX, 4), AC_DEFINE(MDX, 5)) - -AC_ARG_ENABLE(user-locking, [ --disable-user-locking Disable user locking - --enable-user-locking[=DIR] - Put user lock files in DIR [/etc/opielocks]],,) -if test "$enable_user_locking" != no; -then - if test -z "$enable_user_locking" - then - AC_DEFINE(OPIE_LOCK_DIR, "/etc/opielocks") - LOCK_DIR="/etc/opielocks" - else - AC_DEFINE_UNQUOTED(OPIE_LOCK_DIR, "$enable_user_locking") - LOCK_DIR="$enable_user_locking" - fi -fi -AC_SUBST(LOCK_DIR) - -AC_ARG_ENABLE(retype, [ --enable-retype Ask users to re-type their secret pass phrases], AC_DEFINE(RETYPE, 1)) -AC_ARG_ENABLE(su-star-check, [ --enable-su-star-check Refuse to switch to disabled accounts], AC_DEFINE(SU_STAR_CHECK, 1)) -AC_ARG_ENABLE(new-prompts, [ --disable-new-prompts Use more compatible (but less informative) prompts],, AC_DEFINE(NEW_PROMPTS, 1)) -AC_ARG_ENABLE(insecure-override, [ --enable-insecure-override - Allow users to override insecure checks], AC_DEFINE(INSECURE_OVERRIDE, 1)) -AC_ARG_ENABLE(anonymous-ftp, [ --enable-anonymous-ftp Enable anonymous FTP support], AC_DEFINE(DOANONYMOUS, 1) echo "enabling anonymous FTP support in ftp -- don't say we didn't warn you!") -AC_ARG_ENABLE(utmp, [ --disable-utmp Disable utmp logging], AC_DEFINE(DISABLE_UTMP, 1) echo "disabling utmp logging") -AC_ARG_ENABLE(wtmp, [ --disable-wtmp Disable wtmp logging], AC_DEFINE(DISABLE_WTMP, 1) echo "disabling wtmp logging") -AC_ARG_ENABLE(opieauto, [ --enable-opieauto Enable support for opieauto], AC_DEFINE(OPIEAUTO, 1) OPIEAUTO=opieauto; echo "enabling opieauto support") -AC_SUBST(OPIEAUTO) - -dnl Checks for programs. -AC_PROG_CC -AC_PROG_CPP -AC_PROG_LN_S -AC_PROG_RANLIB -AC_PROG_YACC - -AC_AIX -AC_ISC_POSIX -AC_MINIX - -dnl We'd put PATH in these checks, but it turns out that autoconf doesn't -dnl work as documented when it comes to the colon separator... - -AC_PATH_PROG(CHOWN, chown, /bin/chown, /usr/bin /bin /usr/sbin /sbin /usr/etc /etc) - -AC_PATH_PROG(SU, su, /bin/su, /usr/bin /bin) -AC_PATH_PROG(ALT_SU, su,, /usr/sbin /sbin) - -AC_PATH_PROG(SCHEME, scheme,, /usr/lib/iaf/scheme) -AC_PATH_PROG(LOGIN, login, /bin/login, /usr/bin /bin) -dnl AC_DEFINE_UNQUOTED(PATH_LOGIN, "$LOGIN") - -if test ! -z "$SCHEME"; -then - LOGIN="$SCHEME"; -fi - -AC_PATH_PROG(FTPD, ftpd,, /usr/libexec /usr/etc /etc /usr/sbin /sbin /usr/lbin) -AC_PATH_PROG(INFTPD, in.ftpd,, /usr/libexec /usr/etc /etc /usr/sbin /sbin /usr/lbin) - -if test -z "$FTPD" -then - if test ! -z "$INFTPD" - then - FTPD="$INFTPD" - fi -fi - -AC_MSG_CHECKING(for default PATH entries) -default_path="" -save_IFS="$IFS" -IFS=" " -for i in /usr/bin /bin /usr/ucb /usr/sbin /usr/bsd /sbin /usr/bin/X11 /etc /usr/local/X11/bin /usr/X11R6/bin /your-system-is-broken -do - IFS=":" - for j in $PATH - do - if test "$i" = "$j" - then - if test -d "$i" - then - if test -z "$default_path" - then - default_path="$i" - else - default_path="$default_path:$i" - fi - fi - fi - done - IFS=" " -done -AC_DEFINE_UNQUOTED(DEFAULT_PATH, "$default_path") -AC_MSG_RESULT($default_path) - -AC_MSG_CHECKING(for test -e flag) -if sh config.testeflag -then - result=yes - EXISTS="-e" -else - result=no - EXISTS="-f" -fi -AC_SUBST(EXISTS) -AC_MSG_RESULT($result) - -AC_MSG_CHECKING(for mkdir -p flag) -if test -d config.tmpdir -then - rmdir config.tmpdir/foo/bar >/dev/null 2>/dev/null - rmdir config.tmpdir/foo >/dev/null 2>/dev/null - rmdir config.tmpdir >/dev/null 2>/dev/null -fi - -result=no -if mkdir -p config.tmpdir/foo/bar >/dev/null 2>/dev/null -then - if test -d config.tmpdir - then - if test -d config.tmpdir/foo - then - if test -d config.tmpdir/foo/bar - then - result=yes - rmdir config.tmpdir/foo/bar >/dev/null 2>/dev/null - fi - rmdir config.tmpdir/foo >/dev/null 2>/dev/null - fi - rmdir config.tmpdir >/dev/null 2>/dev/null - fi -fi - -if test "$result" = yes -then - MKDIR="mkdir -p" -else - MKDIR="mkdir" -fi -AC_SUBST(MKDIR) -AC_MSG_RESULT($result) - -AC_MSG_CHECKING(for ls group field) -lsg=`/bin/ls -ldg / | wc -w | awk '{print $1}'`; -ls=`/bin/ls -ld / | wc -w | awk '{print $1}'`; -result="no" -if test $ls = 9; -then - result="yes" -else - if test "$ls" = 8 -a "$lsg" = 9; - then - result="yes, with -g" - AC_DEFINE(HAVE_LS_G_FLAG) - fi -fi -AC_MSG_RESULT($result) - -dnl Checks for various system characteristics -AC_MSG_CHECKING(for /etc/default/login) -if test $EXISTS /etc/default/login -then - result=yes - AC_DEFINE(HAVE_ETC_DEFAULT_LOGIN) -else - result=no -fi -AC_MSG_RESULT($result) - -AC_MSG_CHECKING(for /etc/securetty) -if test $EXISTS /etc/securetty -then - result=yes - AC_DEFINE(HAVE_SECURETTY) -else - result=no -fi -AC_MSG_RESULT($result) - -AC_MSG_CHECKING(for /etc/logindevperm) -if test $EXISTS /etc/logindevperm -then - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_LOGIN_PERMFILE, "/etc/logindevperm") -else - AC_MSG_RESULT(no) - - AC_MSG_CHECKING(for /etc/fbtab) - if test $EXISTS /etc/fbtab - then - result=yes - AC_DEFINE(HAVE_LOGIN_PERMFILE, "/etc/fbtab") - else - result=no - fi - AC_MSG_RESULT($result) -fi - -AC_MSG_CHECKING(for /etc/environment) -if test $EXISTS /etc/environment -then - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_LOGIN_ENVFILE, "/etc/environment") -else - AC_MSG_RESULT(no) - - AC_MSG_CHECKING(for /etc/src.sh) - if test $EXISTS /etc/src.sh - then - result=yes - AC_DEFINE(HAVE_LOGIN_ENVFILE, "/etc/src.sh") - else - result=no - fi - AC_MSG_RESULT($result) -fi - -AC_MSG_CHECKING(for /etc/shadow) -if test $EXISTS /etc/shadow -then - result=yes - AC_DEFINE(HAVE_ETC_SHADOW) -else - AC_MSG_RESULT(no) - - AC_MSG_CHECKING(for /etc/security/passwd.adjunct) - if test $EXISTS /etc/security/passwd.adjunct - then - result=yes - AC_DEFINE(HAVE_SUNOS_C2_SHADOW) - LIBOBJS="$LIBOBJS getspnam.o endspent.o" - else - result=no - fi -fi -AC_MSG_RESULT($result) - -AC_MSG_CHECKING(for /var/adm/sulog) -if test $EXISTS /var/adm/sulog -then - result=yes - AC_DEFINE(HAVE_SULOG) -else - result=no -fi -AC_MSG_RESULT($result) - -AC_MSG_CHECKING(mail spool location) -mail_spool="" -for i in /var/mail /usr/mail /var/spool/mail /usr/spool/mail -do - if test -d $i - then - mail_spool="$i" - fi -done -if test -z "$mail_spool" -then - result="not found" -else - result="$mail_spool" - AC_DEFINE_UNQUOTED(PATH_MAIL, "$mail_spool") -fi -AC_MSG_RESULT($result) - -AC_MSG_CHECKING(where your system puts the utmp file) -utmp_path="" -for i in /var/run /var/adm /usr/adm /etc -do - if test $EXISTS $i/utmp - then - utmp_path="$i" - fi -done -if test -z "$utmp_path" -then - result="not found" -else - result="$utmp_path" - AC_DEFINE_UNQUOTED(PATH_UTMP_AC, "$utmp_path/utmp") -fi -AC_MSG_RESULT($result) - -AC_MSG_CHECKING(where your system puts the utmpx file) -utmp_path="" -for i in /var/run /var/adm /usr/adm /etc -do - if test $EXISTS $i/utmp - then - utmp_path="$i" - fi -done -if test -z "$utmp_path" -then - result="not found" - AC_DEFINE_UNQUOTED(PATH_UTMP_AC, "$utmp_path/utmpx") -fi -AC_MSG_RESULT($result) - -AC_MSG_CHECKING(where your system puts the wtmp file) -wtmp_path="" -for i in /var/run /var/log /var/adm /usr/adm /etc -do - if test $EXISTS $i/wtmp - then - wtmp_path="$i" - fi -done -if test -z "$wtmp_path" -then - result="not found" -else - result="$wtmp_path" - AC_DEFINE_UNQUOTED(PATH_WTMP_AC, "$wtmp_path/wtmp") -fi -AC_MSG_RESULT($result) - -AC_MSG_CHECKING(where your system puts the wtmpx file) -wtmpx_path="" -for i in /var/run /var/log /var/adm /usr/adm /etc -do - if test $EXISTS $i/wtmpx - then - wtmpx_path="$i" - fi -done -if test -z "$wtmpx_path" -then - result="not found" -else - result="$wtmpx_path" - AC_DEFINE_UNQUOTED(PATH_WTMPX_AC, "$wtmpx_path/wtmpx") -fi -AC_MSG_RESULT($result) - -AC_MSG_CHECKING(whether the system profile displays the motd) -result=no -if test $EXISTS /etc/profile -then - if grep motd /etc/profile >/dev/null 2>/dev/null - then - result=yes - fi -fi -if test "$result" = yes -then - AC_DEFINE(HAVE_MOTD_IN_PROFILE) -fi -AC_MSG_RESULT($result) - -AC_MSG_CHECKING(whether the system profile checks for mail) -result=no -if test $EXISTS /etc/profile -then - if grep 'mail\.' /etc/profile >/dev/null 2>/dev/null - then - result=yes - fi -fi -if test "$result" = yes -then - AC_DEFINE(HAVE_MAILCHECK_IN_PROFILE) -fi -AC_MSG_RESULT($result) - -dnl Random checks -AC_C_CONST - -AC_MSG_CHECKING(to see if your compiler can handle void arguments) -AC_TRY_COMPILE(foo(void) { },, AC_DEFINE(HAVE_VOIDARG) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) - -AC_MSG_CHECKING(to see if your compiler can handle void return values) -AC_TRY_COMPILE(void foo() { },, AC_DEFINE(HAVE_VOIDRET) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) - -AC_MSG_CHECKING(to see if your compiler can handle void pointers) -AC_TRY_COMPILE(foo() { void *bar = (void *)0x42; bar = bar + 1; },, AC_DEFINE(HAVE_VOIDPTR) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) - -AC_MSG_CHECKING(to see if your compiler can handle ANSI argument lists) -AC_TRY_COMPILE(int foo(int bar, int baz) { return 0; },, AC_DEFINE(HAVE_ANSIDECL) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) - -AC_MSG_CHECKING(to see if your compiler can handle ANSI prototypes) -AC_TRY_COMPILE(extern int foo(int, int);,, AC_DEFINE(HAVE_ANSIPROTO) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) - -AC_MSG_CHECKING(to see if your compiler can handle ANSI variable arguments) -AC_TRY_COMPILE([#include <stdarg.h> -int foo(int arg, ...) { - va_list ap; - va_start(ap, arg); - va_end(ap); - return 0; -}],, AC_DEFINE(HAVE_ANSISTDARG) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) - -AC_MSG_CHECKING(to see if you have an ANSI-style sprintf) -AC_TRY_RUN([#include <stdio.h> -int main(argc, argv) -int argc; -char *argv[]; -{ - char buf[5]; - int i = 2; - i += sprintf(buf, "1234"); - return (i == 6) ? 0 : -1; -}], AC_DEFINE(HAVE_ANSISPRINTF) AC_MSG_RESULT(yes), AC_MSG_RESULT(no), AC_MSG_RESULT(no)) - -dnl Checks for libraries. -AC_CHECK_LIB(crypt, crypt) -AC_CHECK_LIB(nsl, gethostname) -AC_CHECK_LIB(posix, main) -AC_CHECK_LIB(socket, socket) - -dnl Checks for header files. -AC_HEADER_DIRENT -AC_HEADER_SYS_WAIT -AC_CHECK_HEADERS(crypt.h fcntl.h limits.h termios.h sys/file.h sys/ioctl.h sys/time.h syslog.h unistd.h paths.h shadow.h signal.h sys/signal.h lastlog.h sys/utsname.h pwd.h sys/param.h string.h stdlib.h utmpx.h sys/select.h) - -dnl Checks for typedefs, structures, and compiler characteristics. -dnl AC_TYPE_UID_T -dnl AC_TYPE_OFF_T -dnl AC_TYPE_PID_T -dnl AC_STRUCT_ST_BLKSIZE -dnl AC_STRUCT_TM - -AC_MSG_CHECKING(for ut_pid in struct utmp) -AC_TRY_COMPILE([#include <sys/types.h> -#include <utmp.h>], [struct utmp foo; return (int)foo.ut_pid;], AC_DEFINE(HAVE_UT_PID) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) -AC_MSG_CHECKING(for ut_type in struct utmp) -AC_TRY_COMPILE([#include <sys/types.h> -#include <utmp.h>], [struct utmp foo; return (int)foo.ut_type;], AC_DEFINE(HAVE_UT_TYPE) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) -AC_MSG_CHECKING(for ut_name in struct utmp) -AC_TRY_COMPILE([#include <sys/types.h> -#include <utmp.h>], [struct utmp foo; return (int)foo.ut_name[0];], AC_DEFINE(HAVE_UT_NAME) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) -dnl AC_MSG_CHECKING(for ut_user in struct utmp) -dnl AC_TRY_COMPILE([#include <sys/types.h> -dnl #include <utmp.h>], [struct utmp foo; return (int)foo.ut_user[0];], AC_DEFINE(HAVE_UT_USER) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) -AC_MSG_CHECKING(for ut_host in struct utmp) -AC_TRY_COMPILE([#include <sys/types.h> -#include <utmp.h>], [struct utmp foo; return (int)foo.ut_host[0];], AC_DEFINE(HAVE_UT_HOST) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) -AC_MSG_CHECKING(for ut_id in struct utmp) -AC_TRY_COMPILE([#include <sys/types.h> -#include <utmp.h>], [struct utmp foo; return (int)foo.ut_id[0];], AC_DEFINE(HAVE_UT_ID) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) -#AC_MSG_CHECKING(for ut_syslen in struct utmp) -#AC_TRY_COMPILE([#include <sys/types.h> -##include <utmp.h>], [struct utmp foo; return (int)foo.ut_syslen;], AC_DEFINE(HAVE_UT_SYSLEN) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) -AC_MSG_CHECKING(for ut_syslen in struct utmpx) -AC_TRY_COMPILE([#include <sys/types.h> -#include <utmpx.h>], [struct utmpx foo; return (int)foo.ut_syslen;], AC_DEFINE(HAVE_UTX_SYSLEN) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) - -dnl Checks for library functions. -dnl AC_PROG_GCC_TRADITIONAL -AC_TYPE_SIGNAL -AC_CHECK_FUNCS(gettimeofday socket strftime strstr setpriority getttynam setvbuf getspnam endspent setgroups getgroups fpurge setlogin lstat getutxline pututxline usleep) - -dnl Libmissing... -AC_FUNC_MEMCMP -AC_FUNC_ALLOCA -AC_REPLACE_FUNCS(getusershell sigaddset sigemptyset strerror strncasecmp) -MISSING="$LIBOBJS $ALLOCA " ; - -dnl These should be simplified by a macro -AC_CHECK_FUNC(atexit, AC_DEFINE(HAVE_ATEXIT), MISSING="${MISSING}atexit.o "; AC_CHECK_FUNCS(on_exit)) -AC_CHECK_FUNC(endutent, AC_DEFINE(HAVE_ENDUTENT), MISSING="${MISSING}endutent.o ") -AC_CHECK_FUNC(initgroups, AC_DEFINE(HAVE_INITGROUPS), MISSING="${MISSING}initgroups.o ") -AC_CHECK_FUNC(memcmp, AC_DEFINE(HAVE_MEMCMP), MISSING="${MISSING}memcmp.o ") -AC_CHECK_FUNC(memcpy, AC_DEFINE(HAVE_MEMCPY), MISSING="${MISSING}memcpy.o "; AC_CHECK_FUNCS(bcopy)) -AC_CHECK_FUNC(memset, AC_DEFINE(HAVE_MEMSET), MISSING="${MISSING}memset.o "; AC_CHECK_FUNCS(bzero)) -AC_CHECK_FUNC(getcwd, AC_DEFINE(HAVE_GETCWD), MISSING="${MISSING}getcwd.o "; AC_CHECK_FUNCS(getwd)) -AC_CHECK_FUNC(getenv, AC_DEFINE(HAVE_GETENV), MISSING="${MISSING}env.o ") -AC_CHECK_FUNC(getutline, AC_DEFINE(HAVE_GETUTLINE), MISSING="${MISSING}getutline.o "; AC_CHECK_FUNCS(ttyslot)) -AC_CHECK_FUNC(pututline, AC_DEFINE(HAVE_PUTUTLINE), MISSING="${MISSING}pututline.o "; AC_CHECK_FUNCS(ttyslot)) -AC_CHECK_FUNC(setenv, AC_DEFINE(HAVE_SETENV), MISSING="${MISSING}env.o ") -AC_CHECK_FUNC(setegid, AC_DEFINE(HAVE_SETEGID), MISSING="${MISSING}setegid.o "; AC_CHECK_FUNCS(setregid setresgid)) -AC_CHECK_FUNC(seteuid, AC_DEFINE(HAVE_SETEUID), MISSING="${MISSING}seteuid.o "; AC_CHECK_FUNCS(setreuid setresuid)) -AC_CHECK_FUNC(setutent, AC_DEFINE(HAVE_SETUTENT), MISSING="${MISSING}setutent.o ") -AC_CHECK_FUNC(sigprocmask, AC_DEFINE(HAVE_SIGPROCMASK), MISSING="${MISSING}sigprocmask.o "; AC_CHECK_FUNCS(sigblock sigsetmask)) -AC_CHECK_FUNC(strchr, AC_DEFINE(HAVE_STRCHR), MISSING="${MISSING}strchr.o "; AC_CHECK_FUNCS(index)) -AC_CHECK_FUNC(strrchr, AC_DEFINE(HAVE_STRRCHR), MISSING="${MISSING}strrchr.o "; AC_CHECK_FUNCS(rindex)) -AC_CHECK_FUNC(strtoul, AC_DEFINE(HAVE_STRTOUL), MISSING="${MISSING}strtoul.o ") -AC_CHECK_FUNC(sysconf, AC_DEFINE(HAVE_SYSCONF), MISSING="${MISSING}sysconf.o "; AC_CHECK_FUNCS(getdtablesize)) -AC_CHECK_FUNC(uname, AC_DEFINE(HAVE_UNAME), MISSING="${MISSING}uname.o "; AC_CHECK_FUNCS(gethostname)) -AC_CHECK_FUNC(unsetenv, AC_DEFINE(HAVE_UNSETENV), MISSING="${MISSING}env.o ") -AC_SUBST(MISSING) - -AC_MSG_CHECKING(for nonstandard gettimeofday) -AC_TRY_COMPILE([ -#if HAVE_SYS_TIME_H -#include <sys/time.h> -#endif /* HAVE_SYS_TIME_H */ -#if HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ -], -[struct timeval tv; -gettimeofday(&tv, NULL)], AC_MSG_RESULT(no), AC_MSG_RESULT(maybe) AC_TRY_COMPILE([ -#if HAVE_SYS_TIME_H -#include <sys/time.h> -#endif /* HAVE_SYS_TIME_H */ -#if HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ -], -[struct timeval tv; -gettimeofday(&tv)], AC_DEFINE(HAVE_ONE_ARG_GETTIMEOFDAY) AC_MSG_RESULT(yes), AC_MSG_RESULT(no))) - -# Munge out LOCALBIN and LOCALMAN in canonical (no bletch) form -AC_OUTPUT(configure.munger libmissing/Makefile libopie/Makefile Makefile.munge:Makefile.in) -sh configure.munger diff --git a/contrib/opie/configure.munger.in b/contrib/opie/configure.munger.in deleted file mode 100644 index 25f5ebf83017..000000000000 --- a/contrib/opie/configure.munger.in +++ /dev/null @@ -1,16 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -bindir=@bindir@ -mandir=@mandir@ - -LOCALBIN=$bindir -LOCALMAN=$mandir - -echo "" -echo "Binaries are going to be installed into $LOCALBIN," -echo "Manual pages are going to be installed into $LOCALMAN." -echo "" -echo "creating Makefile" -cat Makefile.munge | sed s:@LOCALMAN@:$LOCALMAN:g | sed s:@LOCALBIN@:$LOCALBIN:g > Makefile -echo "" -echo "Have you read the README file?" diff --git a/contrib/opie/ftpcmd.y b/contrib/opie/ftpcmd.y deleted file mode 100644 index abcffdc69568..000000000000 --- a/contrib/opie/ftpcmd.y +++ /dev/null @@ -1,1290 +0,0 @@ -/* ftpcmd.y: yacc parser for the FTP daemon. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.4. Use DOTITLE rather than SETPROCTITLE. - Modified by cmetz for OPIE 2.3. Moved LS_COMMAND here. - Modified by cmetz for OPIE 2.2. Fixed a *lot* of warnings. - Use FUNCTION declaration et al. Removed useless strings. - Changed some char []s to char *s. Deleted comment address. - Changed tmpline references to be more pure-pointer - references. Changed tmpline declaration back to char []. - Modified at NRL for OPIE 2.1. Minor changes for autoconf. - Modified at NRL for OPIE 2.01. Added forward declaration for sitetab[] - -- fixes problems experienced by bison users. Merged in new - PORT attack fixes from Hobbit. - Modified at NRL for OPIE 2.0. - Originally from BSD. - -$FreeBSD$ -*/ -/* - * Copyright (c) 1985, 1988 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)ftpcmd.y 5.24 (Berkeley) 2/25/91 - */ - -/* - * Grammar for FTP commands. - * See RFC 959. - */ - -%{ -#include "opie_cfg.h" - -#include <sys/param.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/stat.h> -#include <netinet/in.h> -#include <arpa/ftp.h> -#include <signal.h> -#include <setjmp.h> -#include <syslog.h> -#if TM_IN_SYS_TIME -#include <sys/time.h> -#else /* TM_IN_SYS_TIME */ -#include <time.h> -#endif /* TM_IN_SYS_TIME */ -#include <pwd.h> -#include <unistd.h> -#include <stdio.h> -#include <ctype.h> -#include <stdlib.h> -#include <string.h> - -#include "opie.h" - -#if HAVE_LS_G_FLAG -#define LS_COMMAND "/bin/ls -lgA" -#else /* HAVE_LS_G_FLAG */ -#define LS_COMMAND "/bin/ls -lA" -#endif /* HAVE_LS_G_FLAG */ - -extern struct sockaddr_in data_dest; -extern struct sockaddr_in his_addr; -extern int logged_in; -extern struct passwd *pw; -extern int guest; -extern int type; -extern int form; -extern int debug; -extern int timeout; -extern int maxtimeout; -extern int pdata; -extern char *remotehost; -extern char *proctitle; -extern char *globerr; -extern int usedefault; -extern int transflag; -extern char tmpline[]; -char **ftpglob(); - -VOIDRET dologout __P((int)); -VOIDRET upper __P((char *)); -VOIDRET nack __P((char *)); -VOIDRET opiefatal __P((char *)); - -VOIDRET pass __P((char *)); -int user __P((char *)); -VOIDRET passive __P((void)); -VOIDRET retrieve __P((char *, char *)); -VOIDRET store __P((char *, char *, int)); -VOIDRET send_file_list __P((char *)); -VOIDRET statfilecmd __P((char *)); -VOIDRET statcmd __P((void)); -VOIDRET delete __P((char *)); -VOIDRET renamecmd __P((char *, char *)); -VOIDRET cwd __P((char *)); -VOIDRET makedir __P((char *)); -VOIDRET removedir __P((char *)); -VOIDRET pwd __P((void)); - -VOIDRET sizecmd __P((char *)); - -off_t restart_point; - -static int cmd_type; -static int cmd_form; -static int cmd_bytesz; -static unsigned short cliport = 0; -char cbuf[512]; -char *fromname; - -struct tab { - char *name; - short token; - short state; - short implemented; /* 1 if command is implemented */ - char *help; -}; - -VOIDRET help __P((struct tab *, char *)); - -struct tab cmdtab[], sitetab[]; - -%} - -%token - A B C E F I - L N P R S T - - SP CRLF COMMA STRING NUMBER - - USER PASS ACCT REIN QUIT PORT - PASV TYPE STRU MODE RETR STOR - APPE MLFL MAIL MSND MSOM MSAM - MRSQ MRCP ALLO REST RNFR RNTO - ABOR DELE CWD LIST NLST SITE - STAT HELP NOOP MKD RMD PWD - CDUP STOU SMNT SYST SIZE MDTM - - UMASK IDLE CHMOD - - LEXERR - -%start cmd_list - -%% - -cmd_list: /* empty */ - | cmd_list cmd - = { - fromname = (char *) 0; - restart_point = (off_t) 0; - } - | cmd_list rcmd - ; - -cmd: USER SP username CRLF - = { - user((char *) $3); - free((char *) $3); - } - | PASS SP password CRLF - = { - pass((char *) $3); - free((char *) $3); - } - | PORT check_login SP host_port CRLF - = { - usedefault = 0; - if (pdata >= 0) { - (void) close(pdata); - pdata = -1; - } -/* H* port fix, part B: admonish the twit. - Also require login before PORT works */ - if ($2) { - if ((cliport > 1023) && (data_dest.sin_addr.s_addr > 0)) { - reply(200, "PORT command successful."); - } else { - syslog (LOG_WARNING, "refused %s from %s", - cbuf, remotehost); - reply(500, "You've GOT to be joking."); - } - } - } -/* | PASV CRLF - = { - passive(); - } */ - | PASV check_login CRLF - = { -/* Require login for PASV, too. This actually fixes a bug -- telnet to an - unfixed wu-ftpd and type PASV first off, and it crashes! */ - if ($2) { - passive(); - } - } - | TYPE SP type_code CRLF - = { - switch (cmd_type) { - - case TYPE_A: - if (cmd_form == FORM_N) { - reply(200, "Type set to A."); - type = cmd_type; - form = cmd_form; - } else - reply(504, "Form must be N."); - break; - - case TYPE_E: - reply(504, "Type E not implemented."); - break; - - case TYPE_I: - reply(200, "Type set to I."); - type = cmd_type; - break; - - case TYPE_L: -#if NBBY == 8 - if (cmd_bytesz == 8) { - reply(200, - "Type set to L (byte size 8)."); - type = cmd_type; - } else - reply(504, "Byte size must be 8."); -#else /* NBBY == 8 */ - UNIMPLEMENTED for NBBY != 8 -#endif /* NBBY == 8 */ - } - } - | STRU SP struct_code CRLF - = { - switch ($3) { - - case STRU_F: - reply(200, "STRU F ok."); - break; - - default: - reply(504, "Unimplemented STRU type."); - } - } - | MODE SP mode_code CRLF - = { - switch ($3) { - - case MODE_S: - reply(200, "MODE S ok."); - break; - - default: - reply(502, "Unimplemented MODE type."); - } - } - | ALLO SP NUMBER CRLF - = { - reply(202, "ALLO command ignored."); - } - | ALLO SP NUMBER SP R SP NUMBER CRLF - = { - reply(202, "ALLO command ignored."); - } - | RETR check_login SP pathname CRLF - = { - if ($2 && $4) - retrieve((char *) 0, (char *) $4); - if ($4) - free((char *) $4); - } - | STOR check_login SP pathname CRLF - = { - if ($2 && $4) - store((char *) $4, "w", 0); - if ($4) - free((char *) $4); - } - | APPE check_login SP pathname CRLF - = { - if ($2 && $4) - store((char *) $4, "a", 0); - if ($4) - free((char *) $4); - } - | NLST check_login CRLF - = { - if ($2) - send_file_list("."); - } - | NLST check_login SP STRING CRLF - = { - if ($2 && $4) - send_file_list((char *) $4); - if ($4) - free((char *) $4); - } - | LIST check_login CRLF - = { - if ($2) - retrieve(LS_COMMAND, ""); - } - | LIST check_login SP pathname CRLF - = { - if ($2 && $4) - { - char buffer[sizeof(LS_COMMAND)+3]; - strcpy(buffer, LS_COMMAND); - strcat(buffer, " %s"); - retrieve(buffer, (char *) $4); - } - if ($4) - free((char *) $4); - } - | STAT check_login SP pathname CRLF - = { - if ($2 && $4) - statfilecmd((char *) $4); - if ($4) - free((char *) $4); - } - | STAT CRLF - = { - statcmd(); - } - | DELE check_login SP pathname CRLF - = { - if ($2 && $4) - delete((char *) $4); - if ($4) - free((char *) $4); - } - | RNTO SP pathname CRLF - = { - if (fromname) { - renamecmd(fromname, (char *) $3); - free(fromname); - fromname = (char *) 0; - } else { - reply(503, "Bad sequence of commands."); - } - free((char *) $3); - } - | ABOR CRLF - = { - reply(225, "ABOR command successful."); - } - | CWD check_login CRLF - = { - if ($2) - cwd(pw->pw_dir); - } - | CWD check_login SP pathname CRLF - = { - if ($2 && $4) - cwd((char *) $4); - if ($4) - free((char *) $4); - } - | HELP CRLF - = { - help(cmdtab, (char *) 0); - } - | HELP SP STRING CRLF - = { - register char *cp = (char *)$3; - - if (strncasecmp(cp, "SITE", 4) == 0) { - cp = (char *)$3 + 4; - if (*cp == ' ') - cp++; - if (*cp) - help(sitetab, cp); - else - help(sitetab, (char *) 0); - } else - help(cmdtab, (char *) $3); - } - | NOOP CRLF - = { - reply(200, "NOOP command successful."); - } - | MKD check_login SP pathname CRLF - = { - if ($2 && $4) - makedir((char *) $4); - if ($4) - free((char *) $4); - } - | RMD check_login SP pathname CRLF - = { - if ($2 && $4) - removedir((char *) $4); - if ($4) - free((char *) $4); - } - | PWD check_login CRLF - = { - if ($2) - pwd(); - } - | CDUP check_login CRLF - = { - if ($2) - cwd(".."); - } - | SITE SP HELP CRLF - = { - help(sitetab, (char *) 0); - } - | SITE SP HELP SP STRING CRLF - = { - help(sitetab, (char *) $5); - } - | SITE SP UMASK check_login CRLF - = { - int oldmask; - - if ($4) { - oldmask = umask(0); - (void) umask(oldmask); - reply(200, "Current UMASK is %03o", oldmask); - } - } - | SITE SP UMASK check_login SP octal_number CRLF - = { - int oldmask; - - if ($4) { - if (($6 == -1) || ($6 > 0777)) { - reply(501, "Bad UMASK value"); - } else { - oldmask = umask($6); - reply(200, - "UMASK set to %03o (was %03o)", - $6, oldmask); - } - } - } - | SITE SP CHMOD check_login SP octal_number SP pathname CRLF - = { - if ($4 && $8) { - if ($6 > 0777) - reply(501, - "CHMOD: Mode value must be between 0 and 0777"); - else if (chmod((char *) $8, $6) < 0) - perror_reply(550, (char *) $8); - else - reply(200, "CHMOD command successful."); - } - if ($8) - free((char *) $8); - } - | SITE SP IDLE CRLF - = { - reply(200, - "Current IDLE time limit is %d seconds; max %d", - timeout, maxtimeout); - } - | SITE SP IDLE SP NUMBER CRLF - = { - if ($5 < 30 || $5 > maxtimeout) { - reply(501, - "Maximum IDLE time must be between 30 and %d seconds", - maxtimeout); - } else { - timeout = $5; - (void) alarm((unsigned) timeout); - reply(200, - "Maximum IDLE time set to %d seconds", - timeout); - } - } - | STOU check_login SP pathname CRLF - = { - if ($2 && $4) - store((char *) $4, "w", 1); - if ($4) - free((char *) $4); - } - | SYST CRLF - = { -#ifdef unix -#ifdef BSD - reply(215, "UNIX Type: L%d Version: BSD-%d", - NBBY, BSD); -#else /* BSD */ - reply(215, "UNIX Type: L%d", NBBY); -#endif /* BSD */ -#else /* unix */ - reply(215, "UNKNOWN Type: L%d", NBBY); -#endif /* unix */ - } - - /* - * SIZE is not in RFC959, but Postel has blessed it and - * it will be in the updated RFC. - * - * Return size of file in a format suitable for - * using with RESTART (we just count bytes). - */ - | SIZE check_login SP pathname CRLF - = { - if ($2 && $4) - sizecmd((char *) $4); - if ($4) - free((char *) $4); - } - - /* - * MDTM is not in RFC959, but Postel has blessed it and - * it will be in the updated RFC. - * - * Return modification time of file as an ISO 3307 - * style time. E.g. YYYYMMDDHHMMSS or YYYYMMDDHHMMSS.xxx - * where xxx is the fractional second (of any precision, - * not necessarily 3 digits) - */ - | MDTM check_login SP pathname CRLF - = { - if ($2 && $4) { - struct stat stbuf; - if (stat((char *) $4, &stbuf) < 0) - perror_reply(550, (char *) $4); - else if ((stbuf.st_mode&S_IFMT) != S_IFREG) { - reply(550, "%s: not a plain file.", - (char *) $4); - } else { - register struct tm *t; - struct tm *gmtime(); - t = gmtime(&stbuf.st_mtime); - reply(213, - "%d%02d%02d%02d%02d%02d", - t->tm_year+1900, t->tm_mon+1, t->tm_mday, - t->tm_hour, t->tm_min, t->tm_sec); - } - } - if ($4) - free((char *) $4); - } - | QUIT CRLF - = { - reply(221, "Goodbye."); - dologout(0); - } - | error CRLF - = { - yyerrok; - } - ; -rcmd: RNFR check_login SP pathname CRLF - = { - char *renamefrom(); - - restart_point = (off_t) 0; - if ($2 && $4) { - fromname = renamefrom((char *) $4); - if (fromname == (char *) 0 && $4) { - free((char *) $4); - } - } - } - | REST SP byte_size CRLF - = { - long atol(); - - fromname = (char *) 0; - restart_point = $3; - reply(350, "Restarting at %ld. %s", restart_point, - "Send STORE or RETRIEVE to initiate transfer."); - } - ; - -username: STRING - ; - -password: /* empty */ - = { - *(char **)&($$) = (char *)calloc(1, sizeof(char)); - } - | STRING - ; - -byte_size: NUMBER - ; - -host_port: NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA - NUMBER COMMA NUMBER - = { - register char *a, *p; - - a = (char *)&data_dest.sin_addr; - a[0] = $1; a[1] = $3; a[2] = $5; a[3] = $7; - -/* H* port fix, part A-1: Check the args against the client addr */ - p = (char *)&his_addr.sin_addr; - if (memcmp (a, p, sizeof (data_dest.sin_addr))) - memset (a, 0, sizeof (data_dest.sin_addr)); /* XXX */ - - p = (char *)&data_dest.sin_port; - -/* H* port fix, part A-2: only allow client ports in "user space" */ - p[0] = 0; p[1] = 0; - cliport = ($9 << 8) + $11; - if (cliport > 1023) { - p[0] = $9; p[1] = $11; - } - - p[0] = $9; p[1] = $11; - data_dest.sin_family = AF_INET; - } - ; - -form_code: N - = { - $$ = FORM_N; - } - | T - = { - $$ = FORM_T; - } - | C - = { - $$ = FORM_C; - } - ; - -type_code: A - = { - cmd_type = TYPE_A; - cmd_form = FORM_N; - } - | A SP form_code - = { - cmd_type = TYPE_A; - cmd_form = $3; - } - | E - = { - cmd_type = TYPE_E; - cmd_form = FORM_N; - } - | E SP form_code - = { - cmd_type = TYPE_E; - cmd_form = $3; - } - | I - = { - cmd_type = TYPE_I; - } - | L - = { - cmd_type = TYPE_L; - cmd_bytesz = NBBY; - } - | L SP byte_size - = { - cmd_type = TYPE_L; - cmd_bytesz = $3; - } - /* this is for a bug in the BBN ftp */ - | L byte_size - = { - cmd_type = TYPE_L; - cmd_bytesz = $2; - } - ; - -struct_code: F - = { - $$ = STRU_F; - } - | R - = { - $$ = STRU_R; - } - | P - = { - $$ = STRU_P; - } - ; - -mode_code: S - = { - $$ = MODE_S; - } - | B - = { - $$ = MODE_B; - } - | C - = { - $$ = MODE_C; - } - ; - -pathname: pathstring - = { - /* - * Problem: this production is used for all pathname - * processing, but only gives a 550 error reply. - * This is a valid reply in some cases but not in others. - */ - if (logged_in && $1 && strncmp((char *) $1, "~", 1) == 0) { - *(char **)&($$) = *ftpglob((char *) $1); - if (globerr != NULL) { - reply(550, globerr); -/* $$ = NULL; */ - $$ = 0; - } - free((char *) $1); - } else - $$ = $1; - } - ; - -pathstring: STRING - ; - -octal_number: NUMBER - = { - register int ret, dec, multby, digit; - - /* - * Convert a number that was read as decimal number - * to what it would be if it had been read as octal. - */ - dec = $1; - multby = 1; - ret = 0; - while (dec) { - digit = dec%10; - if (digit > 7) { - ret = -1; - break; - } - ret += digit * multby; - multby *= 8; - dec /= 10; - } - $$ = ret; - } - ; - -check_login: /* empty */ - = { - if (logged_in) - $$ = 1; - else { - reply(530, "Please login with USER and PASS."); - $$ = 0; - } - } - ; - -%% - -extern jmp_buf errcatch; - -#define CMD 0 /* beginning of command */ -#define ARGS 1 /* expect miscellaneous arguments */ -#define STR1 2 /* expect SP followed by STRING */ -#define STR2 3 /* expect STRING */ -#define OSTR 4 /* optional SP then STRING */ -#define ZSTR1 5 /* SP then optional STRING */ -#define ZSTR2 6 /* optional STRING after SP */ -#define SITECMD 7 /* SITE command */ -#define NSTR 8 /* Number followed by a string */ - -struct tab cmdtab[] = { /* In order defined in RFC 765 */ - { "USER", USER, STR1, 1, "<sp> username" }, - { "PASS", PASS, ZSTR1, 1, "<sp> password" }, - { "ACCT", ACCT, STR1, 0, "(specify account)" }, - { "SMNT", SMNT, ARGS, 0, "(structure mount)" }, - { "REIN", REIN, ARGS, 0, "(reinitialize server state)" }, - { "QUIT", QUIT, ARGS, 1, "(terminate service)", }, - { "PORT", PORT, ARGS, 1, "<sp> b0, b1, b2, b3, b4" }, - { "PASV", PASV, ARGS, 1, "(set server in passive mode)" }, - { "TYPE", TYPE, ARGS, 1, "<sp> [ A | E | I | L ]" }, - { "STRU", STRU, ARGS, 1, "(specify file structure)" }, - { "MODE", MODE, ARGS, 1, "(specify transfer mode)" }, - { "RETR", RETR, STR1, 1, "<sp> file-name" }, - { "STOR", STOR, STR1, 1, "<sp> file-name" }, - { "APPE", APPE, STR1, 1, "<sp> file-name" }, - { "MLFL", MLFL, OSTR, 0, "(mail file)" }, - { "MAIL", MAIL, OSTR, 0, "(mail to user)" }, - { "MSND", MSND, OSTR, 0, "(mail send to terminal)" }, - { "MSOM", MSOM, OSTR, 0, "(mail send to terminal or mailbox)" }, - { "MSAM", MSAM, OSTR, 0, "(mail send to terminal and mailbox)" }, - { "MRSQ", MRSQ, OSTR, 0, "(mail recipient scheme question)" }, - { "MRCP", MRCP, STR1, 0, "(mail recipient)" }, - { "ALLO", ALLO, ARGS, 1, "allocate storage (vacuously)" }, - { "REST", REST, ARGS, 1, "(restart command)" }, - { "RNFR", RNFR, STR1, 1, "<sp> file-name" }, - { "RNTO", RNTO, STR1, 1, "<sp> file-name" }, - { "ABOR", ABOR, ARGS, 1, "(abort operation)" }, - { "DELE", DELE, STR1, 1, "<sp> file-name" }, - { "CWD", CWD, OSTR, 1, "[ <sp> directory-name ]" }, - { "XCWD", CWD, OSTR, 1, "[ <sp> directory-name ]" }, - { "LIST", LIST, OSTR, 1, "[ <sp> path-name ]" }, - { "NLST", NLST, OSTR, 1, "[ <sp> path-name ]" }, - { "SITE", SITE, SITECMD, 1, "site-cmd [ <sp> arguments ]" }, - { "SYST", SYST, ARGS, 1, "(get type of operating system)" }, - { "STAT", STAT, OSTR, 1, "[ <sp> path-name ]" }, - { "HELP", HELP, OSTR, 1, "[ <sp> <string> ]" }, - { "NOOP", NOOP, ARGS, 1, "" }, - { "MKD", MKD, STR1, 1, "<sp> path-name" }, - { "XMKD", MKD, STR1, 1, "<sp> path-name" }, - { "RMD", RMD, STR1, 1, "<sp> path-name" }, - { "XRMD", RMD, STR1, 1, "<sp> path-name" }, - { "PWD", PWD, ARGS, 1, "(return current directory)" }, - { "XPWD", PWD, ARGS, 1, "(return current directory)" }, - { "CDUP", CDUP, ARGS, 1, "(change to parent directory)" }, - { "XCUP", CDUP, ARGS, 1, "(change to parent directory)" }, - { "STOU", STOU, STR1, 1, "<sp> file-name" }, - { "SIZE", SIZE, OSTR, 1, "<sp> path-name" }, - { "MDTM", MDTM, OSTR, 1, "<sp> path-name" }, - { NULL, 0, 0, 0, 0 } -}; - -struct tab sitetab[] = { - { "UMASK", UMASK, ARGS, 1, "[ <sp> umask ]" }, - { "IDLE", IDLE, ARGS, 1, "[ <sp> maximum-idle-time ]" }, - { "CHMOD", CHMOD, NSTR, 1, "<sp> mode <sp> file-name" }, - { "HELP", HELP, OSTR, 1, "[ <sp> <string> ]" }, - { NULL, 0, 0, 0, 0 } -}; - -struct tab *lookup FUNCTION((p, cmd), register struct tab *p AND char *cmd) -{ - - for (; p->name != NULL; p++) - if (strcmp(cmd, p->name) == 0) - return (p); - return (0); -} - -#include <arpa/telnet.h> - -/* - * getline - a hacked up version of fgets to ignore TELNET escape codes. - */ -char *getline FUNCTION((s, n, iop), char *s AND int n AND FILE *iop) -{ - register c; - register char *cs; - - cs = s; -/* tmpline may contain saved command from urgent mode interruption */ - for (c = 0; *(tmpline + c) && --n > 0; ++c) { - *cs++ = *(tmpline + c); - if (*(tmpline + c) == '\n') { - *cs++ = '\0'; - if (debug) - syslog(LOG_DEBUG, "command: %s", s); - *tmpline = '\0'; - return(s); - } - if (c == 0) - *tmpline = '\0'; - } - while ((c = getc(iop)) != EOF) { - c &= 0377; - if (c == IAC) { - if ((c = getc(iop)) != EOF) { - c &= 0377; - switch (c) { - case WILL: - case WONT: - c = getc(iop); - printf("%c%c%c", IAC, DONT, 0377&c); - (void) fflush(stdout); - continue; - case DO: - case DONT: - c = getc(iop); - printf("%c%c%c", IAC, WONT, 0377&c); - (void) fflush(stdout); - continue; - case IAC: - break; - default: - continue; /* ignore command */ - } - } - } - *cs++ = c; - if (--n <= 0 || c == '\n') - break; - } - if (c == EOF && cs == s) - return (NULL); - *cs++ = '\0'; - if (debug) - syslog(LOG_DEBUG, "command: %s", s); - return (s); -} - -static VOIDRET toolong FUNCTION((input), int input) -{ - time_t now; - - reply(421, "Timeout (%d seconds): closing control connection.", timeout); - (void) time(&now); - syslog(LOG_INFO, "User %s timed out after %d seconds at %s", - (pw ? pw -> pw_name : "unknown"), timeout, ctime(&now)); - dologout(1); -} - -int yylex FUNCTION_NOARGS -{ - static int cpos, state; - register char *cp, *cp2; - register struct tab *p; - int n; - char c, *copy(); - - for (;;) { - switch (state) { - - case CMD: - (void) signal(SIGALRM, toolong); - (void) alarm((unsigned) timeout); - if (getline(cbuf, sizeof(cbuf)-1, stdin) == NULL) { - reply(221, "You could at least say goodbye."); - dologout(0); - } - (void) alarm(0); -#if DOTITLE - if (strncasecmp(cbuf, "PASS", 4) != NULL) - setproctitle("%s: %s", proctitle, cbuf); -#endif /* DOTITLE */ - if ((cp = strchr(cbuf, '\r'))) { - *cp++ = '\n'; - *cp = '\0'; - } - if ((cp = strpbrk(cbuf, " \n"))) - cpos = cp - cbuf; - if (cpos == 0) - cpos = 4; - c = cbuf[cpos]; - cbuf[cpos] = '\0'; - upper(cbuf); - p = lookup(cmdtab, cbuf); - cbuf[cpos] = c; - if (p != 0) { - if (p->implemented == 0) { - nack(p->name); - longjmp(errcatch,0); - /* NOTREACHED */ - } - state = p->state; - *(char **)&yylval = p->name; - return (p->token); - } - break; - - case SITECMD: - if (cbuf[cpos] == ' ') { - cpos++; - return (SP); - } - cp = &cbuf[cpos]; - if ((cp2 = strpbrk(cp, " \n"))) - cpos = cp2 - cbuf; - c = cbuf[cpos]; - cbuf[cpos] = '\0'; - upper(cp); - p = lookup(sitetab, cp); - cbuf[cpos] = c; - if (p != 0) { - if (p->implemented == 0) { - state = CMD; - nack(p->name); - longjmp(errcatch,0); - /* NOTREACHED */ - } - state = p->state; - *(char **)&yylval = p->name; - return (p->token); - } - state = CMD; - break; - - case OSTR: - if (cbuf[cpos] == '\n') { - state = CMD; - return (CRLF); - } - /* FALLTHROUGH */ - - case STR1: - case ZSTR1: - dostr1: - if (cbuf[cpos] == ' ') { - cpos++; - state = state == OSTR ? STR2 : ++state; - return (SP); - } - break; - - case ZSTR2: - if (cbuf[cpos] == '\n') { - state = CMD; - return (CRLF); - } - /* FALLTHROUGH */ - - case STR2: - cp = &cbuf[cpos]; - n = strlen(cp); - cpos += n - 1; - /* - * Make sure the string is nonempty and \n terminated. - */ - if (n > 1 && cbuf[cpos] == '\n') { - cbuf[cpos] = '\0'; - *(char **)&yylval = copy(cp); - cbuf[cpos] = '\n'; - state = ARGS; - return (STRING); - } - break; - - case NSTR: - if (cbuf[cpos] == ' ') { - cpos++; - return (SP); - } - if (isdigit(cbuf[cpos])) { - cp = &cbuf[cpos]; - while (isdigit(cbuf[++cpos])) - ; - c = cbuf[cpos]; - cbuf[cpos] = '\0'; - yylval = atoi(cp); - cbuf[cpos] = c; - state = STR1; - return (NUMBER); - } - state = STR1; - goto dostr1; - - case ARGS: - if (isdigit(cbuf[cpos])) { - cp = &cbuf[cpos]; - while (isdigit(cbuf[++cpos])) - ; - c = cbuf[cpos]; - cbuf[cpos] = '\0'; - yylval = atoi(cp); - cbuf[cpos] = c; - return (NUMBER); - } - switch (cbuf[cpos++]) { - - case '\n': - state = CMD; - return (CRLF); - - case ' ': - return (SP); - - case ',': - return (COMMA); - - case 'A': - case 'a': - return (A); - - case 'B': - case 'b': - return (B); - - case 'C': - case 'c': - return (C); - - case 'E': - case 'e': - return (E); - - case 'F': - case 'f': - return (F); - - case 'I': - case 'i': - return (I); - - case 'L': - case 'l': - return (L); - - case 'N': - case 'n': - return (N); - - case 'P': - case 'p': - return (P); - - case 'R': - case 'r': - return (R); - - case 'S': - case 's': - return (S); - - case 'T': - case 't': - return (T); - - } - break; - - default: - opiefatal("Unknown state in scanner."); - } - yyerror((char *) 0); - state = CMD; - longjmp(errcatch,0); - } -} - -VOIDRET upper FUNCTION((s), char *s) -{ - while (*s != '\0') { - if (islower(*s)) - *s = toupper(*s); - s++; - } -} - -char *copy FUNCTION((s), char *s) -{ - char *p; - - p = malloc((unsigned) strlen(s) + 1); - if (p == NULL) - opiefatal("Ran out of memory."); - (void) strcpy(p, s); - return (p); -} - -VOIDRET help FUNCTION((ctab, s), struct tab *ctab AND char *s) -{ - register struct tab *c; - register int width, NCMDS; - char *type; - - if (ctab == sitetab) - type = "SITE "; - else - type = ""; - width = 0, NCMDS = 0; - for (c = ctab; c->name != NULL; c++) { - int len = strlen(c->name); - - if (len > width) - width = len; - NCMDS++; - } - width = (width + 8) &~ 7; - if (s == 0) { - register int i, j, w; - int columns, lines; - - lreply(214, "The following %scommands are recognized %s.", - type, "(* =>'s unimplemented)"); - columns = 76 / width; - if (columns == 0) - columns = 1; - lines = (NCMDS + columns - 1) / columns; - for (i = 0; i < lines; i++) { - printf(" "); - for (j = 0; j < columns; j++) { - c = ctab + j * lines + i; - printf("%s%c", c->name, - c->implemented ? ' ' : '*'); - if (c + lines >= &ctab[NCMDS]) - break; - w = strlen(c->name) + 1; - while (w < width) { - putchar(' '); - w++; - } - } - printf("\r\n"); - } - (void) fflush(stdout); - reply(214, " "); - return; - } - upper(s); - c = lookup(ctab, s); - if (c == (struct tab *)0) { - reply(502, "Unknown command %s.", s); - return; - } - if (c->implemented) - reply(214, "Syntax: %s%s %s", type, c->name, c->help); - else - reply(214, "%s%-*s\t%s; unimplemented.", type, width, - c->name, c->help); -} - -VOIDRET sizecmd FUNCTION((filename), char *filename) -{ - switch (type) { - case TYPE_L: - case TYPE_I: { - struct stat stbuf; - if (stat(filename, &stbuf) < 0 || - (stbuf.st_mode&S_IFMT) != S_IFREG) - reply(550, "%s: not a plain file.", filename); - else - reply(213, "%lu", stbuf.st_size); - break;} - case TYPE_A: { - FILE *fin; - register int c; - register long count; - struct stat stbuf; - fin = fopen(filename, "r"); - if (fin == NULL) { - perror_reply(550, filename); - return; - } - if (fstat(fileno(fin), &stbuf) < 0 || - (stbuf.st_mode&S_IFMT) != S_IFREG) { - reply(550, "%s: not a plain file.", filename); - (void) fclose(fin); - return; - } - - count = 0; - while((c=getc(fin)) != EOF) { - if (c == '\n') /* will get expanded to \r\n */ - count++; - count++; - } - (void) fclose(fin); - - reply(213, "%ld", count); - break;} - default: - reply(504, "SIZE not implemented for Type %c.", "?AEIL"[type]); - } -} diff --git a/contrib/opie/glob.c b/contrib/opie/glob.c deleted file mode 100644 index c1bd65801079..000000000000 --- a/contrib/opie/glob.c +++ /dev/null @@ -1,668 +0,0 @@ -/* glob.c: The csh et al glob pattern matching routines. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.32. Remove include of dirent.h here; it's - done already (and conditionally) in opie_cfg.h. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Remove useless strings. Prototype right. - Modified at NRL for OPIE 2.0. - Originally from BSD. -*/ -/* - * Copyright (c) 1980 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * C-shell glob for random programs. - */ - -#include "opie_cfg.h" - -#if HAVE_SYS_PARAM_H -#include <sys/param.h> -#endif /* HAVE_SYS_PARAM_H */ -#include <sys/stat.h> - -#if HAVE_PWD_H -#include <pwd.h> -#endif /* HAVE_PWD_H */ -#include <errno.h> -#include <stdio.h> -#include <string.h> -#if HAVE_LIMITS_H -#include <limits.h> -#endif /* HAVE_LIMITS_H */ - -#include "opie.h" - -#ifndef NCARGS -#define NCARGS 600 -#endif /* NCARGS */ -#define QUOTE 0200 -#define TRIM 0177 -#define eq(a,b) (strcmp((a),(b)) == (0)) -#define GAVSIZ (NCARGS/6) -#define isdir(d) (((d.st_mode) & S_IFMT) == S_IFDIR) - -static char **gargv; /* Pointer to the (stack) arglist */ -static int gargc; /* Number args in gargv */ -static int gnleft; -static short gflag; - -static int letter __P((register char)); -static int digit __P((register char)); -static int any __P((int, char *)); -static int blklen __P((register char **)); -VOIDRET blkfree __P((char **)); -static char *strspl __P((register char *, register char *)); - -static int tglob __P((register char c)); - -extern int errno; -static char *strend __P((char *)); - -static int globcnt; - -static char *globchars = "`{[*?"; -char *globerr = NULL; -char *home = NULL; - -static char *gpath, *gpathp, *lastgpathp; -static int globbed; -static char *entp; -static char **sortbas; - -static int amatch __P((char *p, char *s)); -static int execbrc __P((register char *p, register char *s)); -VOIDRET opiefatal __P((char *)); -char **copyblk __P((char **)); - -static int match FUNCTION((s, p), char *s AND char *p) -{ - register int c; - register char *sentp; - char sglobbed = globbed; - - if (*s == '.' && *p != '.') - return (0); - sentp = entp; - entp = s; - c = amatch(s, p); - entp = sentp; - globbed = sglobbed; - return (c); -} - - -static int Gmatch FUNCTION((s, p), register char *s AND register char *p) -{ - register int scc; - int ok, lc; - int c, cc; - - for (;;) { - scc = *s++ & TRIM; - switch (c = *p++) { - - case '[': - ok = 0; - lc = 077777; - while (cc = *p++) { - if (cc == ']') { - if (ok) - break; - return (0); - } - if (cc == '-') { - if (lc <= scc && scc <= *p++) - ok++; - } else - if (scc == (lc = cc)) - ok++; - } - if (cc == 0) - if (ok) - p--; - else - return 0; - continue; - - case '*': - if (!*p) - return (1); - for (s--; *s; s++) - if (Gmatch(s, p)) - return (1); - return (0); - - case 0: - return (scc == 0); - - default: - if ((c & TRIM) != scc) - return (0); - continue; - - case '?': - if (scc == 0) - return (0); - continue; - - } - } -} - -static VOIDRET Gcat FUNCTION((s1, s2), register char *s1 AND register char *s2) -{ - register int len = strlen(s1) + strlen(s2) + 1; - - if (len >= gnleft || gargc >= GAVSIZ - 1) - globerr = "Arguments too long"; - else { - gargc++; - gnleft -= len; - gargv[gargc] = 0; - gargv[gargc - 1] = strspl(s1, s2); - } -} - -static VOIDRET addpath FUNCTION((c), char c) -{ - - if (gpathp >= lastgpathp) - globerr = "Pathname too long"; - else { - *gpathp++ = c; - *gpathp = 0; - } -} - -static VOIDRET rscan FUNCTION((t, f), register char **t AND int (*f)__P((char))) -{ - register char *p, c; - - while (p = *t++) { - if (f == tglob) - if (*p == '~') - gflag |= 2; - else - if (eq(p, "{") || eq(p, "{}")) - continue; - while (c = *p++) - (*f) (c); - } -} - -static int tglob FUNCTION((c), register char c) -{ - if (any(c, globchars)) - gflag |= c == '{' ? 2 : 1; - return (c); -} - -static int letter FUNCTION((c), register char c) -{ - return (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c == '_'); -} - -static int digit FUNCTION((c), register char c) -{ - return (c >= '0' && c <= '9'); -} - -static int any FUNCTION((c, s), int c AND char *s) -{ - while (*s) - if (*s++ == c) - return (1); - return (0); -} - -static int blklen FUNCTION((av), register char **av) -{ - register int i = 0; - - while (*av++) - i++; - return (i); -} - -static char **blkcpy FUNCTION((oav, bv), char **oav AND register char **bv) -{ - register char **av = oav; - - while (*av++ = *bv++) - continue; - return (oav); -} - -VOIDRET blkfree FUNCTION((av0), char **av0) -{ - register char **av = av0; - - while (*av) - free(*av++); -} - -static char *strspl FUNCTION((cp, dp), register char *cp AND register char *dp) -{ - register char *ep = (char *) malloc((unsigned) (strlen(cp) + - strlen(dp) + 1)); - - if (ep == (char *) 0) - opiefatal("Out of memory"); - strcpy(ep, cp); - strcat(ep, dp); - return (ep); -} - -char **copyblk FUNCTION((v), char **v) -{ - register char **nv = (char **) malloc((unsigned) ((blklen(v) + 1) * - sizeof(char **))); - - if (nv == (char **) 0) - opiefatal("Out of memory"); - - return (blkcpy(nv, v)); -} - -static char *strend FUNCTION((cp), register char *cp) -{ - - while (*cp) - cp++; - return (cp); -} - -/* - * Extract a home directory from the password file - * The argument points to a buffer where the name of the - * user whose home directory is sought is currently. - * We write the home directory of the user back there. - */ -static int gethdir FUNCTION((home), char *home) -{ - register struct passwd *pp = getpwnam(home); - - if (!pp || home + strlen(pp->pw_dir) >= lastgpathp) - return (1); - strcpy(home, pp->pw_dir); - return (0); -} - -static VOIDRET ginit FUNCTION((agargv), char **agargv) -{ - agargv[0] = 0; - gargv = agargv; - sortbas = agargv; - gargc = 0; - gnleft = NCARGS - 4; -} - -static VOIDRET sort FUNCTION_NOARGS -{ - register char **p1, **p2, *c; - char **Gvp = &gargv[gargc]; - - p1 = sortbas; - while (p1 < Gvp - 1) { - p2 = p1; - while (++p2 < Gvp) - if (strcmp(*p1, *p2) > 0) - c = *p1, *p1 = *p2, *p2 = c; - p1++; - } - sortbas = Gvp; -} - -static VOIDRET matchdir FUNCTION((pattern), char *pattern) -{ - struct stat stb; - - register struct dirent *dp; - - DIR *dirp; - - dirp = opendir(*gpath == '\0' ? "." : gpath); - if (dirp == NULL) { - if (globbed) - return; - goto patherr2; - } -#if !defined(linux) - if (fstat(dirp->dd_fd, &stb) < 0) - goto patherr1; - if (!isdir(stb)) { - errno = ENOTDIR; - goto patherr1; - } -#endif /* !defined(linux) */ - while ((dp = readdir(dirp)) != NULL) { - if (dp->d_ino == 0) - continue; - if (match(dp->d_name, pattern)) { - Gcat(gpath, dp->d_name); - globcnt++; - } - } - closedir(dirp); - return; - -patherr1: - closedir(dirp); -patherr2: - globerr = "Bad directory components"; -} - -static VOIDRET expand FUNCTION((as), char *as) -{ - register char *cs; - register char *sgpathp, *oldcs; - struct stat stb; - - sgpathp = gpathp; - cs = as; - if (*cs == '~' && gpathp == gpath) { - addpath('~'); - for (cs++; letter(*cs) || digit(*cs) || *cs == '-';) - addpath(*cs++); - if (!*cs || *cs == '/') { - if (gpathp != gpath + 1) { - *gpathp = 0; - if (gethdir(gpath + 1)) - globerr = "Unknown user name after ~"; - strcpy(gpath, gpath + 1); - } else - strcpy(gpath, home); - gpathp = strend(gpath); - } - } - while (!any(*cs, globchars)) { - if (*cs == 0) { - if (!globbed) - Gcat(gpath, ""); - else - if (stat(gpath, &stb) >= 0) { - Gcat(gpath, ""); - globcnt++; - } - goto endit; - } - addpath(*cs++); - } - oldcs = cs; - while (cs > as && *cs != '/') - cs--, gpathp--; - if (*cs == '/') - cs++, gpathp++; - *gpathp = 0; - if (*oldcs == '{') { - execbrc(cs, ((char *) 0)); - return; - } - matchdir(cs); -endit: - gpathp = sgpathp; - *gpathp = 0; -} - -static int execbrc FUNCTION((p, s), char *p AND char *s) -{ - char restbuf[BUFSIZ + 2]; - register char *pe, *pm, *pl; - int brclev = 0; - char *lm, savec, *sgpathp; - - for (lm = restbuf; *p != '{'; *lm++ = *p++) - continue; - for (pe = ++p; *pe; pe++) - switch (*pe) { - - case '{': - brclev++; - continue; - - case '}': - if (brclev == 0) - goto pend; - brclev--; - continue; - - case '[': - for (pe++; *pe && *pe != ']'; pe++) - continue; - continue; - } -pend: - brclev = 0; - for (pl = pm = p; pm <= pe; pm++) - switch (*pm & (QUOTE | TRIM)) { - - case '{': - brclev++; - continue; - - case '}': - if (brclev) { - brclev--; - continue; - } - goto doit; - - case ',' | QUOTE: - case ',': - if (brclev) - continue; - doit: - savec = *pm; - *pm = 0; - strcpy(lm, pl); - strcat(restbuf, pe + 1); - *pm = savec; - if (s == 0) { - sgpathp = gpathp; - expand(restbuf); - gpathp = sgpathp; - *gpathp = 0; - } else - if (amatch(s, restbuf)) - return (1); - sort(); - pl = pm + 1; - if (brclev) - return (0); - continue; - - case '[': - for (pm++; *pm && *pm != ']'; pm++) - continue; - if (!*pm) - pm--; - continue; - } - if (brclev) - goto doit; - return (0); -} - -static VOIDRET acollect FUNCTION((as), register char *as) -{ - register int ogargc = gargc; - - gpathp = gpath; - *gpathp = 0; - globbed = 0; - expand(as); - if (gargc != ogargc) - sort(); -} - -static VOIDRET collect FUNCTION((as), register char *as) -{ - if (eq(as, "{") || eq(as, "{}")) { - Gcat(as, ""); - sort(); - } else - acollect(as); -} - -static int amatch FUNCTION((s, p), register char *s AND register char *p) -{ - register int scc; - int ok, lc; - char *sgpathp; - struct stat stb; - int c, cc; - - globbed = 1; - for (;;) { - scc = *s++ & TRIM; - switch (c = *p++) { - - case '{': - return (execbrc(p - 1, s - 1)); - - case '[': - ok = 0; - lc = 077777; - while (cc = *p++) { - if (cc == ']') { - if (ok) - break; - return (0); - } - if (cc == '-') { - if (lc <= scc && scc <= *p++) - ok++; - } else - if (scc == (lc = cc)) - ok++; - } - if (cc == 0) - if (ok) - p--; - else - return 0; - continue; - - case '*': - if (!*p) - return (1); - if (*p == '/') { - p++; - goto slash; - } - s--; - do { - if (amatch(s, p)) - return (1); - } - while (*s++); - return (0); - - case 0: - return (scc == 0); - - default: - if (c != scc) - return (0); - continue; - - case '?': - if (scc == 0) - return (0); - continue; - - case '/': - if (scc) - return (0); - slash: - s = entp; - sgpathp = gpathp; - while (*s) - addpath(*s++); - addpath('/'); - if (stat(gpath, &stb) == 0 && isdir(stb)) - if (*p == 0) { - Gcat(gpath, ""); - globcnt++; - } else - expand(p); - gpathp = sgpathp; - *gpathp = 0; - return (0); - } - } -} - - -char **ftpglob FUNCTION((v), register char *v) -{ - char agpath[BUFSIZ]; - char *agargv[GAVSIZ]; - char *vv[2]; - - vv[0] = v; - vv[1] = 0; - gflag = 0; - rscan(vv, tglob); - if (gflag == 0) { - vv[0] = strspl(v, ""); - return (copyblk(vv)); - } - globerr = 0; - gpath = agpath; - gpathp = gpath; - *gpathp = 0; - lastgpathp = &gpath[sizeof agpath - 2]; - ginit(agargv); - globcnt = 0; - collect(v); - if (globcnt == 0 && (gflag & 1)) { - blkfree(gargv), gargv = 0; - return (0); - } else - return (gargv = copyblk(gargv)); -} diff --git a/contrib/opie/install-sh b/contrib/opie/install-sh deleted file mode 100644 index 89fc9b098b8c..000000000000 --- a/contrib/opie/install-sh +++ /dev/null @@ -1,238 +0,0 @@ -#! /bin/sh -# -# install - install a program, script, or datafile -# This comes from X11R5. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. -# - - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -tranformbasename="" -transform_arg="" -instcmd="$mvprog" -chmodcmd="$chmodprog 0755" -chowncmd="" -chgrpcmd="" -stripcmd="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" -dir_arg="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - -t=*) transformarg=`echo $1 | sed 's/-t=//'` - shift - continue;; - - -b=*) transformbasename=`echo $1 | sed 's/-b=//'` - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - # this colon is to work around a 386BSD /bin/sh bug - : - dst=$1 - fi - shift - continue;; - esac -done - -if [ x"$src" = x ] -then - echo "install: no input file specified" - exit 1 -else - true -fi - -if [ x"$dir_arg" != x ]; then - dst=$src - src="" - - if [ -d $dst ]; then - instcmd=: - else - instcmd=mkdir - fi -else - -# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad -# if $src (and thus $dsttmp) contains '*'. - - if [ -f $src -o -d $src ] - then - true - else - echo "install: $src does not exist" - exit 1 - fi - - if [ x"$dst" = x ] - then - echo "install: no destination specified" - exit 1 - else - true - fi - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - - if [ -d $dst ] - then - dst="$dst"/`basename $src` - else - true - fi -fi - -## this sed command emulates the dirname command -dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` - -# Make sure that the destination directory exists. -# this part is taken from Noah Friedman's mkinstalldirs script - -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS=' -' -IFS="${IFS-${defaultIFS}}" - -oIFS="${IFS}" -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS="${oIFS}" - -pathcomp='' - -while [ $# -ne 0 ] ; do - pathcomp="${pathcomp}${1}" - shift - - if [ ! -d "${pathcomp}" ] ; - then - $mkdirprog "${pathcomp}" - else - true - fi - - pathcomp="${pathcomp}/" -done -fi - -if [ x"$dir_arg" != x ] -then - $doit $instcmd $dst && - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi -else - -# If we're going to rename the final executable, determine the name now. - - if [ x"$transformarg" = x ] - then - dstfile=`basename $dst` - else - dstfile=`basename $dst $transformbasename | - sed $transformarg`$transformbasename - fi - -# don't allow the sed command to completely eliminate the filename - - if [ x"$dstfile" = x ] - then - dstfile=`basename $dst` - else - true - fi - -# Make a temp file name in the proper directory. - - dsttmp=$dstdir/#inst.$$# - -# Move or copy the file name to the temp name - - $doit $instcmd $src $dsttmp && - - trap "rm -f ${dsttmp}" 0 && - -# and set any options; do chmod last to preserve setuid bits - -# If any of these fail, we abort the whole thing. If we want to -# ignore errors from any of these, just make sure not to ignore -# errors from the above "$doit $instcmd $src $dsttmp" command. - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && - -# Now rename the file to the real destination. - - $doit $rmcmd -f $dstdir/$dstfile && - $doit $mvcmd $dsttmp $dstdir/$dstfile - -fi && - - -exit 0 diff --git a/contrib/opie/libmissing/Makefile.in b/contrib/opie/libmissing/Makefile.in deleted file mode 100644 index fb3d5b24514f..000000000000 --- a/contrib/opie/libmissing/Makefile.in +++ /dev/null @@ -1,34 +0,0 @@ -## -# Makefile.in/Makefile: Directions for building libmissing. -# -# %%% copyright-cmetz-96 -# This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -# The Inner Net License Version 3 applies to this software. -# You should have received a copy of the license with this software. If -# you didn't get a copy, you may request one from <license@inner.net>. -# -# History: -# -# Modified by cmetz for OPIE 2.4. Add current dir to include header path. -# Use ar 'cr' instead of 'r'. Renamed realclean to distclean. -# Created by cmetz for OPIE 2.3 using old Makefiles as a guide. - -OBJS=bogus.o @MISSING@ - -CC=@CC@ -CFLAGS=$(CFL) -I.. -I. -TARGET=libmissing.a - -all: $(TARGET) - -$(TARGET): $(OBJS) - @AR@ @ARFLAGS@ $(TARGET) $(OBJS) - @RANLIB@ $(TARGET) - -clean: - -rm -f $(OBJS) $(TARGET) - -realclean: distclean - -distclean: clean - -rm -f *~ core* "\#*\#" *.o *.a Makefile diff --git a/contrib/opie/libmissing/bogus.c b/contrib/opie/libmissing/bogus.c deleted file mode 100644 index 68dcc54dec4e..000000000000 --- a/contrib/opie/libmissing/bogus.c +++ /dev/null @@ -1 +0,0 @@ -int _bogus; diff --git a/contrib/opie/libmissing/endutent.c b/contrib/opie/libmissing/endutent.c deleted file mode 100644 index e0355b7e28f8..000000000000 --- a/contrib/opie/libmissing/endutent.c +++ /dev/null @@ -1,19 +0,0 @@ -/* endutent.c: A replacement for the endutent function - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.31. Use VOIDRET macro. - Created by cmetz for OPIE 2.3. -*/ -#include "opie_cfg.h" -#include "opie.h" - -VOIDRET endutent FUNCTION_NOARGS -{ -} diff --git a/contrib/opie/libmissing/getutline.c b/contrib/opie/libmissing/getutline.c deleted file mode 100644 index 929d024c6b6c..000000000000 --- a/contrib/opie/libmissing/getutline.c +++ /dev/null @@ -1,63 +0,0 @@ -/* getutline.c: A replacement for the getutline() function - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.32. Fixed check for fread() return - value. - Modified by cmetz for OPIE 2.31. If the OS won't tell us where - _PATH_UTMP is, play the SVID game, then use - Autoconf-discovered values. - Created by cmetz for OPIE 2.3. -*/ - -#include "opie_cfg.h" -#include <stdio.h> -#include <utmp.h> -#include "opie.h" - -static struct utmp u; - -#ifndef _PATH_UTMP -#ifdef UTMP_FILE -#define _PATH_UTMP UTMP_FILE -#else /* UTMP_FILE */ -#define _PATH_UTMP PATH_UTMP_AC -#endif /* UTMP_FILE */ -#endif /* _PATH_UTMP */ - -struct utmp *getutline FUNCTION((utmp), struct utmp *utmp) -{ - FILE *f; - int i; - - if (!(f = __opieopen(_PATH_UTMP, 0, 0644))) - return 0; - -#if HAVE_TTYSLOT - if (i = ttyslot()) { - if (fseek(f, i * sizeof(struct utmp), SEEK_SET) < 0) - goto ret; - if (fread(&u, sizeof(struct utmp), 1, f) != 1) - goto ret; - fclose(f); - return &u; - } -#endif /* HAVE_TTYSLOT */ - - while(fread(&u, sizeof(struct utmp), 1, f) == 1) { - if (!strncmp(utmp->ut_line, u.ut_line, sizeof(u.ut_line) - 1)) { - fclose(f); - return &u; - } - } - -ret: - fclose(f); - return NULL; -} diff --git a/contrib/opie/libmissing/pututline.c b/contrib/opie/libmissing/pututline.c deleted file mode 100644 index 718ecbaadde9..000000000000 --- a/contrib/opie/libmissing/pututline.c +++ /dev/null @@ -1,64 +0,0 @@ -/* pututline.c: A replacement for the pututline() function - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.32. Fixed check for fread() return - value. - Modified by cmetz for OPIE 2.31. If the OS won't tell us where - _PATH_UTMP is, use Autoconf-discovered values. - Created by cmetz for OPIE 2.3. -*/ - -#include "opie_cfg.h" -#include <stdio.h> -#include <utmp.h> -#include "opie.h" - -#ifndef _PATH_UTMP -#define _PATH_UTMP PATH_UTMP_AC -#endif /* _PATH_UTMP */ - -void pututline FUNCTION((utmp), struct utmp *utmp) -{ - FILE *f; - struct utmp u; - int i; - - if (!(f = __opieopen(_PATH_UTMP, 1, 0644))) - return; - -#if HAVE_TTYSLOT - if (i = ttyslot()) { - if (fseek(f, i * sizeof(struct utmp), SEEK_SET) < 0) - goto ret; - fwrite(utmp, sizeof(struct utmp), 1, f); - goto ret; - } -#endif /* HAVE_TTYSLOT */ - - while(fread(&u, sizeof(struct utmp), 1, f) == 1) { - if (!strncmp(utmp->ut_line, u.ut_line, sizeof(u.ut_line) - 1)) { - if ((i = ftell(f)) < 0) - goto ret; - if (fseek(f, i - sizeof(struct utmp), SEEK_SET) < 0) - goto ret; - fwrite(utmp, sizeof(struct utmp), 1, f); - goto ret; - } - } - - fclose(f); - - if (!(f = __opieopen(_PATH_UTMP, 2, 0644))) - return; - fwrite(utmp, sizeof(struct utmp), 1, f); - -ret: - fclose(f); -} diff --git a/contrib/opie/libmissing/setutent.c b/contrib/opie/libmissing/setutent.c deleted file mode 100644 index 865fcd16df59..000000000000 --- a/contrib/opie/libmissing/setutent.c +++ /dev/null @@ -1,18 +0,0 @@ -/* setutent.c: A replacement for the setutent function - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Created by cmetz for OPIE 2.31. -*/ -#include "opie_cfg.h" -#include "opie.h" - -VOIDRET setutent FUNCTION_NOARGS -{ -} diff --git a/contrib/opie/libopie/Makefile.in b/contrib/opie/libopie/Makefile.in deleted file mode 100644 index d35af200b7c3..000000000000 --- a/contrib/opie/libopie/Makefile.in +++ /dev/null @@ -1,35 +0,0 @@ -## -# Makefile.in/Makefile: Directions for building libopie. -# -# %%% copyright-cmetz-96 -# This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -# The Inner Net License Version 3 applies to this software. -# You should have received a copy of the license with this software. If -# you didn't get a copy, you may request one from <license@inner.net>. -# -# History: -# -# Modified by cmetz for OPIE 2.4. Add libmissing to include header path. -# Use ar 'cr' instead of 'r'. Renamed realclean to distclean. -# Modified by cmetz for OPIE 2.31. Added logwtmp.o -# Created by cmetz for OPIE 2.3 using old Makefiles as a guide. - -OBJS=md4c.o md5c.o atob8.o btoa8.o btoh.o challenge.o getsequence.o hash.o hashlen.o keycrunch.o lock.o lookup.o newseed.o parsechallenge.o passcheck.o passwd.o randomchallenge.o readpass.o unlock.o verify.o version.o btoe.o accessfile.o generator.o insecure.o getutmpentry.o readrec.o writerec.o login.o open.o logwtmp.o # sha.o - -CC=@CC@ -CFLAGS=$(CFL) -I.. -I../libmissing -TARGET=libopie.a - -all: $(TARGET) - -$(TARGET): $(OBJS) - @AR@ @ARFLAGS@ $(TARGET) $(OBJS) - @RANLIB@ $(TARGET) - -clean: - -rm -f $(OBJS) $(TARGET) - -realclean: distclean - -distclean: clean - -rm -f *~ core* "\#*\#" *.o *.a Makefile diff --git a/contrib/opie/libopie/accessfile.c b/contrib/opie/libopie/accessfile.c deleted file mode 100644 index 154ec1e80883..000000000000 --- a/contrib/opie/libopie/accessfile.c +++ /dev/null @@ -1,171 +0,0 @@ -/* accessfile.c: Handle trusted network access file and per-user - overrides. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.31. Include syslog.h on debug. - Modified by cmetz for OPIE 2.3. Send debug info to syslog. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Ifdef around some headers. Remove extra semicolon. - Modified at NRL for OPIE 2.2. Moved from accessfile.c to - libopie/opieaccessfile.c. - Modified at NRL for OPIE 2.0. - Written at Bellcore for the S/Key Version 1 software distribution - (login.c). -*/ -#include "opie_cfg.h" - -#include <stdio.h> -#include <ctype.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <netdb.h> -#if HAVE_STRING_H -#include <string.h> -#endif /* HAVE_STRING_H */ -#if HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ -#if HAVE_STDLIB_H -#include <stdlib.h> -#endif /* HAVE_STDLIB_H */ - -#ifdef DEBUG -#include <syslog.h> -#endif /* DEBUG */ - -#include "opie.h" - -int opieaccessfile FUNCTION((host), char *host) -{ -#ifdef PATH_ACCESS_FILE -/* Turn host into an IP address and then look it up in the authorization - * database to determine if ordinary password logins are OK - */ - long n; - struct hostent *hp; - FILE *fp; - char buf[128], **lp; - -#ifdef DEBUG - syslog(LOG_DEBUG, "accessfile: host=%s", host); -#endif /* DEBUG */ - if (!host[0]) - /* Local login, okay */ - return (1); - if (isaddr(host)) { - n = inet_addr(host); - return rdnets(n); - } else { - hp = gethostbyname(host); - if (!hp) { - printf("Unknown host %s\n", host); - return 0; - } - for (lp = hp->h_addr_list; *lp; lp++) { - memcpy((char *) &n, *lp, sizeof(n)); - if (rdnets(n)) - return (1); - } - return (0); - } -} - -int rdnets FUNCTION((host), long host) -{ - FILE *fp; - char buf[128], *cp; - long pattern, mask; - int permit_it; - - if (!(fp = fopen(PATH_ACCESS_FILE, "r"))) - return 0; - - while (fgets(buf, sizeof(buf), fp), !feof(fp)) { - if (buf[0] == '#') - continue; /* Comment */ - if (!(cp = strtok(buf, " \t"))) - continue; - /* two choices permit of deny */ - if (strncasecmp(cp, "permit", 4) == 0) { - permit_it = 1; - } else { - if (strncasecmp(cp, "deny", 4) == 0) { - permit_it = 0; - } else { - continue; /* ignore; it is not permit/deny */ - } - } - if (!(cp = strtok(NULL, " \t"))) - continue; /* Invalid line */ - pattern = inet_addr(cp); - if (!(cp = strtok(NULL, " \t"))) - continue; /* Invalid line */ - mask = inet_addr(cp); -#ifdef DEBUG - syslog(LOG_DEBUG, "accessfile: %08x & %08x == %08x (%s)", host, mask, pattern, ((host & mask) == pattern) ? "true" : "false"); -#endif /* DEBUG */ - if ((host & mask) == pattern) { - fclose(fp); - return permit_it; - } - } - fclose(fp); - return 0; -} - - -/* Return TRUE if string appears to be an IP address in dotted decimal; - * return FALSE otherwise (i.e., if string is a domain name) - */ -int isaddr FUNCTION((s), register char *s) -{ - char c; - - if (!s) - return 1; /* Can't happen */ - - while ((c = *s++) != '\0') { - if (c != '[' && c != ']' && !isdigit(c) && c != '.') - return 0; - } - return 1; -#else /* PATH_ACCESS_FILE */ - return !host[0]; -#endif /* PATH_ACCESS_FILE */ -} - -/* Returns the opposite of what you might expect */ -/* Returns 1 on error (allow)... this might not be what you want */ -int opiealways FUNCTION((homedir), char *homedir) -{ - char *opiealwayspath; - int i; - - if (!homedir) - return 1; - - if (!(opiealwayspath = malloc(strlen(homedir) + sizeof(OPIE_ALWAYS_FILE) + 1))) - return 1; - - strcpy(opiealwayspath, homedir); - strcat(opiealwayspath, "/"); - strcat(opiealwayspath, OPIE_ALWAYS_FILE); - i = access(opiealwayspath, F_OK); - free(opiealwayspath); - return (i); -} diff --git a/contrib/opie/libopie/atob8.c b/contrib/opie/libopie/atob8.c deleted file mode 100644 index 77367f199f81..000000000000 --- a/contrib/opie/libopie/atob8.c +++ /dev/null @@ -1,76 +0,0 @@ -/* atob8.c: The opieatob8() library function. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.4. Use struct opie_otpkey for binary arg. - Modified by cmetz for OPIE 2.3. Return the output variable. - Don't check parameters. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Inlined and obseleted opieskipspace(). Inlined and obseleted - opiehtoi(). - Created at NRL for OPIE 2.2 from opiesubr2.c -*/ -#include "opie_cfg.h" -#include <stdio.h> -#include "opie.h" - -/* Convert 8-byte hex-ascii string to binary array - */ -char *opieatob8 FUNCTION((out, in), struct opie_otpkey *outkey AND char *in) -{ - register int i; - register int val; - unsigned char *out = (unsigned char *)outkey; - - for (i = 0; i < 8; i++) { - while (*in == ' ' || *in == '\t') - in++; - if (!*in) - return NULL; - - if ((*in >= '0') && (*in <= '9')) - val = *(in++) - '0'; - else - if ((*in >= 'a') && (*in <= 'f')) - val = *(in++) - 'a' + 10; - else - if ((*in >= 'A') && (*in <= 'F')) - val = *(in++) - 'A' + 10; - else - return NULL; - - *out = val << 4; - - while (*in == ' ' || *in == '\t') - in++; - if (!*in) - return NULL; - - if ((*in >= '0') && (*in <= '9')) - val = *(in++) - '0'; - else - if ((*in >= 'a') && (*in <= 'f')) - val = *(in++) - 'a' + 10; - else - if ((*in >= 'A') && (*in <= 'F')) - val = *(in++) - 'A' + 10; - else - return NULL; - - *out++ |= val; - } - - return out; -} diff --git a/contrib/opie/libopie/btoa8.c b/contrib/opie/libopie/btoa8.c deleted file mode 100644 index b66306f2739a..000000000000 --- a/contrib/opie/libopie/btoa8.c +++ /dev/null @@ -1,34 +0,0 @@ -/* btoa8.c: The opiebtoa8() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.4. Use struct opie_otpkey for binary arg. - Created by cmetz for OPIE 2.3 (quick re-write). -*/ - -#include "opie_cfg.h" -#include "opie.h" - -static char hextochar[16] = -{'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; - -char *opiebtoa8 FUNCTION((out, in), char *out AND struct opie_otpkey *inkey) -{ - int i; - unsigned char *in = (unsigned char *)inkey; - char *c = out; - - for (i = 0; i < 8; i++) { - *(c++) = hextochar[((*in) >> 4) & 0x0f]; - *(c++) = hextochar[(*in++) & 0x0f]; - } - *c = 0; - - return out; -} diff --git a/contrib/opie/libopie/btoe.c b/contrib/opie/libopie/btoe.c deleted file mode 100644 index fa91077a95fe..000000000000 --- a/contrib/opie/libopie/btoe.c +++ /dev/null @@ -1,2267 +0,0 @@ -/* btoe: The opiebtoe() and opieetob() library functions: - Conversion to/from the six-English-word representation of a - 64 bit OTP. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.4. Use struct opie_otpkey for binary arg. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Remove unnecessary address futzing with Wp in opiebtoe. - Changed unsigned long to UINT4 for Alpha. - Modified at NRL for OPIE 2.2. Moved from put.c to libopie/opiebtoe.c. - Modified at NRL for OPIE 2.0. - Written at Bellcore for the S/Key Version 1 software distribution. -*/ -#include "opie_cfg.h" -#include <stdio.h> -#include <string.h> -#include <ctype.h> -#include <stdlib.h> -#include "opie.h" - -static UINT4 extract __P((char *s, int start, int length)); -static VOIDRET insert __P((char *s, int x, int start, int length)); -static int wsrch __P((char *w, int low, int high)); - -/* Dictionary for integer-word translations */ -static char Wp[2048][4] = -{ - "A", - "ABE", - "ACE", - "ACT", - "AD", - "ADA", - "ADD", - "AGO", - "AID", - "AIM", - "AIR", - "ALL", - "ALP", - "AM", - "AMY", - "AN", - "ANA", - "AND", - "ANN", - "ANT", - "ANY", - "APE", - "APS", - "APT", - "ARC", - "ARE", - "ARK", - "ARM", - "ART", - "AS", - "ASH", - "ASK", - "AT", - "ATE", - "AUG", - "AUK", - "AVE", - "AWE", - "AWK", - "AWL", - "AWN", - "AX", - "AYE", - "BAD", - "BAG", - "BAH", - "BAM", - "BAN", - "BAR", - "BAT", - "BAY", - "BE", - "BED", - "BEE", - "BEG", - "BEN", - "BET", - "BEY", - "BIB", - "BID", - "BIG", - "BIN", - "BIT", - "BOB", - "BOG", - "BON", - "BOO", - "BOP", - "BOW", - "BOY", - "BUB", - "BUD", - "BUG", - "BUM", - "BUN", - "BUS", - "BUT", - "BUY", - "BY", - "BYE", - "CAB", - "CAL", - "CAM", - "CAN", - "CAP", - "CAR", - "CAT", - "CAW", - "COD", - "COG", - "COL", - "CON", - "COO", - "COP", - "COT", - "COW", - "COY", - "CRY", - "CUB", - "CUE", - "CUP", - "CUR", - "CUT", - "DAB", - "DAD", - "DAM", - "DAN", - "DAR", - "DAY", - "DEE", - "DEL", - "DEN", - "DES", - "DEW", - "DID", - "DIE", - "DIG", - "DIN", - "DIP", - "DO", - "DOE", - "DOG", - "DON", - "DOT", - "DOW", - "DRY", - "DUB", - "DUD", - "DUE", - "DUG", - "DUN", - "EAR", - "EAT", - "ED", - "EEL", - "EGG", - "EGO", - "ELI", - "ELK", - "ELM", - "ELY", - "EM", - "END", - "EST", - "ETC", - "EVA", - "EVE", - "EWE", - "EYE", - "FAD", - "FAN", - "FAR", - "FAT", - "FAY", - "FED", - "FEE", - "FEW", - "FIB", - "FIG", - "FIN", - "FIR", - "FIT", - "FLO", - "FLY", - "FOE", - "FOG", - "FOR", - "FRY", - "FUM", - "FUN", - "FUR", - "GAB", - "GAD", - "GAG", - "GAL", - "GAM", - "GAP", - "GAS", - "GAY", - "GEE", - "GEL", - "GEM", - "GET", - "GIG", - "GIL", - "GIN", - "GO", - "GOT", - "GUM", - "GUN", - "GUS", - "GUT", - "GUY", - "GYM", - "GYP", - "HA", - "HAD", - "HAL", - "HAM", - "HAN", - "HAP", - "HAS", - "HAT", - "HAW", - "HAY", - "HE", - "HEM", - "HEN", - "HER", - "HEW", - "HEY", - "HI", - "HID", - "HIM", - "HIP", - "HIS", - "HIT", - "HO", - "HOB", - "HOC", - "HOE", - "HOG", - "HOP", - "HOT", - "HOW", - "HUB", - "HUE", - "HUG", - "HUH", - "HUM", - "HUT", - "I", - "ICY", - "IDA", - "IF", - "IKE", - "ILL", - "INK", - "INN", - "IO", - "ION", - "IQ", - "IRA", - "IRE", - "IRK", - "IS", - "IT", - "ITS", - "IVY", - "JAB", - "JAG", - "JAM", - "JAN", - "JAR", - "JAW", - "JAY", - "JET", - "JIG", - "JIM", - "JO", - "JOB", - "JOE", - "JOG", - "JOT", - "JOY", - "JUG", - "JUT", - "KAY", - "KEG", - "KEN", - "KEY", - "KID", - "KIM", - "KIN", - "KIT", - "LA", - "LAB", - "LAC", - "LAD", - "LAG", - "LAM", - "LAP", - "LAW", - "LAY", - "LEA", - "LED", - "LEE", - "LEG", - "LEN", - "LEO", - "LET", - "LEW", - "LID", - "LIE", - "LIN", - "LIP", - "LIT", - "LO", - "LOB", - "LOG", - "LOP", - "LOS", - "LOT", - "LOU", - "LOW", - "LOY", - "LUG", - "LYE", - "MA", - "MAC", - "MAD", - "MAE", - "MAN", - "MAO", - "MAP", - "MAT", - "MAW", - "MAY", - "ME", - "MEG", - "MEL", - "MEN", - "MET", - "MEW", - "MID", - "MIN", - "MIT", - "MOB", - "MOD", - "MOE", - "MOO", - "MOP", - "MOS", - "MOT", - "MOW", - "MUD", - "MUG", - "MUM", - "MY", - "NAB", - "NAG", - "NAN", - "NAP", - "NAT", - "NAY", - "NE", - "NED", - "NEE", - "NET", - "NEW", - "NIB", - "NIL", - "NIP", - "NIT", - "NO", - "NOB", - "NOD", - "NON", - "NOR", - "NOT", - "NOV", - "NOW", - "NU", - "NUN", - "NUT", - "O", - "OAF", - "OAK", - "OAR", - "OAT", - "ODD", - "ODE", - "OF", - "OFF", - "OFT", - "OH", - "OIL", - "OK", - "OLD", - "ON", - "ONE", - "OR", - "ORB", - "ORE", - "ORR", - "OS", - "OTT", - "OUR", - "OUT", - "OVA", - "OW", - "OWE", - "OWL", - "OWN", - "OX", - "PA", - "PAD", - "PAL", - "PAM", - "PAN", - "PAP", - "PAR", - "PAT", - "PAW", - "PAY", - "PEA", - "PEG", - "PEN", - "PEP", - "PER", - "PET", - "PEW", - "PHI", - "PI", - "PIE", - "PIN", - "PIT", - "PLY", - "PO", - "POD", - "POE", - "POP", - "POT", - "POW", - "PRO", - "PRY", - "PUB", - "PUG", - "PUN", - "PUP", - "PUT", - "QUO", - "RAG", - "RAM", - "RAN", - "RAP", - "RAT", - "RAW", - "RAY", - "REB", - "RED", - "REP", - "RET", - "RIB", - "RID", - "RIG", - "RIM", - "RIO", - "RIP", - "ROB", - "ROD", - "ROE", - "RON", - "ROT", - "ROW", - "ROY", - "RUB", - "RUE", - "RUG", - "RUM", - "RUN", - "RYE", - "SAC", - "SAD", - "SAG", - "SAL", - "SAM", - "SAN", - "SAP", - "SAT", - "SAW", - "SAY", - "SEA", - "SEC", - "SEE", - "SEN", - "SET", - "SEW", - "SHE", - "SHY", - "SIN", - "SIP", - "SIR", - "SIS", - "SIT", - "SKI", - "SKY", - "SLY", - "SO", - "SOB", - "SOD", - "SON", - "SOP", - "SOW", - "SOY", - "SPA", - "SPY", - "SUB", - "SUD", - "SUE", - "SUM", - "SUN", - "SUP", - "TAB", - "TAD", - "TAG", - "TAN", - "TAP", - "TAR", - "TEA", - "TED", - "TEE", - "TEN", - "THE", - "THY", - "TIC", - "TIE", - "TIM", - "TIN", - "TIP", - "TO", - "TOE", - "TOG", - "TOM", - "TON", - "TOO", - "TOP", - "TOW", - "TOY", - "TRY", - "TUB", - "TUG", - "TUM", - "TUN", - "TWO", - "UN", - "UP", - "US", - "USE", - "VAN", - "VAT", - "VET", - "VIE", - "WAD", - "WAG", - "WAR", - "WAS", - "WAY", - "WE", - "WEB", - "WED", - "WEE", - "WET", - "WHO", - "WHY", - "WIN", - "WIT", - "WOK", - "WON", - "WOO", - "WOW", - "WRY", - "WU", - "YAM", - "YAP", - "YAW", - "YE", - "YEA", - "YES", - "YET", - "YOU", - "ABED", - "ABEL", - "ABET", - "ABLE", - "ABUT", - "ACHE", - "ACID", - "ACME", - "ACRE", - "ACTA", - "ACTS", - "ADAM", - "ADDS", - "ADEN", - "AFAR", - "AFRO", - "AGEE", - "AHEM", - "AHOY", - "AIDA", - "AIDE", - "AIDS", - "AIRY", - "AJAR", - "AKIN", - "ALAN", - "ALEC", - "ALGA", - "ALIA", - "ALLY", - "ALMA", - "ALOE", - "ALSO", - "ALTO", - "ALUM", - "ALVA", - "AMEN", - "AMES", - "AMID", - "AMMO", - "AMOK", - "AMOS", - "AMRA", - "ANDY", - "ANEW", - "ANNA", - "ANNE", - "ANTE", - "ANTI", - "AQUA", - "ARAB", - "ARCH", - "AREA", - "ARGO", - "ARID", - "ARMY", - "ARTS", - "ARTY", - "ASIA", - "ASKS", - "ATOM", - "AUNT", - "AURA", - "AUTO", - "AVER", - "AVID", - "AVIS", - "AVON", - "AVOW", - "AWAY", - "AWRY", - "BABE", - "BABY", - "BACH", - "BACK", - "BADE", - "BAIL", - "BAIT", - "BAKE", - "BALD", - "BALE", - "BALI", - "BALK", - "BALL", - "BALM", - "BAND", - "BANE", - "BANG", - "BANK", - "BARB", - "BARD", - "BARE", - "BARK", - "BARN", - "BARR", - "BASE", - "BASH", - "BASK", - "BASS", - "BATE", - "BATH", - "BAWD", - "BAWL", - "BEAD", - "BEAK", - "BEAM", - "BEAN", - "BEAR", - "BEAT", - "BEAU", - "BECK", - "BEEF", - "BEEN", - "BEER", - "BEET", - "BELA", - "BELL", - "BELT", - "BEND", - "BENT", - "BERG", - "BERN", - "BERT", - "BESS", - "BEST", - "BETA", - "BETH", - "BHOY", - "BIAS", - "BIDE", - "BIEN", - "BILE", - "BILK", - "BILL", - "BIND", - "BING", - "BIRD", - "BITE", - "BITS", - "BLAB", - "BLAT", - "BLED", - "BLEW", - "BLOB", - "BLOC", - "BLOT", - "BLOW", - "BLUE", - "BLUM", - "BLUR", - "BOAR", - "BOAT", - "BOCA", - "BOCK", - "BODE", - "BODY", - "BOGY", - "BOHR", - "BOIL", - "BOLD", - "BOLO", - "BOLT", - "BOMB", - "BONA", - "BOND", - "BONE", - "BONG", - "BONN", - "BONY", - "BOOK", - "BOOM", - "BOON", - "BOOT", - "BORE", - "BORG", - "BORN", - "BOSE", - "BOSS", - "BOTH", - "BOUT", - "BOWL", - "BOYD", - "BRAD", - "BRAE", - "BRAG", - "BRAN", - "BRAY", - "BRED", - "BREW", - "BRIG", - "BRIM", - "BROW", - "BUCK", - "BUDD", - "BUFF", - "BULB", - "BULK", - "BULL", - "BUNK", - "BUNT", - "BUOY", - "BURG", - "BURL", - "BURN", - "BURR", - "BURT", - "BURY", - "BUSH", - "BUSS", - "BUST", - "BUSY", - "BYTE", - "CADY", - "CAFE", - "CAGE", - "CAIN", - "CAKE", - "CALF", - "CALL", - "CALM", - "CAME", - "CANE", - "CANT", - "CARD", - "CARE", - "CARL", - "CARR", - "CART", - "CASE", - "CASH", - "CASK", - "CAST", - "CAVE", - "CEIL", - "CELL", - "CENT", - "CERN", - "CHAD", - "CHAR", - "CHAT", - "CHAW", - "CHEF", - "CHEN", - "CHEW", - "CHIC", - "CHIN", - "CHOU", - "CHOW", - "CHUB", - "CHUG", - "CHUM", - "CITE", - "CITY", - "CLAD", - "CLAM", - "CLAN", - "CLAW", - "CLAY", - "CLOD", - "CLOG", - "CLOT", - "CLUB", - "CLUE", - "COAL", - "COAT", - "COCA", - "COCK", - "COCO", - "CODA", - "CODE", - "CODY", - "COED", - "COIL", - "COIN", - "COKE", - "COLA", - "COLD", - "COLT", - "COMA", - "COMB", - "COME", - "COOK", - "COOL", - "COON", - "COOT", - "CORD", - "CORE", - "CORK", - "CORN", - "COST", - "COVE", - "COWL", - "CRAB", - "CRAG", - "CRAM", - "CRAY", - "CREW", - "CRIB", - "CROW", - "CRUD", - "CUBA", - "CUBE", - "CUFF", - "CULL", - "CULT", - "CUNY", - "CURB", - "CURD", - "CURE", - "CURL", - "CURT", - "CUTS", - "DADE", - "DALE", - "DAME", - "DANA", - "DANE", - "DANG", - "DANK", - "DARE", - "DARK", - "DARN", - "DART", - "DASH", - "DATA", - "DATE", - "DAVE", - "DAVY", - "DAWN", - "DAYS", - "DEAD", - "DEAF", - "DEAL", - "DEAN", - "DEAR", - "DEBT", - "DECK", - "DEED", - "DEEM", - "DEER", - "DEFT", - "DEFY", - "DELL", - "DENT", - "DENY", - "DESK", - "DIAL", - "DICE", - "DIED", - "DIET", - "DIME", - "DINE", - "DING", - "DINT", - "DIRE", - "DIRT", - "DISC", - "DISH", - "DISK", - "DIVE", - "DOCK", - "DOES", - "DOLE", - "DOLL", - "DOLT", - "DOME", - "DONE", - "DOOM", - "DOOR", - "DORA", - "DOSE", - "DOTE", - "DOUG", - "DOUR", - "DOVE", - "DOWN", - "DRAB", - "DRAG", - "DRAM", - "DRAW", - "DREW", - "DRUB", - "DRUG", - "DRUM", - "DUAL", - "DUCK", - "DUCT", - "DUEL", - "DUET", - "DUKE", - "DULL", - "DUMB", - "DUNE", - "DUNK", - "DUSK", - "DUST", - "DUTY", - "EACH", - "EARL", - "EARN", - "EASE", - "EAST", - "EASY", - "EBEN", - "ECHO", - "EDDY", - "EDEN", - "EDGE", - "EDGY", - "EDIT", - "EDNA", - "EGAN", - "ELAN", - "ELBA", - "ELLA", - "ELSE", - "EMIL", - "EMIT", - "EMMA", - "ENDS", - "ERIC", - "EROS", - "EVEN", - "EVER", - "EVIL", - "EYED", - "FACE", - "FACT", - "FADE", - "FAIL", - "FAIN", - "FAIR", - "FAKE", - "FALL", - "FAME", - "FANG", - "FARM", - "FAST", - "FATE", - "FAWN", - "FEAR", - "FEAT", - "FEED", - "FEEL", - "FEET", - "FELL", - "FELT", - "FEND", - "FERN", - "FEST", - "FEUD", - "FIEF", - "FIGS", - "FILE", - "FILL", - "FILM", - "FIND", - "FINE", - "FINK", - "FIRE", - "FIRM", - "FISH", - "FISK", - "FIST", - "FITS", - "FIVE", - "FLAG", - "FLAK", - "FLAM", - "FLAT", - "FLAW", - "FLEA", - "FLED", - "FLEW", - "FLIT", - "FLOC", - "FLOG", - "FLOW", - "FLUB", - "FLUE", - "FOAL", - "FOAM", - "FOGY", - "FOIL", - "FOLD", - "FOLK", - "FOND", - "FONT", - "FOOD", - "FOOL", - "FOOT", - "FORD", - "FORE", - "FORK", - "FORM", - "FORT", - "FOSS", - "FOUL", - "FOUR", - "FOWL", - "FRAU", - "FRAY", - "FRED", - "FREE", - "FRET", - "FREY", - "FROG", - "FROM", - "FUEL", - "FULL", - "FUME", - "FUND", - "FUNK", - "FURY", - "FUSE", - "FUSS", - "GAFF", - "GAGE", - "GAIL", - "GAIN", - "GAIT", - "GALA", - "GALE", - "GALL", - "GALT", - "GAME", - "GANG", - "GARB", - "GARY", - "GASH", - "GATE", - "GAUL", - "GAUR", - "GAVE", - "GAWK", - "GEAR", - "GELD", - "GENE", - "GENT", - "GERM", - "GETS", - "GIBE", - "GIFT", - "GILD", - "GILL", - "GILT", - "GINA", - "GIRD", - "GIRL", - "GIST", - "GIVE", - "GLAD", - "GLEE", - "GLEN", - "GLIB", - "GLOB", - "GLOM", - "GLOW", - "GLUE", - "GLUM", - "GLUT", - "GOAD", - "GOAL", - "GOAT", - "GOER", - "GOES", - "GOLD", - "GOLF", - "GONE", - "GONG", - "GOOD", - "GOOF", - "GORE", - "GORY", - "GOSH", - "GOUT", - "GOWN", - "GRAB", - "GRAD", - "GRAY", - "GREG", - "GREW", - "GREY", - "GRID", - "GRIM", - "GRIN", - "GRIT", - "GROW", - "GRUB", - "GULF", - "GULL", - "GUNK", - "GURU", - "GUSH", - "GUST", - "GWEN", - "GWYN", - "HAAG", - "HAAS", - "HACK", - "HAIL", - "HAIR", - "HALE", - "HALF", - "HALL", - "HALO", - "HALT", - "HAND", - "HANG", - "HANK", - "HANS", - "HARD", - "HARK", - "HARM", - "HART", - "HASH", - "HAST", - "HATE", - "HATH", - "HAUL", - "HAVE", - "HAWK", - "HAYS", - "HEAD", - "HEAL", - "HEAR", - "HEAT", - "HEBE", - "HECK", - "HEED", - "HEEL", - "HEFT", - "HELD", - "HELL", - "HELM", - "HERB", - "HERD", - "HERE", - "HERO", - "HERS", - "HESS", - "HEWN", - "HICK", - "HIDE", - "HIGH", - "HIKE", - "HILL", - "HILT", - "HIND", - "HINT", - "HIRE", - "HISS", - "HIVE", - "HOBO", - "HOCK", - "HOFF", - "HOLD", - "HOLE", - "HOLM", - "HOLT", - "HOME", - "HONE", - "HONK", - "HOOD", - "HOOF", - "HOOK", - "HOOT", - "HORN", - "HOSE", - "HOST", - "HOUR", - "HOVE", - "HOWE", - "HOWL", - "HOYT", - "HUCK", - "HUED", - "HUFF", - "HUGE", - "HUGH", - "HUGO", - "HULK", - "HULL", - "HUNK", - "HUNT", - "HURD", - "HURL", - "HURT", - "HUSH", - "HYDE", - "HYMN", - "IBIS", - "ICON", - "IDEA", - "IDLE", - "IFFY", - "INCA", - "INCH", - "INTO", - "IONS", - "IOTA", - "IOWA", - "IRIS", - "IRMA", - "IRON", - "ISLE", - "ITCH", - "ITEM", - "IVAN", - "JACK", - "JADE", - "JAIL", - "JAKE", - "JANE", - "JAVA", - "JEAN", - "JEFF", - "JERK", - "JESS", - "JEST", - "JIBE", - "JILL", - "JILT", - "JIVE", - "JOAN", - "JOBS", - "JOCK", - "JOEL", - "JOEY", - "JOHN", - "JOIN", - "JOKE", - "JOLT", - "JOVE", - "JUDD", - "JUDE", - "JUDO", - "JUDY", - "JUJU", - "JUKE", - "JULY", - "JUNE", - "JUNK", - "JUNO", - "JURY", - "JUST", - "JUTE", - "KAHN", - "KALE", - "KANE", - "KANT", - "KARL", - "KATE", - "KEEL", - "KEEN", - "KENO", - "KENT", - "KERN", - "KERR", - "KEYS", - "KICK", - "KILL", - "KIND", - "KING", - "KIRK", - "KISS", - "KITE", - "KLAN", - "KNEE", - "KNEW", - "KNIT", - "KNOB", - "KNOT", - "KNOW", - "KOCH", - "KONG", - "KUDO", - "KURD", - "KURT", - "KYLE", - "LACE", - "LACK", - "LACY", - "LADY", - "LAID", - "LAIN", - "LAIR", - "LAKE", - "LAMB", - "LAME", - "LAND", - "LANE", - "LANG", - "LARD", - "LARK", - "LASS", - "LAST", - "LATE", - "LAUD", - "LAVA", - "LAWN", - "LAWS", - "LAYS", - "LEAD", - "LEAF", - "LEAK", - "LEAN", - "LEAR", - "LEEK", - "LEER", - "LEFT", - "LEND", - "LENS", - "LENT", - "LEON", - "LESK", - "LESS", - "LEST", - "LETS", - "LIAR", - "LICE", - "LICK", - "LIED", - "LIEN", - "LIES", - "LIEU", - "LIFE", - "LIFT", - "LIKE", - "LILA", - "LILT", - "LILY", - "LIMA", - "LIMB", - "LIME", - "LIND", - "LINE", - "LINK", - "LINT", - "LION", - "LISA", - "LIST", - "LIVE", - "LOAD", - "LOAF", - "LOAM", - "LOAN", - "LOCK", - "LOFT", - "LOGE", - "LOIS", - "LOLA", - "LONE", - "LONG", - "LOOK", - "LOON", - "LOOT", - "LORD", - "LORE", - "LOSE", - "LOSS", - "LOST", - "LOUD", - "LOVE", - "LOWE", - "LUCK", - "LUCY", - "LUGE", - "LUKE", - "LULU", - "LUND", - "LUNG", - "LURA", - "LURE", - "LURK", - "LUSH", - "LUST", - "LYLE", - "LYNN", - "LYON", - "LYRA", - "MACE", - "MADE", - "MAGI", - "MAID", - "MAIL", - "MAIN", - "MAKE", - "MALE", - "MALI", - "MALL", - "MALT", - "MANA", - "MANN", - "MANY", - "MARC", - "MARE", - "MARK", - "MARS", - "MART", - "MARY", - "MASH", - "MASK", - "MASS", - "MAST", - "MATE", - "MATH", - "MAUL", - "MAYO", - "MEAD", - "MEAL", - "MEAN", - "MEAT", - "MEEK", - "MEET", - "MELD", - "MELT", - "MEMO", - "MEND", - "MENU", - "MERT", - "MESH", - "MESS", - "MICE", - "MIKE", - "MILD", - "MILE", - "MILK", - "MILL", - "MILT", - "MIMI", - "MIND", - "MINE", - "MINI", - "MINK", - "MINT", - "MIRE", - "MISS", - "MIST", - "MITE", - "MITT", - "MOAN", - "MOAT", - "MOCK", - "MODE", - "MOLD", - "MOLE", - "MOLL", - "MOLT", - "MONA", - "MONK", - "MONT", - "MOOD", - "MOON", - "MOOR", - "MOOT", - "MORE", - "MORN", - "MORT", - "MOSS", - "MOST", - "MOTH", - "MOVE", - "MUCH", - "MUCK", - "MUDD", - "MUFF", - "MULE", - "MULL", - "MURK", - "MUSH", - "MUST", - "MUTE", - "MUTT", - "MYRA", - "MYTH", - "NAGY", - "NAIL", - "NAIR", - "NAME", - "NARY", - "NASH", - "NAVE", - "NAVY", - "NEAL", - "NEAR", - "NEAT", - "NECK", - "NEED", - "NEIL", - "NELL", - "NEON", - "NERO", - "NESS", - "NEST", - "NEWS", - "NEWT", - "NIBS", - "NICE", - "NICK", - "NILE", - "NINA", - "NINE", - "NOAH", - "NODE", - "NOEL", - "NOLL", - "NONE", - "NOOK", - "NOON", - "NORM", - "NOSE", - "NOTE", - "NOUN", - "NOVA", - "NUDE", - "NULL", - "NUMB", - "OATH", - "OBEY", - "OBOE", - "ODIN", - "OHIO", - "OILY", - "OINT", - "OKAY", - "OLAF", - "OLDY", - "OLGA", - "OLIN", - "OMAN", - "OMEN", - "OMIT", - "ONCE", - "ONES", - "ONLY", - "ONTO", - "ONUS", - "ORAL", - "ORGY", - "OSLO", - "OTIS", - "OTTO", - "OUCH", - "OUST", - "OUTS", - "OVAL", - "OVEN", - "OVER", - "OWLY", - "OWNS", - "QUAD", - "QUIT", - "QUOD", - "RACE", - "RACK", - "RACY", - "RAFT", - "RAGE", - "RAID", - "RAIL", - "RAIN", - "RAKE", - "RANK", - "RANT", - "RARE", - "RASH", - "RATE", - "RAVE", - "RAYS", - "READ", - "REAL", - "REAM", - "REAR", - "RECK", - "REED", - "REEF", - "REEK", - "REEL", - "REID", - "REIN", - "RENA", - "REND", - "RENT", - "REST", - "RICE", - "RICH", - "RICK", - "RIDE", - "RIFT", - "RILL", - "RIME", - "RING", - "RINK", - "RISE", - "RISK", - "RITE", - "ROAD", - "ROAM", - "ROAR", - "ROBE", - "ROCK", - "RODE", - "ROIL", - "ROLL", - "ROME", - "ROOD", - "ROOF", - "ROOK", - "ROOM", - "ROOT", - "ROSA", - "ROSE", - "ROSS", - "ROSY", - "ROTH", - "ROUT", - "ROVE", - "ROWE", - "ROWS", - "RUBE", - "RUBY", - "RUDE", - "RUDY", - "RUIN", - "RULE", - "RUNG", - "RUNS", - "RUNT", - "RUSE", - "RUSH", - "RUSK", - "RUSS", - "RUST", - "RUTH", - "SACK", - "SAFE", - "SAGE", - "SAID", - "SAIL", - "SALE", - "SALK", - "SALT", - "SAME", - "SAND", - "SANE", - "SANG", - "SANK", - "SARA", - "SAUL", - "SAVE", - "SAYS", - "SCAN", - "SCAR", - "SCAT", - "SCOT", - "SEAL", - "SEAM", - "SEAR", - "SEAT", - "SEED", - "SEEK", - "SEEM", - "SEEN", - "SEES", - "SELF", - "SELL", - "SEND", - "SENT", - "SETS", - "SEWN", - "SHAG", - "SHAM", - "SHAW", - "SHAY", - "SHED", - "SHIM", - "SHIN", - "SHOD", - "SHOE", - "SHOT", - "SHOW", - "SHUN", - "SHUT", - "SICK", - "SIDE", - "SIFT", - "SIGH", - "SIGN", - "SILK", - "SILL", - "SILO", - "SILT", - "SINE", - "SING", - "SINK", - "SIRE", - "SITE", - "SITS", - "SITU", - "SKAT", - "SKEW", - "SKID", - "SKIM", - "SKIN", - "SKIT", - "SLAB", - "SLAM", - "SLAT", - "SLAY", - "SLED", - "SLEW", - "SLID", - "SLIM", - "SLIT", - "SLOB", - "SLOG", - "SLOT", - "SLOW", - "SLUG", - "SLUM", - "SLUR", - "SMOG", - "SMUG", - "SNAG", - "SNOB", - "SNOW", - "SNUB", - "SNUG", - "SOAK", - "SOAR", - "SOCK", - "SODA", - "SOFA", - "SOFT", - "SOIL", - "SOLD", - "SOME", - "SONG", - "SOON", - "SOOT", - "SORE", - "SORT", - "SOUL", - "SOUR", - "SOWN", - "STAB", - "STAG", - "STAN", - "STAR", - "STAY", - "STEM", - "STEW", - "STIR", - "STOW", - "STUB", - "STUN", - "SUCH", - "SUDS", - "SUIT", - "SULK", - "SUMS", - "SUNG", - "SUNK", - "SURE", - "SURF", - "SWAB", - "SWAG", - "SWAM", - "SWAN", - "SWAT", - "SWAY", - "SWIM", - "SWUM", - "TACK", - "TACT", - "TAIL", - "TAKE", - "TALE", - "TALK", - "TALL", - "TANK", - "TASK", - "TATE", - "TAUT", - "TEAL", - "TEAM", - "TEAR", - "TECH", - "TEEM", - "TEEN", - "TEET", - "TELL", - "TEND", - "TENT", - "TERM", - "TERN", - "TESS", - "TEST", - "THAN", - "THAT", - "THEE", - "THEM", - "THEN", - "THEY", - "THIN", - "THIS", - "THUD", - "THUG", - "TICK", - "TIDE", - "TIDY", - "TIED", - "TIER", - "TILE", - "TILL", - "TILT", - "TIME", - "TINA", - "TINE", - "TINT", - "TINY", - "TIRE", - "TOAD", - "TOGO", - "TOIL", - "TOLD", - "TOLL", - "TONE", - "TONG", - "TONY", - "TOOK", - "TOOL", - "TOOT", - "TORE", - "TORN", - "TOTE", - "TOUR", - "TOUT", - "TOWN", - "TRAG", - "TRAM", - "TRAY", - "TREE", - "TREK", - "TRIG", - "TRIM", - "TRIO", - "TROD", - "TROT", - "TROY", - "TRUE", - "TUBA", - "TUBE", - "TUCK", - "TUFT", - "TUNA", - "TUNE", - "TUNG", - "TURF", - "TURN", - "TUSK", - "TWIG", - "TWIN", - "TWIT", - "ULAN", - "UNIT", - "URGE", - "USED", - "USER", - "USES", - "UTAH", - "VAIL", - "VAIN", - "VALE", - "VARY", - "VASE", - "VAST", - "VEAL", - "VEDA", - "VEIL", - "VEIN", - "VEND", - "VENT", - "VERB", - "VERY", - "VETO", - "VICE", - "VIEW", - "VINE", - "VISE", - "VOID", - "VOLT", - "VOTE", - "WACK", - "WADE", - "WAGE", - "WAIL", - "WAIT", - "WAKE", - "WALE", - "WALK", - "WALL", - "WALT", - "WAND", - "WANE", - "WANG", - "WANT", - "WARD", - "WARM", - "WARN", - "WART", - "WASH", - "WAST", - "WATS", - "WATT", - "WAVE", - "WAVY", - "WAYS", - "WEAK", - "WEAL", - "WEAN", - "WEAR", - "WEED", - "WEEK", - "WEIR", - "WELD", - "WELL", - "WELT", - "WENT", - "WERE", - "WERT", - "WEST", - "WHAM", - "WHAT", - "WHEE", - "WHEN", - "WHET", - "WHOA", - "WHOM", - "WICK", - "WIFE", - "WILD", - "WILL", - "WIND", - "WINE", - "WING", - "WINK", - "WINO", - "WIRE", - "WISE", - "WISH", - "WITH", - "WOLF", - "WONT", - "WOOD", - "WOOL", - "WORD", - "WORE", - "WORK", - "WORM", - "WORN", - "WOVE", - "WRIT", - "WYNN", - "YALE", - "YANG", - "YANK", - "YARD", - "YARN", - "YAWL", - "YAWN", - "YEAH", - "YEAR", - "YELL", - "YOGA", - "YOKE" -}; - -/* Encode 8 bytes in 'c' as a string of English words. */ -char *opiebtoe FUNCTION((engout, c), char *engout AND struct opie_otpkey *c) -{ - char cp[sizeof(struct opie_otpkey) + 1]; /* add in room for the parity 2 bits */ - int p, i; - - engout[0] = '\0'; - memcpy(cp, c, sizeof(struct opie_otpkey)); - /* compute parity */ - for (p = 0, i = 0; i < 64; i += 2) - p += extract(cp, i, 2); - - cp[8] = (char)(p << 6); - strncat(engout, Wp[extract(cp, 0, 11)], 4); - strcat(engout, " "); - strncat(engout, Wp[extract(cp, 11, 11)], 4); - strcat(engout, " "); - strncat(engout, Wp[extract(cp, 22, 11)], 4); - strcat(engout, " "); - strncat(engout, Wp[extract(cp, 33, 11)], 4); - strcat(engout, " "); - strncat(engout, Wp[extract(cp, 44, 11)], 4); - strcat(engout, " "); - strncat(engout, Wp[extract(cp, 55, 11)], 4); - return (engout); -} - -/* convert English to binary - * returns 1 OK - all good words and parity is OK - * 0 word not in data base - * -1 badly formed in put ie > 4 char word - * -2 words OK but parity is wrong - */ -int opieetob FUNCTION((out, e), struct opie_otpkey *out AND char *e) -{ - char *word, *c, *input, b[9]; - int i, p, v, l, low, high, rval = -1; - - if (e == NULL) - return -1; - - if ((i = strlen(e)) > 64) - i = 64; - - if (!(input = malloc(i+1))) - return -1; - - strncpy(input, e, i); - input[i] = 0; - memset(b, 0, sizeof(b)); - memset(out, 0, sizeof(struct opie_otpkey)); - - for (i = 0, p = 0, word = c = input; i < 6; i++, p += 11) { - while (*c && !isalpha(*c)) c++; - word = c; - while (*c) { - if (islower(*c)) - *c = toupper(*c); - if (*c == '1') - *c = 'L'; - if (*c == '0') - *c = 'O'; - if (*c == '5') - *c = 'S'; - if (!isalpha(*c)) - break; - c++; - } - if ((!*c) && (i != 5)) - goto opiebtoeret; - *c = 0; - c++; - if (c == word) - goto opiebtoeret; - l = strlen(word); - if (l > 4 || l < 1) - goto opiebtoeret; - if (l < 4) { - low = 0; - high = 570; - } else { - low = 571; - high = 2047; - } - if ((v = wsrch(word, low, high)) < 0) { - rval = 0; - goto opiebtoeret; - } - insert(b, v, p, 11); - } - - /* now check the parity of what we got */ - for (p = 0, i = 0; i < 64; i += 2) - p += extract(b, i, 2); - - if ((p & 3) != extract(b, 64, 2)) { - rval = -2; - goto opiebtoeret; - } - - memcpy(out, b, sizeof(struct opie_otpkey)); - - rval = 1; - -opiebtoeret: - free(input); - return rval; -} - -/* Internal subroutines for word encoding/decoding */ - -/* Dictionary binary search */ -static int wsrch FUNCTION((w, low, high), char *w AND int low AND int high) -{ - int i, j; - - for (;;) { - i = (low + high) / 2; - if ((j = strncmp(w, Wp[i], 4)) == 0) - return i; /* Found it */ - if (high == low + 1) { - /* Avoid effects of integer truncation in /2 */ - if (strncmp(w, Wp[high], 4) == 0) - return high; - else - return -1; - } - if (low >= high) - return -1; /* I don't *think* this can happen... */ - if (j < 0) - high = i; /* Search lower half */ - else - low = i; /* Search upper half */ - } -} - -static VOIDRET insert FUNCTION((s, x, start, length), char *s AND int x AND int start AND int length) -{ - unsigned char cl; - unsigned char cc; - unsigned char cr; - UINT4 y; - int shift; - - shift = ((8 - ((start + length) % 8)) % 8); - y = (long) x << shift; - cl = (y >> 16) & 0xff; - cc = (y >> 8) & 0xff; - cr = y & 0xff; - if (shift + length > 16) { - s[start / 8] |= cl; - s[start / 8 + 1] |= cc; - s[start / 8 + 2] |= cr; - } else - if (shift + length > 8) { - s[start / 8] |= cc; - s[start / 8 + 1] |= cr; - } else { - s[start / 8] |= cr; - } -} - -static UINT4 extract FUNCTION((s, start, length), char *s AND int start AND int length) -{ - UINT4 x; - unsigned char cl; - unsigned char cc; - unsigned char cr; - - cl = s[start / 8]; - cc = s[start / 8 + 1]; - cr = s[start / 8 + 2]; - x = ((UINT4) (cl << 8 | cc) << 8 | cr); - x = x >> (24 - (length + (start % 8))); - x = (x & (0xffff >> (16 - length))); - return (x); -} diff --git a/contrib/opie/libopie/btoh.c b/contrib/opie/libopie/btoh.c deleted file mode 100644 index 45fb4c827083..000000000000 --- a/contrib/opie/libopie/btoh.c +++ /dev/null @@ -1,36 +0,0 @@ -/* btoh.c: The opiebtoh() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Created by cmetz for OPIE 2.3. -*/ - -#include "opie_cfg.h" -#include "opie.h" - -static char hextochar[16] = -{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; - -char *opiebtoh FUNCTION((out, in), char *out AND struct opie_otpkey *inkey) -{ - int i; - char *c = out; - unsigned char *in = (unsigned char *)inkey; - - for (i = 0; i < 4; i++) { - *(c++) = hextochar[((*in) >> 4) & 0x0f]; - *(c++) = hextochar[(*in++) & 0x0f]; - *(c++) = hextochar[((*in) >> 4) & 0x0f]; - *(c++) = hextochar[(*in++) & 0x0f]; - *(c++) = ' '; - } - *(--c) = 0; - - return out; -} diff --git a/contrib/opie/libopie/challenge.c b/contrib/opie/libopie/challenge.c deleted file mode 100644 index 6c42018db0a3..000000000000 --- a/contrib/opie/libopie/challenge.c +++ /dev/null @@ -1,79 +0,0 @@ -/* challenge.c: The opiechallenge() library function. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.32. Added extended response set - identifier to the challenge. - Modified by cmetz for OPIE 2.3. Use opie_ prefix. Send debug info to - syslog. Add sha plumbing. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Created at NRL for OPIE 2.2 from opiesubr2.c - -$FreeBSD$ - -*/ -#include "opie_cfg.h" -#include <stdio.h> -#include <string.h> -#if DEBUG -#include <syslog.h> -#endif /* DEBUG */ -#include "opie.h" - -/* Return an OTP challenge string for user 'name'. - - The return values are: - - 0 = All good - -1 = Low-level error (file, memory, I/O, etc.) - 1 = High-level error (user not found or locked) - - This function MUST eventually be followed by an opieverify() to release - the user lock and file handles. - - This function will give you a blanked-out state block if it returns a - nonzero status. Even though it returns a non-zero status and a blank - state block, you still MUST call opieverify() to clear the lock and - any internal state (the latter condition is not actually used yet). -*/ - -static char *algids[] = { NULL, NULL, NULL, "sha1", "md4", "md5" }; - -int opiechallenge FUNCTION((mp, name, ss), struct opie *mp AND char *name AND char *ss) -{ - int rval = -1; - - rval = opielookup(mp, name); -#if DEBUG - if (rval) syslog(LOG_DEBUG, "opiechallenge: opielookup(mp, name=%s) returned %d", name, rval); -#endif /* DEBUG */ - - if (!rval) { - rval = opielock(name); -#if DEBUG - if (rval) syslog(LOG_DEBUG, "opiechallenge: opielock(name=%s) returned %d", name, rval); -#endif /* DEBUG */ - } - - if (rval || - (snprintf(ss, OPIE_CHALLENGE_MAX+1, "otp-%s %d %s ext", algids[MDX], mp->opie_n - 1, mp->opie_seed) >= OPIE_CHALLENGE_MAX+1)) { - if (!rval) - rval = 1; - opierandomchallenge(ss); - memset(mp, 0, sizeof(*mp)); - } - - return rval; -} diff --git a/contrib/opie/libopie/generator.c b/contrib/opie/libopie/generator.c deleted file mode 100644 index da264640819a..000000000000 --- a/contrib/opie/libopie/generator.c +++ /dev/null @@ -1,398 +0,0 @@ -/* generator.c: The opiegenerator() library function. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.4. Added opieauto code based on - previously released test code. Renamed buffer to challenge. - Use struct opie_otpkey for keys. - Modified by cmetz for OPIE 2.32. If secret=NULL, always return - as if opieauto returned "get the secret". Renamed - _opieparsechallenge() to __opieparsechallenge(). Check - challenge for extended response support and don't send - an init-hex response if extended response support isn't - indicated in the challenge. - Modified by cmetz for OPIE 2.31. Renamed "init" to "init-hex". - Removed active attack protection support. Fixed fairly - bug in how init response was computed (i.e., dead wrong). - Modified by cmetz for OPIE 2.3. Use _opieparsechallenge(). ifdef - around string.h. Output hex responses by default, output - OTP re-init extended responses (same secret) if sequence - number falls below 10. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Bug fixes. - Created at NRL for OPIE 2.2. - -$FreeBSD$ -*/ - -#include "opie_cfg.h" -#if HAVE_STRING_H -#include <string.h> -#endif /* HAVE_STRING_H */ -#if OPIEAUTO -#include <errno.h> -#if HAVE_STDLIB_H -#include <stdlib.h> -#endif /* HAVE_STDLIB_H */ -#include <sys/stat.h> - -#include <sys/socket.h> -#include <sys/un.h> -#endif /* OPIEAUTO */ -#if DEBUG -#include <syslog.h> -#endif /* DEBUG */ -#include <stdio.h> -#include "opie.h" - -static char *algids[] = { NULL, NULL, NULL, "sha1", "md4", "md5" }; - -#if OPIEAUTO -#ifndef max -#define max(x, y) (((x) > (y)) ? (x) : (y)) -#endif /* max */ - -static int opieauto_connect FUNCTION_NOARGS -{ - int s; - struct sockaddr_un sun; - char buffer[1024]; - char *c, *c2 ="/.opieauto"; - uid_t myuid = getuid(), myeuid = geteuid(); - - if (!myuid || !myeuid || (myuid != myeuid)) { -#if DEBUG - syslog(LOG_DEBUG, "opieauto_connect: superuser and/or setuid not allowed"); -#endif /* DEBUG */ - return -1; - }; - - memset(&sun, 0, sizeof(struct sockaddr_un)); - sun.sun_family = AF_UNIX; - - if (!(c = getenv("HOME"))) { -#if DEBUG - syslog(LOG_DEBUG, "opieauto_connect: no HOME variable?"); -#endif /* DEBUG */ - return -1; - }; - - if (strlen(c) > (sizeof(sun.sun_path) - strlen(c2) - 1)) { -#if DEBUG - syslog(LOG_DEBUG, "opieauto_connect: HOME is too long: %s", c); -#endif /* DEBUG */ - return -1; - }; - - strcpy(sun.sun_path, c); - strcat(sun.sun_path, c2); - - if ((s = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) { -#if DEBUG - syslog(LOG_DEBUG, "opieauto_connect: socket: %s(%d)", strerror(errno), errno); -#endif /* DEBUG */ - return -1; - }; - - { - struct stat st; - - if (stat(sun.sun_path, &st) < 0) { -#if DEBUG - syslog(LOG_DEBUG, "opieauto_connect: stat: %s(%d)\n", strerror(errno), errno); -#endif /* DEBUG */ - goto ret; - }; - - if (connect(s, (struct sockaddr *)&sun, sizeof(struct sockaddr_un))) { -#if DEBUG - syslog(LOG_DEBUG, "opieauto_connect: connect: %s(%d)\n", strerror(errno), errno); -#endif /* DEBUG */ - goto ret; - }; - - if ((st.st_uid != myuid) || (!S_ISSOCK(st.st_mode)) || ((st.st_mode & 07777) != 0600)) { -#if DEBUG - syslog(LOG_DEBUG, "opieauto_connect: something's fishy about the socket\n"); -#endif /* DEBUG */ - goto ret; - }; - }; - - return s; - -ret: - close(s); - return -1; -}; -#endif /* OPIEAUTO */ - -int opiegenerator FUNCTION((challenge, secret, response), char *challenge AND char *secret AND char *response) -{ - int algorithm; - int sequence; - char *seed; - struct opie_otpkey key; - int i; - int exts; -#if OPIEAUTO - int s; - int window; - char cmd[1+1+1+1+4+1+OPIE_SEED_MAX+1+4+1+4+1+4+1+4+1]; - char *c; -#endif /* OPIEAUTO */ - - if (!(challenge = strstr(challenge, "otp-"))) - return 1; - - challenge += 4; - - if (__opieparsechallenge(challenge, &algorithm, &sequence, &seed, &exts)) - return 1; - - if ((sequence < 2) || (sequence > 9999)) - return 1; - - if (*secret) { - if (opiepasscheck(secret)) - return -2; - - if (i = opiekeycrunch(algorithm, &key, seed, secret)) - return i; - - if (sequence <= OPIE_SEQUENCE_RESTRICT) { - if (!(exts & 1)) - return 1; - - { - char newseed[OPIE_SEED_MAX + 1]; - struct opie_otpkey newkey; - char *c; - char buf[OPIE_SEED_MAX + 48 + 1]; - - while (sequence-- != 0) - opiehash(&key, algorithm); - - if (opienewseed(strcpy(newseed, seed)) < 0) - return -1; - - if (opiekeycrunch(algorithm, &newkey, newseed, secret)) - return -1; - - for (i = 0; i < 499; i++) - opiehash(&newkey, algorithm); - - strcpy(response, "init-hex:"); - strcat(response, opiebtoh(buf, &key)); - if (snprintf(buf, sizeof(buf), ":%s 499 %s:", algids[algorithm], - newseed) >= sizeof(buf)) { -#ifdef DEBUG - syslog(LOG_DEBUG, "opiegenerator: snprintf truncation at init-hex"); -#endif /* DEBUG */ - return -1; - } - strcat(response, buf); - strcat(response, opiebtoh(buf, &newkey)); - }; - }; - }; - -#if OPIEAUTO - if ((s = opieauto_connect()) >= 0) { - if ((i = read(s, cmd, sizeof(cmd)-1)) < 0) { -#if DEBUG - syslog(LOG_DEBUG, "opiegenerator: read: %s(%d)\n", strerror(errno), errno); -#endif /* DEBUG */ - close(s); - s = -1; - goto l0; - }; - cmd[i] = 0; - if ((cmd[0] != 'C') || (cmd[1] != '+') || (cmd[2] != ' ')) { -#if DEBUG - syslog(LOG_DEBUG, "opiegenerator: got invalid/failing C+ response: %s\n", cmd); -#endif /* DEBUG */ - close(s); - s = -1; - goto l0; - }; - - window = strtoul(&cmd[3], &c, 10); - if (!window || (window >= (OPIE_SEQUENCE_MAX - OPIE_SEQUENCE_RESTRICT)) || !isspace(*c)) { -#if DEBUG - syslog(LOG_DEBUG, "opiegenerator: got bogus option response: %s\n", cmd); -#endif /* DEBUG */ - close(s); - s = -1; - goto l0; - }; - }; - -l0: - if (*secret) { - int j; - - if (s < 0) { - j = 0; - goto l1; - }; - - j = max(sequence - window + 1, OPIE_SEQUENCE_RESTRICT); - - for (i = j; i > 0; i--) - opiehash(&key, algorithm); - - { - char buf[16+1]; - - opiebtoa8(buf, &key); - - if (snprintf(cmd, sizeof(cmd), "S= %d %d %s %s\n", algorithm, sequence, - seed, buf) >= sizeof(cmd)) { -#if DEBUG - syslog(LOG_DEBUG, "opiegenerator: snprintf truncation at S=\n"); -#endif /* DEBUG */ - goto l1; - } - } - - if (write(s, cmd, i = strlen(cmd)) != i) { -#if DEBUG - syslog(LOG_DEBUG, "opiegenerator: write: %s(%d)\n", strerror(errno), errno); -#endif /* DEBUG */ - goto l1; - }; - - if ((i = read(s, cmd, sizeof(cmd))) < 0) { -#if DEBUG - syslog(LOG_DEBUG, "opiegenerator: read: %s(%d)\n", strerror(errno), errno); -#endif /* DEBUG */ - }; - close(s); - - cmd[i] = 0; - i = strlen(seed); - if ((cmd[0] != 'S') || (cmd[1] != '+') || (cmd[2] != ' ') || (strtoul(&cmd[3], &c, 10) != algorithm) || (strtoul(c + 1, &c, 10) != sequence) || strncmp(++c, seed, i) || (*(c + i) != '\n')) { -#if DEBUG - syslog(LOG_DEBUG, "opiegenerator: got invalid/failing S+ response: %s\n", cmd); -#endif /* DEBUG */ - }; - -l1: - for (i = sequence - j; i > 0; i--) - opiehash(&key, algorithm); - - opiebtoh(response, &key); - } else { - if (s < 0) - goto l2; - - if ((snprintf(cmd, sizeof(cmd), "s= %d %d %s\n", algorithm, sequence, - seed) >= sizeof(cmd))) { -#if DEBUG - syslog(LOG_DEBUG, "opiegenerator: snprintf truncation at s=\n"); -#endif /* DEBUG */ - goto l2; - } - - if (write(s, cmd, i = strlen(cmd)) != i) { -#if DEBUG - syslog(LOG_DEBUG, "opiegenerator: write: %s(%d)\n", strerror(errno), errno); -#endif /* DEBUG */ - goto l2; - }; - - if ((i = read(s, cmd, sizeof(cmd))) < 0) { -#if DEBUG - syslog(LOG_DEBUG, "opiegenerator: read: %s(%d)\n", strerror(errno), errno); -#endif /* DEBUG */ - goto l2; - }; - close(s); - - i = strlen(seed); - - if ((cmd[0] != 's') || (cmd[2] != ' ') || (strtoul(&cmd[3], &c, 10) != algorithm) || (strtoul(c + 1, &c, 10) != sequence) || strncmp(++c, seed, i)) { -#if DEBUG - if (c) - *c = 0; - else - cmd[3] = 0; - - syslog(LOG_DEBUG, "opiegenerator: got bogus/invalid s response: %s\n", cmd); -#endif /* DEBUG */ - goto l2; - }; - - c += i; - - if (cmd[1] == '-') { -#if DEBUG - if (*c != '\n') { - *c = 0; - syslog(LOG_DEBUG, "opiegenerator: got invalid s- response: %s\n", cmd); - }; -#endif /* DEBUG */ - goto l2; - }; - - if (cmd[1] != '+') { -#if DEBUG - *c = 0; - syslog(LOG_DEBUG, "opiegenerator: got invalid s response: %s\n", cmd); -#endif /* DEBUG */ - goto l2; - }; - - { - char *c2; - - if (!(c2 = strchr(++c, '\n'))) { -#if DEBUG - *c = 0; - syslog(LOG_DEBUG, "opiegenerator: got invalid s+ response: %s\n", cmd); -#endif /* DEBUG */ - goto l2; - }; - - *c2++ = 0; - }; - - if (!opieatob8(&key, c)) - goto l2; - - opiebtoh(response, &key); - }; - - if (s >= 0) - close(s); -#else /* OPIEAUTO */ - if (*secret) { - while (sequence-- != 0) - opiehash(&key, algorithm); - - opiebtoh(response, &key); - } else - return -2; -#endif /* OPIEAUTO */ - - return 0; - -#if OPIEAUTO -l2: -#if DEBUG - syslog(LOG_DEBUG, "opiegenerator: no opieauto response available.\n"); -#endif /* DEBUG */ - if (s >= 0) - close(s); - - return -2; -#endif /* OPIEAUTO */ -}; diff --git a/contrib/opie/libopie/getsequence.c b/contrib/opie/libopie/getsequence.c deleted file mode 100644 index 77fd5a2d2f75..000000000000 --- a/contrib/opie/libopie/getsequence.c +++ /dev/null @@ -1,27 +0,0 @@ -/* getsequence.c: The opiegetsequence() library function. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.3. Use opie_ prefix. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Created at NRL for OPIE 2.2 from opiesubr2.c -*/ -#include "opie_cfg.h" -#include "opie.h" - -int opiegetsequence FUNCTION((stateblock), struct opie *stateblock) -{ - return stateblock->opie_n; -} diff --git a/contrib/opie/libopie/getutmpentry.c b/contrib/opie/libopie/getutmpentry.c deleted file mode 100644 index 06d22c816434..000000000000 --- a/contrib/opie/libopie/getutmpentry.c +++ /dev/null @@ -1,85 +0,0 @@ -/* getutmpentry.c: The __opiegetutmpentry() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.31. Cache result. - Created by cmetz for OPIE 2.3 (re-write). -*/ - -#include "opie_cfg.h" -#include <stdio.h> -#include <sys/types.h> - -#if DOUTMPX -#include <utmpx.h> -#define setutent setutxent -#define getutline(x) getutxline(x) -#define utmp utmpx -#else -#include <utmp.h> -#endif /* DOUTMPX */ - -#if HAVE_STRING_H -#include <string.h> -#endif /* HAVE_STRING_H */ - -#if DEBUG -#include <syslog.h> -#endif /* DEBUG */ -#include "opie.h" - -#if !HAVE_GETUTLINE && !DOUTMPX -struct utmp *getutline __P((struct utmp *)); -#endif /* HAVE_GETUTLINE && !DOUTMPX */ - -static struct utmp u; - -int __opiegetutmpentry FUNCTION((line, utmp), char *line AND struct utmp *utmp) -{ - struct utmp *pu; - - if (u.ut_line[0]) { - pu = &u; - goto gotit; - }; - - memset(&u, 0, sizeof(u)); - - if (!strncmp(line, "/dev/", 5)) { - strncpy(u.ut_line, line + 5, sizeof(u.ut_line)); - setutent(); - if ((pu = getutline(&u))) - goto gotit; - -#ifdef hpux - strcpy(u.ut_line, "pty/"); - strncpy(u.ut_line + 4, line + 5, sizeof(u.ut_line) - 4); - setutent(); - if ((pu = getutline(&u))) - goto gotit; -#endif /* hpux */ - } - - strncpy(u.ut_line, line, sizeof(u.ut_line)); - setutent(); - if ((pu = getutline(&u))) - goto gotit; - -#if DEBUG - syslog(LOG_DEBUG, "__opiegetutmpentry: failed to find entry for line %s", line); -#endif /* DEBUG */ - return -1; - -gotit: -#if DEBUG - syslog(LOG_DEBUG, "__opiegetutmpentry: succeeded with line %s", pu->ut_line); -#endif /* DEBUG */ - memcpy(utmp, pu, sizeof(struct utmp)); - return 0; -} diff --git a/contrib/opie/libopie/hash.c b/contrib/opie/libopie/hash.c deleted file mode 100644 index 8a59f4162c60..000000000000 --- a/contrib/opie/libopie/hash.c +++ /dev/null @@ -1,78 +0,0 @@ -/* hash.c: The opiehash() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.4. Use struct opie_otpkey for binary arg. - Modified by cmetz for OPIE 2.31. Added SHA support (which may - not be correct). Backed out previous optimizations as - they killed thread-safety. - Created by cmetz for OPIE 2.3 using the old hash.c as a guide. - -$FreeBSD$ -*/ - -#include <sys/endian.h> - -#include "opie_cfg.h" -#include "opie.h" - -#include <sha.h> -#include <md4.h> -#include <md5.h> - -VOIDRET opiehash FUNCTION((x, algorithm), struct opie_otpkey *x AND -unsigned algorithm) -{ - UINT4 *results = (UINT4 *)x; - - switch(algorithm) { - case 3: - { - SHA_CTX sha; - UINT4 digest[5]; - SHA1_Init(&sha); - SHA1_Update(&sha, (unsigned char *)x, 8); - SHA1_Final((unsigned char *)digest, &sha); - results[0] = digest[0] ^ digest[2] ^ digest[4]; - results[1] = digest[1] ^ digest[3]; - - /* - * RFC2289 mandates that we convert SHA1 digest from big-endian to little - * see Appendix A. - */ - results[0] = bswap32(results[0]); - results[1] = bswap32(results[1]); - }; - break; - case 4: - { - MD4_CTX mdx; - UINT4 mdx_tmp[4]; - - MD4Init(&mdx); - MD4Update(&mdx, (unsigned char *)x, 8); - MD4Final((unsigned char *)mdx_tmp, &mdx); - results[0] = mdx_tmp[0] ^ mdx_tmp[2]; - results[1] = mdx_tmp[1] ^ mdx_tmp[3]; - }; - break; - case 5: - { - MD5_CTX mdx; - UINT4 mdx_tmp[4]; - - MD5Init(&mdx); - MD5Update(&mdx, (unsigned char *)x, 8); - MD5Final((unsigned char *)mdx_tmp, &mdx); - results[0] = mdx_tmp[0] ^ mdx_tmp[2]; - results[1] = mdx_tmp[1] ^ mdx_tmp[3]; - }; - break; - } -} diff --git a/contrib/opie/libopie/hashlen.c b/contrib/opie/libopie/hashlen.c deleted file mode 100644 index 0d5808c12450..000000000000 --- a/contrib/opie/libopie/hashlen.c +++ /dev/null @@ -1,69 +0,0 @@ -/* hashlen.c: The opiehashlen() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.4. Use struct opie_otpkey, isolate variables. - Created by cmetz for OPIE 2.3. - -$FreeBSD$ -*/ - -#include <sys/endian.h> - -#include "opie_cfg.h" -#include "opie.h" - -#include <sha.h> -#include <md4.h> -#include <md5.h> - -VOIDRET opiehashlen FUNCTION((algorithm, in, out, n), int algorithm AND -VOIDPTR in AND struct opie_otpkey *out AND int n) -{ - UINT4 *results = (UINT4 *)out; - UINT4 mdx_tmp[4]; - - switch(algorithm) { - case 3: { - SHA_CTX sha; - UINT4 digest[5]; - SHA1_Init(&sha); - SHA1_Update(&sha, (unsigned char *)in, n); - SHA1_Final((unsigned char *)digest, &sha); - results[0] = digest[0] ^ digest[2] ^ digest[4]; - results[1] = digest[1] ^ digest[3]; - - /* - * RFC2289 mandates that we convert SHA1 digest from big-endian to little - * see Appendix A. - */ - results[0] = bswap32(results[0]); - results[1] = bswap32(results[1]); - break; - } - case 4: { - MD4_CTX mdx; - MD4Init(&mdx); - MD4Update(&mdx, (unsigned char *)in, n); - MD4Final((unsigned char *)mdx_tmp, &mdx); - results[0] = mdx_tmp[0] ^ mdx_tmp[2]; - results[1] = mdx_tmp[1] ^ mdx_tmp[3]; - break; - } - case 5: { - MD5_CTX mdx; - MD5Init(&mdx); - MD5Update(&mdx, (unsigned char *)in, n); - MD5Final((unsigned char *)mdx_tmp, &mdx); - results[0] = mdx_tmp[0] ^ mdx_tmp[2]; - results[1] = mdx_tmp[1] ^ mdx_tmp[3]; - break; - } - } -} diff --git a/contrib/opie/libopie/insecure.c b/contrib/opie/libopie/insecure.c deleted file mode 100644 index ba2a9dfaeb5a..000000000000 --- a/contrib/opie/libopie/insecure.c +++ /dev/null @@ -1,172 +0,0 @@ -/* insecure.c: The opieinsecure() library function. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.4. Do utmp checks on utmpx systems. - Handle unterminated ut_host. - Modified by cmetz for OPIE 2.31. Fixed a logic bug. Call endut[x]ent(). - Modified by cmetz for OPIE 2.3. Added result caching. Use - __opiegetutmpentry(). Ifdef around ut_host check. Eliminate - unused variable. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Allow IP loopback. DISPLAY and ut_host must match exactly, - not just the part before the colon. Added work-around for - Sun CDE dtterm bug. Leave the environment as it was - found. Use uname(). - Created at NRL for OPIE 2.2 from opiesubr.c. Fixed pointer - assignment that should have been a comparison. - -$FreeBSD$ - -*/ -#include "opie_cfg.h" - -#include <stdio.h> -#include <string.h> -#include <stdlib.h> /* ANSI C standard library */ -#include <sys/param.h> -#include <unistd.h> - -#if DOUTMPX -#include <utmpx.h> -#define utmp utmpx -#define endutent endutxent -#else -#include <utmp.h> -#endif /* DOUTMPX */ - -#if HAVE_SYS_UTSNAME_H -#include <sys/utsname.h> -#endif /* HAVE_SYS_UTSNAME_H */ - -#include "opie.h" - -char *remote_terms[] = { "xterm", "xterms", "kterm", NULL }; - -int opieinsecure FUNCTION_NOARGS -{ -#ifndef NO_INSECURE_CHECK - char *display_name; - char *s; - char *term_name; - int insecure = 0; -#if HAVE_UT_HOST || DOUTMPX - struct utmp utmp; -#endif /* HAVE_UT_HOST || DOUTMPX */ - static int result = -1; - - if (result != -1) - return result; - - if (getenv("SSH_CLIENT") != NULL) - return (result = 0); - display_name = (char *) getenv("DISPLAY"); - term_name = (char *) getenv("TERM"); - - if (display_name) { - insecure = 1; - if (s = strchr(display_name, ':')) { - int n = s - display_name; - if (!n) - insecure = 0; - else { - if (!strncmp("unix", display_name, n)) - insecure = 0; - else if (!strncmp("localhost", display_name, n)) - insecure = 0; - else if (!strncmp("loopback", display_name, n)) - insecure = 0; - else if (!strncmp("127.0.0.1", display_name, n)) - insecure = 0; - else { - struct utsname utsname; - - if (!uname(&utsname)) { - if (!strncmp(utsname.nodename, display_name, n)) - insecure = 0; - else { - if (s = strchr(display_name, '.')) { - int n2 = s - display_name; - if (n < n2) - n2 = n; - if (!strncmp(utsname.nodename, display_name, n2)) - insecure = 0; - } /* endif display_name is '.' */ - } /* endif hostname != display_name */ - } /* endif was able to get hostname */ - } /* endif display_name == UNIX */ - } - } - } /* endif display_name == ":" */ - if (insecure) - return (result = 1); - - /* If no DISPLAY variable exists and TERM=xterm, - then we probably have an xterm executing on a remote system - with an rlogin or telnet to our system. If it were a local - xterm, then the DISPLAY environment variable would - have to exist. rja */ - if (!display_name && term_name) { - int i; - for (i = 0; remote_terms[i]; i++) - if (!strcmp(term_name, remote_terms[i])) - return (result = 1); - }; - -#if HAVE_UT_HOST || DOUTMPX - if (isatty(0)) { - memset(&utmp, 0, sizeof(struct utmp)); - { - int i = __opiegetutmpentry(ttyname(0), &utmp); - endutent(); - if (!i && utmp.ut_host[0]) { - char host[sizeof(utmp.ut_host) + 1]; - insecure = 1; - - strncpy(host, utmp.ut_host, sizeof(utmp.ut_host)); - host[sizeof(utmp.ut_host)] = 0; - - if (s = strchr(host, ':')) { - int n = s - host; - if (!n) - insecure = 0; - else - if (display_name) { - if (!strncmp(host, display_name, n)) - insecure = 0; -#if 1 /* def SOLARIS */ - else - if (s = strchr(host, ' ')) { - *s = ':'; - if (s = strchr(s + 1, ' ')) - *s = '.'; - if (!strncmp(host, display_name, n)) - insecure = 0; - } -#endif /* SOLARIS */ - } - } - } - }; - }; -#endif /* HAVE_UT_HOST || DOUTMPX */ - if (insecure) - return (result = 1); - - return (result = 0); -#else /* NO_INSECURE_CHECK */ - return 0; -#endif /* NO_INSECURE_CHECK */ -} diff --git a/contrib/opie/libopie/keycrunch.c b/contrib/opie/libopie/keycrunch.c deleted file mode 100644 index 2ca57e07656a..000000000000 --- a/contrib/opie/libopie/keycrunch.c +++ /dev/null @@ -1,66 +0,0 @@ -/* keycrunch.c: The opiekeycrunch() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.4. Use struct opie_otpkey for arg. - Created by cmetz for OPIE 2.3 using the old keycrunch.c as a guide. -*/ - -#include "opie_cfg.h" - -#if HAVE_STRING_H -#include <string.h> -#endif /* HAVE_STRING_H */ -#if HAVE_STDLIB_H -#include <stdlib.h> -#endif /* HAVE_STDLIB_H */ -#include <ctype.h> - -#include "opie.h" - -int opiekeycrunch FUNCTION((algorithm, result, seed, secret), int algorithm AND -struct opie_otpkey *result AND char *seed AND char *secret) -{ - int i, rval = -1; - char *c; - - if (!result || !seed || !secret) - return 1; - - i = strlen(seed) + strlen(secret); - if (!(c = malloc(i + 1))) - return -1; - - { - char *c2 = c; - - if (algorithm & 0x10) - while(*c2 = *(secret++)) c2++; - - while(*seed) - if (isspace(*(c2++) = tolower(*(seed++)))) - goto kcret; - - if (!(algorithm & 0x10)) - strcpy(c2, secret); - } - - opiehashlen(algorithm & 0x0f, c, result, i); - rval = 0; - -kcret: - { - char *c2 = c; - while(*c2) - *(c2++) = 0; - } - - free(c); - return rval; -} diff --git a/contrib/opie/libopie/lock.c b/contrib/opie/libopie/lock.c deleted file mode 100644 index 865d270bb527..000000000000 --- a/contrib/opie/libopie/lock.c +++ /dev/null @@ -1,255 +0,0 @@ -/* lock.c: The opielock() library function. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.4. Use snprintf. - Modified by cmetz for OPIE 2.31. Put locks in a separate dir. - Bug fixes. - Modified by cmetz for OPIE 2.3. Do refcounts whether or not we - actually lock. Fixed USER_LOCKING=0 case. - Modified by cmetz for OPIE 2.22. Added reference count for locks. - Changed lock filename/refcount symbol names to better indicate - that they're not user serviceable. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Use "principal" instead of "name" to make it clearer. - Ifdef around some headers, be more careful about allowed - error return values. Check open() return value properly. - Avoid NULL. - Created at NRL for OPIE 2.2 from opiesubr2.c - -$FreeBSD$ -*/ -#include "opie_cfg.h" -#if HAVE_STRING_H -#include <string.h> -#endif /* HAVE_STRING_H */ -#if HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ -#include <sys/stat.h> -#include <syslog.h> -#include <fcntl.h> -#if HAVE_STDLIB_H -#include <stdlib.h> -#endif /* HAVE_STDLIB_H */ -#include <errno.h> -#include "opie.h" - -#if !HAVE_LSTAT -#define lstat(x, y) stat(x, y) -#endif /* !HAVE_LSTAT */ - -int __opie_lockrefcount = 0; -static int do_atexit = 1; - -VOIDRET opiedisableaeh FUNCTION_NOARGS -{ - do_atexit = 0; -} -#if USER_LOCKING -char *__opie_lockfilename = (char *)0; - -/* atexit() handler for opielock() */ -VOIDRET opieunlockaeh FUNCTION_NOARGS -{ - if (__opie_lockfilename) { - __opie_lockrefcount = 0; - opieunlock(); - } -} -#endif /* USER_LOCKING */ - -/* - Serialize (we hope) authentication of user to prevent race conditions. - Creates a lock file with a name of OPIE_LOCK_PREFIX with the user name - appended. This file contains the pid of the lock's owner and a time() - stamp. We use the former to check for dead owners and the latter to - provide an upper bound on the lock duration. If there are any problems, - we assume the lock is bogus. - - The value of this locking and its security implications are still not - completely clear and require further study. - - One could conceivably hack this facility to provide locking of user - accounts after several authentication failures. - - Return -1 on low-level error, 0 if ok, 1 on locking failure. -*/ -int opielock FUNCTION((principal), char *principal) -{ -#if USER_LOCKING - int fh, waits = 0, rval = -1, pid, t, i; - char buffer[128], buffer2[128], *c, *c2; - struct stat statbuf[2]; - - if (getuid() && geteuid()) { -#if DEBUG - syslog(LOG_DEBUG, "opielock: requires superuser priveleges"); -#endif /* DEBUG */ - return -1; - }; - - if (__opie_lockfilename) { - __opie_lockrefcount++; - return 0; - } - - if (!(__opie_lockfilename = (char *)malloc(sizeof(OPIE_LOCK_DIR) + 1 + strlen(principal)))) - return -1; - - strcpy(__opie_lockfilename, OPIE_LOCK_DIR); - - if (mkdir(__opie_lockfilename, 0700) < 0) - if (errno != EEXIST) - return -1; - - if (lstat(__opie_lockfilename, &statbuf[0]) < 0) - return -1; - - if (statbuf[0].st_uid) { -#if DEBUG - syslog(LOG_DEBUG, "opielock: %s isn't owned by the superuser.", __opie_lockfilename); -#endif /* DEBUG */ - return -1; - }; - - if (!S_ISDIR(statbuf[0].st_mode)) { -#if DEBUG - syslog(LOG_DEBUG, "opielock: %s isn't a directory.", __opie_lockfilename); -#endif /* DEBUG */ - return -1; - }; - - if ((statbuf[0].st_mode & 0777) != 00700) { -#if DEBUG - syslog(LOG_DEBUG, "opielock: permissions on %s are not correct.", __opie_lockfilename); -#endif /* DEBUG */ - return -1; - }; - - strcat(__opie_lockfilename, "/"); - strcat(__opie_lockfilename, principal); - - fh = -1; - while (fh < 0) { - if (!lstat(__opie_lockfilename, &statbuf[0])) - if (!S_ISREG(statbuf[0].st_mode)) - goto lockret; - - if ((fh = open(__opie_lockfilename, O_WRONLY | O_CREAT | O_EXCL, 0600)) < 0) { - if (lstat(__opie_lockfilename, &statbuf[1]) < 0) - goto lockret; - if (statbuf[0].st_ino != statbuf[1].st_ino) - goto lockret; - if (statbuf[0].st_mode != statbuf[1].st_mode) - goto lockret; - if ((fh = open(__opie_lockfilename, O_RDONLY, 0600)) < 0) - goto lockret; - if ((i = read(fh, buffer, sizeof(buffer))) <= 0) - goto lockret; - - buffer[sizeof(buffer) - 1] = 0; - buffer[i - 1] = 0; - - if (!(c = strchr(buffer, '\n'))) - break; - - *(c++) = 0; - - if (!(c2 = strchr(c, '\n'))) - break; - - *(c2++) = 0; - - if (!(pid = atoi(buffer))) - break; - - if (!(t = atoi(c))) - break; - - if ((t + OPIE_LOCK_TIMEOUT) < time(0)) - break; - - if (kill(pid, 0)) - break; - - close(fh); - fh = 0; - sleep(1); - if (waits++ > 3) { - rval = 1; - goto lockret; - }; - }; - }; - - if (lstat(__opie_lockfilename, &statbuf[0]) < 0) - goto lockret; - if (fstat(fh, &statbuf[1]) < 0) - goto lockret; - if (!S_ISREG(statbuf[0].st_mode) || (statbuf[0].st_mode != statbuf[1].st_mode) || (statbuf[0].st_ino != statbuf[1].st_ino)) - goto lockret; - - if (snprintf(buffer, sizeof(buffer), "%d\n%d\n", getpid(), time(0)) >= sizeof(buffer)) - goto lockret; - - i = strlen(buffer) + 1; - if (lseek(fh, 0, SEEK_SET)) { - close(fh); - unlink(__opie_lockfilename); - fh = 0; - goto lockret; - }; - if (write(fh, buffer, i) != i) { - close(fh); - unlink(__opie_lockfilename); - fh = 0; - goto lockret; - }; - close(fh); - if ((fh = open(__opie_lockfilename, O_RDWR, 0600)) < 0) { - unlink(__opie_lockfilename); - goto lockret; - }; - if (read(fh, buffer2, i) != i) { - close(fh); - unlink(__opie_lockfilename); - fh = 0; - goto lockret; - }; - close(fh); - if (memcmp(buffer, buffer2, i)) { - unlink(__opie_lockfilename); - goto lockret; - }; - - __opie_lockrefcount++; - rval = 0; - if (do_atexit) - atexit(opieunlockaeh); - -lockret: - if (fh >= 0) - close(fh); - if (!__opie_lockrefcount) { - free (__opie_lockfilename); - __opie_lockfilename = NULL; - }; - return rval; -#else /* USER_LOCKING */ - __opie_lockrefcount++; - return 0; -#endif /* USER_LOCKING */ -} diff --git a/contrib/opie/libopie/login.c b/contrib/opie/libopie/login.c deleted file mode 100644 index bb0f3ae6b2d1..000000000000 --- a/contrib/opie/libopie/login.c +++ /dev/null @@ -1,124 +0,0 @@ -/* login.c: The opielogin() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.4. Add support for ut_id and - ut_syslen. Don't zero-terminate ut_name and ut_host. - Modified by cmetz for OPIE 2.31. If the OS won't tell us where - _PATH_WTMP[X] is, try playing the SVID game, then use - Autoconf-discovered values. Fixed gettimeofday() call - and updwtmpx() call. Call endutxent for utmpx. Added - DISABLE_UTMP. - Created by cmetz for OPIE 2.3. -*/ - -#include "opie_cfg.h" -#include <stdio.h> -#include <sys/types.h> - -#if DOUTMPX -#include <utmpx.h> -#define pututline(x) pututxline(x) -#define endutent endutxent -#define utmp utmpx -#else -#include <utmp.h> -#endif /* DOUTMPX */ - -#if HAVE_STRING_H -#include <string.h> -#endif /* HAVE_STRING_H */ -#include <sys/stat.h> -#if DEBUG -#include <syslog.h> -#include <errno.h> -#endif /* DEBUG */ -#include "opie.h" - -#define IDLEN 4 - -int opielogin FUNCTION((line, name, host), char *line AND char *name AND char *host) -{ - int rval = 0; -#if !DISABLE_UTMP - struct utmp u; - char id[IDLEN + 1] = ""; - - if (__opiegetutmpentry(line, &u)) { -#if DEBUG - syslog(LOG_DEBUG, "opielogin: __opiegetutmpentry(line=%s, &u) failed", line); -#endif /* DEBUG */ - memset(&u, 0, sizeof(struct utmp)); - if (!strncmp(line, "/dev/", 5)) - strncpy(u.ut_line, line + 5, sizeof(u.ut_line)); - else - strncpy(u.ut_line, line, sizeof(u.ut_line)); -#if DEBUG - syslog(LOG_DEBUG, "opielogin: continuing with ut_line=%s", u.ut_line); -#endif /* DEBUG */ - } - -#if DOUTMPX || HAVE_UT_ID - strncpy(id, u.ut_id, sizeof(u.ut_id)); - id[sizeof(id)-1] = 0; -#endif /* DOUTMPX || HAVE_UT_ID */ - -#if HAVE_UT_TYPE && defined(USER_PROCESS) - u.ut_type = USER_PROCESS; -#endif /* HAVE_UT_TYPE && defined(USER_PROCESS) */ -#if HAVE_UT_PID - u.ut_pid = getpid(); -#endif /* HAVE_UT_PID */ - -#if HAVE_UT_NAME - strncpy(u.ut_name, name, sizeof(u.ut_name)); -#else /* HAVE_UT_NAME */ -#error No ut_name field in struct utmp? (Please send in a bug report) -#endif /* HAVE_UT_NAME */ - -#if HAVE_UT_HOST - strncpy(u.ut_host, host, sizeof(u.ut_host)); -#endif /* HAVE_UT_HOST */ -#if DOUTMPX && HAVE_UTX_SYSLEN - u.ut_syslen = strlen(host) + 1; -#endif /* DOUTMPX && HAVE_UT_SYSLEN */ - -#if DOUTMPX -#ifdef HAVE_ONE_ARG_GETTIMEOFDAY - gettimeofday(&u.ut_tv); -#else /* HAVE_ONE_ARG_GETTIMEOFDAY */ - gettimeofday(&u.ut_tv, NULL); -#endif /* HAVE_ONE_ARG_GETTIMEOFDAY */ -#else /* DOUTMPX */ - time(&u.ut_time); -#endif /* DOUTMPX */ - - pututline(&u); - endutent(); - -#if DEBUG - syslog(LOG_DEBUG, "opielogin: utmp suceeded"); -#endif /* DEBUG */ -#endif /* !DISABLE_UTMP */ - -dowtmp: - opielogwtmp(line, name, host, id); - opielogwtmp(NULL, NULL, NULL); - -dosetlogin: -#if HAVE_SETLOGIN - setlogin(name); -#endif /* HAVE_SETLOGIN */ - -#if DEBUG - syslog(LOG_DEBUG, "opielogin: rval=%d", rval); -#endif /* DEBUG */ - - return rval; -} diff --git a/contrib/opie/libopie/logwtmp.c b/contrib/opie/libopie/logwtmp.c deleted file mode 100644 index 873ca9be4b19..000000000000 --- a/contrib/opie/libopie/logwtmp.c +++ /dev/null @@ -1,197 +0,0 @@ -/* logwtmp.c: Put an entry in the wtmp file. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.4. Set process to dead if name is null. - Added support for ut_id and ut_syslen. - Modified by cmetz for OPIE 2.32. Don't leave line=NULL, skip - past /dev/ in line. Fill in ut_host on systems with UTMPX and - ut_host. - Modified by cmetz for OPIE 2.31. Move wtmp log functions here, to - improve portability. Added DISABLE_WTMP. - Modified by cmetz for OPIE 2.22. Call gettimeofday() properly. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Ifdef around some headers. Added file close hook. - Modified at NRL for OPIE 2.1. Set process type for HPUX. - Modified at NRL for OPIE 2.0. - Originally from BSD. -*/ -/* - * Copyright (c) 1988 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "opie_cfg.h" - -#include <sys/types.h> -#if HAVE_SYS_TIME_H -#include <sys/time.h> -#endif /* HAVE_SYS_TIME_H */ -#include <sys/stat.h> -#include <fcntl.h> -#include <utmp.h> -#if HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ -#if HAVE_STRING_H -#include <string.h> -#endif /* HAVE_STRING_H */ - -#include "opie.h" - -static int fd = -1; - -#if DOUTMPX -static int fdx = -1; -#include <utmpx.h> -#endif /* DOUTMPX */ - -#ifndef _PATH_WTMP -#ifdef WTMP_FILE -#define _PATH_WTMP WTMP_FILE -#else /* WTMP_FILE */ -#ifdef PATH_WTMP_AC -#define _PATH_WTMP PATH_WTMP_AC -#endif /* PATH_WTMP_AC */ -#endif /* WTMP_FILE */ -#endif /* _PATH_WTMP */ - -#ifndef _PATH_WTMPX -#ifdef WTMPX_FILE -#define _PATH_WTMPX WTMPX_FILE -#else /* WTMPX_FILE */ -#ifdef PATH_WTMPX_AC -#define _PATH_WTMPX PATH_WTMPX_AC -#endif /* PATH_WTMPX_AC */ -#endif /* WTMPX_FILE */ -#endif /* _PATH_WTMPX */ - -/* - * Modified version of logwtmp that holds wtmp file open - * after first call, for use with ftp (which may chroot - * after login, but before logout). - */ -VOIDRET opielogwtmp FUNCTION((line, name, host), char *line AND char *name AND char *host AND char *id) -{ -#if !DISABLE_WTMP - struct utmp ut; - -#if DOUTMPX && defined(_PATH_WTMPX) - struct utmpx utx; -#endif /* DOUTMPX && defined(_PATH_WTMPX) */ - struct stat buf; - - memset(&ut, 0, sizeof(struct utmp)); - - if (!line) { - close(fd); -#if DOUTMPX && defined(_PATH_WTMPX) - close(fdx); -#endif /* DOUTMPX && defined(_PATH_WTMPX) */ - line = ""; - } else - if (!strncmp(line, "/dev/", 5)) - line += 5; - - if (fd < 0 && (fd = open(_PATH_WTMP, O_WRONLY | O_APPEND, 0)) < 0) - return; - if (fstat(fd, &buf) == 0) { -#if HAVE_UT_TYPE && defined(USER_PROCESS) - if (name && *name) - ut.ut_type = USER_PROCESS; - else - ut.ut_type = DEAD_PROCESS; -#endif /* HAVE_UT_TYPE && defined(USER_PROCESS) */ -#if HAVE_UT_ID - if (id) - strncpy(ut.ut_id, id, sizeof(ut.ut_id)); -#endif /* HAVE_UT_ID */ -#if HAVE_UT_PID - ut.ut_pid = getpid(); -#endif /* HAVE_UT_PID */ - strncpy(ut.ut_line, line, sizeof(ut.ut_line)); - strncpy(ut.ut_name, name, sizeof(ut.ut_name)); -#if HAVE_UT_HOST - strncpy(ut.ut_host, host, sizeof(ut.ut_host)); -#endif /* HAVE_UT_HOST */ - time(&ut.ut_time); - if (write(fd, (char *) &ut, sizeof(struct utmp)) != - sizeof(struct utmp)) - ftruncate(fd, buf.st_size); - } - -#if DOUTMPX && defined(_PATH_WTMPX) - memset(&utx, 0, sizeof(struct utmpx)); - - if (fdx < 0 && (fdx = open(_PATH_WTMPX, O_WRONLY | O_APPEND, 0)) < 0) - return; - if (fstat(fdx, &buf) == 0) { - strncpy(utx.ut_line, line, sizeof(utx.ut_line)); - strncpy(utx.ut_name, name, sizeof(utx.ut_name)); - strncpy(utx.ut_host, host, sizeof(utx.ut_host)); -#ifdef USER_PROCESS - if (name && *name) - utx.ut_type = USER_PROCESS; - else - utx.ut_type = DEAD_PROCESS; -#endif /* USER_PROCESS */ - if (id) - strncpy(utx.ut_id, id, sizeof(utx.ut_id)); - utx.ut_pid = getpid(); -#if HAVE_UTX_SYSLEN - utx.ut_syslen = strlen(utx.ut_host) + 1; -#endif /* HAVE_UTX_SYSLEN */ -#if HAVE_GETTIMEOFDAY -#if HAVE_ONE_ARG_GETTIMEOFDAY - gettimeofday(&utx.ut_tv); -#else /* HAVE_ONE_ARG_GETTIMEOFDAY */ - gettimeofday(&utx.ut_tv, NULL); -#endif /* HAVE_ONE_ARG_GETTIMEOFDAY */ -#endif /* HAVE_GETTIMEOFDAY */ - if (write(fdx, (char *) &utx, sizeof(struct utmpx)) != sizeof(struct utmpx)) - ftruncate(fdx, buf.st_size); - } -#endif /* DOUTMPX && defined(_PATH_WTMPX) */ -#endif /* !DISABLE_WTMP */ -} diff --git a/contrib/opie/libopie/lookup.c b/contrib/opie/libopie/lookup.c deleted file mode 100644 index de6d61477421..000000000000 --- a/contrib/opie/libopie/lookup.c +++ /dev/null @@ -1,31 +0,0 @@ -/* lookup.c: The opielookup() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Created by cmetz for OPIE 2.3 (re-write). -*/ - -#include "opie_cfg.h" -#include <stdio.h> -#include <string.h> -#include "opie.h" - -int opielookup FUNCTION((opie, principal), struct opie *opie AND char *principal) -{ - int i; - - memset(opie, 0, sizeof(struct opie)); - opie->opie_principal = principal; - - if (i = __opiereadrec(opie)) - return i; - - return (opie->opie_flags & __OPIE_FLAGS_RW) ? 0 : 2; -} - diff --git a/contrib/opie/libopie/md4c.c b/contrib/opie/libopie/md4c.c deleted file mode 100644 index f6adc6756c21..000000000000 --- a/contrib/opie/libopie/md4c.c +++ /dev/null @@ -1,267 +0,0 @@ -/* md4c.c: "RSA Data Security, Inc. MD4 Message-Digest Algorithm" - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Use the real memcpy() and memset(). Use unified context - structure. - Modified at NRL for OPIE 2.0. - Originally from RSADSI reference code. -*/ -/* Copyright (C) 1990-2, RSA Data Security, Inc. All rights reserved. - - License to copy and use this software is granted provided that it - is identified as the "RSA Data Security, Inc. MD4 Message-Digest - Algorithm" in all material mentioning or referencing this software - or this function. - - License is also granted to make and use derivative works provided - that such works are identified as "derived from the RSA Data - Security, Inc. MD4 Message-Digest Algorithm" in all material - mentioning or referencing the derived work. - - RSA Data Security, Inc. makes no representations concerning either - the merchantability of this software or the suitability of this - software for any particular purpose. It is provided "as is" - without express or implied warranty of any kind. - - These notices must be retained in any copies of any part of this - documentation and/or software. - */ - -#include "opie_cfg.h" -#include "opie.h" - -/* Constants for MD4Transform routine. - */ -#define S11 3 -#define S12 7 -#define S13 11 -#define S14 19 -#define S21 3 -#define S22 5 -#define S23 9 -#define S24 13 -#define S31 3 -#define S32 9 -#define S33 11 -#define S34 15 - -static VOIDRET MD4Transform __P((UINT4[4], unsigned char[64])); -static VOIDRET Encode __P((unsigned char *, UINT4 *, unsigned int)); -static VOIDRET Decode __P((UINT4 *, unsigned char *, unsigned int)); - -static unsigned char PADDING[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* F, G and H are basic MD4 functions. - */ -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) - -/* ROTATE_LEFT rotates x left n bits. - */ -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) - -/* FF, GG and HH are transformations for rounds 1, 2 and 3 */ -/* Rotation is separate from addition to prevent recomputation */ - -#define FF(a, b, c, d, x, s) { \ - (a) += F ((b), (c), (d)) + (x); \ - (a) = ROTATE_LEFT ((a), (s)); \ - } -#define GG(a, b, c, d, x, s) { \ - (a) += G ((b), (c), (d)) + (x) + (UINT4)0x5a827999; \ - (a) = ROTATE_LEFT ((a), (s)); \ - } -#define HH(a, b, c, d, x, s) { \ - (a) += H ((b), (c), (d)) + (x) + (UINT4)0x6ed9eba1; \ - (a) = ROTATE_LEFT ((a), (s)); \ - } - -/* MD4 initialization. Begins an MD4 operation, writing a new context. - */ -VOIDRET opiemd4init FUNCTION((context), struct opiemdx_ctx *context) -{ - context->count[0] = context->count[1] = 0; - - /* Load magic initialization constants. */ - context->state[0] = 0x67452301; - context->state[1] = 0xefcdab89; - context->state[2] = 0x98badcfe; - context->state[3] = 0x10325476; -} - -/* MD4 block update operation. Continues an MD4 message-digest - operation, processing another message block, and updating the - context. - */ -VOIDRET opiemd4update FUNCTION((context, input, inputLen), struct opiemdx_ctx *context AND unsigned char *input AND unsigned int inputLen) -{ - unsigned int i, index, partLen; - - /* Compute number of bytes mod 64 */ - index = (unsigned int) ((context->count[0] >> 3) & 0x3F); - /* Update number of bits */ - if ((context->count[0] += ((UINT4) inputLen << 3)) - < ((UINT4) inputLen << 3)) - context->count[1]++; - context->count[1] += ((UINT4) inputLen >> 29); - - partLen = 64 - index; - - /* Transform as many times as possible. */ - if (inputLen >= partLen) { - memcpy((POINTER) & context->buffer[index], (POINTER) input, partLen); - MD4Transform(context->state, context->buffer); - - for (i = partLen; i + 63 < inputLen; i += 64) - MD4Transform(context->state, &input[i]); - - index = 0; - } else - i = 0; - - /* Buffer remaining input */ - memcpy((POINTER) & context->buffer[index], (POINTER) & input[i], inputLen - i); -} - -/* MD4 finalization. Ends an MD4 message-digest operation, writing the - the message digest and zeroizing the context. - */ -VOIDRET opiemd4final FUNCTION((digest, context), unsigned char *digest AND struct opiemdx_ctx *context) -{ - unsigned char bits[8]; - unsigned int index, padLen; - - /* Save number of bits */ - Encode(bits, context->count, 8); - - /* Pad out to 56 mod 64. */ - index = (unsigned int) ((context->count[0] >> 3) & 0x3f); - padLen = (index < 56) ? (56 - index) : (120 - index); - opiemd4update(context, PADDING, padLen); - - /* Append length (before padding) */ - opiemd4update(context, bits, 8); - /* Store state in digest */ - Encode(digest, context->state, 16); - - /* Zeroize sensitive information. */ - memset((POINTER) context, 0, sizeof(*context)); -} - -/* MD4 basic transformation. Transforms state based on block. - */ -static VOIDRET MD4Transform FUNCTION((state, block), UINT4 state[4] AND unsigned char block[64]) -{ - UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; - - Decode(x, block, 64); - - /* Round 1 */ - FF(a, b, c, d, x[0], S11); /* 1 */ - FF(d, a, b, c, x[1], S12); /* 2 */ - FF(c, d, a, b, x[2], S13); /* 3 */ - FF(b, c, d, a, x[3], S14); /* 4 */ - FF(a, b, c, d, x[4], S11); /* 5 */ - FF(d, a, b, c, x[5], S12); /* 6 */ - FF(c, d, a, b, x[6], S13); /* 7 */ - FF(b, c, d, a, x[7], S14); /* 8 */ - FF(a, b, c, d, x[8], S11); /* 9 */ - FF(d, a, b, c, x[9], S12); /* 10 */ - FF(c, d, a, b, x[10], S13); /* 11 */ - FF(b, c, d, a, x[11], S14); /* 12 */ - FF(a, b, c, d, x[12], S11); /* 13 */ - FF(d, a, b, c, x[13], S12); /* 14 */ - FF(c, d, a, b, x[14], S13); /* 15 */ - FF(b, c, d, a, x[15], S14); /* 16 */ - - /* Round 2 */ - GG(a, b, c, d, x[0], S21); /* 17 */ - GG(d, a, b, c, x[4], S22); /* 18 */ - GG(c, d, a, b, x[8], S23); /* 19 */ - GG(b, c, d, a, x[12], S24); /* 20 */ - GG(a, b, c, d, x[1], S21); /* 21 */ - GG(d, a, b, c, x[5], S22); /* 22 */ - GG(c, d, a, b, x[9], S23); /* 23 */ - GG(b, c, d, a, x[13], S24); /* 24 */ - GG(a, b, c, d, x[2], S21); /* 25 */ - GG(d, a, b, c, x[6], S22); /* 26 */ - GG(c, d, a, b, x[10], S23); /* 27 */ - GG(b, c, d, a, x[14], S24); /* 28 */ - GG(a, b, c, d, x[3], S21); /* 29 */ - GG(d, a, b, c, x[7], S22); /* 30 */ - GG(c, d, a, b, x[11], S23); /* 31 */ - GG(b, c, d, a, x[15], S24); /* 32 */ - - /* Round 3 */ - HH(a, b, c, d, x[0], S31); /* 33 */ - HH(d, a, b, c, x[8], S32); /* 34 */ - HH(c, d, a, b, x[4], S33); /* 35 */ - HH(b, c, d, a, x[12], S34); /* 36 */ - HH(a, b, c, d, x[2], S31); /* 37 */ - HH(d, a, b, c, x[10], S32); /* 38 */ - HH(c, d, a, b, x[6], S33); /* 39 */ - HH(b, c, d, a, x[14], S34); /* 40 */ - HH(a, b, c, d, x[1], S31); /* 41 */ - HH(d, a, b, c, x[9], S32); /* 42 */ - HH(c, d, a, b, x[5], S33); /* 43 */ - HH(b, c, d, a, x[13], S34); /* 44 */ - HH(a, b, c, d, x[3], S31); /* 45 */ - HH(d, a, b, c, x[11], S32); /* 46 */ - HH(c, d, a, b, x[7], S33); /* 47 */ - HH(b, c, d, a, x[15], S34); /* 48 */ - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - - /* Zeroize sensitive information. */ - memset((POINTER) x, 0, sizeof(x)); -} - -/* Encodes input (UINT4) into output (unsigned char). Assumes len is - a multiple of 4. - */ -static VOIDRET Encode FUNCTION((output, input, len), unsigned char *output AND UINT4 *input AND unsigned int len) -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) { - output[j] = (unsigned char) (input[i] & 0xff); - output[j + 1] = (unsigned char) ((input[i] >> 8) & 0xff); - output[j + 2] = (unsigned char) ((input[i] >> 16) & 0xff); - output[j + 3] = (unsigned char) ((input[i] >> 24) & 0xff); - } -} - -/* Decodes input (unsigned char) into output (UINT4). Assumes len is - a multiple of 4. - */ -static VOIDRET Decode FUNCTION((output, input, len), UINT4 *output AND unsigned char *input AND unsigned int len) -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) - output[i] = ((UINT4) input[j]) | (((UINT4) input[j + 1]) << 8) | - (((UINT4) input[j + 2]) << 16) | (((UINT4) input[j + 3]) << 24); -} diff --git a/contrib/opie/libopie/md5c.c b/contrib/opie/libopie/md5c.c deleted file mode 100644 index cdd21e04489a..000000000000 --- a/contrib/opie/libopie/md5c.c +++ /dev/null @@ -1,304 +0,0 @@ -/* md5c.c: "RSA Data Security, Inc. MD5 Message-Digest Algorithm" - "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.3. Changed PTR to VOIDPTR. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Don't play macro games with memset/memcpy. Renamed exported - functions to avoid conflicts. Use unified context structure. - Modified at NRL for OPIE 2.1. Minor autoconf mods. - Modified at NRL for OPIE 2.0. - Originally from RSADSI reference code. -*/ -/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All - rights reserved. - - License to copy and use this software is granted provided that it - is identified as the "RSA Data Security, Inc. MD5 Message-Digest - Algorithm" in all material mentioning or referencing this software - or this function. - - License is also granted to make and use derivative works provided - that such works are identified as "derived from the RSA Data - Security, Inc. MD5 Message-Digest Algorithm" in all material - mentioning or referencing the derived work. - - RSA Data Security, Inc. makes no representations concerning either - the merchantability of this software or the suitability of this - software for any particular purpose. It is provided "as is" - without express or implied warranty of any kind. - - These notices must be retained in any copies of any part of this - documentation and/or software. - */ - -#include "opie_cfg.h" -#include "opie.h" - -/* Constants for MD5Transform routine. - */ -#define S11 7 -#define S12 12 -#define S13 17 -#define S14 22 -#define S21 5 -#define S22 9 -#define S23 14 -#define S24 20 -#define S31 4 -#define S32 11 -#define S33 16 -#define S34 23 -#define S41 6 -#define S42 10 -#define S43 15 -#define S44 21 - -static VOIDRET MD5Transform __P((UINT4[4], unsigned char[64])); - -static unsigned char PADDING[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* - * Encodes input (UINT4) into output (unsigned char). - * Assumes len is a multiple of 4. - */ -static VOIDRET EEncode FUNCTION((output, input, len), unsigned char *output AND UINT4 *input AND unsigned int len) -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) { - output[j] = (unsigned char) (input[i] & 0xff); - output[j + 1] = (unsigned char) ((input[i] >> 8) & 0xff); - output[j + 2] = (unsigned char) ((input[i] >> 16) & 0xff); - output[j + 3] = (unsigned char) ((input[i] >> 24) & 0xff); - } -} - -/* - * Decodes input (unsigned char) into output (UINT4). - * Assumes len is a multiple of 4. - */ -static VOIDRET EDecode FUNCTION((output, input, len), UINT4 *output AND unsigned char *input AND unsigned int len) -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) - output[i] = ((UINT4) input[j]) | (((UINT4) input[j + 1]) << 8) | - (((UINT4) input[j + 2]) << 16) | (((UINT4) input[j + 3]) << 24); -} - -/* F, G, H and I are basic MD5 functions. */ -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) -#define I(x, y, z) ((y) ^ ((x) | (~z))) - -/* ROTATE_LEFT rotates x left n bits. */ -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) - -/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. - Rotation is separate from addition to prevent recomputation. */ - -#define FF(a, b, c, d, x, s, ac) { \ - (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } - -#define GG(a, b, c, d, x, s, ac) { \ - (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } - -#define HH(a, b, c, d, x, s, ac) { \ - (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } - -#define II(a, b, c, d, x, s, ac) { \ - (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } - -/* MD5 initialization. Begins an MD5 operation, writing a new context. */ -VOIDRET opiemd5init FUNCTION((context), struct opiemdx_ctx *context) -{ - context->count[0] = context->count[1] = 0; - /* Load magic initialization constants. */ - context->state[0] = 0x67452301; - context->state[1] = 0xefcdab89; - context->state[2] = 0x98badcfe; - context->state[3] = 0x10325476; -} - -/* - * MD5 block update operation. Continues an MD5 message-digest - * operation, processing another message block, and updating the - * context. - */ -VOIDRET opiemd5update FUNCTION((context, input, inputLen), struct opiemdx_ctx *context AND unsigned char *input AND unsigned int inputLen) -{ - unsigned int i, index, partLen; - - /* Compute number of bytes mod 64 */ - index = (unsigned int) ((context->count[0] >> 3) & 0x3F); - - /* Update number of bits */ - if ((context->count[0] += ((UINT4) inputLen << 3)) < ((UINT4) inputLen << 3)) - context->count[1]++; - - context->count[1] += ((UINT4) inputLen >> 29); - partLen = 64 - index; - - /* Transform as many times as possible. */ - if (inputLen >= partLen) { - memcpy((VOIDPTR)&context->buffer[index], (VOIDPTR)input, partLen); - MD5Transform(context->state, context->buffer); - - for (i = partLen; i + 63 < inputLen; i += 64) - MD5Transform(context->state, &input[i]); - - index = 0; - } else - i = 0; - - /* Buffer remaining input */ - memcpy((VOIDPTR) & context->buffer[index], - (VOIDPTR) & input[i], - inputLen - i); -} - -/* MD5 finalization. Ends an MD5 message-digest operation, writing the - the message digest and zeroizing the context. - */ -VOIDRET opiemd5final FUNCTION((digest, context), unsigned char *digest AND struct opiemdx_ctx *context) -{ - unsigned char bits[8]; - unsigned int index, padLen; - - /* Save number of bits */ - EEncode(bits, context->count, 8); - - /* Pad out to 56 mod 64. */ - index = (unsigned int) ((context->count[0] >> 3) & 0x3f); - padLen = (index < 56) ? (56 - index) : (120 - index); - opiemd5update(context, PADDING, padLen); - - /* Append length (before padding) */ - opiemd5update(context, bits, 8); - - /* Store state in digest */ - EEncode(digest, context->state, 16); - - /* Zeroize sensitive information. */ - memset((VOIDPTR) context, 0, sizeof(*context)); -} - -/* MD5 basic transformation. Transforms state based on block. */ -static VOIDRET MD5Transform FUNCTION((state, block), UINT4 state[4] AND unsigned char block[64]) -{ - UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; - - EDecode(x, block, 64); - - /* Round 1 */ - FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */ - FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */ - FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */ - FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */ - FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */ - FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */ - FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */ - FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */ - FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */ - FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */ - FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ - FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ - FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ - FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ - FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ - FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ - - /* Round 2 */ - GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */ - GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */ - GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ - GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */ - GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */ - GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */ - GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ - GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */ - GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */ - GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ - GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */ - GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */ - GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ - GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */ - GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */ - GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ - - /* Round 3 */ - HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */ - HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */ - HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ - HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ - HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */ - HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */ - HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */ - HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ - HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ - HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */ - HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */ - HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */ - HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */ - HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ - HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ - HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */ - - /* Round 4 */ - II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */ - II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */ - II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ - II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */ - II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ - II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */ - II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ - II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */ - II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */ - II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ - II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */ - II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ - II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */ - II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ - II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */ - II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */ - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - - /* Zeroize sensitive information. */ - memset((VOIDPTR)x, 0, sizeof(x)); -} diff --git a/contrib/opie/libopie/newseed.c b/contrib/opie/libopie/newseed.c deleted file mode 100644 index 771a2abcfd4b..000000000000 --- a/contrib/opie/libopie/newseed.c +++ /dev/null @@ -1,96 +0,0 @@ -/* newseed.c: The opienewseed() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.4. Greatly simplified increment. Now does - not add digits. Reformatted the code. - Modified by cmetz for OPIE 2.32. Added syslog.h if DEBUG. - Modified by cmetz for OPIE 2.31. Added time.h. - Created by cmetz for OPIE 2.22. - -$FreeBSD$ -*/ - -#include "opie_cfg.h" -#ifndef HAVE_TIME_H -#define HAVE_TIME_H 1 -#endif -#if HAVE_TIME_H -#include <time.h> -#endif /* HAVE_TIME_H */ -#if HAVE_STRING_H -#include <string.h> -#endif /* HAVE_STRING_H */ -#include <ctype.h> -#if HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ -#if HAVE_SYS_UTSNAME_H -#include <sys/utsname.h> -#endif /* HAVE_SYS_UTSNAME_H */ -#include <errno.h> -#if DEBUG -#include <syslog.h> -#endif /* DEBUG */ -#include <stdio.h> -#include <stdlib.h> -#include "opie.h" - -int opienewseed FUNCTION((seed), char *seed) -{ - if (!seed) - return -1; - - if (seed[0]) { - char *c; - unsigned int i, max; - - if ((i = strlen(seed)) > OPIE_SEED_MAX) - i = OPIE_SEED_MAX; - - for (c = seed + i - 1, max = 1; - (c >= seed) && isdigit(*c); c--) - max *= 10; - - if ((i = strtoul(++c, (char **)0, 10)) < max) { - if (++i >= max) - i = 1; - - sprintf(c, "%d", i); - return 0; - } - } - - { - time_t now; - - time(&now); - srand(now); - } - - { - struct utsname utsname; - - if (uname(&utsname) < 0) { -#if DEBUG - syslog(LOG_DEBUG, "uname: %s(%d)", strerror(errno), - errno); -#endif /* DEBUG */ - utsname.nodename[0] = 'k'; - utsname.nodename[1] = 'e'; - } - utsname.nodename[2] = 0; - - if (snprintf(seed, OPIE_SEED_MAX+1, "%s%04d", utsname.nodename, - (rand() % 9999) + 1) >= OPIE_SEED_MAX+1) - return -1; - return 0; - } -} - diff --git a/contrib/opie/libopie/open.c b/contrib/opie/libopie/open.c deleted file mode 100644 index c0c76c20fab3..000000000000 --- a/contrib/opie/libopie/open.c +++ /dev/null @@ -1,77 +0,0 @@ -/* open.c: The __opieopen() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.4. More portable way to get the mode - string for fopen. - Created by cmetz for OPIE 2.3. -*/ -#include "opie_cfg.h" - -#include <stdio.h> -#include <sys/types.h> -#if HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ -#include <sys/stat.h> -#include <errno.h> - -#include "opie.h" - -#if !HAVE_LSTAT -#define lstat(x, y) stat(x, y) -#endif /* !HAVE_LSTAT */ - -FILE *__opieopen FUNCTION((file, rw, mode), char *file AND int rw AND int mode) -{ - FILE *f; - struct stat st; - - if (lstat(file, &st)) { - if (errno != ENOENT) - return NULL; - - if (!(f = fopen(file, "w"))) - return NULL; - - fclose(f); - - if (chmod(file, mode)) - return NULL; - - if (lstat(file, &st)) - return NULL; - } - - if (!S_ISREG(st.st_mode)) - return NULL; - - { - char *fmode; - - switch(rw) { - case 0: - fmode = "r"; - break; - case 1: - fmode = "r+"; - break; - case 2: - fmode = "a"; - break; - default: - return NULL; - }; - - if (!(f = fopen(file, fmode))) - return NULL; - } - - return f; -} diff --git a/contrib/opie/libopie/parsechallenge.c b/contrib/opie/libopie/parsechallenge.c deleted file mode 100644 index fe60ea73768b..000000000000 --- a/contrib/opie/libopie/parsechallenge.c +++ /dev/null @@ -1,82 +0,0 @@ -/* parsechallenge.c: The __opieparsechallenge() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.4. Use OPIE_SEQUENCE_MAX, check for - sequence number of zero. - Modified by cmetz for OPIE 2.32. Check for extended response sets. - Change prefix to double underscore. - Created by cmetz for OPIE 2.3 using generator.c as a guide. -*/ - -#include "opie_cfg.h" -#if HAVE_STRING_H -#include <string.h> -#endif /* HAVE_STRING_H */ -#include <ctype.h> -#include <stdlib.h> -#include "opie.h" - -struct algorithm { - char *name; - int num; -}; - -static struct algorithm algorithms[] = { - { "md5", 5 }, - { "md4", 4 }, - { "sha1", 3 }, - { NULL, 0 }, -}; - -int __opieparsechallenge FUNCTION((buffer, algorithm, sequence, seed, exts), char *buffer AND int *algorithm AND int *sequence AND char **seed AND int *exts) -{ - char *c; - - if (!(c = strchr(buffer, ' '))) - return 1; - - { - struct algorithm *a; - - for (a = algorithms; a->name && strncmp(buffer, a->name, (int)(c - buffer)); a++); - if (!a->name) - return -1; - - *algorithm = a->num; - } - - if (((*sequence = strtoul(++c, &c, 10)) > OPIE_SEQUENCE_MAX) || !*sequence) - return -1; - - while(*c && isspace(*c)) c++; - if (!*c) - return -1; - - buffer = c; - while(*c && !isspace(*c)) c++; - - { - int i = (int)(c - buffer); - - if ((i > OPIE_SEED_MAX) || (i < OPIE_SEED_MIN)) - return -1; - } - - *seed = buffer; - *(c++) = 0; - - while(*c && !isspace(*c)) c++; - if (*c && !strncmp(c, "ext", 3)) - *exts = 1; - else - *exts = 0; - - return 0; -} diff --git a/contrib/opie/libopie/passcheck.c b/contrib/opie/libopie/passcheck.c deleted file mode 100644 index 140b8fb2638d..000000000000 --- a/contrib/opie/libopie/passcheck.c +++ /dev/null @@ -1,50 +0,0 @@ -/* passcheck.c: The opiepasscheck() library function. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.3. OPIE_PASS_{MIN,MAX} changed to - OPIE_SECRET_{MIN,MAX}. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Created at NRL for OPIE 2.2 from opiesubr.c. -*/ -#include "opie_cfg.h" - -#include <stdio.h> -#include <string.h> - -#include "opie.h" - -/* - Applies "good password" rules to the secret pass phrase. - - We currently implement the following: - - Passwords must be at least OPIE_SECRET_MIN (10) characters long. - Passwords must be at most OPIE_SECRET_MAX (127) characters long. - - N.B.: Passing NULL pointers to this function is a bad idea. -*/ -int opiepasscheck FUNCTION((secret), char *secret) -{ - int len = strlen(secret); - - if (len < OPIE_SECRET_MIN) - return 1; - - if (len > OPIE_SECRET_MAX) - return 1; - - return 0; -} diff --git a/contrib/opie/libopie/passwd.c b/contrib/opie/libopie/passwd.c deleted file mode 100644 index 0ee050334fda..000000000000 --- a/contrib/opie/libopie/passwd.c +++ /dev/null @@ -1,76 +0,0 @@ -/* passwd.c: The opiepasswd() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.32. Renamed mode to flags. Made flag - values symbolic constants. Added a flag for insecure override - support. - Modified by cmetz for OPIE 2.31. Removed active attack protection - support. - Modified by cmetz for OPIE 2.3. Split most of the function off - and turned this into a front-end for the new __opiewriterec(). - Added code to compute the key from the secret. Use the opie_ - prefix. Use new opieatob8() and opiebtoa8() return values. - Created by cmetz for OPIE 2.22. -*/ - -#include <string.h> -#include "opie_cfg.h" -#include "opie.h" - -int opiepasswd FUNCTION((old, flags, principal, n, seed, ks), struct opie *old AND int flags AND char *principal AND int n AND char *seed AND char *ks) -{ - int i; - struct opie opie; - - if ((flags & OPIEPASSWD_CONSOLE) && opieinsecure()) -#if INSECURE_OVERRIDE - if (!(flags & OPIEPASSWD_FORCE)) -#endif /* INSECURE_OVERRIDE */ - return -1; - - memset(&opie, 0, sizeof(struct opie)); - - if (old) { - opie.opie_flags = old->opie_flags; - opie.opie_recstart = old->opie_recstart; - } - - opie.opie_principal = principal; - opie.opie_n = n; - opie.opie_seed = seed; - - if (ks) { - struct opie_otpkey key; - - if (flags & OPIEPASSWD_CONSOLE) { - if (opiekeycrunch(MDX, &key, seed, ks)) - return -1; - for (i = n; i; i--) - opiehash(&key, MDX); - if (!(opie.opie_val = opiebtoa8(opie.opie_buf, &key))) - return -1; - } else { - if ((opieetob(&key, ks) != 1) && !opieatob8(&key, ks)) - return 1; - if (!(opie.opie_val = opiebtoa8(opie.opie_buf, &key))) - return 1; - } - } - - if (opielock(principal)) - return -1; - - i = __opiewriterec(&opie); - - if (opieunlock()) - return -1; - - return i; -} diff --git a/contrib/opie/libopie/randomchallenge.c b/contrib/opie/libopie/randomchallenge.c deleted file mode 100644 index c1236b9786f5..000000000000 --- a/contrib/opie/libopie/randomchallenge.c +++ /dev/null @@ -1,50 +0,0 @@ -/* randomchallenge.c: The opierandomchallenge() library function. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.4. Use snprintf(). - Modified by cmetz for OPIE 2.32. Initialize algids[] with 0s - instead of NULL. - Modified by cmetz for OPIE 2.3. Add sha support. - Modified by cmetz for OPIE 2.22. Don't include stdio.h. - Use opienewseed(). Don't include unneeded headers. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Changed use of gethostname() to uname(). Ifdefed around some - headers. - Created at NRL for OPIE 2.2 from opiesubr2.c -*/ - -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include "opie_cfg.h" -#include "opie.h" - -static char *algids[] = { 0, 0, 0, "sha1", "md4", "md5" }; - -/* Generate a random challenge */ -/* This could grow into quite a monster, really. Random is good enough for - most situations; it is certainly better than a fixed string */ -VOIDRET opierandomchallenge FUNCTION((prompt), char *prompt) -{ - char buf[OPIE_SEED_MAX+1]; - - buf[0] = 0; - if (opienewseed(buf)) - strcpy(buf, "ke4452"); - - snprintf(prompt, OPIE_CHALLENGE_MAX+1, "otp-%s %d %s ext", algids[MDX], - (rand() % 499) + 1, buf); -} diff --git a/contrib/opie/libopie/readpass.c b/contrib/opie/libopie/readpass.c deleted file mode 100644 index bd24b02a4de0..000000000000 --- a/contrib/opie/libopie/readpass.c +++ /dev/null @@ -1,315 +0,0 @@ -/* readpass.c: The opiereadpass() library function. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.31. Use usleep() to delay after setting - the terminal attributes; this might help certain buggy - systems. - Modified by cmetz for OPIE 2.3. Use TCSAFLUSH always. - Modified by cmetz for OPIE 2.22. Replaced echo w/ flags. - Really use FUNCTION. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Flush extraneous characters up to eol. Handle gobs of possible - erase and kill keys if on a terminal. To do so, use RAW - terminal I/O and handle echo ourselves. (should also help - DOS et al portability). Fixed include order. Re-did MSDOS - and OS/2 includes. Set up VMIN and VTIME. Added some non-UNIX - portability cruft. Limit backspacing and killing. In terminal - mode, eat random other control characters. Added eof handling. - Created at NRL for OPIE 2.2 from opiesubr.c. Change opiestrip_crlf to - opiestripcrlf. Don't strip to seven bits. -*/ -#include "opie_cfg.h" - -#include <stdio.h> -#include <string.h> -#include <stdlib.h> /* ANSI C standard library */ - -#ifdef unix -#include <fcntl.h> /* POSIX file control function headers */ -#include <termios.h> /* POSIX Terminal I/O functions */ -#if HAVE_UNISTD_H -#include <unistd.h> /* POSIX standard definitions */ -#endif /* HAVE_UNISTD_H */ -#include <signal.h> -#include <setjmp.h> -#endif /* unix */ - -#ifdef __MSDOS__ -#include <dos.h> -#endif /* __MSDOS__ */ - -#ifdef __OS2__ -#define INCL_KBD -#include <os2.h> -#include <io.h> -#endif /* __OS2__ */ - -#include "opie.h" - -#define CONTROL(x) (x - 64) - -char *bsseq = "\b \b"; - -#ifdef unix -static jmp_buf jmpbuf; - -static VOIDRET catch FUNCTION((i), int i) -{ - longjmp(jmpbuf, 1); -} -#endif /* unix */ - -char *opiereadpass FUNCTION((buf, len, flags), char *buf AND int len AND int flags) -{ -#ifdef unix - struct termios attr, orig_attr; -#endif /* unix */ - char erase[5]; - char kill[4]; - char eof[4]; - - memset(erase, 0, sizeof(erase)); - memset(kill, 0, sizeof(kill)); - memset(eof, 0, sizeof(eof)); - - /* This section was heavily rewritten by rja following the model of code - samples circa page 151 of the POSIX Programmer's Guide by Donald Lewine, - ISBN 0-937175-73-0. That book is Copyright 1991 by O'Reilly & - Associates, Inc. All Rights Reserved. I recommend the book to anyone - trying to write portable software. rja */ - -#ifdef unix - if (setjmp(jmpbuf)) - goto error; - - signal(SIGINT, catch); -#endif /* unix */ - - /* Flush any pending output */ - fflush(stderr); - fflush(stdout); - -#ifdef unix - /* Get original terminal attributes */ - if (isatty(0)) { - if (tcgetattr(0, &orig_attr)) - return NULL; - - /* copy terminal settings into attr */ - memcpy(&attr, &orig_attr, sizeof(struct termios)); - - attr.c_lflag &= ~(ECHO | ICANON); - attr.c_lflag |= ISIG; - - attr.c_cc[VMIN] = 1; - attr.c_cc[VTIME] = 0; - - erase[0] = CONTROL('H'); - erase[1] = 127; - -#ifdef CERASE - { - char *e = erase; - - while(*e) - if (*(e++) == CERASE) - break; - - if (!*e) - *e = CERASE; - } -#endif /* CERASE */ -#ifdef VERASE - { - char *e = erase; - - while(*e) - if (*(e++) == attr.c_cc[VERASE]) - break; - - if (!*e) - *e = attr.c_cc[VERASE]; - } -#endif /* VERASE */ - - kill[0] = CONTROL('U'); -#ifdef CKILL - { - char *e = kill; - - while(*e) - if (*(e++) == CKILL) - break; - - if (!*e) - *e = CKILL; - } -#endif /* CKILL */ -#ifdef VKILL - { - char *e = kill; - - while(*e) - if (*(e++) == attr.c_cc[VKILL]) - break; - - if (!*e) - *e = attr.c_cc[VKILL]; - } -#endif /* VKILL */ - - eof[0] = CONTROL('D'); -#ifdef CEOF - { - char *e = eof; - - while(*e) - if (*(e++) == CEOF) - break; - - if (!*e) - *e = CEOF; - } -#endif /* CEOF */ -#ifdef VEOF - { - char *e = eof; - - while(*e) - if (*(e++) == attr.c_cc[VEOF]) - break; - - if (!*e) - *e = VEOF; - } -#endif /* VEOF */ - -#if HAVE_USLEEP - usleep(1); -#endif /* HAVE_USLEEP */ - - if (tcsetattr(0, TCSAFLUSH, &attr)) - goto error; - -#if HAVE_USLEEP - usleep(1); -#endif /* HAVE_USLEEP */ - } -#else /* unix */ - erase[0] = CONTROL('H'); - erase[1] = 127; - kill[0] = CONTROL('U'); - eof[0] = CONTROL('D'); - eof[1] = CONTROL('Z'); -#endif /* unix */ - - { - char *c = buf, *end = buf + len, *e; -#ifdef __OS2__ - KBDKEYINFO keyInfo; -#endif /* __OS2__ */ - -loop: -#ifdef unix - if (read(0, c, 1) != 1) - goto error; -#endif /* unix */ -#ifdef MSDOS - *c = bdos(7, 0, 0); -#endif /* MSDOS */ -#ifdef __OS2__ - KbdCharIn(&keyInfo, 0, 0); - *c = keyInfo.chChar; -#endif /* __OS2__ */ - - if ((*c == '\r') || (*c == '\n')) { - *c = 0; - goto restore; - } - - e = eof; - while(*e) - if (*(e++) == *c) - goto error; - - e = erase; - while(*e) - if (*(e++) == *c) { - if (c <= buf) - goto beep; - - if (flags & 1) - write(1, bsseq, sizeof(bsseq) - 1); - c--; - goto loop; - } - - e = kill; - while(*e) - if (*(e++) == *c) { - if (c <= buf) - goto beep; - - if (flags & 1) - while(c-- > buf) - write(1, bsseq, sizeof(bsseq) - 1); - - c = buf; - goto loop; - } - - if (c < end) { - if (*c < 32) - goto beep; - if (flags & 1) - write(1, c, 1); - c++; - } else { - beep: - *c = CONTROL('G'); - write(1, c, 1); - } - - goto loop; - } - -restore: -#ifdef unix - /* Restore previous tty modes */ - if (isatty(0)) - if (tcsetattr(0, TCSAFLUSH, &orig_attr)) - return NULL; - - signal(SIGINT, SIG_DFL); -#endif /* unix */ - - /* After the secret key is taken from the keyboard, the line feed is - written to standard error instead of standard output. That means that - anyone using the program from a terminal won't notice, but capturing - standard output will get the key words without a newline in front of - them. */ - if (!(flags & 4)) { - fprintf(stderr, "\n"); - fflush(stderr); - } - - return buf; - -error: - *buf = 0; - buf = NULL; - goto restore; -} diff --git a/contrib/opie/libopie/readrec.c b/contrib/opie/libopie/readrec.c deleted file mode 100644 index 4f204b927eeb..000000000000 --- a/contrib/opie/libopie/readrec.c +++ /dev/null @@ -1,167 +0,0 @@ -/* readrec.c: The __opiereadrec() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.4. Check that seed, sequence number, and - response values are valid. - Modified by cmetz for OPIE 2.31. Removed active attack protection - support. Fixed a debug message typo. Keep going after bogus - records. Set read flag. - Created by cmetz for OPIE 2.3. - -$FreeBSD$ -*/ -#include "opie_cfg.h" - -#include <stdio.h> -#include <sys/types.h> -#include <errno.h> -#if HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ -#if HAVE_STRING_H -#include <string.h> -#endif /* HAVE_STRING_H */ -#if HAVE_STDLIB_H -#include <stdlib.h> -#endif /* HAVE_STDLIB_H */ -#if HAVE_FCNTL_H -#include <fcntl.h> -#endif /* HAVE_FCNTL_H */ -#include <ctype.h> -#include <errno.h> -#if DEBUG -#include <syslog.h> -#endif /* DEBUG */ -#include "opie.h" - -static int parserec FUNCTION((opie), struct opie *opie) -{ - char *c, *c2; - - if (!(c2 = strchr(opie->opie_principal = opie->opie_buf, ' '))) - return -1; - - while(*c2 == ' ') c2++; - *(c2 - 1) = 0; - - if (!(c2 = strchr(c = c2, ' '))) - return -1; - - *(c2++) = 0; - - { - char *c3; - - opie->opie_n = strtoul(c, &c3, 10); - - if (*c3 || (opie->opie_n <= 0) || (opie->opie_n > 9999)) - return -1; - }; - - if (!(c2 = strchr(opie->opie_seed = c2, ' '))) - return -1; - - *(c2++) = 0; - - for (c = opie->opie_seed; *c; c++) - if (!isalnum(*c)) - return -1; - - while(*c2 == ' ') c2++; - - if (!(c2 = strchr(opie->opie_val = c2, ' '))) - return -1; - - *(c2++) = 0; - - { - struct opie_otpkey otpkey; - - if (!opieatob8(&otpkey, opie->opie_val)) - return -1; - } - - return 0; -} - -int __opiereadrec FUNCTION((opie), struct opie *opie) -{ - FILE *f = NULL; - int rval = -1; - - if (!(f = __opieopen(KEY_FILE, 0, 0600))) { -#if DEBUG - syslog(LOG_DEBUG, "__opiereadrec: __opieopen(KEY_FILE..) failed!"); -#endif /* DEBUG */ - goto ret; - } - - { - int i; - - if ((i = open(KEY_FILE, O_RDWR)) < 0) { - opie->opie_flags &= ~__OPIE_FLAGS_RW; -#if DEBUG - syslog(LOG_DEBUG, "__opiereadrec: open(KEY_FILE, O_RDWR) failed: %s", strerror(errno)); -#endif /* DEBUG */ - } else { - close(i); - opie->opie_flags |= __OPIE_FLAGS_RW; - } - } - - if (opie->opie_buf[0]) { - if (fseek(f, opie->opie_recstart, SEEK_SET)) - goto ret; - - if (fgets(opie->opie_buf, sizeof(opie->opie_buf), f)) - goto ret; - - if (parserec(opie)) - goto ret; - - opie->opie_flags |= __OPIE_FLAGS_READ; - rval = 0; - goto ret; - } - - if (!opie->opie_principal) - goto ret; - - { - char *c, principal[OPIE_PRINCIPAL_MAX]; - int i; - - if (c = strchr(opie->opie_principal, ':')) - *c = 0; - - strlcpy(principal, opie->opie_principal, sizeof(principal)); - - do { - if ((opie->opie_recstart = ftell(f)) < 0) - goto ret; - - if (!fgets(opie->opie_buf, sizeof(opie->opie_buf), f)) { - rval = 1; - goto ret; - } - - if (parserec(opie)) - continue; - } while (strcmp(principal, opie->opie_principal)); - - rval = 0; - } - -ret: - if (f) - fclose(f); - return rval; -} diff --git a/contrib/opie/libopie/unlock.c b/contrib/opie/libopie/unlock.c deleted file mode 100644 index 0f607ab43ed0..000000000000 --- a/contrib/opie/libopie/unlock.c +++ /dev/null @@ -1,103 +0,0 @@ -/* unlock.c: The opieunlock() library function. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.31. Bug fix. - Modified by cmetz for OPIE 2.3. Do refcounts whether or not - we actually lock. Fixed USER_LOCKING=0 case. - Modified by cmetz for OPIE 2.22. Added reference count support. - Changed lock filename/refcount symbol names to better indicate - that they're not user serviceable. - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration. - Check for read() == -1. ifdef around unistd.h. - Created at NRL for OPIE 2.2 from opiesubr2.c -*/ -#include "opie_cfg.h" -#include <string.h> -#if HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ -#include <fcntl.h> -#include "opie.h" - -extern int __opie_lockrefcount; -#if USER_LOCKING -extern char *__opie_lockfilename; -#endif /* USER_LOCKING */ - -/* - Just remove the lock, right? - Well, not exactly -- we need to make sure it's ours. -*/ -int opieunlock FUNCTION_NOARGS -{ -#if USER_LOCKING - int fh, rval = -1, pid, t, i; - char buffer[128], *c, *c2; - - if (--__opie_lockrefcount > 0) - return 0; - - if (!__opie_lockfilename) - return -1; - - if (!(fh = open(__opie_lockfilename, O_RDWR, 0600))) - goto unlockret; - - if ((i = read(fh, buffer, sizeof(buffer))) < 0) - goto unlockret; - - buffer[sizeof(buffer) - 1] = 0; - buffer[i - 1] = 0; - - if (!(c = strchr(buffer, '\n'))) - goto unlockret; - - *(c++) = 0; - - if (!(c2 = strchr(c, '\n'))) - goto unlockret; - - *(c2++) = 0; - - if (!(pid = atoi(buffer))) - goto unlockret; - - if (!(t = atoi(c))) - goto unlockret; - - if ((pid != getpid()) && (time(0) <= OPIE_LOCK_TIMEOUT + t) && (!kill(pid, 0))) { - rval = 1; - goto unlockret1; - } - - rval = 0; - -unlockret: - unlink(__opie_lockfilename); - -unlockret1: - if (fh) - close(fh); - free(__opie_lockfilename); - __opie_lockfilename = NULL; - return rval; -#else /* USER_LOCKING */ - if (__opie_lockrefcount-- > 0) - return 0; - - return -1; -#endif /* USER_LOCKING */ -} diff --git a/contrib/opie/libopie/verify.c b/contrib/opie/libopie/verify.c deleted file mode 100644 index 766d5cbdc062..000000000000 --- a/contrib/opie/libopie/verify.c +++ /dev/null @@ -1,222 +0,0 @@ -/* verify.c: The opieverify() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.4. Use struct opie_otpkey for keys. - Check that seed and sequence number are valid. - Modified by cmetz for OPIE 2.32. Renamed _opieparsechallenge() to - __opieparsechallenge() and handle new argument. Fixed init - response parsing bug. - Modified by cmetz for OPIE 2.31. Renamed "init" to "init-hex". - Modified by cmetz for OPIE 2.31. Renamed "init" and "RESPONSE_INIT" - to "init-hex" and "RESPONSE_INIT_HEX". Removed active attack - protection support. - Created by cmetz for OPIE 2.3 using the old verify.c as a guide. -*/ - -#include "opie_cfg.h" -#ifdef HAVE_STRING_H -#include <string.h> -#endif /* HAVE_STRING_H */ -#include <ctype.h> -#include "opie.h" - -#define RESPONSE_STANDARD 0 -#define RESPONSE_WORD 1 -#define RESPONSE_HEX 2 -#define RESPONSE_INIT_HEX 3 -#define RESPONSE_INIT_WORD 4 -#define RESPONSE_UNKNOWN 5 - -struct _rtrans { - int type; - char *name; -}; - -static struct _rtrans rtrans[] = { - { RESPONSE_WORD, "word" }, - { RESPONSE_HEX, "hex" }, - { RESPONSE_INIT_HEX, "init-hex" }, - { RESPONSE_INIT_WORD, "init-word" }, - { RESPONSE_STANDARD, "" }, - { RESPONSE_UNKNOWN, NULL } -}; - -static char *algids[] = { NULL, NULL, NULL, "sha1", "md4", "md5" }; - -static int changed FUNCTION((opie), struct opie *opie) -{ - struct opie opie2; - - memset(&opie2, 0, sizeof(struct opie)); - opie2.opie_principal = opie->opie_principal; - if (__opiereadrec(&opie2)) - return 1; - - if ((opie2.opie_n != opie->opie_n) || strcmp(opie2.opie_val, opie->opie_val) || strcmp(opie2.opie_seed, opie->opie_seed)) - return 1; - - memset(&opie2, 0, sizeof(struct opie)); - return 0; -} - -int opieverify FUNCTION((opie, response), struct opie *opie AND char *response) -{ - int i, rval = -1; - char *c; - struct opie_otpkey key, fkey, lastkey; - struct opie nopie; - - if (!opie || !response) - goto verret; - - if (!opie->opie_principal) -#if DEBUG - abort(); -#else /* DEBUG */ - goto verret; -#endif /* DEBUG */ - - if (!opieatob8(&lastkey, opie->opie_val)) - goto verret; - - for (c = opie->opie_seed; *c; c++) - if (!isalnum(*c)) - goto verret; - - if (opie->opie_n <= 0) - goto verret; - - if (c = strchr(response, ':')) { - *(c++) = 0; - { - struct _rtrans *r; - for (r = rtrans; r->name && strcmp(r->name, response); r++); - i = r->type; - } - } else - i = RESPONSE_STANDARD; - - switch(i) { - case RESPONSE_STANDARD: - i = 1; - - if (opieetob(&key, response) == 1) { - memcpy(&fkey, &key, sizeof(struct opie_otpkey)); - opiehash(&fkey, MDX); - i = memcmp(&fkey, &lastkey, sizeof(struct opie_otpkey)); - } - if (i && opieatob8(&key, response)) { - memcpy(&fkey, &key, sizeof(struct opie_otpkey)); - opiehash(&fkey, MDX); - i = memcmp(&fkey, &lastkey, sizeof(struct opie_otpkey)); - } - break; - case RESPONSE_WORD: - i = 1; - - if (opieetob(&key, c) == 1) { - memcpy(&fkey, &key, sizeof(struct opie_otpkey)); - opiehash(&fkey, MDX); - i = memcmp(&fkey, &lastkey, sizeof(struct opie_otpkey)); - } - break; - case RESPONSE_HEX: - i = 1; - - if (opieatob8(&key, c)) { - memcpy(&fkey, &key, sizeof(struct opie_otpkey)); - opiehash(&fkey, MDX); - i = memcmp(&fkey, &lastkey, sizeof(struct opie_otpkey)); - } - break; - case RESPONSE_INIT_HEX: - case RESPONSE_INIT_WORD: - { - char *c2; - - if (!(c2 = strchr(c, ':'))) - goto verret; - - *(c2++) = 0; - - if (i == RESPONSE_INIT_HEX) { - if (!opieatob8(&key, c)) - goto verret; - } else { - if (opieetob(&key, c) != 1) - goto verret; - } - - memcpy(&fkey, &key, sizeof(struct opie_otpkey)); - opiehash(&fkey, MDX); - - if (memcmp(&fkey, &lastkey, sizeof(struct opie_otpkey))) - goto verret; - - if (changed(opie)) - goto verret; - - opie->opie_n--; - - if (!opiebtoa8(opie->opie_val, &key)) - goto verret; - - if (__opiewriterec(opie)) - goto verret; - - if (!(c2 = strchr(c = c2, ':'))) - goto verret; - - *(c2++) = 0; - - { - int j, k; - - if (__opieparsechallenge(c, &j, &(opie->opie_n), &(opie->opie_seed), &k) || (j != MDX) || k) - goto verret; - } - - if (i == RESPONSE_INIT_HEX) { - if (!opieatob8(&key, c2)) - goto verret; - } else { - if (opieetob(&key, c2) != 1) - goto verret; - } - } - goto verwrt; - case RESPONSE_UNKNOWN: - rval = 1; - goto verret; - default: - rval = -1; - goto verret; - } - - if (i) { - rval = 1; - goto verret; - } - - if (changed(opie)) - goto verret; - - opie->opie_n--; - -verwrt: - if (!opiebtoa8(opie->opie_val, &key)) - goto verret; - rval = __opiewriterec(opie); - -verret: - opieunlock(); - memset(opie, 0, sizeof(struct opie)); - return rval; -} diff --git a/contrib/opie/libopie/version.c b/contrib/opie/libopie/version.c deleted file mode 100644 index ec41f6523c60..000000000000 --- a/contrib/opie/libopie/version.c +++ /dev/null @@ -1,29 +0,0 @@ -/* version.c: The opieversion() library function. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.2. Use FUNCTION declaration et al. - Created at NRL for OPIE 2.2 from opiesubr.c. -*/ -#include <stdio.h> -#include <stdlib.h> -#include "opie_cfg.h" -#include "opie.h" - -VOIDRET opieversion FUNCTION_NOARGS -{ - printf("\nOPIE %s (%s)\n\n", VERSION, DATE); - exit(0); -} diff --git a/contrib/opie/libopie/writerec.c b/contrib/opie/libopie/writerec.c deleted file mode 100644 index 3d88b34c228b..000000000000 --- a/contrib/opie/libopie/writerec.c +++ /dev/null @@ -1,89 +0,0 @@ -/* writerec.c: The __opiewriterec() library function. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Modified by cmetz for OPIE 2.4. Check that seed and sequence number are - valid. - Modified by cmetz for OPIE 2.31. Removed active attack protection - support. Fixed passwd bug. - Created by cmetz for OPIE 2.3 from passwd.c. - -$FreeBSD$ -*/ -#include "opie_cfg.h" - -#include <stdio.h> -#if TM_IN_SYS_TIME -#include <sys/time.h> -#else /* TM_IN_SYS_TIME */ -#include <time.h> -#endif /* TM_IN_SYS_TIME */ -#include <sys/types.h> -#if HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ -#if HAVE_STRING_H -#include <string.h> -#endif /* HAVE_STRING_H */ -#if HAVE_STDLIB_H -#include <stdlib.h> -#endif /* HAVE_STDLIB_H */ -#include <ctype.h> -#include "opie.h" - -char *__opienone = "****************"; - -int __opiewriterec FUNCTION((opie), struct opie *opie) -{ - char buf[17], buf2[64]; - time_t now; - FILE *f, *f2 = NULL; - int i = 0; - char *c; - - time(&now); - if (strftime(buf2, sizeof(buf2), " %b %d,%Y %T", localtime(&now)) < 1) - return -1; - - if (!(opie->opie_flags & __OPIE_FLAGS_READ)) { - struct opie opie2; - i = opielookup(&opie2, opie->opie_principal); - opie->opie_flags = opie2.opie_flags; - opie->opie_recstart = opie2.opie_recstart; - } - - for (c = opie->opie_seed; *c; c++) - if (!isalnum(*c)) - return -1; - - if ((opie->opie_n < 0) || (opie->opie_n > 9999)) - return -1; - - switch(i) { - case 0: - if (!(f = __opieopen(KEY_FILE, 1, 0600))) - return -1; - if (fseek(f, opie->opie_recstart, SEEK_SET)) - return -1; - break; - case 1: - if (!(f = __opieopen(KEY_FILE, 2, 0600))) - return -1; - break; - default: - return -1; - } - - if (fprintf(f, "%s %04d %-16s %s %-21s\n", opie->opie_principal, opie->opie_n, opie->opie_seed, opie->opie_val ? opie->opie_val : __opienone, buf2) < 1) - return -1; - - fclose(f); - - return 0; -} diff --git a/contrib/opie/opie.4 b/contrib/opie/opie.4 deleted file mode 100644 index 9db1755cf24c..000000000000 --- a/contrib/opie/opie.4 +++ /dev/null @@ -1,342 +0,0 @@ -.\" opie.4: Overview of the OPIE software. -.\" -.\" %%% portions-copyright-cmetz-96 -.\" Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -.\" Reserved. The Inner Net License Version 2 applies to these portions of -.\" the software. -.\" You should have received a copy of the license with this software. If -.\" you didn't get a copy, you may request one from <license@inner.net>. -.\" -.\" Portions of this software are Copyright 1995 by Randall Atkinson and Dan -.\" McDonald, All Rights Reserved. All Rights under this copyright are assigned -.\" to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -.\" License Agreement applies to this software. -.\" -.\" History: -.\" -.\" Modified by cmetz for OPIE 2.4. Spelling fixes. -.\" Modified by cmetz for OPIE 2.2. Removed MJR DES documentation. Removed -.\" references to the old square brackets challenge delimiters. -.\" Modified at NRL for OPIE 2.01. Updated UNIX trademark credit. -.\" Definition of "seed" written by Neil Haller of Bellcore -.\" Written at NRL for OPIE 2.0. -.\" -.\" $FreeBSD$ -.\" -.TH OPIE 4 "January 10, 1995" -.SH NAME -.B OPIE \- One-time Passwords In Everything -.SH DEPRECATION NOTICE -OPIE is deprecated, and may not be available in FreeBSD 14.0 and later. -.SH DESCRIPTION -.LP -OPIE is a package derived from the Bellcore S/Key Version 1 distribution -that helps to secure a system against replay attacks (see below). It does so -using a secure hash function and a challenge/response system. It provides -replacements for the -.IR login (1), -.IR su (1), -and -.IR ftpd (8) -programs that use OPIE -authentication as well as demonstrate how a program might be adapted to use -OPIE authentication. OPIE was developed at and for the United States Naval -Research Laboratory (NRL). OPIE is derived in part from Berkeley Standard -Distribution UNIX and the Bellcore S/Key Version 1 distribution. -.LP -From the average user's perspective, OPIE is a nuisance that prevents their -account from being broken into. The first time a user wishes to use OPIE, -(s)he needs to use the -.IR opiepasswd (1) -command to put an entry for them into -the OPIE database. The user can then use OPIE to authenticate themselves -with any program that supports it. If no other clients are being used, -this means they can use OPIE to -.I telnet, -.I rlogin, -or -.I ftp -into the system, -log in on a terminal port (like a modem), or switch to another user's -account. When they would normally be asked for a password, they will get -a challenge from the server. They then need to copy that challenge (or -re-type, if they don't have the ability to copy and paste through something -like a window system) to their calculator program, enter their password, -then copy (or re-type) the response from the calculator as their password. -While this will seem cumbersome at first, with some practice, it becomes -easy. - -.SH TERMS -.TP -.I user name -The name that the system knows you as. For example, "jdoe". -.TP -.I secret password -A password, usually selected by the user, that is needed to gain access to the -system. For example, "SEc1_rt". -.TP -.I challenge -A packet of information output by a system when it wishes to authenticate a -user. In OPIE, this is a three-item group consisting of a hash identifier, -a sequence number, and a seed. This -information is needed by the OPIE calculator to generate a proper response. -For example, "otp-md5 95 wi14321". -.TP -.I response -A packet of information generated from a challenge that is used by a system to -authenticate a user. In OPIE, this is a group of six words that is generated by -the calculator given the challenge and the secret password. For example, -"PUP SOFT ROSE BIAS FLAG END". -.TP -.I seed -A piece of information that is used in conjunction with the secret password -and sequence number to compute the response. Its purpose is to allow the same -secret password to be used for multiple sequences, by changing the seed, or -for authentication to multiple machines by using different seeds. -.TP -.I sequence number -A counter used to keep track of key iterations. In OPIE, each time a successful -response is received by the system, the sequence number is decremented. For -example, "95". -.TP -.I hash identifier -A piece of text that identifies the actual algorithm that needs to be used to -generate a proper response. In OPIE, the only two valid hash identifiers are -"otp-md4", which selects MD4 hashing, and "otp-md5", which selects MD5. - -.SH REPLAY ATTACKS -When you use a network terminal program like -.IR telnet (1) -or even use a modem to log into a -computer system, you need a user name and a secret password. Anyone who can -provide those to the system is recognized as you because, in theory, only you -would have your secret password. Unfortunately, it is now easy to listen in -on many computer communications media. From modem communication to many -networks, your password is not usually safe over remote links. If a -cracker can listen in when you send your password, (s)he then has a copy -of your password that can be used at any time in the future to access your -account. On more than one occasion, major sites on the Internet have been -broken into exactly this way. -.LP -All an attacker has to -do is capture your password once and then replay it to the server when it's -asked for. Even if the password is communicated between machines in encoded -or encrypted form, as long as a cracker can get in by simply replaying -a previously captured communication, you are at risk. Up until very recently, -Novell NetWare was vulnerable this way. A cracker couldn't find out what your -password actually is, but (s)he didn't need to -- all that was necessary to -get into your account was to capture the encrypted password and send that -back to the server when asked for it. - -.SH ONE-TIME PASSWORDS -One solution to the problem of replay attacks -is to keep changing the way that a password is being encoded so that what is -sent over the link to another system can only be used once. If you can do that, -then a cracker can replay it as many times as (s)he wants -- it's just not -going to get them anywhere. It's important, however, to make sure you encode -the password in such a way that the cracker can't use the encoded version to -figure out what the password is or what a future encoded password will be. -Otherwise, while still an improvement over no encoding or a fixed encoding, -you can still be broken into. - -.SH THE S/KEY ALGORITHM - -A solution to this whole problem was invented by Lamport in 1981. This -technique was implemented by Haller, Karn, and Walden at Bellcore. They -created a free software package called "S/Key" that used an algorithm -called a cryptographic checksum. A cryptographic checksum is a strong one-way -function such that, knowing the result of such a function, an attacker still -cannot feasibly determine the input. Further, unlike cyclic redundancy -checksums (CRCs), cryptographic checksums have few inputs that result in the -same output. -.LP -In S/Key, what changes is the number of -times the password is run through the secure hash. The password is run through -the secure hash once, then the output of the hash is run through the secure -hash again, that output is run through the secure hash again, and so on until -the number of times the password has been run through the secure hash is equal -to the desired sequence number. This is much slower than just, say, putting -the sequence number in before the password and running that through the secure -hash once, but it gains you one significant benefit. The server machine you -are trying to connect to has to have some way to determine whether the output -of that whole mess is right. If it stores it either without any encoding or -with a normal encoding, a cracker could still get at your password. But if it -stores it with a secure hash, then how does it account for the response -changing every time because the sequence number is changing? Also what if you -can never get to the machine any way that can't be listened in on? How do you -change your password without sending it over the link? -.LP -The clever solution -devised by Lamport is to keep in mind that the sequence number is -always decrementing by one and that, in the S/Key system, simply by running any -response with a sequence number N through the secure hash, you can get the -response with a sequence number N+1, but you can't go the other way. At any -given time, call the sequence number of the last valid response that the -system got N+1 and the sequence number of the response you are giving it N. -If the password that generated the response for N is the same as the one for -N+1, then you should be able to run the response for N through the secure hash -one more time, for a total of N+1 times, and get the same response as you got -back for N+1. Once you compare the two and find that they are the same, you -subtract one from N so that, now, the key for N that you just verified becomes -the new key for N+1 that you can store away to use the next time you need to -verify a key. This also means that if you need to change your password but -don't have a secure way to access your machine, all the system really needs to -have to verify your password is a valid response for one more than the sequence -number you want to start with. -.LP -Just for good measure, each side of -all of this uses a seed in conjunction with your password when it actually -generates and verifies the responses. This helps to jumble things up a little -bit more, just in case. Otherwise, someone with a lot of time and disk space -on their hands could generate all the responses for a lot of frequent passwords -and defeat the system. -.LP -This is not, by any means, the best explanation of how the S/Key algorithm -works or some of the more minor details. For that, you should go to some of -the papers now published on the topic. It is simply a quick-and-dirty -introduction to what's going on under the hood. - -.SH OPIE COMPONENTS - -The OPIE distribution has been incorporated into three standard client -programs: -.IR login (1), -.IR su (1), -and -.IR ftpd (8), -.LP -There are also three programs in the OPIE distribution that are specific to -the OPIE system: -.IR opiepasswd (1), -which allows a user to set and change their -OPIE password, -.IR opieinfo (1), -which allows a user to find out what their current -sequence number and seed are, and -.IR opiekey(1), -which is an OPIE key calculator. - -.SH ADDING OPIE TO OTHER PROGRAMS - -Adding OPIE authentication to programs other than the ones included as clients -in the OPIE distribution isn't very difficult. First, you will need to make -sure that the program includes <stdio.h> somewhere. Then, below the other -includes such as <stdio.h>, but before variable declarations, you need to -include <opie.h>. You need to add a variable of type "struct opie" to your -program, you need to make sure that the buffer that you use to get a password -from the user is big enough to hold OPIE_RESPONSE_MAX+1 characters, and you -need to have a buffer in which to store the challenge string that is big enough -to hold OPIE_CHALLENGE_MAX+1 characters. -.LP -When you are ready to output the challenge string and know the user's name, -you would use a call to opiechallenge. Later, to verify the response received, -you would use a call to opieverify. For example: -.sp 0 - -.sp 0 - #include <stdio.h> -.sp 0 - . -.sp 0 - . -.sp 0 - #include <opie.h> -.sp 0 - . -.sp 0 - . -.sp 0 - char *user_name; -.sp 0 - /* Always remember the trailing null! */ -.sp 0 - char password[OPIE_RESPONSE_MAX+1]; -.sp 0 - . -.sp 0 - . -.sp 0 - struct opie opiedata; -.sp 0 - char opieprompt[OPIE_CHALLENGE_MAX+1]; -.sp 0 - . -.sp 0 - . -.sp 0 - opiechallenge(&opiedata, user_name, opieprompt); -.sp 0 - . -.sp 0 - . -.sp 0 - if (opieverify(&opiedata, password)) { -.sp 0 - printf("Login incorrect"); -.sp 0 -.SH TERMINAL SECURITY AND OPIE - -When using OPIE, you need to be careful not to allow your password to be -communicated over an insecure channel where someone might be able to listen -in and capture it. OPIE can protect you against people who might get your -password from snooping on the line, but only if you make sure that the password -itself never gets sent over the line. The important thing is to always run the -OPIE calculator on whichever machine you are actually using - never on a machine -you are connected to by network or by dialup. -.LP -You need to be careful about the -X Window System, because it changes things quite a bit. For instance, if you -run an xterm (or your favorite equivalent) on another machine and display it -on your machine, you should not run an OPIE calculator in that window. When you -type in your secret password, it still gets transmitted over the network to go -to the machine the xterm is running on. People with machines such as -X terminals that can only run the calculator over the network are in an -especially precarious position because they really have no choice. Also, with -the X Window System, as with some other window system (NeWS as an example), -it is sometimes possible for people to read your keystrokes and capture your -password even if you are running the OPIE calculator on your local machine. -You should always use the best security mechanism available on your system to -protect your X server, be it XDM-AUTHORIZATION-1, XDM-MAGIC-COOKIE-1, or host -access control. *Never* just allow any machine to connect to your server -because, by doing so, you are allowing any machine to read any of your windows -or your keystrokes without you knowing it. - -.SH SEE ALSO -.BR ftpd (8) -.BR login (1), -.BR opie (4), -.BR opiekeys (5), -.BR opieaccess (5), -.BR opiekey (1), -.BR opieinfo (1), -.BR opiepasswd (1), -.sp -Lamport, L. "Password Authentication with Insecure Communication", -Communications of the ACM 24.11 (November 1981), pp. 770-772. -.sp -Haller, N. "The S/KEY One-Time Password System", Proceedings of the ISOC -Symposium on Network and Distributed System Security, February 1994, -San Diego, CA. -.sp -Haller, N. and Atkinson, R, "On Internet Authentication", RFC-1704, -DDN Network Information Center, October 1994. -.sp -Rivest, R. "The MD5 Message Digest Algorithm", RFC-1321, -DDN Network Information Center, April 1992. -.sp -Rivest, R. "The MD4 Message Digest Algorithm", RFC-1320, -DDN Network Information Center, April 1992. - -.SH AUTHOR -Bellcore's S/Key was written by Phil Karn, Neil M. Haller, and John S. Walden -of Bellcore. OPIE was created at NRL by Randall Atkinson, Dan McDonald, and -Craig Metz. - -S/Key is a trademark of Bell Communications Research (Bellcore). -UNIX is a trademark of X/Open. - -.SH CONTACT -OPIE is discussed on the Bellcore "S/Key Users" mailing list. To join, -send an email request to: -.sp -skey-users-request@thumper.bellcore.com diff --git a/contrib/opie/opie.h b/contrib/opie/opie.h deleted file mode 100644 index 8e88135a55e1..000000000000 --- a/contrib/opie/opie.h +++ /dev/null @@ -1,179 +0,0 @@ -/* opie.h: Data structures and values for the OPIE authentication - system that a program might need. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.4. Added sequence number limits. Added - struct opie_otpkey and made many functions use it. Added - opiestrncpy(). Include header with libmissing prototypes. - Modified by cmetz for OPIE 2.32. Added symbolic flag names for - opiepasswd(). Added __opieparsechallenge() prototype. - Modified by cmetz for OPIE 2.31. Removed active attack protection. - Modified by cmetz for OPIE 2.3. Renamed PTR to VOIDPTR. Added - re-init key and extension file fields to struct opie. Added - opie_ prefix on struct opie members. Added opie_flags field - and definitions. Added more prototypes. Changed opiehash() - prototype. - Modified by cmetz for OPIE 2.22. Define __P correctly if this file - is included in a third-party program. - Modified by cmetz for OPIE 2.2. Re-did prototypes. Added FUNCTION - definition et al. Multiple-include protection. Added struct - utsname fake. Got rid of gethostname() cruft. Moved UINT4 - here. Provide for *seek whence values. Move MDx context here - and unify. Re-did prototypes. - Modified at NRL for OPIE 2.0. - Written at Bellcore for the S/Key Version 1 software distribution - (skey.h). - -$FreeBSD$ -*/ -#ifndef _OPIE_H -#define _OPIE_H 1 - -struct opie { - int opie_flags; - char opie_buf[256]; - char *opie_principal; - int opie_n; - char *opie_seed; - char *opie_val; - long opie_recstart; -}; - -#define __OPIE_FLAGS_RW 1 -#define __OPIE_FLAGS_READ 2 - -/* Minimum length of a secret password */ -#ifndef OPIE_SECRET_MIN -#define OPIE_SECRET_MIN 10 -#endif /* OPIE_SECRET_MIN */ - -/* Maximum length of a secret password */ -#define OPIE_SECRET_MAX 127 - -/* Minimum length of a seed */ -#define OPIE_SEED_MIN 5 - -/* Maximum length of a seed */ -#define OPIE_SEED_MAX 16 - -/* Max length of hash algorithm name (md4/md5/sha1) */ -#define OPIE_HASHNAME_MAX 4 - -/* Maximum length of a challenge (otp-md? 9999 seed ext) */ -#define OPIE_CHALLENGE_MAX (4+OPIE_HASHNAME_MAX+1+4+1+OPIE_SEED_MAX+1+3) - -/* Maximum length of a response that we allow */ -#define OPIE_RESPONSE_MAX (9+1+19+1+9+OPIE_SEED_MAX+1+19+1+19+1+19) - -/* Maximum length of a principal (read: user name) */ -#define OPIE_PRINCIPAL_MAX 32 - -/* Maximum sequence number */ -#ifndef OPIE_SEQUENCE_MAX -#define OPIE_SEQUENCE_MAX 9999 -#endif /* OPIE_SEQUENCE_MAX */ - -/* Restricted sequence number */ -#ifndef OPIE_SEQUENCE_RESTRICT -#define OPIE_SEQUENCE_RESTRICT 9 -#endif /* OPIE_SEQUENCE_RESTRICT */ - -#define UINT4 u_int32_t - -struct opie_otpkey { - UINT4 words[2]; -}; - -#ifndef SEEK_SET -#define SEEK_SET 0 -#endif /* SEEK_SET */ - -#ifndef SEEK_END -#define SEEK_END 2 -#endif /* SEEK_END */ - -__BEGIN_DECLS -int opieaccessfile __P((char *)); -int rdnets __P((long)); -int isaddr __P((register char *)); -int opiealways __P((char *)); -char *opieatob8 __P((struct opie_otpkey *, char *)); -void opiebackspace __P((char *)); -char *opiebtoa8 __P((char *, struct opie_otpkey *)); -char *opiebtoe __P((char *, struct opie_otpkey *)); -char *opiebtoh __P((char *, struct opie_otpkey *)); -int opieetob __P((struct opie_otpkey *, char *)); -int opiechallenge __P((struct opie *,char *,char *)); -int opiegenerator __P((char *,char *,char *)); -int opiegetsequence __P((struct opie *)); -void opiehash __P((struct opie_otpkey *, unsigned)); -int opiehtoi __P((register char)); -int opiekeycrunch __P((int, struct opie_otpkey *, char *, char *)); -int opielock __P((char *)); -int opieunlock __P((void)); -void opieunlockaeh __P((void)); -void opiedisableaeh __P((void)); -int opielookup __P((struct opie *,char *)); -int opiepasscheck __P((char *)); -int opienewseed __P((char *)); -void opierandomchallenge __P((char *)); -char * opieskipspace __P((register char *)); -void opiestripcrlf __P((char *)); -int opieverify __P((struct opie *,char *)); -int opiepasswd __P((struct opie *, int, char *, int, char *, char *)); -char *opiereadpass __P((char *, int, int)); -int opielogin __P((char *line, char *name, char *host)); -const char *opie_get_algorithm __P((void)); -int opie_haskey __P((char *username)); -char *opie_keyinfo __P((char *)); -int opie_passverify __P((char *username, char *passwd)); -int opieinsecure __P((void)); -void opieversion __P((void)); -__END_DECLS - -#if _OPIE -#define VOIDPTR void * -#define VOIDRET void -#define NOARGS void -#define FUNCTION(arglist, args) (args) -#define AND , -#define FUNCTION_NOARGS () - -__BEGIN_DECLS -struct utmp; -int __opiegetutmpentry __P((char *, struct utmp *)); -#ifdef EOF -FILE *__opieopen __P((char *, int, int)); -#endif /* EOF */ -int __opiereadrec __P((struct opie *)); -int __opiewriterec __P((struct opie *)); -int __opieparsechallenge __P((char *buffer, int *algorithm, int *sequence, char **seed, int *exts)); -VOIDRET opiehashlen __P((int algorithm, VOIDPTR in, struct opie_otpkey *out, int n)); -__END_DECLS - -#define opiestrncpy(dst, src, n) \ - do { \ - strncpy(dst, src, n-1); \ - dst[n-1] = 0; \ - } while(0) - -/* #include "missing.h" */ -#endif /* _OPIE */ - -#define OPIEPASSWD_CONSOLE 1 -#define OPIEPASSWD_FORCE 2 - -#endif /* _OPIE_H */ diff --git a/contrib/opie/opie_cfg.h b/contrib/opie/opie_cfg.h deleted file mode 100644 index bd000ae60a33..000000000000 --- a/contrib/opie/opie_cfg.h +++ /dev/null @@ -1,184 +0,0 @@ -/* opie_cfg.h: Various configuration-type pieces of information for OPIE. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.4. Removed NBBY definition. - Modified by cmetz for OPIE 2.32. Include <sys/types.h> before - <dirent.h> to make *BSD happy. - Modified by cmetz for OPIE 2.31. Added 4.4BSD-Lite pathnames.h - definitions from ftpd. Added struct spwd definition and - HAVE_SHADOW logic for SunOS C2 shadow password support. - Moved user locking config to configure script. Removed - options.h. - Modified by cmetz for OPIE 2.3. Splatted with opie_auto.h. - Obseleted many symbols. Changed OPIE_PASS_{MIN,MAX} to - OPIE_SECRET_{MIN,MAX}. Fixed SHADOW+UTMP definitions. - Removed a lot of symbols. - Modified by cmetz for OPIE 2.2. Got rid of ANSIPROTO and ARGS. - Got rid of TRUE and FALSE definitions. Moved UINT4 to - opie.h and removed UINT2. - Modified at NRL for OPIE 2.1. Fixed sigprocmask declaration. - Gutted for autoconf. Split up for autoconf. - Written at NRL for OPIE 2.0. - - History of opie_auto.h: - - Modified by cmetz for OPIE 2.22. Support the Solaris TTYPROMPT drain - bamage on all systems -- it doesn't hurt others, and it's - not something Autoconf can check for yet. - Modified by cmetz for OPIE 2.2. Don't replace sigprocmask by ifdef. - Added configure check for LS_COMMAND. Added setreuid/setgid - band-aids. - Modified at NRL for OPIE 2.2. Require /etc/shadow for Linux to use - shadow passwords. - Modified at NRL for OPIE 2.11. Removed version defines. - Modified at NRL for OPIE 2.1. Fixed sigprocmask declaration. - Gutted for autoconf. Split up for autoconf. - Written at NRL for OPIE 2.0. - -$FreeBSD$ -*/ - -#ifndef _OPIE_CFG_H -#define _OPIE_CFG_H 1 - -#define VERSION "2.4" -#define DATE "Friday, January 19, 2001" - -#ifndef unix -#define unix 1 -#endif /* unix */ - -#include "config.h" - -/* System characteristics */ - -#if HAVE_GETUTXLINE && HAVE_UTMPX_H -#define DOUTMPX 1 -#else /* HAVE_GETUTXLINE && HAVE_UTMPX_H */ -#define DOUTMPX 0 -#endif /* HAVE_GETUTXLINE && HAVE_UTMPX_H */ - -#include <sys/types.h> -/* Adapted from the Autoconf hypertext info pages */ -#if HAVE_DIRENT_H -#include <dirent.h> -#else /* HAVE_DIRENT_H */ -#define dirent direct -#if HAVE_SYS_NDIR_H -#include <sys/ndir.h> -#endif /* HAVE_SYS_NDIR_H */ -#if HAVE_SYS_DIR_H -#include <sys/dir.h> -#endif /* HAVE_SYS_DIR_H */ -#if HAVE_NDIR_H -#include <ndir.h> -#endif /* HAVE_NDIR_H */ -#endif /* HAVE_DIRENT_H */ - -#ifndef MAIL_DIR -#ifdef PATH_MAIL -#define MAIL_DIR PATH_MAIL -#else /* PATH_MAIL */ -#ifdef _PATH_MAIL -#define MAIL_DIR _PATH_MAIL -#else /* _PATH_MAIL */ -#ifdef _PATH_MAILDIR -#define MAIL_DIR _PATH_MAILDIR -#else /* _PATH_MAILDIR */ -#define MAIL_DIR "/usr/spool/mail" -#endif /* _PATH_MAILDIR */ -#endif /* _PATH_MAIL */ -#endif /* PATH_MAIL */ -#endif /* MAIL_DIR */ - -#if HAVE_SHADOW_H && HAVE_GETSPNAM && HAVE_ENDSPENT -#if defined(linux) && !HAVE_ETC_SHADOW -#define HAVE_SHADOW 0 -#else /* defined(linux) && !HAVE_ETC_SHADOW */ -#define HAVE_SHADOW 1 -#endif /* defined(linux) && !HAVE_ETC_SHADOW */ -#endif /* HAVE_SHADOW_H && HAVE_GETSPNAM && HAVE_ENDSPENT */ - -#if HAVE_SUNOS_C2_SHADOW && !HAVE_SHADOW -#undef HAVE_SHADOW -#define HAVE_SHADOW 1 -#endif /* HAVE_SUNOS_C2_SHADOW && !HAVE_SHADOW */ - -/* If the user didn't specify, default to MD5 */ -#ifndef MDX -#define MDX 5 -#endif /* MDX */ - -#ifndef _PATH_BSHELL -#define _PATH_BSHELL "/bin/sh" -#endif - -#ifndef _PATH_DEVNULL -#define _PATH_DEVNULL "/dev/null" -#endif - -#ifndef _PATH_FTPUSERS -#define _PATH_FTPUSERS "/etc/ftpusers" -#endif - -#ifndef _PATH_FTPLOGINMESG -#define _PATH_FTPLOGINMESG "/etc/ftpmotd" -#endif /* _PATH_FTPLOGINMESG */ - -#ifndef _PATH_FTPWELCOME -#define _PATH_FTPWELCOME "/etc/ftpwelcome" -#endif /* _PATH_FTPWELCOME */ - -#ifndef _PATH_NOLOGIN -#define _PATH_NOLOGIN "/etc/nologin" -#endif /* _PATH_NOLOGIN */ - -#ifndef TTYGRPNAME -#define TTYGRPNAME "tty" /* name of group to own ttys */ -#endif - -#ifndef QUIET_LOGIN_FILE -#define QUIET_LOGIN_FILE ".hushlogin" -#endif - -#ifndef OPIE_ALWAYS_FILE -#define OPIE_ALWAYS_FILE ".opiealways" -#endif - -#ifndef OPIE_LOCK_TIMEOUT -#define OPIE_LOCK_TIMEOUT (30*60) -#endif - -#ifndef MOTD_FILE -#define MOTD_FILE "/etc/motd" -#endif - -#ifndef LOGIN_PATH -#define LOGIN_PATH "/usr/ucb:/bin:/usr/bin" -#endif /* LOGIN_PATH */ - -#ifndef POINTER -#define POINTER unsigned char * -#endif /* POINTER */ - -#ifdef HAVE_SUNOS_C2_SHADOW -struct spwd { - char *sp_pwdp; -}; -#endif /* HAVE_SUNOS_C2_SHADOW */ - -#define _OPIE 1 -#endif /* _OPIE_CFG_H */ diff --git a/contrib/opie/opieaccess.5 b/contrib/opie/opieaccess.5 deleted file mode 100644 index 00dc64745427..000000000000 --- a/contrib/opie/opieaccess.5 +++ /dev/null @@ -1,92 +0,0 @@ -.\" opieaccess.5: Manual page describing the /etc/opieaccess file. -.\" -.\" Portions of this software are Copyright 1995 by Randall Atkinson and Dan -.\" McDonald, All Rights Reserved. All Rights under this copyright are assigned -.\" to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -.\" License Agreement applies to this software. -.\" -.\" History: -.\" -.\" Modified by cmetz for OPIE 2.4. Fixed "0PIE" typo. -.\" Written at NRL for OPIE 2.0. -.\" -.ll 6i -.pl 10.5i -.\" @(#)opieaccess.5 2.0 (NRL) 1/10/95 -.\" $FreeBSD$ -.\" -.lt 6.0i -.TH OPIEACCESS 5 "January 10, 1995" -.AT 3 -.SH NAME -/etc/opieaccess \- OPIE database of trusted networks - -.SH DEPRECATION NOTICE -OPIE is deprecated, and may not be available in FreeBSD 14.0 and later. - -.SH DESCRIPTION -The -.I opieaccess -file contains a list of networks that are considered trusted by the system as -far as security against passive attacks is concerned. Users from networks so -trusted will be able to log in using OPIE responses, but not be required to -do so, while users from networks that are not trusted will always be required -to use OPIE responses (the default behavior). This trust allows a site to -have a more gentle migration to OPIE by allowing it to be non-mandatory for -"inside" networks while allowing users to choose whether they with to use OPIE -to protect their passwords or not. -.sp -The entire notion of trust implemented in the -.I opieaccess -file is a major security hole because it opens your system back up to the same -passive attacks that the OPIE system is designed to protect you against. The -.I opieaccess -support in this version of OPIE exists solely because we believe that it is -better to have it so that users who don't want their accounts broken into can -use OPIE than to have them prevented from doing so by users who don't want -to use OPIE. In any environment, it should be considered a transition tool and -not a permanent fixture. When it is not being used as a transition tool, a -version of OPIE that has been built without support for the -.I opieaccess -file should be built to prevent the possibility of an attacker using this file -as a means to circumvent the OPIE software. -.sp -The -.I opieaccess -file consists of lines containing three fields separated by spaces (tabs are -properly interpreted, but spaces should be used instead) as follows: -.PP -.nf -.ta \w' 'u -Field Description -action "permit" or "deny" non-OPIE logins -address Address of the network to match -mask Mask of the network to match -.fi - -Subnets can be controlled by using the appropriate address and mask. Individual -hosts can be controlled by using the appropriate address and a mask of -255.255.255.255. If no rules are matched, the default is to deny non-OPIE -logins. - -.SH SEE ALSO -.BR ftpd (8) -.BR login (1), -.BR opie (4), -.BR opiekeys (5), -.BR opiepasswd (1), -.BR opieinfo (1), -.BR su (1), - -.SH AUTHOR -Bellcore's S/Key was written by Phil Karn, Neil M. Haller, and John S. Walden -of Bellcore. OPIE was created at NRL by Randall Atkinson, Dan McDonald, and -Craig Metz. - -S/Key is a trademark of Bell Communications Research (Bellcore). - -.SH CONTACT -OPIE is discussed on the Bellcore "S/Key Users" mailing list. To join, -send an email request to: -.sp -skey-users-request@thumper.bellcore.com diff --git a/contrib/opie/opieauto.c b/contrib/opie/opieauto.c deleted file mode 100644 index 731c6fda5897..000000000000 --- a/contrib/opie/opieauto.c +++ /dev/null @@ -1,386 +0,0 @@ -/* opieauto.c: The opieauto program. - -%%% copyright-cmetz-96 -This software is Copyright 1996-2001 by Craig Metz, All Rights Reserved. -The Inner Net License Version 3 applies to this software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - - History: - - Created by cmetz for OPIE 2.4 based on previously released - test code. Use opiestrncpy(). -*/ - -#include "opie_cfg.h" -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/un.h> -#if HAVE_SYS_TIME_H -#include <sys/time.h> -#endif /* HAVE_SYS_TIME_H */ -#include <stdio.h> -#include <errno.h> -#if HAVE_STRING_H -#include <string.h> -#endif /* HAVE_STRING_H */ -#include <getopt.h> -#if HAVE_STDLIB_H -#include <stdlib.h> -#endif /* HAVE_STDLIB_H */ -#if HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ -#include <sys/stat.h> - -#include "opie.h" - -#ifndef max -#define max(x, y) (((x) > (y)) ? (x) : (y)) -#endif /* max */ - -int window = 10; -char *myname = NULL; - -uid_t myuid = 0; - -#define MAXCLIENTS 2 -int parents, s[MAXCLIENTS + 1]; - -char cmd[1+1+1+1+4+1+OPIE_SEED_MAX+1+4+1+4+1+4+1+4+1]; - -struct cachedotp { - struct cachedotp *next; - int algorithm, base, current; - struct opie_otpkey basekey; - char seed[OPIE_SEED_MAX+1]; -}; - -struct cachedotp *head = NULL; - -char *algids[] = { NULL, NULL, NULL, "sha1", "md4", "md5" }; - -void baile(x) { - fprintf(stderr, "%s: %s: %s(%d)\n", myname, x, strerror(errno), errno); - exit(1); -} - -void bail(x) { - fprintf(stderr, "%s: %s\n", myname, x); - exit(1); -} - -void zerocache(void) -{ - struct cachedotp *c = head, *c2; - - while(c) { - c2 = c->next; - memset(c, 0, sizeof(struct cachedotp)); - c = c2; - }; -}; - -int doreq(int fd) -{ - int algorithm, sequence, i; - char *seed = NULL, *response = NULL; - - if (((cmd[0] != 'S') && (cmd[0] != 's')) || (cmd[1] != '=') || (cmd[2] != ' ')) { -#if DEBUG - fprintf(stderr, "%s: got bogus command: %s\n", myname, cmd); -#endif /* DEBUG */ - goto error; - }; - - { - char *c; - - if (((algorithm = strtoul(&cmd[3], &c, 10)) < 3) || (algorithm > 5) || (*c != ' ')) { -#if DEBUG - fprintf(stderr, "%s: got bogus algorithm: %s\n", myname, cmd); -#endif /* DEBUG */ - goto error; - }; - - if (((sequence = strtoul(c + 1, &c, 10)) <= OPIE_SEQUENCE_RESTRICT) || (sequence > OPIE_SEQUENCE_MAX)) { -#if DEBUG - fprintf(stderr, "%s: got bogus sequence: %s\n", myname, cmd); -#endif /* DEBUG */ - goto error; - }; - - if (cmd[0] == 'S') { - if (!(c = strchr(seed = c + 1, ' '))) { -#if DEBUG - fprintf(stderr, "%s: got bogus seed: %s\n", myname, cmd); -#endif /* DEBUG */ - goto error; - }; - - *c = 0; - - if (!(c = strchr(response = c + 1, '\n'))) { -#if DEBUG - fprintf(stderr, "%s: got bogus response: %s\n", myname, cmd); -#endif /* DEBUG */ - goto error; - }; - - *c = 0; - } else { - if (!(c = strchr(seed = c + 1, '\n'))) { -#if DEBUG - fprintf(stderr, "%s: got bogus seed: %s\n", myname, cmd); -#endif /* DEBUG */ - goto error; - }; - - *c = 0; - }; - }; - -#if DEBUG - fprintf(stderr, "got cmd=%c, algorithm=%d sequence=%d seed=+%s+ response=+%s+ on fd %d\n", cmd[0], algorithm, sequence, seed, response, fd); -#endif /* DEBUG */ - - seed = strdup(seed); - - if (sequence < 10) { -#if DEBUG - fprintf(stderr, "sequence < 10; can't do it\n"); -#endif /* DEBUG */ - sprintf(cmd, "%c- %d %d %s\n", cmd[0], algorithm, sequence, seed); - }; - - { - struct cachedotp **c; - - for (c = &head; *c && (strcmp((*c)->seed, seed) || ((*c)->algorithm != algorithm)); c = &((*c)->next)); - if (!(*c)) { - if (cmd[0] == 's') { -#if DEBUG - fprintf(stderr, "(seed, algorithm) not found for s command\n"); -#endif /* DEBUG */ - sprintf(cmd, "s- %d %d %s\n", algorithm, sequence, seed); - goto out; - } - - if (!(*c = malloc(sizeof(struct cachedotp)))) - baile("malloc"); - memset(*c, 0, sizeof(struct cachedotp)); - - (*c)->algorithm = algorithm; - opiestrncpy((*c)->seed, seed, OPIE_SEED_MAX); - }; - - if (cmd[0] == 'S') { - (*c)->base = max(sequence - window + 1, OPIE_SEQUENCE_RESTRICT); - (*c)->current = sequence; - - if (!opieatob8(&(*c)->basekey, response)) - goto error; - - sprintf(cmd, "S+ %d %d %s\n", algorithm, sequence, (*c)->seed); - } else { - if (sequence != ((*c)->current - 1)) { -#if DEBUG - fprintf(stderr, "out of sequence: sequence=%d, base=%d, current=%d\n", sequence, (*c)->base, (*c)->current); -#endif /* DEBUG */ - sprintf(cmd, "s- %d %d %s\n", algorithm, sequence, (*c)->seed); - goto out; - }; - - if (sequence < (*c)->base) { -#if DEBUG - fprintf(stderr, "attempt to generate below base: sequence=%d, base=%d, current=%d\n", sequence, (*c)->base, (*c)->current); -#endif /* DEBUG */ - sprintf(cmd, "s- %d %d %s\n", algorithm, sequence, (*c)->seed); - goto out; - }; - - (*c)->current = sequence; - i = sequence - (*c)->base; - { - struct opie_otpkey key; - char buffer[16+1]; - - key = (*c)->basekey; - while(i--) - opiehash(&key, algorithm); - - opiebtoa8(buffer, &key); - sprintf(cmd, "s+ %d %d %s %s\n", algorithm, sequence, (*c)->seed, buffer); - }; - }; - - printf("%c otp-%s %d %s (%d/%d)\n", cmd[0], algids[algorithm], sequence, (*c)->seed, sequence - (*c)->base, window); - fflush(stdout); - - if (sequence == (*c)->base) { - struct cachedotp *c2 = *c; - *c = (*c)->next; - memset(c2, 0, sizeof(struct cachedotp)); - free(c2); - }; - }; - -out: - write(fd, cmd, i = strlen(cmd)); - free(seed); - return 0; - -error: - fprintf(stderr, "Invalid command on fd %d\n", fd); - if (seed) - free(seed); - return -1; -} - -static void usage() -{ - fprintf(stderr, "usage: %s [-v] [-h] [-q] [-n <number of OTPs>]\n", myname); - exit(1); -} - -int main(int argc, char **argv) -{ - int i; - struct stat st; - char *sockpath; - - if (myname = strrchr(argv[0], '/')) - myname++; - else - myname = argv[0]; - - while((i = getopt(argc, argv, "w:hv")) != EOF) { - switch(i) { - case 'v': - opieversion(); - - case 'w': - if (!(window = atoi(optarg))) { - fprintf(stderr, "%s: invalid number of OTPs: %s\n", myname, optarg); - exit(1); - }; - break; - - default: - usage(); - } - }; - - { - uid_t myeuid; - - if (!(myuid = getuid()) || !(myeuid = geteuid()) || (myuid != myeuid)) - bail("this program must not be run with superuser priveleges or setuid."); - }; - - if (atexit(zerocache) < 0) - baile("atexit"); - - { - struct sockaddr_un sun; - - memset(&sun, 0, sizeof(struct sockaddr_un)); - sun.sun_family = AF_UNIX; - - { - char *c; - char *c2 = "/.opieauto"; - - if (!(c = getenv("HOME"))) - bail("getenv(HOME) failed -- no HOME variable?"); - - if (strlen(c) > (sizeof(sun.sun_path) - strlen(c2) - 1)) - bail("your HOME is too long"); - - strcpy(sun.sun_path, c); - strcat(sun.sun_path, c2); - sockpath = strdup(sun.sun_path); - }; - - if ((parents = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) - baile("socket"); - - if (unlink(sockpath) && (errno != ENOENT)) - baile("unlink"); - - if (umask(0177) < 0) - baile("umask"); - - if (bind(parents, (struct sockaddr *)&sun, sizeof(struct sockaddr_un))) - baile("bind"); - - if (stat(sockpath, &st) < 0) - baile("stat"); - - if ((st.st_uid != myuid) || (!S_ISSOCK(st.st_mode)) || ((st.st_mode & 07777) != 0600)) - bail("socket permissions and/or ownership were not correctly created."); - - if (listen(parents, 1) < 0) - baile("listen"); - }; - - { - fd_set fds, rfds, efds; - int maxfd = parents; - int i, j; - - FD_ZERO(&fds); - FD_SET(parents, &fds); - - while(1) { - memcpy(&rfds, &fds, sizeof(fd_set)); - - if (select(maxfd + 1, &rfds, NULL, NULL, NULL) < 0) - baile("select"); - - for (i = 0; s[i]; i++) { - if (!FD_ISSET(s[i], &rfds)) - continue; - - if (((j = read(s[i], cmd, sizeof(cmd)-1)) <= 0) || ((cmd[j] = 0) || doreq(s[i]))) { - close(s[i]); - FD_CLR(s[i], &fds); - - if (s[i] == maxfd) - maxfd--; - - for (j = i; s[j]; s[j] = s[j + 1], j++); - FD_SET(parents, &fds); - i--; - continue; - }; - }; - - if (FD_ISSET(parents, &rfds)) { - for (i = 0; s[i]; i++) - if (i > MAXCLIENTS) - bail("this message never printed"); - - if (stat(sockpath, &st) < 0) - baile("stat"); - - if ((st.st_uid != myuid) || (!S_ISSOCK(st.st_mode)) || ((st.st_mode & 07777) != 0600)) - bail("socket permissions and/or ownership has been messed with."); - - if ((s[i] = accept(parents, NULL, 0)) < 0) - baile("accept"); - - FD_SET(s[i], &fds); - if (s[i] > maxfd) - maxfd = s[i]; - - sprintf(cmd, "C+ %d\n", window); - if (write(s[i], cmd, j = strlen(cmd)) != j) - baile("write"); - - if (++i == MAXCLIENTS) - FD_CLR(parents, &fds); - } - } - } -} diff --git a/contrib/opie/opieftpd.8 b/contrib/opie/opieftpd.8 deleted file mode 100644 index b527bd2426ca..000000000000 --- a/contrib/opie/opieftpd.8 +++ /dev/null @@ -1,294 +0,0 @@ -.\" opieftpd.8: Manual page describing the FTP daemon. -.\" -.\" %%% portions-copyright-cmetz-98 -.\" Portions of this software are Copyright 1998-1999 by Craig Metz, All Rights -.\" Reserved. The Inner Net License Version 2 applies to these portions of -.\" the software. -.\" You should have received a copy of the license with this software. If -.\" you didn't get a copy, you may request one from <license@inner.net>. -.\" -.\" -.\" Portions of this software are Copyright 1995 by Randall Atkinson and Dan -.\" McDonald, All Rights Reserved. All Rights under this copyright are assigned -.\" to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -.\" License Agreement applies to this software. -.\" -.\" History: -.\" -.\" Modified by cmetz for OPIE 2.4. Document -u option. -.\" Modified at NRL for OPIE 2.0. -.\" Originally from BSD. -.\" -.\" NOTE: -.\" -.\" This manual page uses the BSD >= Net/2 "mandoc" macros and may not -.\" format properly on all systems. -.\" -.\" Copyright (c) 1985, 1988, 1991 The Regents of the University of California. -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\" must display the following acknowledgement: -.\" This product includes software developed by the University of -.\" California, Berkeley and its contributors. -.\" 4. Neither the name of the University nor the names of its contributors -.\" may be used to endorse or promote products derived from this software -.\" without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" @(#)opieopieftpd.8 6.9 (Berkeley) 3/16/91 -.\" -.TH OPIEFTPD 8 "10 January 1995" - -.SH NAME -opieftpd \- File Transfer Protocol server that uses OPIE authentication - -.SH SYNOPSIS -.B opieftpd -[\-d] [\-l] [\-t -.I timeout -] [\-T -.I maxtimeout -] [\-u -.I umask -] - -.SH DESCRIPTION -.I opieftpd -is the Internet File Transfer Protocol server process. The server uses the -TCP protocol and listens at the port specified in the ftp service -specification; see -.IR services (5). - -.SH OPTIONS -.TP -.B \-d -Debugging information is written to the system logs. -.TP -.B \-l -Each -.IR ftp (1) -session is logged in the system logs. -.TP -.B \-t -The inactivity timeout period is set to -.I timeout -seconds (the default is 15 minutes). -.TP -.B \-T -A client may also request a different timeout period; -the maximum period allowed may be set to -.I maxtimeout -seconds with the -.B \-T -option. The default limit is 2 hours. -.B \-u -Set the default umask value to -.I umask. -.SH COMMANDS -The ftp server currently supports the following ftp -requests; case is not distinguished: -.PP -.nf -.ta \w'Request 'u -Request Description -ABOR abort previous command -ACCT specify account (ignored) -ALLO allocate storage (vacuously) -APPE append to a file -CDUP change to parent of current working directory -CWD change working directory -DELE delete a file -HELP give help information -LIST give a list of files in a directory -MKD make a directory -MDTM show last modification time of file -MODE specify data transfer mode -NLST give name list of files in directory -NOOP do nothing -PASS specify password -PASV prepare for server-to-server transfer -PORT specify data connection port -PWD print the current working directory -QUIT terminate session -REST restart incomplete transfer -RETR retrieve a file -RMD remove a directory -RNFR specify rename-from file name -RNTO specify rename-to file name -SITE non-standard commands (see next section) -SIZE return size of file -STAT return status of server -STOR store a file -STOU store a file with a unique name -STRU specify data transfer structure -SYST show operating system type of server system -TYPE specify data transfer type -USER specify user name -XCUP change to parent of current working directory (deprecated) -XCWD change working directory (deprecated) -XMKD make a directory (deprecated) -XPWD print the current working directory (deprecated) -XRMD remove a directory (deprecated) -.fi - -The following non-standard or UNIX-specific commands are supported -by the SITE request: -.PP -.nf -.ta \w'Request 'u -Request Description -UMASK change umask (e.g. SITE UMASK 002) -IDLE set idle-timer (e.g. SITE IDLE 60) -CHMOD change mode of a file (e.g. SITE CHMOD 755 file) -HELP give help information (e.g. SITE HELP) -.fi -.sp -The remaining ftp requests specified in Internet RFC-959 are -recognized, but not implemented. -.sp -MDTM and SIZE are not specified in RFC-959, but will appear -in the next updated FTP RFC. - -The ftp server will abort an active file transfer only when the -ABOR command is preceded by a Telnet "Interrupt Process" (IP) -signal and a Telnet "Synch" signal in the command Telnet stream, -as described in Internet RFC-959. -If a STAT command is received during a data transfer, preceded by -a Telnet IP and Synch, transfer status will be returned. -.I opieftpd -interprets file names according to the globbing conventions used by -.IR csh (1). -This allows users to utilize the metacharacters -\&*?[]{}~. -.sp -.I opieftpd -authenticates users according to three rules: -.sp -The user name must be in the password data base, -.I /etc/passwd, -and not have a null password. In this case, a password -must be provided by the client before any file operations -may be performed. -.sp -The user name must not appear in the file -.I /etc/ftpusers. -.sp -The user must have a standard shell returned by -.IR getusershell (3). -.sp -If the user name is -.I anonymous -or -.I ftp, -an anonymous ftp account must be present in the password -file (user -.I ftp ). -In this case, the user is allowed to log in by specifying any -password (by convention, this is given as the client host's name). - -In the last case, -.I opieftpd -takes special measures to restrict the client's access privileges. -The server performs a -.IR chroot (2) -command to the home directory of the -.I ftp -user. -In order that system security is not breached, it is recommended -that the -.I ftp -subtree be constructed with care; the following -rules are recommended: -.sp -.TP -.B ~ftp -Make the home directory owned by -.I ftp -and unwritable by anyone. -.TP -.B ~ftp/bin -Make this directory owned by the super-user and unwritable by -anyone. The program -.IR ls (1) -must be present to support the LIST command. This -program should have mode 111. -.TP -.B ~ftp/etc -Make this directory owned by the super-user and unwritable by -anyone. The files -.IR passwd (5) -and -.IR group (5) -must be present for the -.IR ls (1) -command to be able to produce owner names rather than numbers. -The password field in -.I passwd -is not used, and should not contain real encrypted passwords. -These files should be mode 444. -.TP -.B ~ftp/pub -Make this directory mode 777 and owned by -.I ftp. -Users should then place files which are to be accessible via the -anonymous account in this directory. -.SH SEE ALSO -.BR ftpd (8), -.BR ftp (1), -.BR opie (4), -.BR opiekey (1), -.BR opiepasswd (1), -.BR opieinfo (1), -.BR opiesu (1), -.BR opieftpd (8), -.BR opiekeys (5), -.BR opieaccess (5) - -.SH BUGS -The anonymous account is inherently dangerous and should -avoided when possible. In -.I opieftpd, -it is a compile-time option that should be disabled if it is not -being used. -The server must run as the super-user -to create sockets with privileged port numbers. It maintains -an effective user id of the logged in user, reverting to -the super-user only when binding addresses to sockets. The -possible security holes have been scrutinized, but are possibly incomplete. - -.SH HISTORY -The -.I ftpd -command appeared in 4.2BSD. - -.SH AUTHOR -Originally written for BSD, -.I ftpd -was modified at NRL by Randall Atkinson, Dan McDonald, and Craig Metz to -support OTP authentication. - -.SH CONTACT -OPIE is discussed on the Bellcore "S/Key Users" mailing list. To join, -send an email request to: -.sp -skey-users-request@thumper.bellcore.com diff --git a/contrib/opie/opieftpd.c b/contrib/opie/opieftpd.c deleted file mode 100644 index eb6015f4130e..000000000000 --- a/contrib/opie/opieftpd.c +++ /dev/null @@ -1,1715 +0,0 @@ -/* opieftpd.c: Main program for an FTP daemon. - -%%% portions-copyright-cmetz-96 -Portions of this software are Copyright 1996-1999 by Craig Metz, All Rights -Reserved. The Inner Net License Version 2 applies to these portions of -the software. -You should have received a copy of the license with this software. If -you didn't get a copy, you may request one from <license@inner.net>. - -Portions of this software are Copyright 1995 by Randall Atkinson and Dan -McDonald, All Rights Reserved. All Rights under this copyright are assigned -to the U.S. Naval Research Laboratory (NRL). The NRL Copyright Notice and -License Agreement applies to this software. - - History: - - Modified by cmetz for OPIE 2.4. Add id parameter to opielogwtmp. Use - opiestrncpy(). Fix incorrect use of setproctitle(). - Modified by cmetz for OPIE 2.32. Remove include of dirent.h here; it's - done already (and conditionally) in opie_cfg.h. - Modified by cmetz for OPIE 2.31. Merged in some 4.4BSD-Lite changes. - Merged in a security fix to BSD-derived ftpds. - Modified by cmetz for OPIE 2.3. Fixed the filename at the top. - Moved LS_COMMAND here. - Modified by cmetz for OPIE 2.2. Use FUNCTION definition et al. - Removed useless strings (I don't think that removing the - ucb copyright one is a problem -- please let me know if - I'm wrong). Changed default CMASK to 077. Removed random - comments. Use ANSI stdargs for reply/lreply if we can, - added stdargs version of reply/lreply. Don't declare the - tos variable unless IP_TOS defined. Include stdargs headers - early. More headers ifdefed. Made everything static. - Got rid of gethostname() call and use of hostname. Pared - down status response for places where header files frequently - cause trouble. Made logging of user logins (ala -l) - non-optional. Moved reply()/lrepy(). Fixed some prototypes. - Modified at NRL for OPIE 2.1. Added declaration of envp. Discard - result of opiechallenge (allows access control to work). - Added patches for AIX. Symbol changes for autoconf. - Modified at NRL for OPIE 2.01. Changed password lookup handling - to avoid problems with drain-bamaged shadow password packages. - Properly handle internal state for anonymous FTP. Unlock - user accounts properly if login fails because of /etc/shells. - Make sure to close syslog by function to avoid problems with - drain bamaged syslog implementations. - Modified at NRL for OPIE 2.0. - Originally from BSD Net/2. - - There is some really, really ugly code in here. - -$FreeBSD$ -*/ -/* - * Copyright (c) 1985, 1988, 1990 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include "opie_cfg.h" - -#if HAVE_ANSISTDARG -#include <stdarg.h> -#endif /* HAVE_ANSISTDARG */ - -/* - * FTP server. - */ - -#if HAVE_SYS_PARAM_H -#include <sys/param.h> -#endif /* HAVE_SYS_PARAM_H */ -#include <sys/stat.h> -/* #include <sys/ioctl.h> */ -#include <sys/socket.h> -#include <sys/wait.h> -#ifdef SYS_FCNTL_H -#include <sys/fcntl.h> -#else -#include <fcntl.h> -#endif /* SYS_FCNTL_H */ -#include <sys/types.h> - -#include <netinet/in.h> -#include <netinet/in_systm.h> -#include <netinet/ip.h> - -#define FTP_NAMES -#include <arpa/ftp.h> -#include <arpa/inet.h> -#include <arpa/telnet.h> - -#include <signal.h> -#include <fcntl.h> -#if HAVE_TIME_H -#include <time.h> -#endif /* HAVE_TIME_H */ -#if HAVE_PWD_H -#include <pwd.h> -#endif /* HAVE_PWD_H */ -#include <setjmp.h> -#include <netdb.h> -#include <errno.h> -#include <syslog.h> -#if HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ -#include <stdio.h> -#include <ctype.h> -#include <stdlib.h> -#include <string.h> -#include <grp.h> - -#include "opie.h" - -#if HAVE_SHADOW_H -#include <shadow.h> -#endif /* HAVE_SHADOW_H */ - -#if HAVE_CRYPT_H -#include <crypt.h> -#endif /* HAVE_CRYPT_H */ - -#if HAVE_SYS_UTSNAME_H -#include <sys/utsname.h> -#endif /* HAVE_SYS_UTSNAME_H */ - -#ifdef _AIX -#include <sys/id.h> -#include <sys/priv.h> -#endif /* _AIX */ - -#ifdef IP_TOS -#ifndef IPTOS_THROUGHPUT -#undef IP_TOS -#endif /* !IPTOS_THROUGHPUT */ -#ifndef IPTOS_LOWDELAY -#undef IP_TOS -#endif /* !IPTOS_LOWDELAY */ -#endif /* IP_TOS */ - -extern int errno; -extern char *home; /* pointer to home directory for glob */ -extern FILE *ftpd_popen __P((char *, char *)); -extern int ftpd_pclose __P((FILE *)); -extern char cbuf[]; -extern off_t restart_point; - -static struct sockaddr_in ctrl_addr; -static struct sockaddr_in data_source; -struct sockaddr_in data_dest; -struct sockaddr_in his_addr; -static struct sockaddr_in pasv_addr; - -static int data; -jmp_buf errcatch; -static jmp_buf urgcatch; -int logged_in; -struct passwd *pw; -int debug; -int timeout = 900; /* timeout after 15 minutes of inactivity */ -int maxtimeout = 7200; /* don't allow idle time to be set beyond 2 hours */ - -#if DOANONYMOUS -static int guest; -#endif /* DOANONYMOUS */ -int type; -int form; -static int stru; /* avoid C keyword */ -static int mode; -int usedefault = 1; /* for data transfers */ -int pdata = -1; /* for passive mode */ -static int transflag; -static off_t file_size; -static off_t byte_count; - -#if (!defined(CMASK) || CMASK == 0) -#undef CMASK -#define CMASK 077 -#endif - -static int defumask = CMASK; /* default umask value */ -char tmpline[7]; -char remotehost[MAXHOSTNAMELEN]; - -/* - * Timeout intervals for retrying connections - * to hosts that don't accept PORT cmds. This - * is a kludge, but given the problems with TCP... - */ -#define SWAITMAX 90 /* wait at most 90 seconds */ -#define SWAITINT 5 /* interval between retries */ - -static int swaitmax = SWAITMAX; -static int swaitint = SWAITINT; - -#if DOTITLE -static char **Argv = NULL; /* pointer to argument vector */ -static char *LastArgv = NULL; /* end of argv */ -static char proctitle[BUFSIZ]; /* initial part of title */ -#endif /* DOTITLE */ - -static int af_pwok = 0, pwok = 0; -static struct opie opiestate; - -VOIDRET perror_reply __P((int, char *)); -VOIDRET dologout __P((int)); -char *getline __P((char *, int, FILE *)); -VOIDRET upper __P((char *)); - -static VOIDRET lostconn __P((int)); -static VOIDRET myoob __P((int)); -static FILE *getdatasock __P((char *)); -static FILE *dataconn __P((char *, off_t, char *)); -static int checkuser __P((char *)); -static VOIDRET end_login __P((void)); -static VOIDRET send_data __P((FILE *, FILE *, off_t)); -static int receive_data __P((FILE *, FILE *)); -static char *gunique __P((char *)); -static char *sgetsave __P((char *)); - -int opielogwtmp __P((char *, char *, char *, char *)); - -int fclose __P((FILE *)); - -#ifdef HAVE_ANSISTDARG -VOIDRET reply FUNCTION((stdarg is ANSI only), int n AND char *fmt AND ...) -{ - va_list ap; - char buffer[1024]; - - va_start(ap, fmt); - vsprintf(buffer, fmt, ap); - va_end(ap); - - printf("%d %s\r\n", n, buffer); - fflush(stdout); - if (debug) - syslog(LOG_DEBUG, "<--- %d %s", n, buffer); -} -#else /* HAVE_ANSISTDARG */ -VOIDRET reply FUNCTION((n, fmt, p0, p1, p2, p3, p4, p5), int n AND char *fmt AND int p0 AND int p1 AND int p2 AND int p3 AND int p4 AND int p5) -{ - printf("%d ", n); - printf(fmt, p0, p1, p2, p3, p4, p5); - printf("\r\n"); - fflush(stdout); - if (debug) { - syslog(LOG_DEBUG, "<--- %d ", n); - syslog(LOG_DEBUG, fmt, p0, p1, p2, p3, p4, p5); - } -} -#endif /* HAVE_ANSISTDARG */ - -#ifdef HAVE_ANSISTDARG -VOIDRET lreply FUNCTION((stdarg is ANSI only), int n AND char *fmt AND ...) -{ - va_list ap; - char buffer[1024]; - - va_start(ap, fmt); - vsprintf(buffer, fmt, ap); - va_end(ap); - - printf("%d- %s\r\n", n, buffer); - fflush(stdout); - if (debug) - syslog(LOG_DEBUG, "<--- %d- %s", n, buffer); -} -#else /* HAVE_ANSISTDARG */ -VOIDRET lreply FUNCTION((n, fmt, p0, p1, p2, p3, p4, p5), int n AND char *fmt AND int p0 AND int p1 AND int p2 AND int p3 AND int p4 AND int p5) -{ - printf("%d- ", n); - printf(fmt, p0, p1, p2, p3, p4, p5); - printf("\r\n"); - fflush(stdout); - if (debug) { - syslog(LOG_DEBUG, "<--- %d- ", n); - syslog(LOG_DEBUG, fmt, p0, p1, p2, p3, p4, p5); - } -} -#endif /* HAVE_ANSISTDARG */ - -VOIDRET enable_signalling FUNCTION_NOARGS -{ - signal(SIGPIPE, lostconn); - if ((int)signal(SIGURG, myoob) < 0) - syslog(LOG_ERR, "signal: %m"); -} - -VOIDRET disable_signalling FUNCTION_NOARGS -{ - signal(SIGPIPE, SIG_IGN); - if ((int)signal(SIGURG, SIG_IGN) < 0) - syslog(LOG_ERR, "signal: %m"); -} - -static VOIDRET lostconn FUNCTION((input), int input) -{ - if (debug) - syslog(LOG_DEBUG, "lost connection"); - dologout(-1); -} - -static char ttyline[20]; - -/* - * Helper function for sgetpwnam(). - */ -static char *sgetsave FUNCTION((s), char *s) -{ - char *new = malloc((unsigned) strlen(s) + 1); - - if (new == NULL) { - perror_reply(421, "Local resource failure: malloc"); - dologout(1); - /* NOTREACHED */ - } - strcpy(new, s); - return (new); -} - -/* - * Save the result of a getpwnam. Used for USER command, since - * the data returned must not be clobbered by any other command - * (e.g., globbing). - */ -static struct passwd *sgetpwnam FUNCTION((name), char *name) -{ - static struct passwd save; - register struct passwd *p; - -#if HAVE_SHADOW - struct spwd *spwd; -#endif /* HAVE_SHADOW */ - - if ((p = getpwnam(name)) == NULL) - return (p); - -#if HAVE_SHADOW - if ((spwd = getspnam(name)) == NULL) - return NULL; - - endspent(); - - p->pw_passwd = spwd->sp_pwdp; -#endif /* HAVE_SHADOW */ - - endpwent(); - - if (save.pw_name) { - free(save.pw_name); - free(save.pw_passwd); - free(save.pw_gecos); - free(save.pw_dir); - free(save.pw_shell); - } - save = *p; - save.pw_name = sgetsave(p->pw_name); - save.pw_passwd = sgetsave(p->pw_passwd); - save.pw_gecos = sgetsave(p->pw_gecos); - save.pw_dir = sgetsave(p->pw_dir); - save.pw_shell = sgetsave(p->pw_shell); - return (&save); -} - -int login_attempts; /* number of failed login attempts */ -int askpasswd; /* had user command, ask for passwd */ - -/* - * USER command. - * Sets global passwd pointer pw if named account exists and is acceptable; - * sets askpasswd if a PASS command is expected. If logged in previously, - * need to reset state. If name is "ftp" or "anonymous", the name is not in - * _PATH_FTPUSERS, and ftp account exists, set guest and pw, then just return. - * If account doesn't exist, ask for passwd anyway. Otherwise, check user - * requesting login privileges. Disallow anyone who does not have a standard - * shell as returned by getusershell(). Disallow anyone mentioned in the file - * _PATH_FTPUSERS to allow people such as root and uucp to be avoided. - */ -int user FUNCTION((name), char *name) -{ - register char *cp; - char *shell; - - if (logged_in) { -#if DOANONYMOUS - if (guest) { - reply(530, "Can't change user from guest login."); - return -1; - } -#endif /* DOANONMOUS */ - end_login(); - } - askpasswd = 1; -#if DOANONYMOUS - guest = 0; - if (!strcmp(name, "ftp") || !strcmp(name, "anonymous")) - if (!checkuser("ftp") && !checkuser("anonymous")) - if ((pw = sgetpwnam("ftp")) != NULL) { - guest = 1; - askpasswd = 1; - reply(331, "Guest login ok, send your e-mail address as your password."); - syslog(LOG_INFO, "Anonymous FTP connection made from host %s.", remotehost); - return 0; - } -#endif /* DOANONYMOUS */ - if (pw = sgetpwnam(name)) { - if ((shell = pw->pw_shell) == NULL || *shell == 0) - shell = _PATH_BSHELL; - while ((cp = getusershell()) != NULL) - if (!strcmp(cp, shell)) - break; - endusershell(); - if (cp == NULL || checkuser(name) || ((pw->pw_passwd[0] == '*') || (pw->pw_passwd[0] == '#'))) { -#if DEBUG - if (!cp) - syslog(LOG_DEBUG, "Couldn't find %s in the list of valid shells.", pw->pw_shell); - if (checkuser(name)) - syslog(LOG_DEBUG, "checkuser failed - user in /etc/ftpusers?"); - if (((pw->pw_passwd[0] == '*') || (pw->pw_passwd[0] == '#'))) - syslog(LOG_DEBUG, "Login disabled: pw_passwd == %s", pw->pw_passwd); -#endif /* DEBUG */ - pw = (struct passwd *) NULL; - askpasswd = -1; - } - } - { - char prompt[OPIE_CHALLENGE_MAX + 1]; - - opiechallenge(&opiestate, name, prompt); - - if (askpasswd == -1) { - syslog(LOG_WARNING, "Invalid FTP user name %s attempted from %s.", name, remotehost); - pwok = 0; - } else - pwok = af_pwok && opiealways(pw->pw_dir); - -#if NEW_PROMPTS - reply(331, "Response to %s %s for %s.", prompt, -#else /* NEW_PROMPTS */ - reply(331, "OTP response %s %s for %s.", prompt, -#endif /* NEW_PROMPTS */ - pwok ? "requested" : "required", name); - } - /* Delay before reading passwd after first failed attempt to slow down - passwd-guessing programs. */ - if (login_attempts) - sleep((unsigned) login_attempts); - - return 0; -} - -/* - * Check if a user is in the file _PATH_FTPUSERS - */ -static int checkuser FUNCTION((name), char *name) -{ - register FILE *fd; - register char *p; - char line[BUFSIZ]; - - if ((fd = fopen(_PATH_FTPUSERS, "r")) != NULL) { - while (fgets(line, sizeof(line), fd) != NULL) - if ((p = strchr(line, '\n')) != NULL) { - *p = '\0'; - if (line[0] == '#') - continue; - if (!strcmp(line, name)) { - fclose(fd); - return (1); - } - } - fclose(fd); - } - return (0); -} - -/* - * Terminate login as previous user, if any, resetting state; - * used when USER command is given or login fails. - */ -static VOIDRET end_login FUNCTION_NOARGS -{ - disable_signalling(); - if (seteuid((uid_t) 0)) - syslog(LOG_ERR, "Can't set euid"); - if (logged_in) - opielogwtmp(ttyline, "", "", "ftp"); - pw = NULL; - logged_in = 0; -#if DOANONYMOUS - guest = 0; -#endif /* DOANONYMOUS */ - enable_signalling(); -} - -VOIDRET pass FUNCTION((passwd), char *passwd) -{ - int legit = askpasswd + 1, i; - - if (logged_in || askpasswd == 0) { - reply(503, "Login with USER first."); - return; - } - askpasswd = 0; - -#if DOANONYMOUS - if (!guest) { /* "ftp" is only account allowed no password */ -#endif /* DOANONYMOUS */ - i = opieverify(&opiestate, passwd); - if (legit && i && pwok) - i = strcmp(crypt(passwd, pw->pw_passwd), pw->pw_passwd); - if (!legit || i) { - reply(530, "Login incorrect."); - pw = NULL; - if (login_attempts++ >= 5) { - syslog(LOG_WARNING, - "Repeated login failures for user %s from %s", - pw->pw_name, remotehost); - exit(0); - } - return; - } -#if DOANONYMOUS - } else - if ((passwd[0] <= ' ') || checkuser(passwd)) { - reply(530, "No identity, no service."); - syslog(LOG_DEBUG, "Bogus address: %s", passwd); - exit(0); - } -#endif /* DOANONYMOUS */ - login_attempts = 0; /* this time successful */ - if (setegid((gid_t) pw->pw_gid) < 0) { - reply(550, "Can't set gid."); - syslog(LOG_DEBUG, "gid = %d, errno = %s(%d)", pw->pw_gid, strerror(errno), errno); - return; - } - initgroups(pw->pw_name, pw->pw_gid); - - /* open wtmp before chroot */ - sprintf(ttyline, "ftp%d", getpid()); - opielogwtmp(ttyline, pw->pw_name, remotehost, "ftp"); - logged_in = 1; - -#if DOANONYMOUS - if (guest) { - /* We MUST do a chdir() after the chroot. Otherwise the old current - directory will be accessible as "." outside the new root! */ - if (chroot(pw->pw_dir) < 0 || chdir("/") < 0) { - reply(550, "Can't set guest privileges."); - goto bad; - } - } else -#endif /* DOANONYMOUS */ - if (chdir(pw->pw_dir) < 0) { - if (chdir("/") < 0) { - reply(530, "User %s: can't change directory to %s.", - pw->pw_name, pw->pw_dir); - goto bad; - } else - lreply(230, "No directory! Logging in with home=/"); - } -/* This patch was contributed by an OPIE user. We don't know what it - does, exactly. It may or may not work. */ -#ifdef _AIX - { - priv_t priv; - priv.pv_priv[0] = 0; - priv.pv_priv[1] = 0; - setgroups(NULL, NULL); - if (setpriv(PRIV_SET|PRIV_INHERITED|PRIV_EFFECTIVE|PRIV_BEQUEATH, - &priv, sizeof(priv_t)) < 0 || - setgidx(ID_REAL|ID_EFFECTIVE, (gid_t)pw->pw_gid) < 0 || - setuidx(ID_REAL|ID_EFFECTIVE, (uid_t)pw->pw_uid) < 0 || - seteuid((uid_t)pw->pw_uid) < 0) { - reply(550, "Can't set uid (_AIX3)."); - goto bad; - } - } -#else /* _AIX */ - if (seteuid((uid_t) pw->pw_uid) < 0) { - reply(550, "Can't set uid."); - goto bad; - } -#endif /* _AIX */ - /* - * Display a login message, if it exists. - * N.B. reply(230,) must follow the message. - */ - { - FILE *fd; - - if ((fd = fopen(_PATH_FTPLOGINMESG, "r")) != NULL) { - char *cp, line[128]; - - while (fgets(line, sizeof(line), fd) != NULL) { - if ((cp = strchr(line, '\n')) != NULL) - *cp = '\0'; - lreply(230, "%s", line); - } - (void) fflush(stdout); - (void) fclose(fd); - } - } -#if DOANONYMOUS - if (guest) { - reply(230, "Guest login ok, access restrictions apply."); -#if DOTITLE - setproctitle("%s: anonymous/%.*s", remotehost, - sizeof(proctitle) - sizeof(remotehost) - sizeof(": anonymous/"), - passwd); -#endif /* DOTITLE */ - syslog(LOG_NOTICE, "ANONYMOUS FTP login from %s with ID %s", - remotehost, passwd); - } else -#endif /* DOANONYMOUS */ - { - reply(230, "User %s logged in.", pw->pw_name); - -#if DOTITLE - setproctitle("%s: %s", remotehost, pw->pw_name); -#endif /* DOTITLE */ - syslog(LOG_INFO, "FTP login from %s with user name %s", remotehost, pw->pw_name); - } - home = pw->pw_dir; /* home dir for globbing */ - umask(defumask); - return; - -bad: - /* Forget all about it... */ - end_login(); -} - -VOIDRET retrieve FUNCTION((cmd, name), char *cmd AND char *name) -{ - FILE *fin, *dout; - struct stat st; - int (*closefunc) (); - - if (cmd == 0) { - fin = fopen(name, "r"), closefunc = fclose; - st.st_size = 0; - } else { - char line[BUFSIZ]; - - snprintf(line, sizeof(line), cmd, name); - name = line; - fin = ftpd_popen(line, "r"), closefunc = ftpd_pclose; - st.st_size = -1; -#if HAVE_ST_BLKSIZE - st.st_blksize = BUFSIZ; -#endif /* HAVE_ST_BLKSIZE */ - } - if (fin == NULL) { - if (errno != 0) - perror_reply(550, name); - return; - } - if (cmd == 0 && - (fstat(fileno(fin), &st) < 0 || (st.st_mode & S_IFMT) != S_IFREG)) { - reply(550, "%s: not a plain file.", name); - goto done; - } - if (restart_point) { - if (type == TYPE_A) { - register int i, n, c; - - n = restart_point; - i = 0; - while (i++ < n) { - if ((c = getc(fin)) == EOF) { - perror_reply(550, name); - goto done; - } - if (c == '\n') - i++; - } - } else - if (lseek(fileno(fin), restart_point, SEEK_SET /* L_SET */ ) < 0) { - perror_reply(550, name); - goto done; - } - } - dout = dataconn(name, st.st_size, "w"); - if (dout == NULL) - goto done; -#if HAVE_ST_BLKSIZE - send_data(fin, dout, st.st_blksize); -#else /* HAVE_ST_BLKSIZE */ - send_data(fin, dout, BUFSIZ); -#endif /* HAVE_ST_BLKSIZE */ - fclose(dout); - data = -1; - pdata = -1; -done: - (*closefunc) (fin); -} - -VOIDRET store FUNCTION((name, mode, unique), char *name AND char *mode AND int unique) -{ - FILE *fout, *din; - struct stat st; - int (*closefunc) (); - - if (unique && stat(name, &st) == 0 && - (name = gunique(name)) == NULL) - return; - - if (restart_point) - mode = "r+w"; - fout = fopen(name, mode); - closefunc = fclose; - if (fout == NULL) { - perror_reply(553, name); - return; - } - if (restart_point) { - if (type == TYPE_A) { - register int i, n, c; - - n = restart_point; - i = 0; - while (i++ < n) { - if ((c = getc(fout)) == EOF) { - perror_reply(550, name); - goto done; - } - if (c == '\n') - i++; - } - /* We must do this seek to "current" position because we are changing - from reading to writing. */ - if (fseek(fout, 0L, SEEK_CUR /* L_INCR */ ) < 0) { - perror_reply(550, name); - goto done; - } - } else - if (lseek(fileno(fout), restart_point, SEEK_SET /* L_SET */ ) < 0) { - perror_reply(550, name); - goto done; - } - } - din = dataconn(name, (off_t) - 1, "r"); - if (din == NULL) - goto done; - if (receive_data(din, fout) == 0) { - if (unique) - reply(226, "Transfer complete (unique file name:%s).", - name); - else - reply(226, "Transfer complete."); - } - fclose(din); - data = -1; - pdata = -1; -done: - (*closefunc) (fout); -} - -static FILE *getdatasock FUNCTION((mode), char *mode) -{ - int s, on = 1, tries; - - if (data >= 0) - return (fdopen(data, mode)); - disable_signalling(); - if (seteuid((uid_t) 0)) - syslog(LOG_ERR, "Can't set euid"); - s = socket(AF_INET, SOCK_STREAM, 0); - if (s < 0) - goto bad; - if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, - (char *) &on, sizeof(on)) < 0) - goto bad; - /* anchor socket to avoid multi-homing problems */ - data_source.sin_family = AF_INET; - data_source.sin_addr = ctrl_addr.sin_addr; - for (tries = 1;; tries++) { - if (bind(s, (struct sockaddr *) & data_source, - sizeof(data_source)) >= 0) - break; - if (errno != EADDRINUSE || tries > 10) - goto bad; - sleep(tries); - } - if (seteuid((uid_t) pw->pw_uid)) - syslog(LOG_ERR, "Can't set euid"); - enable_signalling(); -#ifdef IP_TOS - on = IPTOS_THROUGHPUT; - if (setsockopt(s, IPPROTO_IP, IP_TOS, (char *) &on, sizeof(int)) < 0) - syslog(LOG_WARNING, "setsockopt (IP_TOS): %m"); -#endif - return (fdopen(s, mode)); -bad: - { - int t = errno; - - if (seteuid((uid_t) pw->pw_uid)) - syslog(LOG_ERR, "Can't set euid"); - enable_signalling(); - close(s); - - errno = t; - } - return (NULL); -} - -static FILE *dataconn FUNCTION((name, size, mode), char *name AND off_t size AND char *mode) -{ - char sizebuf[32]; - FILE *file; - int retry = 0; -#ifdef IP_TOS - int tos; -#endif /* IP_TOS */ - - file_size = size; - byte_count = 0; - if (size != (off_t) - 1) - snprintf(sizebuf, sizeof(sizebuf), " (%ld bytes)", size); - else - strcpy(sizebuf, ""); - if (pdata >= 0) { - struct sockaddr_in from; - int s, fromlen = sizeof(from); - - s = accept(pdata, (struct sockaddr *) & from, &fromlen); - if (s < 0) { - reply(425, "Can't open data connection."); - close(pdata); - pdata = -1; - return (NULL); - } - close(pdata); - pdata = s; -#ifdef IP_TOS - tos = IPTOS_LOWDELAY; - setsockopt(s, IPPROTO_IP, IP_TOS, (char *) &tos, - sizeof(int)); - -#endif - reply(150, "Opening %s mode data connection for %s%s.", - type == TYPE_A ? "ASCII" : "BINARY", name, sizebuf); - return (fdopen(pdata, mode)); - } - if (data >= 0) { - reply(125, "Using existing data connection for %s%s.", - name, sizebuf); - usedefault = 1; - return (fdopen(data, mode)); - } - if (usedefault) - data_dest = his_addr; - usedefault = 1; - file = getdatasock(mode); - if (file == NULL) { - reply(425, "Can't create data socket (%s,%d): %s.", - inet_ntoa(data_source.sin_addr), - ntohs(data_source.sin_port), strerror(errno)); - return (NULL); - } - data = fileno(file); - while (connect(data, (struct sockaddr *) & data_dest, - sizeof(data_dest)) < 0) { - if (errno == EADDRINUSE && retry < swaitmax) { - sleep((unsigned) swaitint); - retry += swaitint; - continue; - } - perror_reply(425, "Can't build data connection"); - fclose(file); - data = -1; - return (NULL); - } - reply(150, "Opening %s mode data connection for %s%s.", - type == TYPE_A ? "ASCII" : "BINARY", name, sizebuf); - return (file); -} - -/* - * Tranfer the contents of "instr" to - * "outstr" peer using the appropriate - * encapsulation of the data subject - * to Mode, Structure, and Type. - * - * NB: Form isn't handled. - */ -static VOIDRET send_data FUNCTION((instr, outstr, blksize), FILE *instr AND FILE *outstr AND off_t blksize) -{ - register int c, cnt; - register char *buf; - int netfd, filefd; - - transflag++; - if (setjmp(urgcatch)) { - transflag = 0; - return; - } - switch (type) { - - case TYPE_A: - while ((c = getc(instr)) != EOF) { - byte_count++; - if (c == '\n') { - if (ferror(outstr)) - goto data_err; - putc('\r', outstr); - } - putc(c, outstr); - } - fflush(outstr); - transflag = 0; - if (ferror(instr)) - goto file_err; - if (ferror(outstr)) - goto data_err; - reply(226, "Transfer complete."); - return; - - case TYPE_I: - case TYPE_L: - if ((buf = malloc((u_int) blksize)) == NULL) { - transflag = 0; - perror_reply(451, "Local resource failure: malloc"); - return; - } - netfd = fileno(outstr); - filefd = fileno(instr); - while ((cnt = read(filefd, buf, (u_int) blksize)) > 0 && - write(netfd, buf, cnt) == cnt) - byte_count += cnt; - transflag = 0; - free(buf); - if (cnt != 0) { - if (cnt < 0) - goto file_err; - goto data_err; - } - reply(226, "Transfer complete."); - return; - default: - transflag = 0; - reply(550, "Unimplemented TYPE %d in send_data", type); - return; - } - -data_err: - transflag = 0; - perror_reply(426, "Data connection"); - return; - -file_err: - transflag = 0; - perror_reply(551, "Error on input file"); -} - -/* - * Transfer data from peer to - * "outstr" using the appropriate - * encapulation of the data subject - * to Mode, Structure, and Type. - * - * N.B.: Form isn't handled. - */ -static int receive_data FUNCTION((instr, outstr), FILE *instr AND FILE *outstr) -{ - register int c; - int cnt, bare_lfs = 0; - char buf[BUFSIZ]; - - transflag++; - if (setjmp(urgcatch)) { - transflag = 0; - return (-1); - } - switch (type) { - - case TYPE_I: - case TYPE_L: - while ((cnt = read(fileno(instr), buf, sizeof buf)) > 0) { - if (write(fileno(outstr), buf, cnt) != cnt) - goto file_err; - byte_count += cnt; - } - if (cnt < 0) - goto data_err; - transflag = 0; - return (0); - - case TYPE_E: - reply(553, "TYPE E not implemented."); - transflag = 0; - return (-1); - - case TYPE_A: - while ((c = getc(instr)) != EOF) { - byte_count++; - if (c == '\n') - bare_lfs++; - while (c == '\r') { - if (ferror(outstr)) - goto data_err; - if ((c = getc(instr)) != '\n') { - putc('\r', outstr); - if (c == '\0' || c == EOF) - goto contin2; - } - } - putc(c, outstr); - contin2:; - } - fflush(outstr); - if (ferror(instr)) - goto data_err; - if (ferror(outstr)) - goto file_err; - transflag = 0; - if (bare_lfs) { - lreply(230, "WARNING! %d bare linefeeds received in ASCII mode", bare_lfs); - printf(" File may not have transferred correctly.\r\n"); - } - return (0); - default: - reply(550, "Unimplemented TYPE %d in receive_data", type); - transflag = 0; - return (-1); - } - -data_err: - transflag = 0; - perror_reply(426, "Data Connection"); - return (-1); - -file_err: - transflag = 0; - perror_reply(452, "Error writing file"); - return (-1); -} - -VOIDRET statfilecmd FUNCTION((filename), char *filename) -{ - char line[BUFSIZ]; - FILE *fin; - int c; - -#if HAVE_LS_G_FLAG - snprintf(line, sizeof(line), "%s %s", "/bin/ls -lgA", filename); -#else /* HAVE_LS_G_FLAG */ - snprintf(line, sizeof(line), "%s %s", "/bin/ls -lA", filename); -#endif /* HAVE_LS_G_FLAG */ - fin = ftpd_popen(line, "r"); - lreply(211, "status of %s:", filename); - while ((c = getc(fin)) != EOF) { - if (c == '\n') { - if (ferror(stdout)) { - perror_reply(421, "control connection"); - ftpd_pclose(fin); - dologout(1); - /* NOTREACHED */ - } - if (ferror(fin)) { - perror_reply(551, filename); - ftpd_pclose(fin); - return; - } - putc('\r', stdout); - } - putc(c, stdout); - } - ftpd_pclose(fin); - reply(211, "End of Status"); -} - -VOIDRET statcmd FUNCTION_NOARGS -{ -/* COMMENTED OUT STUFF BECAUSE THINGS BROKE ON SUNOS. */ - struct sockaddr_in *sin; - u_char *a, *p; - - lreply(211, "FTP server status:"); - printf(" \r\n"); - printf(" Connected to %s", remotehost); - if (!isdigit(remotehost[0])) - printf(" (%s)", inet_ntoa(his_addr.sin_addr)); - printf("\r\n"); - if (logged_in) { -#if DOANONYMOUS - if (guest) - printf(" Logged in anonymously\r\n"); - else -#endif /* DOANONYMOUS */ - printf(" Logged in as %s\r\n", pw->pw_name); - } else - if (askpasswd) - printf(" Waiting for password\r\n"); - else - printf(" Waiting for user name\r\n"); - if (data != -1) - printf(" Data connection open\r\n"); - else - if (pdata != -1) { - printf(" in Passive mode"); - sin = &pasv_addr; - goto printaddr; - } else - if (usedefault == 0) { - printf(" PORT"); - sin = &data_dest; - printaddr: - a = (u_char *) & sin->sin_addr; - p = (u_char *) & sin->sin_port; -#define UC(b) (((int) b) & 0xff) - printf(" (%d,%d,%d,%d,%d,%d)\r\n", UC(a[0]), - UC(a[1]), UC(a[2]), UC(a[3]), UC(p[0]), UC(p[1])); -#undef UC - } else - printf(" No data connection\r\n"); - reply(211, "End of status"); -} - -VOIDRET opiefatal FUNCTION((s), char *s) -{ - reply(451, "Error in server: %s\n", s); - reply(221, "Closing connection due to server error."); - dologout(0); - /* NOTREACHED */ -} - -static VOIDRET ack FUNCTION((s), char *s) -{ - reply(250, "%s command successful.", s); -} - -VOIDRET nack FUNCTION((s), char *s) -{ - reply(502, "%s command not implemented.", s); -} - -VOIDRET yyerror FUNCTION((s), char *s) -{ - char *cp; - - if (cp = strchr(cbuf, '\n')) - *cp = '\0'; - reply(500, "'%s': command not understood.", cbuf); -} - -VOIDRET delete FUNCTION((name), char *name) -{ - struct stat st; - - if (stat(name, &st) < 0) { - perror_reply(550, name); - return; - } - if ((st.st_mode & S_IFMT) == S_IFDIR) { - if (rmdir(name) < 0) { - perror_reply(550, name); - return; - } - goto done; - } - if (unlink(name) < 0) { - perror_reply(550, name); - return; - } -done: - ack("DELE"); -} - -VOIDRET cwd FUNCTION((path), char *path) -{ - if (chdir(path) < 0) - perror_reply(550, path); - else - ack("CWD"); -} - -VOIDRET makedir FUNCTION((name), char *name) -{ - if (mkdir(name, 0777) < 0) - perror_reply(550, name); - else - reply(257, "MKD command successful."); -} - -VOIDRET removedir FUNCTION((name), char *name) -{ - if (rmdir(name) < 0) - perror_reply(550, name); - else - ack("RMD"); -} - -VOIDRET pwd FUNCTION_NOARGS -{ - char path[MAXPATHLEN + 1]; - - if (getcwd(path, MAXPATHLEN) == (char *) NULL) - reply(550, "%s.", path); - else - reply(257, "\"%s\" is current directory.", path); -} - -char *renamefrom FUNCTION((name), char *name) -{ - struct stat st; - - if (stat(name, &st) < 0) { - perror_reply(550, name); - return ((char *) 0); - } - reply(350, "File exists, ready for destination name"); - return (name); -} - -VOIDRET renamecmd FUNCTION((from, to), char *from AND char *to) -{ - if (rename(from, to) < 0) - perror_reply(550, "rename"); - else - ack("RNTO"); -} - -static VOIDRET dolog FUNCTION((sin), struct sockaddr_in *sin) -{ - struct hostent *hp = gethostbyaddr((char *) &sin->sin_addr, - sizeof(struct in_addr), AF_INET); - time_t t, time(); - - if (hp) - opiestrncpy(remotehost, hp->h_name, sizeof(remotehost)); - else - opiestrncpy(remotehost, inet_ntoa(sin->sin_addr), sizeof(remotehost)); -#if DOTITLE - setproctitle("%s: connected", remotehost); -#endif /* DOTITLE */ - - t = time((time_t *) 0); - syslog(LOG_INFO, "connection from %s at %s", - remotehost, ctime(&t)); -} - -/* - * Record logout in wtmp file - * and exit with supplied status. - */ -VOIDRET dologout FUNCTION((status), int status) -{ - disable_signalling(); - if (logged_in) { - if (seteuid((uid_t) 0)) - syslog(LOG_ERR, "Can't set euid"); - opielogwtmp(ttyline, "", "", "ftp"); - } - /* beware of flushing buffers after a SIGPIPE */ - _exit(status); -} - -static VOIDRET myoob FUNCTION((input), int input) -{ - char *cp; - - /* only process if transfer occurring */ - if (!transflag) - return; - cp = tmpline; - if (getline(cp, 7, stdin) == NULL) { - reply(221, "You could at least say goodbye."); - dologout(0); - } - upper(cp); - if (strcmp(cp, "ABOR\r\n") == 0) { - tmpline[0] = '\0'; - reply(426, "Transfer aborted. Data connection closed."); - reply(226, "Abort successful"); - longjmp(urgcatch, 1); - } - if (strcmp(cp, "STAT\r\n") == 0) { - if (file_size != (off_t) - 1) - reply(213, "Status: %lu of %lu bytes transferred", - byte_count, file_size); - else - reply(213, "Status: %lu bytes transferred", byte_count); - } -} - -/* - * Note: a response of 425 is not mentioned as a possible response to - * the PASV command in RFC959. However, it has been blessed as - * a legitimate response by Jon Postel in a telephone conversation - * with Rick Adams on 25 Jan 89. - */ -VOIDRET passive FUNCTION_NOARGS -{ - int len; - register char *p, *a; - - pdata = socket(AF_INET, SOCK_STREAM, 0); - if (pdata < 0) { - perror_reply(425, "Can't open passive connection"); - return; - } - pasv_addr = ctrl_addr; - pasv_addr.sin_port = 0; - if (seteuid((uid_t) 0)) - syslog(LOG_ERR, "Can't set euid"); - if (bind(pdata, (struct sockaddr *) & pasv_addr, sizeof(pasv_addr)) < 0) { - seteuid((uid_t) pw->pw_uid); - goto pasv_error; - } - if (seteuid((uid_t) pw->pw_uid)) - syslog(LOG_ERR, "Can't set euid"); - len = sizeof(pasv_addr); - if (getsockname(pdata, (struct sockaddr *) & pasv_addr, &len) < 0) - goto pasv_error; - if (listen(pdata, 1) < 0) - goto pasv_error; - a = (char *) &pasv_addr.sin_addr; - p = (char *) &pasv_addr.sin_port; - -#define UC(b) (((int) b) & 0xff) - - reply(227, "Entering Passive Mode (%d,%d,%d,%d,%d,%d)", UC(a[0]), - UC(a[1]), UC(a[2]), UC(a[3]), UC(p[0]), UC(p[1])); - return; - -pasv_error: - close(pdata); - pdata = -1; - perror_reply(425, "Can't open passive connection"); - return; -} - -/* - * Generate unique name for file with basename "local". - * The file named "local" is already known to exist. - * Generates failure reply on error. - */ -static char *gunique FUNCTION((local), char *local) -{ - static char new[MAXPATHLEN+1]; - struct stat st; - char *cp = strrchr(local, '/'); - int count = 0; - - if (cp) - *cp = '\0'; - if (stat(cp ? local : ".", &st) < 0) { - perror_reply(553, cp ? local : "."); - return ((char *) 0); - } - if (cp) - *cp = '/'; - strcpy(new, local); - cp = new + strlen(new); - *cp++ = '.'; - for (count = 1; count < 100; count++) { - snprintf(cp, sizeof(new) - (cp - new), "%d", count); |