#!/usr/bin/make
#
# This Makefile is a product of Makefile.source being run through the mkmf
# Perl script to generate all of the System-Target format make targets
# automatically and is ready to be hacked to suit your needs. If you make
# modifications to the OPIE Makefiles as a programmer, please modify the
# Makefile.source file instead of this one.
#
##
# Makefile.source and Makefile: Directions for building and installing OPIE.
#
# 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 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. $(LDFLAGS) 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

# Where is chown(1)?
# Solaris
#CHOWN=/usr/bin/chown
# AIX, HP-UX, Linux, A/UX
#CHOWN=/bin/chown
# BSD/OS, 4.4BSD, FreeBSD, NetBSD
#CHOWN=/usr/sbin/chown
# IRIX
#CHOWN=/sbin/chown
# SunOS
#CHOWN=/usr/etc/chown

# Where is whoami(1)?
# BSD/OS, 4.4BSD, Linux, HP-UX, IRIX, AIX, FreeBSD, NetBSD, A/UX
#WHOAMI=/usr/bin/whoami
# SunOS, Solaris
#WHOAMI=/usr/ucb/whoami

# What flag to test(1) will indicate existence?
#
# The '-e' flag is exactly what we want. Which makes it little surprise that
# not all systems have it. We'll live with the '-f' flag, which will only
# work with real files (i.e., it won't handle symlinks and wierder things
# properly)
#
# BSD/OS, FreeBSD, NetBSD, Linux, 4.4BSD
#EXISTS=-e
# SunOS, IRIX, HP-UX, AIX, Solaris, A/UX
#EXISTS=-f

# How should we call mkdir(1) to make directories if they aren't there?
#
# We want to call mkdir with the -p flag to make parent directories,
# but many systems don't have this flag.
#
# BSD/OS, FreeBSD, NetBSD, Linux, SunOS, AIX, 4.4BSD
#MKDIR=mkdir -p
# IRIX, HP-UX, A/UX
#MKDIR=mkdir

# OWNER is the username who should own the OPIE binaries.
# GROUP is the groupname associated with the OPIE binaries.
#
OWNER=root
GROUP=bin

# Ranlib is only needed on BSD systems.
# Using "true" happens to be a handy makefile hack for System V machines.
# AIX, SunOS, 4.4BSD, BSD/OS, Linux, FreeBSD, NetBSD
#RANLIB=ranlib
# Solaris, HP-UX, IRIX, A/UX
#RANLIB=true

# LOCALBIN is the place where user-installed binaries reside.
LOCALBIN=/usr/local/bin
#LOCALBIN=/usr/contrib/bin
# LOCALMAN is the place where user-installed manual pages reside.
LOCALMAN=/usr/local/man
#LOCALMAN=/usr/contrib/man
#LOCALMAN=/usr/share/man
#LOCALMAN=/usr/man/man

# SU_DIR is where the "su" system binary resides.
# Solaris, SunOS, BSD/OS, 4.4BSD, Linux, FreeBSD, NetBSD
#SU_DIR=/usr/bin
# HP-UX, AIX, IRIX, A/UX
#SU_DIR=/bin

# Is there another location to which opiesu should be copied? (i.e., /sbin)
# Solaris, IRIX
#ALT_SU_DIR=/sbin

# Where is the login(1) binary?
# Solaris, SunOS, BSD/OS, 4.4BSD, FreeBSD, NetBSD
#LOGIN_DIR=/usr/bin
# HP-UX, AIX, Linux, A/UX
#LOGIN_DIR=/bin
# IRIX
#LOGIN_DIR=/usr/lib/iaf

# What is the login(1) binary really named? 
# Solaris, SunOS, BSD/OS, 4.4BSD, Linux, HP-UX, AIX, FreeBSD, NetBSD, A/UX
#LOGIN_NAME=login
# IRIX
#LOGIN_NAME=scheme

# What should the default PATH be?
# Note that the supplied defaults vary slightly from that of some
# of the operating systems. Also note that OPIE does not support some
# systems' notion of a second default path for root -- if you are root, then
# you need to use a shell configuration file to set up any special path
# entries.
# BSD/OS, 4.4BSD, HP-UX, Linux, Solaris, FreeBSD, NetBSD, A/UX
#DEFAULT_PATH=/usr/bin:/bin
# SunOS
#DEFAULT_PATH=/usr/ucb:/usr/bin:/bin
# HP-UX
#DEFAULT_PATH=/bin:/usr/bin
# IRIX
#DEFAULT_PATH=/usr/sbin:/usr/bsd:/sbin:/usr/bin:/bin:/usr/bin/X11
# AIX
#DEFAULT_PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin

