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