#
#	Makefile for RADIUS - 
#		Remote Authentication Dial In User Service
#
# ASCEND: @(#)Makefile	1.3 (95/07/25 00:55:22)
#
#
# Add -DNOSHADOW to CFLAGS if you don't have Shadow Passwords.  As is,
# the Makefile compiles a RADIUS daemon with Ascend extensions on a SunOs
# box using GCC.
#
#
#Host OS:
# aix:
#	add -Daix to CFLAGS
#
# HP-UX:
#	CFLAGS=
#	CC= gcc -traditional
#
# SCO:
#	add LIBS= -lsocket
#
# SunOs:
#	CFLAGS= -DOSUN
#	CC= gcc -traditional
#
# Solaris with gcc:
#	CFLAGS= -O -Dsys5 -DSOLARIS
#	(Add -D_SVID_GETTOD to CFLAGS for Solaris 2.1 - 2.4)
#	CC= gcc -ansi
#	add LIBS= -lnsl -lsocket
#
# Solaris with cc:
#	CFLAGS= -O -Dsys5 -DSOLARIS
#	(Add -D_SVID_GETTOD to CFLAGS for Solaris 2.1 - 2.4)
#	CC= cc
#	add LIBS= -lnsl -lsocket
#
# unixware:
#	add -Dunixware to CFLAGS
#	add LIBS= -lucb -lnsl -lsocket
#
# BSDI:
#	CC= gcc		# Note: cannot use -ansi on some versions
#
# Linux:
#	add -Dsys5 to CFLAGS
#
# FreeBSD:
#	CC= gcc -ansi
#	add LIBS= -lcrypt
#
#External Authentication Servers:
# Security Dynamics (ACE):
#	add -DACE to AUTH_SERVERS
#	add SD_INCLUDES to AUTH_INCLUDES
#	add -lsdiclient to AUTH_LIBS
# Enigma Logic (SAFEWORD):
#	add -DSAFEWORD to AUTH_SERVERS
#	add SW_INCLUDES to AUTH_INCLUDES
#	add -lidp to AUTH_LIBS
# Digital Pathways (Defender):
#	add -DDPI to AUTH_SERVERS
#	add DPI_INCLUDES to AUTH_INCLUDES
#	add -l_da to AUTH_LIBS
#	with older Ascend MAX code, add -DDPI_ONCE to AUTH_SERVERS
#

SRCDIR=.

# Pick the combination of external authentication servers to use.  Requires
# the authentication source and libraries provided by the server vendors.
#
AUTH_SERVERS=
#AUTH_SERVERS= -DACE
#AUTH_SERVERS= -DSAFEWORD
#AUTH_SERVERS= -DDPI
#AUTH_SERVERS= -DDPI -DDPI_ONCE
#AUTH_SERVERS= -DACE -DSAFEWORD -DDPI

# List of extra files for external authentication servers
#  SD_INCLUDES          Source files provided by Security Dynamics (ACE)
#  SW_INCLUDES          Source files provided by Enigma Logic (SafeWord)
#  DPI_INCLUDES         Source files provided by Digital Pathways (Defender)
#
SD_INCLUDES= $(SRCDIR)/sdi_athd.h $(SRCDIR)/sdi_size.h $(SRCDIR)/sdi_type.h \
		$(SRCDIR)/sdacmvls.h $(SRCDIR)/sdconf.h
SW_INCLUDES= $(SRCDIR)/custpb.h $(SRCDIR)/custfail.h
DPI_INCLUDES= $(SRCDIR)/dsagent.h $(SRCDIR)/dslib.h

# Specify the authentication server include list to use
#
AUTH_INCLUDES=
#AUTH_INCLUDES= $(SD_INCLUDES)
#AUTH_INCLUDES= $(SW_INCLUDES)
#AUTH_INCLUDES= $(DPI_INCLUDES)
#AUTH_INCLUDES= $(SW_INCLUDES) $(SD_INCLUDES) $(DPI_INCLUDES)

# List of external authentication libraries
#  -lidpb               For Enigma Logic (SafeWord)
#  -lsdiclient          For Security Dynamics (ACE)
#  -l_da                For Digital Pathways (Defender)
#
AUTH_LIBS=
#AUTH_LIBS= -L. -lsdiclient
#AUTH_LIBS= -L. -lidpb
#AUTH_LIBS= -L. -l_da
#AUTH_LIBS= -L. -lsdiclient -lidpb -l_da

