--- Makefile.orig +++ Makefile @@ -145,9 +145,9 @@ freebsd: linux: @make REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \ - LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ= \ + LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ=weak_symbols.o \ NETGROUP=-DNETGROUP TLI= \ - EXTRA_CFLAGS="-fPIC -DSYS_ERRLIST_DEFINED -DINET6=1 -Dss_family=__ss_family" all + EXTRA_CFLAGS="-fPIC -DHAVE_STRERROR -DINET6=1 -Dss_family=__ss_family -DHAVE_WEAKSYMS -D_REENTRANT" all # This is good for many SYSV+BSD hybrids with NIS, probably also for HP-UX 7.x. hpux hpux8 hpux9 hpux10: @@ -660,7 +660,18 @@ HOSTNAME= -DALWAYS_HOSTNAME # Protection against weird shells or weird make programs. SHELL = /bin/sh -.c.o:; $(CC) $(CFLAGS) -c $*.c +.c.o:; $(CC) $(CFLAGS) -o $*.o -c $*.c + +SOMAJOR = 0 +SOMINOR = 7.6 +LIB = libwrap.a +SHLIB = shared/libwrap.so.$(SOMAJOR).$(SOMINOR) +SHLIBSOMAJ = shared/libwrap.so.$(SOMAJOR) +SHLIBSO = shared/libwrap.so +SHLIBFLAGS = -Lshared -lwrap + +shared/%.o: %.c + $(CC) $(CFLAGS) $(SHCFLAGS) -c $< -o $@ CFLAGS = -O2 -pipe -DFACILITY=$(FACILITY) $(ACCESS) $(PARANOID) $(NETGROUP) \ $(BUGS) $(SYSTYPE) $(AUTH) $(UMASK) \ @@ -669,11 +680,16 @@ CFLAGS = -O2 -pipe -DFACILITY=$(FACILITY $(UCHAR) $(TABLES) $(STRINGS) $(TLI) $(EXTRA_CFLAGS) $(DOT) \ $(VSYSLOG) +SHLINKFLAGS = -shared -Xlinker -soname -Xlinker libwrap.so.$(SOMAJOR) -lc $(LIBS) +SHCFLAGS = -fPIC -shared -D_REENTRANT + LIB_OBJ= hosts_access.o options.o shell_cmd.o rfc931.o eval.o \ hosts_ctl.o refuse.o percent_x.o clean_exit.o $(AUX_OBJ) \ $(FROM_OBJ) fix_options.o socket.o tli.o workarounds.o \ update.o misc.o diag.o percent_m.o myvsyslog.o ip6utils.o +SHLIB_OBJ= $(addprefix shared/, $(LIB_OBJ)); + FROM_OBJ= fromhost.o KIT = README miscd.c tcpd.c fromhost.c hosts_access.c shell_cmd.c \ @@ -688,9 +704,8 @@ KIT = README miscd.c tcpd.c fromhost.c h ip6utils.c ip6utils.h \ scaffold.h tcpdmatch.8 README.NIS -LIB = libwrap.a +all other: config-check tcpd tcpdmatch try-from safe_finger tcpdchk $(LIB) -all other: config-check tcpd tcpdmatch try-from safe_finger tcpdchk # Invalidate all object files when the compiler options (CFLAGS) have changed. @@ -701,33 +716,40 @@ config-check: then rm /tmp/cflags.$$$$ ; \ else mv /tmp/cflags.$$$$ cflags ; \ fi >/dev/null 2>/dev/null + @if [ ! -d shared ]; then mkdir shared; fi $(LIB): $(LIB_OBJ) rm -f $(LIB) $(AR) $(ARFLAGS) $(LIB) $(LIB_OBJ) -$(RANLIB) $(LIB) -tcpd: tcpd.o $(LIB) - $(CC) $(CFLAGS) -o $@ tcpd.o $(LIB) $(LIBS) +$(SHLIB): $(SHLIB_OBJ) + rm -f $(SHLIB) + $(CC) -o $(SHLIB) $(SHLINKFLAGS) $(SHLIB_OBJ) + ln -s $(notdir $(SHLIB)) $(SHLIBSOMAJ) + ln -s $(notdir $(SHLIBSOMAJ)) $(SHLIBSO) + +tcpd: tcpd.o $(SHLIB) + $(CC) $(CFLAGS) -o $@ tcpd.o $(SHLIBFLAGS) -miscd: miscd.o $(LIB) - $(CC) $(CFLAGS) -o $@ miscd.o $(LIB) $(LIBS) +miscd: miscd.o $(SHLIB) + $(CC) $(CFLAGS) -o $@ miscd.o $(SHLIBFLAGS) -safe_finger: safe_finger.o $(LIB) - $(CC) $(CFLAGS) -o $@ safe_finger.o $(LIB) $(LIBS) +safe_finger: safe_finger.o $(SHLIB) + $(CC) $(CFLAGS) -o $@ safe_finger.o $(SHLIBFLAGS) TCPDMATCH_OBJ = tcpdmatch.o fakelog.o inetcf.o scaffold.o -tcpdmatch: $(TCPDMATCH_OBJ) $(LIB) - $(CC) $(CFLAGS) -o $@ $(TCPDMATCH_OBJ) $(LIB) $(LIBS) +tcpdmatch: $(TCPDMATCH_OBJ) $(SHLIB) + $(CC) $(CFLAGS) -o $@ $(TCPDMATCH_OBJ) $(SHLIBFLAGS) -try-from: try-from.o fakelog.o $(LIB) - $(CC) $(CFLAGS) -o $@ try-from.o fakelog.o $(LIB) $(LIBS) +try-from: try-from.o fakelog.o $(SHLIB) + $(CC) $(CFLAGS) -o $@ try-from.o fakelog.o $(SHLIBFLAGS) TCPDCHK_OBJ = tcpdchk.o fakelog.o inetcf.o scaffold.o -tcpdchk: $(TCPDCHK_OBJ) $(LIB) - $(CC) $(CFLAGS) -o $@ $(TCPDCHK_OBJ) $(LIB) $(LIBS) +tcpdchk: $(TCPDCHK_OBJ) $(SHLIB) + $(CC) $(CFLAGS) -o $@ $(TCPDCHK_OBJ) $(SHLIBFLAGS) shar: $(KIT) @shar $(KIT) @@ -743,7 +765,8 @@ archive: clean: rm -f tcpd miscd safe_finger tcpdmatch tcpdchk try-from *.[oa] core \ - cflags + cflags libwrap*.so* + rm -rf shared tidy: clean chmod -R a+r . @@ -890,5 +913,6 @@ update.o: cflags update.o: mystdarg.h update.o: tcpd.h vfprintf.o: cflags +weak_symbols.o: tcpd.h workarounds.o: cflags workarounds.o: tcpd.h --- tcpd.h.orig +++ tcpd.h @@ -106,8 +106,14 @@ extern unsigned long dot_quad_addr(); /* /* Global variables. */ +#ifdef HAVE_WEAKSYMS +extern int allow_severity __attribute__ ((weak)); /* for connection logging */ +extern int deny_severity __attribute__ ((weak)); /* for connection logging */ +#else extern int allow_severity; /* for connection logging */ extern int deny_severity; /* for connection logging */ +#endif + extern char *hosts_allow_table; /* for verification mode redirection */ extern char *hosts_deny_table; /* for verification mode redirection */ extern int hosts_access_verbose; /* for verbose matching mode */ --- /dev/null +++ weak_symbols.c @@ -0,0 +1,11 @@ +/* + * @(#) weak_symbols.h 1.5 99/12/29 23:50 + * + * Author: Anthony Towns + */ + +#ifdef HAVE_WEAKSYMS +#include +int deny_severity = LOG_WARNING; +int allow_severity = SEVERITY; +#endif