From 728f37ad15d1544657c4008564e3e377aab2ef18 Mon Sep 17 00:00:00 2001 From: Christian Schoenebeck Date: Wed, 11 Jan 2017 17:05:05 +0100 Subject: [PATCH] [for-15.05] ddns-scripts: backport of 2.7.6-10 Backport of current version 2.7.6-10 - more services - more functionality - be prepared for next versions compiled ipk-packages available at https://github.com/chris5560/OpenWrt-Backports/tree/master/for-CC15.05.01/ddns-scripts_2.7.6-10 Signed-off-by: Christian Schoenebeck --- net/ddns-scripts/Makefile | 326 +- net/ddns-scripts/files/ddns.config | 17 +- net/ddns-scripts/files/ddns.defaults | 309 ++ net/ddns-scripts/files/ddns.hotplug | 9 +- net/ddns-scripts/files/ddns.init | 13 +- .../files/dynamic_dns_functions.sh | 645 +++- .../files/dynamic_dns_lucihelper.sh | 163 +- net/ddns-scripts/files/dynamic_dns_updater.sh | 205 +- .../{tld_names.dat => public_suffix_list.dat} | 3382 ++++++++++++----- net/ddns-scripts/files/services | 174 +- net/ddns-scripts/files/services_ipv6 | 80 +- ...udFlare.sh => update_cloudflare_com_v1.sh} | 37 +- .../files/update_cloudflare_com_v4.sh | 188 + .../files/update_godaddy_com_v1.sh | 171 + ...pdate_No-IP.com.sh => update_no-ip_com.sh} | 0 net/ddns-scripts/files/update_nsupdate.sh | 12 +- net/ddns-scripts/samples/ddns.config_sample | 31 +- net/ddns-scripts/samples/update_sample.sh | 10 +- net/ddns-scripts/tools/public_suffix_list.sh | 39 + 19 files changed, 4400 insertions(+), 1411 deletions(-) create mode 100755 net/ddns-scripts/files/ddns.defaults mode change 100644 => 100755 net/ddns-scripts/files/dynamic_dns_updater.sh rename net/ddns-scripts/files/{tld_names.dat => public_suffix_list.dat} (76%) rename net/ddns-scripts/files/{update_CloudFlare.sh => update_cloudflare_com_v1.sh} (84%) mode change 100644 => 100755 create mode 100755 net/ddns-scripts/files/update_cloudflare_com_v4.sh create mode 100755 net/ddns-scripts/files/update_godaddy_com_v1.sh rename net/ddns-scripts/files/{update_No-IP.com.sh => update_no-ip_com.sh} (100%) mode change 100644 => 100755 mode change 100644 => 100755 net/ddns-scripts/files/update_nsupdate.sh create mode 100755 net/ddns-scripts/tools/public_suffix_list.sh diff --git a/net/ddns-scripts/Makefile b/net/ddns-scripts/Makefile index d388b3f222..1c5031d3b7 100755 --- a/net/ddns-scripts/Makefile +++ b/net/ddns-scripts/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2008-2015 OpenWrt.org +# Copyright (C) 2008-2017 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # @@ -9,10 +9,10 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ddns-scripts # Version == major.minor.patch # increase on new functionality (minor) or patches (patch) -PKG_VERSION:=2.4.3 +PKG_VERSION:=2.7.6 # Release == build # increase on changes of services files or tld_names.dat -PKG_RELEASE:=2 +PKG_RELEASE:=10 PKG_LICENSE:=GPL-2.0 PKG_MAINTAINER:=Christian Schoenebeck @@ -29,7 +29,7 @@ define Package/$(PKG_NAME)/Default PKGARCH:=all endef -##### ********************************** +###### ************************************************************************* define Package/$(PKG_NAME) $(call Package/$(PKG_NAME)/Default) TITLE:=Dynamic DNS Client scripts (with IPv6 support) @@ -43,31 +43,47 @@ define Package/$(PKG_NAME)/config help A highly configurable set of scripts for doing dynamic dns updates. - IPv6 support - - force communication to IPv4 or IPv6 only - DNS server support - - using BIND host if installed + - Glue Record support (require BIND host or KNOT host) - DNS requests via TCP - Proxy server support - log file support - support to run once - . Version: $(PKG_VERSION)-$(PKG_RELEASE) Info : http://wiki.openwrt.org/doc/howto/ddns.client - . - $(PKG_MAINTAINER) endef -##### ********************************** +###### ************************************************************************* define Package/$(PKG_NAME)_cloudflare $(call Package/$(PKG_NAME)/Default) - TITLE:=DDNS extension for CloudFlare + TITLE:=CloudFlare.com API v1 (deprecated) DEPENDS:=$(PKG_NAME) endef define Package/$(PKG_NAME)_cloudflare/description - Dynamic DNS Client scripts extension for CloudFlare + Dynamic DNS Client scripts extension for CloudFlare.com API-v1 (deprecated) endef -##### ********************************** +###### ************************************************************************* +define Package/$(PKG_NAME)_cloudflare.com-v4 + $(call Package/$(PKG_NAME)/Default) + TITLE:=CloudFlare.com API v4 (require cURL) + DEPENDS:=$(PKG_NAME) +curl +endef +define Package/$(PKG_NAME)_cloudflare.com-v4/description + Dynamic DNS Client scripts extension for CloudFlare.com API-v4 (require/install cURL) +endef + +###### ************************************************************************* +define Package/$(PKG_NAME)_godaddy.com-v1 + $(call Package/$(PKG_NAME)/Default) + TITLE:=GoDaddy.com (require cURL) + DEPENDS:=$(PKG_NAME) +curl +endef +define Package/$(PKG_NAME)_godaddy.com-v1/description + Dynamic DNS Client scripts extension for GoDaddy.com (require/install cURL) +endef + +###### ************************************************************************* define Package/$(PKG_NAME)_no-ip_com $(call Package/$(PKG_NAME)/Default) TITLE:=DDNS extension for No-IP.com @@ -77,7 +93,7 @@ define Package/$(PKG_NAME)_no-ip_com/description Dynamic DNS Client scripts extension for No-IP.com endef -##### ********************************** +###### ************************************************************************* define Package/$(PKG_NAME)_nsupdate $(call Package/$(PKG_NAME)/Default) TITLE:=DDNS extension using Bind nsupdate @@ -88,129 +104,293 @@ define Package/$(PKG_NAME)_nsupdate/description endef define Package/$(PKG_NAME)_nsupdate/config help - The script directly updates a PowerDNS (or maybe bind server) via nsupdate - from bind-client package. It requires + The script directly updates a PowerDNS (or maybe bind server) via nsupdate + from bind-client package. It requires "option dns_server" to be set to the server to be used by nsupdate. - "option username" should be set to the key name and + "option username" should be set to the key name and "option password" to the base64 encoded shared secret. endef -##### ********************************** +###### ************************************************************************* define Build/Configure endef define Build/Compile $(CP) ./files $(PKG_BUILD_DIR) + # ensure that VERSION inside dynamic_dns_functions.sh reflect PKG_VERSION of Makefile + $(SED) '/^VERSION=*/s/.*/VERSION="$(PKG_VERSION)-$(PKG_RELEASE)"/' $(PKG_BUILD_DIR)/files/dynamic_dns_functions.sh + # remove comments, white spaces and empty lines for FILE in `find $(PKG_BUILD_DIR)/files -type f`; do \ - $(SED) 's/^\s*#/#/' \ - -e '/^#\s\|^#$$$$/d' \ - -e 's/\s#\s.*$$$$//' \ - -e 's/\s*$$$$//' \ - -e '/^\/\/\s/d' \ - -e '/^\s*$$$$/d' $$$$FILE; \ + $(SED) 's/^[[:space:]]*//' \ + -e '/^#[[:space:]]\|^#$$$$/d' \ + -e 's/[[:space:]]#[[:space:]].*$$$$//' \ + -e 's/[[:space:]]*$$$$//' \ + -e '/^\/\/[[:space:]]/d' \ + -e '/^[[:space:]]*$$$$/d' $$$$FILE; \ done - gzip -f9 $(PKG_BUILD_DIR)/files/tld_names.dat + # compress public_suffix_list.dat + gzip -f9 $(PKG_BUILD_DIR)/files/public_suffix_list.dat endef define Package/$(PKG_NAME)/conffiles /etc/config/ddns endef -##### ********************************** +###### ************************************************************************* +define Package/$(PKG_NAME)/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/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)/etc/hotplug.d/iface - $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.hotplug $(1)/etc/hotplug.d/iface/95-ddns - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.init $(1)/etc/init.d/ddns - $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns + $(INSTALL_DIR) $(1)/etc/hotplug.d/iface + $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.hotplug $(1)/etc/hotplug.d/iface/95-ddns + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.init $(1)/etc/init.d/ddns + $(INSTALL_DIR) $(1)/etc/config $(INSTALL_CONF) $(PKG_BUILD_DIR)/files/ddns.config $(1)/etc/config/ddns - $(INSTALL_DIR) $(1)/usr/lib/ddns - $(INSTALL_DATA) $(PKG_BUILD_DIR)/files/services* $(1)/usr/lib/ddns - $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/dynamic_*.sh $(1)/usr/lib/ddns + $(INSTALL_DIR) $(1)/etc/ddns + $(INSTALL_DATA) $(PKG_BUILD_DIR)/files/services* $(1)/etc/ddns + + $(INSTALL_DIR) $(1)/usr/lib/ddns + $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/dynamic_dns_*.sh $(1)/usr/lib/ddns endef define Package/$(PKG_NAME)/postinst #!/bin/sh - # if run within buildroot exit - [ -n "$${IPKG_INSTROOT}" ] && exit 0 - - # add new section "ddns" "global" if not exists - uci -q get ddns.global > /dev/null || uci -q set ddns.global='ddns' - uci -q get ddns.global.date_format > /dev/null || uci -q set ddns.global.date_format='%F %R' - uci -q get ddns.global.log_lines > /dev/null || uci -q set ddns.global.log_lines='250' - uci -q get ddns.global.allow_local_ip > /dev/null || uci -q set ddns.global.allow_local_ip='0' - uci -q commit ddns - - # clear LuCI indexcache - rm -f /tmp/luci-indexcache >/dev/null 2>&1 - - exit 0 + # if NOT run buildroot and PKG_UPGRADE then (re)start service if enabled + [ -z "$${IPKG_INSTROOT}" -a "$${PKG_UPGRADE}" = "1" ] && { + [ -x /etc/uci-defaults/ddns ] && \ + /etc/uci-defaults/ddns && \ + rm -f /etc/uci-defaults/ddns >/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/$(PKG_NAME)/prerm #!/bin/sh # if run within buildroot exit [ -n "$${IPKG_INSTROOT}" ] && exit 0 - # stop running scripts - /etc/init.d/ddns disable /etc/init.d/ddns stop - + /etc/init.d/ddns disable # clear LuCI indexcache rm -f /tmp/luci-indexcache >/dev/null 2>&1 - - exit 0 + exit 0 # suppress errors endef -##### ********************************** +###### ************************************************************************* +define Package/$(PKG_NAME)_cloudflare/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/$(PKG_NAME)_cloudflare/install - $(INSTALL_DIR) $(1)/usr/lib/ddns - $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_CloudFlare.sh $(1)/usr/lib/ddns - $(INSTALL_DATA) $(PKG_BUILD_DIR)/files/tld_names.dat.gz $(1)/usr/lib/ddns + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_cloudflare + $(INSTALL_DIR) $(1)/usr/share + $(INSTALL_DATA) $(PKG_BUILD_DIR)/files/public_suffix_list.dat.gz $(1)/usr/share + $(INSTALL_DIR) $(1)/usr/lib/ddns + $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_cloudflare_com_v1.sh $(1)/usr/lib/ddns endef define Package/$(PKG_NAME)_cloudflare/postinst #!/bin/sh - echo -e '"CloudFlare"\t"update_CloudFlare.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services - echo -e '"CloudFlare"\t"update_CloudFlare.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services_ipv6 + # remove old services file entries + /bin/sed -i '/cloudflare\.com-v1/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1 + /bin/sed -i '/cloudflare\.com-v1/d' $${IPKG_INSTROOT}/etc/ddns/services_ipv6 >/dev/null 2>&1 + # and create new + printf "%s\\t%s\\n" '"cloudflare.com-v1"' '"update_cloudflare_com_v1.sh"' >> $${IPKG_INSTROOT}/etc/ddns/services + printf "%s\\t%s\\n" '"cloudflare.com-v1"' '"update_cloudflare_com_v1.sh"' >> $${IPKG_INSTROOT}/etc/ddns/services_ipv6 + # on real system restart service if enabled + [ -z "$${IPKG_INSTROOT}" ] && { + [ -x /etc/uci-defaults/ddns_cloudflare ] && \ + /etc/uci-defaults/ddns_cloudflare && \ + rm -f /etc/uci-defaults/ddns_cloudflare >/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/$(PKG_NAME)_cloudflare/prerm #!/bin/sh - /bin/sed -i '/update_CloudFlare\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services - /bin/sed -i '/update_CloudFlare\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services_ipv6 + # 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 '/cloudflare\.com-v1/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1 + /bin/sed -i '/cloudflare\.com-v1/d' $${IPKG_INSTROOT}/etc/ddns/services_ipv6 >/dev/null 2>&1 + exit 0 # suppress errors +endef + +###### ************************************************************************* +define Package/$(PKG_NAME)_cloudflare.com-v4/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/$(PKG_NAME)_cloudflare.com-v4/install + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_cloudflare.com-v4 + $(INSTALL_DIR) $(1)/usr/lib/ddns + $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_cloudflare_com_v4.sh $(1)/usr/lib/ddns +endef +define Package/$(PKG_NAME)_cloudflare.com-v4/postinst + #!/bin/sh + # remove old services file entries + /bin/sed -i '/cloudflare\.com-v4/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1 + /bin/sed -i '/cloudflare\.com-v4/d' $${IPKG_INSTROOT}/etc/ddns/services_ipv6 >/dev/null 2>&1 + # and create new + printf "%s\\t%s\\n" '"cloudflare.com-v4"' '"update_cloudflare_com_v4.sh"' >> $${IPKG_INSTROOT}/etc/ddns/services + printf "%s\\t%s\\n" '"cloudflare.com-v4"' '"update_cloudflare_com_v4.sh"' >> $${IPKG_INSTROOT}/etc/ddns/services_ipv6 + # on real system restart service if enabled + [ -z "$${IPKG_INSTROOT}" ] && { + [ -x /etc/uci-defaults/ddns_cloudflare.com-v4 ] && \ + /etc/uci-defaults/ddns_cloudflare.com-v4 && \ + rm -f /etc/uci-defaults/ddns_cloudflare.com-v4 >/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/$(PKG_NAME)_cloudflare.com-v4/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 '/cloudflare\.com-v4/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1 + /bin/sed -i '/cloudflare\.com-v4/d' $${IPKG_INSTROOT}/etc/ddns/services_ipv6 >/dev/null 2>&1 + exit 0 # suppress errors +endef + +###### ************************************************************************* +define Package/$(PKG_NAME)_godaddy.com-v1/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/$(PKG_NAME)_godaddy.com-v1/install + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_godaddy.com-v1 + $(INSTALL_DIR) $(1)/usr/lib/ddns + $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_godaddy_com_v1.sh $(1)/usr/lib/ddns +endef +define Package/$(PKG_NAME)_godaddy.com-v1/postinst + #!/bin/sh + # remove old services file entries + /bin/sed -i '/godaddy\.com-v1/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1 + /bin/sed -i '/godaddy\.com-v1/d' $${IPKG_INSTROOT}/etc/ddns/services_ipv6 >/dev/null 2>&1 + # and create new + printf "%s\\t%s\\n" '"godaddy.com-v1"' '"update_godaddy_com_v1.sh"' >> $${IPKG_INSTROOT}/etc/ddns/services + printf "%s\\t%s\\n" '"godaddy.com-v1"' '"update_godaddy_com_v1.sh"' >> $${IPKG_INSTROOT}/etc/ddns/services_ipv6 + # on real system restart service if enabled + [ -z "$${IPKG_INSTROOT}" ] && { + [ -x /etc/uci-defaults/ddns_godaddy.com-v1 ] && \ + /etc/uci-defaults/ddns_godaddy.com-v1 && \ + rm -f /etc/uci-defaults/ddns_godaddy.com-v1 >/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/$(PKG_NAME)_godaddy.com-v1/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 '/godaddy\.com-v1/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1 + /bin/sed -i '/godaddy\.com-v1/d' $${IPKG_INSTROOT}/etc/ddns/services_ipv6 >/dev/null 2>&1 + exit 0 # suppress errors endef -##### ********************************** +###### ************************************************************************* +define Package/$(PKG_NAME)_no-ip_com/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/$(PKG_NAME)_no-ip_com/install + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_no-ip_com $(INSTALL_DIR) $(1)/usr/lib/ddns - $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_No-IP.com.sh $(1)/usr/lib/ddns + $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_no-ip_com.sh $(1)/usr/lib/ddns endef define Package/$(PKG_NAME)_no-ip_com/postinst #!/bin/sh - echo -e '"No-IP.com"\t"update_No-IP.com.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services - echo -e '"NoIP.com"\t"update_No-IP.com.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services + # remove old services file entries + /bin/sed -i '/no-ip\.com/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1 + # and create new + printf "%s\\t%s\\n" '"no-ip.com"' '"update_no-ip_com.sh"' >> $${IPKG_INSTROOT}/etc/ddns/services + # on real system restart service if enabled + [ -z "$${IPKG_INSTROOT}" ] && { + [ -x /etc/uci-defaults/ddns_no-ip_com ] && \ + /etc/uci-defaults/ddns_no-ip_com && \ + rm -f /etc/uci-defaults/ddns_no-ip_com >/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/$(PKG_NAME)_no-ip_com/prerm #!/bin/sh - /bin/sed -i '/update_No-IP\.com\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services + # 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 '/no-ip\.com/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1 + exit 0 # suppress errors endef -##### ********************************** +###### ************************************************************************* +define Package/$(PKG_NAME)_nsupdate/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/$(PKG_NAME)_nsupdate/install + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_nsupdate $(INSTALL_DIR) $(1)/usr/lib/ddns - $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_nsupdate.sh $(1)/usr/lib/ddns + $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_nsupdate.sh $(1)/usr/lib/ddns endef define Package/$(PKG_NAME)_nsupdate/postinst #!/bin/sh - echo -e '"Bind-nsupdate"\t"update_nsupdate.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services - echo -e '"Bind-nsupdate"\t"update_nsupdate.sh"' >> $${IPKG_INSTROOT}/usr/lib/ddns/services_ipv6 + # remove old services file entries + /bin/sed -i '/bind-nsupdate/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1 + /bin/sed -i '/bind-nsupdate/d' $${IPKG_INSTROOT}/etc/ddns/services_ipv6 >/dev/null 2>&1 + # and create new + printf "%s\\t%s\\n" '"bind-nsupdate"' '"update_nsupdate.sh"' >> $${IPKG_INSTROOT}/etc/ddns/services + printf "%s\\t%s\\n" '"bind-nsupdate"' '"update_nsupdate.sh"' >> $${IPKG_INSTROOT}/etc/ddns/services_ipv6 + # on real system restart service if enabled + [ -z "$${IPKG_INSTROOT}" ] && { + [ -x /etc/uci-defaults/ddns_nsupdate ] && \ + /etc/uci-defaults/ddns_nsupdate && \ + rm -f /etc/uci-defaults/ddns_nsupdate >/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/$(PKG_NAME)_nsupdate/prerm #!/bin/sh - /bin/sed -i '/update_nsupdate\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services - /bin/sed -i '/update_nsupdate\.sh/ d' $${IPKG_INSTROOT}/usr/lib/ddns/services_ipv6 + # 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 '/bind-nsupdate/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1 + /bin/sed -i '/bind-nsupdate/d' $${IPKG_INSTROOT}/etc/ddns/services_ipv6 >/dev/null 2>&1 + exit 0 # suppress errors endef -##### ********************************** +###### ************************************************************************* $(eval $(call BuildPackage,$(PKG_NAME))) $(eval $(call BuildPackage,$(PKG_NAME)_cloudflare)) +$(eval $(call BuildPackage,$(PKG_NAME)_cloudflare.com-v4)) +$(eval $(call BuildPackage,$(PKG_NAME)_godaddy.com-v1)) $(eval $(call BuildPackage,$(PKG_NAME)_no-ip_com)) $(eval $(call BuildPackage,$(PKG_NAME)_nsupdate)) diff --git a/net/ddns-scripts/files/ddns.config b/net/ddns-scripts/files/ddns.config index 5d69bb17cc..6d6b810921 100644 --- a/net/ddns-scripts/files/ddns.config +++ b/net/ddns-scripts/files/ddns.config @@ -1,17 +1,17 @@ # -# Please read ddns.sample -# or http://wiki.openwrt.org/doc/uci/ddns +# Please read http://wiki.openwrt.org/doc/uci/ddns # config ddns "global" - option date_format "%F %R" -# option run_dir "/var/run/ddns" -# option log_dir "/var/log/ddns" - option log_lines "250" - option allow_local_ip "0" + option ddns_dateformat "%F %R" +# option ddns_rundir "/var/run/ddns" +# option ddns_logdir "/var/log/ddns" + option ddns_loglines "250" + option upd_privateip "0" config service "myddns_ipv4" - option service_name "dyndns.com" + option service_name "dyndns.org" + option lookup_host "yourhost.example.com" option domain "yourhost.example.com" option username "your_username" option password "your_password" @@ -21,6 +21,7 @@ config service "myddns_ipv4" config service "myddns_ipv6" option update_url "http://[USERNAME]:[PASSWORD]@your.provider.net/nic/update?hostname=[DOMAIN]&myip=[IP]" + option lookup_host "yourhost.example.com" option domain "yourhost.example.com" option username "your_username" option password "your_password" diff --git a/net/ddns-scripts/files/ddns.defaults b/net/ddns-scripts/files/ddns.defaults new file mode 100755 index 0000000000..3908bb4b07 --- /dev/null +++ b/net/ddns-scripts/files/ddns.defaults @@ -0,0 +1,309 @@ +#!/bin/sh + +g_pslfile=/usr/share/public_suffix_list.dat.gz +[ -f "$g_pslfile" ] || g_pslfile="$(dirname $0)/public_suffix_list.dat.gz" + +g_pslerr=0 +g_cfgfile="ddns" + +# modify "cloudflare.com-v1" domain to new syntax +# returns "host[.subdom]@domain.TLD" of given FQDN ############################# +mod_cloudflare_v1_domain() { + # $1 entry to validate/split + [ -f "$g_pslfile" ] || return 1 + + [ $# -ne 1 -o -z "$1" ] && \ + { printf "%s\\n" "mod_cloudflare_v1_domain() - Invalid number of parameters" >&2; return 1; } + + local mcd_fqdn=$1 + local mcd_fsub="" + local mcd_fdom="" + local mcd_ctld="" + local mcd_ftld="" + + # check if already new syntax, "@" inside string + if [ $( printf "%s" "$mcd_fqdn" | grep -cF "@" 2>/dev/null ) -gt 0 ]; then + # already done + printf "%s" "$mcd_fqdn" + return 0 + fi + + # we need to do in one line because otherwise sh doesn't work correctly + # to lower | replace "." to " " | awk invert word order + set -- $(printf %s "$mcd_fqdn" | tr [A-Z] [a-z] | tr "." " " \ + | awk '{do printf "%s"(NF>1?OFS:ORS),$NF;while (--NF)}' ) + + while [ -n "${1:-}" ] ; do # as long we have parameters + if [ -z "$mcd_ctld" ]; then # first loop + mcd_ctld="$1" # CURRENT TLD to look at + shift + else + mcd_ctld="$1.$mcd_ctld" # Next TLD to look at + shift + fi + # check if TLD exact match in public_suffix_name.dat, save TLD + zcat $g_pslfile | grep -E "^$mcd_ctld$" >/dev/null 2>&1 && { + mcd_ftld="$mcd_ctld" # save found + mcd_fdom="${1:-}" # save domain next step might be invalid + continue + } + # check if match any "*" in public_suffix_name.dat, + zcat $g_pslfile | grep -E "^\*.$mcd_ctld$" >/dev/null 2>&1 && { + [ -z "${1:-}" ] && break # no more data break + # check if next level TLD match excludes "!" in tld_names.dat + if zcat $g_pslfile | grep -E "^!$1.$mcd_ctld$" >/dev/null 2>&1 ; then + mcd_ftld="$mcd_ctld" # Yes + else + mcd_ftld="$1.$mcd_ctld" + shift + fi + mcd_fdom="$1"; shift + } + [ -n "$mcd_ftld" ] && break # we have something valid, break + done + + # the leftover parameters are the HOST/SUBDOMAIN + while [ -n "${1:-}" ]; do + mcd_fsub="${1}${mcd_fsub:+.$mcd_fsub}" # remember we need to invert + shift # and insert dot if mcd_fsub not empty + done + + # now validate found data + [ -z "$mcd_ftld" ] && { printf "%s\\n" "mod_cloudflare_v1_domain() - no TLD not found in '$mcd_fqdn'" >&1; return 1; } + [ -z "$mcd_fdom" ] && { printf "%s\\n" "mod_cloudflare_v1_domain() - no registrable Domain not found in '$mcd_fqdn'" >&1; return 1; } + + # return data + printf "%s" "${mcd_fsub:+${mcd_fsub}@}${mcd_fdom}.${mcd_ftld}" + return 0 +} + +# modify timer settings from interval and unit to dhms format +timer2dhms() { +# $1 Number and +# $2 Unit of time interval + local t=0 + case $2 in + days) t=$(( $1 * 86400 ));; + hours) t=$(( $1 * 3600 ));; + minutes) t=$(( $1 * 60 ));; + *) t=$1;; + esac + + local d=$(( $t / 86400 )) + local h=$(( $t % 86400 / 3600 )) + local m=$(( $t % 3600 / 60 )) + local s=$(( $t % 60 )) + if [ $d -gt 0 ]; then printf "%dd %02dh %02dm %02ds" "$d" "$h" "$m" "$s" + elif [ $h -gt 0 ]; then printf "%dh %02dm %02ds" "$h" "$m" "$s" + elif [ $m -gt 0 ]; then printf "%dm %02ds" "$m" "$s" + else printf "%ds" "$s"; fi + + unset d h m s t + return 0 +} + +# using function to not confuse function calls with existing ones inside /lib/functions.sh +update_config() { + uc_uci="$(which uci) -q" # ignore errors + uc_cfg="" + uc_name="" + uc_var="" + uc_val="" + package() { return 0; } + config () { + uc_cfg="$1" + uc_name="$2" + + # Type = ddns Name = global + if [ "$uc_cfg" = "$g_cfgfile" -a "$uc_name" = "global" ]; then + option() { + uc_var="$1"; shift + uc_val="$*" + case "$uc_var" in + allow_local_ip) $uc_uci rename $g_cfgfile.$uc_name.$uc_var="upd_privateip";; + date_format) $uc_uci rename $g_cfgfile.$uc_name.$uc_var="ddns_dateformat";; + log_lines) $uc_uci rename $g_cfgfile.$uc_name.$uc_var="ddns_loglines";; + log_dir) $uc_uci rename $g_cfgfile.$uc_name.$uc_var="ddns_logdir";; + run_dir) $uc_uci rename $g_cfgfile.$uc_name.$uc_var="ddns_rundir";; + # leave all other options currently unchanged + *) ;; + esac + } + + # Type = service Name = ??? + elif [ "$uc_cfg" = "service" ]; then + option() { + uc_var="$1"; shift + uc_val="$*" + case "$uc_var" in + # fix some option service_name values + # and some settings for specific providers + service_name|upd_provider) + case "$uc_val" in + freedns\.afraid\.org|afraid\.org) + $uc_uci set $g_cfgfile.$uc_name.$uc_var="afraid.org-keyauth";; + Bind-nsupdate) + $uc_uci set $g_cfgfile.$uc_name.$uc_var="bind-nsupdate";; + CloudFlare|cloudflare\.com|cloudflare\.com-v1) + # verify if lookup_host is set + $uc_uci get $g_cfgfile.$uc_name.lookup_host >/dev/null 2>&1 || { + ucv_domain=$($uc_uci get $g_cfgfile.$uc_name.domain 2>/dev/null) + $uc_uci set $g_cfgfile.$uc_name.lookup_host="$ucv_domain" + } + if [ -f "$g_pslfile" ]; then + # change value of domain/upd_object to new syntax + # there is no sort order inside uci data so we need multiple checks + ucv_domain=$($uc_uci get $g_cfgfile.$uc_name.domain 2>/dev/null) + ucv_object=$($uc_uci get $g_cfgfile.$uc_name.upd_object 2>/dev/null) + # still old option domain + if [ -n "$ucv_domain" ]; then + ucv_new=$(mod_cloudflare_v1_domain "$ucv_domain") || g_pslerr=1 + # no error save data save data + [ $g_pslerr -eq 0 ] && \ + $uc_uci set $g_cfgfile.$uc_name.domain="$ucv_new" + fi + # already new option upd_object + if [ -n "$ucv_object" ]; then + ucv_new=$(mod_cloudflare_v1_domain "$ucv_object") || g_pslerr=1 + # no error save data save data + [ $g_pslerr -eq 0 ] && \ + $uc_uci set $g_cfgfile.$uc_name.upd_object="$ucv_new" + fi + fi + unset ucv_domain ucv_object ucv_new + # set new option value + $uc_uci set $g_cfgfile.$uc_name.$uc_var="cloudflare.com-v1" + ;; + dyndns\.org|dyndns\.com) + $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";; + domains\.google\.com) + $uc_uci set $g_cfgfile.$uc_name.$uc_var="google.com";; + loopia\.com) + $uc_uci set $g_cfgfile.$uc_name.$uc_var="loopia.se";; + NoIP\.com|No-IP\.com) + $uc_uci set $g_cfgfile.$uc_name.$uc_var="no-ip.com";; + spdns\.de) + $uc_uci set $g_cfgfile.$uc_name.$uc_var="spdyn.de";; + strato\.de) + $uc_uci set $g_cfgfile.$uc_name.$uc_var="strato.com";; + *) + # all others leave unchanged + ;; + esac + # rename option service_name to option upd_provider +# $uc_uci rename $g_cfgfile.$uc_name.$uc_var="upd_provider" + ;; + domain|upd_object) + # verify if lookup_host is set + $uc_uci get $g_cfgfile.$uc_name.lookup_host >/dev/null 2>&1 || \ + $uc_uci set $g_cfgfile.$uc_name.lookup_host="$uc_val" + if [ -f "$g_pslfile" ]; then + # if service_name/upd_provider cloudflare_v1 then change domain/upd_object to new syntax + # there is no sort order inside uci data so we need multiple checks + uco_provider=$($uc_uci get $g_cfgfile.$uc_name.upd_provider 2>/dev/null) || \ + uco_provider=$($uc_uci get $g_cfgfile.$uc_name.service_name 2>/dev/null) + if [ "$uco_provider" = "CloudFlare" \ + -o "$uco_provider" = "cloudflare.com" \ + -o "$uco_provider" = "cloudflare.com-v1" ]; then + ucv_new=$(mod_cloudflare_v1_domain "$uc_val") || g_pslerr=1 + # no error save data save data + [ $g_pslerr -eq 0 ] && \ + $uc_uci set $g_cfgfile.$uc_name.$uc_var="$ucv_new" + unset ucv_new + fi + unset uco_provider + fi + # rename option domain to option upd_object +# $uc_uci rename $g_cfgfile.$uc_name.$uc_var="upd_object" + ;; +# dns_server) +# # if bind-nsupdate takeover old "dns_server" value as new "upd_nsupd_server" value +# uco_provider=$($uc_uci get $g_cfgfile.$uc_name.upd_provider 2>/dev/null) || \ +# uco_provider=$($uc_uci get $g_cfgfile.$uc_name.service_name 2>/dev/null) +# [ "$uco_provider" = "Bind-nsupdate" -o \ +# "$uco_provider" = "bind-nsupdate" ] && \ +# $uc_uci set $g_cfgfile.$uc_name.upd_nsupd_server="$uc_val" +# # rename option dns_server to new option global_dnssvr +# $udc_uci rename $g_cfgfile.$uc_name.$uc_var="global_dnssvr" +# ;; +# bind_network) +# $udc_uci set $g_cfgfile.$uc_name.upd_url_bindnet="$uc_val" +# $udc_uci rename $g_cfgfile.$uc_name.$uc_var="lip_url_bindnet" +# ;; +# proxy) +# # proxy value must include protocoll +# $udc_uci set $g_cfgfile.$uc_name.$uc_var="http://$uc_val" +# $udc_uci rename $g_cfgfile.$uc_name.$uc_var="upd_url_proxy" +# ;; +# use_ipv6) +# $udc_uci set $g_cfgfile.$uc_name.$uc_var="$(( 4 + ( 2 * $uc_val ) ))" +# $udc_uci rename $g_cfgfile.$uc_name.$uc_var="upd_ipversion" +# TODO update_url) +# TODO update_script) + # other renames +# TODO lookup_host) -> rip_host +# enabled) $udc_uci rename $g_cfgfile.$uc_name.$uc_var="upd_enabled";; +# force_dnstcp) $udc_uci rename $g_cfgfile.$uc_name.$uc_var="rip_host_dnstcp";; +# is_glue) $udc_uci rename $g_cfgfile.$uc_name.$uc_var="rip_host_isglue";; +# ip_interface) $udc_uci rename $g_cfgfile.$uc_name.$uc_var="lip_iface";; +# ip_network) $udc_uci rename $g_cfgfile.$uc_name.$uc_var="lip_net";; +# use_https) $udc_uci rename $g_cfgfile.$uc_name.$uc_var="upd_url_secure";; +# cacert) $udc_uci rename $g_cfgfile.$uc_name.$uc_var="upd_url_cacert";; +# username) $udc_uci rename $g_cfgfile.$uc_name.$uc_var="upd_username";; +# password) $udc_uci rename $g_cfgfile.$uc_name.$uc_var="upd_password";; +# param_opt) $udc_uci rename $g_cfgfile.$uc_name.$uc_var="upd_paramopt";; +# param_enc) $udc_uci rename $g_cfgfile.$uc_name.$uc_var="upd_paramenc";; + + # leave all other options currently unchanged + *) ;; + esac + return 0 + } + return 0 + + # ignore unknown + else + return 0 + fi + } + + # read config file + uc_data=$($uc_uci -S -n export "$g_cfgfile") + uc_ret="$?" + # Error then create config file + [ $uc_ret -ne 0 ] && { + touch /etc/config/$uc_cfgfile + chmod 644 /etc/config/$uc_cfgfile + } + # No error and uc_data then execute (eval) + # this will call functions defined above + [ $uc_ret -eq 0 -a -n "$uc_data" ] && eval "$uc_data" + + # add config ddns "global" (ignore error if exists) + $uc_uci set ddns.global="$g_cfgfile" + + # write changes to config file + $uc_uci commit "$g_cfgfile" + + unset uc_uci uc_cfg uc_name uc_var uc_val uc_ret uc_data + return 0 +} + +# clear LuCI indexcache +rm -f /tmp/luci-indexcache >/dev/null 2>&1 + +# do config update +update_config + +#cleanup +[ $g_pslerr -ne 0 ] && { + unset g_pslfile g_pslerr g_cfgfile + return 1 +} + +[ -f "$g_pslfile" ] && rm -f "$g_pslfile" +unset g_pslfile g_pslerr g_cfgfile +return 0 + diff --git a/net/ddns-scripts/files/ddns.hotplug b/net/ddns-scripts/files/ddns.hotplug index dfb35f6d7a..9ef172deb6 100644 --- a/net/ddns-scripts/files/ddns.hotplug +++ b/net/ddns-scripts/files/ddns.hotplug @@ -1,14 +1,11 @@ #!/bin/sh # there are other ACTIONs like ifupdate we don't need -# so parse dynamic_dns_functions.sh only when needed case "$ACTION" in - ifup) - . /usr/lib/ddns/dynamic_dns_functions.sh - /etc/init.d/ddns enabled && start_daemon_for_all_ddns_sections "$INTERFACE" + ifup) # OpenWrt is giving a network not phys. Interface + /etc/init.d/ddns enabled && /usr/lib/ddns/dynamic_dns_updater.sh -n "$INTERFACE" -- start ;; ifdown) - . /usr/lib/ddns/dynamic_dns_functions.sh - stop_daemon_for_all_ddns_sections "$INTERFACE" + /usr/lib/ddns/dynamic_dns_updater.sh -n "$INTERFACE" -- stop ;; esac diff --git a/net/ddns-scripts/files/ddns.init b/net/ddns-scripts/files/ddns.init index 2cc9b90fa4..b2156a6a63 100644 --- a/net/ddns-scripts/files/ddns.init +++ b/net/ddns-scripts/files/ddns.init @@ -7,22 +7,21 @@ boot() { } reload() { - killall -1 dynamic_dns_updater.sh 2>/dev/null # send SIGHUP + /usr/lib/ddns/dynamic_dns_updater.sh -- reload return 0 } restart() { - stop + /usr/lib/ddns/dynamic_dns_updater.sh -- stop sleep 1 # give time to shutdown - start + /usr/lib/ddns/dynamic_dns_updater.sh -- start } start() { - . /usr/lib/ddns/dynamic_dns_functions.sh - start_daemon_for_all_ddns_sections + /usr/lib/ddns/dynamic_dns_updater.sh -- start } stop() { - killall dynamic_dns_updater.sh 2>/dev/null - return 0 # if killall fails, ignore + /usr/lib/ddns/dynamic_dns_updater.sh -- stop + return 0 } diff --git a/net/ddns-scripts/files/dynamic_dns_functions.sh b/net/ddns-scripts/files/dynamic_dns_functions.sh index cb0db9ac38..e3fd3b01af 100755 --- a/net/ddns-scripts/files/dynamic_dns_functions.sh +++ b/net/ddns-scripts/files/dynamic_dns_functions.sh @@ -1,20 +1,12 @@ #!/bin/sh # /usr/lib/ddns/dynamic_dns_functions.sh # -# Original written by Eric Paul Bishop, January 2008 #.Distributed under the terms of the GNU General Public License (GPL) version 2.0 +# Original written by Eric Paul Bishop, January 2008 # (Loosely) based on the script on the one posted by exobyte in the forums here: # http://forum.openwrt.org/viewtopic.php?id=14040 -# -# extended and partial rewritten in August 2014 by -#.Christian Schoenebeck -# to support: -# - IPv6 DDNS services -# - setting DNS Server to retrieve current IP including TCP transport -# - Proxy Server to send out updates or retrieving WEB based IP detection -# - force_interval=0 to run once (useful for cron jobs etc.) -# - the usage of BIND's host instead of BusyBox's nslookup if installed (DNS via TCP) -# - extended Verbose Mode and log file support for better error detection +# extended and partial rewritten +#.2014-2017 Christian Schoenebeck # # function timeout # copied from http://www.ict.griffith.edu.au/anthony/software/timeout.sh @@ -29,15 +21,17 @@ . /lib/functions/network.sh # GLOBAL VARIABLES # +VERSION="2.7.6" SECTION_ID="" # hold config's section name -VERBOSE_MODE=1 # default mode is log to console, but easily changed with parameter +VERBOSE=0 # default mode is log to console, but easily changed with parameter +MYPROG=$(basename $0) # my program call name LOGFILE="" # logfile - all files are set in dynamic_dns_updater.sh PIDFILE="" # pid file UPDFILE="" # store UPTIME of last update DATFILE="" # save stdout data of WGet and other external programs called ERRFILE="" # save stderr output of WGet and other external programs called -TLDFILE=/usr/lib/ddns/tld_names.dat.gz # TLD file used by split_FQDN +TLDFILE=/usr/share/public_suffix_list.dat.gz # TLD file used by split_FQDN CHECK_SECONDS=0 # calculated seconds out of given FORCE_SECONDS=0 # interval and unit @@ -53,44 +47,70 @@ LOCAL_IP="" # holds the local IP read from the box URL_USER="" # url encoded $username from config file URL_PASS="" # url encoded $password from config file +URL_PENC="" # url encoded $param_enc from config file + +UPD_ANSWER="" # Answer given by service on success ERR_LAST=0 # used to save $? return code of program and function calls ERR_UPDATE=0 # error counter on different local and registered ip PID_SLEEP=0 # ProcessID of current background "sleep" +# regular expression to detect IPv4 / IPv6 +# IPv4 0-9 1-3x "." 0-9 1-3x "." 0-9 1-3x "." 0-9 1-3x +IPV4_REGEX="[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" +# IPv6 ( ( 0-9a-f 1-4char ":") min 1x) ( ( 0-9a-f 1-4char )optional) ( (":" 0-9a-f 1-4char ) min 1x) +IPV6_REGEX="\(\([0-9A-Fa-f]\{1,4\}:\)\{1,\}\)\(\([0-9A-Fa-f]\{1,4\}\)\{0,1\}\)\(\(:[0-9A-Fa-f]\{1,4\}\)\{1,\}\)" + +# detect if called by ddns-lucihelper.sh script, disable retrys (empty variable == false) +LUCI_HELPER=$(printf %s "$MYPROG" | grep -i "luci") + +# Name Server Lookup Programs +BIND_HOST=$(which host) +KNOT_HOST=$(which khost) +DRILL=$(which drill) +HOSTIP=$(which hostip) +NSLOOKUP=$(which nslookup) +NSLOOKUP_MUSL=$($(which nslookup) localhost 2>&1 | grep -F "(null)") # not empty busybox compiled with musl + +# Transfer Programs +WGET=$(which wget) +WGET_SSL=$(which wget-ssl) + +CURL=$(which curl) +# CURL_SSL not empty then SSL support available +CURL_SSL=$($(which curl) -V 2>/dev/null | grep "Protocols:" | grep -F "https") +# CURL_PROXY not empty then Proxy support available +CURL_PROXY=$(find /lib /usr/lib -name libcurl.so* -exec grep -i "all_proxy" {} 2>/dev/null \;) + +UCLIENT_FETCH=$(which uclient-fetch) +# UCLIENT_FETCH_SSL not empty then SSL support available +UCLIENT_FETCH_SSL=$(find /lib /usr/lib -name libustream-ssl.so* 2>/dev/null) + +# Global configuration settings # allow NON-public IP's -ALLOW_LOCAL_IP=$(uci -q get ddns.global.allow_local_ip) || ALLOW_LOCAL_IP=0 +upd_privateip=$(uci -q get ddns.global.upd_privateip) || upd_privateip=0 # directory to store run information to. -RUNDIR=$(uci -q get ddns.global.run_dir) || RUNDIR="/var/run/ddns" -[ -d $RUNDIR ] || mkdir -p -m755 $RUNDIR +ddns_rundir=$(uci -q get ddns.global.ddns_rundir) || ddns_rundir="/var/run/ddns" +[ -d $ddns_rundir ] || mkdir -p -m755 $ddns_rundir # directory to store log files -LOGDIR=$(uci -q get ddns.global.log_dir) || LOGDIR="/var/log/ddns" -[ -d $LOGDIR ] || mkdir -p -m755 $LOGDIR +ddns_logdir=$(uci -q get ddns.global.ddns_logdir) || ddns_logdir="/var/log/ddns" +[ -d $ddns_logdir ] || mkdir -p -m755 $ddns_logdir # number of lines to before rotate logfile -LOGLINES=$(uci -q get ddns.global.log_lines) || LOGLINES=250 -LOGLINES=$((LOGLINES + 1)) # correct sed handling +ddns_loglines=$(uci -q get ddns.global.ddns_loglines) || ddns_loglines=250 +ddns_loglines=$((ddns_loglines + 1)) # correct sed handling # format to show date information in log and luci-app-ddns default ISO 8601 format -DATE_FORMAT=$(uci -q get ddns.global.date_format) || DATE_FORMAT="%F %R" -DATE_PROG="date +'$DATE_FORMAT'" - -# regular expression to detect IPv4 / IPv6 -# IPv4 0-9 1-3x "." 0-9 1-3x "." 0-9 1-3x "." 0-9 1-3x -IPV4_REGEX="[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" -# IPv6 ( ( 0-9a-f 1-4char ":") min 1x) ( ( 0-9a-f 1-4char )optional) ( (":" 0-9a-f 1-4char ) min 1x) -IPV6_REGEX="\(\([0-9A-Fa-f]\{1,4\}:\)\{1,\}\)\(\([0-9A-Fa-f]\{1,4\}\)\{0,1\}\)\(\(:[0-9A-Fa-f]\{1,4\}\)\{1,\}\)" - -# detect if called by dynamic_dns_lucihelper.sh script, disable retrys (empty variable == false) -[ "$(basename $0)" = "dynamic_dns_lucihelper.sh" ] && LUCI_HELPER="TRUE" || LUCI_HELPER="" +ddns_dateformat=$(uci -q get ddns.global.ddns_dateformat) || ddns_dateformat="%F %R" +DATE_PROG="date +'$ddns_dateformat'" # USE_CURL if GNU Wget and cURL installed normally Wget is used by do_transfer() # to change this use global option use_curl '1' USE_CURL=$(uci -q get ddns.global.use_curl) || USE_CURL=0 # read config -[ -x /usr/bin/curl ] || USE_CURL=0 # check for cURL +[ -n "$CURL" ] || USE_CURL=0 # check for cURL # loads all options for a given package and section # also, sets all_option_variables to a list of the variable names @@ -148,7 +168,7 @@ load_all_service_sections() { # starts updater script for all given sections or only for the one given # $1 = interface (Optional: when given only scripts are started # configured for that interface) -# used by /etc/hotplug.d/iface/25-ddns on IFUP +# used by /etc/hotplug.d/iface/95-ddns on IFUP # and by /etc/init.d/ddns start start_daemon_for_all_ddns_sections() { @@ -161,7 +181,11 @@ start_daemon_for_all_ddns_sections() for __SECTIONID in $__SECTIONS; do config_get __IFACE "$__SECTIONID" interface "wan" [ -z "$__EVENTIF" -o "$__IFACE" = "$__EVENTIF" ] || continue - /usr/lib/ddns/dynamic_dns_updater.sh $__SECTIONID 0 >/dev/null 2>&1 & + if [ $VERBOSE -eq 0 ]; then # start in background + /usr/lib/ddns/dynamic_dns_updater.sh -v 0 -S "$__SECTIONID" -- start & + else + /usr/lib/ddns/dynamic_dns_updater.sh -v "$VERBOSE" -S "$__SECTIONID" -- start + fi done } @@ -169,7 +193,7 @@ start_daemon_for_all_ddns_sections() # $1 = section stop_section_processes() { local __PID=0 - local __PIDFILE="$RUNDIR/$1.pid" + local __PIDFILE="$ddns_rundir/$1.pid" [ $# -ne 1 ] && write_log 12 "Error calling 'stop_section_processes()' - wrong number of parameters" [ -e "$__PIDFILE" ] && { @@ -181,7 +205,7 @@ stop_section_processes() { # stop updater script for all defines sections or only for one given # $1 = interface (optional) -# used by /etc/hotplug.d/iface/25-ddns on 'ifdown' +# used by /etc/hotplug.d/iface/95-ddns on 'ifdown' # and by /etc/init.d/ddns stop # needed because we also need to kill "sleep" child processes stop_daemon_for_all_ddns_sections() { @@ -234,14 +258,14 @@ write_log() { esac # verbose echo - [ $VERBOSE_MODE -gt 0 -o $__EXIT -gt 0 ] && echo -e "$__MSG" + [ $VERBOSE -gt 0 -o $__EXIT -gt 0 ] && echo -e "$__MSG" # write to logfile - if [ ${use_logfile:-1} -eq 1 -o $VERBOSE_MODE -gt 1 ]; then + if [ ${use_logfile:-1} -eq 1 -o $VERBOSE -gt 1 ]; then echo -e "$__MSG" >> $LOGFILE - # VERBOSE_MODE > 1 then NO loop so NO truncate log to $LOGLINES lines - [ $VERBOSE_MODE -gt 1 ] || sed -i -e :a -e '$q;N;'$LOGLINES',$D;ba' $LOGFILE + # VERBOSE > 1 then NO loop so NO truncate log to $ddns_loglines lines + [ $VERBOSE -gt 1 ] || sed -i -e :a -e '$q;N;'$ddns_loglines',$D;ba' $LOGFILE fi - [ $LUCI_HELPER ] && return # nothing else todo when running LuCI helper script + [ -n "$LUCI_HELPER" ] && return # nothing else todo when running LuCI helper script [ $__LEVEL -eq 7 ] && return # no syslog for debug messages __CMD=$(echo -e "$__CMD" | tr -d '\n' | tr '\t' ' ') # remove \n \t chars [ $__EXIT -eq 1 ] && { @@ -250,6 +274,7 @@ write_log() { } [ $use_syslog -eq 0 ] && return [ $((use_syslog + __LEVEL)) -le 7 ] && $__CMD + return } @@ -295,44 +320,42 @@ urlencode() { } # extract url or script for given DDNS Provider from -# file /usr/lib/ddns/services for IPv4 or from -# file /usr/lib/ddns/services_ipv6 for IPv6 +# file /etc/ddns/services for IPv4 or from +# file /etc/ddns/services_ipv6 for IPv6 # $1 Name of Variable to store url to # $2 Name of Variable to store script to +# $3 Name of Variable to store service answer to get_service_data() { - local __LINE __FILE __NAME __URL __SERVICES __DATA - local __SCRIPT="" - local __OLD_IFS=$IFS - local __NEWLINE_IFS=' -' # __NEWLINE_IFS - [ $# -ne 2 ] && write_log 12 "Error calling 'get_service_data()' - wrong number of parameters" - - __FILE="/usr/lib/ddns/services" # IPv4 - [ $use_ipv6 -ne 0 ] && __FILE="/usr/lib/ddns/services_ipv6" # IPv6 - - # remove any lines not containing data, and then make sure fields are enclosed in double quotes - __SERVICES=$(cat $__FILE | grep "^[\t ]*[^#]" | \ - awk ' gsub("\x27", "\"") { if ($1~/^[^\"]*$/) $1="\""$1"\"" }; { if ( $NF~/^[^\"]*$/) $NF="\""$NF"\"" }; { print $0 }') - - IFS=$__NEWLINE_IFS - for __LINE in $__SERVICES; do - # grep out proper parts of data and use echo to remove quotes - __NAME=$(echo $__LINE | grep -o "^[\t ]*\"[^\"]*\"" | xargs -r -n1 echo) - __DATA=$(echo $__LINE | grep -o "\"[^\"]*\"[\t ]*$" | xargs -r -n1 echo) - - if [ "$__NAME" = "$service_name" ]; then - break # found so leave for loop + [ $# -ne 3 ] && write_log 12 "Error calling 'get_service_data()' - wrong number of parameters" + + __FILE="/etc/ddns/services" # IPv4 + [ $use_ipv6 -ne 0 ] && __FILE="/etc/ddns/services_ipv6" # IPv6 + + # workaround with variables; pipe create subshell with no give back of variable content + mkfifo pipe_$$ + # only grep without # or whitespace at linestart | remove " +# grep -v -E "(^#|^[[:space:]]*$)" $__FILE | sed -e s/\"//g > pipe_$$ & + sed '/^#/d; /^[ \t]*$/d; s/\"//g' $__FILE > pipe_$$ & + + while read __SERVICE __DATA __ANSWER; do + if [ "$__SERVICE" = "$service_name" ]; then + # check if URL or SCRIPT is given + __URL=$(echo "$__DATA" | grep "^http") + [ -z "$__URL" ] && __SCRIPT="/usr/lib/ddns/$__DATA" + + eval "$1=\"$__URL\"" + eval "$2=\"$__SCRIPT\"" + eval "$3=\"$__ANSWER\"" + rm pipe_$$ + return 0 fi - done - IFS=$__OLD_IFS - - # check if URL or SCRIPT is given - __URL=$(echo "$__DATA" | grep "^http") - [ -z "$__URL" ] && __SCRIPT="/usr/lib/ddns/$__DATA" + done < pipe_$$ + rm pipe_$$ - eval "$1=\"$__URL\"" - eval "$2=\"$__SCRIPT\"" - return 0 + eval "$1=\"\"" # no service match clear variables + eval "$2=\"\"" + eval "$3=\"\"" + return 1 } # Calculate seconds from interval and unit @@ -451,6 +474,8 @@ timeout() { verify_host_port() { local __HOST=$1 local __PORT=$2 + local __NC=$(which nc) + local __NCEXT=$($(which nc) --help 2>&1 | grep "\-w" 2>/dev/null) # busybox nc compiled with extensions local __IP __IPV4 __IPV6 __RUNPROG __PROG __ERR # return codes # 1 system specific error @@ -465,12 +490,23 @@ verify_host_port() { __IPV6=$(echo $__HOST | grep -m 1 -o "$IPV6_REGEX") # if FQDN given get IP address [ -z "$__IPV4" -a -z "$__IPV6" ] && { - if [ -x /usr/bin/host ]; then # use BIND host if installed + if [ -n "$BIND_HOST" ]; then # use BIND host if installed __PROG="BIND host" - __RUNPROG="/usr/bin/host -t ANY $__HOST >$DATFILE 2>$ERRFILE" + __RUNPROG="$BIND_HOST $__HOST >$DATFILE 2>$ERRFILE" + elif [ -n "$KNOT_HOST" ]; then # use Knot host if installed + __PROG="Knot host" + __RUNPROG="$KNOT_HOST $__HOST >$DATFILE 2>$ERRFILE" + elif [ -n "$DRILL" ]; then # use drill if installed + __PROG="drill" + __RUNPROG="$DRILL -V0 $__HOST A >$DATFILE 2>$ERRFILE" # IPv4 + __RUNPROG="$__RUNPROG; $DRILL -V0 $__HOST AAAA >>$DATFILE 2>>$ERRFILE" # IPv6 + elif [ -n "$HOSTIP" ]; then # use hostip if installed + __PROG="hostip" + __RUNPROG="$HOSTIP $__HOST >$DATFILE 2>$ERRFILE" # IPv4 + __RUNPROG="$__RUNPROG; $HOSTIP -6 $__HOST >>$DATFILE 2>>$ERRFILE" # IPv6 else # use BusyBox nslookup __PROG="BusyBox nslookup" - __RUNPROG="/usr/bin/nslookup $__HOST >$DATFILE 2>$ERRFILE" + __RUNPROG="$NSLOOKUP $__HOST >$DATFILE 2>$ERRFILE" fi write_log 7 "#> $__RUNPROG" eval $__RUNPROG @@ -482,9 +518,15 @@ verify_host_port() { return 2 } # extract IP address - if [ -x /usr/bin/host ]; then # use BIND host if installed + if [ -n "$BIND_HOST" -o -n "$KNOT_HOST" ]; then # use BIND host or Knot host if installed __IPV4=$(cat $DATFILE | awk -F "address " '/has address/ {print $2; exit}' ) __IPV6=$(cat $DATFILE | awk -F "address " '/has IPv6/ {print $2; exit}' ) + elif [ -n "$DRILL" ]; then # use drill if installed + __IPV4=$(cat $DATFILE | awk '/^'"$lookup_host"'/ {print $5}' | grep -m 1 -o "$IPV4_REGEX") + __IPV6=$(cat $DATFILE | awk '/^'"$lookup_host"'/ {print $5}' | grep -m 1 -o "$IPV6_REGEX") + elif [ -n "$HOSTIP" ]; then # use hostip if installed + __IPV4=$(cat $DATFILE | grep -m 1 -o "$IPV4_REGEX") + __IPV6=$(cat $DATFILE | grep -m 1 -o "$IPV6_REGEX") else # use BusyBox nslookup __IPV4=$(cat $DATFILE | sed -ne "/^Name:/,\$ { s/^Address[0-9 ]\{0,\}: \($IPV4_REGEX\).*$/\\1/p }") __IPV6=$(cat $DATFILE | sed -ne "/^Name:/,\$ { s/^Address[0-9 ]\{0,\}: \($IPV6_REGEX\).*$/\\1/p }") @@ -497,17 +539,17 @@ verify_host_port() { [ $use_ipv6 -eq 0 -a -z "$__IPV4" ] && __ERR=4 [ $use_ipv6 -eq 1 -a -z "$__IPV6" ] && __ERR=6 [ $__ERR -gt 0 ] && { - [ $LUCI_HELPER ] && return 4 + [ -n "$LUCI_HELPER" ] && return 4 write_log 14 "Verify host Error '4' - Forced IP Version IPv$__ERR don't match" } fi # verify nc command # busybox nc compiled without -l option "NO OPT l!" -> critical error - /usr/bin/nc --help 2>&1 | grep -i "NO OPT l!" >/dev/null 2>&1 && \ + $__NC --help 2>&1 | grep -i "NO OPT l!" >/dev/null 2>&1 && \ write_log 12 "Busybox nc (netcat) compiled without '-l' option, error 'NO OPT l!'" # busybox nc compiled with extensions - /usr/bin/nc --help 2>&1 | grep "\-w" >/dev/null 2>&1 && __NCEXT="TRUE" + $__NC --help 2>&1 | grep "\-w" >/dev/null 2>&1 && __NCEXT="TRUE" # connectivity test # run busybox nc to HOST PORT @@ -518,7 +560,7 @@ verify_host_port() { [ $force_ipversion -ne 0 -a $use_ipv6 -ne 0 -o -z "$__IPV4" ] && __IP=$__IPV6 || __IP=$__IPV4 if [ -n "$__NCEXT" ]; then # BusyBox nc compiled with extensions (timeout support) - __RUNPROG="/usr/bin/nc -w 1 $__IP $__PORT $DATFILE 2>$ERRFILE" + __RUNPROG="$__NC -w 1 $__IP $__PORT $DATFILE 2>$ERRFILE" write_log 7 "#> $__RUNPROG" eval $__RUNPROG __ERR=$? @@ -527,7 +569,7 @@ verify_host_port() { write_log 7 "$(cat $ERRFILE)" return 3 else # nc compiled without extensions (no timeout support) - __RUNPROG="timeout 2 -- /usr/bin/nc $__IP $__PORT $DATFILE 2>$ERRFILE" + __RUNPROG="timeout 2 -- $__NC $__IP $__PORT $DATFILE 2>$ERRFILE" write_log 7 "#> $__RUNPROG" eval $__RUNPROG __ERR=$? @@ -550,10 +592,10 @@ verify_dns() { # DNS uses port 53 verify_host_port "$1" "53" __ERR=$? - if [ $LUCI_HELPER ]; then # no retry if called by LuCI helper script + if [ -n "$LUCI_HELPER" ]; then # no retry if called by LuCI helper script return $__ERR - elif [ $__ERR -ne 0 -a $VERBOSE_MODE -gt 1 ]; then # VERBOSE_MODE > 1 then NO retry - write_log 4 "Verify DNS server '$1' failed - Verbose Mode: $VERBOSE_MODE - NO retry on error" + elif [ $__ERR -ne 0 -a $VERBOSE -gt 1 ]; then # VERBOSE > 1 then NO retry + write_log 4 "Verify DNS server '$1' failed - Verbose Mode: $VERBOSE - NO retry on error" return $__ERR elif [ $__ERR -ne 0 ]; then __CNT=$(( $__CNT + 1 )) # increment error counter @@ -603,17 +645,17 @@ verify_proxy() { fi # No Port detected - EXITING [ -z "$__PORT" ] && { - [ $LUCI_HELPER ] && return 5 + [ -n "$LUCI_HELPER" ] && return 5 write_log 14 "Invalid Proxy server Error '5' - proxy port missing" } while [ $__ERR -gt 0 ]; do verify_host_port "$__HOST" "$__PORT" __ERR=$? - if [ $LUCI_HELPER ]; then # no retry if called by LuCI helper script + if [ -n "$LUCI_HELPER" ]; then # no retry if called by LuCI helper script return $__ERR - elif [ $__ERR -gt 0 -a $VERBOSE_MODE -gt 1 ]; then # VERBOSE_MODE > 1 then NO retry - write_log 4 "Verify Proxy server '$1' failed - Verbose Mode: $VERBOSE_MODE - NO retry on error" + elif [ $__ERR -gt 0 -a $VERBOSE -gt 1 ]; then # VERBOSE > 1 then NO retry + write_log 4 "Verify Proxy server '$1' failed - Verbose Mode: $VERBOSE - NO retry on error" return $__ERR elif [ $__ERR -gt 0 ]; then __CNT=$(( $__CNT + 1 )) # increment error counter @@ -641,9 +683,8 @@ do_transfer() { [ $# -ne 1 ] && write_log 12 "Error in 'do_transfer()' - wrong number of parameters" # lets prefer GNU Wget because it does all for us - IPv4/IPv6/HTTPS/PROXY/force IP version - grep -i "\+ssl" /usr/bin/wget >/dev/null 2>&1 # check for Wget with SSL support - if [ $? -eq 0 -a $USE_CURL -eq 0 ]; then # except global option use_curl is set to "1" - __PROG="/usr/bin/wget -nv -t 1 -O $DATFILE -o $ERRFILE" # non_verbose no_retry outfile errfile + if [ -n "$WGET_SSL" -a $USE_CURL -eq 0 ]; then # except global option use_curl is set to "1" + __PROG="$WGET_SSL -nv -t 1 -O $DATFILE -o $ERRFILE" # non_verbose no_retry outfile errfile # force network/ip to use for communication if [ -n "$bind_network" ]; then local __BINDIP @@ -666,7 +707,7 @@ do_transfer() { __PROG="$__PROG --ca-certificate=${cacert}" elif [ -d "$cacert" ]; then __PROG="$__PROG --ca-directory=${cacert}" - else # exit here because it makes no sense to start loop + elif [ -n "$cacert" ]; then # it's not a file and not a directory but given write_log 14 "No valid certificate(s) found at '$cacert' for HTTPS communication" fi fi @@ -677,9 +718,12 @@ do_transfer() { __PROG="GNU Wget" # reuse for error logging # 2nd choice is cURL IPv4/IPv6/HTTPS - # libcurl might be compiled without Proxy Support (default in trunk) - elif [ -x /usr/bin/curl ]; then - __PROG="/usr/bin/curl -RsS -o $DATFILE --stderr $ERRFILE" + # libcurl might be compiled without Proxy or HTTPS Support + elif [ -n "$CURL" ]; then + __PROG="$CURL -RsS -o $DATFILE --stderr $ERRFILE" + # check HTTPS support + [ -z "$CURL_SSL" -a $use_https -eq 1 ] && \ + write_log 13 "cURL: libcurl compiled without https support" # force network/interface-device to use for communication if [ -n "$bind_network" ]; then local __DEVICE @@ -700,7 +744,7 @@ do_transfer() { __PROG="$__PROG --cacert $cacert" elif [ -d "$cacert" ]; then __PROG="$__PROG --capath $cacert" - else # exit here because it makes no sense to start loop + elif [ -n "$cacert" ]; then # it's not a file and not a directory but given write_log 14 "No valid certificate(s) found at '$cacert' for HTTPS communication" fi fi @@ -708,19 +752,45 @@ do_transfer() { # or check if libcurl compiled with proxy support if [ -z "$proxy" ]; then __PROG="$__PROG --noproxy '*'" - else + elif [ -z "$CURL_PROXY" ]; then # if libcurl has no proxy support and proxy should be used then force ERROR - # libcurl currently no proxy support by default - grep -i "all_proxy" /usr/lib/libcurl.so* >/dev/null 2>&1 || \ - write_log 13 "cURL: libcurl compiled without Proxy support" + write_log 13 "cURL: libcurl compiled without Proxy support" fi __RUNPROG="$__PROG '$__URL'" # build final command __PROG="cURL" # reuse for error logging - # busybox Wget (did not support neither IPv6 nor HTTPS) - elif [ -x /usr/bin/wget ]; then - __PROG="/usr/bin/wget -q -O $DATFILE" + # uclient-fetch possibly with ssl support if /lib/libustream-ssl.so installed + elif [ -n "$UCLIENT_FETCH" ]; then + __PROG="$UCLIENT_FETCH -q -O $DATFILE" + # force network/ip not supported + [ -n "$__BINDIP" ] && \ + write_log 14 "uclient-fetch: FORCE binding to specific address not supported" + # force ip version to use + if [ $force_ipversion -eq 1 ]; then + [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -4" || __PROG="$__PROG -6" # force IPv4/IPv6 + fi + # https possibly not supported + [ $use_https -eq 1 -a -z "$UCLIENT_FETCH_SSL" ] && \ + write_log 14 "uclient-fetch: no HTTPS support! Additional install one of ustream-ssl packages" + # proxy support + [ -z "$proxy" ] && __PROG="$__PROG -Y off" || __PROG="$__PROG -Y on" + # https & certificates + if [ $use_https -eq 1 ]; then + if [ "$cacert" = "IGNORE" ]; then + __PROG="$__PROG --no-check-certificate" + elif [ -f "$cacert" ]; then + __PROG="$__PROG --ca-certificate=$cacert" + elif [ -n "$cacert" ]; then # it's not a file; nothing else supported + write_log 14 "No valid certificate file '$cacert' for HTTPS communication" + fi + fi + __RUNPROG="$__PROG '$__URL' 2>$ERRFILE" # build final command + __PROG="uclient-fetch" # reuse for error logging + + # Busybox Wget or any other wget in search $PATH (did not support neither IPv6 nor HTTPS) + elif [ -n "$WGET" ]; then + __PROG="$WGET -q -O $DATFILE" # force network/ip not supported [ -n "$__BINDIP" ] && \ write_log 14 "BusyBox Wget: FORCE binding to specific address not supported" @@ -737,7 +807,7 @@ do_transfer() { __PROG="Busybox Wget" # reuse for error logging else - write_log 13 "Neither 'Wget' nor 'cURL' installed or executable" + write_log 13 "Neither 'Wget' nor 'cURL' nor 'uclient-fetch' installed or executable" fi while : ; do @@ -745,14 +815,14 @@ do_transfer() { eval $__RUNPROG # DO transfer __ERR=$? # save error code [ $__ERR -eq 0 ] && return 0 # no error leave - [ $LUCI_HELPER ] && return 1 # no retry if called by LuCI helper script + [ -n "$LUCI_HELPER" ] && return 1 # no retry if called by LuCI helper script write_log 3 "$__PROG Error: '$__ERR'" write_log 7 "$(cat $ERRFILE)" # report error - [ $VERBOSE_MODE -gt 1 ] && { - # VERBOSE_MODE > 1 then NO retry - write_log 4 "Transfer failed - Verbose Mode: $VERBOSE_MODE - NO retry on error" + [ $VERBOSE -gt 1 ] && { + # VERBOSE > 1 then NO retry + write_log 4 "Transfer failed - Verbose Mode: $VERBOSE - NO retry on error" return 1 } @@ -777,14 +847,18 @@ send_update() { [ $# -ne 1 ] && write_log 12 "Error calling 'send_update()' - wrong number of parameters" - if [ $ALLOW_LOCAL_IP -eq 0 ]; then + if [ $upd_privateip -eq 0 ]; then # verify given IP / no private IPv4's / no IPv6 addr starting with fxxx of with ":" [ $use_ipv6 -eq 0 ] && __IP=$(echo $1 | grep -v -E "(^0|^10\.|^100\.6[4-9]\.|^100\.[7-9][0-9]\.|^100\.1[0-1][0-9]\.|^100\.12[0-7]\.|^127|^169\.254|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-1]\.|^192\.168)") [ $use_ipv6 -eq 1 ] && __IP=$(echo $1 | grep "^[0-9a-eA-E]") - [ -z "$__IP" ] && write_log 14 "Private or invalid or no IP '$1' given! Please check your configuration" else - __IP="$1" + __IP=$(echo $1 | grep -m 1 -o "$IPV4_REGEX") # valid IPv4 or + [ -z "$__IP" ] && __IP=$(echo $1 | grep -m 1 -o "$IPV6_REGEX") # IPv6 fi + [ -z "$__IP" ] && { + write_log 3 "No or private or invalid IP '$1' given! Please check your configuration" + return 127 + } if [ -n "$update_script" ]; then write_log 7 "parsing script '$update_script'" @@ -793,19 +867,19 @@ send_update() { local __URL __ERR # do replaces in URL - __URL=$(echo $update_url | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \ - -e "s#\[DOMAIN\]#$domain#g" -e "s#\[IP\]#$__IP#g") + __URL=$(echo $update_url | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \ + -e "s#\[PARAMENC\]#$URL_PENC#g" -e "s#\[PARAMOPT\]#$param_opt#g" \ + -e "s#\[DOMAIN\]#$domain#g" -e "s#\[IP\]#$__IP#g") [ $use_https -ne 0 ] && __URL=$(echo $__URL | sed -e 's#^http:#https:#') do_transfer "$__URL" || return 1 write_log 7 "DDNS Provider answered:\n$(cat $DATFILE)" - return 0 - # TODO analyze providers answer - # "good" or "nochg" = dyndns.com compatible API - # grep -i -E "good|nochg" $DATFILE >/dev/null 2>&1 - # return $? # "0" if found + [ -z "$UPD_ANSWER" ] && return 0 # not set then ignore + + grep -i -E "$UPD_ANSWER" $DATFILE >/dev/null 2>&1 + return $? # "0" if found fi } @@ -818,91 +892,123 @@ get_local_ip () { write_log 7 "Detect local IP on '$ip_source'" while : ; do - case $ip_source in - network) - # set correct program - [ $use_ipv6 -eq 0 ] && __RUNPROG="network_get_ipaddr" \ - || __RUNPROG="network_get_ipaddr6" - eval "$__RUNPROG __DATA $ip_network" || \ - write_log 13 "Can not detect local IP using $__RUNPROG '$ip_network' - Error: '$?'" - [ -n "$__DATA" ] && write_log 7 "Local IP '$__DATA' detected on network '$ip_network'" - ;; - interface) - write_log 7 "#> ifconfig $ip_interface >$DATFILE 2>$ERRFILE" - ifconfig $ip_interface >$DATFILE 2>$ERRFILE + if [ -n "$ip_network" ]; then + # set correct program + [ $use_ipv6 -eq 0 ] && __RUNPROG="network_get_ipaddr" \ + || __RUNPROG="network_get_ipaddr6" + eval "$__RUNPROG __DATA $ip_network" || \ + write_log 13 "Can not detect local IP using $__RUNPROG '$ip_network' - Error: '$?'" + [ -n "$__DATA" ] && write_log 7 "Local IP '$__DATA' detected on network '$ip_network'" + elif [ -n "$ip_interface" ]; then + local __DATA4=""; local __DATA6="" + if [ -n "$(which ip)" ]; then # ip program installed + write_log 7 "#> ip -o addr show dev $ip_interface scope global >$DATFILE 2>$ERRFILE" + ip -o addr show dev $ip_interface scope global >$DATFILE 2>$ERRFILE __ERR=$? if [ $__ERR -eq 0 ]; then - if [ $use_ipv6 -eq 0 ]; then - __DATA=$(awk ' - /inet addr:/ { # Filter IPv4 - # inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 - $1=""; # remove inet - $3=""; # remove Bcast: ... - $4=""; # remove Mask: ... - FS=":"; # separator ":" - $0=$0; # reread to activate separator - $1=""; # remove addr - FS=" "; # set back separator to default " " - $0=$0; # reread to activate separator (remove whitespaces) - print $1; # print IPv4 addr - }' $DATFILE - ) - else - __DATA=$(awk ' - /inet6/ && /: [0-9a-eA-E]/ && !/\/128/ { # Filter IPv6 exclude fxxx and /128 prefix - # inet6 addr: 2001:db8::xxxx:xxxx/32 Scope:Global - FS="/"; # separator "/" - $0=$0; # reread to activate separator - $2=""; # remove everything behind "/" - FS=" "; # set back separator to default " " - $0=$0; # reread to activate separator - print $3; # print IPv6 addr - }' $DATFILE - ) - fi - [ -n "$__DATA" ] && write_log 7 "Local IP '$__DATA' detected on interface '$ip_interface'" + # DATFILE (sample) + # 5: eth1: mtu 1500 qdisc fq_codel state UP qlen 1000\ link/ether 08:00:27:d0:10:32 brd ff:ff:ff:ff:ff:ff + # 5: eth1 inet 172.27.10.128/24 brd 172.27.10.255 scope global eth1\ valid_lft forever preferred_lft forever + # 5: eth1 inet 172.55.55.155/24 brd 172.27.10.255 scope global eth1\ valid_lft 12345sec preferred_lft 12345sec + # 5: eth1 inet6 2002:b0c7:f326::806b:c629:b8b9:433/128 scope global dynamic \ valid_lft 8026sec preferred_lft 8026sec + # 5: eth1 inet6 fd43:5368:6f6d:6500:806b:c629:b8b9:433/128 scope global dynamic \ valid_lft 8026sec preferred_lft 8026sec + # 5: eth1 inet6 fd43:5368:6f6d:6500:a00:27ff:fed0:1032/64 scope global dynamic \ valid_lft 14352sec preferred_lft 14352sec + # 5: eth1 inet6 2002:b0c7:f326::a00:27ff:fed0:1032/64 scope global dynamic \ valid_lft 14352sec preferred_lft 14352sec + + # remove remove remove replace remove remove + # BROADCAST inet6 fxxx sec forever=>-1 between / and pref.. linestart to inet + sed -i "/BROADCAST/d; /inet6 f/d; s/sec//g; s/forever/-1/g; s/\/.*preferred_lft//g; s/^.*$ip_interface *//g" $DATFILE + + local __TIME4=0; local __TIME6=0 + local __TYP __ADR __TIME + while read __TYP __ADR __TIME; do + __TIME=${__TIME:-0} # supress shell errors on last (empty) line of DATFILE + # IPversion no "-1" record stored - now "-1" record or new time > oldtime + [ "$__TYP" = "inet6" -a $__TIME6 -ge 0 -a \( $__TIME -lt 0 -o $__TIME -gt $__TIME6 \) ] && { + __DATA6="$__ADR" + __TIME6="$__TIME" + } + [ "$__TYP" = "inet" -a $__TIME4 -ge 0 -a \( $__TIME -lt 0 -o $__TIME -gt $__TIME4 \) ] && { + __DATA4="$__ADR" + __TIME4="$__TIME" + } + done < $DATFILE else - write_log 3 "ifconfig Error: '$__ERR'" + write_log 3 "ip Error: '$__ERR'" write_log 7 "$(cat $ERRFILE)" # report error fi - ;; - script) - write_log 7 "#> $ip_script >$DATFILE 2>$ERRFILE" - eval $ip_script >$DATFILE 2>$ERRFILE + else # use deprecated ifconfig + write_log 7 "#> ifconfig $ip_interface >$DATFILE 2>$ERRFILE" + ifconfig $ip_interface >$DATFILE 2>$ERRFILE __ERR=$? if [ $__ERR -eq 0 ]; then - __DATA=$(cat $DATFILE) - [ -n "$__DATA" ] && write_log 7 "Local IP '$__DATA' detected via script '$ip_script'" + __DATA4=$(awk ' + /inet addr:/ { # Filter IPv4 + # inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 + $1=""; # remove inet + $3=""; # remove Bcast: ... + $4=""; # remove Mask: ... + FS=":"; # separator ":" + $0=$0; # reread to activate separator + $1=""; # remove addr + FS=" "; # set back separator to default " " + $0=$0; # reread to activate separator (remove whitespaces) + print $1; # print IPv4 addr + }' $DATFILE + ) + __DATA6=$(awk ' + /inet6/ && /: [0-9a-eA-E]/ { # Filter IPv6 exclude fxxx + # inet6 addr: 2001:db8::xxxx:xxxx/32 Scope:Global + FS="/"; # separator "/" + $0=$0; # reread to activate separator + $2=""; # remove everything behind "/" + FS=" "; # set back separator to default " " + $0=$0; # reread to activate separator + print $3; # print IPv6 addr + }' $DATFILE + ) else - write_log 3 "$ip_script Error: '$__ERR'" + write_log 3 "ifconfig Error: '$__ERR'" write_log 7 "$(cat $ERRFILE)" # report error fi - ;; - web) - do_transfer "$ip_url" - # use correct regular expression - [ $use_ipv6 -eq 0 ] \ - && __DATA=$(grep -m 1 -o "$IPV4_REGEX" $DATFILE) \ - || __DATA=$(grep -m 1 -o "$IPV6_REGEX" $DATFILE) - [ -n "$__DATA" ] && write_log 7 "Local IP '$__DATA' detected on web at '$ip_url'" - ;; - *) - write_log 12 "Error in 'get_local_ip()' - unhandled ip_source '$ip_source'" - ;; - esac + fi + [ $use_ipv6 -eq 0 ] && __DATA="$__DATA4" || __DATA="$__DATA6" + [ -n "$__DATA" ] && write_log 7 "Local IP '$__DATA' detected on interface '$ip_interface'" + elif [ -n "$ip_script" ]; then + write_log 7 "#> $ip_script >$DATFILE 2>$ERRFILE" + eval $ip_script >$DATFILE 2>$ERRFILE + __ERR=$? + if [ $__ERR -eq 0 ]; then + __DATA=$(cat $DATFILE) + [ -n "$__DATA" ] && write_log 7 "Local IP '$__DATA' detected via script '$ip_script'" + else + write_log 3 "$ip_script Error: '$__ERR'" + write_log 7 "$(cat $ERRFILE)" # report error + fi + elif [ -n "$ip_url" ]; then + do_transfer "$ip_url" + # use correct regular expression + [ $use_ipv6 -eq 0 ] \ + && __DATA=$(grep -m 1 -o "$IPV4_REGEX" $DATFILE) \ + || __DATA=$(grep -m 1 -o "$IPV6_REGEX" $DATFILE) + [ -n "$__DATA" ] && write_log 7 "Local IP '$__DATA' detected on web at '$ip_url'" + else + write_log 12 "Error in 'get_local_ip()' - unhandled ip_source '$ip_source'" + fi # valid data found return here [ -n "$__DATA" ] && { eval "$1=\"$__DATA\"" return 0 } - [ $LUCI_HELPER ] && return 1 # no retry if called by LuCI helper script + [ -n "$LUCI_HELPER" ] && return 1 # no retry if called by LuCI helper script - write_log 7 "Data detected:\n$(cat $DATFILE)" + write_log 7 "Data detected:" + write_log 7 "$(cat $DATFILE)" - [ $VERBOSE_MODE -gt 1 ] && { - # VERBOSE_MODE > 1 then NO retry - write_log 4 "Get local IP via '$ip_source' failed - Verbose Mode: $VERBOSE_MODE - NO retry on error" + [ $VERBOSE -gt 1 ] && { + # VERBOSE > 1 then NO retry + write_log 4 "Get local IP via '$ip_source' failed - Verbose Mode: $VERBOSE - NO retry on error" return 1 } @@ -925,31 +1031,83 @@ get_registered_ip() { # $2 (optional) if set, do not retry on error local __CNT=0 # error counter local __ERR=255 - local __REGEX __PROG __RUNPROG __DATA + local __REGEX __PROG __RUNPROG __DATA __IP # return codes # 1 no IP detected [ $# -lt 1 -o $# -gt 2 ] && write_log 12 "Error calling 'get_registered_ip()' - wrong number of parameters" + [ $is_glue -eq 1 -a -z "$BIND_HOST" ] && write_log 14 "Lookup of glue records is only supported using BIND host" write_log 7 "Detect registered/public IP" # set correct regular expression [ $use_ipv6 -eq 0 ] && __REGEX="$IPV4_REGEX" || __REGEX="$IPV6_REGEX" - if [ -x /usr/bin/host ]; then - __PROG="/usr/bin/host" + if [ -n "$BIND_HOST" ]; then + __PROG="$BIND_HOST" [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -t A" || __PROG="$__PROG -t AAAA" if [ $force_ipversion -eq 1 ]; then # force IP version [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -4" || __PROG="$__PROG -6" fi [ $force_dnstcp -eq 1 ] && __PROG="$__PROG -T" # force TCP + [ $is_glue -eq 1 ] && __PROG="$__PROG -v" # use verbose output to get additional section - __RUNPROG="$__PROG $domain $dns_server >$DATFILE 2>$ERRFILE" + __RUNPROG="$__PROG $lookup_host $dns_server >$DATFILE 2>$ERRFILE" __PROG="BIND host" - elif [ -x /usr/bin/nslookup ]; then # last use BusyBox nslookup - [ $force_ipversion -ne 0 -o $force_dnstcp -ne 0 ] && \ - write_log 14 "Busybox nslookup - no support to 'force IP Version' or 'DNS over TCP'" + elif [ -n "$KNOT_HOST" ]; then + __PROG="$KNOT_HOST" + [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -t A" || __PROG="$__PROG -t AAAA" + if [ $force_ipversion -eq 1 ]; then # force IP version + [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -4" || __PROG="$__PROG -6" + fi + [ $force_dnstcp -eq 1 ] && __PROG="$__PROG -T" # force TCP + + __RUNPROG="$__PROG $lookup_host $dns_server >$DATFILE 2>$ERRFILE" + __PROG="Knot host" + elif [ -n "$DRILL" ]; then + __PROG="$DRILL -V0" # drill options name @server type + if [ $force_ipversion -eq 1 ]; then # force IP version + [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -4" || __PROG="$__PROG -6" + fi + [ $force_dnstcp -eq 1 ] && __PROG="$__PROG -t" || __PROG="$__PROG -u" # force TCP + __PROG="$__PROG $lookup_host" + [ -n "$dns_server" ] && __PROG="$__PROG @$dns_server" + [ $use_ipv6 -eq 0 ] && __PROG="$__PROG A" || __PROG="$__PROG AAAA" + + __RUNPROG="$__PROG >$DATFILE 2>$ERRFILE" + __PROG="drill" + elif [ -n "$HOSTIP" ]; then # hostip package installed + __PROG="$HOSTIP" + [ $force_dnstcp -ne 0 ] && \ + write_log 14 "hostip - no support for 'DNS over TCP'" + + # is IP given as dns_server ? + __IP=$(echo $dns_server | grep -m 1 -o "$IPV4_REGEX") + [ -z "$__IP" ] && __IP=$(echo $dns_server | grep -m 1 -o "$IPV6_REGEX") + + # we got NO ip for dns_server, so build command + [ -z "$__IP" -a -n "$dns_server" ] && { + __IP="\`$HOSTIP" + [ $use_ipv6 -eq 1 -a $force_ipversion -eq 1 ] && __IP="$__IP -6" + __IP="$__IP $dns_server | grep -m 1 -o" + [ $use_ipv6 -eq 1 -a $force_ipversion -eq 1 ] \ + && __IP="$__IP '$IPV6_REGEX'" \ + || __IP="$__IP '$IPV4_REGEX'" + __IP="$__IP \`" + } - __RUNPROG="/usr/bin/nslookup $domain $dns_server >$DATFILE 2>$ERRFILE" + [ $use_ipv6 -eq 1 ] && __PROG="$__PROG -6" + [ -n "$dns_server" ] && __PROG="$__PROG -r $__IP" + __RUNPROG="$__PROG $lookup_host >$DATFILE 2>$ERRFILE" + __PROG="hostip" + elif [ -n "$NSLOOKUP" ]; then # last use BusyBox nslookup + [ $force_dnstcp -ne 0 ] && \ + write_log 14 "Busybox nslookup - no support for 'DNS over TCP'" + [ -n "$NSLOOKUP_MUSL" -a -n "$dns_server" ] && \ + write_log 14 "Busybox compiled with musl - nslookup don't support the use of DNS Server" + [ $force_ipversion -ne 0 ] && \ + write_log 5 "Busybox nslookup - no support to 'force IP Version' (ignored)" + + __RUNPROG="$NSLOOKUP $lookup_host $dns_server >$DATFILE 2>$ERRFILE" __PROG="BusyBox nslookup" else # there must be an error write_log 12 "Error in 'get_registered_ip()' - no supported Name Server lookup software accessible" @@ -963,10 +1121,18 @@ get_registered_ip() { write_log 3 "$__PROG error: '$__ERR'" write_log 7 "$(cat $ERRFILE)" else - if [ "$__PROG" = "BIND host" ]; then - __DATA=$(cat $DATFILE | awk -F "address " '/has/ {print $2; exit}' ) - else - __DATA=$(cat $DATFILE | sed -ne "/^Name:/,\$ { s/^Address[0-9 ]\{0,\}: \($__REGEX\).*$/\\1/p }" ) + if [ -n "$BIND_HOST" -o -n "$KNOT_HOST" ]; then + if [ $is_glue -eq 1 ]; then + __DATA=$(cat $DATFILE | grep "^$lookup_host" | grep -om1 "$__REGEX" ) + else + __DATA=$(cat $DATFILE | awk -F "address " '/has/ {print $2; exit}' ) + fi + elif [ -n "$DRILL" ]; then + __DATA=$(cat $DATFILE | awk '/^'"$lookup_host"'/ {print $5; exit}' ) + elif [ -n "$HOSTIP" ]; then + __DATA=$(cat $DATFILE | grep -om1 "$__REGEX") + elif [ -n "$NSLOOKUP" ]; then + __DATA=$(cat $DATFILE | sed -e '1,/Name:/d' | grep -om1 "$__REGEX" ) fi [ -n "$__DATA" ] && { write_log 7 "Registered IP '$__DATA' detected" @@ -977,20 +1143,20 @@ get_registered_ip() { __ERR=127 fi - [ $LUCI_HELPER ] && return $__ERR # no retry if called by LuCI helper script + [ -n "$LUCI_HELPER" ] && return $__ERR # no retry if called by LuCI helper script [ -n "$2" ] && return $__ERR # $2 is given -> no retry - [ $VERBOSE_MODE -gt 1 ] && { - # VERBOSE_MODE > 1 then NO retry - write_log 4 "Get registered/public IP for '$domain' failed - Verbose Mode: $VERBOSE_MODE - NO retry on error" + [ $VERBOSE -gt 1 ] && { + # VERBOSE > 1 then NO retry + write_log 4 "Get registered/public IP for '$lookup_host' failed - Verbose Mode: $VERBOSE - NO retry on error" return $__ERR } __CNT=$(( $__CNT + 1 )) # increment error counter # if error count > retry_count leave here [ $retry_count -gt 0 -a $__CNT -gt $retry_count ] && \ - write_log 14 "Get registered/public IP for '$domain' failed after $retry_count retries" + write_log 14 "Get registered/public IP for '$lookup_host' failed after $retry_count retries" - write_log 4 "Get registered/public IP for '$domain' failed - retry $__CNT/$retry_count in $RETRY_SECONDS seconds" + write_log 4 "Get registered/public IP for '$lookup_host' failed - retry $__CNT/$retry_count in $RETRY_SECONDS seconds" sleep $RETRY_SECONDS & PID_SLEEP=$! wait $PID_SLEEP # enable trap-handler @@ -1026,7 +1192,7 @@ trap_handler() { fi ;; 1) write_log 6 "PID '$$' received 'SIGHUP' at $(eval $DATE_PROG)" # reload config via starting the script again - eval "/usr/lib/ddns/dynamic_dns_updater.sh $SECTION_ID $VERBOSE_MODE &" + /usr/lib/ddns/dynamic_dns_updater.sh -v "0" -S "$__SECTIONID" -- start || true exit 0 ;; # and leave this one 2) write_log 5 "PID '$$' terminated by 'SIGINT' at $(eval $DATE_PROG)\n";; 3) write_log 5 "PID '$$' terminated by 'SIGQUIT' at $(eval $DATE_PROG)\n";; @@ -1105,7 +1271,7 @@ split_FQDN() { # the leftover parameters are the HOST/SUBDOMAIN while [ -n "$1" ]; do - _HOST="$1 $HOST" # remember we need to invert + _HOST="$1 $_HOST" # remember we need to invert shift done _HOST=$(echo $_HOST | tr " " ".") # insert DOT @@ -1122,3 +1288,68 @@ split_FQDN() { eval "$4=''" # clear HOST/SUBDOMAIN return 1 } + +expand_ipv6() { + # Original written for bash by + #.Author: Florian Streibelt + # Date: 08.04.2012 + # License: Public Domain, but please be fair and + # attribute the original author(s) and provide + # a link to the original source for corrections: + #. https://github.com/mutax/IPv6-Address-checks + + # $1 IPv6 to expand + # $2 name of variable to store expanded IPv6 + [ $# -ne 2 ] && write_log 12 "Error calling 'expand_ipv6()' - wrong number of parameters" + + INPUT="$(echo "$1" | tr 'A-F' 'a-f')" + [ "$INPUT" = "::" ] && INPUT="::0" # special case :: + + O="" + + while [ "$O" != "$INPUT" ]; do + O="$INPUT" + + # fill all words with zeroes + INPUT=$( echo "$INPUT" | sed -e 's|:\([0-9a-f]\{3\}\):|:0\1:|g' \ + -e 's|:\([0-9a-f]\{3\}\)$|:0\1|g' \ + -e 's|^\([0-9a-f]\{3\}\):|0\1:|g' \ + -e 's|:\([0-9a-f]\{2\}\):|:00\1:|g' \ + -e 's|:\([0-9a-f]\{2\}\)$|:00\1|g' \ + -e 's|^\([0-9a-f]\{2\}\):|00\1:|g' \ + -e 's|:\([0-9a-f]\):|:000\1:|g' \ + -e 's|:\([0-9a-f]\)$|:000\1|g' \ + -e 's|^\([0-9a-f]\):|000\1:|g' ) + + done + + # now expand the :: + ZEROES="" + + echo "$INPUT" | grep -qs "::" + if [ "$?" -eq 0 ]; then + GRPS="$( echo "$INPUT" | sed 's|[0-9a-f]||g' | wc -m )" + GRPS=$(( GRPS-1 )) # remove carriage return + MISSING=$(( 8-GRPS )) + while [ $MISSING -gt 0 ]; do + ZEROES="$ZEROES:0000" + MISSING=$(( MISSING-1 )) + done + + # be careful where to place the : + INPUT=$( echo "$INPUT" | sed -e 's|\(.\)::\(.\)|\1'$ZEROES':\2|g' \ + -e 's|\(.\)::$|\1'$ZEROES':0000|g' \ + -e 's|^::\(.\)|'$ZEROES':0000:\1|g;s|^:||g' ) + fi + + # an expanded address has 39 chars + CR + if [ $(echo $INPUT | wc -m) != 40 ]; then + write_log 4 "Error in 'expand_ipv6()' - invalid IPv6 found: '$1' expanded: '$INPUT'" + eval "$2='invalid'" + return 1 + fi + + # echo the fully expanded version of the address + eval "$2=$INPUT" + return 0 +} diff --git a/net/ddns-scripts/files/dynamic_dns_lucihelper.sh b/net/ddns-scripts/files/dynamic_dns_lucihelper.sh index 0f8bb5aa85..4948e98150 100755 --- a/net/ddns-scripts/files/dynamic_dns_lucihelper.sh +++ b/net/ddns-scripts/files/dynamic_dns_lucihelper.sh @@ -1,77 +1,129 @@ #!/bin/sh -# /usr/lib/ddns/luci_dns_helper.sh +# /usr/lib/ddns/dynamic_dns_lucihelper.sh # #.Distributed under the terms of the GNU General Public License (GPL) version 2.0 -# -# Written in August 2014 by -#.Christian Schoenebeck +#.2014-2017 Christian Schoenebeck # This script is used by luci-app-ddns -# - getting registered IP -# - check if possible to get local IP -# - verifing given DNS- or Proxy-Server # # variables in small chars are read from /etc/config/ddns as parameter given here # variables in big chars are defined inside these scripts as gloval vars # variables in big chars beginning with "__" are local defined inside functions only # set -vx #script debugger -[ $# -lt 2 ] && exit 1 - . /usr/lib/ddns/dynamic_dns_functions.sh # global vars are also defined here -# preset some variables, wrong or not set in dynamic_dns_functions.sh +usage() { + cat << EOF + +Usage: + $MYPROG [options] -- command + +Commands: + get_local_ip using given INTERFACE or NETWORK or SCRIPT or URL + get_registered_ip for given FQDN + verify_dns given DNS-SERVER + verify_proxy given PROXY + start start given SECTION + reload force running ddns processes to reload changed configuration + restart restart all ddns processes + +Parameters: + -6 => use_ipv6=1 (default 0) + -d DNS-SERVER => dns_server=SERVER[:PORT] + -f => force_ipversion=1 (default 0) + -g => is_glue=1 (default 0) + -i INTERFACE => ip_interface=INTERFACE; ip_source="interface" + -l FQDN => lookup_host=FQDN + -n NETWORK => ip_network=NETWORK; ip_source="network" + -p PROXY => proxy=[USER:PASS@]PROXY:PORT + -s SCRIPT => ip_script=SCRIPT; ip_source="script" + -t => force_dnstcp=1 (default 0) + -u URL => ip_url=URL; ip_source="web" + -S SECTION SECTION to start + + -h => show this help and exit + -L => use_logfile=1 (default 0) + -v LEVEL => VERBOSE=LEVEL (default 0) + -V => show version and exit + +EOF +} + +usage_err() { + printf %s\\n "$MYPROG: $@" >&2 + usage >&2 + exit 255 +} + +# preset some variables, wrong or not set in ddns-functions.sh SECTION_ID="lucihelper" -LOGFILE="$LOGDIR/$SECTION_ID.log" -DATFILE="$RUNDIR/$SECTION_ID.$$.dat" # save stdout data of WGet and other extern programs called -ERRFILE="$RUNDIR/$SECTION_ID.$$.err" # save stderr output of WGet and other extern programs called -VERBOSE_MODE=0 # no console logging +LOGFILE="$ddns_logdir/$SECTION_ID.log" +DATFILE="$ddns_rundir/$SECTION_ID.$$.dat" # save stdout data of WGet and other extern programs called +ERRFILE="$ddns_rundir/$SECTION_ID.$$.err" # save stderr output of WGet and other extern programs called +DDNSPRG="/usr/lib/ddns/dynamic_dns_updater.sh" +VERBOSE=0 # no console logging # global variables normally set by reading DDNS UCI configuration use_syslog=0 # no syslog -use_logfile=0 # by default no logfile, can be changed here +use_logfile=0 # no logfile + +use_ipv6=0 # Use IPv6 - default IPv4 +force_ipversion=0 # Force IP Version - default 0 - No +force_dnstcp=0 # Force TCP on DNS - default 0 - No +is_glue=0 # Is glue record - default 0 - No +use_https=0 # not needed but must be set + +while getopts ":6d:fghi:l:n:p:s:S:tu:Lv:V" OPT; do + case "$OPT" in + 6) use_ipv6=1;; + d) dns_server="$OPTARG";; + f) force_ipversion=1;; + g) is_glue=1;; + i) ip_interface="$OPTARG"; ip_source="interface";; + l) lookup_host="$OPTARG";; + n) ip_network="$OPTARG"; ip_source="network";; + p) proxy="$OPTARG";; + s) ip_script="$OPTARG"; ip_source="script";; + t) force_dnstcp=1;; + u) ip_url="$OPTARG"; ip_source="web";; + h) usage; exit 255;; + L) use_logfile=1;; + v) VERBOSE=$OPTARG;; + S) SECTION=$OPTARG;; + V) printf %s\\n "ddns-scripts $VERSION"; exit 255;; + :) usage_err "option -$OPTARG missing argument";; + \?) usage_err "invalid option -$OPTARG";; + *) usage_err "unhandled option -$OPT $OPTARG";; + esac +done +shift $((OPTIND - 1 )) # OPTIND is 1 based + +[ $# -eq 0 ] && usage_err "missing command" __RET=0 case "$1" in get_registered_ip) - local IP - domain=$2 # Hostname/Domain - use_ipv6=${3:-"0"} # Use IPv6 - default IPv4 - force_ipversion=${4:-"0"} # Force IP Version - default 0 - No - force_dnstcp=${5:-"0"} # Force TCP on DNS - default 0 - No - dns_server=${6:-""} # DNS server - default No DNS + [ -z "$lookup_host" ] && usage_err "command 'get_registered_ip': 'lookup_host' not set" write_log 7 "-----> get_registered_ip IP" + IP="" get_registered_ip IP __RET=$? [ $__RET -ne 0 ] && IP="" - echo -n "$IP" # suppress LF + printf "%s" "$IP" ;; verify_dns) - # $2 : dns-server to verify # no need for force_dnstcp because - # verify with nc (netcat) uses tcp anyway - use_ipv6=${3:-"0"} # Use IPv6 - default IPv4 - force_ipversion=${4:-"0"} # Force IP Version - default 0 - No - write_log 7 "-----> verify_dns '$2'" - verify_dns "$2" + [ -z "$dns_server" ] && usage_err "command 'verify_dns': 'dns_server' not set" + write_log 7 "-----> verify_dns '$dns_server'" + verify_dns "$dns_server" __RET=$? ;; verify_proxy) - # $2 : proxy string to verify - use_ipv6=${3:-"0"} # Use IPv6 - default IPv4 - force_ipversion=${4:-"0"} # Force IP Version - default 0 - No - write_log 7 "-----> verify_proxy '$2'" - verify_proxy "$2" + [ -z "$proxy" ] && usage_err "command 'verify_proxy': 'proxy' not set" + write_log 7 "-----> verify_proxy '$proxy'" + verify_proxy "$proxy" __RET=$? ;; get_local_ip) - local IP - use_ipv6="$2" # Use IPv6 - ip_source="$3" # IP source - ip_network="$4" # set if source = "network" otherwise "-" - ip_url="$5" # set if source = "web" otherwise "-" - ip_interface="$6" # set if source = "interface" itherwiase "-" - ip_script="$7" # set if source = "script" otherwise "-" - proxy="$8" # proxy if set - force_ipversion="0" # not needed but must be set - use_https="0" # not needed but must be set + [ -z "$ip_source" ] && usage_err "command 'get_local_ip': 'ip_source' not set" [ -n "$proxy" -a "$ip_source" = "web" ] && { # proxy defined, used for ip_source=web export HTTP_PROXY="http://$proxy" @@ -80,17 +132,34 @@ case "$1" in export https_proxy="http://$proxy" } # don't need IP only the return code - [ "$ip_source" = "web" -o "$ip_source" = "script" ] && { + IP="" + if [ "$ip_source" = "web" -o "$ip_source" = "script" ]; then # we wait only 3 seconds for an # answer from "web" or "script" write_log 7 "-----> timeout 3 -- get_local_ip IP" timeout 3 -- get_local_ip IP - } || { + else write_log 7 "-----> get_local_ip IP" get_local_ip IP - } + fi __RET=$? ;; + start) + [ -z "$SECTION" ] && usage_err "command 'start': 'SECTION' not set" + if [ $VERBOSE -eq 0 ]; then # start in background + $DDNSPRG -v 0 -S $SECTION -- start & + else + $DDNSPRG -v $VERBOSE -S $SECTION -- start + fi + ;; + reload) + $DDNSPRG -- reload + ;; + restart) + $DDNSPRG -- stop + sleep 1 + $DDNSPRG -- start + ;; *) __RET=255 ;; @@ -99,4 +168,4 @@ esac # remove out and err file [ -f $DATFILE ] && rm -f $DATFILE [ -f $ERRFILE ] && rm -f $ERRFILE -return $__RET \ No newline at end of file +return $__RET diff --git a/net/ddns-scripts/files/dynamic_dns_updater.sh b/net/ddns-scripts/files/dynamic_dns_updater.sh old mode 100644 new mode 100755 index 95d2c94088..46e5842908 --- a/net/ddns-scripts/files/dynamic_dns_updater.sh +++ b/net/ddns-scripts/files/dynamic_dns_updater.sh @@ -1,57 +1,112 @@ #!/bin/sh # /usr/lib/ddns/dynamic_dns_updater.sh # -# Original written by Eric Paul Bishop, January 2008 #.Distributed under the terms of the GNU General Public License (GPL) version 2.0 +# Original written by Eric Paul Bishop, January 2008 # (Loosely) based on the script on the one posted by exobyte in the forums here: # http://forum.openwrt.org/viewtopic.php?id=14040 -# -# extended and partial rewritten in August 2014 by -#.Christian Schoenebeck -# to support: -# - IPv6 DDNS services -# - DNS Server to retrieve registered IP including TCP transport (Ticket 7820) -# - Proxy Server to send out updates -# - force_interval=0 to run once (Luci Ticket 538) -# - the usage of BIND's host command instead of BusyBox's nslookup if installed -# - extended Verbose Mode and log file support for better error detection -# - wait for interface to fully come up, before the first update is done +# extended and partial rewritten +#.2014-2017 Christian Schoenebeck # # variables in small chars are read from /etc/config/ddns # variables in big chars are defined inside these scripts as global vars # variables in big chars beginning with "__" are local defined inside functions only # set -vx #script debugger -[ $# -lt 1 -o -n "${2//[0-3]/}" -o ${#2} -gt 1 ] && { - echo -e "\n USAGE:" - echo -e " $0 [SECTION] [VERBOSE_MODE]\n" - echo " [SECTION] - service section as defined in /etc/config/ddns" - echo " [VERBOSE_MODE] - '0' NO output to console" - echo " '1' output to console" - echo " '2' output to console AND logfile" - echo " + run once WITHOUT retry on error" - echo " '3' output to console AND logfile" - echo " + run once WITHOUT retry on error" - echo -e " + NOT sending update to DDNS service\n" +. $(dirname $0)/dynamic_dns_functions.sh # global vars are also defined here + +usage() { + cat << EOF + +Usage: + $MYPROG [options] -- command + +Commands: +start Start SECTION or NETWORK or all +stop Stop NETWORK or all + +Parameters: + -n NETWORK Start/Stop sections in background monitoring NETWORK, force VERBOSE=0 + -S SECTION SECTION to start + use either -N NETWORK or -S SECTION + + -h show this help and exit + -V show version and exit + -v LEVEL VERBOSE=LEVEL (default 1) + '0' NO output to console + '1' output to console + '2' output to console AND logfile + + run once WITHOUT retry on error + '3' output to console AND logfile + + run once WITHOUT retry on error + + NOT sending update to DDNS service + +EOF +} + +usage_err() { + printf %s\\n "$MYPROG: $@" >&2 + usage >&2 exit 1 } -. /usr/lib/ddns/dynamic_dns_functions.sh # global vars are also defined here +while getopts ":hv:n:S:V" OPT; do + case "$OPT" in + h) usage; exit 0;; + v) VERBOSE=$OPTARG;; + n) NETWORK=$OPTARG;; + S) SECTION_ID=$OPTARG;; + V) printf %s\\n "ddns-scripts $VERSION"; exit 0;; + :) usage_err "option -$OPTARG missing argument";; + \?) usage_err "invalid option -$OPTARG";; + *) usage_err "unhandled option -$OPT $OPTARG";; + esac +done +shift $((OPTIND - 1 )) # OPTIND is 1 based + +[ -n "$NETWORK" -a -n "$SECTION_ID" ] && usage_err "use either option '-N' or '-S' not both" +[ $# -eq 0 ] && usage_err "missing command" +[ $# -gt 1 ] && usage_err "to much commands" -SECTION_ID="$1" -VERBOSE_MODE=${2:-1} # default mode is log to console +case "$1" in + start) + if [ -n "$NETWORK" ]; then + start_daemon_for_all_ddns_sections "$NETWORK" + exit 0 + fi + if [ -z "$SECTION_ID" ]; then + start_daemon_for_all_ddns_sections + exit 0 + fi + ;; + stop) + if [ -n "$INTERFACE" ]; then + stop_daemon_for_all_ddns_sections "$NETWORK" + exit 0 + else + stop_daemon_for_all_ddns_sections + exit 0 + fi + exit 1 + ;; + reload) + killall -1 dynamic_dns_updater.sh 2>/dev/null + exit $? + ;; + *) usage_err "unknown command - $1";; +esac # set file names -PIDFILE="$RUNDIR/$SECTION_ID.pid" # Process ID file -UPDFILE="$RUNDIR/$SECTION_ID.update" # last update successful send (system uptime) -DATFILE="$RUNDIR/$SECTION_ID.dat" # save stdout data of WGet and other extern programs called -ERRFILE="$RUNDIR/$SECTION_ID.err" # save stderr output of WGet and other extern programs called -LOGFILE="$LOGDIR/$SECTION_ID.log" # log file +PIDFILE="$ddns_rundir/$SECTION_ID.pid" # Process ID file +UPDFILE="$ddns_rundir/$SECTION_ID.update" # last update successful send (system uptime) +DATFILE="$ddns_rundir/$SECTION_ID.dat" # save stdout data of WGet and other extern programs called +ERRFILE="$ddns_rundir/$SECTION_ID.err" # save stderr output of WGet and other extern programs called +LOGFILE="$ddns_logdir/$SECTION_ID.log" # log file -# VERBOSE_MODE > 1 delete logfile if exist to create an empty one +# VERBOSE > 1 delete logfile if exist to create an empty one # only with this data of this run for easier diagnostic # new one created by write_log function -[ $VERBOSE_MODE -gt 1 -a -f $LOGFILE ] && rm -f $LOGFILE +[ $VERBOSE -gt 1 -a -f $LOGFILE ] && rm -f $LOGFILE # TRAP handler trap "trap_handler 0 \$?" 0 # handle script exit with exit status @@ -70,16 +125,19 @@ trap "trap_handler 15" 15 # SIGTERM Termination # # defined options (also used as variable): # -# enable self-explanatory +# enabled self-explanatory # interface network interface used by hotplug.d i.e. 'wan' or 'wan6' # # service_name Which DDNS service do you use or "custom" # update_url URL to use to update your "custom" DDNS service # update_script SCRIPT to use to update your "custom" DDNS service # -# domain Your DNS name / replace [DOMAIN] in update_url -# username Username of your DDNS service account / replace [USERNAME] in update_url -# password Password of your DDNS service account / replace [PASSWORD] in update_url +# lookup_host FQDN of ONE of your at DDNS service defined host / required to validate if IP update happen/necessary +# domain Nomally your DDNS hostname / replace [DOMAIN] in update_url +# username Username of your DDNS service account / urlenceded and replace [USERNAME] in update_url +# password Password of your DDNS service account / urlencoded and replace [PASSWORD] in update_url +# param_enc Optional parameter for (later) usage / urlencoded and replace [PARAMENC] in update_url +# param_opt Optional parameter for (later) usage / replace [PARAMOPT] in update_url # # use_https use HTTPS to update DDNS service # cacert file or directory where HTTPS can find certificates to verify server; 'IGNORE' ignore check of server certificate @@ -108,6 +166,7 @@ trap "trap_handler 15" 15 # SIGTERM Termination # force_dnstcp force communication with DNS server via TCP instead of default UDP # proxy using a proxy for communication !!! ALSO used to detect local IP via web => return proxy's IP !!! # use_logfile self-explanatory "/var/log/ddns/$SECTION_ID.log" +# is_glue the record that should be updated is a glue record # # some functionality needs # - GNU Wget or cURL installed for sending updates to DDNS service @@ -128,6 +187,7 @@ ERR_LAST=$? # save return code - equal 0 if SECTION_ID found [ -z "$force_ipversion" ] && force_ipversion=0 # default let system decide [ -z "$force_dnstcp" ] && force_dnstcp=0 # default UDP [ -z "$ip_source" ] && ip_source="network" +[ -z "$is_glue" ] && is_glue=0 # default the ddns record is not a glue record [ "$ip_source" = "network" -a -z "$ip_network" -a $use_ipv6 -eq 0 ] && ip_network="wan" # IPv4: default wan [ "$ip_source" = "network" -a -z "$ip_network" -a $use_ipv6 -eq 1 ] && ip_network="wan6" # IPv6: default wan6 [ "$ip_source" = "web" -a -z "$ip_url" -a $use_ipv6 -eq 0 ] && ip_url="http://checkip.dyndns.com" @@ -136,24 +196,26 @@ ERR_LAST=$? # save return code - equal 0 if SECTION_ID found # SECTION_ID does not exists [ $ERR_LAST -ne 0 ] && { - [ $VERBOSE_MODE -le 1 ] && VERBOSE_MODE=2 # force console out and logfile output - [ -f $LOGFILE ] && rm -f $LOGFILE # clear logfile before first entry + [ $VERBOSE -le 1 ] && VERBOSE=2 # force console out and logfile output + [ -f $LOGFILE ] && rm -f $LOGFILE # clear logfile before first entry write_log 7 "************ ************** ************** **************" write_log 5 "PID '$$' started at $(eval $DATE_PROG)" + write_log 7 "ddns version : $VERSION" write_log 7 "uci configuration:\n$(uci -q show ddns | grep '=service' | sort)" write_log 14 "Service section '$SECTION_ID' not defined" } write_log 7 "************ ************** ************** **************" write_log 5 "PID '$$' started at $(eval $DATE_PROG)" +write_log 7 "ddns version : $VERSION" write_log 7 "uci configuration:\n$(uci -q show ddns.$SECTION_ID | sort)" -write_log 7 "ddns version : $(opkg list-installed ddns-scripts | cut -d ' ' -f 3)" -case $VERBOSE_MODE in +# write_log 7 "ddns version : $(opkg list-installed ddns-scripts | cut -d ' ' -f 3)" +case $VERBOSE in 0) write_log 7 "verbose mode : 0 - run normal, NO console output";; 1) write_log 7 "verbose mode : 1 - run normal, console mode";; 2) write_log 7 "verbose mode : 2 - run once, NO retry on error";; 3) write_log 7 "verbose mode : 3 - run once, NO retry on error, NOT sending update";; - *) write_log 14 "error detecting VERBOSE_MODE '$VERBOSE_MODE'";; + *) write_log 14 "error detecting VERBOSE '$VERBOSE'";; esac # check enabled state otherwise we don't need to continue @@ -162,24 +224,41 @@ esac # determine what update url we're using if a service_name is supplied # otherwise update_url is set inside configuration (custom update url) # or update_script is set inside configuration (custom update script) -[ -n "$service_name" ] && get_service_data update_url update_script +[ -n "$service_name" ] && get_service_data update_url update_script UPD_ANSWER [ -z "$update_url" -a -z "$update_script" ] && write_log 14 "No update_url found/defined or no update_script found/defined!" [ -n "$update_script" -a ! -f "$update_script" ] && write_log 14 "Custom update_script not found!" -# without domain and possibly username and password we can do nothing for you -[ -z "$domain" ] && write_log 14 "Service section not configured correctly! Missing 'domain'" +# temporary needed to convert existing uci settings +[ -z "$lookup_host" ] && { + uci -q set ddns.$SECTION_ID.lookup_host="$domain" + uci -q commit ddns + lookup_host="$domain" +} +# later versions only check if configured correctly + +# without lookup host and possibly other required options we can do nothing for you +[ -z "$lookup_host" ] && write_log 14 "Service section not configured correctly! Missing 'lookup_host'" + [ -n "$update_url" ] && { # only check if update_url is given, update_scripts have to check themselves + [ -z "$domain" ] && $(echo "$update_url" | grep "\[DOMAIN\]" >/dev/null 2>&1) && \ + write_log 14 "Service section not configured correctly! Missing 'domain'" [ -z "$username" ] && $(echo "$update_url" | grep "\[USERNAME\]" >/dev/null 2>&1) && \ write_log 14 "Service section not configured correctly! Missing 'username'" [ -z "$password" ] && $(echo "$update_url" | grep "\[PASSWORD\]" >/dev/null 2>&1) && \ write_log 14 "Service section not configured correctly! Missing 'password'" + [ -z "$param_enc" ] && $(echo "$update_url" | grep "\[PARAMENC\]" >/dev/null 2>&1) && \ + write_log 14 "Service section not configured correctly! Missing 'param_enc'" + [ -z "$param_opt" ] && $(echo "$update_url" | grep "\[PARAMOPT\]" >/dev/null 2>&1) && \ + write_log 14 "Service section not configured correctly! Missing 'param_opt'" } # url encode username (might be email or something like this) # and password (might have special chars for security reason) +# and optional parameter "param_enc" [ -n "$username" ] && urlencode URL_USER "$username" [ -n "$password" ] && urlencode URL_PASS "$password" +[ -n "$param_enc" ] && urlencode URL_PENC "$param_enc" # verify ip_source 'script' if script is configured and executable if [ "$ip_source" = "script" ]; then @@ -220,8 +299,8 @@ get_uptime CURR_TIME if [ $LAST_TIME -eq 0 ]; then write_log 7 "last update: never" else - EPOCH_TIME=$(( $(date +%s) - CURR_TIME + LAST_TIME )) - EPOCH_TIME="date -d @$EPOCH_TIME +'$DATE_FORMAT'" + EPOCH_TIME=$(( $(date +%s) - $CURR_TIME + $LAST_TIME )) + EPOCH_TIME="date -d @$EPOCH_TIME +'$ddns_dateformat'" write_log 7 "last update: $(eval $EPOCH_TIME)" fi @@ -244,12 +323,15 @@ get_registered_ip REGISTERED_IP "NO_RETRY" ERR_LAST=$? # No error or No IP set otherwise retry [ $ERR_LAST -eq 0 -o $ERR_LAST -eq 127 ] || get_registered_ip REGISTERED_IP +# on IPv6 we use expanded version to be shure when comparing +[ $use_ipv6 -eq 1 ] && expand_ipv6 "$REGISTERED_IP" REGISTERED_IP # loop endlessly, checking ip every check_interval and forcing an updating once every force_interval write_log 6 "Starting main loop at $(eval $DATE_PROG)" while : ; do get_local_ip LOCAL_IP # read local IP + [ $use_ipv6 -eq 1 ] && expand_ipv6 "$LOCAL_IP" LOCAL_IP # on IPv6 we use expanded version # prepare update # never updated or forced immediate then NEXT_TIME = 0 @@ -261,8 +343,8 @@ while : ; do # send update when current time > next time or local ip different from registered ip if [ $CURR_TIME -ge $NEXT_TIME -o "$LOCAL_IP" != "$REGISTERED_IP" ]; then - if [ $VERBOSE_MODE -gt 2 ]; then - write_log 7 "Verbose Mode: $VERBOSE_MODE - NO UPDATE send" + if [ $VERBOSE -gt 2 ]; then + write_log 7 "Verbose Mode: $VERBOSE - NO UPDATE send" elif [ "$LOCAL_IP" != "$REGISTERED_IP" ]; then write_log 7 "Update needed - L: '$LOCAL_IP' <> R: '$REGISTERED_IP'" else @@ -270,8 +352,8 @@ while : ; do fi ERR_LAST=0 - [ $VERBOSE_MODE -lt 3 ] && { - # only send if VERBOSE_MODE < 3 + [ $VERBOSE -lt 3 ] && { + # only send if VERBOSE < 3 send_update "$LOCAL_IP" ERR_LAST=$? # save return value } @@ -288,27 +370,30 @@ while : ; do [ "$LOCAL_IP" != "$REGISTERED_IP" ] \ && write_log 6 "Update successful - IP '$LOCAL_IP' send" \ || write_log 6 "Forced update successful - IP: '$LOCAL_IP' send" + elif [ $ERR_LAST -eq 127 ]; then + write_log 3 "No update send to DDNS Provider" else - write_log 3 "Can not update IP at DDNS Provider" + write_log 3 "IP update not accepted by DDNS Provider" fi fi # now we wait for check interval before testing if update was recognized - # only sleep if VERBOSE_MODE <= 2 because otherwise nothing was send - [ $VERBOSE_MODE -le 2 ] && { + # only sleep if VERBOSE <= 2 because otherwise nothing was send + [ $VERBOSE -le 2 ] && { write_log 7 "Waiting $CHECK_SECONDS seconds (Check Interval)" sleep $CHECK_SECONDS & PID_SLEEP=$! wait $PID_SLEEP # enable trap-handler PID_SLEEP=0 - } || write_log 7 "Verbose Mode: $VERBOSE_MODE - NO Check Interval waiting" + } || write_log 7 "Verbose Mode: $VERBOSE - NO Check Interval waiting" REGISTERED_IP="" # clear variable get_registered_ip REGISTERED_IP # get registered/public IP + [ $use_ipv6 -eq 1 ] && expand_ipv6 "$REGISTERED_IP" REGISTERED_IP # on IPv6 we use expanded version # IP's are still different if [ "$LOCAL_IP" != "$REGISTERED_IP" ]; then - if [ $VERBOSE_MODE -le 1 ]; then # VERBOSE_MODE <=1 then retry + if [ $VERBOSE -le 1 ]; then # VERBOSE <=1 then retry ERR_UPDATE=$(( $ERR_UPDATE + 1 )) [ $retry_count -gt 0 -a $ERR_UPDATE -gt $retry_count ] && \ write_log 14 "Updating IP at DDNS provider failed after $retry_count retries" @@ -316,17 +401,17 @@ while : ; do continue # loop to beginning else write_log 4 "Updating IP at DDNS provider failed" - write_log 7 "Verbose Mode: $VERBOSE_MODE - NO retry"; exit 1 + write_log 7 "Verbose Mode: $VERBOSE - NO retry"; exit 1 fi else # we checked successful the last update ERR_UPDATE=0 # reset error counter fi - # force_update=0 or VERBOSE_MODE > 1 - leave here - [ $VERBOSE_MODE -gt 1 ] && write_log 7 "Verbose Mode: $VERBOSE_MODE - NO reloop" + # force_update=0 or VERBOSE > 1 - leave here + [ $VERBOSE -gt 1 ] && write_log 7 "Verbose Mode: $VERBOSE - NO reloop" [ $FORCE_SECONDS -eq 0 ] && write_log 6 "Configured to run once" - [ $VERBOSE_MODE -gt 1 -o $FORCE_SECONDS -eq 0 ] && exit 0 + [ $VERBOSE -gt 1 -o $FORCE_SECONDS -eq 0 ] && exit 0 write_log 6 "Rerun IP check at $(eval $DATE_PROG)" done diff --git a/net/ddns-scripts/files/tld_names.dat b/net/ddns-scripts/files/public_suffix_list.dat similarity index 76% rename from net/ddns-scripts/files/tld_names.dat rename to net/ddns-scripts/files/public_suffix_list.dat index 1d848b41b5..a2ccee3d0f 100644 --- a/net/ddns-scripts/files/tld_names.dat +++ b/net/ddns-scripts/files/public_suffix_list.dat @@ -1,10 +1,15 @@ // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +// Please pull this list from, and only from https://publicsuffix.org/list/public_suffix_list.dat, +// rather than any other VCS sites. Pulling from any other URL is not guaranteed to be supported. + +// Instructions on pulling and using this list can be found at https://publicsuffix.org/list/. // ===BEGIN ICANN DOMAINS=== -// ac : http://en.wikipedia.org/wiki/.ac +// ac : https://en.wikipedia.org/wiki/.ac ac com.ac edu.ac @@ -13,11 +18,11 @@ net.ac mil.ac org.ac -// ad : http://en.wikipedia.org/wiki/.ad +// ad : https://en.wikipedia.org/wiki/.ad ad nom.ad -// ae : http://en.wikipedia.org/wiki/.ae +// ae : https://en.wikipedia.org/wiki/.ae // see also: "Domain Name Eligibility Policy" at http://www.aeda.ae/eng/aepolicy.php ae co.ae @@ -28,7 +33,7 @@ ac.ae gov.ae mil.ae -// aero : see http://www.information.aero/index.php?id=66 +// aero : see https://www.information.aero/index.php?id=66 aero accident-investigation.aero accident-prevention.aero @@ -89,7 +94,6 @@ leasing.aero logistics.aero magazine.aero maintenance.aero -marketplace.aero media.aero microlight.aero modelling.aero @@ -112,7 +116,6 @@ show.aero skydiving.aero software.aero student.aero -taxi.aero trader.aero trading.aero trainer.aero @@ -152,17 +155,10 @@ mil.al net.al org.al -// am : http://en.wikipedia.org/wiki/.am +// am : https://en.wikipedia.org/wiki/.am am -// an : http://www.una.an/an_domreg/default.asp -an -com.an -net.an -org.an -edu.an - -// ao : http://en.wikipedia.org/wiki/.ao +// ao : https://en.wikipedia.org/wiki/.ao // http://www.dns.ao/REGISTR.DOC ao ed.ao @@ -172,7 +168,7 @@ co.ao pb.ao it.ao -// aq : http://en.wikipedia.org/wiki/.aq +// aq : https://en.wikipedia.org/wiki/.aq aq // ar : https://nic.ar/normativa-vigente.xhtml @@ -187,7 +183,7 @@ net.ar org.ar tur.ar -// arpa : http://en.wikipedia.org/wiki/.arpa +// arpa : https://en.wikipedia.org/wiki/.arpa // Confirmed by registry 2008-06-18 arpa e164.arpa @@ -197,14 +193,14 @@ iris.arpa uri.arpa urn.arpa -// as : http://en.wikipedia.org/wiki/.as +// as : https://en.wikipedia.org/wiki/.as as gov.as -// asia : http://en.wikipedia.org/wiki/.asia +// asia : https://en.wikipedia.org/wiki/.asia asia -// at : http://en.wikipedia.org/wiki/.at +// at : https://en.wikipedia.org/wiki/.at // Confirmed by registry 2008-06-17 at ac.at @@ -212,7 +208,7 @@ co.at gv.at or.at -// au : http://en.wikipedia.org/wiki/.au +// au : https://en.wikipedia.org/wiki/.au // http://www.auda.org.au/ au // 2LDs @@ -245,23 +241,23 @@ sa.edu.au tas.edu.au vic.edu.au wa.edu.au -// act.gov.au Bug 984824 - Removed at request of Greg Tankard -// nsw.gov.au Bug 547985 - Removed at request of -// nt.gov.au Bug 940478 - Removed at request of Greg Connors +// act.gov.au Bug 984824 - Removed at request of Greg Tankard +// nsw.gov.au Bug 547985 - Removed at request of +// nt.gov.au Bug 940478 - Removed at request of Greg Connors qld.gov.au sa.gov.au tas.gov.au vic.gov.au wa.gov.au -// aw : http://en.wikipedia.org/wiki/.aw +// aw : https://en.wikipedia.org/wiki/.aw aw com.aw -// ax : http://en.wikipedia.org/wiki/.ax +// ax : https://en.wikipedia.org/wiki/.ax ax -// az : http://en.wikipedia.org/wiki/.az +// az : https://en.wikipedia.org/wiki/.az az com.az net.az @@ -276,20 +272,16 @@ name.az pro.az biz.az -// ba : http://en.wikipedia.org/wiki/.ba +// ba : http://nic.ba/users_data/files/pravilnik_o_registraciji.pdf ba -org.ba -net.ba +com.ba edu.ba gov.ba mil.ba -unsa.ba -unbi.ba -co.ba -com.ba -rs.ba +net.ba +org.ba -// bb : http://en.wikipedia.org/wiki/.bb +// bb : https://en.wikipedia.org/wiki/.bb bb biz.bb co.bb @@ -302,19 +294,19 @@ org.bb store.bb tv.bb -// bd : http://en.wikipedia.org/wiki/.bd +// bd : https://en.wikipedia.org/wiki/.bd *.bd -// be : http://en.wikipedia.org/wiki/.be +// be : https://en.wikipedia.org/wiki/.be // Confirmed by registry 2008-06-08 be ac.be -// bf : http://en.wikipedia.org/wiki/.bf +// bf : https://en.wikipedia.org/wiki/.bf bf gov.bf -// bg : http://en.wikipedia.org/wiki/.bg +// bg : https://en.wikipedia.org/wiki/.bg // https://www.register.bg/user/static/rules/en/index.html bg a.bg @@ -354,7 +346,7 @@ z.bg 8.bg 9.bg -// bh : http://en.wikipedia.org/wiki/.bh +// bh : https://en.wikipedia.org/wiki/.bh bh com.bh edu.bh @@ -362,7 +354,7 @@ net.bh org.bh gov.bh -// bi : http://en.wikipedia.org/wiki/.bi +// bi : https://en.wikipedia.org/wiki/.bi // http://whois.nic.bi/ bi co.bi @@ -371,10 +363,10 @@ edu.bi or.bi org.bi -// biz : http://en.wikipedia.org/wiki/.biz +// biz : https://en.wikipedia.org/wiki/.biz biz -// bj : http://en.wikipedia.org/wiki/.bj +// bj : https://en.wikipedia.org/wiki/.bj bj asso.bj barreau.bj @@ -388,7 +380,7 @@ gov.bm net.bm org.bm -// bn : http://en.wikipedia.org/wiki/.bn +// bn : https://en.wikipedia.org/wiki/.bn *.bn // bo : http://www.nic.bo/ @@ -404,7 +396,7 @@ mil.bo tv.bo // br : http://registro.br/dominio/categoria.html -// Submitted by registry 2014-08-11 +// Submitted by registry br adm.br adv.br @@ -485,7 +477,7 @@ org.bs edu.bs gov.bs -// bt : http://en.wikipedia.org/wiki/.bt +// bt : https://en.wikipedia.org/wiki/.bt bt com.bt edu.bt @@ -494,17 +486,17 @@ net.bt org.bt // bv : No registrations at this time. -// Submitted by registry 2006-06-16 +// Submitted by registry bv -// bw : http://en.wikipedia.org/wiki/.bw +// bw : https://en.wikipedia.org/wiki/.bw // http://www.gobin.info/domainname/bw.doc // list of other 2nd level tlds ? bw co.bw org.bw -// by : http://en.wikipedia.org/wiki/.by +// by : https://en.wikipedia.org/wiki/.by // http://tld.by/rules_2006_en.html // list of other 2nd level tlds ? by @@ -518,7 +510,7 @@ com.by // http://hoster.by/ of.by -// bz : http://en.wikipedia.org/wiki/.bz +// bz : https://en.wikipedia.org/wiki/.bz // http://www.belizenic.bz/ bz com.bz @@ -527,7 +519,7 @@ org.bz edu.bz gov.bz -// ca : http://en.wikipedia.org/wiki/.ca +// ca : https://en.wikipedia.org/wiki/.ca ca // ca geographical names ab.ca @@ -544,31 +536,31 @@ pe.ca qc.ca sk.ca yk.ca -// gc.ca: http://en.wikipedia.org/wiki/.gc.ca +// gc.ca: https://en.wikipedia.org/wiki/.gc.ca // see also: http://registry.gc.ca/en/SubdomainFAQ gc.ca -// cat : http://en.wikipedia.org/wiki/.cat +// cat : https://en.wikipedia.org/wiki/.cat cat -// cc : http://en.wikipedia.org/wiki/.cc +// cc : https://en.wikipedia.org/wiki/.cc cc -// cd : http://en.wikipedia.org/wiki/.cd +// cd : https://en.wikipedia.org/wiki/.cd // see also: https://www.nic.cd/domain/insertDomain_2.jsp?act=1 cd gov.cd -// cf : http://en.wikipedia.org/wiki/.cf +// cf : https://en.wikipedia.org/wiki/.cf cf -// cg : http://en.wikipedia.org/wiki/.cg +// cg : https://en.wikipedia.org/wiki/.cg cg -// ch : http://en.wikipedia.org/wiki/.ch +// ch : https://en.wikipedia.org/wiki/.ch ch -// ci : http://en.wikipedia.org/wiki/.ci +// ci : https://en.wikipedia.org/wiki/.ci // http://www.nic.ci/index.php?page=charte ci org.ci @@ -581,33 +573,33 @@ ac.ci net.ci go.ci asso.ci -aéroport.ci xn--aroport-bya.ci +aéroport.ci int.ci presse.ci md.ci gouv.ci -// ck : http://en.wikipedia.org/wiki/.ck +// ck : https://en.wikipedia.org/wiki/.ck *.ck !www.ck -// cl : http://en.wikipedia.org/wiki/.cl +// cl : https://en.wikipedia.org/wiki/.cl cl gov.cl gob.cl co.cl mil.cl -// cm : http://en.wikipedia.org/wiki/.cm plus bug 981927 +// cm : https://en.wikipedia.org/wiki/.cm plus bug 981927 cm co.cm com.cm gov.cm net.cm -// cn : http://en.wikipedia.org/wiki/.cn -// Submitted by registry 2008-06-11 +// cn : https://en.wikipedia.org/wiki/.cn +// Submitted by registry cn ac.cn com.cn @@ -616,12 +608,12 @@ gov.cn net.cn org.cn mil.cn -公司.cn xn--55qx5d.cn -网络.cn +公司.cn xn--io0a7i.cn -網絡.cn +网络.cn xn--od0alg.cn +網絡.cn // cn geographic names ah.cn bj.cn @@ -658,8 +650,8 @@ hk.cn mo.cn tw.cn -// co : http://en.wikipedia.org/wiki/.co -// Submitted by registry 2008-06-11 +// co : https://en.wikipedia.org/wiki/.co +// Submitted by registry co arts.co com.co @@ -675,10 +667,10 @@ org.co rec.co web.co -// com : http://en.wikipedia.org/wiki/.com +// com : https://en.wikipedia.org/wiki/.com com -// coop : http://en.wikipedia.org/wiki/.coop +// coop : https://en.wikipedia.org/wiki/.coop coop // cr : http://www.nic.cr/niccr_publico/showRegistroDominiosScreen.do @@ -691,7 +683,7 @@ go.cr or.cr sa.cr -// cu : http://en.wikipedia.org/wiki/.cu +// cu : https://en.wikipedia.org/wiki/.cu cu com.cu edu.cu @@ -700,7 +692,7 @@ net.cu gov.cu inf.cu -// cv : http://en.wikipedia.org/wiki/.cv +// cv : https://en.wikipedia.org/wiki/.cv cv // cw : http://www.una.cw/cw_registry/ @@ -711,30 +703,44 @@ edu.cw net.cw org.cw -// cx : http://en.wikipedia.org/wiki/.cx +// cx : https://en.wikipedia.org/wiki/.cx // list of other 2nd level tlds ? cx gov.cx -// cy : http://en.wikipedia.org/wiki/.cy -*.cy - -// cz : http://en.wikipedia.org/wiki/.cz +// cy : http://www.nic.cy/ +// Submitted by registry Panayiotou Fotia +cy +ac.cy +biz.cy +com.cy +ekloges.cy +gov.cy +ltd.cy +name.cy +net.cy +org.cy +parliament.cy +press.cy +pro.cy +tm.cy + +// cz : https://en.wikipedia.org/wiki/.cz cz -// de : http://en.wikipedia.org/wiki/.de +// de : https://en.wikipedia.org/wiki/.de // Confirmed by registry (with technical // reservations) 2008-07-01 de -// dj : http://en.wikipedia.org/wiki/.dj +// dj : https://en.wikipedia.org/wiki/.dj dj -// dk : http://en.wikipedia.org/wiki/.dk +// dk : https://en.wikipedia.org/wiki/.dk // Confirmed by registry 2008-06-17 dk -// dm : http://en.wikipedia.org/wiki/.dm +// dm : https://en.wikipedia.org/wiki/.dm dm com.dm net.dm @@ -742,7 +748,7 @@ org.dm edu.dm gov.dm -// do : http://en.wikipedia.org/wiki/.do +// do : https://en.wikipedia.org/wiki/.do do art.do com.do @@ -755,7 +761,7 @@ org.do sld.do web.do -// dz : http://en.wikipedia.org/wiki/.dz +// dz : https://en.wikipedia.org/wiki/.dz dz com.dz org.dz @@ -767,7 +773,7 @@ pol.dz art.dz // ec : http://www.nic.ec/reg/paso1.asp -// Submitted by registry 2008-07-04 +// Submitted by registry ec com.ec info.ec @@ -782,7 +788,7 @@ gov.ec gob.ec mil.ec -// edu : http://en.wikipedia.org/wiki/.edu +// edu : https://en.wikipedia.org/wiki/.edu edu // ee : http://www.eenet.ee/EENet/dom_reeglid.html#lisa_B @@ -798,7 +804,7 @@ aip.ee org.ee fie.ee -// eg : http://en.wikipedia.org/wiki/.eg +// eg : https://en.wikipedia.org/wiki/.eg eg com.eg edu.eg @@ -810,7 +816,7 @@ net.eg org.eg sci.eg -// er : http://en.wikipedia.org/wiki/.er +// er : https://en.wikipedia.org/wiki/.er *.er // es : https://www.nic.es/site_ingles/ingles/dominios/index.html @@ -821,7 +827,7 @@ org.es gob.es edu.es -// et : http://en.wikipedia.org/wiki/.et +// et : https://en.wikipedia.org/wiki/.et et com.et gov.et @@ -832,28 +838,28 @@ name.et info.et net.et -// eu : http://en.wikipedia.org/wiki/.eu +// eu : https://en.wikipedia.org/wiki/.eu eu -// fi : http://en.wikipedia.org/wiki/.fi +// fi : https://en.wikipedia.org/wiki/.fi fi -// aland.fi : http://en.wikipedia.org/wiki/.ax +// aland.fi : https://en.wikipedia.org/wiki/.ax // This domain is being phased out in favor of .ax. As there are still many // domains under aland.fi, we still keep it on the list until aland.fi is // completely removed. // TODO: Check for updates (expected to be phased out around Q1/2009) aland.fi -// fj : http://en.wikipedia.org/wiki/.fj +// fj : https://en.wikipedia.org/wiki/.fj *.fj -// fk : http://en.wikipedia.org/wiki/.fk +// fk : https://en.wikipedia.org/wiki/.fk *.fk -// fm : http://en.wikipedia.org/wiki/.fm +// fm : https://en.wikipedia.org/wiki/.fm fm -// fo : http://en.wikipedia.org/wiki/.fo +// fo : https://en.wikipedia.org/wiki/.fo fo // fr : http://www.afnic.fr/ @@ -884,14 +890,14 @@ pharmacien.fr port.fr veterinaire.fr -// ga : http://en.wikipedia.org/wiki/.ga +// ga : https://en.wikipedia.org/wiki/.ga ga // gb : This registry is effectively dormant -// Submitted by registry 2008-06-12 +// Submitted by registry gb -// gd : http://en.wikipedia.org/wiki/.gd +// gd : https://en.wikipedia.org/wiki/.gd gd // ge : http://www.nic.net.ge/policy_en.pdf @@ -904,7 +910,7 @@ mil.ge net.ge pvt.ge -// gf : http://en.wikipedia.org/wiki/.gf +// gf : https://en.wikipedia.org/wiki/.gf gf // gg : http://www.channelisles.net/register-domains/ @@ -914,7 +920,7 @@ co.gg net.gg org.gg -// gh : http://en.wikipedia.org/wiki/.gh +// gh : https://en.wikipedia.org/wiki/.gh // see also: http://www.nic.gh/reg_now.php // Although domains directly at second level are not possible at the moment, // they have been possible for some time and may come back. @@ -934,7 +940,7 @@ mod.gi edu.gi org.gi -// gl : http://en.wikipedia.org/wiki/.gl +// gl : https://en.wikipedia.org/wiki/.gl // http://nic.gl gl co.gl @@ -947,7 +953,7 @@ org.gl gm // gn : http://psg.com/dns/gn/gn.txt -// Submitted by registry 2008-06-17 +// Submitted by registry gn ac.gn com.gn @@ -956,7 +962,7 @@ gov.gn org.gn net.gn -// gov : http://en.wikipedia.org/wiki/.gov +// gov : https://en.wikipedia.org/wiki/.gov gov // gp : http://www.nic.gp/index.php?lang=en @@ -968,11 +974,11 @@ edu.gp org.gp asso.gp -// gq : http://en.wikipedia.org/wiki/.gq +// gq : https://en.wikipedia.org/wiki/.gq gq // gr : https://grweb.ics.forth.gr/english/1617-B-2005.html -// Submitted by registry 2008-06-09 +// Submitted by registry gr com.gr edu.gr @@ -980,7 +986,7 @@ net.gr org.gr gov.gr -// gs : http://en.wikipedia.org/wiki/.gs +// gs : https://en.wikipedia.org/wiki/.gs gs // gt : http://www.gt/politicas_de_registro.html @@ -996,18 +1002,21 @@ org.gt // gu : http://gadao.gov.gu/registration.txt *.gu -// gw : http://en.wikipedia.org/wiki/.gw +// gw : https://en.wikipedia.org/wiki/.gw gw -// gy : http://en.wikipedia.org/wiki/.gy +// gy : https://en.wikipedia.org/wiki/.gy // http://registry.gy/ gy co.gy com.gy +edu.gy +gov.gy net.gy +org.gy // hk : https://www.hkdnr.hk -// Submitted by registry 2008-06-11 +// Submitted by registry hk com.hk edu.hk @@ -1015,38 +1024,38 @@ gov.hk idv.hk net.hk org.hk -公司.hk xn--55qx5d.hk -教育.hk +公司.hk xn--wcvs22d.hk -敎育.hk +教育.hk xn--lcvr32d.hk -政府.hk +敎育.hk xn--mxtq1m.hk -個人.hk +政府.hk xn--gmqw5a.hk -个人.hk +個人.hk xn--ciqpn.hk -箇人.hk +个人.hk xn--gmq050i.hk -網络.hk +箇人.hk xn--zf0avx.hk -网络.hk +網络.hk xn--io0a7i.hk -组織.hk +网络.hk xn--mk0axi.hk -網絡.hk +组織.hk xn--od0alg.hk -网絡.hk +網絡.hk xn--od0aq3b.hk -组织.hk +网絡.hk xn--tn0ag.hk -組織.hk +组织.hk xn--uc0atv.hk -組织.hk +組織.hk xn--uc0ay4a.hk +組织.hk -// hm : http://en.wikipedia.org/wiki/.hm +// hm : https://en.wikipedia.org/wiki/.hm hm // hn : http://www.nic.hn/politicas/ps02,,05.html @@ -1134,15 +1143,23 @@ or.id sch.id web.id -// ie : http://en.wikipedia.org/wiki/.ie +// ie : https://en.wikipedia.org/wiki/.ie ie gov.ie -// il : http://en.wikipedia.org/wiki/.il -*.il +// il : http://www.isoc.org.il/domains/ +il +ac.il +co.il +gov.il +idf.il +k12.il +muni.il +net.il +org.il // im : https://www.nic.im/ -// Submitted by registry 2013-11-15 +// Submitted by registry im ac.im co.im @@ -1154,9 +1171,9 @@ plc.co.im tt.im tv.im -// in : http://en.wikipedia.org/wiki/.in +// in : https://en.wikipedia.org/wiki/.in // see also: https://registry.in/Policies -// Please note, that nic.in is not an offical eTLD, but used by most +// Please note, that nic.in is not an official eTLD, but used by most // government institutions. in co.in @@ -1172,10 +1189,10 @@ res.in gov.in mil.in -// info : http://en.wikipedia.org/wiki/.info +// info : https://en.wikipedia.org/wiki/.info info -// int : http://en.wikipedia.org/wiki/.int +// int : https://en.wikipedia.org/wiki/.int // Confirmed by registry 2008-06-18 int eu.int @@ -1206,11 +1223,11 @@ net.ir org.ir sch.ir // xn--mgba3a4f16a.ir (.ir, Persian YEH) -ایران.ir xn--mgba3a4f16a.ir +ایران.ir // xn--mgba3a4fra.ir (.ir, Arabic YEH) -ايران.ir xn--mgba3a4fra.ir +ايران.ir // is : http://www.isnic.is/domain/rules.php // Confirmed by registry 2008-12-06 @@ -1222,7 +1239,7 @@ gov.is org.is int.is -// it : http://en.wikipedia.org/wiki/.it +// it : https://en.wikipedia.org/wiki/.it it gov.it edu.it @@ -1620,12 +1637,12 @@ gov.jo mil.jo name.jo -// jobs : http://en.wikipedia.org/wiki/.jobs +// jobs : https://en.wikipedia.org/wiki/.jobs jobs -// jp : http://en.wikipedia.org/wiki/.jp +// jp : https://en.wikipedia.org/wiki/.jp // http://jprs.co.jp/en/jpdomain.html -// Submitted by registry 2014-10-30 +// Submitted by registry jp // jp organizational type names ac.jp @@ -1685,100 +1702,100 @@ wakayama.jp yamagata.jp yamaguchi.jp yamanashi.jp -栃木.jp xn--4pvxs.jp -愛知.jp +栃木.jp xn--vgu402c.jp -愛媛.jp +愛知.jp xn--c3s14m.jp -兵庫.jp +愛媛.jp xn--f6qx53a.jp -熊本.jp +兵庫.jp xn--8pvr4u.jp -茨城.jp +熊本.jp xn--uist22h.jp -北海道.jp +茨城.jp xn--djrs72d6uy.jp -千葉.jp +北海道.jp xn--mkru45i.jp -和歌山.jp +千葉.jp xn--0trq7p7nn.jp -長崎.jp +和歌山.jp xn--8ltr62k.jp -長野.jp +長崎.jp xn--2m4a15e.jp -新潟.jp +長野.jp xn--efvn9s.jp -青森.jp +新潟.jp xn--32vp30h.jp -静岡.jp +青森.jp xn--4it797k.jp -東京.jp +静岡.jp xn--1lqs71d.jp -石川.jp +東京.jp xn--5rtp49c.jp -埼玉.jp +石川.jp xn--5js045d.jp -三重.jp +埼玉.jp xn--ehqz56n.jp -京都.jp +三重.jp xn--1lqs03n.jp -佐賀.jp +京都.jp xn--qqqt11m.jp -大分.jp +佐賀.jp xn--kbrq7o.jp -大阪.jp +大分.jp xn--pssu33l.jp -奈良.jp +大阪.jp xn--ntsq17g.jp -宮城.jp +奈良.jp xn--uisz3g.jp -宮崎.jp +宮城.jp xn--6btw5a.jp -富山.jp +宮崎.jp xn--1ctwo.jp -山口.jp +富山.jp xn--6orx2r.jp -山形.jp +山口.jp xn--rht61e.jp -山梨.jp +山形.jp xn--rht27z.jp -岩手.jp +山梨.jp xn--djty4k.jp -岐阜.jp +岩手.jp xn--nit225k.jp -岡山.jp +岐阜.jp xn--rht3d.jp -島根.jp +岡山.jp xn--klty5x.jp -広島.jp +島根.jp xn--kltx9a.jp -徳島.jp +広島.jp xn--kltp7d.jp -沖縄.jp +徳島.jp xn--uuwu58a.jp -滋賀.jp +沖縄.jp xn--zbx025d.jp -神奈川.jp +滋賀.jp xn--ntso0iqx3a.jp -福井.jp +神奈川.jp xn--elqq16h.jp -福岡.jp +福井.jp xn--4it168d.jp -福島.jp +福岡.jp xn--klt787d.jp -秋田.jp +福島.jp xn--rny31h.jp -群馬.jp +秋田.jp xn--7t0a264c.jp -香川.jp +群馬.jp xn--5rtq34k.jp -高知.jp +香川.jp xn--k7yn95e.jp -鳥取.jp +高知.jp xn--tor131o.jp -鹿児島.jp +鳥取.jp xn--d5qv7z876c.jp +鹿児島.jp // jp geographic type names // http://jprs.jp/doc/rule/saisoku-1.html *.kawasaki.jp @@ -2599,11 +2616,8 @@ arao.kumamoto.jp aso.kumamoto.jp choyo.kumamoto.jp gyokuto.kumamoto.jp -hitoyoshi.kumamoto.jp kamiamakusa.kumamoto.jp -kashima.kumamoto.jp kikuchi.kumamoto.jp -kosa.kumamoto.jp kumamoto.kumamoto.jp mashiki.kumamoto.jp mifune.kumamoto.jp @@ -2688,7 +2702,6 @@ iwanuma.miyagi.jp kakuda.miyagi.jp kami.miyagi.jp kawasaki.miyagi.jp -kesennuma.miyagi.jp marumori.miyagi.jp matsushima.miyagi.jp minamisanriku.miyagi.jp @@ -3499,7 +3512,7 @@ gov.ki info.ki com.ki -// km : http://en.wikipedia.org/wiki/.km +// km : https://en.wikipedia.org/wiki/.km // http://www.domaine.km/documents/charte.doc km org.km @@ -3512,7 +3525,7 @@ mil.km ass.km com.km // These are only mentioned as proposed suggestions at domaine.km, but -// http://en.wikipedia.org/wiki/.km says they're available for registration: +// https://en.wikipedia.org/wiki/.km says they're available for registration: coop.km asso.km presse.km @@ -3522,7 +3535,7 @@ pharmaciens.km veterinaire.km gouv.km -// kn : http://en.wikipedia.org/wiki/.kn +// kn : https://en.wikipedia.org/wiki/.kn // http://www.dot.kn/domainRules.html kn net.kn @@ -3539,7 +3552,7 @@ org.kp rep.kp tra.kp -// kr : http://en.wikipedia.org/wiki/.kr +// kr : https://en.wikipedia.org/wiki/.kr // see also: http://domain.nida.or.kr/eng/registration.jsp kr ac.kr @@ -3573,7 +3586,7 @@ jeonnam.kr seoul.kr ulsan.kr -// kw : http://en.wikipedia.org/wiki/.kw +// kw : https://en.wikipedia.org/wiki/.kw *.kw // ky : http://www.icta.ky/da_ky_reg_dom.php @@ -3585,7 +3598,7 @@ com.ky org.ky net.ky -// kz : http://en.wikipedia.org/wiki/.kz +// kz : https://en.wikipedia.org/wiki/.kz // see also: http://www.nic.kz/rules/index.jsp kz org.kz @@ -3595,8 +3608,8 @@ gov.kz mil.kz com.kz -// la : http://en.wikipedia.org/wiki/.la -// Submitted by registry 2008-06-10 +// la : https://en.wikipedia.org/wiki/.la +// Submitted by registry la int.la net.la @@ -3607,8 +3620,8 @@ per.la com.la org.la -// lb : http://en.wikipedia.org/wiki/.lb -// Submitted by registry 2008-06-17 +// lb : https://en.wikipedia.org/wiki/.lb +// Submitted by registry lb com.lb edu.lb @@ -3616,7 +3629,7 @@ gov.lb net.lb org.lb -// lc : http://en.wikipedia.org/wiki/.lc +// lc : https://en.wikipedia.org/wiki/.lc // see also: http://www.nic.lc/rules.htm lc com.lc @@ -3626,7 +3639,7 @@ org.lc edu.lc gov.lc -// li : http://en.wikipedia.org/wiki/.li +// li : https://en.wikipedia.org/wiki/.li li // lk : http://www.nic.lk/seclevpr.html @@ -3648,7 +3661,7 @@ hotel.lk ac.lk // lr : http://psg.com/dns/lr/lr.txt -// Submitted by registry 2008-06-17 +// Submitted by registry lr com.lr edu.lr @@ -3656,12 +3669,12 @@ gov.lr org.lr net.lr -// ls : http://en.wikipedia.org/wiki/.ls +// ls : https://en.wikipedia.org/wiki/.ls ls co.ls org.ls -// lt : http://en.wikipedia.org/wiki/.lt +// lt : https://en.wikipedia.org/wiki/.lt lt // gov.lt : http://www.gov.lt/index_en.php gov.lt @@ -3693,7 +3706,7 @@ med.ly org.ly id.ly -// ma : http://en.wikipedia.org/wiki/.ma +// ma : https://en.wikipedia.org/wiki/.ma // http://www.anrt.ma/fr/admin/download/upload/file_fr782.pdf ma co.ma @@ -3708,10 +3721,10 @@ mc tm.mc asso.mc -// md : http://en.wikipedia.org/wiki/.md +// md : https://en.wikipedia.org/wiki/.md md -// me : http://en.wikipedia.org/wiki/.me +// me : https://en.wikipedia.org/wiki/.me me co.me net.me @@ -3722,7 +3735,7 @@ gov.me its.me priv.me -// mg : http://www.nic.mg/tarif.htm +// mg : http://nic.mg/nicmg/?page_id=39 mg org.mg nom.mg @@ -3732,14 +3745,15 @@ tm.mg edu.mg mil.mg com.mg +co.mg -// mh : http://en.wikipedia.org/wiki/.mh +// mh : https://en.wikipedia.org/wiki/.mh mh -// mil : http://en.wikipedia.org/wiki/.mil +// mil : https://en.wikipedia.org/wiki/.mil mil -// mk : http://en.wikipedia.org/wiki/.mk +// mk : https://en.wikipedia.org/wiki/.mk // see also: http://dns.marnet.net.mk/postapka.php mk com.mk @@ -3751,7 +3765,7 @@ inf.mk name.mk // ml : http://www.gobin.info/domainname/ml-template.doc -// see also: http://en.wikipedia.org/wiki/.ml +// see also: https://en.wikipedia.org/wiki/.ml ml com.ml edu.ml @@ -3761,10 +3775,10 @@ net.ml org.ml presse.ml -// mm : http://en.wikipedia.org/wiki/.mm +// mm : https://en.wikipedia.org/wiki/.mm *.mm -// mn : http://en.wikipedia.org/wiki/.mn +// mn : https://en.wikipedia.org/wiki/.mn mn gov.mn edu.mn @@ -3778,17 +3792,17 @@ org.mo edu.mo gov.mo -// mobi : http://en.wikipedia.org/wiki/.mobi +// mobi : https://en.wikipedia.org/wiki/.mobi mobi // mp : http://www.dot.mp/ // Confirmed by registry 2008-06-17 mp -// mq : http://en.wikipedia.org/wiki/.mq +// mq : https://en.wikipedia.org/wiki/.mq mq -// mr : http://en.wikipedia.org/wiki/.mr +// mr : https://en.wikipedia.org/wiki/.mr mr gov.mr @@ -3801,14 +3815,14 @@ net.ms org.ms // mt : https://www.nic.org.mt/go/policy -// Submitted by registry 2013-11-19 +// Submitted by registry mt com.mt edu.mt net.mt org.mt -// mu : http://en.wikipedia.org/wiki/.mu +// mu : https://en.wikipedia.org/wiki/.mu mu com.mu net.mu @@ -3950,15 +3964,15 @@ communications.museum community.museum computer.museum computerhistory.museum -comunicações.museum xn--comunicaes-v6a2o.museum +comunicações.museum contemporary.museum contemporaryart.museum convent.museum copenhagen.museum corporation.museum -correios-e-telecomunicações.museum xn--correios-e-telecomunicaes-ghc29a.museum +correios-e-telecomunicações.museum corvette.museum costume.museum countryestate.museum @@ -4107,8 +4121,8 @@ lajolla.museum lancashire.museum landes.museum lans.museum -läns.museum xn--lns-qla.museum +läns.museum larsson.museum lewismiller.museum lincoln.museum @@ -4370,12 +4384,12 @@ yosemite.museum youth.museum zoological.museum zoology.museum -ירושלים.museum xn--9dbhblg6di.museum -иком.museum +ירושלים.museum xn--h1aegh.museum +иком.museum -// mv : http://en.wikipedia.org/wiki/.mv +// mv : https://en.wikipedia.org/wiki/.mv // "mv" included because, contra Wikipedia, google.mv exists. mv aero.mv @@ -4408,7 +4422,7 @@ net.mw org.mw // mx : http://www.nic.mx/ -// Submitted by registry 2008-06-19 +// Submitted by registry mx com.mx org.mx @@ -4426,9 +4440,17 @@ edu.my mil.my name.my -// mz : http://www.gobin.info/domainname/mz-template.doc -*.mz -!teledata.mz +// mz : http://www.uem.mz/ +// Submitted by registry +mz +ac.mz +adv.mz +co.mz +edu.mz +gov.mz +mil.mz +net.mz +org.mz // na : http://www.na-nic.com.na/ // http://www.info.na/domain/ @@ -4458,13 +4480,13 @@ name nc asso.nc -// ne : http://en.wikipedia.org/wiki/.ne +// ne : https://en.wikipedia.org/wiki/.ne ne -// net : http://en.wikipedia.org/wiki/.net +// net : https://en.wikipedia.org/wiki/.net net -// nf : http://en.wikipedia.org/wiki/.nf +// nf : https://en.wikipedia.org/wiki/.nf nf com.nf net.nf @@ -4477,24 +4499,39 @@ info.nf other.nf store.nf -// ng : http://psg.com/dns/ng/ +// ng : http://www.nira.org.ng/index.php/join-us/register-ng-domain/189-nira-slds ng com.ng edu.ng +gov.ng +i.ng +mil.ng +mobi.ng name.ng net.ng org.ng sch.ng -gov.ng -mil.ng -mobi.ng -// ni : http://www.nic.ni/dominios.htm -*.ni - -// nl : http://en.wikipedia.org/wiki/.nl -// https://www.sidn.nl/ -// ccTLD for the Netherlands +// ni : http://www.nic.ni/ +ni +ac.ni +biz.ni +co.ni +com.ni +edu.ni +gob.ni +in.ni +info.ni +int.ni +mil.ni +net.ni +nom.ni +org.ni +web.ni + +// nl : https://en.wikipedia.org/wiki/.nl +// https://www.sidn.nl/ +// ccTLD for the Netherlands nl // BV.nl will be a registry for dutch BV's (besloten vennootschap) @@ -4567,209 +4604,209 @@ gs.va.no gs.vf.no // cities akrehamn.no -åkrehamn.no xn--krehamn-dxa.no +åkrehamn.no algard.no -ålgård.no xn--lgrd-poac.no +ålgård.no arna.no brumunddal.no bryne.no bronnoysund.no -brønnøysund.no xn--brnnysund-m8ac.no +brønnøysund.no drobak.no -drøbak.no xn--drbak-wua.no +drøbak.no egersund.no fetsund.no floro.no -florø.no xn--flor-jra.no +florø.no fredrikstad.no hokksund.no honefoss.no -hønefoss.no xn--hnefoss-q1a.no +hønefoss.no jessheim.no jorpeland.no -jørpeland.no xn--jrpeland-54a.no +jørpeland.no kirkenes.no kopervik.no krokstadelva.no langevag.no -langevåg.no xn--langevg-jxa.no +langevåg.no leirvik.no mjondalen.no -mjøndalen.no xn--mjndalen-64a.no +mjøndalen.no mo-i-rana.no mosjoen.no -mosjøen.no xn--mosjen-eya.no +mosjøen.no nesoddtangen.no orkanger.no osoyro.no -osøyro.no xn--osyro-wua.no +osøyro.no raholt.no -råholt.no xn--rholt-mra.no +råholt.no sandnessjoen.no -sandnessjøen.no xn--sandnessjen-ogb.no +sandnessjøen.no skedsmokorset.no slattum.no spjelkavik.no stathelle.no stavern.no stjordalshalsen.no -stjørdalshalsen.no xn--stjrdalshalsen-sqb.no +stjørdalshalsen.no tananger.no tranby.no vossevangen.no // communities afjord.no -åfjord.no xn--fjord-lra.no +åfjord.no agdenes.no al.no -ål.no xn--l-1fa.no +ål.no alesund.no -ålesund.no xn--lesund-hua.no +ålesund.no alstahaug.no alta.no -áltá.no xn--lt-liac.no +áltá.no alaheadju.no -álaheadju.no xn--laheadju-7ya.no +álaheadju.no alvdal.no amli.no -åmli.no xn--mli-tla.no +åmli.no amot.no -åmot.no xn--mot-tla.no +åmot.no andebu.no andoy.no -andøy.no xn--andy-ira.no +andøy.no andasuolo.no ardal.no -årdal.no xn--rdal-poa.no +årdal.no aremark.no arendal.no -ås.no xn--s-1fa.no +ås.no aseral.no -åseral.no xn--seral-lra.no +åseral.no asker.no askim.no askvoll.no askoy.no -askøy.no xn--asky-ira.no +askøy.no asnes.no -åsnes.no xn--snes-poa.no +åsnes.no audnedaln.no aukra.no aure.no aurland.no aurskog-holand.no -aurskog-høland.no xn--aurskog-hland-jnb.no +aurskog-høland.no austevoll.no austrheim.no averoy.no -averøy.no xn--avery-yua.no +averøy.no balestrand.no ballangen.no balat.no -bálát.no xn--blt-elab.no +bálát.no balsfjord.no bahccavuotna.no -báhccavuotna.no xn--bhccavuotna-k7a.no +báhccavuotna.no bamble.no bardu.no beardu.no beiarn.no bajddar.no -bájddar.no xn--bjddar-pta.no +bájddar.no baidar.no -báidár.no xn--bidr-5nac.no +báidár.no berg.no bergen.no berlevag.no -berlevåg.no xn--berlevg-jxa.no +berlevåg.no bearalvahki.no -bearalváhki.no xn--bearalvhki-y4a.no +bearalváhki.no bindal.no birkenes.no bjarkoy.no -bjarkøy.no xn--bjarky-fya.no +bjarkøy.no bjerkreim.no bjugn.no bodo.no -bodø.no xn--bod-2na.no +bodø.no badaddja.no -bådåddjå.no xn--bdddj-mrabd.no +bådåddjå.no budejju.no bokn.no bremanger.no bronnoy.no -brønnøy.no xn--brnny-wuac.no +brønnøy.no bygland.no bykle.no barum.no -bærum.no xn--brum-voa.no +bærum.no bo.telemark.no -bø.telemark.no xn--b-5ga.telemark.no +bø.telemark.no bo.nordland.no -bø.nordland.no xn--b-5ga.nordland.no +bø.nordland.no bievat.no -bievát.no xn--bievt-0qa.no +bievát.no bomlo.no -bømlo.no xn--bmlo-gra.no +bømlo.no batsfjord.no -båtsfjord.no xn--btsfjord-9za.no +båtsfjord.no bahcavuotna.no -báhcavuotna.no xn--bhcavuotna-s4a.no +báhcavuotna.no dovre.no drammen.no drangedal.no dyroy.no -dyrøy.no xn--dyry-ira.no +dyrøy.no donna.no -dønna.no xn--dnna-gra.no +dønna.no eid.no eidfjord.no eidsberg.no @@ -4783,8 +4820,8 @@ etne.no etnedal.no evenes.no evenassi.no -evenášši.no xn--eveni-0qa01ga.no +evenášši.no evje-og-hornnes.no farsund.no fauske.no @@ -4793,8 +4830,8 @@ fuoisku.no fedje.no fet.no finnoy.no -finnøy.no xn--finny-yua.no +finnøy.no fitjar.no fjaler.no fjell.no @@ -4804,8 +4841,8 @@ flekkefjord.no flesberg.no flora.no fla.no -flå.no xn--fl-zia.no +flå.no folldal.no forsand.no fosnes.no @@ -4814,33 +4851,33 @@ frogn.no froland.no frosta.no frana.no -fræna.no xn--frna-woa.no +fræna.no froya.no -frøya.no xn--frya-hra.no +frøya.no fusa.no fyresdal.no forde.no -førde.no xn--frde-gra.no +førde.no gamvik.no gangaviika.no -gáŋgaviika.no xn--ggaviika-8ya47h.no +gáŋgaviika.no gaular.no gausdal.no gildeskal.no -gildeskål.no xn--gildeskl-g0a.no +gildeskål.no giske.no gjemnes.no gjerdrum.no gjerstad.no gjesdal.no gjovik.no -gjøvik.no xn--gjvik-wua.no +gjøvik.no gloppen.no gol.no gran.no @@ -4850,8 +4887,8 @@ gratangen.no grimstad.no grong.no kraanghke.no -kråanghke.no xn--kranghke-b0a.no +kråanghke.no grue.no gulen.no hadsel.no @@ -4860,22 +4897,22 @@ halsa.no hamar.no hamaroy.no habmer.no -hábmer.no xn--hbmer-xqa.no +hábmer.no hapmir.no -hápmir.no xn--hpmir-xqa.no +hápmir.no hammerfest.no hammarfeasta.no -hámmárfeasta.no xn--hmmrfeasta-s4ac.no +hámmárfeasta.no haram.no hareid.no harstad.no hasvik.no aknoluokta.no -ákŋoluokta.no xn--koluokta-7ya57h.no +ákŋoluokta.no hattfjelldal.no aarborte.no haugesund.no @@ -4883,24 +4920,24 @@ hemne.no hemnes.no hemsedal.no heroy.more-og-romsdal.no -herøy.møre-og-romsdal.no xn--hery-ira.xn--mre-og-romsdal-qqb.no +herøy.møre-og-romsdal.no heroy.nordland.no -herøy.nordland.no xn--hery-ira.nordland.no +herøy.nordland.no hitra.no hjartdal.no hjelmeland.no hobol.no -hobøl.no xn--hobl-ira.no +hobøl.no hof.no hol.no hole.no holmestrand.no holtalen.no -holtålen.no xn--holtlen-hxa.no +holtålen.no hornindal.no horten.no hurdal.no @@ -4908,87 +4945,87 @@ hurum.no hvaler.no hyllestad.no hagebostad.no -hægebostad.no xn--hgebostad-g3a.no +hægebostad.no hoyanger.no -høyanger.no xn--hyanger-q1a.no +høyanger.no hoylandet.no -høylandet.no xn--hylandet-54a.no +høylandet.no ha.no -hå.no xn--h-2fa.no +hå.no ibestad.no inderoy.no -inderøy.no xn--indery-fya.no +inderøy.no iveland.no jevnaker.no jondal.no jolster.no -jølster.no xn--jlster-bya.no +jølster.no karasjok.no karasjohka.no -kárášjohka.no xn--krjohka-hwab49j.no +kárášjohka.no karlsoy.no galsa.no -gálsá.no xn--gls-elac.no +gálsá.no karmoy.no -karmøy.no xn--karmy-yua.no +karmøy.no kautokeino.no guovdageaidnu.no klepp.no klabu.no -klæbu.no xn--klbu-woa.no +klæbu.no kongsberg.no kongsvinger.no kragero.no -kragerø.no xn--krager-gya.no +kragerø.no kristiansand.no kristiansund.no krodsherad.no -krødsherad.no xn--krdsherad-m8a.no +krødsherad.no kvalsund.no rahkkeravju.no -ráhkkerávju.no xn--rhkkervju-01af.no +ráhkkerávju.no kvam.no kvinesdal.no kvinnherad.no kviteseid.no kvitsoy.no -kvitsøy.no xn--kvitsy-fya.no +kvitsøy.no kvafjord.no -kvæfjord.no xn--kvfjord-nxa.no +kvæfjord.no giehtavuoatna.no kvanangen.no -kvænangen.no xn--kvnangen-k0a.no +kvænangen.no navuotna.no -návuotna.no xn--nvuotna-hwa.no +návuotna.no kafjord.no -kåfjord.no xn--kfjord-iua.no +kåfjord.no gaivuotna.no -gáivuotna.no xn--givuotna-8ya.no +gáivuotna.no larvik.no lavangen.no lavagis.no loabat.no -loabát.no xn--loabt-0qa.no +loabát.no lebesby.no davvesiida.no leikanger.no @@ -4997,8 +5034,8 @@ leka.no leksvik.no lenvik.no leangaviika.no -leaŋgaviika.no xn--leagaviika-52b.no +leaŋgaviika.no lesja.no levanger.no lier.no @@ -5007,42 +5044,42 @@ lillehammer.no lillesand.no lindesnes.no lindas.no -lindås.no xn--linds-pra.no +lindås.no lom.no loppa.no lahppi.no -láhppi.no xn--lhppi-xqa.no +láhppi.no lund.no lunner.no luroy.no -lurøy.no xn--lury-ira.no +lurøy.no luster.no lyngdal.no lyngen.no ivgu.no lardal.no lerdal.no -lærdal.no xn--lrdal-sra.no +lærdal.no lodingen.no -lødingen.no xn--ldingen-q1a.no +lødingen.no lorenskog.no -lørenskog.no xn--lrenskog-54a.no +lørenskog.no loten.no -løten.no xn--lten-gra.no +løten.no malvik.no masoy.no -måsøy.no xn--msy-ula0h.no +måsøy.no muosat.no -muosát.no xn--muost-0qa.no +muosát.no mandal.no marker.no marnardal.no @@ -5051,14 +5088,14 @@ meland.no meldal.no melhus.no meloy.no -meløy.no xn--mely-ira.no +meløy.no meraker.no -meråker.no xn--merker-kua.no +meråker.no moareke.no -moåreke.no xn--moreke-jua.no +moåreke.no midsund.no midtre-gauldal.no modalen.no @@ -5068,18 +5105,18 @@ moskenes.no moss.no mosvik.no malselv.no -målselv.no xn--mlselv-iua.no +målselv.no malatvuopmi.no -málatvuopmi.no xn--mlatvuopmi-s4a.no +málatvuopmi.no namdalseid.no aejrie.no namsos.no namsskogan.no naamesjevuemie.no -nååmesjevuemie.no xn--nmesjevuemie-tcba.no +nååmesjevuemie.no laakesvuemie.no nannestad.no narvik.no @@ -5092,8 +5129,8 @@ nesna.no nesodden.no nesseby.no unjarga.no -unjárga.no xn--unjrga-rta.no +unjárga.no nesset.no nissedal.no nittedal.no @@ -5103,69 +5140,69 @@ nord-odal.no norddal.no nordkapp.no davvenjarga.no -davvenjárga.no xn--davvenjrga-y4a.no +davvenjárga.no nordre-land.no nordreisa.no raisa.no -ráisa.no xn--risa-5na.no +ráisa.no nore-og-uvdal.no notodden.no naroy.no -nærøy.no xn--nry-yla5g.no +nærøy.no notteroy.no -nøtterøy.no xn--nttery-byae.no +nøtterøy.no odda.no oksnes.no -øksnes.no xn--ksnes-uua.no +øksnes.no oppdal.no oppegard.no -oppegård.no xn--oppegrd-ixa.no +oppegård.no orkdal.no orland.no -ørland.no xn--rland-uua.no +ørland.no orskog.no -ørskog.no xn--rskog-uua.no +ørskog.no orsta.no -ørsta.no xn--rsta-fra.no +ørsta.no os.hedmark.no os.hordaland.no osen.no osteroy.no -osterøy.no xn--ostery-fya.no +osterøy.no ostre-toten.no -østre-toten.no xn--stre-toten-zcb.no +østre-toten.no overhalla.no ovre-eiker.no -øvre-eiker.no xn--vre-eiker-k8a.no +øvre-eiker.no oyer.no -øyer.no xn--yer-zna.no +øyer.no oygarden.no -øygarden.no xn--ygarden-p1a.no +øygarden.no oystre-slidre.no -øystre-slidre.no xn--ystre-slidre-ujb.no +øystre-slidre.no porsanger.no porsangu.no -porsáŋgu.no xn--porsgu-sta26f.no +porsáŋgu.no porsgrunn.no radoy.no -radøy.no xn--rady-ira.no +radøy.no rakkestad.no rana.no ruovat.no @@ -5174,61 +5211,61 @@ rauma.no rendalen.no rennebu.no rennesoy.no -rennesøy.no xn--rennesy-v1a.no +rennesøy.no rindal.no ringebu.no ringerike.no ringsaker.no rissa.no risor.no -risør.no xn--risr-ira.no +risør.no roan.no rollag.no rygge.no ralingen.no -rælingen.no xn--rlingen-mxa.no +rælingen.no rodoy.no -rødøy.no xn--rdy-0nab.no +rødøy.no romskog.no -rømskog.no xn--rmskog-bya.no +rømskog.no roros.no -røros.no xn--rros-gra.no +røros.no rost.no -røst.no xn--rst-0na.no +røst.no royken.no -røyken.no xn--ryken-vua.no +røyken.no royrvik.no -røyrvik.no xn--ryrvik-bya.no +røyrvik.no rade.no -råde.no xn--rde-ula.no +råde.no salangen.no siellak.no saltdal.no salat.no -sálát.no xn--slt-elab.no -sálat.no +sálát.no xn--slat-5na.no +sálat.no samnanger.no sande.more-og-romsdal.no -sande.møre-og-romsdal.no sande.xn--mre-og-romsdal-qqb.no +sande.møre-og-romsdal.no sande.vestfold.no sandefjord.no sandnes.no sandoy.no -sandøy.no xn--sandy-yua.no +sandøy.no sarpsborg.no sauda.no sauherad.no @@ -5245,32 +5282,32 @@ ski.no skien.no skiptvet.no skjervoy.no -skjervøy.no xn--skjervy-v1a.no +skjervøy.no skierva.no -skiervá.no xn--skierv-uta.no +skiervá.no skjak.no -skjåk.no xn--skjk-soa.no +skjåk.no skodje.no skanland.no -skånland.no xn--sknland-fxa.no +skånland.no skanit.no -skánit.no xn--sknit-yqa.no +skánit.no smola.no -smøla.no xn--smla-hra.no +smøla.no snillfjord.no snasa.no -snåsa.no xn--snsa-roa.no +snåsa.no snoasa.no snaase.no -snåase.no xn--snase-nra.no +snåase.no sogndal.no sokndal.no sola.no @@ -5283,8 +5320,8 @@ stavanger.no steigen.no steinkjer.no stjordal.no -stjørdal.no xn--stjrdal-s1a.no +stjørdal.no stokke.no stor-elvdal.no stord.no @@ -5303,38 +5340,38 @@ sveio.no svelvik.no sykkylven.no sogne.no -søgne.no xn--sgne-gra.no +søgne.no somna.no -sømna.no xn--smna-gra.no +sømna.no sondre-land.no -søndre-land.no xn--sndre-land-0cb.no +søndre-land.no sor-aurdal.no -sør-aurdal.no xn--sr-aurdal-l8a.no +sør-aurdal.no sor-fron.no -sør-fron.no xn--sr-fron-q1a.no +sør-fron.no sor-odal.no -sør-odal.no xn--sr-odal-q1a.no +sør-odal.no sor-varanger.no -sør-varanger.no xn--sr-varanger-ggb.no +sør-varanger.no matta-varjjat.no -mátta-várjjat.no xn--mtta-vrjjat-k7af.no +mátta-várjjat.no sorfold.no -sørfold.no xn--srfold-bya.no +sørfold.no sorreisa.no -sørreisa.no xn--srreisa-q1a.no +sørreisa.no sorum.no -sørum.no xn--srum-gra.no +sørum.no tana.no deatnu.no time.no @@ -5343,28 +5380,28 @@ tinn.no tjeldsund.no dielddanuorri.no tjome.no -tjøme.no xn--tjme-hra.no +tjøme.no tokke.no tolga.no torsken.no tranoy.no -tranøy.no xn--trany-yua.no +tranøy.no tromso.no -tromsø.no xn--troms-zua.no +tromsø.no tromsa.no romsa.no trondheim.no troandin.no trysil.no trana.no -træna.no xn--trna-woa.no +træna.no trogstad.no -trøgstad.no xn--trgstad-r1a.no +trøgstad.no tvedestrand.no tydal.no tynset.no @@ -5373,37 +5410,37 @@ divtasvuodna.no divttasvuotna.no tysnes.no tysvar.no -tysvær.no xn--tysvr-vra.no +tysvær.no tonsberg.no -tønsberg.no xn--tnsberg-q1a.no +tønsberg.no ullensaker.no ullensvang.no ulvik.no utsira.no vadso.no -vadsø.no xn--vads-jra.no +vadsø.no cahcesuolo.no -čáhcesuolo.no xn--hcesuolo-7ya35b.no +čáhcesuolo.no vaksdal.no valle.no vang.no vanylven.no vardo.no -vardø.no xn--vard-jra.no +vardø.no varggat.no -várggát.no xn--vrggt-xqad.no +várggát.no vefsn.no vaapste.no vega.no vegarshei.no -vegårshei.no xn--vegrshei-c0a.no +vegårshei.no vennesla.no verdal.no verran.no @@ -5412,8 +5449,8 @@ vestnes.no vestre-slidre.no vestre-toten.no vestvagoy.no -vestvågøy.no xn--vestvgy-ixa6o.no +vestvågøy.no vevelstad.no vik.no vikna.no @@ -5421,30 +5458,30 @@ vindafjord.no volda.no voss.no varoy.no -værøy.no xn--vry-yla5g.no +værøy.no vagan.no -vågan.no xn--vgan-qoa.no +vågan.no voagat.no vagsoy.no -vågsøy.no xn--vgsy-qoa0j.no +vågsøy.no vaga.no -vågå.no xn--vg-yiab.no +vågå.no valer.ostfold.no -våler.østfold.no xn--vler-qoa.xn--stfold-9xa.no +våler.østfold.no valer.hedmark.no -våler.hedmark.no xn--vler-qoa.hedmark.no +våler.hedmark.no // np : http://www.mos.com.np/register.html *.np // nr : http://cenpac.net.nr/dns/index.html -// Confirmed by registry 2008-06-17 +// Submitted by registry nr biz.nr info.nr @@ -5454,11 +5491,11 @@ org.nr net.nr com.nr -// nu : http://en.wikipedia.org/wiki/.nu +// nu : https://en.wikipedia.org/wiki/.nu nu -// nz : http://en.wikipedia.org/wiki/.nz -// Confirmed by registry 2014-05-19 +// nz : https://en.wikipedia.org/wiki/.nz +// Submitted by registry nz ac.nz co.nz @@ -5471,14 +5508,14 @@ iwi.nz kiwi.nz maori.nz mil.nz -māori.nz xn--mori-qsa.nz +māori.nz net.nz org.nz parliament.nz school.nz -// om : http://en.wikipedia.org/wiki/.om +// om : https://en.wikipedia.org/wiki/.om om co.om com.om @@ -5490,7 +5527,7 @@ net.om org.om pro.om -// org : http://en.wikipedia.org/wiki/.org +// org : https://en.wikipedia.org/wiki/.org org // pa : http://www.nic.pa/ @@ -5525,11 +5562,11 @@ com.pf org.pf edu.pf -// pg : http://en.wikipedia.org/wiki/.pg +// pg : https://en.wikipedia.org/wiki/.pg *.pg // ph : http://www.domains.ph/FAQ2.asp -// Submitted by registry 2008-06-13 +// Submitted by registry ph com.ph net.ph @@ -5558,7 +5595,7 @@ gos.pk info.pk // pl http://www.dns.pl/english/index.html -// updated by .PL registry on 2015-04-28 +// Submitted by registry pl com.pl net.pl @@ -5775,7 +5812,7 @@ org.pn edu.pn net.pn -// post : http://en.wikipedia.org/wiki/.post +// post : https://en.wikipedia.org/wiki/.post post // pr : http://www.nic.pr/index.asp?f=1 @@ -5790,22 +5827,26 @@ pro.pr biz.pr info.pr name.pr -// these aren't mentioned on nic.pr, but on http://en.wikipedia.org/wiki/.pr +// these aren't mentioned on nic.pr, but on https://en.wikipedia.org/wiki/.pr est.pr prof.pr ac.pr -// pro : http://www.nic.pro/support_faq.htm +// pro : http://registry.pro/get-pro pro +aaa.pro aca.pro +acct.pro +avocat.pro bar.pro cpa.pro +eng.pro jur.pro law.pro med.pro -eng.pro +recht.pro -// ps : http://en.wikipedia.org/wiki/.ps +// ps : https://en.wikipedia.org/wiki/.ps // http://www.nic.ps/registration/policy.html#reg ps edu.ps @@ -5827,7 +5868,7 @@ publ.pt com.pt nome.pt -// pw : http://en.wikipedia.org/wiki/.pw +// pw : https://en.wikipedia.org/wiki/.pw pw co.pw ne.pw @@ -5837,7 +5878,7 @@ go.pw belau.pw // py : http://www.nic.py/pautas.html#seccion_9 -// Confirmed by registry 2012-10-03 +// Submitted by registry py com.py coop.py @@ -5860,171 +5901,40 @@ sch.qa // re : http://www.afnic.re/obtenir/chartes/nommage-re/annexe-descriptifs re -com.re asso.re +com.re nom.re // ro : http://www.rotld.ro/ ro +arts.ro com.ro -org.ro -tm.ro -nt.ro -nom.ro +firm.ro info.ro +nom.ro +nt.ro +org.ro rec.ro -arts.ro -firm.ro store.ro +tm.ro www.ro -// rs : http://en.wikipedia.org/wiki/.rs +// rs : https://www.rnids.rs/en/domains/national-domains rs +ac.rs co.rs -org.rs edu.rs -ac.rs gov.rs in.rs +org.rs -// ru : http://www.cctld.ru/ru/docs/aktiv_8.php -// Industry domains +// ru : https://cctld.ru/en/domains/domens_ru/reserved/ ru ac.ru -com.ru edu.ru -int.ru -net.ru -org.ru -pp.ru -// Geographical domains -adygeya.ru -altai.ru -amur.ru -arkhangelsk.ru -astrakhan.ru -bashkiria.ru -belgorod.ru -bir.ru -bryansk.ru -buryatia.ru -cbg.ru -chel.ru -chelyabinsk.ru -chita.ru -chukotka.ru -chuvashia.ru -dagestan.ru -dudinka.ru -e-burg.ru -grozny.ru -irkutsk.ru -ivanovo.ru -izhevsk.ru -jar.ru -joshkar-ola.ru -kalmykia.ru -kaluga.ru -kamchatka.ru -karelia.ru -kazan.ru -kchr.ru -kemerovo.ru -khabarovsk.ru -khakassia.ru -khv.ru -kirov.ru -koenig.ru -komi.ru -kostroma.ru -krasnoyarsk.ru -kuban.ru -kurgan.ru -kursk.ru -lipetsk.ru -magadan.ru -mari.ru -mari-el.ru -marine.ru -mordovia.ru -// mosreg.ru Bug 1090800 - removed at request of Aleksey Konstantinov -msk.ru -murmansk.ru -nalchik.ru -nnov.ru -nov.ru -novosibirsk.ru -nsk.ru -omsk.ru -orenburg.ru -oryol.ru -palana.ru -penza.ru -perm.ru -ptz.ru -rnd.ru -ryazan.ru -sakhalin.ru -samara.ru -saratov.ru -simbirsk.ru -smolensk.ru -spb.ru -stavropol.ru -stv.ru -surgut.ru -tambov.ru -tatarstan.ru -tom.ru -tomsk.ru -tsaritsyn.ru -tsk.ru -tula.ru -tuva.ru -tver.ru -tyumen.ru -udm.ru -udmurtia.ru -ulan-ude.ru -vladikavkaz.ru -vladimir.ru -vladivostok.ru -volgograd.ru -vologda.ru -voronezh.ru -vrn.ru -vyatka.ru -yakutia.ru -yamal.ru -yaroslavl.ru -yekaterinburg.ru -yuzhno-sakhalinsk.ru -// More geographical domains -amursk.ru -baikal.ru -cmw.ru -fareast.ru -jamal.ru -kms.ru -k-uralsk.ru -kustanai.ru -kuzbass.ru -magnitka.ru -mytis.ru -nakhodka.ru -nkz.ru -norilsk.ru -oskol.ru -pyatigorsk.ru -rubtsovsk.ru -snz.ru -syzran.ru -vdonsk.ru -zgrad.ru -// State domains gov.ru +int.ru mil.ru -// Technical domains test.ru // rw : http://www.nic.rw/cgi-bin/policy.pl @@ -6051,7 +5961,7 @@ edu.sa sch.sa // sb : http://www.sbnic.net.sb/ -// Submitted by registry 2008-06-08 +// Submitted by registry sb com.sb edu.sb @@ -6068,7 +5978,7 @@ org.sc edu.sc // sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm -// Submitted by registry 2008-06-17 +// Submitted by registry sd com.sd net.sd @@ -6079,8 +5989,8 @@ tv.sd gov.sd info.sd -// se : http://en.wikipedia.org/wiki/.se -// Submitted by registry 2014-03-18 +// se : https://en.wikipedia.org/wiki/.se +// Submitted by registry se a.se ac.se @@ -6139,19 +6049,19 @@ gov.sh org.sh mil.sh -// si : http://en.wikipedia.org/wiki/.si +// si : https://en.wikipedia.org/wiki/.si si // sj : No registrations at this time. -// Submitted by registry 2008-06-16 +// Submitted by registry sj -// sk : http://en.wikipedia.org/wiki/.sk +// sk : https://en.wikipedia.org/wiki/.sk // list of 2nd level domains ? sk // sl : http://www.nic.sl -// Submitted by registry 2008-06-12 +// Submitted by registry sl com.sl net.sl @@ -6159,10 +6069,10 @@ edu.sl gov.sl org.sl -// sm : http://en.wikipedia.org/wiki/.sm +// sm : https://en.wikipedia.org/wiki/.sm sm -// sn : http://en.wikipedia.org/wiki/.sn +// sn : https://en.wikipedia.org/wiki/.sn sn art.sn com.sn @@ -6178,7 +6088,7 @@ com.so net.so org.so -// sr : http://en.wikipedia.org/wiki/.sr +// sr : https://en.wikipedia.org/wiki/.sr sr // st : http://www.nic.st/html/policyrules/ @@ -6196,7 +6106,7 @@ principe.st saotome.st store.st -// su : http://en.wikipedia.org/wiki/.su +// su : https://en.wikipedia.org/wiki/.su su adygeya.su arkhangelsk.su @@ -6239,12 +6149,12 @@ gob.sv org.sv red.sv -// sx : http://en.wikipedia.org/wiki/.sx -// Confirmed by registry 2012-05-31 +// sx : https://en.wikipedia.org/wiki/.sx +// Submitted by registry sx gov.sx -// sy : http://en.wikipedia.org/wiki/.sy +// sy : https://en.wikipedia.org/wiki/.sy // see also: http://www.gobin.info/domainname/sy.doc sy edu.sy @@ -6254,32 +6164,32 @@ mil.sy com.sy org.sy -// sz : http://en.wikipedia.org/wiki/.sz +// sz : https://en.wikipedia.org/wiki/.sz // http://www.sispa.org.sz/ sz co.sz ac.sz org.sz -// tc : http://en.wikipedia.org/wiki/.tc +// tc : https://en.wikipedia.org/wiki/.tc tc -// td : http://en.wikipedia.org/wiki/.td +// td : https://en.wikipedia.org/wiki/.td td -// tel: http://en.wikipedia.org/wiki/.tel +// tel: https://en.wikipedia.org/wiki/.tel // http://www.telnic.org/ tel -// tf : http://en.wikipedia.org/wiki/.tf +// tf : https://en.wikipedia.org/wiki/.tf tf -// tg : http://en.wikipedia.org/wiki/.tg +// tg : https://en.wikipedia.org/wiki/.tg // http://www.nic.tg/ tg -// th : http://en.wikipedia.org/wiki/.th -// Submitted by registry 2008-06-17 +// th : https://en.wikipedia.org/wiki/.th +// Submitted by registry th ac.th co.th @@ -6307,10 +6217,10 @@ org.tj test.tj web.tj -// tk : http://en.wikipedia.org/wiki/.tk +// tk : https://en.wikipedia.org/wiki/.tk tk -// tl : http://en.wikipedia.org/wiki/.tl +// tl : https://en.wikipedia.org/wiki/.tl tl gov.tl @@ -6325,7 +6235,7 @@ gov.tm mil.tm edu.tm -// tn : http://en.wikipedia.org/wiki/.tn +// tn : https://en.wikipedia.org/wiki/.tn // http://whois.ati.tn/ tn com.tn @@ -6349,8 +6259,8 @@ agrinet.tn defense.tn turen.tn -// to : http://en.wikipedia.org/wiki/.to -// Submitted by registry 2008-06-17 +// to : https://en.wikipedia.org/wiki/.to +// Submitted by registry to com.to gov.to @@ -6359,13 +6269,9 @@ org.to edu.to mil.to -// tp : No registrations at this time. -// Submitted by Ryan Sleevi 2014-01-03 -tp - // subTLDs: https://www.nic.tr/forms/eng/policies.pdf -// and: https://www.nic.tr/forms/politikalar.pdf -// Submitted by 2014-07-19 +// and: https://www.nic.tr/forms/politikalar.pdf +// Submitted by tr com.tr info.tr @@ -6394,7 +6300,7 @@ nc.tr // Used by government agencies of Northern Cyprus gov.nc.tr -// travel : http://en.wikipedia.org/wiki/.travel +// travel : https://en.wikipedia.org/wiki/.travel travel // tt : http://www.nic.tt/ @@ -6417,12 +6323,12 @@ name.tt gov.tt edu.tt -// tv : http://en.wikipedia.org/wiki/.tv +// tv : https://en.wikipedia.org/wiki/.tv // Not listing any 2LDs as reserved since none seem to exist in practice, // Wikipedia notwithstanding. tv -// tw : http://en.wikipedia.org/wiki/.tw +// tw : https://en.wikipedia.org/wiki/.tw tw edu.tw gov.tw @@ -6434,15 +6340,15 @@ idv.tw game.tw ebiz.tw club.tw -網路.tw xn--zf0ao64a.tw -組織.tw +網路.tw xn--uc0atv.tw -商業.tw +組織.tw xn--czrw28b.tw +商業.tw // tz : http://www.tznic.or.tz/index.php/domains -// Confirmed by registry 2013-01-22 +// Submitted by registry tz ac.tz co.tz @@ -6458,7 +6364,7 @@ sc.tz tv.tz // ua : https://hostmaster.ua/policy/?ua -// Submitted by registry 2012-04-27 +// Submitted by registry ua // ua 2LD com.ua @@ -6540,10 +6446,6 @@ zhytomyr.ua zp.ua zt.ua -// Private registries in .ua -co.ua -pp.ua - // ug : https://www.registry.co.ug/ ug co.ug @@ -6555,7 +6457,7 @@ ne.ug com.ug org.ug -// uk : http://en.wikipedia.org/wiki/.uk +// uk : https://en.wikipedia.org/wiki/.uk // Submitted by registry uk ac.uk @@ -6570,7 +6472,7 @@ plc.uk police.uk *.sch.uk -// us : http://en.wikipedia.org/wiki/.us +// us : https://en.wikipedia.org/wiki/.us us dni.us fed.us @@ -6652,7 +6554,7 @@ k12.de.us k12.fl.us k12.ga.us k12.gu.us -// k12.hi.us Bug 614565 - Hawaii has a state-wide DOE login +// k12.hi.us Bug 614565 - Hawaii has a state-wide DOE login k12.ia.us k12.id.us k12.il.us @@ -6669,7 +6571,7 @@ k12.mo.us k12.ms.us k12.mt.us k12.nc.us -// k12.nd.us Bug 1028347 - Removed at request of Travis Rosso +// k12.nd.us Bug 1028347 - Removed at request of Travis Rosso k12.ne.us k12.nh.us k12.nj.us @@ -6683,7 +6585,7 @@ k12.pa.us k12.pr.us k12.ri.us k12.sc.us -// k12.sd.us Bug 934131 - Removed at request of James Booze +// k12.sd.us Bug 934131 - Removed at request of James Booze k12.tn.us k12.tx.us k12.ut.us @@ -6692,7 +6594,7 @@ k12.vt.us k12.va.us k12.wa.us k12.wi.us -// k12.wv.us Bug 947705 - Removed at request of Verne Britton +// k12.wv.us Bug 947705 - Removed at request of Verne Britton k12.wy.us cc.ak.us cc.al.us @@ -6758,7 +6660,7 @@ lib.ca.us lib.co.us lib.ct.us lib.dc.us -lib.de.us +// lib.de.us Issue #243 - Moved to Private section at request of Ed Moore lib.fl.us lib.ga.us lib.gu.us @@ -6802,12 +6704,12 @@ lib.vt.us lib.va.us lib.wa.us lib.wi.us -// lib.wv.us Bug 941670 - Removed at request of Larry W Arnold +// lib.wv.us Bug 941670 - Removed at request of Larry W Arnold lib.wy.us // k12.ma.us contains school districts in Massachusetts. The 4LDs are -// managed indepedently except for private (PVT), charter (CHTR) and -// parochial (PAROCH) schools. Those are delegated dorectly to the -// 5LD operators. +// managed independently except for private (PVT), charter (CHTR) and +// parochial (PAROCH) schools. Those are delegated directly to the +// 5LD operators. pvt.k12.ma.us chtr.k12.ma.us paroch.k12.ma.us @@ -6828,11 +6730,11 @@ com.uz net.uz org.uz -// va : http://en.wikipedia.org/wiki/.va +// va : https://en.wikipedia.org/wiki/.va va -// vc : http://en.wikipedia.org/wiki/.vc -// Submitted by registry 2008-06-13 +// vc : https://en.wikipedia.org/wiki/.vc +// Submitted by registry vc com.vc net.vc @@ -6842,8 +6744,7 @@ mil.vc edu.vc // ve : https://registro.nic.ve/ -// Confirmed by registry 2012-10-04 -// Updated 2014-05-20 - Bug 940478 +// Submitted by registry ve arts.ve co.ve @@ -6863,7 +6764,7 @@ store.ve tec.ve web.ve -// vg : http://en.wikipedia.org/wiki/.vg +// vg : https://en.wikipedia.org/wiki/.vg vg // vi : http://www.nic.vi/newdomainform.htm @@ -6892,7 +6793,7 @@ name.vn pro.vn health.vn -// vu : http://en.wikipedia.org/wiki/.vu +// vu : https://en.wikipedia.org/wiki/.vu // http://www.vunic.vu/ vu com.vu @@ -6903,7 +6804,7 @@ org.vu // wf : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf wf -// ws : http://en.wikipedia.org/wiki/.ws +// ws : https://en.wikipedia.org/wiki/.ws // http://samoanic.ws/index.dhtml ws com.ws @@ -6924,270 +6825,274 @@ yt // xn--mgbaam7a8h ("Emerat", Arabic) : AE // http://nic.ae/english/arabicdomain/rules.jsp -امارات xn--mgbaam7a8h +امارات // xn--y9a3aq ("hye", Armenian) : AM // ISOC AM (operated by .am Registry) -հայ xn--y9a3aq +հայ // xn--54b7fta0cc ("Bangla", Bangla) : BD -বাংলা xn--54b7fta0cc +বাংলা // xn--90ais ("bel", Belarusian/Russian Cyrillic) : BY // Operated by .by registry -бел xn--90ais +бел // xn--fiqs8s ("Zhongguo/China", Chinese, Simplified) : CN // CNNIC // http://cnnic.cn/html/Dir/2005/10/11/3218.htm -中国 xn--fiqs8s +中国 // xn--fiqz9s ("Zhongguo/China", Chinese, Traditional) : CN // CNNIC // http://cnnic.cn/html/Dir/2005/10/11/3218.htm -中國 xn--fiqz9s +中國 // xn--lgbbat1ad8j ("Algeria/Al Jazair", Arabic) : DZ -الجزائر xn--lgbbat1ad8j +الجزائر // xn--wgbh1c ("Egypt/Masr", Arabic) : EG // http://www.dotmasr.eg/ -مصر xn--wgbh1c +مصر + +// xn--e1a4c ("eu", Cyrillic) : EU +xn--e1a4c +ею // xn--node ("ge", Georgian Mkhedruli) : GE -გე xn--node +გე // xn--qxam ("el", Greek) : GR // Hellenic Ministry of Infrastructure, Transport, and Networks -ελ xn--qxam +ελ // xn--j6w193g ("Hong Kong", Chinese) : HK // https://www2.hkirc.hk/register/rules.jsp -香港 xn--j6w193g +香港 // xn--h2brj9c ("Bharat", Devanagari) : IN // India -भारत xn--h2brj9c +भारत // xn--mgbbh1a71e ("Bharat", Arabic) : IN // India -بھارت xn--mgbbh1a71e +بھارت // xn--fpcrj9c3d ("Bharat", Telugu) : IN // India -భారత్ xn--fpcrj9c3d +భారత్ // xn--gecrj9c ("Bharat", Gujarati) : IN // India -ભારત xn--gecrj9c +ભારત // xn--s9brj9c ("Bharat", Gurmukhi) : IN // India -ਭਾਰਤ xn--s9brj9c +ਭਾਰਤ // xn--45brj9c ("Bharat", Bengali) : IN // India -ভারত xn--45brj9c +ভারত // xn--xkc2dl3a5ee0h ("India", Tamil) : IN // India -இந்தியா xn--xkc2dl3a5ee0h +இந்தியா // xn--mgba3a4f16a ("Iran", Persian) : IR -ایران xn--mgba3a4f16a +ایران // xn--mgba3a4fra ("Iran", Arabic) : IR -ايران xn--mgba3a4fra +ايران // xn--mgbtx2b ("Iraq", Arabic) : IQ // Communications and Media Commission -عراق xn--mgbtx2b +عراق // xn--mgbayh7gpa ("al-Ordon", Arabic) : JO // National Information Technology Center (NITC) // Royal Scientific Society, Al-Jubeiha -الاردن xn--mgbayh7gpa +الاردن // xn--3e0b707e ("Republic of Korea", Hangul) : KR -한국 xn--3e0b707e +한국 // xn--80ao21a ("Kaz", Kazakh) : KZ -қаз xn--80ao21a +қаз // xn--fzc2c9e2c ("Lanka", Sinhalese-Sinhala) : LK // http://nic.lk -ලංකා xn--fzc2c9e2c +ලංකා // xn--xkc2al3hye2a ("Ilangai", Tamil) : LK // http://nic.lk -இலங்கை xn--xkc2al3hye2a +இலங்கை // xn--mgbc0a9azcg ("Morocco/al-Maghrib", Arabic) : MA -المغرب xn--mgbc0a9azcg +المغرب // xn--d1alf ("mkd", Macedonian) : MK // MARnet -мкд xn--d1alf +мкд // xn--l1acc ("mon", Mongolian) : MN -мон xn--l1acc +мон // xn--mix891f ("Macao", Chinese, Traditional) : MO // MONIC / HNET Asia (Registry Operator for .mo) -澳門 xn--mix891f +澳門 // xn--mix082f ("Macao", Chinese, Simplified) : MO -澳门 xn--mix082f +澳门 // xn--mgbx4cd0ab ("Malaysia", Malay) : MY -مليسيا xn--mgbx4cd0ab +مليسيا // xn--mgb9awbf ("Oman", Arabic) : OM -عمان xn--mgb9awbf +عمان // xn--mgbai9azgqp6j ("Pakistan", Urdu/Arabic) : PK -پاکستان xn--mgbai9azgqp6j +پاکستان // xn--mgbai9a5eva00b ("Pakistan", Urdu/Arabic, variant) : PK -پاكستان xn--mgbai9a5eva00b +پاكستان // xn--ygbi2ammx ("Falasteen", Arabic) : PS // The Palestinian National Internet Naming Authority (PNINA) // http://www.pnina.ps -فلسطين xn--ygbi2ammx +فلسطين // xn--90a3ac ("srb", Cyrillic) : RS -// http://www.rnids.rs/en/the-.срб-domain -срб +// https://www.rnids.rs/en/domains/national-domains xn--90a3ac -пр.срб +срб xn--o1ac.xn--90a3ac -орг.срб +пр.срб xn--c1avg.xn--90a3ac -обр.срб +орг.срб xn--90azh.xn--90a3ac -од.срб +обр.срб xn--d1at.xn--90a3ac -упр.срб +од.срб xn--o1ach.xn--90a3ac -ак.срб +упр.срб xn--80au.xn--90a3ac +ак.срб // xn--p1ai ("rf", Russian-Cyrillic) : RU // http://www.cctld.ru/en/docs/rulesrf.php -рф xn--p1ai +рф // xn--wgbl6a ("Qatar", Arabic) : QA // http://www.ict.gov.qa/ -قطر xn--wgbl6a +قطر // xn--mgberp4a5d4ar ("AlSaudiah", Arabic) : SA // http://www.nic.net.sa/ -السعودية xn--mgberp4a5d4ar +السعودية -// xn--mgberp4a5d4a87g ("AlSaudiah", Arabic, variant) : SA -السعودیة +// xn--mgberp4a5d4a87g ("AlSaudiah", Arabic, variant) : SA xn--mgberp4a5d4a87g +السعودیة // xn--mgbqly7c0a67fbc ("AlSaudiah", Arabic, variant) : SA -السعودیۃ xn--mgbqly7c0a67fbc +السعودیۃ // xn--mgbqly7cvafr ("AlSaudiah", Arabic, variant) : SA -السعوديه xn--mgbqly7cvafr +السعوديه // xn--mgbpl2fh ("sudan", Arabic) : SD // Operated by .sd registry -سودان xn--mgbpl2fh +سودان // xn--yfro4i67o Singapore ("Singapore", Chinese) : SG -新加坡 xn--yfro4i67o +新加坡 // xn--clchc0ea0b2g2a9gcd ("Singapore", Tamil) : SG -சிங்கப்பூர் xn--clchc0ea0b2g2a9gcd +சிங்கப்பூர் // xn--ogbpf8fl ("Syria", Arabic) : SY -سورية xn--ogbpf8fl +سورية // xn--mgbtf8fl ("Syria", Arabic, variant) : SY -سوريا xn--mgbtf8fl +سوريا // xn--o3cw4h ("Thai", Thai) : TH // http://www.thnic.co.th -ไทย xn--o3cw4h +ไทย // xn--pgbs0dh ("Tunisia", Arabic) : TN // http://nic.tn -تونس xn--pgbs0dh +تونس // xn--kpry57d ("Taiwan", Chinese, Traditional) : TW // http://www.twnic.net/english/dn/dn_07a.htm -台灣 xn--kpry57d +台灣 // xn--kprw13d ("Taiwan", Chinese, Simplified) : TW // http://www.twnic.net/english/dn/dn_07a.htm -台湾 xn--kprw13d +台湾 // xn--nnx388a ("Taiwan", Chinese, variant) : TW -臺灣 xn--nnx388a +臺灣 // xn--j1amh ("ukr", Cyrillic) : UA -укр xn--j1amh +укр // xn--mgb2ddes ("AlYemen", Arabic) : YE -اليمن xn--mgb2ddes +اليمن // xxx : http://icmregistry.com xxx @@ -7195,30 +7100,76 @@ xxx // ye : http://www.y.net.ye/services/domain_name.htm *.ye -// za : http://www.zadna.org.za/slds.html -*.za - -// zm : http://en.wikipedia.org/wiki/.zm -*.zm - -// zw : http://en.wikipedia.org/wiki/.zw +// za : http://www.zadna.org.za/content/page/domain-information +ac.za +agric.za +alt.za +co.za +edu.za +gov.za +grondar.za +law.za +mil.za +net.za +ngo.za +nis.za +nom.za +org.za +school.za +tm.za +web.za + +// zm : https://zicta.zm/ +// Submitted by registry +zm +ac.zm +biz.zm +co.zm +com.zm +edu.zm +gov.zm +info.zm +mil.zm +net.zm +org.zm +sch.zm + +// zw : https://en.wikipedia.org/wiki/.zw *.zw -// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 2015-05-06T09:31:08Z +// List of new gTLDs imported from https://newgtlds.icann.org/newgtlds.csv on 2016-11-29T01:06:51Z // aaa : 2015-02-26 American Automobile Association, Inc. aaa +// aarp : 2015-05-21 AARP +aarp + +// abarth : 2015-07-30 Fiat Chrysler Automobiles N.V. +abarth + // abb : 2014-10-24 ABB Ltd abb // abbott : 2014-07-24 Abbott Laboratories, Inc. abbott +// abbvie : 2015-07-30 AbbVie Inc. +abbvie + +// abc : 2015-07-30 Disney Enterprises, Inc. +abc + +// able : 2015-06-25 Able Inc. +able + // abogado : 2014-04-24 Top Level Domain Holdings Limited abogado +// abudhabi : 2015-07-30 Abu Dhabi Systems and Information Centre +abudhabi + // academy : 2013-11-07 Half Oaks, LLC academy @@ -7240,6 +7191,9 @@ active // actor : 2013-12-12 United TLD Holdco Ltd. actor +// adac : 2015-07-16 Allgemeiner Deutscher Automobil-Club e.V. (ADAC) +adac + // ads : 2014-12-04 Charleston Road Registry Inc. ads @@ -7249,15 +7203,18 @@ adult // aeg : 2015-03-19 Aktiebolaget Electrolux aeg +// aetna : 2015-05-21 Aetna Life Insurance Company +aetna + +// afamilycompany : 2015-07-23 Johnson Shareholdings, Inc. +afamilycompany + // afl : 2014-10-02 Australian Football League afl // africa : 2014-03-24 ZA Central Registry NPC trading as Registry.Africa africa -// africamagic : 2015-03-05 Electronic Media Network (Pty) Ltd -africamagic - // agakhan : 2015-04-23 Fondation Aga Khan (Aga Khan Foundation) agakhan @@ -7267,6 +7224,12 @@ agency // aig : 2014-12-18 American International Group, Inc. aig +// aigo : 2015-08-06 aigo Digital Technology Co,Ltd. +aigo + +// airbus : 2015-07-30 Airbus S.A.S. +airbus + // airforce : 2014-03-06 United TLD Holdco Ltd. airforce @@ -7276,6 +7239,9 @@ airtel // akdn : 2015-04-23 Fondation Aga Khan (Aga Khan Foundation) akdn +// alfaromeo : 2015-07-31 Fiat Chrysler Automobiles N.V. +alfaromeo + // alibaba : 2015-01-15 Alibaba Group Holding Limited alibaba @@ -7285,9 +7251,33 @@ alipay // allfinanz : 2014-07-03 Allfinanz Deutsche Vermögensberatung Aktiengesellschaft allfinanz +// allstate : 2015-07-31 Allstate Fire and Casualty Insurance Company +allstate + +// ally : 2015-06-18 Ally Financial Inc. +ally + // alsace : 2014-07-02 REGION D ALSACE alsace +// alstom : 2015-07-30 ALSTOM +alstom + +// americanexpress : 2015-07-31 American Express Travel Related Services Company, Inc. +americanexpress + +// americanfamily : 2015-07-23 AmFam, Inc. +americanfamily + +// amex : 2015-07-31 American Express Travel Related Services Company, Inc. +amex + +// amfam : 2015-07-23 AmFam, Inc. +amfam + +// amica : 2015-05-28 Amica Mutual Insurance Company +amica + // amsterdam : 2014-07-24 Gemeente Amsterdam amsterdam @@ -7300,12 +7290,27 @@ android // anquan : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD. anquan +// anz : 2015-07-31 Australia and New Zealand Banking Group Limited +anz + +// aol : 2015-09-17 AOL Inc. +aol + // apartments : 2014-12-11 June Maple, LLC apartments +// app : 2015-05-14 Charleston Road Registry Inc. +app + +// apple : 2015-05-14 Apple Inc. +apple + // aquarelle : 2014-07-24 Aquarelle.com aquarelle +// arab : 2015-11-12 League of Arab States +arab + // aramco : 2014-11-20 Aramco Services Company aramco @@ -7315,25 +7320,43 @@ archi // army : 2014-03-06 United TLD Holdco Ltd. army +// art : 2016-03-24 UK Creative Ideas Limited +art + // arte : 2014-12-11 Association Relative à la Télévision Européenne G.E.I.E. arte +// asda : 2015-07-31 Wal-Mart Stores, Inc. +asda + // associates : 2014-03-06 Baxter Hill, LLC associates +// athleta : 2015-07-30 The Gap, Inc. +athleta + // attorney : 2014-03-20 attorney // auction : 2014-03-20 auction +// audi : 2015-05-21 AUDI Aktiengesellschaft +audi + +// audible : 2015-06-25 Amazon EU S.à r.l. +audible + // audio : 2014-03-20 Uniregistry, Corp. audio +// auspost : 2015-08-13 Australian Postal Corporation +auspost + // author : 2014-12-18 Amazon EU S.à r.l. author -// auto : 2014-11-13 Uniregistry, Corp. +// auto : 2014-11-13 auto // autos : 2014-01-09 DERAutos, LLC @@ -7342,6 +7365,9 @@ autos // avianca : 2015-01-08 Aerovias del Continente Americano S.A. Avianca avianca +// aws : 2015-06-25 Amazon EU S.à r.l. +aws + // axa : 2013-12-19 AXA SA axa @@ -7354,6 +7380,12 @@ baby // baidu : 2015-01-08 Baidu, Inc. baidu +// banamex : 2015-07-30 Citigroup Inc. +banamex + +// bananarepublic : 2015-07-31 The Gap, Inc. +bananarepublic + // band : 2014-06-12 band @@ -7372,9 +7404,18 @@ barclaycard // barclays : 2014-11-20 Barclays Bank PLC barclays +// barefoot : 2015-06-11 Gallo Vineyards, Inc. +barefoot + // bargains : 2013-11-14 Half Hallow, LLC bargains +// baseball : 2015-10-29 MLB Advanced Media DH, LLC +baseball + +// basketball : 2015-08-20 Fédération Internationale de Basketball (FIBA) +basketball + // bauhaus : 2014-04-17 Werkhaus GmbH bauhaus @@ -7384,6 +7425,9 @@ bayern // bbc : 2014-12-18 British Broadcasting Corporation bbc +// bbt : 2015-07-23 BB&T Corporation +bbt + // bbva : 2014-10-02 BANCO BILBAO VIZCAYA ARGENTARIA, S.A. bbva @@ -7393,6 +7437,12 @@ bcg // bcn : 2014-07-24 Municipi de Barcelona bcn +// beats : 2015-05-14 Beats Electronics, LLC +beats + +// beauty : 2015-12-03 L'Oréal +beauty + // beer : 2014-01-09 Top Level Domain Holdings Limited beer @@ -7405,6 +7455,12 @@ berlin // best : 2013-12-19 BestTLD Pty Ltd best +// bestbuy : 2015-07-31 BBY Solutions, Inc. +bestbuy + +// bet : 2015-05-07 Afilias plc +bet + // bharti : 2014-01-09 Bharti Enterprises (Holding) Private Limited bharti @@ -7432,6 +7488,15 @@ black // blackfriday : 2014-01-16 Uniregistry, Corp. blackfriday +// blanco : 2015-07-16 BLANCO GmbH + Co KG +blanco + +// blockbuster : 2015-07-30 Dish DBS Corporation +blockbuster + +// blog : 2015-05-14 +blog + // bloomberg : 2014-07-17 Bloomberg IP Holdings LLC bloomberg @@ -7453,6 +7518,12 @@ bnpparibas // boats : 2014-12-04 DERBoats, LLC boats +// boehringer : 2015-07-09 Boehringer Ingelheim International GmbH +boehringer + +// bofa : 2015-07-31 NMS Services, Inc. +bofa + // bom : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br bom @@ -7462,15 +7533,33 @@ bond // boo : 2014-01-30 Charleston Road Registry Inc. boo +// book : 2015-08-27 Amazon EU S.à r.l. +book + +// booking : 2015-07-16 Booking.com B.V. +booking + // boots : 2015-01-08 THE BOOTS COMPANY PLC boots +// bosch : 2015-06-18 Robert Bosch GMBH +bosch + +// bostik : 2015-05-28 Bostik SA +bostik + +// boston : 2015-12-10 +boston + // bot : 2014-12-18 Amazon EU S.à r.l. bot // boutique : 2013-11-14 Over Galley, LLC boutique +// box : 2015-11-12 NS1 Limited +box + // bradesco : 2014-12-18 Banco Bradesco S.A. bradesco @@ -7492,6 +7581,9 @@ brussels // budapest : 2013-11-21 Top Level Domain Holdings Limited budapest +// bugatti : 2015-07-23 Bugatti International SA +bugatti + // build : 2013-11-07 Plan Bee LLC build @@ -7522,6 +7614,12 @@ cal // call : 2014-12-18 Amazon EU S.à r.l. call +// calvinklein : 2015-07-30 PVH gTLD Holdings LLC +calvinklein + +// cam : 2016-04-21 AC Webconnecting Holding B.V. +cam + // camera : 2013-08-27 Atomic Maple, LLC camera @@ -7540,7 +7638,10 @@ capetown // capital : 2014-03-06 Delta Mill, LLC capital -// car : 2015-01-22 Charleston Road Registry Inc. +// capitalone : 2015-08-06 Capital One Financial Corporation +capitalone + +// car : 2015-01-22 car // caravan : 2013-12-12 Caravan International, Inc. @@ -7558,7 +7659,7 @@ career // careers : 2013-10-02 Wild Corner, LLC careers -// cars : 2014-11-13 Uniregistry, Corp. +// cars : 2014-11-13 cars // cartier : 2014-06-23 Richemont DNS Inc. @@ -7567,6 +7668,12 @@ cartier // casa : 2013-11-21 Top Level Domain Holdings Limited casa +// case : 2015-09-03 CNH Industrial N.V. +case + +// caseih : 2015-09-03 CNH Industrial N.V. +caseih + // cash : 2014-03-06 Delta Lake, LLC cash @@ -7576,12 +7683,21 @@ casino // catering : 2013-12-05 New Falls. LLC catering +// catholic : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) +catholic + // cba : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA cba // cbn : 2014-08-22 The Christian Broadcasting Network, Inc. cbn +// cbre : 2015-07-02 CBRE, Inc. +cbre + +// cbs : 2015-08-06 CBS Domains Inc. +cbs + // ceb : 2015-04-09 The Corporate Executive Board Company ceb @@ -7615,6 +7731,9 @@ chat // cheap : 2013-11-14 Sand Cover, LLC cheap +// chintai : 2015-06-11 CHINTAI Corporation +chintai + // chloe : 2014-10-16 Richemont DNS Inc. chloe @@ -7624,6 +7743,9 @@ christmas // chrome : 2014-07-24 Charleston Road Registry Inc. chrome +// chrysler : 2015-07-30 FCA US LLC. +chrysler + // church : 2014-02-06 Holly Fields, LLC church @@ -7636,6 +7758,12 @@ circle // cisco : 2014-12-22 Cisco Technology, Inc. cisco +// citadel : 2015-07-23 Citadel Domain LLC +citadel + +// citi : 2015-07-30 Citigroup Inc. +citi + // citic : 2014-01-09 CITIC Group Corporation citic @@ -7657,6 +7785,9 @@ click // clinic : 2014-03-20 Goose Park, LLC clinic +// clinique : 2015-10-01 The Estée Lauder Companies Inc. +clinique + // clothing : 2013-08-27 Steel Lake, LLC clothing @@ -7666,6 +7797,9 @@ cloud // club : 2013-11-08 .CLUB DOMAINS, LLC club +// clubmed : 2015-06-25 Club Méditerranée S.A. +clubmed + // coach : 2014-10-09 Koko Island, LLC coach @@ -7681,6 +7815,9 @@ college // cologne : 2014-02-05 NetCologne Gesellschaft für Telekommunikation mbH cologne +// comcast : 2015-07-23 Comcast IP Holdings I, LLC +comcast + // commbank : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA commbank @@ -7690,6 +7827,9 @@ community // company : 2013-11-07 Silver Avenue, LLC company +// compare : 2015-10-08 iSelect Ltd +compare + // computer : 2013-10-24 Pine Mill, LLC computer @@ -7714,6 +7854,9 @@ contractors // cooking : 2013-11-21 Top Level Domain Holdings Limited cooking +// cookingchannel : 2015-07-02 Lifestyle Domain Holdings, Inc. +cookingchannel + // cool : 2013-11-14 Koko Lake, LLC cool @@ -7750,6 +7893,9 @@ crown // crs : 2014-04-03 Federated Co-operatives Limited crs +// cruise : 2015-12-10 Viking River Cruises (Bermuda) Ltd. +cruise + // cruises : 2013-12-05 Spring Way, LLC cruises @@ -7774,6 +7920,9 @@ dad // dance : 2013-10-24 United TLD Holdco Ltd. dance +// data : 2016-06-02 Dish DBS Corporation +data + // date : 2014-11-20 dot Date Limited date @@ -7789,6 +7938,12 @@ day // dclk : 2014-11-20 Charleston Road Registry Inc. dclk +// dds : 2015-05-07 Top Level Domain Holdings Limited +dds + +// deal : 2015-06-25 Amazon EU S.à r.l. +deal + // dealer : 2014-12-22 Dealer Dot Com, Inc. dealer @@ -7804,6 +7959,9 @@ delivery // dell : 2014-10-24 Dell Inc. dell +// deloitte : 2015-07-31 Deloitte Touche Tohmatsu +deloitte + // delta : 2015-02-19 Delta Air Lines, Inc. delta @@ -7825,6 +7983,9 @@ design // dev : 2014-10-16 Charleston Road Registry Inc. dev +// dhl : 2015-07-23 Deutsche Post AG +dhl + // diamonds : 2013-09-22 John Edge, LLC diamonds @@ -7843,12 +8004,27 @@ directory // discount : 2014-03-06 Holly Hill, LLC discount +// discover : 2015-07-23 Discover Financial Services +discover + +// dish : 2015-07-30 Dish DBS Corporation +dish + +// diy : 2015-11-05 Lifestyle Domain Holdings, Inc. +diy + // dnp : 2013-12-13 Dai Nippon Printing Co., Ltd. dnp // docs : 2014-10-16 Charleston Road Registry Inc. docs +// doctor : 2016-06-02 Brice Trail, LLC +doctor + +// dodge : 2015-07-30 FCA US LLC. +dodge + // dog : 2014-12-04 Koko Mill, LLC dog @@ -7858,8 +8034,8 @@ doha // domains : 2013-10-17 Sugar Cross, LLC domains -// doosan : 2014-04-03 Doosan Corporation -doosan +// dot : 2015-05-21 Dish DBS Corporation +dot // download : 2014-11-20 dot Support Limited download @@ -7867,24 +8043,45 @@ download // drive : 2015-03-05 Charleston Road Registry Inc. drive -// dstv : 2015-03-12 MultiChoice (Proprietary) Limited -dstv +// dtv : 2015-06-04 Dish DBS Corporation +dtv // dubai : 2015-01-01 Dubai Smart Government Department dubai +// duck : 2015-07-23 Johnson Shareholdings, Inc. +duck + +// dunlop : 2015-07-02 The Goodyear Tire & Rubber Company +dunlop + +// duns : 2015-08-06 The Dun & Bradstreet Corporation +duns + +// dupont : 2015-06-25 E. I. du Pont de Nemours and Company +dupont + // durban : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry durban // dvag : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG dvag +// dvr : 2016-05-26 Hughes Satellite Systems Corporation +dvr + +// dwg : 2015-07-23 Autodesk, Inc. +dwg + // earth : 2014-12-04 Interlink Co., Ltd. earth // eat : 2014-01-23 Charleston Road Registry Inc. eat +// eco : 2016-07-08 Big Room Inc. +eco + // edeka : 2014-12-18 EDEKA Verband kaufmännischer Genossenschaften e.V. edeka @@ -7909,12 +8106,18 @@ engineering // enterprises : 2013-09-20 Snow Oaks, LLC enterprises +// epost : 2015-07-23 Deutsche Post AG +epost + // epson : 2014-12-04 Seiko Epson Corporation epson // equipment : 2013-08-27 Corn Station, LLC equipment +// ericsson : 2015-07-09 Telefonaktiebolaget L M Ericsson +ericsson + // erni : 2014-04-03 ERNI Group Holding AG erni @@ -7924,6 +8127,12 @@ esq // estate : 2013-08-27 Trixy Park, LLC estate +// esurance : 2015-07-23 Esurance Insurance Company +esurance + +// etisalat : 2015-09-03 Emirates Telecommunications Corporation (trading as Etisalat) +etisalat + // eurovision : 2014-04-24 European Broadcasting Union (EBU) eurovision @@ -7948,6 +8157,9 @@ exposed // express : 2015-02-11 Sea Sunset, LLC express +// extraspace : 2015-05-14 Extra Space Storage LLC +extraspace + // fage : 2014-12-18 Fage International S.A. fage @@ -7960,7 +8172,7 @@ fairwinds // faith : 2014-11-20 dot Faith Limited faith -// family : 2015-04-02 Bitter Galley, LLC +// family : 2015-04-02 family // fan : 2014-03-06 @@ -7972,19 +8184,37 @@ fans // farm : 2013-11-07 Just Maple, LLC farm +// farmers : 2015-07-09 Farmers Insurance Exchange +farmers + // fashion : 2014-07-03 Top Level Domain Holdings Limited fashion // fast : 2014-12-18 Amazon EU S.à r.l. fast +// fedex : 2015-08-06 Federal Express Corporation +fedex + // feedback : 2013-12-19 Top Level Spectrum, Inc. feedback +// ferrari : 2015-07-31 Fiat Chrysler Automobiles N.V. +ferrari + // ferrero : 2014-12-18 Ferrero Trading Lux S.A. ferrero -// film : 2015-01-08 Motion Picture Domain Registry Pty Ltd +// fiat : 2015-07-31 Fiat Chrysler Automobiles N.V. +fiat + +// fidelity : 2015-07-30 Fidelity Brokerage Services LLC +fidelity + +// fido : 2015-08-06 Rogers Communications Partnership +fido + +// film : 2015-01-08 Motion Picture Domain Registry Pty Ltd film // final : 2014-10-16 Núcleo de Informação e Coordenação do Ponto BR - NIC.br @@ -7996,6 +8226,9 @@ finance // financial : 2014-03-06 Just Cover, LLC financial +// fire : 2015-06-25 Amazon EU S.à r.l. +fire + // firestone : 2014-12-18 Bridgestone Corporation firestone @@ -8020,21 +8253,27 @@ flickr // flights : 2013-12-05 Fox Station, LLC flights +// flir : 2015-07-23 FLIR Systems, Inc. +flir + // florist : 2013-11-07 Half Cypress, LLC florist // flowers : 2014-10-09 Uniregistry, Corp. flowers -// flsmidth : 2014-07-24 FLSmidth A/S -flsmidth - // fly : 2014-05-08 Charleston Road Registry Inc. fly // foo : 2014-01-23 Charleston Road Registry Inc. foo +// food : 2016-04-21 Lifestyle Domain Holdings, Inc. +food + +// foodnetwork : 2015-07-02 Lifestyle Domain Holdings, Inc. +foodnetwork + // football : 2014-12-18 Foggy Farms, LLC football @@ -8053,15 +8292,39 @@ forum // foundation : 2013-12-05 John Dale, LLC foundation +// fox : 2015-09-11 FOX Registry, LLC +fox + +// free : 2015-12-10 Amazon EU S.à r.l. +free + +// fresenius : 2015-07-30 Fresenius Immobilien-Verwaltungs-GmbH +fresenius + // frl : 2014-05-15 FRLregistry B.V. frl // frogans : 2013-12-19 OP3FT frogans +// frontdoor : 2015-07-02 Lifestyle Domain Holdings, Inc. +frontdoor + // frontier : 2015-02-05 Frontier Communications Corporation frontier +// ftr : 2015-07-16 Frontier Communications Corporation +ftr + +// fujitsu : 2015-07-30 Fujitsu Limited +fujitsu + +// fujixerox : 2015-07-23 Xerox DNHC LLC +fujixerox + +// fun : 2016-01-14 +fun + // fund : 2014-03-20 John Castle, LLC fund @@ -8080,9 +8343,21 @@ gal // gallery : 2013-09-13 Sugar House, LLC gallery +// gallo : 2015-06-11 Gallo Vineyards, Inc. +gallo + // gallup : 2015-02-19 Gallup, Inc. gallup +// game : 2015-05-28 Uniregistry, Corp. +game + +// games : 2015-05-28 +games + +// gap : 2015-07-31 The Gap, Inc. +gap + // garden : 2014-06-26 Top Level Domain Holdings Limited garden @@ -8101,6 +8376,9 @@ gent // genting : 2015-03-12 Resorts World Inc Pte. Ltd. genting +// george : 2015-07-31 Wal-Mart Stores, Inc. +george + // ggee : 2014-01-09 GMO Internet, Inc. ggee @@ -8116,6 +8394,9 @@ gives // giving : 2014-11-13 Giving Limited giving +// glade : 2015-07-23 Johnson Shareholdings, Inc. +glade + // glass : 2013-11-07 Black Cover, LLC glass @@ -8131,12 +8412,18 @@ globo // gmail : 2014-05-01 Charleston Road Registry Inc. gmail +// gmbh : 2016-01-29 Extra Dynamite, LLC +gmbh + // gmo : 2014-01-09 GMO Internet, Inc. gmo // gmx : 2014-04-24 1&1 Mail & Media GmbH gmx +// godaddy : 2015-07-23 Go Daddy East, LLC +godaddy + // gold : 2015-01-22 June Edge, LLC gold @@ -8149,6 +8436,12 @@ golf // goo : 2014-12-18 NTT Resonant Inc. goo +// goodhands : 2015-07-31 Allstate Fire and Casualty Insurance Company +goodhands + +// goodyear : 2015-07-02 The Goodyear Tire & Rubber Company +goodyear + // goog : 2014-11-20 Charleston Road Registry Inc. goog @@ -8161,8 +8454,8 @@ gop // got : 2014-12-18 Amazon EU S.à r.l. got -// gotv : 2015-03-12 MultiChoice (Proprietary) Limited -gotv +// grainger : 2015-05-07 Grainger Registry Services, LLC +grainger // graphics : 2013-09-13 Over Madison, LLC graphics @@ -8176,9 +8469,15 @@ green // gripe : 2014-03-06 Corn Sunset, LLC gripe +// grocery : 2016-06-16 Wal-Mart Stores, Inc. +grocery + // group : 2014-08-15 Romeo Town, LLC group +// guardian : 2015-07-30 The Guardian Life Insurance Company of America +guardian + // gucci : 2014-11-13 Guccio Gucci S.p.a. gucci @@ -8194,6 +8493,9 @@ guitars // guru : 2013-08-27 Pioneer Cypress, LLC guru +// hair : 2015-12-03 L'Oréal +hair + // hamburg : 2014-02-20 Hamburg Top-Level-Domain GmbH hamburg @@ -8203,6 +8505,12 @@ hangout // haus : 2013-12-05 haus +// hbo : 2015-07-30 HBO Registry Services, Inc. +hbo + +// hdfc : 2015-07-30 HOUSING DEVELOPMENT FINANCE CORPORATION LIMITED +hdfc + // hdfcbank : 2015-02-12 HDFC Bank Limited hdfcbank @@ -8224,15 +8532,24 @@ here // hermes : 2014-07-10 HERMES INTERNATIONAL hermes +// hgtv : 2015-07-02 Lifestyle Domain Holdings, Inc. +hgtv + // hiphop : 2014-03-06 Uniregistry, Corp. hiphop +// hisamitsu : 2015-07-16 Hisamitsu Pharmaceutical Co.,Inc. +hisamitsu + // hitachi : 2014-10-31 Hitachi, Ltd. hitachi -// hiv : 2014-03-13 dotHIV gemeinnuetziger e.V. +// hiv : 2014-03-13 hiv +// hkt : 2015-05-14 PCCW-HKT DataCom Services Limited +hkt + // hockey : 2015-03-19 Half Willow, LLC hockey @@ -8245,24 +8562,42 @@ holiday // homedepot : 2015-04-02 Homer TLC, Inc. homedepot +// homegoods : 2015-07-16 The TJX Companies, Inc. +homegoods + // homes : 2014-01-09 DERHomes, LLC homes +// homesense : 2015-07-16 The TJX Companies, Inc. +homesense + // honda : 2014-12-18 Honda Motor Co., Ltd. honda +// honeywell : 2015-07-23 Honeywell GTLD LLC +honeywell + // horse : 2013-11-21 Top Level Domain Holdings Limited horse +// hospital : 2016-10-20 Ruby Pike, LLC +hospital + // host : 2014-04-17 DotHost Inc. host // hosting : 2014-05-29 Uniregistry, Corp. hosting +// hot : 2015-08-27 Amazon EU S.à r.l. +hot + // hoteles : 2015-03-05 Travel Reservations SRL hoteles +// hotels : 2016-04-07 Booking.com B.V. +hotels + // hotmail : 2014-12-18 Microsoft Corporation hotmail @@ -8278,6 +8613,15 @@ hsbc // htc : 2015-04-02 HTC corporation htc +// hughes : 2015-07-30 Hughes Satellite Systems Corporation +hughes + +// hyatt : 2015-07-30 Hyatt GTLD, L.L.C. +hyatt + +// hyundai : 2015-07-09 Hyundai Motor Company +hyundai + // ibm : 2014-07-31 International Business Machines Corporation ibm @@ -8290,12 +8634,24 @@ ice // icu : 2015-01-08 One.com A/S icu +// ieee : 2015-07-23 IEEE Global LLC +ieee + // ifm : 2014-01-30 ifm electronic gmbh ifm // iinet : 2014-07-03 Connect West Pty. Ltd. iinet +// ikano : 2015-07-09 Ikano S.A. +ikano + +// imamat : 2015-08-06 Fondation Aga Khan (Aga Khan Foundation) +imamat + +// imdb : 2015-06-25 Amazon EU S.à r.l. +imdb + // immo : 2014-07-10 Auburn Bloom, LLC immo @@ -8323,9 +8679,15 @@ insurance // insure : 2014-03-20 Pioneer Willow, LLC insure +// intel : 2015-08-06 Intel Corporation +intel + // international : 2013-11-07 Wild Way, LLC international +// intuit : 2015-07-30 Intuit Administrative Services, Inc. +intuit + // investments : 2014-03-20 Holly Glen, LLC investments @@ -8338,6 +8700,9 @@ irish // iselect : 2015-02-11 iSelect Ltd iselect +// ismaili : 2015-08-06 Fondation Aga Khan (Aga Khan Foundation) +ismaili + // ist : 2014-08-28 Istanbul Metropolitan Municipality ist @@ -8347,6 +8712,12 @@ istanbul // itau : 2014-10-02 Itau Unibanco Holding S.A. itau +// itv : 2015-07-09 ITV Services Limited +itv + +// iveco : 2015-09-03 CNH Industrial N.V. +iveco + // iwc : 2014-06-23 Richemont DNS Inc. iwc @@ -8362,7 +8733,10 @@ jcb // jcp : 2015-04-23 JCP Media, Inc. jcp -// jetzt : 2014-01-09 New TLD Company AB +// jeep : 2015-07-30 FCA US LLC. +jeep + +// jetzt : 2014-01-09 jetzt // jewelry : 2015-03-05 Wild Bloom, LLC @@ -8380,6 +8754,9 @@ jll // jmp : 2015-03-26 Matrix IP LLC jmp +// jnj : 2015-06-18 Johnson & Johnson Services, Inc. +jnj + // joburg : 2014-03-24 ZA Central Registry NPC trading as ZA Central Registry joburg @@ -8398,6 +8775,9 @@ jprs // juegos : 2014-03-20 Uniregistry, Corp. juegos +// juniper : 2015-07-30 JUNIPER NETWORKS, INC. +juniper + // kaufen : 2013-11-07 United TLD Holdco Ltd. kaufen @@ -8416,12 +8796,18 @@ kerryproperties // kfh : 2014-12-04 Kuwait Finance House kfh +// kia : 2015-07-09 KIA MOTORS CORPORATION +kia + // kim : 2013-09-23 Afilias Limited kim // kinder : 2014-11-07 Ferrero Trading Lux S.A. kinder +// kindle : 2015-06-25 Amazon EU S.à r.l. +kindle + // kitchen : 2013-09-20 Just Goodbye, LLC kitchen @@ -8434,6 +8820,9 @@ koeln // komatsu : 2015-01-08 Komatsu Ltd. komatsu +// kosher : 2015-08-20 Kosher Marketing Assets LLC +kosher + // kpmg : 2015-04-23 KPMG International Cooperative (KPMG International Genossenschaft) kpmg @@ -8449,30 +8838,48 @@ kred // kuokgroup : 2015-04-09 Kerry Trading Co. Limited kuokgroup -// kyknet : 2015-03-05 Electronic Media Network (Pty) Ltd -kyknet - // kyoto : 2014-11-07 Academic Institution: Kyoto Jyoho Gakuen kyoto // lacaixa : 2014-01-09 CAIXA D'ESTALVIS I PENSIONS DE BARCELONA lacaixa +// ladbrokes : 2015-08-06 LADBROKES INTERNATIONAL PLC +ladbrokes + +// lamborghini : 2015-06-04 Automobili Lamborghini S.p.A. +lamborghini + +// lamer : 2015-10-01 The Estée Lauder Companies Inc. +lamer + // lancaster : 2015-02-12 LANCASTER lancaster +// lancia : 2015-07-31 Fiat Chrysler Automobiles N.V. +lancia + +// lancome : 2015-07-23 L'Oréal +lancome + // land : 2013-09-10 Pine Moon, LLC land // landrover : 2014-11-13 Jaguar Land Rover Ltd landrover +// lanxess : 2015-07-30 LANXESS Corporation +lanxess + // lasalle : 2015-04-02 Jones Lang LaSalle Incorporated lasalle // lat : 2014-10-16 ECOM-LAC Federaciòn de Latinoamèrica y el Caribe para Internet y el Comercio Electrònico lat +// latino : 2015-07-30 Dish DBS Corporation +latino + // latrobe : 2014-06-16 La Trobe University latrobe @@ -8491,9 +8898,15 @@ lease // leclerc : 2014-08-07 A.C.D. LEC Association des Centres Distributeurs Edouard Leclerc leclerc +// lefrak : 2015-07-16 LeFrak Organization, Inc. +lefrak + // legal : 2014-10-16 Blue Falls, LLC legal +// lego : 2015-07-16 LEGO Juris A/S +lego + // lexus : 2015-04-23 TOYOTA MOTOR CORPORATION lexus @@ -8521,6 +8934,9 @@ lighting // like : 2014-12-18 Amazon EU S.à r.l. like +// lilly : 2015-07-31 Eli Lilly and Company +lilly + // limited : 2014-03-06 Big Fest, LLC limited @@ -8536,9 +8952,15 @@ linde // link : 2013-11-14 Uniregistry, Corp. link -// live : 2014-12-04 Half Woods, LLC +// lipsy : 2015-06-25 Lipsy Ltd +lipsy + +// live : 2014-12-04 live +// living : 2015-07-30 Lifestyle Domain Holdings, Inc. +living + // lixil : 2015-03-19 LIXIL Group Corporation lixil @@ -8548,6 +8970,15 @@ loan // loans : 2014-03-20 June Woods, LLC loans +// locker : 2015-06-04 Dish DBS Corporation +locker + +// locus : 2015-06-25 Locus Analytics LLC +locus + +// loft : 2015-07-30 Annco, Inc. +loft + // lol : 2015-01-30 Uniregistry, Corp. lol @@ -8563,12 +8994,21 @@ lotto // love : 2014-12-22 Merchant Law Group LLP love +// lpl : 2015-07-30 LPL Holdings, Inc. +lpl + +// lplfinancial : 2015-07-30 LPL Holdings, Inc. +lplfinancial + // ltd : 2014-09-25 Over Corner, LLC ltd // ltda : 2014-04-17 DOMAIN ROBOT SERVICOS DE HOSPEDAGEM NA INTERNET LTDA ltda +// lundbeck : 2015-08-06 H. Lundbeck A/S +lundbeck + // lupin : 2014-11-07 LUPIN LIMITED lupin @@ -8578,6 +9018,9 @@ luxe // luxury : 2013-10-17 Luxury Partners, LLC luxury +// macys : 2015-07-31 Macys, Inc. +macys + // madrid : 2014-05-01 Comunidad de Madrid madrid @@ -8599,6 +9042,9 @@ management // mango : 2013-10-24 PUNTO FA S.L. mango +// map : 2016-06-09 Charleston Road Registry Inc. +map + // market : 2014-03-06 market @@ -8611,9 +9057,30 @@ markets // marriott : 2014-10-09 Marriott Worldwide Corporation marriott +// marshalls : 2015-07-16 The TJX Companies, Inc. +marshalls + +// maserati : 2015-07-31 Fiat Chrysler Automobiles N.V. +maserati + +// mattel : 2015-08-06 Mattel Sites, Inc. +mattel + // mba : 2015-04-02 Lone Hollow, LLC mba +// mcd : 2015-07-30 McDonald’s Corporation +mcd + +// mcdonalds : 2015-07-30 McDonald’s Corporation +mcdonalds + +// mckinsey : 2015-07-31 McKinsey Holdings, Inc. +mckinsey + +// med : 2015-08-06 Medistry LLC +med + // media : 2014-03-06 Grand Glen, LLC media @@ -8638,6 +9105,12 @@ menu // meo : 2014-11-07 PT Comunicacoes S.A. meo +// merckmsd : 2016-07-14 MSD Registry Holdings, Inc. +merckmsd + +// metlife : 2015-05-07 MetLife Services and Solutions, LLC +metlife + // miami : 2013-12-19 Top Level Domain Holdings Limited miami @@ -8647,14 +9120,26 @@ microsoft // mini : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft mini +// mint : 2015-07-30 Intuit Administrative Services, Inc. +mint + +// mit : 2015-07-02 Massachusetts Institute of Technology +mit + +// mitsubishi : 2015-07-23 Mitsubishi Corporation +mitsubishi + +// mlb : 2015-05-21 MLB Advanced Media DH, LLC +mlb + // mls : 2015-04-23 The Canadian Real Estate Association mls // mma : 2014-11-07 MMA IARD mma -// mnet : 2015-03-05 Electronic Media Network (Pty) Ltd -mnet +// mobile : 2016-06-02 Dish DBS Corporation +mobile // mobily : 2014-12-18 GreenTech Consultancy Company W.L.L. mobily @@ -8677,9 +9162,15 @@ monash // money : 2014-10-16 Outer McCook, LLC money +// monster : 2015-09-11 Monster Worldwide, Inc. +monster + // montblanc : 2014-06-23 Richemont DNS Inc. montblanc +// mopar : 2015-07-30 FCA US LLC. +mopar + // mormon : 2013-12-05 IRI Domain Management, LLC ("Applicant") mormon @@ -8689,6 +9180,9 @@ mortgage // moscow : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) moscow +// moto : 2015-06-04 +moto + // motorcycles : 2014-01-09 DERMotorcycles, LLC motorcycles @@ -8701,6 +9195,9 @@ movie // movistar : 2014-10-16 Telefónica S.A. movistar +// msd : 2015-07-23 MSD Registry Holdings, Inc. +msd + // mtn : 2014-12-04 MTN Dubai Limited mtn @@ -8710,14 +9207,14 @@ mtpc // mtr : 2015-03-12 MTR Corporation Limited mtr -// multichoice : 2015-03-12 MultiChoice (Proprietary) Limited -multichoice - // mutual : 2015-04-02 Northwestern Mutual MU TLD Registry, LLC mutual -// mzansimagic : 2015-03-05 Electronic Media Network (Pty) Ltd -mzansimagic +// mutuelle : 2015-06-18 Fédération Nationale de la Mutualité Française +mutuelle + +// nab : 2015-08-20 National Australia Bank Limited +nab // nadex : 2014-12-11 IG Group Holdings PLC nadex @@ -8725,8 +9222,8 @@ nadex // nagoya : 2013-10-24 GMO Registry, Inc. nagoya -// naspers : 2015-02-12 Intelprop (Proprietary) Limited -naspers +// nationwide : 2015-07-23 Nationwide Mutual Insurance Company +nationwide // natura : 2015-03-12 NATURA COSMÉTICOS S.A. natura @@ -8734,12 +9231,18 @@ natura // navy : 2014-03-06 United TLD Holdco Ltd. navy +// nba : 2015-07-31 NBA REGISTRY, LLC +nba + // nec : 2015-01-08 NEC Corporation nec // netbank : 2014-06-26 COMMONWEALTH BANK OF AUSTRALIA netbank +// netflix : 2015-06-18 Netflix, Inc. +netflix + // network : 2013-11-14 Trixy Manor, LLC network @@ -8749,12 +9252,24 @@ neustar // new : 2014-01-30 Charleston Road Registry Inc. new +// newholland : 2015-09-03 CNH Industrial N.V. +newholland + // news : 2014-12-18 news +// next : 2015-06-18 Next plc +next + +// nextdirect : 2015-06-18 Next plc +nextdirect + // nexus : 2014-07-24 Charleston Road Registry Inc. nexus +// nfl : 2015-07-23 NFL Reg Ops LLC +nfl + // ngo : 2014-03-06 Public Interest Registry ngo @@ -8764,21 +9279,39 @@ nhk // nico : 2014-12-04 DWANGO Co., Ltd. nico +// nike : 2015-07-23 NIKE, Inc. +nike + +// nikon : 2015-05-21 NIKON CORPORATION +nikon + // ninja : 2013-11-07 United TLD Holdco Ltd. ninja // nissan : 2014-03-27 NISSAN MOTOR CO., LTD. nissan +// nissay : 2015-10-29 Nippon Life Insurance Company +nissay + // nokia : 2015-01-08 Nokia Corporation nokia +// northwesternmutual : 2015-06-18 Northwestern Mutual Registry, LLC +northwesternmutual + // norton : 2014-12-04 Symantec Corporation norton +// now : 2015-06-25 Amazon EU S.à r.l. +now + // nowruz : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. nowruz +// nowtv : 2015-05-14 Starbucks (HK) Limited +nowtv + // nra : 2014-05-22 NRA Holdings Company, INC. nra @@ -8794,15 +9327,30 @@ nyc // obi : 2014-09-25 OBI Group Holding SE & Co. KGaA obi -// observer : 2015-04-30 Guardian News and Media Limited +// observer : 2015-04-30 observer +// off : 2015-07-23 Johnson Shareholdings, Inc. +off + // office : 2015-03-12 Microsoft Corporation office // okinawa : 2013-12-05 BusinessRalliart Inc. okinawa +// olayan : 2015-05-14 Crescent Holding GmbH +olayan + +// olayangroup : 2015-05-14 Crescent Holding GmbH +olayangroup + +// oldnavy : 2015-07-31 The Gap, Inc. +oldnavy + +// ollo : 2015-06-04 Dish DBS Corporation +ollo + // omega : 2015-01-08 The Swatch Group Ltd omega @@ -8818,9 +9366,15 @@ onl // online : 2015-01-15 DotOnline Inc. online +// onyourside : 2015-07-23 Nationwide Mutual Insurance Company +onyourside + // ooo : 2014-01-09 INFIBEAM INCORPORATION LIMITED ooo +// open : 2015-07-31 American Express Travel Related Services Company, Inc. +open + // oracle : 2014-06-19 Oracle Corporation oracle @@ -8830,15 +9384,21 @@ orange // organic : 2014-03-27 Afilias Limited organic -// orientexpress : 2015-02-05 Belmond Ltd. +// orientexpress : 2015-02-05 orientexpress +// origins : 2015-10-01 The Estée Lauder Companies Inc. +origins + // osaka : 2014-09-04 Interlink Co., Ltd. osaka // otsuka : 2013-10-11 Otsuka Holdings Co., Ltd. otsuka +// ott : 2015-06-04 Dish DBS Corporation +ott + // ovh : 2014-01-16 OVH SAS ovh @@ -8848,6 +9408,9 @@ page // pamperedchef : 2015-02-05 The Pampered Chef, Ltd. pamperedchef +// panasonic : 2015-07-30 Panasonic Corporation +panasonic + // panerai : 2014-11-07 Richemont DNS Inc. panerai @@ -8869,15 +9432,30 @@ party // passagens : 2015-03-05 Travel Reservations SRL passagens -// payu : 2015-02-12 MIH PayU B.V. -payu +// pay : 2015-08-27 Amazon EU S.à r.l. +pay + +// pccw : 2015-05-14 PCCW Enterprises Limited +pccw + +// pet : 2015-05-07 Afilias plc +pet + +// pfizer : 2015-09-11 Pfizer Inc. +pfizer // pharmacy : 2014-06-19 National Association of Boards of Pharmacy pharmacy +// phd : 2016-07-28 Charleston Road Registry Inc. +phd + // philips : 2014-11-07 Koninklijke Philips N.V. philips +// phone : 2016-06-02 Dish DBS Corporation +phone + // photo : 2013-11-14 Uniregistry, Corp. photo @@ -8908,9 +9486,15 @@ pid // pin : 2014-12-18 Amazon EU S.à r.l. pin +// ping : 2015-06-11 Ping Registry Provider, Inc. +ping + // pink : 2013-10-01 Afilias Limited pink +// pioneer : 2015-07-16 Pioneer Corporation +pioneer + // pizza : 2014-06-26 Foggy Moon, LLC pizza @@ -8920,27 +9504,42 @@ place // play : 2015-03-05 Charleston Road Registry Inc. play +// playstation : 2015-07-02 Sony Computer Entertainment Inc. +playstation + // plumbing : 2013-09-10 Spring Tigers, LLC plumbing // plus : 2015-02-05 Sugar Mill, LLC plus +// pnc : 2015-07-02 PNC Domain Co., LLC +pnc + // pohl : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG pohl // poker : 2014-07-03 Afilias Domains No. 5 Limited poker +// politie : 2015-08-20 Politie Nederland +politie + // porn : 2014-10-16 ICM Registry PN LLC porn +// pramerica : 2015-07-30 Prudential Financial, Inc. +pramerica + // praxi : 2013-12-05 Praxi S.p.A. praxi // press : 2014-04-03 DotPress Inc. press +// prime : 2015-06-25 Amazon EU S.à r.l. +prime + // prod : 2014-01-23 Charleston Road Registry Inc. prod @@ -8950,7 +9549,10 @@ productions // prof : 2014-07-24 Charleston Road Registry Inc. prof -// promo : 2014-12-18 Play.PROMO Oy +// progressive : 2015-07-23 Progressive Casualty Insurance Company +progressive + +// promo : 2014-12-18 promo // properties : 2013-12-05 Big Pass, LLC @@ -8959,12 +9561,21 @@ properties // property : 2014-05-22 Uniregistry, Corp. property -// protection : 2015-04-23 Symantec Corporation +// protection : 2015-04-23 protection +// pru : 2015-07-30 Prudential Financial, Inc. +pru + +// prudential : 2015-07-30 Prudential Financial, Inc. +prudential + // pub : 2013-12-12 United TLD Holdco Ltd. pub +// pwc : 2015-10-29 PricewaterhouseCoopers LLP +pwc + // qpon : 2013-11-14 dotCOOL, Inc. qpon @@ -8974,12 +9585,24 @@ quebec // quest : 2015-03-26 Quest ION Limited quest +// qvc : 2015-07-30 QVC, Inc. +qvc + // racing : 2014-12-04 Premier Registry Limited racing +// radio : 2016-07-21 European Broadcasting Union (EBU) +radio + +// raid : 2015-07-23 Johnson Shareholdings, Inc. +raid + // read : 2014-12-18 Amazon EU S.à r.l. read +// realestate : 2015-09-11 dotRealEstate LLC +realestate + // realtor : 2014-05-29 Real Estate Domains LLC realtor @@ -9001,7 +9624,7 @@ redumbrella // rehab : 2014-03-06 United TLD Holdco Ltd. rehab -// reise : 2014-03-13 dotreise GmbH +// reise : 2014-03-13 reise // reisen : 2014-03-06 New Cypress, LLC @@ -9043,12 +9666,21 @@ review // reviews : 2013-09-13 reviews +// rexroth : 2015-06-18 Robert Bosch GMBH +rexroth + // rich : 2013-11-21 I-Registry Ltd. rich +// richardli : 2015-05-14 Pacific Century Asset Management (HK) Limited +richardli + // ricoh : 2014-11-20 Ricoh Company, Ltd. ricoh +// rightathome : 2015-07-23 Johnson Shareholdings, Inc. +rightathome + // ril : 2015-04-02 Reliance Industries Limited ril @@ -9058,6 +9690,9 @@ rio // rip : 2014-07-10 United TLD Holdco Ltd. rip +// rmit : 2015-11-19 Royal Melbourne Institute of Technology +rmit + // rocher : 2014-12-18 Ferrero Trading Lux S.A. rocher @@ -9067,6 +9702,9 @@ rocks // rodeo : 2013-12-19 Top Level Domain Holdings Limited rodeo +// rogers : 2015-08-06 Rogers Communications Partnership +rogers + // room : 2014-12-18 Amazon EU S.à r.l. room @@ -9103,6 +9741,9 @@ sale // salon : 2014-12-11 Outer Orchard, LLC salon +// samsclub : 2015-07-31 Wal-Mart Stores, Inc. +samsclub + // samsung : 2014-04-03 SAMSUNG SDS CO., LTD samsung @@ -9127,6 +9768,9 @@ sarl // sas : 2015-04-02 Research IP LLC sas +// save : 2015-06-25 Amazon EU S.à r.l. +save + // saxo : 2014-10-31 Saxo Bank A/S saxo @@ -9142,6 +9786,9 @@ sca // scb : 2014-02-20 The Siam Commercial Bank Public Company Limited ("SCB") scb +// schaeffler : 2015-08-06 Schaeffler Technologies AG & Co. KG +schaeffler + // schmidt : 2014-04-03 SALM S.A.S. schmidt @@ -9160,24 +9807,45 @@ schwarz // science : 2014-09-11 dot Science Limited science +// scjohnson : 2015-07-23 Johnson Shareholdings, Inc. +scjohnson + // scor : 2014-10-31 SCOR SE scor // scot : 2014-01-23 Dot Scot Registry Limited scot +// search : 2016-06-09 Charleston Road Registry Inc. +search + // seat : 2014-05-22 SEAT, S.A. (Sociedad Unipersonal) seat +// secure : 2015-08-27 Amazon EU S.à r.l. +secure + +// security : 2015-05-14 +security + // seek : 2014-12-04 Seek Limited seek +// select : 2015-10-08 iSelect Ltd +select + // sener : 2014-10-24 Sener Ingeniería y Sistemas, S.A. sener // services : 2014-02-27 Fox Castle, LLC services +// ses : 2015-07-23 SES +ses + +// seven : 2015-08-06 Seven West Media Ltd +seven + // sew : 2014-07-17 SEW-EURODRIVE GmbH & Co KG sew @@ -9187,12 +9855,21 @@ sex // sexy : 2013-09-11 Uniregistry, Corp. sexy +// sfr : 2015-08-13 Societe Francaise du Radiotelephone - SFR +sfr + +// shangrila : 2015-09-03 Shangri‐La International Hotel Management Limited +shangrila + // sharp : 2014-05-01 Sharp Corporation sharp // shaw : 2015-04-23 Shaw Cablesystems G.P. shaw +// shell : 2015-07-30 Shell Information Technology International Inc +shell + // shia : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. shia @@ -9202,15 +9879,27 @@ shiksha // shoes : 2013-10-02 Binky Galley, LLC shoes +// shop : 2016-04-08 GMO Registry, Inc. +shop + +// shopping : 2016-03-31 +shopping + // shouji : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD. shouji // show : 2015-03-05 Snow Beach, LLC show +// showtime : 2015-08-06 CBS Domains Inc. +showtime + // shriram : 2014-01-23 Shriram Capital Ltd. shriram +// silk : 2015-06-25 Amazon EU S.à r.l. +silk + // sina : 2015-03-12 Sina Corporation sina @@ -9232,6 +9921,12 @@ sky // skype : 2014-12-18 Microsoft Corporation skype +// sling : 2015-07-30 Hughes Satellite Systems Corporation +sling + +// smart : 2015-07-09 Smart Communications, Inc. (SMART) +smart + // smile : 2014-12-18 Amazon EU S.à r.l. smile @@ -9244,6 +9939,9 @@ soccer // social : 2013-11-07 United TLD Holdco Ltd. social +// softbank : 2015-07-02 SoftBank Corp. +softbank + // software : 2014-03-20 software @@ -9277,18 +9975,30 @@ spot // spreadbetting : 2014-12-11 IG Group Holdings PLC spreadbetting +// srl : 2015-05-07 mySRL GmbH +srl + +// srt : 2015-07-30 FCA US LLC. +srt + // stada : 2014-11-13 STADA Arzneimittel AG stada +// staples : 2015-07-30 Staples, Inc. +staples + // star : 2015-01-08 Star India Private Limited star -// starhub : 2015-02-05 StarHub Limited +// starhub : 2015-02-05 StarHub Ltd starhub // statebank : 2015-03-12 STATE BANK OF INDIA statebank +// statefarm : 2015-07-30 State Farm Mutual Automobile Insurance Company +statefarm + // statoil : 2014-12-04 Statoil ASA statoil @@ -9307,7 +10017,10 @@ storage // store : 2015-04-09 DotStore Inc. store -// studio : 2015-02-11 Spring Goodbye, LLC +// stream : 2016-01-08 dot Stream Limited +stream + +// studio : 2015-02-11 studio // study : 2014-12-11 OPEN UNIVERSITIES AUSTRALIA PTY LTD @@ -9319,9 +10032,6 @@ style // sucks : 2014-12-22 Vox Populi Registry Inc. sucks -// supersport : 2015-03-05 SuperSport International Holdings Proprietary Limited -supersport - // supplies : 2013-12-19 Atomic Fields, LLC supplies @@ -9343,6 +10053,9 @@ suzuki // swatch : 2015-01-08 The Swatch Group Ltd swatch +// swiftcover : 2015-07-23 Swiftcover Insurance Services Limited +swiftcover + // swiss : 2014-10-16 Swiss Confederation swiss @@ -9367,6 +10080,9 @@ talk // taobao : 2015-01-15 Alibaba Group Holding Limited taobao +// target : 2015-07-31 Target Domain Holdings, LLC +target + // tatamotors : 2015-03-12 Tata Motors Ltd tatamotors @@ -9385,6 +10101,9 @@ taxi // tci : 2014-09-12 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. tci +// tdk : 2015-06-11 TDK Corporation +tdk + // team : 2015-03-05 Atomic Lake, LLC team @@ -9406,15 +10125,24 @@ temasek // tennis : 2014-12-04 Cotton Bloom, LLC tennis +// teva : 2015-07-02 Teva Pharmaceutical Industries Limited +teva + // thd : 2015-04-02 Homer TLC, Inc. thd // theater : 2015-03-19 Blue Tigers, LLC theater +// theatre : 2015-05-07 +theatre + // theguardian : 2015-04-30 Guardian News and Media Limited theguardian +// tiaa : 2015-07-23 Teachers Insurance and Annuity Association of America +tiaa + // tickets : 2015-02-05 Accent Media Limited tickets @@ -9433,6 +10161,15 @@ tires // tirol : 2014-04-24 punkt Tirol GmbH tirol +// tjmaxx : 2015-07-16 The TJX Companies, Inc. +tjmaxx + +// tjx : 2015-07-16 The TJX Companies, Inc. +tjx + +// tkmaxx : 2015-07-16 The TJX Companies, Inc. +tkmaxx + // tmall : 2015-01-15 Alibaba Group Holding Limited tmall @@ -9454,6 +10191,9 @@ toray // toshiba : 2014-04-10 TOSHIBA Corporation toshiba +// total : 2015-08-06 Total SA +total + // tours : 2015-01-22 Sugar Station, LLC tours @@ -9475,6 +10215,9 @@ trading // training : 2013-11-07 Wild Willow, LLC training +// travelchannel : 2015-07-02 Lifestyle Domain Holdings, Inc. +travelchannel + // travelers : 2015-03-26 Travelers TLD, LLC travelers @@ -9487,6 +10230,9 @@ trust // trv : 2015-03-26 Travelers TLD, LLC trv +// tube : 2015-06-11 Latin American Telecom LLC +tube + // tui : 2014-07-03 TUI AG tui @@ -9496,12 +10242,21 @@ tunes // tushu : 2014-12-18 Amazon EU S.à r.l. tushu -// tvs : 2015-02-19 T V SUNDRAM IYENGAR & SONS LIMITED +// tvs : 2015-02-19 T V SUNDRAM IYENGAR & SONS LIMITED tvs +// ubank : 2015-08-20 National Australia Bank Limited +ubank + // ubs : 2014-12-11 UBS AG ubs +// uconnect : 2015-07-30 FCA US LLC. +uconnect + +// unicom : 2015-10-15 China United Network Communications Corporation Limited +unicom + // university : 2014-03-06 Little Station, LLC university @@ -9511,18 +10266,27 @@ uno // uol : 2014-05-01 UBN INTERNET LTDA. uol +// ups : 2015-06-25 UPS Market Driver, Inc. +ups + // vacations : 2013-12-05 Atomic Tigers, LLC vacations // vana : 2014-12-11 Lifestyle Domain Holdings, Inc. vana +// vanguard : 2015-09-03 The Vanguard Group, Inc. +vanguard + // vegas : 2014-01-16 Dot Vegas, Inc. vegas // ventures : 2013-08-27 Binky Lake, LLC ventures +// verisign : 2015-08-13 VeriSign, Inc. +verisign + // versicherung : 2014-03-20 dotversicherung-registry GmbH versicherung @@ -9535,18 +10299,27 @@ viajes // video : 2014-10-16 video +// vig : 2015-05-14 VIENNA INSURANCE GROUP AG Wiener Versicherung Gruppe +vig + // viking : 2015-04-02 Viking River Cruises (Bermuda) Ltd. viking // villas : 2013-12-05 New Sky, LLC villas +// vin : 2015-06-18 Holly Shadow, LLC +vin + // vip : 2015-01-22 Minds + Machines Group Limited vip // virgin : 2014-09-25 Virgin Enterprises Limited virgin +// visa : 2015-07-30 Visa Worldwide Pte. Limited +visa + // vision : 2013-12-05 Koko Station, LLC vision @@ -9559,12 +10332,21 @@ vistaprint // viva : 2014-11-07 Saudi Telecom Company viva +// vivo : 2015-07-31 Telefonica Brasil S.A. +vivo + // vlaanderen : 2014-02-06 DNS.be vzw vlaanderen // vodka : 2013-12-19 Top Level Domain Holdings Limited vodka +// volkswagen : 2015-05-14 Volkswagen Group of America Inc. +volkswagen + +// volvo : 2015-11-12 Volvo Holding Sverige Aktiebolag +volvo + // vote : 2013-11-21 Monolith Registry LLC vote @@ -9583,6 +10365,9 @@ vuelos // wales : 2014-05-08 Nominet UK wales +// walmart : 2015-07-31 Wal-Mart Stores, Inc. +walmart + // walter : 2014-11-13 Sandvik AB walter @@ -9592,6 +10377,9 @@ wang // wanggou : 2014-12-18 Amazon EU S.à r.l. wanggou +// warman : 2015-06-18 Weir Group IP Limited +warman + // watch : 2013-11-14 Sand Shadow, LLC watch @@ -9607,6 +10395,9 @@ weatherchannel // webcam : 2014-01-23 dot Webcam Limited webcam +// weber : 2015-06-04 Saint-Gobain Weber SA +weber + // website : 2014-04-03 DotWebsite Inc. website @@ -9640,9 +10431,21 @@ win // windows : 2014-12-18 Microsoft Corporation windows +// wine : 2015-06-18 June Station, LLC +wine + +// winners : 2015-07-16 The TJX Companies, Inc. +winners + // wme : 2014-02-13 William Morris Endeavor Entertainment, LLC wme +// wolterskluwer : 2015-08-06 Wolters Kluwer N.V. +wolterskluwer + +// woodside : 2015-07-09 Woodside Petroleum Limited +woodside + // work : 2013-12-19 Top Level Domain Holdings Limited work @@ -9652,6 +10455,9 @@ works // world : 2014-06-12 Bitter Fields, LLC world +// wow : 2015-10-08 Amazon EU S.à r.l. +wow + // wtc : 2013-12-19 World Trade Centers Association, Inc. wtc @@ -9664,6 +10470,9 @@ xbox // xerox : 2014-10-24 Xerox DNHC LLC xerox +// xfinity : 2015-07-09 Comcast IP Holdings I, LLC +xfinity + // xihuan : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD. xihuan @@ -9671,332 +10480,387 @@ xihuan xin // xn--11b4c3d : 2015-01-15 VeriSign Sarl -कॉम xn--11b4c3d +कॉम // xn--1ck2e1b : 2015-02-26 Amazon EU S.à r.l. -セール xn--1ck2e1b +セール // xn--1qqw23a : 2014-01-09 Guangzhou YU Wei Information Technology Co., Ltd. -佛山 xn--1qqw23a +佛山 // xn--30rr7y : 2014-06-12 Excellent First Limited -慈善 xn--30rr7y +慈善 // xn--3bst00m : 2013-09-13 Eagle Horizon Limited -集团 xn--3bst00m +集团 // xn--3ds443g : 2013-09-08 TLD REGISTRY LIMITED -在线 xn--3ds443g +在线 + +// xn--3oq18vl8pn36a : 2015-07-02 Volkswagen (China) Investment Co., Ltd. +xn--3oq18vl8pn36a +大众汽车 // xn--3pxu8k : 2015-01-15 VeriSign Sarl -点看 xn--3pxu8k +点看 // xn--42c2d9a : 2015-01-15 VeriSign Sarl -คอม xn--42c2d9a +คอม // xn--45q11c : 2013-11-21 Zodiac Scorpio Limited -八卦 xn--45q11c +八卦 // xn--4gbrim : 2013-10-04 Suhub Electronic Establishment -موقع xn--4gbrim +موقع + +// xn--4gq48lf9j : 2015-07-31 Wal-Mart Stores, Inc. +xn--4gq48lf9j +一号店 // xn--55qw42g : 2013-11-08 China Organizational Name Administration Center -公益 xn--55qw42g +公益 // xn--55qx5d : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center) -公司 xn--55qx5d +公司 + +// xn--5su34j936bgsg : 2015-09-03 Shangri‐La International Hotel Management Limited +xn--5su34j936bgsg +香格里拉 // xn--5tzm5g : 2014-12-22 Global Website TLD Asia Limited -网站 xn--5tzm5g +网站 // xn--6frz82g : 2013-09-23 Afilias Limited -移动 xn--6frz82g +移动 // xn--6qq986b3xl : 2013-09-13 Tycoon Treasure Limited -我爱你 xn--6qq986b3xl +我爱你 // xn--80adxhks : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) -москва xn--80adxhks +москва + +// xn--80aqecdr1a : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) +xn--80aqecdr1a +католик // xn--80asehdb : 2013-07-14 CORE Association -онлайн xn--80asehdb +онлайн // xn--80aswg : 2013-07-14 CORE Association -сайт xn--80aswg +сайт // xn--8y0a063a : 2015-03-26 China United Network Communications Corporation Limited -联通 xn--8y0a063a +联通 // xn--9dbq2a : 2015-01-15 VeriSign Sarl -קום xn--9dbq2a +קום // xn--9et52u : 2014-06-12 RISE VICTORY LIMITED -时尚 xn--9et52u +时尚 // xn--9krt00a : 2015-03-12 Sina Corporation -微博 xn--9krt00a +微博 // xn--b4w605ferd : 2014-08-07 Temasek Holdings (Private) Limited -淡马锡 xn--b4w605ferd +淡马锡 // xn--bck1b9a5dre4c : 2015-02-26 Amazon EU S.à r.l. -ファッション xn--bck1b9a5dre4c +ファッション // xn--c1avg : 2013-11-14 Public Interest Registry -орг xn--c1avg +орг // xn--c2br7g : 2015-01-15 VeriSign Sarl -नेट xn--c2br7g +नेट // xn--cck2b3b : 2015-02-26 Amazon EU S.à r.l. -ストア xn--cck2b3b +ストア // xn--cg4bki : 2013-09-27 SAMSUNG SDS CO., LTD -삼성 xn--cg4bki +삼성 -// xn--czr694b : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) COMPANY.HONGKONG LIMITED -商标 +// xn--czr694b : 2014-01-16 Dot Trademark TLD Holding Company Limted xn--czr694b +商标 // xn--czrs0t : 2013-12-19 Wild Island, LLC -商店 xn--czrs0t +商店 // xn--czru2d : 2013-11-21 Zodiac Capricorn Limited -商城 xn--czru2d +商城 // xn--d1acj3b : 2013-11-20 The Foundation for Network Initiatives “The Smart Internet” -дети xn--d1acj3b +дети // xn--eckvdtc9d : 2014-12-18 Amazon EU S.à r.l. -ポイント xn--eckvdtc9d +ポイント // xn--efvy88h : 2014-08-22 Xinhua News Agency Guangdong Branch 新华通讯社广东分社 -新闻 xn--efvy88h +新闻 // xn--estv75g : 2015-02-19 Industrial and Commercial Bank of China Limited -工行 xn--estv75g +工行 // xn--fct429k : 2015-04-09 Amazon EU S.à r.l. -家電 xn--fct429k +家電 // xn--fhbei : 2015-01-15 VeriSign Sarl -كوم xn--fhbei +كوم // xn--fiq228c5hs : 2013-09-08 TLD REGISTRY LIMITED -中文网 xn--fiq228c5hs +中文网 // xn--fiq64b : 2013-10-14 CITIC Group Corporation -中信 xn--fiq64b +中信 // xn--fjq720a : 2014-05-22 Will Bloom, LLC -娱乐 xn--fjq720a +娱乐 // xn--flw351e : 2014-07-31 Charleston Road Registry Inc. -谷歌 xn--flw351e +谷歌 + +// xn--fzys8d69uvgm : 2015-05-14 PCCW Enterprises Limited +xn--fzys8d69uvgm +電訊盈科 // xn--g2xx48c : 2015-01-30 Minds + Machines Group Limited -购物 xn--g2xx48c +购物 // xn--gckr3f0f : 2015-02-26 Amazon EU S.à r.l. -クラウド xn--gckr3f0f +クラウド + +// xn--gk3at1e : 2015-10-08 Amazon EU S.à r.l. +xn--gk3at1e +通販 // xn--hxt814e : 2014-05-15 Zodiac Libra Limited -网店 xn--hxt814e +网店 // xn--i1b6b1a6a2e : 2013-11-14 Public Interest Registry -संगठन xn--i1b6b1a6a2e +संगठन -// xn--imr513n : 2014-12-11 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) COMPANY. HONGKONG LIMITED -餐厅 +// xn--imr513n : 2014-12-11 Dot Trademark TLD Holding Company Limted xn--imr513n +餐厅 // xn--io0a7i : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center) -网络 xn--io0a7i +网络 // xn--j1aef : 2015-01-15 VeriSign Sarl -ком xn--j1aef +ком // xn--jlq61u9w7b : 2015-01-08 Nokia Corporation -诺基亚 xn--jlq61u9w7b +诺基亚 // xn--jvr189m : 2015-02-26 Amazon EU S.à r.l. -食品 xn--jvr189m +食品 // xn--kcrx77d1x4a : 2014-11-07 Koninklijke Philips N.V. -飞利浦 xn--kcrx77d1x4a +飞利浦 // xn--kpu716f : 2014-12-22 Richemont DNS Inc. -手表 xn--kpu716f +手表 // xn--kput3i : 2014-02-13 Beijing RITT-Net Technology Development Co., Ltd -手机 xn--kput3i +手机 // xn--mgba3a3ejt : 2014-11-20 Aramco Services Company -ارامكو xn--mgba3a3ejt +ارامكو + +// xn--mgba7c0bbn0a : 2015-05-14 Crescent Holding GmbH +xn--mgba7c0bbn0a +العليان + +// xn--mgbaakc7dvf : 2015-09-03 Emirates Telecommunications Corporation (trading as Etisalat) +xn--mgbaakc7dvf +اتصالات // xn--mgbab2bd : 2013-10-31 CORE Association -بازار xn--mgbab2bd +بازار // xn--mgbb9fbpob : 2014-12-18 GreenTech Consultancy Company W.L.L. -موبايلي xn--mgbb9fbpob +موبايلي + +// xn--mgbca7dzdo : 2015-07-30 Abu Dhabi Systems and Information Centre +xn--mgbca7dzdo +ابوظبي + +// xn--mgbi4ecexp : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) +xn--mgbi4ecexp +كاثوليك // xn--mgbt3dhd : 2014-09-04 Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. -همراه xn--mgbt3dhd +همراه // xn--mk1bu44c : 2015-01-15 VeriSign Sarl -닷컴 xn--mk1bu44c +닷컴 // xn--mxtq1m : 2014-03-06 Net-Chinese Co., Ltd. -政府 xn--mxtq1m +政府 // xn--ngbc5azd : 2013-07-13 International Domain Registry Pty. Ltd. -شبكة xn--ngbc5azd +شبكة // xn--ngbe9e0a : 2014-12-04 Kuwait Finance House -بيتك xn--ngbe9e0a +بيتك + +// xn--ngbrx : 2015-11-12 League of Arab States +xn--ngbrx +عرب // xn--nqv7f : 2013-11-14 Public Interest Registry -机构 xn--nqv7f +机构 // xn--nqv7fs00ema : 2013-11-14 Public Interest Registry -组织机构 xn--nqv7fs00ema +组织机构 // xn--nyqy26a : 2014-11-07 Stable Tone Limited -健康 xn--nyqy26a +健康 // xn--p1acf : 2013-12-12 Rusnames Limited -рус xn--p1acf +рус // xn--pbt977c : 2014-12-22 Richemont DNS Inc. -珠宝 xn--pbt977c +珠宝 // xn--pssy2u : 2015-01-15 VeriSign Sarl -大拿 xn--pssy2u +大拿 // xn--q9jyb4c : 2013-09-17 Charleston Road Registry Inc. -みんな xn--q9jyb4c +みんな // xn--qcka1pmc : 2014-07-31 Charleston Road Registry Inc. -グーグル xn--qcka1pmc +グーグル // xn--rhqv96g : 2013-09-11 Stable Tone Limited -世界 xn--rhqv96g +世界 // xn--rovu88b : 2015-02-26 Amazon EU S.à r.l. -書籍 xn--rovu88b +書籍 // xn--ses554g : 2014-01-16 -网址 xn--ses554g +网址 // xn--t60b56a : 2015-01-15 VeriSign Sarl -닷넷 xn--t60b56a +닷넷 // xn--tckwe : 2015-01-15 VeriSign Sarl -コム xn--tckwe +コム + +// xn--tiq49xqyj : 2015-10-21 Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) +xn--tiq49xqyj +天主教 // xn--unup4y : 2013-07-14 Spring Fields, LLC -游戏 xn--unup4y +游戏 // xn--vermgensberater-ctb : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG -vermögensberater xn--vermgensberater-ctb +vermögensberater // xn--vermgensberatung-pwb : 2014-06-23 Deutsche Vermögensberatung Aktiengesellschaft DVAG -vermögensberatung xn--vermgensberatung-pwb +vermögensberatung // xn--vhquv : 2013-08-27 Dash McCook, LLC -企业 xn--vhquv +企业 // xn--vuq861b : 2014-10-16 Beijing Tele-info Network Technology Co., Ltd. -信息 xn--vuq861b +信息 // xn--w4r85el8fhu5dnra : 2015-04-30 Kerry Trading Co. Limited -嘉里大酒店 xn--w4r85el8fhu5dnra +嘉里大酒店 + +// xn--w4rs40l : 2015-07-30 Kerry Trading Co. Limited +xn--w4rs40l +嘉里 // xn--xhq521b : 2013-11-14 Guangzhou YU Wei Information Technology Co., Ltd. -广东 xn--xhq521b +广东 // xn--zfr164b : 2013-11-08 China Organizational Name Administration Center -政务 xn--zfr164b +政务 + +// xperia : 2015-05-14 Sony Mobile Communications AB +xperia // xyz : 2013-12-05 XYZ.COM LLC xyz @@ -10031,6 +10895,9 @@ youtube // yun : 2015-01-08 QIHOO 360 TECHNOLOGY CO. LTD. yun +// zappos : 2015-06-25 Amazon EU S.à r.l. +zappos + // zara : 2014-11-07 Industria de Diseño Textil, S.A. (INDITEX, S.A.) zara @@ -10040,6 +10907,9 @@ zero // zip : 2014-05-08 Charleston Road Registry Inc. zip +// zippo : 2015-07-02 Zadco Company +zippo + // zone : 2013-11-14 Outer Falls, LLC zone @@ -10051,65 +10921,143 @@ zuerich // ===BEGIN PRIVATE DOMAINS=== // (Note: these are in alphabetical order by company name) +// Agnat sp. z o.o. : https://domena.pl +// Submitted by Przemyslaw Plewa +beep.pl + +// Alces Software Ltd : http://alces-software.com +// Submitted by Mark J. Titorenko +*.compute.estate +*.alces.network + +// alwaysdata : https://www.alwaysdata.com +// Submitted by Cyril +*.alwaysdata.net + // Amazon CloudFront : https://aws.amazon.com/cloudfront/ -// Submitted by Donavan Miller 2013-03-22 +// Submitted by Donavan Miller cloudfront.net // Amazon Elastic Compute Cloud: https://aws.amazon.com/ec2/ -// Submitted by Osman Surkatty 2014-12-16 -ap-northeast-1.compute.amazonaws.com -ap-southeast-1.compute.amazonaws.com -ap-southeast-2.compute.amazonaws.com -cn-north-1.compute.amazonaws.cn -compute.amazonaws.cn -compute.amazonaws.com -compute-1.amazonaws.com -eu-west-1.compute.amazonaws.com -eu-central-1.compute.amazonaws.com -sa-east-1.compute.amazonaws.com +// Submitted by Luke Wells +*.compute.amazonaws.com +*.compute-1.amazonaws.com +*.compute.amazonaws.com.cn us-east-1.amazonaws.com -us-gov-west-1.compute.amazonaws.com -us-west-1.compute.amazonaws.com -us-west-2.compute.amazonaws.com -z-1.compute-1.amazonaws.com -z-2.compute-1.amazonaws.com // Amazon Elastic Beanstalk : https://aws.amazon.com/elasticbeanstalk/ -// Submitted by Adam Stein 2013-04-02 -elasticbeanstalk.com +// Submitted by Luke Wells +elasticbeanstalk.cn-north-1.amazonaws.com.cn +*.elasticbeanstalk.com // Amazon Elastic Load Balancing : https://aws.amazon.com/elasticloadbalancing/ -// Submitted by Scott Vidmar 2013-03-27 -elb.amazonaws.com +// Submitted by Luke Wells +*.elb.amazonaws.com +*.elb.amazonaws.com.cn // Amazon S3 : https://aws.amazon.com/s3/ -// Submitted by Courtney Eckhardt 2013-03-22 -s3.amazonaws.com -s3-us-west-2.amazonaws.com -s3-us-west-1.amazonaws.com -s3-eu-west-1.amazonaws.com +// Submitted by Luke Wells +*.s3.amazonaws.com +s3-ap-northeast-1.amazonaws.com +s3-ap-northeast-2.amazonaws.com +s3-ap-south-1.amazonaws.com s3-ap-southeast-1.amazonaws.com s3-ap-southeast-2.amazonaws.com -s3-ap-northeast-1.amazonaws.com +s3-ca-central-1.amazonaws.com +s3-eu-central-1.amazonaws.com +s3-eu-west-1.amazonaws.com +s3-external-1.amazonaws.com +s3-fips-us-gov-west-1.amazonaws.com s3-sa-east-1.amazonaws.com s3-us-gov-west-1.amazonaws.com -s3-fips-us-gov-west-1.amazonaws.com +s3-us-east-2.amazonaws.com +s3-us-west-1.amazonaws.com +s3-us-west-2.amazonaws.com +s3.ap-northeast-2.amazonaws.com +s3.ap-south-1.amazonaws.com +s3.cn-north-1.amazonaws.com.cn +s3.ca-central-1.amazonaws.com +s3.eu-central-1.amazonaws.com +s3.us-east-2.amazonaws.com +s3.dualstack.ap-northeast-1.amazonaws.com +s3.dualstack.ap-northeast-2.amazonaws.com +s3.dualstack.ap-south-1.amazonaws.com +s3.dualstack.ap-southeast-1.amazonaws.com +s3.dualstack.ap-southeast-2.amazonaws.com +s3.dualstack.ca-central-1.amazonaws.com +s3.dualstack.eu-central-1.amazonaws.com +s3.dualstack.eu-west-1.amazonaws.com +s3.dualstack.sa-east-1.amazonaws.com +s3.dualstack.us-east-1.amazonaws.com +s3.dualstack.us-east-2.amazonaws.com s3-website-us-east-1.amazonaws.com -s3-website-us-west-2.amazonaws.com s3-website-us-west-1.amazonaws.com -s3-website-eu-west-1.amazonaws.com +s3-website-us-west-2.amazonaws.com +s3-website-ap-northeast-1.amazonaws.com s3-website-ap-southeast-1.amazonaws.com s3-website-ap-southeast-2.amazonaws.com -s3-website-ap-northeast-1.amazonaws.com +s3-website-eu-west-1.amazonaws.com s3-website-sa-east-1.amazonaws.com -s3-website-us-gov-west-1.amazonaws.com +s3-website.ap-northeast-2.amazonaws.com +s3-website.ap-south-1.amazonaws.com +s3-website.ca-central-1.amazonaws.com +s3-website.eu-central-1.amazonaws.com +s3-website.us-east-2.amazonaws.com + +// Amune : https://amune.org/ +// Submitted by Team Amune +t3l3p0rt.net +tele.amune.org + +// Aptible : https://www.aptible.com/ +// Submitted by Thomas Orozco +on-aptible.com + +// Asociación Amigos de la Informática "Euskalamiga" : http://encounter.eus/ +// Submitted by Hector Martin +user.party.eus + +// Association potager.org : https://potager.org/ +// Submitted by Lunar +pimienta.org +poivron.org +potager.org +sweetpepper.org + +// ASUSTOR Inc. : http://www.asustor.com +// Submitted by Vincent Tseng +myasustor.com + +// AVM : https://avm.de +// Submitted by Andreas Weise +myfritz.net + +// backplane : https://www.backplane.io +// Submitted by Anthony Voutas +backplaneapp.io // BetaInABox -// Submitted by adrian@betainabox.com 2012-09-13 +// Submitted by Adrian betainabox.com +// BinaryLane : http://www.binarylane.com +// Submitted by Nathan O'Sullivan +bnr.la + +// Boxfuse : https://boxfuse.com +// Submitted by Axel Fontaine +boxfuse.io + +// BrowserSafetyMark +// Submitted by Dave Tharp +browsersafetymark.io + +// callidomus: https://www.callidomus.com/ +// Submitted by Marcus Popp +mycd.eu + // CentralNic : http://www.centralnic.com/names/domains -// Submitted by registry 2012-09-27 +// Submitted by registry ae.org ar.com br.com @@ -10140,52 +11088,153 @@ za.bz za.com // Africa.com Web Solutions Ltd : https://registry.africa.com -// Submitted by Gavin Brown 2014-02-04 +// Submitted by Gavin Brown africa.com // iDOT Services Limited : http://www.domain.gr.com -// Submitted by Gavin Brown 2014-02-04 +// Submitted by Gavin Brown gr.com // Radix FZC : http://domains.in.net -// Submitted by Gavin Brown 2014-02-04 +// Submitted by Gavin Brown in.net // US REGISTRY LLC : http://us.org -// Submitted by Gavin Brown 2014-02-04 +// Submitted by Gavin Brown us.org // co.com Registry, LLC : https://registry.co.com -// Submitted by Gavin Brown 2014-02-04 +// Submitted by Gavin Brown co.com // c.la : http://www.c.la/ c.la +// certmgr.org : https://certmgr.org +// Submitted by B. Blechschmidt +certmgr.org + +// Citrix : https://citrix.com +// Submitted by Alex Stoddard +xenapponazure.com + +// ClearVox : http://www.clearvox.nl/ +// Submitted by Leon Rowland +virtueeldomein.nl + // cloudControl : https://www.cloudcontrol.com/ -// Submitted by Tobias Wilken 2013-07-23 +// Submitted by Tobias Wilken cloudcontrolled.com cloudcontrolapp.com // co.ca : http://registry.co.ca/ co.ca +// i-registry s.r.o. : http://www.i-registry.cz/ +// Submitted by Martin Semrad +co.cz + +// CDN77.com : http://www.cdn77.com +// Submitted by Jan Krpes +c.cdn77.org +cdn77-ssl.net +r.cdn77.net +rsc.cdn77.org +ssl.origin.cdn77-secure.org + +// Cloud DNS Ltd : http://www.cloudns.net +// Submitted by Aleksander Hristov +cloudns.asia +cloudns.biz +cloudns.club +cloudns.cc +cloudns.eu +cloudns.in +cloudns.info +cloudns.org +cloudns.pro +cloudns.pw +cloudns.us + // CoDNS B.V. co.nl co.no // Commerce Guys, SAS -// Submitted by Damien Tournoud 2015-01-22 +// Submitted by Damien Tournoud *.platform.sh +// COSIMO GmbH http://www.cosimo.de +// Submitted by Rene Marticke +dyn.cosidns.de +dynamisches-dns.de +dnsupdater.de +internet-dns.de +l-o-g-i-n.de +dynamic-dns.info +feste-ip.net +knx-server.net +static-access.net + +// Craynic, s.r.o. : http://www.craynic.com/ +// Submitted by Ales Krajnik +realm.cz + +// Cryptonomic : https://cryptonomic.net/ +// Submitted by Andrew Cady +*.cryptonomic.net + // Cupcake : https://cupcake.io/ -// Submitted by Jonathan Rudenberg 2013-10-08 +// Submitted by Jonathan Rudenberg cupcake.is +// cyon GmbH : https://www.cyon.ch/ +// Submitted by Dominic Luechinger +cyon.link +cyon.site + +// Daplie, Inc : https://daplie.com +// Submitted by AJ ONeal +daplie.me + +// Dansk.net : http://www.dansk.net/ +// Submitted by Anani Voule +biz.dk +co.dk +firm.dk +reg.dk +store.dk + +// deSEC : https://desec.io/ +// Submitted by Peter Thomassen +dedyn.io + +// DNShome : https://www.dnshome.de/ +// Submitted by Norbert Auler +dnshome.de + // DreamHost : http://www.dreamhost.com/ -// Submitted by Andrew Farmer 2012-10-02 +// Submitted by Andrew Farmer dreamhosters.com +// Drobo : http://www.drobo.com/ +// Submitted by Ricardo Padilha +mydrobo.com + +// Drud Holdings, LLC. : https://www.drud.com/ +// Submitted by Kevin Bridges +drud.io +drud.us + +// DuckDNS : http://www.duckdns.org/ +// Submitted by Richard Harper +duckdns.org + +// dy.fi : http://dy.fi/ +// Submitted by Heikki Hannikainen +dy.fi +tunk.org + // DynDNS.com : http://www.dyndns.com/services/dns/dyndns/ dyndns-at-home.com dyndns-at-work.com @@ -10467,9 +11516,33 @@ webhop.org worse-than.tv writesthisblog.com -// EU.org https://eu.org/ -// Submitted by Pierre Beyssac 2015-04-17 +// ddnss.de : https://www.ddnss.de/ +// Submitted by Robert Niedziela +ddnss.de +dyn.ddnss.de +dyndns.ddnss.de +dyndns1.de +dyn-ip24.de +home-webserver.de +dyn.home-webserver.de +myhome-server.de +ddnss.org + +// dynv6 : https://dynv6.com +// Submitted by Dominik Menke 2016-01-18 +dynv6.net + +// E4YOU spol. s.r.o. : https://e4you.cz/ +// Submitted by Vladimir Dudr +e4.cz + +// Enonic : http://enonic.com/ +// Submitted by Erik Kaareng-Sunde +enonic.io +customer.enonic.io +// EU.org https://eu.org/ +// Submitted by Pierre Beyssac eu.org al.eu.org asso.eu.org @@ -10527,54 +11600,125 @@ tr.eu.org uk.eu.org us.eu.org +// Evennode : http://www.evennode.com/ +// Submitted by Michal Kralik +eu-1.evennode.com +eu-2.evennode.com +us-1.evennode.com +us-2.evennode.com + +// Facebook, Inc. +// Submitted by Peter Ruibal +apps.fbsbx.com + // Fastly Inc. http://www.fastly.com/ -// Submitted by Vladimir Vuksan 2013-05-31 +// Submitted by Vladimir Vuksan a.ssl.fastly.net b.ssl.fastly.net global.ssl.fastly.net a.prod.fastly.net global.prod.fastly.net +// Featherhead : https://featherhead.xyz/ +// Submitted by Simon Menke +fhapp.xyz + // Firebase, Inc. -// Submitted by Chris Raynor 2014-01-21 +// Submitted by Chris Raynor firebaseapp.com // Flynn : https://flynn.io -// Submitted by Jonathan Rudenberg 2014-07-12 +// Submitted by Jonathan Rudenberg flynnhub.com +// Freebox : http://www.freebox.fr +// Submitted by Romain Fliedel +freebox-os.com +freeboxos.com +fbx-os.fr +fbxos.fr +freebox-os.fr +freeboxos.fr + +// Fusion Intranet : https://www.fusion-intranet.com +// Submitted by Matthias Burtscher +myfusion.cloud + +// Futureweb OG : http://www.futureweb.at +// Submitted by Andreas Schnederle-Wagner +futurehosting.at +futuremailing.at +*.ex.ortsinfo.at +*.kunden.ortsinfo.at +*.statics.cloud + // GDS : https://www.gov.uk/service-manual/operations/operating-servicegovuk-subdomains -// Submitted by David Illsley 2014-08-28 +// Submitted by David Illsley service.gov.uk // GitHub, Inc. -// Submitted by Ben Toews 2014-02-06 +// Submitted by Patrick Toomey github.io githubusercontent.com +githubcloud.com +*.api.githubcloud.com +*.ext.githubcloud.com +gist.githubcloud.com +*.githubcloudusercontent.com + +// GitLab, Inc. +// Submitted by Alex Hanselka +gitlab.io + +// UKHomeOffice : https://www.gov.uk/government/organisations/home-office +// Submitted by Jon Shanks +homeoffice.gov.uk // GlobeHosting, Inc. -// Submitted by Zoltan Egresi 2013-07-12 -ro.com +// Submitted by Zoltan Egresi +ro.im +shop.ro + +// GoIP DNS Services : http://www.goip.de +// Submitted by Christian Poulter +goip.de // Google, Inc. -// Submitted by Eduardo Vela 2014-12-19 +// Submitted by Eduardo Vela +*.0emm.com appspot.com blogspot.ae +blogspot.al +blogspot.am +blogspot.ba blogspot.be +blogspot.bg blogspot.bj blogspot.ca blogspot.cf blogspot.ch +blogspot.cl blogspot.co.at +blogspot.co.id blogspot.co.il +blogspot.co.ke blogspot.co.nz blogspot.co.uk +blogspot.co.za blogspot.com blogspot.com.ar blogspot.com.au blogspot.com.br +blogspot.com.by +blogspot.com.co +blogspot.com.cy +blogspot.com.ee +blogspot.com.eg blogspot.com.es +blogspot.com.mt +blogspot.com.ng blogspot.com.tr +blogspot.com.uy blogspot.cv blogspot.cz blogspot.de @@ -10583,77 +11727,287 @@ blogspot.fi blogspot.fr blogspot.gr blogspot.hk +blogspot.hr blogspot.hu blogspot.ie blogspot.in +blogspot.is blogspot.it blogspot.jp blogspot.kr +blogspot.li +blogspot.lt +blogspot.lu +blogspot.md +blogspot.mk blogspot.mr blogspot.mx +blogspot.my blogspot.nl blogspot.no +blogspot.pe blogspot.pt +blogspot.qa blogspot.re blogspot.ro +blogspot.rs blogspot.ru blogspot.se blogspot.sg +blogspot.si blogspot.sk +blogspot.sn blogspot.td blogspot.tw +blogspot.ug +blogspot.vn +cloudfunctions.net codespot.com googleapis.com googlecode.com pagespeedmobilizer.com +publishproxy.com withgoogle.com +withyoutube.com + +// Hashbang : https://hashbang.sh +hashbang.sh + +// Hasura : https://hasura.io +// Submitted by Shahidh K Muhammed +hasura-app.io + +// Hepforge : https://www.hepforge.org +// Submitted by David Grellscheid +hepforge.org // Heroku : https://www.heroku.com/ -// Submitted by Tom Maher 2013-05-02 +// Submitted by Tom Maher herokuapp.com herokussl.com // iki.fi -// Submitted by Hannu Aronsson 2009-11-05 +// Submitted by Hannu Aronsson iki.fi // info.at : http://www.info.at/ biz.at info.at +// Interlegis : http://www.interlegis.leg.br +// Submitted by Gabriel Ferreira +ac.leg.br +al.leg.br +am.leg.br +ap.leg.br +ba.leg.br +ce.leg.br +df.leg.br +es.leg.br +go.leg.br +ma.leg.br +mg.leg.br +ms.leg.br +mt.leg.br +pa.leg.br +pb.leg.br +pe.leg.br +pi.leg.br +pr.leg.br +rj.leg.br +rn.leg.br +ro.leg.br +rr.leg.br +rs.leg.br +sc.leg.br +se.leg.br +sp.leg.br +to.leg.br + +// Joyent : https://www.joyent.com/ +// Submitted by Brian Bennett +*.triton.zone +*.cns.joyent.com + +// JS.ORG : http://dns.js.org +// Submitted by Stefan Keim +js.org + +// Keyweb AG : https://www.keyweb.de +// Submitted by Martin Dannehl +keymachine.de + +// KnightPoint Systems, LLC : http://www.knightpoint.com/ +// Submitted by Roy Keene +knightpoint.systems + +// .KRD : http://nic.krd/data/krd/Registration%20Policy.pdf +co.krd +edu.krd + +// Magento Commerce +// Submitted by Damien Tournoud +*.magentosite.cloud + +// Meteor Development Group : https://www.meteor.com/hosting +// Submitted by Pierre Carrier +meteorapp.com +eu.meteorapp.com + // Michau Enterprises Limited : http://www.co.pl/ co.pl // Microsoft : http://microsoft.com -// Submitted by Barry Dorrans 2014-01-24 +// Submitted by Barry Dorrans azurewebsites.net azure-mobile.net cloudapp.net +// Mozilla Foundation : https://mozilla.org/ +// Submitted by glob +bmoattachments.org + // Neustar Inc. -// Submitted by Trung Tran 2015-04-23 +// Submitted by Trung Tran 4u.com +// ngrok : https://ngrok.com/ +// Submitted by Alan Shreve +ngrok.io + // NFSN, Inc. : https://www.NearlyFreeSpeech.NET/ -// Submitted by Jeff Wheelhouse 2014-02-02 +// Submitted by Jeff Wheelhouse nfshost.com +// nsupdate.info : https://www.nsupdate.info/ +// Submitted by Thomas Waldmann +nsupdate.info +nerdpol.ovh + +// No-IP.com : https://noip.com/ +// Submitted by Deven Reza +blogsyte.com +brasilia.me +cable-modem.org +ciscofreak.com +collegefan.org +couchpotatofries.org +damnserver.com +ddns.me +ditchyourip.com +dnsfor.me +dnsiskinky.com +dvrcam.info +dynns.com +eating-organic.net +fantasyleague.cc +geekgalaxy.com +golffan.us +health-carereform.com +homesecuritymac.com +homesecuritypc.com +hopto.me +ilovecollege.info +loginto.me +mlbfan.org +mmafan.biz +myactivedirectory.com +mydissent.net +myeffect.net +mymediapc.net +mypsx.net +mysecuritycamera.com +mysecuritycamera.net +mysecuritycamera.org +net-freaks.com +nflfan.org +nhlfan.net +no-ip.ca +no-ip.co.uk +no-ip.net +noip.us +onthewifi.com +pgafan.net +point2this.com +pointto.us +privatizehealthinsurance.net +quicksytes.com +read-books.org +securitytactics.com +serveexchange.com +servehumour.com +servep2p.com +servesarcasm.com +stufftoread.com +ufcfan.org +unusualperson.com +workisboring.com +3utilities.com +bounceme.net +ddns.net +ddnsking.com +gotdns.ch +hopto.org +myftp.biz +myftp.org +myvnc.com +no-ip.biz +no-ip.info +no-ip.org +noip.me +redirectme.net +servebeer.com +serveblog.net +servecounterstrike.com +serveftp.com +servegame.com +servehalflife.com +servehttp.com +serveirc.com +serveminecraft.net +servemp3.com +servepics.com +servequake.com +sytes.net +webhop.me +zapto.org + // NYC.mn : http://www.information.nyc.mn -// Submitted by Matthew Brown 2013-03-11 +// Submitted by Matthew Brown nyc.mn // One Fold Media : http://www.onefoldmedia.com/ -// Submitted by Eddie Jones 2014-06-10 +// Submitted by Eddie Jones nid.io +// OpenCraft GmbH : http://opencraft.com/ +// Submitted by Sven Marnach +opencraft.hosting + // Opera Software, A.S.A. -// Submitted by Yngve Pettersen 2009-11-26 +// Submitted by Yngve Pettersen operaunite.com // OutSystems -// Submitted by Duarte Santos 2014-03-11 +// Submitted by Duarte Santos outsystemscloud.com +// OwnProvider : http://www.ownprovider.com +// Submitted by Jan Moennich +ownprovider.com + +// oy.lc +// Submitted by Charly Coste +oy.lc + +// Pagefog : https://pagefog.com/ +// Submitted by Derek Myers +pgfog.com + +// Pagefront : https://www.pagefronthq.com/ +// Submitted by Jason Kriss +pagefrontapp.com + // .pl domains (grandfathered) art.pl gliwice.pl @@ -10662,19 +12016,152 @@ poznan.pl wroc.pl zakopane.pl +// Pantheon Systems, Inc. : https://pantheon.io/ +// Submitted by Gary Dylina +pantheonsite.io +gotpantheon.com + +// Peplink | Pepwave : http://peplink.com/ +// Submitted by Steve Leung +mypep.link + +// Planet-Work : https://www.planet-work.com/ +// Submitted by Frédéric VANNIÈRE +on-web.fr + +// prgmr.com : https://prgmr.com/ +// Submitted by Sarah Newman +xen.prgmr.com + // priv.at : http://www.nic.priv.at/ -// Submitted by registry 2008-06-09 +// Submitted by registry priv.at +// Protonet GmbH : http://protonet.io +// Submitted by Martin Meier +protonet.io + +// Publication Presse Communication SARL : https://ppcom.fr +// Submitted by Yaacov Akiba Slama +chirurgiens-dentistes-en-france.fr + +// QA2 +// Submitted by Daniel Dent (https://www.danieldent.com/) +qa2.com + +// QNAP System Inc : https://www.qnap.com +// Submitted by Nick Chang +dev-myqnapcloud.com +alpha-myqnapcloud.com +myqnapcloud.com + +// Rackmaze LLC : https://www.rackmaze.com +// Submitted by Kirill Pertsev +rackmaze.com +rackmaze.net + // Red Hat, Inc. OpenShift : https://openshift.redhat.com/ -// Submitted by Tim Kramer 2012-10-24 +// Submitted by Tim Kramer rhcloud.com +// RethinkDB : https://www.rethinkdb.com/ +// Submitted by Chris Kastorff +hzc.io + +// Revitalised Limited : http://www.revitalised.co.uk +// Submitted by Jack Price +wellbeingzone.eu +ptplus.fit +wellbeingzone.co.uk + +// Sandstorm Development Group, Inc. : https://sandcats.io/ +// Submitted by Asheesh Laroia +sandcats.io + +// SBE network solutions GmbH : https://www.sbe.de/ +// Submitted by Norman Meilick +logoip.de +logoip.com + +// Securepoint GmbH : https://www.securepoint.de +// Submitted by Erik Anders +firewall-gateway.com +firewall-gateway.de +my-gateway.de +my-router.de +spdns.de +spdns.eu +firewall-gateway.net +my-firewall.org +myfirewall.org +spdns.org + +// Service Online LLC : http://drs.ua/ +// Submitted by Serhii Bulakh +biz.ua +co.ua +pp.ua + +// ShiftEdit : https://shiftedit.net/ +// Submitted by Adam Jimenez +shiftedit.io + +// Shopblocks : http://www.shopblocks.com/ +// Submitted by Alex Bowers +myshopblocks.com + // SinaAppEngine : http://sae.sina.com.cn/ -// Submitted by SinaAppEngine 2015-02-02 +// Submitted by SinaAppEngine +1kapp.com +appchizi.com +applinzi.com sinaapp.com vipsinaapp.com -1kapp.com + +// Skyhat : http://www.skyhat.io +// Submitted by Shante Adam +bounty-full.com +alpha.bounty-full.com +beta.bounty-full.com + +// staticland : https://static.land +// Submitted by Seth Vincent +static.land +dev.static.land +sites.static.land + +// SourceLair PC : https://www.sourcelair.com +// Submitted by Antonis Kalipetis +apps.lair.io +*.stolos.io + +// SpaceKit : https://www.spacekit.io/ +// Submitted by Reza Akhavan +spacekit.io + +// Stackspace : https://www.stackspace.io/ +// Submitted by Lina He +stackspace.space + +// Synology, Inc. : https://www.synology.com/ +// Submitted by Rony Weng +diskstation.me +dscloud.biz +dscloud.me +dscloud.mobi +dsmynas.com +dsmynas.net +dsmynas.org +familyds.com +familyds.net +familyds.org +i234.me +myds.me +synology.me + +// TAIFUN Software AG : http://taifun-software.de +// Submitted by Bjoern Henke +taifun-dns.de // TASK geographical domains (www.task.gda.pl/uslugi/dns) gda.pl @@ -10683,20 +12170,87 @@ gdynia.pl med.pl sopot.pl +// TownNews.com : http://www.townnews.com +// Submitted by Dustin Ward +bloxcms.com +townnews-staging.com + +// TransIP : htts://www.transip.nl +// Submitted by Rory Breuk +*.transurl.be +*.transurl.eu +*.transurl.nl + +// TuxFamily : http://tuxfamily.org +// Submitted by TuxFamily administrators +tuxfamily.org + +// TwoDNS : https://www.twodns.de/ +// Submitted by TwoDNS-Support +dd-dns.de +diskstation.eu +diskstation.org +dray-dns.de +draydns.de +dyn-vpn.de +dynvpn.de +mein-vigor.de +my-vigor.de +my-wan.de +syno-ds.de +synology-diskstation.de +synology-ds.de + // UDR Limited : http://www.udr.hk.com -// Submitted by registry 2014-11-07 +// Submitted by registry hk.com hk.org ltd.hk inc.hk +// .US +// Submitted by Ed Moore +lib.de.us + +// Viprinet Europe GmbH : http://www.viprinet.com +// Submitted by Simon Kissel +router.management + +// Western Digital Technologies, Inc : https://www.wdc.com +// Submitted by Jung Jin +remotewd.com + +// Wikimedia Labs : https://wikitech.wikimedia.org +// Submitted by Yuvi Panda +wmflabs.org + // Yola : https://www.yola.com/ -// Submitted by Stefano Rivera 2014-07-09 +// Submitted by Stefano Rivera yolasite.com +// Yombo : https://yombo.net +// Submitted by Mitch Schwenk +ybo.faith +yombo.me +homelink.one +ybo.party +ybo.review +ybo.science +ybo.trade + // ZaNiC : http://www.za.net/ -// Submitted by registry 2009-10-03 +// Submitted by registry za.net za.org +// Zeit, Inc. : https://zeit.domains/ +// Submitted by Olli Vanhoja +now.sh + +// 1GB LLC : https://www.1gb.ua/ +// Submitted by 1GB LLC +cc.ua +inf.ua +ltd.ua + // ===END PRIVATE DOMAINS=== diff --git a/net/ddns-scripts/files/services b/net/ddns-scripts/files/services index b3ac40564c..fd70b071bf 100644 --- a/net/ddns-scripts/files/services +++ b/net/ddns-scripts/files/services @@ -22,72 +22,152 @@ # !!! Use only the script name (without path). Sample: # !!! "example.com" "update_sample.sh" # +# !!! Since ddns-scripts Version 2.5.x additional parameters are supported +# !!! and a given answer on success is checked (ignored by earlier versions) +# !!! Additional parameters: [PARAMOPT] and [PARAMENC]; [PARAMENC] is send urlencoded +# +# Line syntax: "service" [TAB] "update_url" [TAB] "answer" +# "service" name used as "option service_name" inside /etc/config/ddns +# "update_url" update url as given by the provider; custom urls should not saved here +# "answer" single words inside providers answer string; use "|" to combine "or" +# # 44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +# +#.cloudflare.com-v1 !!! Please install additional package "ddns-scripts_cloudflare" +#.cloudflare.com-v4 !!! Please install additional package "ddns-scripts_cloudflare.com-v4" +#.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" -"dyndns.org" "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]" -"changeip.com" "http://[USERNAME]:[PASSWORD]@nic.changeip.com/nic/update?u=[USERNAME]&p=[PASSWORD]&cmd=update&hostname=[DOMAIN]&ip=[IP]" -"zoneedit.com" "http://[USERNAME]:[PASSWORD]@dynamic.zoneedit.com/auth/dynamic.html?host=[DOMAIN]&dnsto=[IP]" -"free.editdns.net" "http://dyndns-free.editdns.net/api/dynLinux.php?p=[PASSWORD]&r=[DOMAIN]" +"3322.org" "http://[USERNAME]:[PASSWORD]@members.3322.org/dyndns/update?system=dyndns&hostname=[DOMAIN]&myip=[IP]" + +"able.or.kr" "http://able.or.kr/ddns/src/update.php?hostname=[DOMAIN]&myip=[IP]&ddnsuser=[USERNAME]&pwd=[PASSWORD]" + +"afraid.org-basicauth" "http://[USERNAME]:[PASSWORD]@freedns.afraid.org/nic/update?hostname=[DOMAIN]&myip=[IP] +"afraid.org-keyauth" "http://freedns.afraid.org/dynamic/update.php?[PASSWORD]&address=[IP]" + +"all-inkl.com" "http://[USERNAME]:[PASSWORD]@dyndns.kasserver.com/?myip=[IP]" + +"changeip.com" "http://[USERNAME]:[PASSWORD]@nic.changeip.com/nic/update?u=[USERNAME]&p=[PASSWORD]&cmd=update&hostname=[DOMAIN]&ip=[IP]" "Successful" + +"core-networks.de" "http://[USERNAME]:[PASSWORD]@dyndns.core-networks.de/?hostname=[DOMAIN]&myip=[IP]&keepipv6=1" "good" + +"ddns.com.br" "http://[DOMAIN]:[PASSWORD]@members.ddns.com.br/nic/update?hostname=[DOMAIN]&myip=[IP]" + +# "ddnss.de" "http://[USERNAME]:[PASSWORD]@ip4.ddnss.de/upd.php?host=[DOMAIN]&ip=[IP]" "good|nochg" +"ddnss.de" "http://ip4.ddnss.de/upd.php?user=[USERNAME]&pwd=[PASSWORD]&host=[DOMAIN]&ip=[IP]" "good|nochg" + +"ddo.jp" "http://free.ddo.jp/dnsupdate.php?dn=[DOMAIN]&pw=[PASSWORD]&ip=[IP]" + +"desec.io" "http://[USERNAME]:[PASSWORD]@update.dedyn.io/?hostname=[DOMAIN]&myipv4=[IP]" "good|nochg" + +"dhis.org" "http://[USERNAME]:[PASSWORD]@is.dhis.org/" + +"dnsdynamic.org" "http://[USERNAME]:[PASSWORD]@www.dnsdynamic.org/api/?hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"dnsexit.com" "http://www.dnsexit.com/RemoteUpdate.sv?login=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]&myip=[IP]" "0=|1=" + +"dnshome.de" "http://[USERNAME]:[PASSWORD]@www.dnshome.de/dyndns.php?hostname=[DOMAIN]&ip=[IP]" + +"dnsmadeeasy.com" "http://www.dnsmadeeasy.com/servlet/updateip?username=[USERNAME]&password=[PASSWORD}&id=[DOMAIN]&ip=[IP]" "success|ip-same" + +"dnsmax.com" "http://update.dnsmax.com/update/?username=[USERNAME]&password=[PASSWORD]&resellerid=1&clientname=openwrt&clientversion=8.09&protocolversion=2.0&updatehostname=[DOMAIN]&ip=[IP]" + +"dnsomatic.com" "http://[USERNAME]:[PASSWORD]@updates.dnsomatic.com/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"dnspark.com" "http://[USERNAME]:[PASSWORD]@control.dnspark.com/api/dynamic/update.php?hostname=[DOMAIN]&ip=[IP]" "ok|nochange" + +"do.de" "http://ddns.do.de/?myip=[IP]&hostname=[DOMAIN]&username=[USERNAME]&password=[PASSWORD]" "good|nochg" + +"domopoli.de" "http://[USERNAME]:[PASSWORD]@http://dyndns.domopoli.de/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"dtdns.com" "http://www.dtdns.com/api/autodns.cfm?id=[DOMAIN]&pw=[PASSWORD]&ip=[IP]" + +"duckdns.org" "http://www.duckdns.org/update?domains=[USERNAME]&token=[PASSWORD]&ip=[IP]" "OK" -# freedns.afraid.org is weird, you just need an update code, for which we use the password variable -"freedns.afraid.org" "http://freedns.afraid.org/dynamic/update.php?[PASSWORD]&address=[IP]" +"duiadns.net" "http://[USERNAME]:[PASSWORD]@ipv4.duia.ro/dynamic.duia?host=[DOMAIN]&ip4=[IP]" -# DNS Max and resellers' update urls -"dnsmax.com" "http://update.dnsmax.com/update/?username=[USERNAME]&password=[PASSWORD]&resellerid=1&clientname=openwrt&clientversion=8.09&protocolversion=2.0&updatehostname=[DOMAIN]&ip=[IP]" -"thatip.com" "http://update.dnsmax.com/update/?username=[USERNAME]&password=[PASSWORD]&resellerid=2&clientname=openwrt&clientversion=8.09&protocolversion=2.0&updatehostname=[DOMAIN]&ip=[IP]" +"dy.fi" "http://[USERNAME]:[PASSWORD]@www.dy.fi/nic/update?hostname=[DOMAIN]" "good|nochg" -# Hurricane Electric Dynamic DNS -"he.net" "http://[DOMAIN]:[PASSWORD]@dyn.dns.he.net/nic/update?hostname=[DOMAIN]&myip=[IP]" +"dyndns.it" "http://[USERNAME]:[PASSWORD]@update.dyndns.it/nic/update?system=dyndns&hostname=[DOMAIN]&myip=[IP]" "good|nochg" -# DNSdynamic.org -"dnsdynamic.org" "http://[USERNAME]:[PASSWORD]@www.dnsdynamic.org/api/?hostname=[DOMAIN]&myip=[IP]" +"dyn.com" "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" +"dyndns.org" "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" -# dnsExit.com free dynamic DNS update url -"dnsexit.com" "http://www.dnsexit.com/RemoteUpdate.sv?login=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]&myip=[IP]" +"dyndnss.net" "http://www.dyndnss.net/?user=[USERNAME]&pass=[PASSWORD]&domain=[DOMAIN]&updater=other" -# OVH -"ovh.com" "http://[USERNAME]:[PASSWORD]@www.ovh.com/nic/update?system=dyndns&hostname=[DOMAIN]&myip=[IP]" +"dynsip.org" "http://[USERNAME]:[PASSWORD]@dynsip.org/nic/update?hostname=[DOMAIN]&myip=[IP]" -# dns-o-matic is a free service by opendns.com for updating multiple hosts and -# dynamic dns services in one api call. To update all your configured services -# at once, use "all.dnsomatic.com as the hostname. -"dnsomatic.com" "http://[USERNAME]:[PASSWORD]@updates.dnsomatic.com/nic/update?hostname=[DOMAIN]&myip=[IP]" +"dyns.net" "http://www.dyns.net/postscript011.php?username=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]&ip=[IP]" "200" -# 3322.org -"3322.org" "http://[USERNAME]:[PASSWORD]@members.3322.org/dyndns/update?system=dyndns&hostname=[DOMAIN]&myip=[IP]" +"dynu.com" "http://api.dynu.com/nic/update?hostname=[DOMAIN]&myip=[IP]&username=[USERNAME]&password=[PASSWORD]" -# namecheap.com -"namecheap.com" "http://dynamicdns.park-your-domain.com/update?host=[USERNAME]&domain=[DOMAIN]&password=[PASSWORD]&ip=[IP]" +"dynv6.com" "http://dynv6.com/api/update?hostname=[DOMAIN]&token=[PASSWORD]&ipv4=[IP]" "updated" -# easydns.com dynamic DNS -"easydns.com" "http://[USERNAME]:[PASSWORD]@api.cp.easydns.com/dyn/tomato.php?hostname=[DOMAIN]&myip=[IP]" +"easydns.com" "http://[USERNAME]:[PASSWORD]@api.cp.easydns.com/dyn/generic.php?hostname=[DOMAIN]&myip=[IP]" "NOERROR" -# Winco DDNS -"ddns.com.br" "http://[DOMAIN]:[PASSWORD]@members.ddns.com.br/nic/update?hostname=[DOMAIN]&myip=[IP]" +"editdns.net" "http://dyndns-free.editdns.net/api/dynLinux.php?p=[PASSWORD]&r=[DOMAIN]" -# Mythic Beasts (https://www.mythic-beasts.com) Dynamic DNS -"mythic-beasts.com" "http://dnsapi4.mythic-beasts.com/?domain=[USERNAME]&password=[PASSWORD]&command=REPLACE%20[DOMAIN]%2060%20A%20DYNAMIC_IP" +"goip.de" "http://www.goip.de/setip?username=[USERNAME]&password=[PASSWORD]&subdomain=[DOMAIN]&ip4=[IP]" -# Securepoint Dynamic-DNS-Service (http://www.spdns.de) -"spdns.de" "http://[USERNAME]:[PASSWORD]@update.spdns.de/nic/update?hostname=[DOMAIN]&myip=[IP]" +"google.com" "http://[USERNAME]:[PASSWORD]@domains.google.com/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" -# duiadns.net - free dynamic DNS -"duiadns.net" "http://ipv4.duia.ro/dynamic.duia?host=[DOMAIN]&password=[PASSWORD]&ip4=[IP]" +"he.net" "http://[DOMAIN]:[PASSWORD]@dyn.dns.he.net/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" -# Two-DNS - Simply. Connected. Everywhere. -"twodns.de" "http://[USERNAME]:[PASSWORD]@update.twodns.de/update?hostname=[DOMAIN]&ip=[IP]" +"joker.com" "http://svc.joker.com/nic/update?username=[USERNAME]&password=[PASSWORD]&myip=[IP]&hostname=[DOMAIN]" "good|nochg" -# MyDNS.JP -"mydns.jp" "http://www.mydns.jp/directip.html?MID=[USERNAME]&PWD=[PASSWORD]&IPV4ADDR=[IP]" +"loopia.se" "http://[USERNAME]:[PASSWORD]@dns.loopia.se/XDynDNSServer/XDynDNS.php?system=custom&hostname=[DOMAIN]&myip=[IP]" "good|nochg" -# LoopiaDNS -"loopia.se" "http://[USERNAME]:[PASSWORD]@dns.loopia.se/XDynDNSServer/XDynDNS.php?system=custom&hostname=[DOMAIN]&myip=[IP]" +"mydns.jp" "http://www.mydns.jp/directip.html?MID=[USERNAME]&PWD=[PASSWORD]&IPV4ADDR=[IP]" -# SelfHost.de -"selfhost.de" "http://carol.selfhost.de/update?username=[USERNAME]&password=[PASSWORD]&myip=[IP]&hostname=1" +"myonlineportal.net" "http://[USERNAME]:[PASSWORD]@myonlineportal.net/updateddns?hostname=[DOMAIN]&ip=[IP]" "good|nochg" + +"mythic-beasts.com" "http://dnsapi4.mythic-beasts.com/?domain=[USERNAME]&password=[PASSWORD]&command=REPLACE%20[DOMAIN]%2060%20A%20DYNAMIC_IP&origin=." + +"namecheap.com" "http://dynamicdns.park-your-domain.com/update?host=[USERNAME]&domain=[DOMAIN]&password=[PASSWORD]&ip=[IP]" + +"nettica.com" "http://www.nettica.com/Domain/Update.aspx?U=[USERNAME]&PC=[PASSWORD]&FQDN=[DOMAIN]&N=[IP]" + +"no-ip.pl" "http://[USERNAME]:[PASSWORD]@update.no-ip.pl/?hostname=[DOMAIN]" + +"now-dns.com" "http://[USERNAME]:[PASSWORD]@now-dns.com/update?hostname=[DOMAIN]" + +"nsupdate.info" "http://[USERNAME]:[PASSWORD]@ipv4.nsupdate.info/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"nubem.com" "http://[USERNAME]:[PASSWORD]@nubem.com/nic/update?hostname=[DOMAIN]&myip=[IP]" + +"opendns.com" "http://[USERNAME]:[PASSWORD]@updates.opendns.com/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"oray.com" "http://[USERNAME]:[PASSWORD]@ddns.oray.com/ph/update?hostname=[DOMAIN]&myip=[IP]" + +"ovh.com" "http://[USERNAME]:[PASSWORD]@www.ovh.com/nic/update?system=dyndns&hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"regfish.de" "http://dyndns.regfish.de/?fqdn=[DOMAIN]&forcehost=1&authtype=secure&token=[PASSWORD]&ipv4=[IP]" "success|100|101" + +"schokokeks.org" "http://[USERNAME]:[PASSWORD]@dyndns.schokokeks.org/nic/update?myip=[IP]" "good|nochg" + +"selfhost.de" "http://carol.selfhost.de/update?username=[USERNAME]&password=[PASSWORD]&myip=[IP]&hostname=1" "good|nochg|200|204" + +"sitelutions.com" "http://www.sitelutions.com/dnsup?user=[USERNAME]&pass=[PASSWORD]&id=[DOMAIN]&ip=[IP]" "success" + +"spdyn.de" "http://[USERNAME]:[PASSWORD]@update.spdyn.de/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"strato.com" "http://[USERNAME]:[PASSWORD]@dyndns.strato.com/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"system-ns.com" "http://system-ns.com/api?type=dynamic&command=set&domain=[DOMAIN]&token=[PASSWORD]&ip=[IP]" "0" + +"thatip.com" "http://update.dnsmax.com/update/?username=[USERNAME]&password=[PASSWORD]&resellerid=2&clientname=openwrt&clientversion=8.09&protocolversion=2.0&updatehostname=[DOMAIN]&ip=[IP]" + +"twodns.de" "http://[USERNAME]:[PASSWORD]@update.twodns.de/update?hostname=[DOMAIN]&ip=[IP]" + +"udmedia.de" "http://[USERNAME]:[PASSWORD]@www.udmedia.de/nic/update?myip=[IP]" + +"variomedia.de" "http://[USERNAME]:[PASSWORD]@dyndns.variomedia.de/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"xlhost.de" "http://[USERNAME]:[PASSWORD]@nsupdate.xlhost.de/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"zerigo.com" "http://update.zerigo.com/dynamic?user=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]&ip=[IP]" "ok" + +"zoneedit.com" "http://[USERNAME]:[PASSWORD]@dynamic.zoneedit.com/auth/dynamic.html?host=[DOMAIN]&dnsto=[IP]" -# no-ip.pl nothing to do with no-ip.com (domain registered to www.domeny.tv) (IP autodetected by provider) -"no-ip.pl" "http://[USERNAME]:[PASSWORD]@update.no-ip.pl/?hostname=[DOMAIN]" +"zzzz.io" "http://zzzz.io/api/v1/update/[DOMAIN]/?token=[PASSWORD]&ip=[IP]" "Updated|No change" -# domains.google.com non free service - require HTTPS communication -"domains.google.com" "https://[USERNAME]:[PASSWORD]@domains.google.com/nic/update?hostname=[DOMAIN]&myip=[IP]" diff --git a/net/ddns-scripts/files/services_ipv6 b/net/ddns-scripts/files/services_ipv6 index a0781a24fb..f2409d6ff5 100644 --- a/net/ddns-scripts/files/services_ipv6 +++ b/net/ddns-scripts/files/services_ipv6 @@ -22,22 +22,78 @@ # !!! Use only the script name (without path). Sample: # !!! "example.com" "update_sample.sh" # +# !!! Since ddns-scripts Version 2.5.x additional parameters are supported +# !!! and a given answer on success is checked (ignored by earlier versions) +# !!! Additional parameters: [PARAMOPT] and [PARAMENC]; [PARAMENC] is send urlencoded +# +# Line syntax: "service" [TAB] "update_url" [TAB] "answer" +# "service" name used as "option service_name" inside /etc/config/ddns +# "update_url" update url as given by the provider; custom urls should not saved here +# "answer" words inside providers answer string; use "|" to combine "or" +# # 66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666 +# +#.cloudflare.com-v1 !!! Please install additional package "ddns-scripts_cloudflare" +#.cloudflare.com-v4 !!! Please install additional package "ddns-scripts_cloudflare.com-v4" +#.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" + +"afraid.org-basicauth" "http://[USERNAME]:[PASSWORD]@freedns.afraid.org/nic/update?hostname=[DOMAIN]&myip=[IP] +"afraid.org-keyauth" "http://freedns.afraid.org/dynamic/update.php?[PASSWORD]&address=[IP]" + +"all-inkl.com" "http://[USERNAME]:[PASSWORD]@dyndns.kasserver.com/?myip=[IP]" + +"core-networks.de" "http://[USERNAME]:[PASSWORD]@dyndns.core-networks.de/?hostname=[DOMAIN]&myip=[IP]&keepipv4=1" "good" + +# "ddnss.de" "http://[USERNAME]:[PASSWORD]@ip6.ddnss.de/upd.php?host=[DOMAIN]&ip6=[IP]" "good|nochg" +"ddnss.de" "http://ip6.ddnss.de/upd.php?user=[USERNAME]&pwd=[PASSWORD]&host=[DOMAIN]&ip6=[IP]" "good|nochg" + +"desec.io" "http://[USERNAME]:[PASSWORD]@update.dedyn.io/?hostname=[DOMAIN]&myipv6=[IP]" "good|nochg" + +"dhis.org" "http://[USERNAME]:[PASSWORD]@is.dhis.org/" + +"dnshome.de" "http://[USERNAME]:[PASSWORD]@www.dnshome.de/dyndns.php?hostname=[DOMAIN]&ip6=[IP]" + +"do.de" "http://ddns.do.de/?myip=[IP]&hostname=[DOMAIN]&username=[USERNAME]&password=[PASSWORD]" "good|nochg" + +"duckdns.org" "http://www.duckdns.org/update?domains=[DOMAIN]&token=[PASSWORD]&ipv6=[IP]" "OK" + +"duiadns.net" "http://[USERNAME]:[PASSWORD]@ipv6.duia.ro/dynamic.duia?host=[DOMAIN]&ip6=[IP]" + +"dyn.com" "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" +"dyndns.org" "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"dynv6.com" "http://dynv6.com/api/update?hostname=[DOMAIN]&token=[PASSWORD]&ipv6=[IP]" "updated" + +"goip.de" "http://www.goip.de/setip?username=[USERNAME]&password=[PASSWORD]&subdomain=[DOMAIN]&ip6=[IP]" + +"google.com" "http://[USERNAME]:[PASSWORD]@domains.google.com/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"he.net" "http://[DOMAIN]:[PASSWORD]@dyn.dns.he.net/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"loopia.se" "http://[USERNAME]:[PASSWORD]@dns.loopia.se/XDynDNSServer/XDynDNS.php?system=custom&hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"mydns.jp" "http://www.mydns.jp/directip.html?MID=[USERNAME]&PWD=[PASSWORD]&IPV6ADDR=[IP]" + +"myonlineportal.net" "http://[USERNAME]:[PASSWORD]@myonlineportal.net/updateddns?hostname=[DOMAIN]&ip6=[IP]" "good|nochg" + +"mythic-beasts.com" "http://dnsapi6.mythic-beasts.com/?domain=[USERNAME]&password=[PASSWORD]&command=REPLACE%20[DOMAIN]%2060%20AAAA%20DYNAMIC_IP&origin=." + +"no-ip.pl" "http://[USERNAME]:[PASSWORD]@update.no-ip.pl/?hostname=[DOMAIN]" + +"now-dns.com" "http://[USERNAME]:[PASSWORD]@now-dns.com/update?hostname=[DOMAIN]" + +"nsupdate.info" "http://[USERNAME]:[PASSWORD]@ipv6.nsupdate.info/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" + +"regfish.de" "http://dyndns.regfish.de/?fqdn=[DOMAIN]&forcehost=1&authtype=secure&token=[PASSWORD]&ipv6=[IP]" "success|100|101" -# IPv6 @ Securepoint Dynamic-DNS-Service -"spdns.de" "http://[USERNAME]:[PASSWORD]@update.spdns.de/nic/update?hostname=[DOMAIN]&myip=[IP]" +"spdyn.de" "http://[USERNAME]:[PASSWORD]@update.spdyn.de/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" -# IPv6 @ Hurricane Electric Dynamic DNS -"he.net" "http://[DOMAIN]:[PASSWORD]@dyn.dns.he.net/nic/update?hostname=[DOMAIN]&myip=[IP]" +"udmedia.de" "http://[USERNAME]:[PASSWORD]@www.udmedia.de/nic/update?myip=[IP]" -# IPv6 @ MyDNS.JP -"mydns.jp" "http://www.mydns.jp/directip.html?MID=[USERNAME]&PWD=[PASSWORD]&IPV6ADDR=[IP]" +"variomedia.de" "http://[USERNAME]:[PASSWORD]@dyndns.variomedia.de/nic/update?hostname=[DOMAIN]&myip=[IP]" "good|nochg" -# IPv6 @ no-ip.pl nothing to do with no-ip.com (domain registered to www.domeny.tv) (IP autodetected by provider) -"no-ip.pl" "http://[USERNAME]:[PASSWORD]@update.no-ip.pl/?hostname=[DOMAIN]" +"zerigo.com" "http://update.zerigo.com/dynamic?user=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]&ip=[IP]" "ok" -# IPv6 @ freedns.afraid.org -"freedns.afraid.org" "http://freedns.afraid.org/dynamic/update.php?[PASSWORD]&address=[IP]" +"zzzz.io" "http://zzzz.io/api/v1/update/[DOMAIN]/?token=[PASSWORD]&type=aaaa&ip=[IP]" "Updated|No change" -# IPv6 @ LoopiaDNS -"loopia.se" "http://[USERNAME]:[PASSWORD]@dns.loopia.se/XDynDNSServer/XDynDNS.php?system=custom&hostname=[DOMAIN]&myip=[IP]" diff --git a/net/ddns-scripts/files/update_CloudFlare.sh b/net/ddns-scripts/files/update_cloudflare_com_v1.sh old mode 100644 new mode 100755 similarity index 84% rename from net/ddns-scripts/files/update_CloudFlare.sh rename to net/ddns-scripts/files/update_cloudflare_com_v1.sh index 15f3afd321..9fa9431dc2 --- a/net/ddns-scripts/files/update_CloudFlare.sh +++ b/net/ddns-scripts/files/update_cloudflare_com_v1.sh @@ -2,7 +2,7 @@ #.Distributed under the terms of the GNU General Public License (GPL) version 2.0 # # script for sending updates to cloudflare.com -#.2014-2015 Christian Schoenebeck +#.2014-2017 Christian Schoenebeck # many thanks to Paul for testing and feedback during development # # This script is parsed by dynamic_dns_functions.sh inside send_update() function @@ -19,15 +19,26 @@ [ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'" [ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'" -local __RECID __URL __KEY __KEYS __FOUND __SUBDOM __DOMAIN __TLD - -# split given Host/Domain into TLD, registrable domain, and subdomain -split_FQDN $domain __TLD __DOMAIN __SUBDOM -[ $? -ne 0 -o -z "$__DOMAIN" ] && \ - write_log 14 "Wrong Host/Domain configuration ($domain). Please correct configuration!" - -# put together what we need -__DOMAIN="$__DOMAIN.$__TLD" +local __RECID __URL __KEY __KEYS __FOUND __SUBDOM __DOMAIN __FQDN + +# split __SUBDOM __DOMAIN from $domain +# given data: +# @example.com for "domain record" +# host.sub@example.com for a "host record" +__SUBDOM=$(printf %s "$domain" | cut -d@ -f1) +__DOMAIN=$(printf %s "$domain" | cut -d@ -f2) + +# Cloudflare v1 needs: +# __DOMAIN = the base domain i.e. example.com +# __SUBDOM = the host.sub to change if a "host record" or blank if domain record +# __FQDN = the FQDN to detect record_id to change +# i.e. example.com for the "domain record" or host.sub.example.com for "host record" +if [ -z "$__SUBDOM" -o "$__SUBDOM" = "$__DOMAIN" ]; then + __SUBDOM="" + __FQDN="$__DOMAIN" +else + __FQDN="${__SUBDOM}.${__DOMAIN}" +fi # parse OpenWrt script with # functions for parsing and generating json @@ -35,7 +46,7 @@ __DOMAIN="$__DOMAIN.$__TLD" # function copied from /usr/share/libubox/jshn.sh # from BB14.09 for backward compatibility to AA12.09 -grep -i "json_get_keys" /usr/share/libubox/jshn.sh >/dev/null 2>&1 || json_get_keys() { +type "json_get_keys" >/dev/null 2>&1 || json_get_keys() { local __dest="$1" local _tbl_cur @@ -90,7 +101,7 @@ cleanup() { # json_get_var __DISPLAY "display_name" # for debugging json_get_var __NAME "name" json_get_var __TYPE "type" - if [ "$__NAME" = "$domain" ]; then + if [ "$__NAME" = "$__FQDN" ]; then # we must verify IPv4 and IPv6 because there might be both for the same host [ \( $use_ipv6 -eq 0 -a "$__TYPE" = "A" \) -o \( $use_ipv6 -eq 1 -a "$__TYPE" = "AAAA" \) ] && { __FOUND=1 # mark found @@ -106,7 +117,7 @@ cleanup() { } json_get_var __RECID "rec_id" # last thing to do get rec_id json_cleanup # cleanup - write_log 7 "rec_id '$__RECID' detected for host/domain '$domain'" + write_log 7 "rec_id '$__RECID' detected for host/domain '$__FQDN'" } # build url according to cloudflare client api at https://www.cloudflare.com/docs/client-api.html diff --git a/net/ddns-scripts/files/update_cloudflare_com_v4.sh b/net/ddns-scripts/files/update_cloudflare_com_v4.sh new file mode 100755 index 0000000000..aef3b73279 --- /dev/null +++ b/net/ddns-scripts/files/update_cloudflare_com_v4.sh @@ -0,0 +1,188 @@ +#!/bin/sh +# +#.Distributed under the terms of the GNU General Public License (GPL) version 2.0 +# +# script for sending updates to cloudflare.com +#.based on Ben Kulbertis cloudflare-update-record.sh found at http://gist.github.com/benkulbertis +#.and on George Johnson's cf-ddns.sh found at https://github.com/gstuartj/cf-ddns.sh +#.2016-2017 Christian Schoenebeck +# CloudFlare API documentation at https://api.cloudflare.com/ +# +# This script is parsed by dynamic_dns_functions.sh inside send_update() function +# +# using following options from /etc/config/ddns +# option username - your cloudflare e-mail +# option password - cloudflare api key, you can get it from cloudflare.com/my-account/ +# option domain - "hostname@yourdomain.TLD" # syntax changed to remove split_FQDN() function and tld_names.dat.gz +# +# variable __IP already defined with the ip-address to use for update +# + +# check parameters +[ -z "$CURL_SSL" ] && write_log 14 "Cloudflare communication require cURL with SSL support. Please install" +[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing key as 'username'" +[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing secret as 'password'" +[ $use_https -eq 0 ] && use_https=1 # force HTTPS + +# used variables +local __HOST __DOMAIN __TYPE __URLBASE __PRGBASE __RUNPROG __DATA __IPV6 __ZONEID __RECID +local __URLBASE="https://api.cloudflare.com/client/v4" + +# split __HOST __DOMAIN from $domain +# given data: +# @example.com for "domain record" +# host.sub@example.com for a "host record" +__HOST=$(printf %s "$domain" | cut -d@ -f1) +__DOMAIN=$(printf %s "$domain" | cut -d@ -f2) + +# Cloudflare v4 needs: +# __DOMAIN = the base domain i.e. example.com +# __HOST = the FQDN of record to modify +# i.e. example.com for the "domain record" or host.sub.example.com for "host record" + +# handling domain record then set __HOST = __DOMAIN +[ -z "$__HOST" ] && __HOST=$__DOMAIN +# handling host record then rebuild fqdn host@domain.tld => host.domain.tld +[ "$__HOST" != "$__DOMAIN" ] && __HOST="${__HOST}.${__DOMAIN}" + +# set record type +[ $use_ipv6 -eq 0 ] && __TYPE="A" || __TYPE="AAAA" + +# transfer function to use for godaddy +# all needed variables are set global here +# so we can use them directly +cloudflare_transfer() { + local __CNT=0 + local __ERR + while : ; do + write_log 7 "#> $__RUNPROG" + eval "$__RUNPROG" + __ERR=$? # save communication error + [ $__ERR -eq 0 ] && break # no error break while + + write_log 3 "cURL Error: '$__ERR'" + write_log 7 "$(cat $ERRFILE)" # report error + + [ $VERBOSE_MODE -gt 1 ] && { + # VERBOSE_MODE > 1 then NO retry + write_log 4 "Transfer failed - Verbose Mode: $VERBOSE_MODE - NO retry on error" + break + } + + __CNT=$(( $__CNT + 1 )) # increment error counter + # if error count > retry_count leave here + [ $retry_count -gt 0 -a $__CNT -gt $retry_count ] && \ + write_log 14 "Transfer failed after $retry_count retries" + + write_log 4 "Transfer failed - retry $__CNT/$retry_count in $RETRY_SECONDS seconds" + sleep $RETRY_SECONDS & + PID_SLEEP=$! + wait $PID_SLEEP # enable trap-handler + PID_SLEEP=0 + done + + # check for error + grep -q '"success":true' $DATFILE || { + write_log 4 "CloudFlare reported an error:" + write_log 7 "$(cat $DATFILE)" # report error + return 1 # HTTP-Fehler + } +} + +# Build base command to use +__PRGBASE="$CURL -RsS -o $DATFILE --stderr $ERRFILE" +# force network/interface-device to use for communication +if [ -n "$bind_network" ]; then + local __DEVICE + network_get_physdev __DEVICE $bind_network || \ + write_log 13 "Can not detect local device using 'network_get_physdev $bind_network' - Error: '$?'" + write_log 7 "Force communication via device '$__DEVICE'" + __PRGBASE="$__PRGBASE --interface $__DEVICE" +fi +# force ip version to use +if [ $force_ipversion -eq 1 ]; then + [ $use_ipv6 -eq 0 ] && __PRGBASE="$__PRGBASE -4" || __PRGBASE="$__PRGBASE -6" # force IPv4/IPv6 +fi +# set certificate parameters +if [ "$cacert" = "IGNORE" ]; then # idea from Ticket #15327 to ignore server cert + __PRGBASE="$__PRGBASE --insecure" # but not empty better to use "IGNORE" +elif [ -f "$cacert" ]; then + __PRGBASE="$__PRGBASE --cacert $cacert" +elif [ -d "$cacert" ]; then + __PRGBASE="$__PRGBASE --capath $cacert" +elif [ -n "$cacert" ]; then # it's not a file and not a directory but given + write_log 14 "No valid certificate(s) found at '$cacert' for HTTPS communication" +fi +# disable proxy if not set (there might be .wgetrc or .curlrc or wrong environment set) +# or check if libcurl compiled with proxy support +if [ -z "$proxy" ]; then + __PRGBASE="$__PRGBASE --noproxy '*'" +elif [ -z "$CURL_PROXY" ]; then + # if libcurl has no proxy support and proxy should be used then force ERROR + write_log 13 "cURL: libcurl compiled without Proxy support" +fi +# set headers +__PRGBASE="$__PRGBASE --header 'X-Auth-Email: $username' " +__PRGBASE="$__PRGBASE --header 'X-Auth-Key: $password' " +__PRGBASE="$__PRGBASE --header 'Content-Type: application/json' " +# __PRGBASE="$__PRGBASE --header 'Accept: application/json' " + +# read zone id for registered domain.TLD +__RUNPROG="$__PRGBASE --request GET '$__URLBASE/zones?name=$__DOMAIN'" +cloudflare_transfer || return 1 +# extract zone id +__ZONEID=$(grep -o '"id":"[^"]*' $DATFILE | grep -o '[^"]*$' | head -1) +[ -z "$__ZONEID" ] && { + write_log 4 "Could not detect 'zone id' for domain.tld: '$__DOMAIN'" + return 127 +} + +# read record id for A or AAAA record of host.domain.TLD +__RUNPROG="$__PRGBASE --request GET '$__URLBASE/zones/$__ZONEID/dns_records?name=$__HOST&type=$__TYPE'" +cloudflare_transfer || return 1 +# extract record id +__RECID=$(grep -o '"id":"[^"]*' $DATFILE | grep -o '[^"]*$' | head -1) +[ -z "$__RECID" ] && { + write_log 4 "Could not detect 'record id' for host.domain.tld: '$__HOST'" + return 127 +} + +# extract current stored IP +__DATA=$(grep -o '"content":"[^"]*' $DATFILE | grep -o '[^"]*$' | head -1) + +# check data +[ $use_ipv6 -eq 0 ] \ + && __DATA=$(printf "%s" "$__DATA" | grep -m 1 -o "$IPV4_REGEX") \ + || __DATA=$(printf "%s" "$__DATA" | grep -m 1 -o "$IPV6_REGEX") + +# we got data so verify +[ -n "$__DATA" ] && { + # expand IPv6 for compare + if [ $use_ipv6 -eq 1 ]; then + expand_ipv6 $__IP __IPV6 + expand_ipv6 $__DATA __DATA + [ "$__DATA" = "$__IPV6" ] && { # IPv6 no update needed + write_log 7 "IPv6 at CloudFlare.com already up to date" + return 0 + } + else + [ "$__DATA" = "$__IP" ] && { # IPv4 no update needed + write_log 7 "IPv4 at CloudFlare.com already up to date" + return 0 + } + fi +} + +# update is needed +# let's build data to send, +# use file to work around " needed for json +cat > $DATFILE << EOF +{"id":"$__ZONEID","type":"$__TYPE","name":"$__HOST","content":"$__IP"} +EOF + +# let's complete transfer command +__RUNPROG="$__PRGBASE --request PUT --data @$DATFILE '$__URLBASE/zones/$__ZONEID/dns_records/$__RECID'" +cloudflare_transfer || return 1 + +return 0 + diff --git a/net/ddns-scripts/files/update_godaddy_com_v1.sh b/net/ddns-scripts/files/update_godaddy_com_v1.sh new file mode 100755 index 0000000000..9633b4e245 --- /dev/null +++ b/net/ddns-scripts/files/update_godaddy_com_v1.sh @@ -0,0 +1,171 @@ +#!/bin/sh +# +#.Distributed under the terms of the GNU General Public License (GPL) version 2.0 +# +# script for sending updates to godaddy.com +#.based on GoDaddy.sh v1.0 by Nazar78 @ TeaNazaR.com +#.2017 Christian Schoenebeck +# GoDaddy Documentation at https://developer.godaddy.com/doc +# +# This script is parsed by dynamic_dns_functions.sh inside send_update() function +# +# using following options from /etc/config/ddns +# option username - "key" as generated at https://developer.godaddy.com/keys/ +# option password - "secret" as generated at https://developer.godaddy.com/keys/ +# option domain - "yourdomain.TLD" to update or "hostname@yourdomain.TLD" +# +# variable __IP already defined with the ip-address to use for update +# + +# check parameters +[ -z "$CURL_SSL" ] && write_log 14 "GoDaddy communication require cURL with SSL support. Please install" +[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing key as 'username'" +[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing secret as 'password'" +[ $use_https -eq 0 ] && use_https=1 # force HTTPS + +# used variables +local __HOST __DOMAIN __TYPE __URL __PRGBASE __RUNPROG __DATA __IPV6 + +# split __HOST __DOMAIN from $domain +# given data: +# @example.com for "domain record" +# host.sub@example.com for a "host record" +__HOST=$(printf %s "$domain" | cut -d@ -f1) +__DOMAIN=$(printf %s "$domain" | cut -d@ -f2) + +# GoDaddy needs: +# __DOMAIN = the base domain i.e. example.com +# __HOST = host.sub if updating a host record or +# __HOST = "@" urlencoded "%40" for a domain record +[ -z "$__HOST" -o "$__HOST" = "$__DOMAIN" ] && __HOST="%40" + +# set record type +[ $use_ipv6 -eq 0 ] && __TYPE="A" || __TYPE="AAAA" + +# now we know the url to use +# __URL="https://api.ote-godaddy.com/v1/domains/$__DOMAIN/records/$__TYPE/$__HOST" # api test server +__URL="https://api.godaddy.com/v1/domains/$__DOMAIN/records/$__TYPE/$__HOST" # production server + +# transfer function to use for godaddy +# all needed variables are set global here +# so we can use them directly +godaddy_transfer() { + local __CNT=0 + local __STATUS __ERR __DEVICE + while : ; do + write_log 7 "#> $__RUNPROG" + __STATUS=$(eval "$__RUNPROG") + __ERR=$? # save communication error + [ $__ERR -eq 0 ] && break # no error break while + + write_log 4 "cURL error: '$__ERR'" + write_log 7 "$(cat $ERRFILE)" # report error + + [ $VERBOSE_MODE -gt 1 ] && { + # VERBOSE_MODE > 1 then NO retry + write_log 4 "Transfer failed - Verbose Mode: $VERBOSE_MODE - NO retry on error" + break + } + + __CNT=$(( $__CNT + 1 )) # increment error counter + # if error count > retry_count leave here + [ $retry_count -gt 0 -a $__CNT -gt $retry_count ] && \ + write_log 14 "Transfer failed after $retry_count retries" + + write_log 4 "Transfer failed - retry $__CNT/$retry_count in $RETRY_SECONDS seconds" + sleep $RETRY_SECONDS & + PID_SLEEP=$! + wait $PID_SLEEP # enable trap-handler + PID_SLEEP=0 + done + + # handle HTTP error + [ $__STATUS -ne 200 ] && { + write_log 4 "GoDaddy reported an error:" + write_log 7 "$(cat $DATFILE)" + return 1 + } +} + +# Build base command to use +__PRGBASE="$CURL -RsS -w '%{http_code}' -o $DATFILE --stderr $ERRFILE" +# force network/interface-device to use for communication +if [ -n "$bind_network" ]; then + local __DEVICE + network_get_physdev __DEVICE $bind_network || \ + write_log 13 "Can not detect local device using 'network_get_physdev $bind_network' - Error: '$?'" + write_log 7 "Force communication via device '$__DEVICE'" + __PRGBASE="$__PRGBASE --interface $__DEVICE" +fi +# force ip version to use +if [ $force_ipversion -eq 1 ]; then + [ $use_ipv6 -eq 0 ] && __PRGBASE="$__PRGBASE -4" || __PRGBASE="$__PRGBASE -6" # force IPv4/IPv6 +fi +# set certificate parameters +if [ "$cacert" = "IGNORE" ]; then # idea from Ticket #15327 to ignore server cert + __PRGBASE="$__PRGBASE --insecure" # but not empty better to use "IGNORE" +elif [ -f "$cacert" ]; then + __PRGBASE="$__PRGBASE --cacert $cacert" +elif [ -d "$cacert" ]; then + __PRGBASE="$__PRGBASE --capath $cacert" +elif [ -n "$cacert" ]; then # it's not a file and not a directory but given + write_log 14 "No valid certificate(s) found at '$cacert' for HTTPS communication" +fi +# disable proxy if no set (there might be .wgetrc or .curlrc or wrong environment set) +# or check if libcurl compiled with proxy support +if [ -z "$proxy" ]; then + __PRGBASE="$__PRGBASE --noproxy '*'" +elif [ -z "$CURL_PROXY" ]; then + # if libcurl has no proxy support and proxy should be used then force ERROR + write_log 13 "cURL: libcurl compiled without Proxy support" +fi +# set headers +__PRGBASE="$__PRGBASE --header 'Authorization: sso-key $username:$password' " +__PRGBASE="$__PRGBASE --header 'Accept: application/json' " +__PRGBASE="$__PRGBASE --header 'Content-Type: application/json; charset=utf-8' " + +# read data from godaddy.com +__RUNPROG="$__PRGBASE --request GET $__URL" +godaddy_transfer || return 1 + +# HTTP 200 OK, now analyse data and check if update needed +__DATA=$(sed -r 's/.+data":"(.+)","t.+/\1/g' $DATFILE) + +# check data +[ $use_ipv6 -eq 0 ] \ + && __DATA=$(printf "%s" "$__DATA" | grep -m 1 -o "$IPV4_REGEX") \ + || __DATA=$(printf "%s" "$__DATA" | grep -m 1 -o "$IPV6_REGEX") + +# we got data so verify +[ -n "$__DATA" ] && { + # expand IPv6 for compare + if [ $use_ipv6 -eq 1 ]; then + expand_ipv6 $__IP __IPV6 + expand_ipv6 $__DATA __DATA + [ "$__DATA" = "$__IPV6" ] && { # IPv6 no update needed + write_log 7 "IPv6 at GoDaddy.com already up to date" + return 0 + } + else + [ "$__DATA" = "$__IP" ] && { # IPv4 no update needed + write_log 7 "IPv4 at GoDaddy.com already up to date" + return 0 + } + fi +} + +# update is needed +# let's build data to send, +# use file to work around double quotes '"' needed for json +cat > $DATFILE << EOF +[{"data":"$__IP"}] +EOF + +# let's complete transfer command +__RUNPROG="$__PRGBASE --request PUT --data @$DATFILE $__URL" + +godaddy_transfer || return 1 + +# HTTP 200 OK +return 0 + diff --git a/net/ddns-scripts/files/update_No-IP.com.sh b/net/ddns-scripts/files/update_no-ip_com.sh old mode 100644 new mode 100755 similarity index 100% rename from net/ddns-scripts/files/update_No-IP.com.sh rename to net/ddns-scripts/files/update_no-ip_com.sh diff --git a/net/ddns-scripts/files/update_nsupdate.sh b/net/ddns-scripts/files/update_nsupdate.sh old mode 100644 new mode 100755 index 1af94041e7..c5ac081c0e --- a/net/ddns-scripts/files/update_nsupdate.sh +++ b/net/ddns-scripts/files/update_nsupdate.sh @@ -17,9 +17,10 @@ # local __TTL=600 #.preset DNS TTL (in seconds) local __RRTYPE __PW __TCP +local __PROG=$(which nsupdate) # BIND nsupdate ? +[ -z "$__PROG" ] && __PROG=$(which knsupdate) # Knot nsupdate ? -[ -x /usr/bin/nsupdate ] || write_log 14 "'nsupdate' not installed or not executable !" - +[ -z "$__PROG" ] && write_log 14 "'nsupdate' or 'knsupdate' not installed !" [ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'" [ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'" [ -z "$dns_server" ] && write_log 14 "Service section not configured correctly! Missing 'dns_server'" @@ -35,12 +36,13 @@ update del $domain $__RRTYPE update add $domain $__TTL $__RRTYPE $__IP show send +answer quit EOF -/usr/bin/nsupdate -d $__TCP $DATFILE >$ERRFILE 2>&1 +$__PROG -d $__TCP $DATFILE >$ERRFILE 2>&1 # nsupdate always return success -write_log 7 "nsupdate reports:\n$(cat $ERRFILE)" +write_log 7 "(k)nsupdate reports:\n$(cat $ERRFILE)" -return 0 \ No newline at end of file +return 0 diff --git a/net/ddns-scripts/samples/ddns.config_sample b/net/ddns-scripts/samples/ddns.config_sample index b96a7af454..a3aa7e8132 100644 --- a/net/ddns-scripts/samples/ddns.config_sample +++ b/net/ddns-scripts/samples/ddns.config_sample @@ -29,31 +29,31 @@ config ddns "global" # and LuCI web application. # For codes see man pages of date command. # default: "%F %R" (ISO 8601 format) -# option date_format "%F %R" +# option ddns_dateformat "%F %R" ########### # set run directory to use for .pid and .update files # there will be a separate file for every running service section # default: "/var/run/ddns" -# option run_dir "/var/run/ddns" +# option ddns_rundir "/var/run/ddns" ########### # set log directory to use for .log files # there will be a separate file for every running service section # default: "/var/log/ddns" -# option log_dir "/var/log/ddns" +# option ddns_logdir "/var/log/ddns" ########### # set number of lines stored in .log file before auto truncated # default: "250" lines -# option log_lines "250" +# option ddns_loglines "250" ########### # Whether to allow to send Private/Special IP's to the DDNS provider # IPv4: 0.x, 10.x, 127.x, 172.16.x-172.31.x, 192.168.x # IPv6: ::, Fxxx: # default: "0" disabled -# option allow_local_ip "0" +# option upd_privateip "0" ##################################################################### # DDNS service settings @@ -115,9 +115,13 @@ config service "myddns" # option update_script "" ########### - # You must specify your domain/host name, your username and your password - # as you get from you DDNS provider. Keep an eye on providers help pages. + # Keep an eye on providers help pages. # + # FQDN of ONE of your defined host at DDNS provider + # REQUIRED to verify what the current IP at DNS using nslookup/host command + # default: none + option lookup_host "" + # Your DNS name / replace [DOMAIN] in update_url # default: none option domain "" @@ -126,10 +130,21 @@ config service "myddns" # default: none option username "" - # Password of your DDNS service account / replace [PASSWORD] in update_url + # Password of your DDNS service account / replace [PASSWORD] in update url # default: none option password "" + ########### + # Optional parameters for use inside update_url + # + # parameter that will be urlencoded before replacement of [PARAMENC] inside update url + # default: none + option param_enc "" + + # parameter that repace [PARAMOPT] inside update url + # default: none + option param_opt "" + ########### # use HTTPS for secure communication with you DDNS provider # personally found some providers having problems when not sending diff --git a/net/ddns-scripts/samples/update_sample.sh b/net/ddns-scripts/samples/update_sample.sh index 1799d229f1..00b51cbd2e 100644 --- a/net/ddns-scripts/samples/update_sample.sh +++ b/net/ddns-scripts/samples/update_sample.sh @@ -18,13 +18,15 @@ # # tested with spdns.de local __URL="http://[USERNAME]:[PASSWORD]@update.spdns.de/nic/update?hostname=[DOMAIN]&myip=[IP]" -# inside url we need username and password +# inside url we need domain, username and password +[ -z "$domain" ] && write_log 14 "Service section not configured correctly! Missing 'domain'" [ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'" [ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'" # do replaces in URL -__URL=$(echo $__URL | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \ - -e "s#\[DOMAIN\]#$domain#g" -e "s#\[IP\]#$__IP#g") +__URL=$(echo $__URL | | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \ + -e "s#\[PARAMENC\]#$URL_PENC#g" -e "s#\[PARAMOPT\]#$param_opt#g" \ + -e "s#\[DOMAIN\]#$domain#g" -e "s#\[IP\]#$__IP#g") [ $use_https -ne 0 ] && __URL=$(echo $__URL | sed -e 's#^http:#https:#') do_transfer "$__URL" || return 1 @@ -34,6 +36,6 @@ write_log 7 "DDNS Provider answered:\n$(cat $DATFILE)" # analyse provider answers # "good [IP_ADR]" = successful # "nochg [IP_ADR]" = no change but OK -grep -E "good|nochg" $DATFILE >/dev/null 2>&1 +grep -i -E "good|nochg" $DATFILE >/dev/null 2>&1 return $? # "0" if "good" or "nochg" found diff --git a/net/ddns-scripts/tools/public_suffix_list.sh b/net/ddns-scripts/tools/public_suffix_list.sh new file mode 100755 index 0000000000..c9765a1c93 --- /dev/null +++ b/net/ddns-scripts/tools/public_suffix_list.sh @@ -0,0 +1,39 @@ +#!/bin/sh + +URL="https://publicsuffix.org/list/public_suffix_list.dat" +TMPFILE=$(dirname $0)/public_suffix_list.tmp +DATFILE=$(dirname $0)/public_suffix_list.dat + +wget -O $TMPFILE $URL || exit 1 + +# there might be backslashes (at line end they produce problems) +sed -i 's/\\//g' $TMPFILE + +# clear DATFILE if exist +printf %s "" > $DATFILE +L=0; M=0 +export CHARSET=UTF-8 # needed for idn +cat ${TMPFILE} | while read LINE; do + L=$(( L + 1 )) + printf "\\r\\t%s\\t%s" "in: $L " "out: $(( $L + $M )) " + printf %s\\n "$LINE" | grep -E "^\/\/" >/dev/null 2>&1 && { + # do not modify lines beginning with "//" + printf %s\\n "$LINE" >> $DATFILE + continue + } + printf %s\\n "$LINE" | grep -E "^$" >/dev/null 2>&1 && { + # do not modify empty lines + printf %s\\n "$LINE" >> $DATFILE + continue + } + ASCII=$(idn -a "$LINE") # write ASCII and UTF-8 + if [ "$ASCII" != "$LINE" ]; then + printf %s\\n "$ASCII" >> $DATFILE + printf "\\t%s\\n" "add: $ASCII" + M=$(( M + 1 )) + fi + printf %s\\n "$LINE" >> $DATFILE +done +rm -f $TMPFILE +#gzip -f9 $DATFILE + -- 2.30.2