File drac.dif of Package drac

--- drac/Makefile
+++ drac/Makefile
@@ -5,9 +5,9 @@
 
 # Paths
 
-INSTALL = /usr/ucb/install
-EBIN = /usr/local/sbin
-MAN = /usr/local/man/man
+INSTALL = /usr/bin/install
+EBIN = /usr/sbin
+MAN = /usr/share/man/man
 
 # OS-Dependant settings
 
@@ -33,26 +33,27 @@
 # -DCIDR_KEY	# keys in CIDR format
 # -DTERM_KD	# keys and data nul-terminated
 
-DEFS = -DTI_RPC -DFCNTL_LOCK -DSYSINFO
+DEFS = -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C
 
 # Compiler flags 
-CC = cc
+CC = gcc
 RANLIB = :
-CFLAGS = $(DEFS) -g -I/usr/local/src/db/db-4.1.25/build_unix
+OPTFLAGS = -O2 -Wall
+CFLAGS = $(DEFS) $(OPTFLAGS)
 #CFLAGS = $(DEFS) -g -I/usr/local/src/db/db-3.1.17/build_unix
 #CFLAGS = $(DEFS) -g -I/usr/local/src/db/db-2.4.14/Unix
 #CFLAGS = $(DEFS) -g -I/usr/local/src/db/db.1.85/PORT/sunos.5.2/include
-LDLIBS = -L/usr/local/src/db/db-4.1.25/build_unix -lnsl -ldb-4.1
+LDLIBS = -lnsl -ldb -lpthread
 #LDLIBS = -L/usr/local/src/db/db-3.1.17/build_unix -lnsl -ldb
 #LDLIBS = -L/usr/local/src/db/db-2.4.14/Unix -lnsl -ldb
 #LDLIBS = -L/usr/local/src/db/db.1.85/PORT/sunos.5.2 -lnsl -ldb
 TSTLIBS = -L. -ldrac -lnsl
-RPCGENFLAGS = 
-#RPCGENFLAGS = -C
+#RPCGENFLAGS = 
+RPCGENFLAGS = -C
 
 # Man sections
 MANLIB = 3
-MANADM = 1m
+MANADM = 8
 
 ## Nothing to change after this point
 
@@ -110,7 +111,7 @@
 	$(CC) -o $(CLIENT) $(TST_OBJ) $(TSTLIBS)
 
 $(SERVER): $(S_OBJS) 
-	$(CC) -o $(SERVER) $(S_OBJS) $(LDLIBS)
+	$(CC) -o $(SERVER) $(S_OBJS) $(LDLIBS) -pie
 
 clean:
 	rm -f core $(RPC_ALL) $(H_OBJS) $(TST_OBJ) $(CLIENT) \
@@ -120,7 +121,7 @@
 	tar cf drac.tar $(PACKAGE)
 
 install: $(SERVER)
-	$(INSTALL) -c -o bin -g bin -m 0755 $(SERVER) $(EBIN)
+	$(INSTALL) -c -m 0755 $(SERVER) $(EBIN)
 
 install-man: $(SERVER).1m dracauth.3
 	$(INSTALL) -c -m 0444 $(SERVER).1m $(MAN)$(MANADM)/$(SERVER).$(MANADM)
