diff -Naur old/Makefile.in new/Makefile.in --- old/Makefile.in 2007-09-13 10:56:00.000000000 -0700 +++ new/Makefile.in 2008-02-03 04:07:13.000000000 -0800 @@ -1,11 +1,9 @@ #CC = gcc -Wall -Wpointer-arith -Wstrict-prototypes -pedantic CC = @CC@ -dnslib = -lnss_dns objects = log.o nstrl.o util.o chroot.o pidfile.o signals.o strlist.o checkip.o $(PLATFORM).o cfg.o ndyndns.o -CURLINC = @CURLINC@ CURLLIB = @CURLLIB@ VERSION = @VERSION@ -CFLAGS = @CFLAGS@ -Wall -Wpointer-arith -Wstrict-prototypes -pedantic $(CURLINC) +CFLAGS += -Wall -Wpointer-arith -Wstrict-prototypes -pedantic PLATFORM = @PLATFORM@ prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -16,7 +14,7 @@ all: ndyndns ndyndns : $(objects) - $(CC) $(LDFLAGS) $(dnslib) $(CURLLIB) -o ndyndns $(objects) + $(CC) $(LDFLAGS) $(CURLLIB) -o ndyndns $(objects) ndyndns.o : log.h nstrl.h util.h chroot.h pidfile.h signals.h strlist.h checkip.h $(PLATFORM).h cfg.h $(CC) $(CFLAGS) -c -o $@ ndyndns.c diff -Naur old/chroot.c new/chroot.c --- old/chroot.c 2007-03-13 15:54:12.000000000 -0700 +++ new/chroot.c 2008-02-03 04:10:21.000000000 -0800 @@ -18,8 +18,6 @@ #include #include #include -#include -#include #include "defines.h" #include "log.h" @@ -60,24 +58,4 @@ log_line("Failed to chdir(%s). Not invoking job.", path); exit(EXIT_FAILURE); } - - ret = chroot(path); - if (ret) { - log_line("Failed to chroot(%s). Not invoking job.", path); - exit(EXIT_FAILURE); - } } - -void drop_root(uid_t uid, gid_t gid) -{ - if (uid == 0 || gid == 0) { - log_line("FATAL - drop_root: attempt to drop root to root?\n"); - exit(EXIT_FAILURE); - } - - if (setregid(gid, gid) == -1 || setreuid(uid, uid) == -1) { - log_line("FATAL - drop_root: failed to drop root!\n"); - exit(EXIT_FAILURE); - } -} - diff -Naur old/ndyndns.c new/ndyndns.c --- old/ndyndns.c 2007-09-19 00:04:13.000000000 -0700 +++ new/ndyndns.c 2008-02-03 04:10:21.000000000 -0800 @@ -32,8 +32,6 @@ #include #include #include -#include -#include #include #include @@ -728,12 +726,9 @@ } int main(int argc, char** argv) { - int c, t, uid = 0, gid = 0; + int c, t; char pidfile[MAX_PATH_LENGTH] = PID_FILE_DEFAULT; char conffile[MAX_PATH_LENGTH] = CONF_FILE_DEFAULT; - char *p; - struct passwd *pws; - struct group *grp; while (1) { @@ -745,8 +740,6 @@ {"quiet", 0, 0, 'q'}, {"chroot", 1, 0, 'c'}, {"file", 1, 0, 'f'}, - {"user", 1, 0, 'u'}, - {"group", 1, 0, 'g'}, {"interface", 1, 0, 'i'}, {"remote", 0, 0, 'r'}, {"help", 0, 0, 'h'}, @@ -754,7 +747,7 @@ {0, 0, 0, 0} }; - c = getopt_long (argc, argv, "rdnp:qc:f:u:g:i:hv", long_options, &option_index); + c = getopt_long (argc, argv, "rdnp:qc:f:i:hv", long_options, &option_index); if (c == -1) break; switch (c) { @@ -771,8 +764,6 @@ " -f, --file configuration file\n" " -p, --pidfile pidfile path\n"); printf( -" -u, --user user name that ndyndns should run as\n" -" -g, --group group name that ndyndns should run as\n" " -i, --interface interface ip to check (default: ppp0)\n" " -r, --remote get ip from remote dyndns host (overrides -i)\n" " -h, --help print this help and exit\n" @@ -817,39 +808,12 @@ strlcpy(pidfile, optarg, sizeof pidfile); break; - case 'u': - t = (unsigned int) strtol(optarg, &p, 10); - if (*p != '\0') { - pws = getpwnam(optarg); - if (pws) { - uid = (int)pws->pw_uid; - if (!gid) - gid = (int)pws->pw_gid; - } else suicide("FATAL - Invalid uid specified.\n"); - } else - uid = t; - break; - - case 'g': - t = (unsigned int) strtol(optarg, &p, 10); - if (*p != '\0') { - grp = getgrnam(optarg); - if (grp) { - gid = (int)grp->gr_gid; - } else suicide("FATAL - Invalid gid specified.\n"); - } else - gid = t; - break; - case 'i': strlcpy(ifname, optarg, sizeof ifname); break; } } - if (getuid()) - suicide("FATAL - I need root for chroot!\n"); - if (gflags_detach) if (daemon(0,0)) suicide("FATAL - detaching fork failed\n"); @@ -870,7 +834,6 @@ /* Note that failure cases are handled by called fns. */ imprison(get_chroot()); - drop_root(uid, gid); /* Cover our tracks... */ wipe_chroot();