--- /dev/null
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=ndyndns
+PKG_VERSION:=1.12
+PKG_RELEASE:=1
+
+PKG_SOURCE:=ndyndns-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://ndyndns.googlecode.com/files
+PKG_MD5SUM:=1ca356cf366cd617fe3fb5fad9eb961b
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
+PKG_FIXUP = libtool
+
+include $(INCLUDE_DIR)/package.mk
+
+MAKE_FLAGS:=PLATFORM=linux
+
+define Package/ndyndns
+ SECTION:=net
+ CATEGORY:=Network
+ TITLE:=DynDNS.com update daemon
+ URL:=http://ndyndns.googlecode.com/
+ DEPENDS:=+libcurl +libopenssl
+endef
+
+define Package/ndyndns/description
+ The ndyndns daemon is an update client for DynDNS.com. It
+ checks for an IP address change every two minutes, avoids
+ unnecessary updates, reports errors, logs to syslog, and
+ generally complies with everything required of a proper dyndns
+ client.
+endef
+
+define Package/ndyndns/conffiles
+/etc/ndyndns/ndyndns.conf.sample
+/etc/default/ndyndns
+endef
+
+define Package/ndyndns/install
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/ndyndns $(1)/usr/sbin
+ $(INSTALL_DIR) $(1)/etc/default
+ $(INSTALL_BIN) files/$(PKG_NAME).default $(1)/etc/default/$(PKG_NAME)
+ $(INSTALL_DIR) $(1)/etc/init.d/
+ $(INSTALL_BIN) files/$(PKG_NAME).init $(1)/etc/init.d/$(PKG_NAME)
+ $(INSTALL_DIR) $(1)/etc/$(PKG_NAME)
+ $(INSTALL_CONF) files/$(PKG_NAME).conf.sample $(1)/etc/$(PKG_NAME)
+endef
+
+$(eval $(call BuildPackage,ndyndns))
--- /dev/null
+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 <unistd.h>
+ #include <stdlib.h>
+ #include <string.h>
+-#include <pwd.h>
+-#include <grp.h>
+
+ #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 <net/if.h>
+ #include <ctype.h>
+ #include <time.h>
+-#include <pwd.h>
+-#include <grp.h>
+
+ #include <signal.h>
+ #include <errno.h>
+@@ -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();