##  This makefile was modified March 1994 at the Naval Research Laboratory.
##  NRL additions/modifications to the standard S/Key distribution include:
##      * A modified BSD FTP daemon that does S/Key
##      * The "su" binary always does S/Key, even on the console. 
##	  This was a hole on rlogin/telnet sessions in the original software.
##      * MD5 support (MD5 seemed to work out of the box.)
##	  MD5 is believed by many to be stronger than MD4, see the RFCs.
##      * Cosmetic changes
##
##  Additional modifications from Marcus Ranum <mjr@tis.com> are described
##  in the README.MJR file included in this distribution.  Those mods are
##  only enabled if you add the text "-DMJR" to the CFLAGS.
##
##  Search for "NRL" to see the various changes done by Dan McD. at NRL.


## CONFIGURATION PARAMETERS.  Change these to suit your machine.

# LBIN is the place where user-installed binaries reside.
LBIN=/usr/local/bin

# FTPDIR is where the FTP daemon resides.  FTPDNAME is the name of the
# daemon which resides in FTPDIR.
FTPDIR = /usr/etc
FTPDNAME = in.ftpd

# SYSBIN is where the system binaries "su" and "login" reside.
SYSBIN = /bin

# 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)

### Note:  To select between MD4 and MD5, look at the "Take your pick"
###        comments scattered throughout.  Some lines need to be uncommented
###        and other to be commented.

# If you have an ANSI C compiler, uncomment the top line.
#CDEBUGFLAGS= -DPROTOTYPES=1
CDEBUGFLAGS=
#CDEBUGFLAGS= -O --- do NOT use -O, it causes different output

## END OF CONFIGURATION PARAMETERS


# if this machine uses shared libraries, (such as Suns), uncomment the first
# line, otherwise, uncomment the second
LDFLAGS=-Bstatic
#LDFLAGS=


# if this machine has /usr/include/stdlib.h, uncomment the first line,
# otherwise, uncomment the second
HASSTDLIB=-DHASSTDLIB
#HASSTDLIB=

LIB=libskey.a

# Take your pick: MD4, MD5 (NRL), or MD4+DES (MJR)

# MD4
LIBOBJS=skeylogin.o skeysubr.o md4c.o put.o skey.o

# MD5
#LIBOBJS=skeylogin.o skeysubr.o md5c.o put.o skey.o

# MD4+DES (MJR)
#LIBOBJS= skeylogin.o skeysubr.o md4c.o put.o skey.o deskeyc.o


# Take your pick, MD4 or MD5 (NRL), or MD4+DES (MJR)
# NOTE:  -DSKEY is for the FTP daemon

# MD4
CFLAGS=$(CDEBUGFLAGS) $(HASSTDLIB) -DSKEY

# MD5
#CFLAGS=$(CDEBUGFLAGS) $(HASSTDLIB) -DSKEY -DMD5

# MD4+DES
#CFLAGS=$(CDEBUGFLAGS) $(HASSTDLIB) -DSKEY -DMJR

all:	key keylogin skey.init keysu ftpd $(LIB)

install:	all man
	chmod 755 key keylogin skey.init keysu keyinfo keyinit
	chown root.bin keylogin skey.init keysu keyinit
	cp keyinit skey.init key keylogin keysu keyinfo $(LBIN)
	chmod 4755 $(LBIN)/keylogin $(LBIN)/skey.init $(LBIN)/keysu

	cp $(SYSBIN)/login $(SYSBIN)/Ologin.$$
	rm $(SYSBIN)/login
	ln -s $(LBIN)/keylogin $(SYSBIN)/login
# su and ftpd-related lines put in by Dan McD. (NRL)
	cp $(SYSBIN)/su $(SYSBIN)/Osu.$$
	rm $(SYSBIN)/su
	ln -s $(LBIN)/keysu $(SYSBIN)/su
	cp $(FTPDIR)/$(FTPDNAME) $(FTPDIR)/Oftpd.$$
	rm $(FTPDIR)/$(FTPDNAME)
	cp ftpd $(FTPDIR)/$(FTPDNAME)
	touch /etc/skeykeys
	chmod 644 /etc/skeykeys

man:
	cp *.1 /usr/local/man/man1
	
$(LIB):	 $(LIBOBJS)
	ar rc $(LIB) $(LIBOBJS)
	ranlib $(LIB)

clean:
	rm *.o key keylogin skey.init keysu ftpd y.tab.c libskey.a

suid:	all
	chown root keylogin skey.init keysu
	chmod 4755 keylogin skey.init keysu

key:	skey.o $(LIB)
	$(CC) $(CFLAGS) $(LDFLAGS) -o key skey.o $(LIB)

# Take your pick, MD4 or MD5 (Dan McD., NRL)

# MD4
ftpd: ftpd.o glob.o logwtmp.o md4c.o popen.o put.o skeylogin.o skeysubr.o vers.o y.tab.o
# MD5
#ftpd: ftpd.o glob.o logwtmp.o md5c.o popen.o put.o skeylogin.o skeysubr.o vers.o y.tab.o
	$(CC) $(CFLAGS) $(LDFLAGS) -o ftpd \
		ftpd.o glob.o logwtmp.o popen.o put.o vers.o y.tab.o $(LIB)

# Take your pick, MD4 or MD5 (Dan McD., NRL)

# MD4
keylogin:	login.o skeylogin.o skeysubr.o md4c.o put.o setenv.o getenv.o
# MD5
#keylogin:	login.o skeylogin.o skeysubr.o md5c.o put.o setenv.o getenv.o
	$(CC) $(CFLAGS) $(LDFLAGS) -o keylogin \
		login.o getenv.o setenv.o skeylogin.o $(LIB)

# comment out line above and uncomment line below for MJR stuff
#		login.o getenv.o setenv.o skeylogin.o $(LIB) $(DESLIB)

# Take your pick, MD4 or MD5 (Dan McD., NRL)

# MD4
skey.init:	skeyinit.o skeylogin.o skeysubr.o md4c.o put.o
# MD5
#skey.init:	skeyinit.o skeylogin.o skeysubr.o md5c.o put.o
	$(CC) $(CFLAGS) $(LDFLAGS) -o skey.init \
		skeyinit.o $(LIB)

# Take your pick, MD4 or MD5 (Dan McD., NRL)

# MD4
keysu:	su.o skeylogin.o skeysubr.o md4c.o put.o
# MD5
#keysu:	su.o skeylogin.o skeysubr.o md5c.o put.o
	$(CC) $(CFLAGS) $(LDFLAGS) -o keysu su.o $(LIB)

login.o:	login.c skey.h

# Take your pick, MD4 or MD5 (Dan McD., NRL)

# MD4
md4c.o:	md4c.c md4.h
# MD5
#md5c.o: md5c.c md5.h

skey.o:	skey.c md5.h skey.h
skeylogin.o:	skeylogin.c skey.h
skeysubr.o:	skeysubr.c md5.h skey.h
put.o:	put.c skey.h
ftpd.o: ftpd.c
glob.o: glob.c
logwtmp.o: logwtmp.c
popen.o: popen.c
put.o: put.c
y.tab.o: y.tab.c

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