--- drac/rc.dracd
+++ drac/rc.dracd
@@ -0,0 +1,149 @@
+#! /bin/sh
+# Copyright (c) 2000 SuSE GmbH Nuernberg, Germany.
+# Copyright (c) 2002 SuSE Linux Ag Nuernberg, Germany.
+#
+# Author: Carsten Hoeger, Ralf Haferkamp
+#
+# /sbin/init.d/dracd
+#
+#   and symbolic its link
+#
+# /sbin/rcdracd
+#
+### BEGIN INIT INFO
+# Provides:       drac
+# Required-Start: $remote_fs portmap
+# Required-Stop: $remote_fs portmap
+# Default-Start:  3 5
+# Description:    start the DRAC Daemon
+### END INIT INFO
+
+test -f /etc/sysconfig/dracd && . /etc/sysconfig/dracd
+
+# Determine the base and follow a runlevel link name.
+base=${0##*/}
+link=${base#*[SK][0-9][0-9]}
+
+DRAC_BIN=/usr/sbin/rpc.dracd
+test -x $DRAC_BIN || exit 5
+
+# Shell functions sourced from /etc/rc.status:
+#      rc_check         check and set local and overall rc status
+#      rc_status        check and set local and overall rc status
+#      rc_status -v     ditto but be verbose in local rc status
+#      rc_status -v -r  ditto and clear the local rc status
+#      rc_failed        set local and overall rc status to failed
+#      rc_failed <num>  set local and overall rc status to <num><num>
+#      rc_reset         clear local rc status (overall remains)
+#      rc_exit          exit appropriate to overall rc status
+. /etc/rc.status
+
+# First reset status of this service
+rc_reset
+
+# Return values acc. to LSB for all commands but status:
+# 0 - success
+# 1 - generic or unspecified error
+# 2 - invalid or excess argument(s)
+# 3 - unimplemented feature (e.g. "reload")
+# 4 - insufficient privilege
+# 5 - program is not installed
+# 6 - program is not configured
+# 7 - program is not running
+# 
+# Note that starting an already running service, stopping
+# or restarting a not-running service as well as the restart
+# with force-reload (in case signalling is not supported) are
+# considered a success.
+
+case "$1" in
+    start)
+	echo -n "Starting service DRAC"
+	## Start daemon with startproc(8). If this fails
+	## the echo return value is set appropriate.
+
+	# NOTE: startproc return 0, even if service is 
+	# already running to match LSB spec.
+	startproc $DRAC_BIN -i -e $DRACD_RELAYTIME $DRACD_DRACDB
+
+	# Remember status and be verbose
+	rc_status -v
+	;;
+    stop)
+	echo -n "Shutting down service DRAC"
+	## Stop daemon with killproc(8) and if this fails
+	## set echo the echo return value.
+
+	killproc -TERM $DRAC_BIN
+
+	# Remember status and be verbose
+	rc_status -v
+	;;
+    try-restart)
+	## Stop the service and if this succeeds (i.e. the 
+	## service was running before), start it again.
+	## Note: try-restart is not (yet) part of LSB (as of 0.7.5)
+	$0 status >/dev/null &&  $0 restart
+
+	# Remember status and be quiet
+	rc_status
+	;;
+    restart)
+	## Stop the service and regardless of whether it was
+	## running or not, start it again.
+	$0 stop
+	$0 start
+
+	# Remember status and be quiet
+	rc_status
+	;;
+    force-reload)
+	## Signal the daemon to reload its config. Most daemons
+	## do this on signal 1 (SIGHUP).
+	## If it does not support it, restart.
+
+	echo -n "Reload service DRAC"
+	## if it supports it:
+	#killproc -HUP $CYRUS_BIN
+	#touch /var/run/FOO.pid
+	#rc_status -v
+
+	# Otherwise:
+	$0 stop  &&  $0 start
+	rc_status
+	;;
+    reload)
+	## Like force-reload, but if daemon does not support
+	## signalling, do nothing (!)
+
+	echo -n "Reload service DRAC"
+	# If it supports signalling:
+	#killproc -HUP $CYRUS_BIN
+	#touch /var/run/FOO.pid
+	#rc_status -v
+	
+	# Otherwise if it does not support reload:
+	rc_failed 3
+	rc_status -v
+	;;
+    status)
+	echo -n "Checking for service DRAC: "
+	## Check status with checkproc(8), if process is running
+	## checkproc will return with exit status 0.
+
+	# Status has a slightly different for the status command:
+	# 0 - service running
+	# 1 - service dead, but /var/run/  pid  file exists
+	# 2 - service dead, but /var/lock/ lock file exists
+	# 3 - service not running
+
+	# NOTE: checkproc returns LSB compliant status values.
+	checkproc $DRAC_BIN
+	rc_status -v
+	;;
+    *)
+	echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload}"
+	exit 1
+	;;
+esac
+rc_exit
--- drac/README
+++ drac/README
@@ -18,7 +18,7 @@
   periodically expires old entries.
 
 o Only trusted mail servers are permitted to communicate with rpc.dracd,
-  as controlled by /etc/mail/dracd.allow .
+  as controlled by /etc/dracd.allow .
 
 o The daemon can optionally re-create the database on startup.
 
