Port of the dyndns.com update client ndyndns.

Signed off by: Conrad Hirano <[EMAIL PROTECTED]>


Index: package/ndyndns/files/ndyndns.init
===================================================================
--- package/ndyndns/files/ndyndns.init  (revision 0)
+++ package/ndyndns/files/ndyndns.init  (revision 0)
@@ -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
+}
Index: package/ndyndns/files/ndyndns.default
===================================================================
--- package/ndyndns/files/ndyndns.default       (revision 0)
+++ package/ndyndns/files/ndyndns.default       (revision 0)
@@ -0,0 +1,3 @@
+CHROOT="/etc/ndyndns"
+CONFIG="/etc/ndyndns/ndyndns.conf"
+OPTIONS=""
Index: package/ndyndns/files/ndyndns.conf.sample
===================================================================
--- package/ndyndns/files/ndyndns.conf.sample   (revision 0)
+++ package/ndyndns/files/ndyndns.conf.sample   (revision 0)
@@ -0,0 +1,4 @@
+username=user
+password=password
+hostname=hostname.dyndns.org
+wildcard
Index: package/ndyndns/patches/ndyndns.patch
===================================================================
--- package/ndyndns/patches/ndyndns.patch       (revision 0)
+++ package/ndyndns/patches/ndyndns.patch       (revision 0)
@@ -0,0 +1,138 @@
+diff -Naur old/chroot.c new/chroot.c
+--- old/chroot.c       2007-03-13 15:54:12.000000000 -0700
++++ new/chroot.c       2007-12-02 15:46:12.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      2007-12-02 15:46:12.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();
Index: package/ndyndns/Makefile
===================================================================
--- package/ndyndns/Makefile    (revision 0)
+++ package/ndyndns/Makefile    (revision 0)
@@ -0,0 +1,49 @@
+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)
+
+include $(INCLUDE_DIR)/package.mk
+
+MAKE_FLAGS:=dnslib= CURLINC= 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))
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
http://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to