# Pick your compiler
#
#CC=	gcc -ansi -Wall	# set the GCC compiler to ANSI mode and picky
CC=	gcc -ansi	# set the GCC compiler to ANSI mode
#CC=	gcc		# set the GCC compiler for BSDI and friends
#CC=	cc -Xc -v -fd	# set the SUN compiler to full-whine ANSI mode
#CC=	cc -Xc -v	# set the SUN compiler to partial-whine ANSI mode
#CC=	cc -Xc		# set the SUN compiler to ANSI mode
#CC=	cc

# Pick your compiler flags
#  -Dsys5               System V
#  -DSOLARIS            Solaris (use sys5 also)
#  -DBINARY_FILTERS     Ascend specific feature to store filters in RADIUS
#  -DASCEND_SECRET	Ascend specific feature to send secrets from RADIUS
#  -DASCEND_LOGOUT      Ascend specific feature to handle logout notification
#  -DOSUN               SunOS 4.1.x
#  -DNOSHADOW           No shadow password file support
#  $(AUTH_SERVERS)      See above
#

#	use this for BSDI
#CFLAGS= -O -DNOSHADOW -DBSDI -DBINARY_FILTERS -DASCEND_SECRET -DASCEND_LOGOUT $(AUTH_SERVERS)
#	use this for SunOS
CFLAGS= -O -DNOSHADOW -DOSUN -DBINARY_FILTERS -DASCEND_SECRET -DASCEND_LOGOUT $(AUTH_SERVERS)
#	use this for Solaris 2.1 - 2.4
#CFLAGS= -O -Dsys5 -DSOLARIS -D_SVID_GETTOD -DBINARY_FILTERS -DASCEND_SECRET -DASCEND_LOGOUT $(AUTH_SERVERS)
#	use this for Solaris 2.5
#CFLAGS= -O -Dsys5 -DSOLARIS -DBINARY_FILTERS -DASCEND_SECRET -DASCEND_LOGOUT $(AUTH_SERVERS)
#	use this for Linux
#CFLAGS= -g -Dsys5 -DNOSHADOW -DBINARY_FILTERS -DASCEND_SECRET -DASCEND_LOGOUT $(AUTH_SERVERS)
#	use this for FreeBSD
#CFLAGS= -O -DNOSHADOW -DFreeBSD -DBINARY_FILTERS -DASCEND_SECRET -DASCEND_LOGOUT $(AUTH_SERVERS)

# Pick any load options and the load libraries.  The AUTH_LIBS
# are selected above
#
LDFLAGS= 

# See above for the things you may need to add here
#
#LIBS= $(AUTH_LIBS)			# use this for Linux, BSDI and friends
LIBS= -lnsl $(AUTH_LIBS)		# use this for SunOS
#LIBS= -lnsl -lsocket $(AUTH_LIBS)	# use this for Solaris 2.x
#LIBS= -lcrypt $(AUTH_LIBS)		# use this for FreeBSD

#       use this for SunOs. Linux, BSDI, FreeBSD
DBMLIBS= -ldbm
#       use this for Solaris
#DBMLIBS=

CMN_OBJS=radiusd.o dict.o util.o md5.o attrprint.o filters.o \
	 usr_read.o cache.o des.o radipa.o strerror.o
SERVER_OBJS=$(CMN_OBJS) users.o version.o
SERVERDBM_OBJS=$(CMN_OBJS) usersdbm.o versiondbm.o

SERVER_SRCS=$(SERVER_OBJS:%.o:%.c)
SRVR_SOURCES=$(SERVER_OBJS:.o=.c)
SOURCES=$(SRVR_SOURCES) $(SRCDIR)/radpass.c $(SRCDIR)/md5.c \
	$(SRCDIR)/util.c $(SRCDIR)/cexample.c 

INCLUDES=$(SRCDIR)/radius.h $(SRCDIR)/conf.h $(SRCDIR)/protos.h \
	 $(SRCDIR)/cache.h $(SRCDIR)/des.h
ALL_INCLUDES=$(INCLUDES) $(SRCDIR)/md5.h

all:	radiusd radipad

dbm:	radiusd.dbm builddbm

radiusd: $(SERVER_OBJS)
	$(CC) $(CFLAGS) -o radiusd $(SERVER_OBJS) $(LIBS)
#	chmod 4111 radiusd

radiusd.dbm: $(SERVERDBM_OBJS)
	$(CC) $(CFLAGS) -o radiusd.dbm $(SERVERDBM_OBJS) $(DBMLIBS) $(LIBS)

radiusd.o: $(SRCDIR)/radiusd.c $(INCLUDES) $(AUTH_INCLUDES)
	$(CC) $(CFLAGS) -c $(SRCDIR)/radiusd.c

