ddns-scripts: New ddns script for polish service FreeDNS.42.pl
authorMichal Lipka <michal@sysadmin.care>
Sat, 9 Jun 2018 10:37:54 +0000 (13:37 +0300)
committerHannu Nyman <hannu.nyman@iki.fi>
Sat, 9 Jun 2018 10:37:54 +0000 (13:37 +0300)
new ddns script for polish service FreeDNS.42.pl where you can
host your own domains for free

Signed-off-by: Michal Lipka <michal@sysadmin.care>
(commits from PR #6150 squashed together)

net/ddns-scripts/Makefile
net/ddns-scripts/files/ddns.defaults
net/ddns-scripts/files/services
net/ddns-scripts/files/update_freedns_42_pl.sh [new file with mode: 0755]

index 5487bf60dbbf08498d8294d0ae3b78d172a327cb..2a6bd7429b1b06b2b8323d9185de566921a27f1e 100755 (executable)
@@ -12,7 +12,7 @@ PKG_NAME:=ddns-scripts
 PKG_VERSION:=2.7.7
 # Release == build
 # increase on changes of services files or tld_names.dat
-PKG_RELEASE:=7
+PKG_RELEASE:=8
 
 PKG_LICENSE:=GPL-2.0
 PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
@@ -66,13 +66,23 @@ endef
 ###### *************************************************************************
 define Package/ddns-scripts_cloudflare.com-v4
     $(call Package/ddns-scripts/Default)
-    TITLE:=CloudFlare.com API v4 (require cURL)
+    TITLE:=CloudFlare.com API v4 (requires cURL)
     DEPENDS:=ddns-scripts +curl
 endef
 define Package/ddns-scripts_cloudflare.com-v4/description
     Dynamic DNS Client scripts extension for CloudFlare.com API-v4 (require/install cURL)
 endef
 
+###### *************************************************************************
+define Package/ddns-scripts_freedns_42_pl
+    $(call Package/ddns-scripts/Default)
+    TITLE:=DDNS extension for FreeDNS.42.pl (requires cURL)
+    DEPENDS:=ddns-scripts +curl
+endef
+define Package/ddns-scripts_freedns_42_pl/description
+    Dynamic DNS Client scripts extension for freedns.42.pl
+endef
+
 ###### *************************************************************************
 define Package/ddns-scripts_godaddy.com-v1
     $(call Package/ddns-scripts/Default)
@@ -282,6 +292,44 @@ define Package/ddns-scripts_cloudflare.com-v4/prerm
        exit 0  # suppress errors
 endef
 
+###### *************************************************************************
+define Package/ddns-scripts_freedns_42_pl/preinst
+       #!/bin/sh
+       # if NOT run buildroot then stop service
+       [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
+       exit 0  # suppress errors
+endef
+define Package/ddns-scripts_freedns_42_pl/install
+       $(INSTALL_DIR) $(1)/etc/uci-defaults
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_freedns_42_pl
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_freedns_42_pl.sh $(1)/usr/lib/ddns
+endef
+define Package/ddns-scripts_freedns_42_pl/postinst
+       #!/bin/sh
+       # remove old services file entries
+       /bin/sed -i '/freedns\.42\.pl/d' $${IPKG_INSTROOT}/etc/ddns/services    >/dev/null 2>&1
+       # and create new
+       printf "%s\\t%s\\n" '"freedns.42.pl"' '"update_freedns_42_pl.sh"' >> $${IPKG_INSTROOT}/etc/ddns/services
+       # on real system restart service if enabled
+       [ -z "$${IPKG_INSTROOT}" ] && {
+               [ -x /etc/uci-defaults/ddns_freedns_42_pl ] && \
+                       /etc/uci-defaults/ddns_freedns_42_pl && \
+                               rm -f /etc/uci-defaults/ddns_freedns_42_pl >/dev/null 2>&1
+               /etc/init.d/ddns enabled && \
+                       /etc/init.d/ddns start >/dev/null 2>&1
+       }
+       exit 0  # suppress errors
+endef
+define Package/ddns-scripts_freedns_42_pl/prerm
+       #!/bin/sh
+       # if NOT run buildroot then stop service
+       [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop             >/dev/null 2>&1
+       # remove services file entries
+       /bin/sed -i '/freedns\.42\.pl/d' $${IPKG_INSTROOT}/etc/ddns/services    >/dev/null 2>&1
+       exit 0  # suppress errors
+endef
+
 ###### *************************************************************************
 define Package/ddns-scripts_godaddy.com-v1/preinst
        #!/bin/sh
@@ -447,6 +495,7 @@ endef
 $(eval $(call BuildPackage,ddns-scripts))
 $(eval $(call BuildPackage,ddns-scripts_cloudflare))
 $(eval $(call BuildPackage,ddns-scripts_cloudflare.com-v4))
+$(eval $(call BuildPackage,ddns-scripts_freedns_42_pl))
 $(eval $(call BuildPackage,ddns-scripts_godaddy.com-v1))
 $(eval $(call BuildPackage,ddns-scripts_no-ip_com))
 $(eval $(call BuildPackage,ddns-scripts_nsupdate))
index 3908bb4b07909ea50807c59f5b1e2b6954f89bba..aade4c09b6d32e095f21c94c5b7dd539ba4aaf14 100755 (executable)
@@ -178,6 +178,8 @@ update_config() {
                                                                $uc_uci set $g_cfgfile.$uc_name.$uc_var="dyn.com";;
                                                        free\.editdns\.net)
                                                                $uc_uci set $g_cfgfile.$uc_name.$uc_var="editdns.net";;
+                                                       FreeDNS\.42\.pl)
+                                                               $uc_uci set $g_cfgfile.$uc_name.$uc_var="freedns.42.pl";;
                                                        domains\.google\.com)
                                                                $uc_uci set $g_cfgfile.$uc_name.$uc_var="google.com";;
                                                        loopia\.com)
