walters / rpms / nfs-utils

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