attrprint.o: $(SRCDIR)/attrprint.c $(INCLUDES)
	$(CC) $(CFLAGS) -c $(SRCDIR)/attrprint.c

des.o: $(SRCDIR)/des.c $(INCLUDES)
	$(CC) $(CFLAGS) -c $(SRCDIR)/des.c 

dict.o: $(SRCDIR)/dict.c $(INCLUDES)
	$(CC) $(CFLAGS) -c $(SRCDIR)/dict.c

users.o: $(SRCDIR)/users.c $(INCLUDES)
	$(CC) $(CFLAGS) -c $(SRCDIR)/users.c

usersdbm.o: $(SRCDIR)/users.c $(INCLUDES)
	$(CC) $(CFLAGS) -DDBM_MODE -o usersdbm.o -c $(SRCDIR)/users.c

util.o: $(SRCDIR)/util.c $(INCLUDES)
	$(CC) $(CFLAGS) -c $(SRCDIR)/util.c

version.o: $(SRCDIR)/version.c $(INCLUDES)
	$(CC) $(CFLAGS) -o version.o -c $(SRCDIR)/version.c

versiondbm.o: $(SRCDIR)/version.c $(INCLUDES)
	$(CC) $(CFLAGS) -DDBM_MODE -o versiondbm.o -c $(SRCDIR)/version.c

radpass: radpass.o md5.o util.o
	$(CC) $(CFLAGS) -o radpass radpass.o md5.o util.o $(LIBS)

radpass.o: $(SRCDIR)/radpass.c $(INCLUDES)
	$(CC) $(CFLAGS) -c $(SRCDIR)/radpass.c

md5.o: $(SRCDIR)/md5.c $(SRCDIR)/md5.h $(SRCDIR)/conf.h
	$(CC) $(CFLAGS) -c $(SRCDIR)/md5.c

usr_read.o: $(SRCDIR)/usr_read.c $(INCLUDES)
	$(CC) $(CFLAGS) -c $(SRCDIR)/usr_read.c

cexample: cexample.o md5.o util.o filters.o
	$(CC) $(CFLAGS) -o cexample cexample.o md5.o util.o filters.o $(LIBS)

cexample.o: $(SRCDIR)/cexample.c $(INCLUDES)
	$(CC) $(CFLAGS) -c $(SRCDIR)/cexample.c

builddbm: builddbm.o usr_read.o
	$(CC) $(CFLAGS) -o builddbm builddbm.o usr_read.o $(DBMLIBS) $(LIBS)

builddbm.o: $(SRCDIR)/builddbm.c
	$(CC) $(CFLAGS) -c $(SRCDIR)/builddbm.c

filters.o: $(SRCDIR)/filters.c $(SRCDIR)/radius.h
	$(CC) $(CFLAGS) -c $(SRCDIR)/filters.c

cache.o: $(SRCDIR)/cache.c $(SRCDIR)/cache.h
	$(CC) $(CFLAGS) -c $(SRCDIR)/cache.c

radipa.o: $(SRCDIR)/radipa.c $(SRCDIR)/radipa.h
	$(CC) $(CFLAGS) -c $(SRCDIR)/radipa.c

strerror.o: $(SRCDIR)/strerror.c
	$(CC) $(CFLAGS) -c $(SRCDIR)/strerror.c

hash.o: $(SRCDIR)/hash.c $(SRCDIR)/conf.h
	$(CC) $(CFLAGS) -c $(SRCDIR)/hash.c

cache: $(SRCDIR)/cache.c $(SRCDIR)/cache.h $(SRCDIR)/conf.h
	$(CC) $(CFLAGS) -DAUTOTEST -o ./cache $(SRCDIR)/cache.c

radipad.o: $(SRCDIR)/radipad.c $(SRCDIR)/radipa.h $(SRCDIR)/conf.h
	$(CC) $(CFLAGS) -c $(SRCDIR)/radipad.c

radipad: radipad.o hash.o strerror.o
	$(CC) $(CFLAGS) -o radipad radipad.o hash.o strerror.o $(LIBS)

RADIPA_O = radipa.o users.o util.o attrprint.o dict.o filters.o usr_read.o
radipa: $(RADIPA_O)
	$(CC) $(CFLAGS) -o $@ $(RADIPA_O)

lint:
	-lint -hbacvx -DLINT $(SOURCES)

clean:
	rm -f *.o radiusd radipad radpass builddbm radiusd.dbm cache cexample

tar:
	@-rm radius.tar
	tar cvf radius.tar Makefile *h *c
