ee511bb
Author: Steve Dickson <steved@redhat.com>
ee511bb
Date:   Sat Jan 31 06:17:18 2009 -0500
ee511bb
ee511bb
    General clean up. Removed unused routines. Reworked syslog
ee511bb
    message to (hopefully) make it more sensible. Move
ee511bb
    "#ifdef HAVE_LIBWRAP" around so nothing will be defined
ee511bb
    when tcp wrapper is not configured.
ee511bb
    
ee511bb
    Signed-off-by: Steve Dickson <steved@redhat.com>
ee511bb
ee511bb
diff -up nfs-utils-1.1.4/support/misc/tcpwrapper.c.orig nfs-utils-1.1.4/support/misc/tcpwrapper.c
ee511bb
--- nfs-utils-1.1.4/support/misc/tcpwrapper.c.orig	2009-01-31 06:27:54.000000000 -0500
ee511bb
+++ nfs-utils-1.1.4/support/misc/tcpwrapper.c	2009-01-31 06:31:32.000000000 -0500
ee511bb
@@ -34,6 +34,7 @@
ee511bb
 #ifdef HAVE_CONFIG_H
ee511bb
 #include <config.h>
ee511bb
 #endif
ee511bb
+#ifdef HAVE_LIBWRAP
ee511bb
 #include <tcpwrapper.h>
ee511bb
 #include <unistd.h>
ee511bb
 #include <string.h>
ee511bb
@@ -57,40 +58,10 @@
ee511bb
 
ee511bb
 static void logit(int severity, struct sockaddr_in *addr,
ee511bb
 		  u_long procnum, u_long prognum, char *text);
ee511bb
-static void toggle_verboselog(int sig);
ee511bb
-int     verboselog = 0;
ee511bb
-int     allow_severity = LOG_INFO;
ee511bb
-int     deny_severity = LOG_WARNING;
ee511bb
-
ee511bb
-/* A handful of macros for "readability". */
ee511bb
-
ee511bb
-#ifdef HAVE_LIBWRAP
ee511bb
-/* coming from libwrap.a (tcp_wrappers) */
ee511bb
-extern int hosts_ctl(char *daemon, char *name, char *addr, char *user);
ee511bb
-#else
ee511bb
-int hosts_ctl(char *daemon, char *name, char *addr, char *user)
ee511bb
-{
ee511bb
-	return 0;
ee511bb
-}
ee511bb
-#endif
ee511bb
-
ee511bb
-#define	legal_port(a,p) \
ee511bb
-  (ntohs((a)->sin_port) < IPPORT_RESERVED || (p) >= IPPORT_RESERVED)
ee511bb
-
ee511bb
-#define log_bad_port(addr, proc, prog) \
ee511bb
-  logit(deny_severity, addr, proc, prog, ": request from unprivileged port")
ee511bb
+static int check_files(void);
ee511bb
 
ee511bb
 #define log_bad_host(addr, proc, prog) \
ee511bb
-  logit(deny_severity, addr, proc, prog, ": request from unauthorized host")
ee511bb
-
ee511bb
-#define log_bad_owner(addr, proc, prog) \
ee511bb
-  logit(deny_severity, addr, proc, prog, ": request from non-local host")
ee511bb
-
ee511bb
-#define	log_no_forward(addr, proc, prog) \
ee511bb
-  logit(deny_severity, addr, proc, prog, ": request not forwarded")
ee511bb
-
ee511bb
-#define log_client(addr, proc, prog) \
ee511bb
-  logit(allow_severity, addr, proc, prog, "")
ee511bb
+  logit(LOG_WARNING, addr, proc, prog, "request from unauthorized host")
ee511bb
 
ee511bb
 #define ALLOW 1
ee511bb
 #define DENY 0
ee511bb
@@ -180,46 +151,9 @@ struct sockaddr_in *addr;
ee511bb
 	return DENY;
ee511bb
 }
ee511bb
 
ee511bb
-/* check_startup - additional startup code */
ee511bb
-
ee511bb
-void    check_startup(void)
ee511bb
-{
ee511bb
-
ee511bb
-    /*
ee511bb
-     * Give up root privileges so that we can never allocate a privileged
ee511bb
-     * port when forwarding an rpc request.
ee511bb
-     *
ee511bb
-     * Fix 8/3/00 Philipp Knirsch: First lookup our rpc user. If we find it,
ee511bb
-     * switch to that uid, otherwise simply resue the old bin user and print
ee511bb
-     * out a warning in syslog.
ee511bb
-     */
ee511bb
-
ee511bb
-    struct passwd *pwent;
ee511bb
-
ee511bb
-    pwent = getpwnam("rpc");
ee511bb
-    if (pwent == NULL) {
ee511bb
-        syslog(LOG_WARNING, "user rpc not found, reverting to user bin");
ee511bb
-        if (setuid(1) == -1) {
ee511bb
-            syslog(LOG_ERR, "setuid(1) failed: %m");
ee511bb
-            exit(1);
ee511bb
-        }
ee511bb
-    }
ee511bb
-    else {
ee511bb
-        if (setuid(pwent->pw_uid) == -1) {
ee511bb
-            syslog(LOG_WARNING, "setuid() to rpc user failed: %m");
ee511bb
-            if (setuid(1) == -1) {
ee511bb
-                syslog(LOG_ERR, "setuid(1) failed: %m");
ee511bb
-                exit(1);
ee511bb
-            }
ee511bb
-        }
ee511bb
-    }
ee511bb
-
ee511bb
-    (void) signal(SIGINT, toggle_verboselog);
ee511bb
-}
ee511bb
-
ee511bb
 /* check_files - check to see if either access files have changed */