# Where should the OPIE key database be stored? 
KEY_FILE=/etc/opiekeys

# Should we support a trusted access file, and, if so, where should it go?
#
# Sites who have to choose between opening up this security hole and not
# having OPIE at all will need to enable this option. It is highly recommended
# that you do *not* enable this option and leave this line commented.
#ACCESS_FILE="-DACCESS_FILE=\"/etc/opieaccess\""

# FTPDIR is where the FTP daemon resides.  
# FTPDNAME is the filename of the ftp daemon.

# Solaris, Linux
#FTPDIR=/usr/sbin
# SunOS, IRIX
#FTPDIR=/usr/etc
# BSD/OS, 4.4BSD, FreeBSD, NetBSD
#FTPDIR=/usr/libexec
# HP-UX, AIX, A/UX
#FTPDIR=/etc

# SunOS, Solaris, Linux
#FTPDNAME=in.ftpd
# BSD/OS, 4.4BSD, IRIX, HP-UX, AIX, FreeBSD, NetBSD, A/UX
#FTPDNAME=ftpd

# What flags should be passed to the linker?
# 
# If you have shared libraries, it's advisable to tell your system to do a 
# static link. Solaris systems don't have this option and must do dynamic.
#
# Some systems (e.g. Solaris) need to explicitly include network libraries
# (e.g. nsl, socket).
#
# Solaris
#LDFLAGS=-lnsl -lsocket
# SunOS
#LDFLAGS=-Bstatic
# FreeBSD
#LDFLAGS=-lcrypt
# A/UX
#LDFLAGS=-lposix

# Compile-time options for OPIE:
#
# * System type:
#
# -DSOLARIS=1		If your system is Solaris (implies SVR4=1) 
# -DSUNOS=1		If your system is SunOS (implies BSD4_3=1) 
# -DHPUX=1		If your system is HP-UX (implies SYSV=1)
# -DBSD=1		If your system is like BSD
# -DBSD4_3=1		If your system is like 4.3BSD (implies BSD=1)
# -DSYSV=1		If your system is like System V
# -DSVR4=1		If your system is like System V Release 4 (-> SYSV=1)
# -DIS_A_SYSV=1		If your system is like System V and -DSYSV=1 fails
# -DIS_A_BSD=1		If your system is like BSD and -DBSD=1 fails
#
# * Haves and needs
# -DHAVE_DIRENT=1	If your system has dirent-style directory routines
# -DNEED_GETENV=1	If your system doesn't have getenv(3)
# -DNEED_SETENV=1	If your system doesn't have setenv(3)
# -DNEED_STRERROR=1	If your system doesn't have strerror(3)
# -DNEED_GETUSERSHELL=1	If your system doesn't have getusershell(3)
#				and endusershell(3)
# -DNEED_ATEXIT=1	If your system doesn't have atexit(3)
# -DNEED_STRING=1	If your system doesn't have strchr(3) and strrchr(3)
#				but does have index(3) and rindex(3)
#
# * Vendor-compatible "features"
#
# -DDOUTMPX=1		If your system uses a utmpx file along with a utmp
# -DDOSECURETTY=1	If you want to use an /etc/securetty file to control
#			which terminals root can log in from
# -DPERMSFILE="<file>"	Change the permissions of certain devices on login,
#				as specified in <file>
# -DDOWHEEL=1		Implement the BSD "wheel group" su restriction
#				(only members of group 0 can su)
# -DDOTITLE=1		Change the process info of ftpd so that ps listings
#				will show status information
# -DDOMOTD=0		If your system's login program *doesn't* display
#                       /etc/motd and check for mail (i.e., it is done in
#                       shell scripts like /etc/profile and /etc/.login)
#
# * Miscellaneous
#
# -DDOANONYMOUS=1	If you want ftpd to support anonymous logins
#                       whenever an "ftp" account exists in /etc/passwd.
#
# -DSYS_FCNTL_H=1	Use <sys/fcntl.h> instead of <fcntl.h>.
# -DMJR=1		Support Marcus J. Ranum's scheme to prevent
#				dictionary attacks. (see README.MJR)

# IRIX
#OPTIONS=-DSVR4=1 -DNEED_GETUSERSHELL=1 -DNEED_SETENV=1 -DDOMOTD=0 -DDOUTMPX=1

# Solaris
#OPTIONS=-DSOLARIS=1 -DDOMOTD=0

# SunOS
#OPTIONS=-DSUNOS

# BSD/OS, 4.4BSD, FreeBSD, NetBSD
#OPTIONS=-DBSD4_3 -DHAVE_DIRENT

