Port of the dyndns.com update client ndyndns.
authorFelix Fietkau <nbd@openwrt.org>
Tue, 18 Mar 2008 19:07:42 +0000 (19:07 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 18 Mar 2008 19:07:42 +0000 (19:07 +0000)
Signed off by: Conrad Hirano <placebo3@fastmail.us>

SVN-Revision: 10615

net/ndyndns/Makefile [new file with mode: 0644]
net/ndyndns/files/ndyndns.conf.sample [new file with mode: 0644]
net/ndyndns/files/ndyndns.default [new file with mode: 0644]
net/ndyndns/files/ndyndns.init [new file with mode: 0644]
net/ndyndns/patches/ndyndns.patch [new file with mode: 0644]

diff --git a/net/ndyndns/Makefile b/net/ndyndns/Makefile
new file mode 100644 (file)
index 0000000..096e5d2
--- /dev/null
@@ -0,0 +1,50 @@
+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))
diff --git a/net/ndyndns/files/ndyndns.conf.sample b/net/ndyndns/files/ndyndns.conf.sample
new file mode 100644 (file)
index 0000000..3f1f7f8
--- /dev/null
@@ -0,0 +1,4 @@
+username=user
+password=password
+hostname=hostname.dyndns.org
+wildcard
diff --git a/net/ndyndns/files/ndyndns.default b/net/ndyndns/files/ndyndns.default
new file mode 100644 (file)
index 0000000..1904794
--- /dev/null
@@ -0,0 +1,3 @@
+CHROOT="/etc/ndyndns"
+CONFIG="/etc/ndyndns/ndyndns.conf"
+OPTIONS=""
diff --git a/net/ndyndns/files/ndyndns.init b/net/ndyndns/files/ndyndns.init
new file mode 100644 (file)
index 0000000..113d19c
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2007 OpenWrt.org
+
+START=80
+DEFAULT=/etc/default/ndyndns
+
+start() {
+       [ -f $DEFAULT ] && . $DEFAULT
+
+       . /etc/functions.sh
+       include /lib/network
+       scan_interfaces
+       /usr/sbin/ndyndns -c $CHROOT -f $CONFIG -i $(config_get wan ifname) $OPTIONS
+}
+
+stop() {
+       killall ndyndns
+}
diff --git a/net/ndyndns/patches/ndyndns.patch b/net/ndyndns/patches/ndyndns.patch
new file mode 100644 (file)
index 0000000..8e084cd
--- /dev/null
@@ -0,0 +1,163 @@
+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();