ee511bb
 
ee511bb
-int check_files()
ee511bb
+static int check_files()
ee511bb
 {
ee511bb
 	static time_t allow_mtime, deny_mtime;
ee511bb
 	struct stat astat, dstat;
ee511bb
@@ -268,78 +202,21 @@ u_long  prog;
ee511bb
 			haccess_add(addr, prog, FALSE);
ee511bb
 		return (FALSE);
ee511bb
 	}
ee511bb
-	if (verboselog)
ee511bb
-		log_client(addr, proc, prog);
ee511bb
 
ee511bb
 	if (acc)
ee511bb
 		acc->access = TRUE;
ee511bb
 	else 
ee511bb
 		haccess_add(addr, prog, TRUE);
ee511bb
-    return (TRUE);
ee511bb
-}
ee511bb
 
ee511bb
-/* check_privileged_port - additional checks for privileged-port updates */
ee511bb
-int
ee511bb
-check_privileged_port(struct sockaddr_in *addr,	
ee511bb
-		      u_long proc, u_long prog, u_long port)
ee511bb
-{
ee511bb
-#ifdef CHECK_PORT
ee511bb
-    if (!legal_port(addr, port)) {
ee511bb
-	log_bad_port(addr, proc, prog);
ee511bb
-	return (FALSE);
ee511bb
-    }
ee511bb
-#endif
ee511bb
     return (TRUE);
ee511bb
 }
ee511bb
 
ee511bb
-/* toggle_verboselog - toggle verbose logging flag */
ee511bb
-
ee511bb
-static void toggle_verboselog(int sig)
ee511bb
-{
ee511bb
-    (void) signal(sig, toggle_verboselog);
ee511bb
-    verboselog = !verboselog;
ee511bb
-}
ee511bb
-
ee511bb
 /* logit - report events of interest via the syslog daemon */
ee511bb
 
ee511bb
 static void logit(int severity, struct sockaddr_in *addr,
ee511bb
 		  u_long procnum, u_long prognum, char *text)
ee511bb
 {
ee511bb
-    char   *procname;
ee511bb
-    char    procbuf[16 + 4 * sizeof(u_long)];
ee511bb
-    char   *progname;
ee511bb
-    char    progbuf[16 + 4 * sizeof(u_long)];
ee511bb
-    struct rpcent *rpc;
ee511bb
-
ee511bb
-    /*
ee511bb
-     * Fork off a process or the portmap daemon might hang while
ee511bb
-     * getrpcbynumber() or syslog() does its thing.
ee511bb
-     *
ee511bb
-     * Don't forget to wait for the children, too...
ee511bb
-     */
ee511bb
-
ee511bb
-    if (fork() == 0) {
ee511bb
-
ee511bb
-	/* Try to map program number to name. */
ee511bb
-
ee511bb
-	if (prognum == 0) {
ee511bb
-	    progname = "";
ee511bb
-	} else if ((rpc = getrpcbynumber((int) prognum))) {
ee511bb
-	    progname = rpc->r_name;
ee511bb
-	} else {
ee511bb
-	    snprintf(progname = progbuf, sizeof (progbuf),
ee511bb
-		     "prog (%lu)", prognum);
ee511bb
-	}
ee511bb
-
ee511bb
-	/* Try to map procedure number to name. */
ee511bb
-
ee511bb
-	snprintf(procname = procbuf, sizeof (procbuf),
ee511bb
-		 "proc (%lu)", (u_long) procnum);
ee511bb
-
ee511bb
-	/* Write syslog record. */
ee511bb
-
ee511bb
-	syslog(severity, "connect from %s to %s in %s%s",
ee511bb
-	       inet_ntoa(addr->sin_addr), procname, progname, text);
ee511bb
-	exit(0);
ee511bb
-    }
ee511bb
+	syslog(severity, "connect from %s denied: %s",
ee511bb
+	       inet_ntoa(addr->sin_addr), text);
ee511bb
 }
ee511bb
+#endif