# Linux
#OPTIONS=-DSYSV=1 -DDOSECURETTY=1

# HP-UX
#OPTIONS=-DHPUX=1

# AIX
#OPTIONS=-DSYSV=1 -DNEED_SETENV=1 -DFCNTL_NOT_SYS=1 -DNEED_GETUSERSHELL=1

# A/UX
#
#OPTIONS=-DSYSV=1 -DNEED_SETENV=1 -DNEED_STRERROR=1 -DNEED_ATEXIT=1 -DDOMOTD=0  -D_POSIX_SOURCE -D_PATH_UTMP=UTMP_FILE -D_PATH_WTMP=WTMP_FILE

# Which message-digest algorithm do you want to use?
#
# MD5 is the default and highly recommended because it is stronger. Sites
# migrating from Bellcore S/Key v1 might want to use MD4 for compatibility
# reasons. Support for MD4 will be removed in a future version of OPIE.
MDX=5
#MDX=4

# Do you want to ask users to re-type their secret passwords when calculating
# responses?
#
# Doing so will help eliminate errors due to mistypes at the cost of user
# annoyance. 
#RETYPE=1
RETYPE=0

# Do you want to generate per-user lock files to serialize OPIE logins?
#
# Doing so will help prevent an attack based on a race condition at the
# cost of user annoyance and opening up a denial-of-service attack.
USER_LOCKING=1
#USER_LOCKING=0

# Do you want to use ANSI C prototypes when compiling?
#
# Some systems with not-really-ANSI compilers break with prototypes.
PROTOTYPES=1
#PROTOTYPES=0

# Do you want su(8) to be able to switch to accounts that have been
# disabled (via a pw_passwd field of '*' or '#')?
#
# The traditional behavior (SU_STAR_CHECK == 0) is that a su run by root 
# can switch to any account.  Sites that want to prevent root from su'ing
# to a disabled ("starred out") account should set SU_STAR_CHECK = 1 below.
SU_STAR_CHECK=0
#SU_STAR_CHECK=1

# Which C compiler should we use?
#
# On many systems, GNU C (gcc) may be the best choice because that is what
# we used for OPIE development. You need an ANSI C compiler to build OPIE.
# Some K&R-with-extensions compilers (ie, SunOS, HP-UX) might work. Straight 
# K&R most likely will not.
#
# Solaris users: You need to use either GNU C or the unbundled SunPro C 
# compiler to build OPIE. The BSD compatible compiler in /usr/ucb/cc will
# probably not work properly for the same reasons the SunOS one won't.
#
# SunOS and HP-UX users: The compiler shipped with your system is NOT ANSI
# and probably will not compile OPIE correctly. Your best course of action
# is to get and install GNU C. HP also makes an added-cost ANSI C compiler
# for HP-UX systems. If you would like to try to install OPIE using the 
# compiler that comes with SunOS or HP-UX, uncommment the first line
# below. If it doesn't work properly, don't say that we didn't warn you.
#
# If your /bin/cc groks ANSI C, then use it
#CC=cc
# SunOS, HP-UX9, HP-UX10, A/UX
#CC=gcc
# HP-UX with the optional ANSI C compiler
#CC=cc -A

# The first line will build a normal version of OPIE.
#
# 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 uses a nifty heap debugger called "Electric Fence"
DEBUG=
#DEBUG=-DDEBUG -g
#DEBUG=-DDEBUG -g -lefence

# Uncomment the lines below beginning with "DES" if you are using the MJR
# variant.  See README.MJR for more details.
#DESINCLUDE=	../libdes
#DESLIB=	$(DESINCLUDE)/libdes.a
#DESFLAGS=	-I$(DESINCLUDE)

# END OF NORMAL CONFIGURATION PARAMETERS -- DON'T TOUCH THINGS BELOW HERE
#=========================================================================
# If anyone knows how to evaluate Bourne/Korn Shell's '$$' here, do tell us.
RANDOM=opie.old

LIBOBJS=opielogin.o opiesubr.o md4c.o md5c.o put.o utmp.o accessfile.o

CFLAGS=-DPROTOTYPES=$(PROTOTYPES) -DMDX=$(MDX) -DRETYPE=$(RETYPE) $(DEBUG) \
        -DKEY_FILE=\"$(KEY_FILE)\" -DDEFAULT_PATH=\"$(DEFAULT_PATH)\" \
        $(ACCESS_FILE) $(OPTIONS) -DOPTION_STRING=\""$(OPTIONS)"\" \
        -DUSER_LOCKING=$(USER_LOCKING) -DSU_STAR_CHECK=$(SU_STAR_CHECK)