index 58d0cc160da8cf0bf96721b4694adc551396b910..308d569716a3be9c915a16bec27d1ac85eb6a95b 100644 (file)
@@ -35,6 +35,7 @@
 #
 #.cloudflare.com-v1    !!! Please install additional package "ddns-scripts_cloudflare"
 #.cloudflare.com-v4    !!! Please install additional package "ddns-scripts_cloudflare.com-v4"
+#.FreeDNS.42.pl        !!! Please install additional package "ddns-scripts_freedns_42_pl"
 #.godaddy.com-v1       !!! Please install additional package "ddns-scripts_godaddy.com-v1"
 #.no-ip.com / noip.com !!! Please install additional package "ddns-scripts_no-ip_com"
 #.route53-v1           !!! Please install additional package "ddns-scripts_route53-v1"
diff --git a/net/ddns-scripts/files/update_freedns_42_pl.sh b/net/ddns-scripts/files/update_freedns_42_pl.sh
new file mode 100755 (executable)
index 0000000..5871003
--- /dev/null
@@ -0,0 +1,17 @@
+#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+#.2018 Michal Lipka <michal at sysadmin dot care>
+local __DUMMY
+local __URL="https://freedns.42.pl/xmlrpc.php"
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'"
+[ $ip_dynamic -eq 1 ] && __IP='\&lt;dynamic\&gt;'
+PROG="$(which curl) -sk"
+write_log 7 "sending update to freedns.42.pl with ip $__IP"
+XMLDATA="<?xml version='1.0'?><methodCall><methodName>xname.updateArecord</methodName><params><param><value><struct><member><name>name</name><value><string>[RECORDNAME]</string></value></member><member><name>zone</name><value><string>[ZONENAME]</string></value></member><member><name>oldaddress</name><value><string>*</string></value></member><member><name>updatereverse</name><value><string>0</string></value></member><member><name>user</name><value><string>[USERNAME]</string></value></member><member><name>ttl</name><value><string>600</string></value></member><member><name>newaddress</name><value><string>[IP]</string></value></member><member><name>password</name><value><string>[PASSWORD]</string></value></member></struct></value></param></params></methodCall>"
+XMLDATA=$(echo $XMLDATA | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \
+-e "s#\[ZONENAME\]#$zone#g" -e "s#\[RECORDNAME\]#$record#g" -e "s#\[IP\]#$__IP#g")
+$PROG -d "$XMLDATA" -o $DATFILE $__URL || return 1
+write_log 7 "'freedns.42.pl' answered:\n$(cat $DATFILE)"
+grep "<fault>" $DATFILE > /dev/null 2>&1 && return 1
+grep '<name>serial</name>' $DATFILE >/dev/null 2>&1
+return $?