diff --git a/net/ddns-scripts/Makefile b/net/ddns-scripts/Makefile index 5487bf60d..2a6bd7429 100755 --- a/net/ddns-scripts/Makefile +++ b/net/ddns-scripts/Makefile @@ -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 @@ -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)) diff --git a/net/ddns-scripts/files/ddns.defaults b/net/ddns-scripts/files/ddns.defaults index 3908bb4b0..aade4c09b 100755 --- a/net/ddns-scripts/files/ddns.defaults +++ b/net/ddns-scripts/files/ddns.defaults @@ -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) diff --git a/net/ddns-scripts/files/services b/net/ddns-scripts/files/services index 58d0cc160..308d56971 100644 --- a/net/ddns-scripts/files/services +++ b/net/ddns-scripts/files/services @@ -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 index 000000000..587100339 --- /dev/null +++ b/net/ddns-scripts/files/update_freedns_42_pl.sh @@ -0,0 +1,17 @@ +#.Distributed under the terms of the GNU General Public License (GPL) version 2.0 +#.2018 Michal Lipka +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='\<dynamic\>' +PROG="$(which curl) -sk" +write_log 7 "sending update to freedns.42.pl with ip $__IP" +XMLDATA="xname.updateArecordname[RECORDNAME]zone[ZONENAME]oldaddress*updatereverse0user[USERNAME]ttl600newaddress[IP]password[PASSWORD]" +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 "" $DATFILE > /dev/null 2>&1 && return 1 +grep 'serial' $DATFILE >/dev/null 2>&1 +return $?