all:	config opiekey opielogin opiesu opiepasswd opieinfo opieftpd libopie.a

config: 
	@if [ -z "$(OPTIONS)" ]; then echo "Did you read the README file?"; exit 1; fi
	@if [ -z "$(EXISTS)" ]; then echo "Did you read the README file?"; exit 1; fi

check: config
	@if [ ! -x "$(CHOWN)" ]; then echo "Check your value for CHOWN."; exit 1; fi
	@if [ ! -x "$(WHOAMI)" ]; then echo "Check your value for WHOAMI."; exit 1; fi
	@if [ ! -d "$(LOCALBIN)" ]; then echo "Check your value for LOCALBIN."; exit 1; fi
	@if [ ! -d "$(LOCALMAN)" ]; then echo "Check your value for LOCALMAN."; exit 1; fi
	@if [ ! $(EXISTS) "$(SU_DIR)/su" ]; then echo "Check your value for SU_DIR."; exit 1; fi
	@if [ ! -z "$(ALT_SU_DIR)" ]; then if [ ! -f "$(ALT_SU_DIR)/su" ]; then echo "Check your value for ALT_SU_DIR."; exit 1; fi; fi
	@if [ ! -d "$(LOGIN_DIR)" ]; then echo "Check your value for LOGIN_DIR."; exit 1; fi
	@if [ ! $(EXISTS) "$(LOGIN_DIR)/$(LOGIN_NAME)" ]; then echo "Check your value for LOGIN_NAME."; exit 1; fi
	@if [ ! -d "$(FTP_DIR)" ]; then echo "Check your value for FTP_DIR."; exit 1; fi
	@if [ ! $(EXISTS) "$(FTPD_NAME)" ]; then echo "Check your value for FTPD_NAME."; exit 1; fi
	@if [ ! -z "$(ACCESS_FILE)" ]; then echo "Remember that ACCESS_FILE opens up a security hole!"; fi

ifdefs:	
	egrep '^#*if*def' *.c *.h | cut -f2 -d: | sort | uniq

test: all
	@echo "Installing OPIE software..."
	@echo "Copying OPIE key-related files"
	@if [ ! -d $(LOCALBIN) ]; then $(MKDIR) $(LOCALBIN); chmod 755 $(LOCALBIN); fi 
	@cp opiepasswd opiekey opieinfo $(LOCALBIN)
	@echo "Changing ownership"
	@$(CHOWN) $(OWNER) $(LOCALBIN)/opiepasswd $(LOCALBIN)/opieinfo $(LOCALBIN)/opiekey
	@chgrp $(GROUP) $(LOCALBIN)/opiepasswd $(LOCALBIN)/opieinfo $(LOCALBIN)/opiekey
	@echo "Changing file permissions"
	@chmod 0511 $(LOCALBIN)/opiekey
	@chmod 0555 $(LOCALBIN)/opieinfo
	@chmod 4511 $(LOCALBIN)/opiepasswd
	@echo "Symlinking aliases to opiekey"
	@-ln -s $(LOCALBIN)/opiekey $(LOCALBIN)/opie-md4
	@-ln -s $(LOCALBIN)/opiekey $(LOCALBIN)/opie-md5
	@-ln -s $(LOCALBIN)/opiekey $(LOCALBIN)/otp-md4
	@-ln -s $(LOCALBIN)/opiekey $(LOCALBIN)/otp-md5
	@-ln -s $(LOCALBIN)/opiekey $(LOCALBIN)/key
	@echo "Preparing opiesu and opielogin for testing"
	@$(CHOWN) $(OWNER) opiesu opielogin
	@chgrp $(GROUP) opiesu opielogin
	@chmod 4511 opiesu opielogin