--- drac/rpc.dracd.1m
+++ drac/rpc.dracd.1m
@@ -22,7 +22,7 @@
 The daemon, rpc.dracd, adds or updates entries in the cache, and
 periodically expires old entries.
 Only trusted mail servers are permitted to communicate with rpc.dracd,
-as controlled by \f4/etc/mail/dracd.allow\f1.
+as controlled by \f4/etc/dracd.allow\f1.
 If this file does not exist, all local IP addresses are permitted.
 .SS Allow File Format
 The Allow File file consists of entries of the form:
@@ -61,7 +61,7 @@
 .B /etc/mail/dracd.db
 default database file
 .TP
-.B /etc/mail/dracd.allow
+.B /etc/dracd.allow
 default allow file.
 .PD
 .SH SEE ALSO
--- drac/rpc.dracd.c
+++ drac/rpc.dracd.c
@@ -37,7 +37,7 @@
 #include "drac.h"
 
 #define DBFILE "/etc/mail/dracd.db"
-#define ALFILE "/etc/mail/dracd.allow"
+#define ALFILE "/etc/dracd.allow"
 
 struct net_def {
     struct net_def *nd_next;
@@ -62,12 +62,17 @@
 FILE *debugf;
 #endif
 
+static void expire();
+static int lockdb();
+static int unlockdb();
+static void iniclist();
 /* On SIGTERM, must close db */
 void catcher(n) int n; {
     terminate = 1;
 }
 
 /* Parse command-line options */
+int
 main(argc, argv) int argc; char **argv; {
     int c;
     extern char *optarg;
@@ -93,6 +98,7 @@
 }
 
 /* Called once after fork */
+void
 drac_run() {
     int sel;
     time_t nexte, now;
@@ -176,7 +182,11 @@
 			  (initdb) ? DB_TRUNCATE|DB_CREATE : DB_CREATE,
 			  0644);
 #else
+#if DB_VERSION_MAJOR >= 4 && DB_VERSION_MINOR >= 1
+    errno = dbp->open(dbp, NULL, dbfile, NULL, DB_BTREE,
+#else
     errno = dbp->open(dbp, dbfile, NULL, DB_BTREE,
+#endif
 			  (initdb) ? DB_TRUNCATE|DB_CREATE : DB_CREATE,
 			  0644);
 #endif
@@ -357,6 +367,7 @@
 }
 
 /* Expire old entries from the database */
+static void
 expire() {
 #if DB_VERSION_MAJOR < 2
     int seqerr, flags;
@@ -386,7 +397,7 @@
 #endif
     if ( errno != 0 ) {
 	syslog(LOG_ERR, "expire cursor failed: %m");
-	return 0;
+	return;
     }
 #endif
 
@@ -440,6 +451,7 @@
 }
 
 /* Lock the database */
+static int
 lockdb() {
 #ifdef FCNTL_LOCK
     struct flock lfd;
@@ -454,6 +466,7 @@
 }
 
 /* Unlock the database */
+static int
 unlockdb() {
 #ifdef FCNTL_LOCK
     struct flock lfd;
@@ -469,6 +482,7 @@
 
 /* Initialize the trusted client table */
 /*	All in network byte order */
+static void
 iniclist() {
     FILE *alfp;
     char buf[128], mask[32], addr[32], hname[128];
--- drac/sysconfig.dracd
+++ drac/sysconfig.dracd
@@ -0,0 +1,17 @@
+## Path:           Network/Mail/Drac
+## Description:    Dynamic Relay Authorization Control (POP-before-SMTP)
+## Type:           integer
+## Default:        5
+## ServiceRestart: dracd
+#
+# The TTL of a per IP open relay in minutes
+#
+DRACD_RELAYTIME="5"
+
+## Type:           string
+## Default:        /etc/postfix/dracd.db
+## ServiceRestart: dracd
+#
+# The name of the (btree) dracdb.
+#
+DRACD_DRACDB="/etc/postfix/dracd.db"
--- drac/testing.c
+++ drac/testing.c
@@ -3,6 +3,7 @@
  */
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <sys/types.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
@@ -24,4 +25,5 @@
 	ip = inet_addr(argv[2]);
 	rc = dracauth(host, ip, &err);
 	if (rc != 0) printf("%s: %s\n", argv[0], err);
+	return 0;
 }