install: test
	@echo "Clearing testing permissions on opiesu and opielogin"
	@chmod 0111 opiesu opielogin
	@echo "Installing OPIE system programs..."
	@if [ ! $(EXISTS) $(LOGIN_DIR)/$(LOGIN_NAME).$(RANDOM) ]; then echo "Renaming existing $(LOGIN_NAME) to $(LOGIN_NAME).$(RANDOM)"; mv $(LOGIN_DIR)/$(LOGIN_NAME) $(LOGIN_DIR)/$(LOGIN_NAME).$(RANDOM); echo "Clearing permissions on old $(LOGIN_NAME)"; chmod 0 $(LOGIN_DIR)/$(LOGIN_NAME).$(RANDOM); fi
	@echo "Copying opielogin to $(LOGIN_NAME)"
	@cp opielogin $(LOGIN_DIR)/$(LOGIN_NAME)
	@echo "Changing ownership of $(LOGIN_NAME)"
	@$(CHOWN) $(OWNER) $(LOGIN_DIR)/$(LOGIN_NAME)
	@chgrp $(GROUP) $(LOGIN_DIR)/$(LOGIN_NAME)
	@echo "Changing file permissions of $(LOGIN_NAME)"
	@chmod 4111 $(LOGIN_DIR)/$(LOGIN_NAME)
	@if [ ! $(EXISTS) $(SU_DIR)/su.$(RANDOM) ]; then echo "Renaming existing su to su.$(RANDOM)"; mv $(SU_DIR)/su $(SU_DIR)/su.$(RANDOM); echo "Clearing permissions on old su"; chmod 0 $(SU_DIR)/su.$(RANDOM); fi
	@-if [ ! -z "$(ALT_SU_DIR)" ]; then if [ ! $(EXISTS) $(ALT_SU_DIR)/su.$(RANDOM) ]; then echo "Renaming existing su to su.$(RANDOM)"; mv $(ALT_SU_DIR)/su $(ALT_SU_DIR)/su.$(RANDOM); fi; echo "Copying opiesu to su"; cp opiesu $(ALT_SU_DIR)/su; echo "Changing ownership"; $(CHOWN) $(OWNER) $(ALT_SU_DIR)/su; chgrp $(GROUP) $(ALT_SU_DIR)/su; echo "Changing file permissions"; chmod 4111 $(ALT_SU_DIR)/su; echo "Clearning permissions on old su"; chmod 0 $(ALT_SU_DIR)/su.$(RANDOM); fi
	@echo "Copying opiesu to su"
	@cp opiesu $(SU_DIR)/su
	@echo "Changing ownership of su"
	@$(CHOWN) $(OWNER) $(SU_DIR)/su
	@chgrp $(GROUP) $(SU_DIR)/su
	@echo "Changing file permissions of su"
	@chmod 4111 $(SU_DIR)/su
	@if [ ! $(EXISTS) $(FTPDIR)/$(FTPDNAME).$(RANDOM) ]; then echo "Renaming existing ftp daemon to $(FTPDNAME).$(RANDOM)"; mv $(FTPDIR)/$(FTPDNAME) $(FTPDIR)/$(FTPDNAME).$(RANDOM); echo "Clearing permissions on old ftp daemon"; chmod 0 $(FTPDIR)/$(FTPDNAME).$(RANDOM); fi
	@echo "Copying OPIE ftp daemon"
	@cp opieftpd $(FTPDIR)/$(FTPDNAME)
	@echo "Changing ownership of ftpd"
	@$(CHOWN) $(OWNER) $(FTPDIR)/$(FTPDNAME)
	@chgrp $(GROUP) $(FTPDIR)/$(FTPDNAME)
	@echo "Changing file permissions of ftpd"
	@chmod 0100 $(FTPDIR)/$(FTPDNAME)
	@echo "Creating OPIE key file"
	@touch $(KEY_FILE)
	@echo "Changing permissions of OPIE key file"
	@chmod 0644 $(KEY_FILE)
	@echo "Changing ownership of OPIE key file"
	@$(CHOWN) $(OWNER) $(KEY_FILE)
	@chgrp $(GROUP) $(KEY_FILE)
	@-if [ ! -z "$(ACCESS_FILE)" ]; then echo "Creating OPIE access file (don't say we didn't warn you)"; FILE=`echo $(ACCESS_FILE) | sed 's:^-DACCESS_FILE="\(.*\)":\1:'`; touch $$FILE; $(CHOWN) 0 $$FILE; chgrp 0 $$FILE; chmod 0444 $$FILE; fi;
	@echo "Installing manual pages"
	@if [ ! -d $(LOCALMAN) ]; then $(MKDIR) $(LOCALMAN); chmod 755 $(LOCALMAN); fi
	@for i in 1 4 5 8; do for j in *.$$i; do if [ ! -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
	@-for i in opie-md4 opie-md5 opie-des otp-md4 otp-md5; do ln -s opiekey.1 $(LOCALMAN)/man1/$$i.1; done
	@echo "REMEMBER to run opiepasswd on your users immediately."

uninstall:
	@echo "Un-installing OPIE..."
	@echo "Removing symlinks"
	@-for i in opie-md4 opie-md5 otp-md4 otp-md5 key; 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
	@if [ ! -z "$(ALT_SU_DIR)" ]; then ALT=$(ALT_SU_DIR)/su; fi; for i in $(SU_DIR)/su $$ALT $(LOGIN_DIR)/$(LOGIN_NAME) $(FTPDIR)/$(FTPDNAME); do FILE=`basename $$i`; if [ ! $(EXISTS) $$i.$(RANDOM) ]; then echo "No $$i.$(RANDOM)! Aborting."; exit 1; else echo "Removing $$FILE"; rm $$i || true; echo "Restoring old $$FILE"; mv $$i.$(RANDOM) $$i; fi; done
	@echo "Resetting permissions"
	@chmod 4111 $(SU_DIR)/su $(LOGIN_DIR)/$(LOGIN_NAME)
	@chmod 0100 $(FTPDIR)/$(FTPDNAME)
	@if [ ! -z "$(ALT_SU_DIR)" ]; then chmod 4111 $(ALT_SU_DIR)/su; fi
	@echo "OPIE is now un-installed."
	@echo "Please verify by hand that this process worked."

libopie.a:	 $(LIBOBJS)
	ar r libopie.a $(LIBOBJS)
	$(RANLIB) libopie.a

clean:
	-rm -f *.o opiekey opielogin opiepasswd opiesu opieftpd y.tab.c 
	-rm -f libopie.a opie_build.h opieinfo options.h *core*

realclean: clean
	-rm -f *~ core* "\#*\#" 

opiekey:	opiekey.o libopie.a
		$(CC) $(CFLAGS) opiekey.o md5c.o libopie.a $(LDFLAGS) \
		-o opiekey

opieftpd:	ftpd.o glob.o logwtmp.o popen.o y.tab.o getusershell.o libopie.a
		$(CC) $(CFLAGS) ftpd.o glob.o logwtmp.o popen.o y.tab.o \
		getusershell.o accessfile.o md5c.o libopie.a $(LDFLAGS) \
		-o opieftpd

opielogin:	login.o permsfile.o utmp.o setenv.o getenv.o libopie.a
		$(CC) $(CFLAGS) login.o permsfile.o accessfile.o utmp.o \
		setenv.o getenv.o md5c.o libopie.a $(LDFLAGS) \
		-o opielogin

# Add "($DESLIB)" after "libopie.a" above if using MJR's method.
opiepasswd:	opiepasswd.o libopie.a
		$(CC) $(CFLAGS) opiepasswd.o md5c.o libopie.a $(LDFLAGS) \
		-o opiepasswd

opiesu:		su.o libopie.a
		$(CC) $(CFLAGS) su.o md5c.o libopie.a $(LDFLAGS) \
		-o opiesu

y.tab.c:	ftpcmd.y
		$(YACC) ftpcmd.y

opieinfo:	opieinfo.sh
		cat opieinfo.sh | sed 's:@@WHOAMI@@:$(WHOAMI):g' | sed 's:@@EXISTS@@:$(EXISTS):g' | sed 's:@@KEY_FILE@@:$(KEY_FILE):g' > opieinfo
		chmod 755 opieinfo

options.h:	Makefile
	        echo $(CFLAGS) | sed 's:-D::g' | sed 's:\"::g' | \
		sed 's:^:#define OPTION_STRING ":' | sed 's:$$:":' > options.h


solaris: solaris-all

solaris-: solaris-all

solaris-all:
	make CHOWN="/usr/bin/chown" WHOAMI="/usr/ucb/whoami" EXISTS="-f" RANLIB="true" SU_DIR="/usr/bin" ALT_SU_DIR="/sbin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/sbin" FTPDNAME="in.ftpd" LDFLAGS="-lnsl -lsocket" OPTIONS="-DSOLARIS=1 -DDOMOTD=0" all


solaris-test:
	make CHOWN="/usr/bin/chown" WHOAMI="/usr/ucb/whoami" EXISTS="-f" RANLIB="true" SU_DIR="/usr/bin" ALT_SU_DIR="/sbin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/sbin" FTPDNAME="in.ftpd" LDFLAGS="-lnsl -lsocket" OPTIONS="-DSOLARIS=1 -DDOMOTD=0" test


solaris-install:
	make CHOWN="/usr/bin/chown" WHOAMI="/usr/ucb/whoami" EXISTS="-f" RANLIB="true" SU_DIR="/usr/bin" ALT_SU_DIR="/sbin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/sbin" FTPDNAME="in.ftpd" LDFLAGS="-lnsl -lsocket" OPTIONS="-DSOLARIS=1 -DDOMOTD=0" install


solaris-uninstall:
	make CHOWN="/usr/bin/chown" WHOAMI="/usr/ucb/whoami" EXISTS="-f" RANLIB="true" SU_DIR="/usr/bin" ALT_SU_DIR="/sbin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/sbin" FTPDNAME="in.ftpd" LDFLAGS="-lnsl -lsocket" OPTIONS="-DSOLARIS=1 -DDOMOTD=0" uninstall


sunos: sunos-all

sunos-: sunos-all

sunos-all:
	make CHOWN="/usr/etc/chown" WHOAMI="/usr/ucb/whoami" EXISTS="-f" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/ucb:/usr/bin:/bin" FTPDIR="/usr/etc" FTPDNAME="in.ftpd" LDFLAGS="-Bstatic" OPTIONS="-DSUNOS" CC="gcc" all


sunos-test:
	make CHOWN="/usr/etc/chown" WHOAMI="/usr/ucb/whoami" EXISTS="-f" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/ucb:/usr/bin:/bin" FTPDIR="/usr/etc" FTPDNAME="in.ftpd" LDFLAGS="-Bstatic" OPTIONS="-DSUNOS" CC="gcc" test


sunos-install:
	make CHOWN="/usr/etc/chown" WHOAMI="/usr/ucb/whoami" EXISTS="-f" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/ucb:/usr/bin:/bin" FTPDIR="/usr/etc" FTPDNAME="in.ftpd" LDFLAGS="-Bstatic" OPTIONS="-DSUNOS" CC="gcc" install


sunos-uninstall:
	make CHOWN="/usr/etc/chown" WHOAMI="/usr/ucb/whoami" EXISTS="-f" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/ucb:/usr/bin:/bin" FTPDIR="/usr/etc" FTPDNAME="in.ftpd" LDFLAGS="-Bstatic" OPTIONS="-DSUNOS" CC="gcc" uninstall


44bsd: 44bsd-all

44bsd-: 44bsd-all

44bsd-all:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" all


44bsd-test:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" test


44bsd-install:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" install


44bsd-uninstall:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" uninstall


bsdos: bsdos-all

bsdos-: bsdos-all

bsdos-all:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" all


bsdos-test:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" test


bsdos-install:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" install


bsdos-uninstall:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" uninstall


linux: linux-all

linux-: linux-all

linux-all:
	make CHOWN="/bin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/sbin" FTPDNAME="in.ftpd" OPTIONS="-DSYSV=1 -DDOSECURETTY=1" all


linux-test:
	make CHOWN="/bin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/sbin" FTPDNAME="in.ftpd" OPTIONS="-DSYSV=1 -DDOSECURETTY=1" test


linux-install:
	make CHOWN="/bin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/sbin" FTPDNAME="in.ftpd" OPTIONS="-DSYSV=1 -DDOSECURETTY=1" install


linux-uninstall:
	make CHOWN="/bin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/sbin" FTPDNAME="in.ftpd" OPTIONS="-DSYSV=1 -DDOSECURETTY=1" uninstall


irix: irix-all

irix-: irix-all

irix-all:
	make CHOWN="/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-f" MKDIR="mkdir" RANLIB="true" SU_DIR="/bin" ALT_SU_DIR="/sbin" LOGIN_DIR="/usr/lib/iaf" LOGIN_NAME="scheme" DEFAULT_PATH="/usr/sbin:/usr/bsd:/sbin:/usr/bin:/bin:/usr/bin/X11" FTPDIR="/usr/etc" FTPDNAME="ftpd" OPTIONS="-DSVR4=1 -DNEED_GETUSERSHELL=1 -DNEED_SETENV=1 -DDOMOTD=0 -DDOUTMPX=1" all


irix-test:
	make CHOWN="/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-f" MKDIR="mkdir" RANLIB="true" SU_DIR="/bin" ALT_SU_DIR="/sbin" LOGIN_DIR="/usr/lib/iaf" LOGIN_NAME="scheme" DEFAULT_PATH="/usr/sbin:/usr/bsd:/sbin:/usr/bin:/bin:/usr/bin/X11" FTPDIR="/usr/etc" FTPDNAME="ftpd" OPTIONS="-DSVR4=1 -DNEED_GETUSERSHELL=1 -DNEED_SETENV=1 -DDOMOTD=0 -DDOUTMPX=1" test


irix-install:
	make CHOWN="/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-f" MKDIR="mkdir" RANLIB="true" SU_DIR="/bin" ALT_SU_DIR="/sbin" LOGIN_DIR="/usr/lib/iaf" LOGIN_NAME="scheme" DEFAULT_PATH="/usr/sbin:/usr/bsd:/sbin:/usr/bin:/bin:/usr/bin/X11" FTPDIR="/usr/etc" FTPDNAME="ftpd" OPTIONS="-DSVR4=1 -DNEED_GETUSERSHELL=1 -DNEED_SETENV=1 -DDOMOTD=0 -DDOUTMPX=1" install


irix-uninstall:
	make CHOWN="/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-f" MKDIR="mkdir" RANLIB="true" SU_DIR="/bin" ALT_SU_DIR="/sbin" LOGIN_DIR="/usr/lib/iaf" LOGIN_NAME="scheme" DEFAULT_PATH="/usr/sbin:/usr/bsd:/sbin:/usr/bin:/bin:/usr/bin/X11" FTPDIR="/usr/etc" FTPDNAME="ftpd" OPTIONS="-DSVR4=1 -DNEED_GETUSERSHELL=1 -DNEED_SETENV=1 -DDOMOTD=0 -DDOUTMPX=1" uninstall


hpux9: hpux9-all

hpux9-: hpux9-all

hpux9-all:
	make CC="gcc" all


hpux9-test:
	make CC="gcc" test


hpux9-install:
	make CC="gcc" install


hpux9-uninstall:
	make CC="gcc" uninstall


hpux10: hpux10-all

hpux10-: hpux10-all

hpux10-all:
	make CC="gcc" all


hpux10-test:
	make CC="gcc" test


hpux10-install:
	make CC="gcc" install


hpux10-uninstall:
	make CC="gcc" uninstall


aix: aix-all

aix-: aix-all

aix-all:
	make CHOWN="/bin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-f" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/bin" LOGIN_DIR="/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin" FTPDIR="/etc" FTPDNAME="ftpd" OPTIONS="-DSYSV=1 -DNEED_SETENV=1 -DFCNTL_NOT_SYS=1 -DNEED_GETUSERSHELL=1" all


aix-test:
	make CHOWN="/bin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-f" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/bin" LOGIN_DIR="/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin" FTPDIR="/etc" FTPDNAME="ftpd" OPTIONS="-DSYSV=1 -DNEED_SETENV=1 -DFCNTL_NOT_SYS=1 -DNEED_GETUSERSHELL=1" test


aix-install:
	make CHOWN="/bin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-f" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/bin" LOGIN_DIR="/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin" FTPDIR="/etc" FTPDNAME="ftpd" OPTIONS="-DSYSV=1 -DNEED_SETENV=1 -DFCNTL_NOT_SYS=1 -DNEED_GETUSERSHELL=1" install


aix-uninstall:
	make CHOWN="/bin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-f" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/bin" LOGIN_DIR="/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin" FTPDIR="/etc" FTPDNAME="ftpd" OPTIONS="-DSYSV=1 -DNEED_SETENV=1 -DFCNTL_NOT_SYS=1 -DNEED_GETUSERSHELL=1" uninstall


freebsd: freebsd-all

freebsd-: freebsd-all

freebsd-all:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" LDFLAGS="-lcrypt" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" all


freebsd-test:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" LDFLAGS="-lcrypt" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" test


freebsd-install:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" LDFLAGS="-lcrypt" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" install


freebsd-uninstall:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" LDFLAGS="-lcrypt" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" uninstall


netbsd: netbsd-all

netbsd-: netbsd-all

netbsd-all:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" all


netbsd-test:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" test


netbsd-install:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" install


netbsd-uninstall:
	make CHOWN="/usr/sbin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-e" MKDIR="mkdir -p" RANLIB="ranlib" SU_DIR="/usr/bin" LOGIN_DIR="/usr/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/usr/libexec" FTPDNAME="ftpd" OPTIONS="-DBSD4_3 -DHAVE_DIRENT" uninstall


aux: aux-all

aux-: aux-all

aux-all:
	make CHOWN="/bin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-f" MKDIR="mkdir" RANLIB="true" SU_DIR="/bin" LOGIN_DIR="/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/etc" FTPDNAME="ftpd" LDFLAGS="-lposix" CC="gcc" all


aux-test:
	make CHOWN="/bin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-f" MKDIR="mkdir" RANLIB="true" SU_DIR="/bin" LOGIN_DIR="/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/etc" FTPDNAME="ftpd" LDFLAGS="-lposix" CC="gcc" test


aux-install:
	make CHOWN="/bin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-f" MKDIR="mkdir" RANLIB="true" SU_DIR="/bin" LOGIN_DIR="/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/etc" FTPDNAME="ftpd" LDFLAGS="-lposix" CC="gcc" install


aux-uninstall:
	make CHOWN="/bin/chown" WHOAMI="/usr/bin/whoami" EXISTS="-f" MKDIR="mkdir" RANLIB="true" SU_DIR="/bin" LOGIN_DIR="/bin" LOGIN_NAME="login" DEFAULT_PATH="/usr/bin:/bin" FTPDIR="/etc" FTPDNAME="ftpd" LDFLAGS="-lposix" CC="gcc" uninstall

