update 03-25 11:08

This commit is contained in:
github-actions[bot]
2022-03-25 11:08:05 +08:00
parent dea66df5a8
commit 81349f36ce
159 changed files with 34 additions and 8420 deletions

View File

@@ -1,47 +0,0 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=cgroupfs-mount
PKG_RELEASE:=2
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/tianon/$(PKG_NAME)
PKG_SOURCE_VERSION:=0549428171605eae3097a3e21bf7664845eac9e8
PKG_SOURCE_DATE:=2020-06-26
PKG_MIRROR_HASH:=skip
PKG_MAINTAINER:=Gerard Ryan <G.M0N3Y.2503@gmail.com>
include $(INCLUDE_DIR)/package.mk
define Package/cgroupfs-mount/config
config CGROUPFS_MOUNT_KERNEL_CGROUPS
bool "Enable kernel cgroups support"
depends on PACKAGE_cgroupfs-mount
default y if ( DOCKER_KERNEL_OPTIONS || LXC_KERNEL_OPTIONS )
select KERNEL_CGROUPS
endef
define Package/cgroupfs-mount
SECTION:=utils
CATEGORY:=Utilities
TITLE:=cgroup mount scripts
DEPENDS:=+mount-utils
MENU:=1
endef
define Package/cgroupfs-mount/description
Simple scripts to properly mount the cgroupfs hierarchy, especially structured for Debian packaging
endef
Build/Compile=# Nothing to compile, just install the scripts
define Package/cgroupfs-mount/install
$(INSTALL_DIR) $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/cgroupfs-mount $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/cgroupfs-umount $(1)/usr/bin/
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/cgroupfs-mount.init $(1)/etc/init.d/cgroupfs-mount
endef
$(eval $(call BuildPackage,cgroupfs-mount))

View File

@@ -1,12 +0,0 @@
#!/bin/sh /etc/rc.common
START=01
boot() {
# Procd mounts non-hierarchical cgroupfs so unmount first before cgroupfs-mount
if mountpoint -q /sys/fs/cgroup; then
umount /sys/fs/cgroup/
fi
cgroupfs-mount
}

View File

@@ -1,87 +0,0 @@
#
# Copyright (C) 2018 Lim Guo Wei
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=coremark
PKG_SOURCE_DATE:=2020-12-17
PKG_SOURCE_VERSION:=5e0f662ce709f1af8d272bd8d3960034603d3850
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_DATE).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/eembc/coremark/tar.gz/$(PKG_SOURCE_VERSION)?
PKG_HASH:=skip
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_SOURCE_VERSION)
PKG_MAINTAINER:=Lim Guo Wei <limguowei@gmail.com>
PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE.md
PKG_USE_MIPS16:=0
include $(INCLUDE_DIR)/package.mk
define Package/coremark
SECTION:=utils
CATEGORY:=Utilities
TITLE:=CoreMark Embedded Microprocessor Benchmark
URL:=https://github.com/eembc/coremark
endef
define Package/coremark/description
Embedded Microprocessor Benchmark
endef
DIR_ARCH:=linux$(if $(CONFIG_ARCH_64BIT),64)
define Package/coremark/config
config COREMARK_OPTIMIZE_O3
bool "Use all optimizations (-O3)"
depends on PACKAGE_coremark
default y
help
This enables additional optmizations using the -O3 compilation flag.
config COREMARK_ENABLE_MULTITHREADING
bool "Enable multithreading support"
depends on PACKAGE_coremark
default n
help
This enables multithreading support
config COREMARK_NUMBER_OF_THREADS
int "Number of threads"
depends on COREMARK_ENABLE_MULTITHREADING
default 2
help
Number of threads to run in parallel
endef
TARGET_CFLAGS += -flto
ifeq ($(CONFIG_COREMARK_OPTIMIZE_O3),y)
TARGET_CFLAGS := $(filter-out -O%,$(TARGET_CFLAGS)) -O3
endif
ifeq ($(CONFIG_COREMARK_ENABLE_MULTITHREADING),y)
EXTRA_CFLAGS := -DMULTITHREAD=$(CONFIG_COREMARK_NUMBER_OF_THREADS) -DUSE_PTHREAD
endif
define Build/Compile
$(SED) 's|EXE = .exe|EXE =|' $(PKG_BUILD_DIR)/$(DIR_ARCH)/core_portme.mak
mkdir $(PKG_BUILD_DIR)/$(ARCH)
$(CP) -r $(PKG_BUILD_DIR)/$(DIR_ARCH)/* $(PKG_BUILD_DIR)/$(ARCH)
$(MAKE) -C $(PKG_BUILD_DIR) PORT_DIR=$(ARCH) $(MAKE_FLAGS) \
PORT_CFLAGS="$(TARGET_CFLAGS)" XCFLAGS="$(EXTRA_CFLAGS)" compile
endef
define Package/coremark/install
$(INSTALL_DIR) $(1)/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/coremark $(1)/bin/
endef
$(eval $(call BuildPackage,coremark))

View File

@@ -1,438 +0,0 @@
#
# Copyright (C) 2008-2018 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=ddns-scripts
PKG_VERSION:=2.8.2
PKG_RELEASE:=12
PKG_LICENSE:=GPL-2.0
include $(INCLUDE_DIR)/package.mk
define Package/ddns-scripts/Default
SECTION:=net
CATEGORY:=Network
SUBMENU:=IP Addresses and Names
PKGARCH:=all
endef
define Package/ddns-scripts
$(call Package/ddns-scripts/Default)
TITLE:=Dynamic DNS Client scripts (with IPv6 support)
DEPENDS:=+ddns-scripts-services
endef
define Package/ddns-scripts/description
Dynamic DNS Client scripts (with IPv6 support)
A highly configurable set of scripts for doing dynamic dns updates.
- IPv6 support
- DNS server support
- 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 : https://openwrt.org/docs/guide-user/services/ddns/client
endef
define Package/ddns-scripts/conffiles
/etc/config/ddns
endef
define Package/ddns-scripts-services
$(call Package/ddns-scripts/Default)
TITLE:=Common ddns providers
endef
define Package/ddns-scripts-services/description
Dynamic DNS Client definitions for supported services
endef
define Package/ddns-scripts-cloudflare
$(call Package/ddns-scripts/Default)
TITLE:=Extension for cloudflare.com API v4
DEPENDS:=ddns-scripts +curl
endef
define Package/ddns-scripts-cloudflare/description
Dynamic DNS Client scripts extension for cloudflare.com API v4 (require curl)
endef
define Package/ddns-scripts-freedns
$(call Package/ddns-scripts/Default)
TITLE:=Extension for freedns.42.pl
DEPENDS:=ddns-scripts +curl
endef
define Package/ddns-scripts-freedns/description
Dynamic DNS Client scripts extension for "freedns.42.pl".
endef
define Package/ddns-scripts-godaddy
$(call Package/ddns-scripts/Default)
TITLE:=Extension for godaddy.com API v1
DEPENDS:=ddns-scripts +curl
endef
define Package/ddns-scripts-godaddy/description
Dynamic DNS Client scripts extension for "godaddy.com API v1".
endef
define Package/ddns-scripts-digitalocean
$(call Package/ddns-scripts/Default)
TITLE:=Extention for digitalocean.com API v2
DEPENDS:=ddns-scripts +curl
endef
define Package/ddns-scripts-digitalocean/description
Dynamic DNS Client scripts extension for "digitalocean.com API v2".
The script directly updates a DNS record using the DO API.
It requires:
"option dns_server" to be set to the server to be used by nsupdate.
"option domain" the dns domain to update the record for (eg. A-record: home.<example.com>)
"option username" the dns record name to update (eg. A-record: <home>.example.com)
"option param_opt" the id of the dns record to update (check using chrome inspector in the DO dns tab)
"option password" the api token generated in the DO panel
endef
define Package/ddns-scripts-noip
$(call Package/ddns-scripts/Default)
TITLE:=Extension for no-ip.com
DEPENDS:=ddns-scripts
endef
define Package/ddns-scripts-noip/description
Dynamic DNS Client scripts extension for "no-ip.com".
endef
define Package/ddns-scripts-nsupdate
$(call Package/ddns-scripts/Default)
TITLE:=Extension for using bind nsupdate.
DEPENDS:=ddns-scripts +bind-client
endef
define Package/ddns-scripts-nsupdate/description
Dynamic DNS Client scripts extension for direct updates using bind nsupdate
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 password" to the base64 encoded shared secret.
endef
define Package/ddns-scripts-route53
$(call Package/ddns-scripts/Default)
TITLE:=Extension for route53 API v1
DEPENDS:=ddns-scripts +curl +openssl-util
endef
define Package/ddns-scripts-route53/description
Dynamic DNS Client scripts extension for Amazon AWS "route53 API v1".
Note: You must also install ca-certificate or ca-bundle.
It requires:
"option username" to be a valid AWS access key id
"option password" to be the matching AWS secret key id
"option domain" to contain the hosted zone ID
endef
define Package/ddns-scripts-cnkuai
$(call Package/ddns-scripts/Default)
TITLE:=CnKuai API
DEPENDS:=ddns-scripts +curl +giflib-utils
endef
define Package/ddns-scripts-cnkuai/description
Dynamic DNS Client scripts extension for "cnkuai.cn".
It requires:
"option username" to be a valid CnKuai control panel id
"option password" to be the matching CnKuai control panel password
"option domain" to contain the domain
endef
define Package/ddns-scripts-gandi
$(call Package/ddns-scripts/Default)
TITLE:=Gandi API
DEPENDS:=ddns-scripts +curl
endef
define Package/ddns-scripts-gandi/description
Dynamic DNS Client scripts extension for "gandi.net".
It requires:
"option username" to be a valid subdomain for gandi.net
"option password" to be a valid API key for ganid.net
endef
define Build/Configure
endef
define Build/Compile
endef
define Package/ddns-scripts/install
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
$(INSTALL_DATA) ./files/etc/hotplug.d/iface/ddns \
$(1)/etc/hotplug.d/iface/95-ddns
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/etc/init.d/ddns \
$(1)/etc/init.d/ddns
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./files/etc/config/ddns \
$(1)/etc/config/ddns
$(INSTALL_DIR) $(1)/usr/share/ddns
echo "$(PKG_VERSION)-$(PKG_RELEASE)" > $(1)/usr/share/ddns/version
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_DATA) ./files/usr/lib/ddns/dynamic_dns_functions.sh \
$(1)/usr/lib/ddns
$(INSTALL_BIN) ./files/usr/lib/ddns/dynamic_dns_lucihelper.sh \
$(1)/usr/lib/ddns
$(INSTALL_BIN) ./files/usr/lib/ddns/dynamic_dns_updater.sh \
$(1)/usr/lib/ddns
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) ./files/usr/bin/ddns.sh \
$(1)/usr/bin/ddns
endef
define Package/ddns-scripts/postinst
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
/etc/init.d/ddns enabled
/etc/init.d/ddns start
fi
exit 0
endef
define Package/ddns-scripts/prerm
#!/bin/sh
if [ -n "$${IPKG_INSTROOT}" ]; then
/etc/init.d/ddns stop
/etc/init.d/ddns disable
fi
exit 0
endef
define Package/ddns-scripts-services/install
$(INSTALL_DIR) $(1)/usr/share/ddns/default
$(INSTALL_DATA) ./files/usr/share/ddns/default/* \
$(1)/usr/share/ddns/default
# Remove special services
rm $(1)/usr/share/ddns/default/cloudflare.com-v4.json
rm $(1)/usr/share/ddns/default/freedns.42.pl.json
rm $(1)/usr/share/ddns/default/godaddy.com-v1.json
rm $(1)/usr/share/ddns/default/digitalocean.com-v2.json
rm $(1)/usr/share/ddns/default/no-ip.com.json
rm $(1)/usr/share/ddns/default/bind-nsupdate.json
rm $(1)/usr/share/ddns/default/route53-v1.json
rm $(1)/usr/share/ddns/default/cnkuai.cn.json
rm $(1)/usr/share/ddns/default/gandi.net.json
endef
define Package/ddns-scripts-cloudflare/install
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) ./files/usr/lib/ddns/update_cloudflare_com_v4.sh \
$(1)/usr/lib/ddns
$(INSTALL_DIR) $(1)/usr/share/ddns/default
$(INSTALL_DATA) ./files/usr/share/ddns/default/cloudflare.com-v4.json \
$(1)/usr/share/ddns/default/
endef
define Package/ddns-scripts-cloudflare/prerm
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
/etc/init.d/ddns stop
fi
exit 0
endef
define Package/ddns-scripts-freedns/install
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) ./files/usr/lib/ddns/update_freedns_42_pl.sh \
$(1)/usr/lib/ddns
$(INSTALL_DIR) $(1)/usr/share/ddns/default
$(INSTALL_DATA) ./files/usr/share/ddns/default/freedns.42.pl.json \
$(1)/usr/share/ddns/default
endef
define Package/ddns-scripts-freedns/prerm
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
/etc/init.d/ddns stop
fi
exit 0
endef
define Package/ddns-scripts-godaddy/install
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) ./files/usr/lib/ddns/update_godaddy_com_v1.sh \
$(1)/usr/lib/ddns
$(INSTALL_DIR) $(1)/usr/share/ddns/default
$(INSTALL_DATA) ./files/usr/share/ddns/default/godaddy.com-v1.json \
$(1)/usr/share/ddns/default
endef
define Package/ddns-scripts-godaddy/prerm
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
/etc/init.d/ddns stop
fi
exit 0
endef
define Package/ddns-scripts-digitalocean/install
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) ./files/usr/lib/ddns/update_digitalocean_com_v2.sh \
$(1)/usr/lib/ddns
$(INSTALL_DIR) $(1)/usr/share/ddns/default
$(INSTALL_DATA) ./files/usr/share/ddns/default/digitalocean.com-v2.json \
$(1)/usr/share/ddns/default
endef
define Package/ddns-scripts-digitalocean/prerm
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
/etc/init.d/ddns stop
fi
exit 0
endef
define Package/ddns-scripts-noip/install
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) ./files/usr/lib/ddns/update_no-ip_com.sh \
$(1)/usr/lib/ddns
$(INSTALL_DIR) $(1)/usr/share/ddns/default
$(INSTALL_DATA) ./files/usr/share/ddns/default/no-ip.com.json \
$(1)/usr/share/ddns/default
endef
define Package/ddns-scripts-noip/prerm
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
/etc/init.d/ddns stop
fi
exit 0
endef
define Package/ddns-scripts-nsupdate/install
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) ./files/usr/lib/ddns/update_nsupdate.sh \
$(1)/usr/lib/ddns
$(INSTALL_DIR) $(1)/usr/share/ddns/default
$(INSTALL_DATA) ./files/usr/share/ddns/default/bind-nsupdate.json \
$(1)/usr/share/ddns/default
endef
define Package/ddns-scripts-nsupdate/prerm
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
/etc/init.d/ddns stop
fi
exit 0
endef
define Package/ddns-scripts-route53/install
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) ./files/usr/lib/ddns/update_route53_v1.sh \
$(1)/usr/lib/ddns
$(INSTALL_DIR) $(1)/usr/share/ddns/default
$(INSTALL_DATA) ./files/usr/share/ddns/default/route53-v1.json \
$(1)/usr/share/ddns/default
endef
define Package/ddns-scripts-route53/prerm
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
/etc/init.d/ddns stop
fi
exit 0
endef
define Package/ddns-scripts-cnkuai/install
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) ./files/usr/lib/ddns/update_cnkuai_cn.sh \
$(1)/usr/lib/ddns
$(INSTALL_DIR) $(1)/usr/share/ddns/default
$(INSTALL_DATA) ./files/usr/share/ddns/default/cnkuai.cn.json \
$(1)/usr/share/ddns/default
endef
define Package/ddns-scripts-cnkuai/prerm
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
/etc/init.d/ddns stop
fi
exit 0
endef
define Package/ddns-scripts-gandi/install
$(INSTALL_DIR) $(1)/usr/lib/ddns
$(INSTALL_BIN) ./files/usr/lib/ddns/update_gandi_net.sh \
$(1)/usr/lib/ddns
$(INSTALL_DIR) $(1)/usr/share/ddns/default
$(INSTALL_DATA) ./files/usr/share/ddns/default/gandi.net.json \
$(1)/usr/share/ddns/default
endef
define Package/ddns-scripts-gandi/prerm
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
/etc/init.d/ddns stop
fi
exit 0
endef
$(eval $(call BuildPackage,ddns-scripts))
$(eval $(call BuildPackage,ddns-scripts-services))
$(eval $(call BuildPackage,ddns-scripts-cloudflare))
$(eval $(call BuildPackage,ddns-scripts-freedns))
$(eval $(call BuildPackage,ddns-scripts-godaddy))
$(eval $(call BuildPackage,ddns-scripts-digitalocean))
$(eval $(call BuildPackage,ddns-scripts-noip))
$(eval $(call BuildPackage,ddns-scripts-nsupdate))
$(eval $(call BuildPackage,ddns-scripts-route53))
$(eval $(call BuildPackage,ddns-scripts-cnkuai))
$(eval $(call BuildPackage,ddns-scripts-gandi))

View File

@@ -1,32 +0,0 @@
#
# Please read https://openwrt.org/docs/guide-user/base-system/ddns
#
config ddns "global"
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.org"
option lookup_host "yourhost.example.com"
option domain "yourhost.example.com"
option username "your_username"
option password "your_password"
option interface "wan"
option ip_source "network"
option ip_network "wan"
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"
option use_ipv6 "1"
option interface "wan6"
option ip_source "network"
option ip_network "wan6"

View File

@@ -1,11 +0,0 @@
#!/bin/sh
# there are other ACTIONs like ifupdate we don't need
case "$ACTION" in
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_updater.sh -n "$INTERFACE" -- stop
;;
esac

View File

@@ -1,24 +0,0 @@
#!/bin/sh /etc/rc.common
START=95
STOP=10
reload() {
/usr/lib/ddns/dynamic_dns_updater.sh -- reload
return 0
}
restart() {
/usr/lib/ddns/dynamic_dns_updater.sh -- stop
sleep 1 # give time to shutdown
/usr/lib/ddns/dynamic_dns_updater.sh -- start
}
start() {
/usr/lib/ddns/dynamic_dns_updater.sh -- start
}
stop() {
/usr/lib/ddns/dynamic_dns_updater.sh -- stop
return 0
}

View File

@@ -1,172 +0,0 @@
#!/bin/sh
#
# Copyright (C) 2020 TDT AG <development@tdt.de>
#
# This is free software, licensed under the GNU General Public License v2.
# See https://www.gnu.org/licenses/gpl-2.0.txt for more information.
#
. /lib/functions.sh
DDNS_PACKAGE_DIR="/usr/share/ddns"
URL="https://raw.githubusercontent.com/openwrt/packages/master/net/ddns-scripts/files"
usage() {
local code="$1"
local msg="$2"
echo "$msg"
echo ""
echo "Usage: $(basename "$0") <command> <action> <service>"
echo ""
echo "Supported ddns <command>:"
echo " service: Command for custom ddns service providers"
echo ""
echo "Supported ddns 'service' command <action>:"
echo " update: Update local custom ddns service list"
echo " list-available: List all available custom service providers"
echo " list-installed: List all installed custom service providers"
echo " install <service>: Install custom service provider"
echo " remove <service>: Remove custom service provider"
echo " purge: Remove local custom ddns services"
exit "$code"
}
action_update() {
local cacert
config_load ddns
config_get url global 'url' "${URL}${DDNS_PACKAGE_DIR}"
config_get cacert global 'cacert' "IGNORE"
url="${url}/list"
mkdir -p "${DDNS_PACKAGE_DIR}"
if [ "$cacert" = "IGNORE" ]; then
uclient-fetch \
--no-check-certificate \
"$url" \
-O "${DDNS_PACKAGE_DIR}/list"
elif [ -f "$cacert" ]; then
uclient-fetch \
--ca-certificate="${cacert}" \
"$url" \
-O "${DDNS_PACKAGE_DIR}/list"
elif [ -n "$cacert" ]; then
echo "Certification file not found ($cacert)"
exit 5
fi
}
action_list_available() {
if [ -f "${DDNS_PACKAGE_DIR}/list" ]; then
cat "${DDNS_PACKAGE_DIR}/list"
else
echo "No custom service list file found. Please download first"
exit 3
fi
}
action_list_installed() {
if [ -d "${DDNS_PACKAGE_DIR}/custom" ]; then
ls "${DDNS_PACKAGE_DIR}/custom"
else
echo "No custom services installed"
exit 4
fi
}
action_install() {
local service="$1"
local url cacert
config_load ddns
config_get url global 'url' "${URL}${DDNS_PACKAGE_DIR}/default"
config_get cacert global 'cacert' "IGNORE"
url="${url}/${service}.json"
if [ -z "$service" ]; then
usage "4" "No custom service specified"
fi
mkdir -p "${DDNS_PACKAGE_DIR}/custom"
if [ "$cacert" = "IGNORE" ]; then
uclient-fetch \
--no-check-certificate \
"${url}" \
-O "${DDNS_PACKAGE_DIR}/custom/${service}.json"
elif [ -f "$cacert" ]; then
uclient-fetch \
--ca-certifcate="${cacert}" \
"${url}" \
-O "${DDNS_PACKAGE_DIR}/custom/${service}.json"
elif [ -n "$cacert" ]; then
echo "Certification file not found ($cacert)"
exit 5
fi
}
action_remove() {
local service="$1"
if [ -z "$service" ]; then
usage "4" "No custom service specified"
fi
rm "${DDNS_PACKAGE_DIR}/custom/${service}.json"
}
action_purge() {
rm -rf "${DDNS_PACKAGE_DIR}/custom"
rm -rf "${DDNS_PACKAGE_DIR}/list"
}
sub_service() {
local action="$1"
local service="$2"
case "$action" in
update)
action_update
;;
list-available)
action_list_available
;;
list-installed)
action_list_installed
;;
purge)
action_purge
;;
install)
action_install "$service"
;;
remove)
action_remove "$service"
;;
*)
usage "2" "Action not supported"
;;
esac
}
main() {
local cmd="$1"
local action="$2"
local service="$3"
[ "$#" -eq 0 ] && usage "1"
case "${cmd}" in
service)
sub_service "${action}" "${service}"
;;
*)
usage "1" "Command not supported"
;;
esac
}
main "$@"

File diff suppressed because it is too large Load Diff

View File

@@ -1,172 +0,0 @@
#!/bin/sh
# /usr/lib/ddns/dynamic_dns_lucihelper.sh
#
#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
#.2014-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
# This script is used by luci-app-ddns
#
# 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
. /usr/lib/ddns/dynamic_dns_functions.sh # global vars are also defined here
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="$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 # 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)
[ -z "$lookup_host" ] && usage_err "command 'get_registered_ip': 'lookup_host' not set"
write_log 7 "-----> get_registered_ip IP"
[ -z "$SECTION" ] || IPFILE="$ddns_rundir/$SECTION.ip"
IP=""
get_registered_ip IP
__RET=$?
[ $__RET -ne 0 ] && IP=""
printf "%s" "$IP"
;;
verify_dns)
[ -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)
[ -z "$proxy" ] && usage_err "command 'verify_proxy': 'proxy' not set"
write_log 7 "-----> verify_proxy '$proxy'"
verify_proxy "$proxy"
__RET=$?
;;
get_local_ip)
[ -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"
export HTTPS_PROXY="http://$proxy"
export http_proxy="http://$proxy"
export https_proxy="http://$proxy"
}
# don't need IP only the return code
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
;;
esac
# remove out and err file
[ -f $DATFILE ] && rm -f $DATFILE
[ -f $ERRFILE ] && rm -f $ERRFILE
return $__RET

View File

@@ -1,436 +0,0 @@
#!/bin/sh
# /usr/lib/ddns/dynamic_dns_updater.sh
#
#.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
#.2014-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
#
# 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
. $(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
}
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"
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="$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
IPFILE="$ddns_rundir/$SECTION_ID.ip" #
LOGFILE="$ddns_logdir/$SECTION_ID.log" # log file
# 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 -gt 1 -a -f $LOGFILE ] && rm -f $LOGFILE
# TRAP handler
trap "trap_handler 0 \$?" 0 # handle script exit with exit status
trap "trap_handler 1" 1 # SIGHUP Hangup / reload config
trap "trap_handler 2" 2 # SIGINT Terminal interrupt
trap "trap_handler 3" 3 # SIGQUIT Terminal quit
# trap "trap_handler 9" 9 # SIGKILL no chance to trap
trap "trap_handler 15" 15 # SIGTERM Termination
################################################################################
# Leave this comment here, to clearly document variable names that are expected/possible
# Use load_all_config_options to load config options, which is a much more flexible solution.
#
# config_load "ddns"
# config_get <variable> $SECTION_ID <option>
#
# defined options (also used as variable):
#
# 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
#
# 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
#
# use_syslog log activity to syslog
#
# ip_source source to detect current local IP ('network' or 'web' or 'script' or 'interface')
# ip_network local defined network to read IP from i.e. 'wan' or 'wan6'
# ip_url URL to read local address from i.e. http://checkip.dyndns.com/ or http://checkipv6.dyndns.com/
# ip_script full path and name of your script to detect local IP
# ip_interface physical interface to use for detecting
#
# check_interval check for changes every !!! checks below 10 minutes make no sense because the Internet
# check_unit 'days' 'hours' 'minutes' !!! needs about 5-10 minutes to sync an IP-change for an DNS entry
#
# force_interval force to send an update to your service if no change was detected
# force_unit 'days' 'hours' 'minutes' !!! force_interval="0" runs this script once for use i.e. with cron
#
# retry_interval if error was detected retry in
# retry_unit 'days' 'hours' 'minutes' 'seconds'
# retry_count number of retries before scripts stops
#
# use_ipv6 detecting/sending IPv6 address
# force_ipversion force usage of IPv4 or IPv6 for the whole detection and update communication
# dns_server using a non default dns server to get Registered IP from Internet
# 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
# - BIND host installed to detect Registered IP
#
################################################################################
load_all_config_options "ddns" "$SECTION_ID"
ERR_LAST=$? # save return code - equal 0 if SECTION_ID found
# set defaults if not defined
[ -z "$enabled" ] && enabled=0
[ -z "$retry_count" ] && retry_count=0 # endless retry
[ -z "$use_syslog" ] && use_syslog=2 # syslog "Notice"
[ -z "$use_https" ] && use_https=0 # not use https
[ -z "$use_logfile" ] && use_logfile=1 # use logfile by default
[ -z "$use_ipv6" ] && use_ipv6=0 # use IPv4 by default
[ -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"
[ "$ip_source" = "web" -a -z "$ip_url" -a $use_ipv6 -eq 1 ] && ip_url="http://checkipv6.dyndns.com"
[ "$ip_source" = "interface" -a -z "$ip_interface" ] && ip_interface="eth1"
# 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"
# SECTION_ID does not exists
[ $ERR_LAST -ne 0 ] && {
[ $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 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 '$VERBOSE'";;
esac
# check enabled state otherwise we don't need to continue
[ $enabled -eq 0 ] && write_log 14 "Service section disabled!"
# 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" ] && {
# Check first if we have a custom service provider with this name
get_service_data "$service_name" "/usr/share/ddns/custom" update_url update_script UPD_ANSWER
if [ "$?" != "0" ]; then
get_service_data "$service_name" "/usr/share/ddns/default" update_url update_script UPD_ANSWER
fi
}
[ -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!"
# 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'"
# verify validity of variables
[ -n "$lookup_host" ] && sanitize_variable lookup_host "$DNS_CHARSET" ""
[ -n "$dns_server" ] && sanitize_variable dns_server "$DNS_CHARSET" ""
[ -n "$domain" ] && sanitize_variable domain "$DNS_CHARSET_DOMAIN" ""
# Filter shell escape characters, if these are required in the URL, they
# can still be passed url encoded
[ -n "$param_opt" ] && sanitize_variable param_opt "" "$SHELL_ESCAPE"
[ -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'"
}
# verify ip_source 'script' if script is configured and executable
if [ "$ip_source" = "script" ]; then
set -- $ip_script #handling script with parameters, we need a trick
[ -z "$1" ] && write_log 14 "No script defined to detect local IP!"
[ -x "$1" ] || write_log 14 "Script to detect local IP not executable!"
fi
# compute update interval in seconds
get_seconds CHECK_SECONDS ${check_interval:-10} ${check_unit:-"minutes"} # default 10 min
get_seconds FORCE_SECONDS ${force_interval:-72} ${force_unit:-"hours"} # default 3 days
get_seconds RETRY_SECONDS ${retry_interval:-60} ${retry_unit:-"seconds"} # default 60 sec
[ $CHECK_SECONDS -lt 300 ] && CHECK_SECONDS=300 # minimum 5 minutes
[ $FORCE_SECONDS -gt 0 -a $FORCE_SECONDS -lt $CHECK_SECONDS ] && FORCE_SECONDS=$CHECK_SECONDS # FORCE_SECONDS >= CHECK_SECONDS or 0
write_log 7 "check interval: $CHECK_SECONDS seconds"
write_log 7 "force interval: $FORCE_SECONDS seconds"
write_log 7 "retry interval: $RETRY_SECONDS seconds"
write_log 7 "retry counter : $retry_count times"
# kill old process if it exists & set new pid file
stop_section_processes "$SECTION_ID"
[ $? -gt 0 ] && write_log 7 "'SIGTERM' was send to old process" || write_log 7 "No old process"
echo $$ > $PIDFILE
# determine when the last update was
# the following lines should prevent multiple updates if hotplug fires multiple startups
# as described in Ticket #7820, but did not function if never an update take place
# i.e. after a reboot (/var is linked to /tmp)
# using uptime as reference because date might not be updated via NTP client
get_uptime CURR_TIME
[ -e "$UPDFILE" ] && {
LAST_TIME=$(cat $UPDFILE)
# check also LAST > CURR because link of /var/run to /tmp might be removed
# i.e. boxes with larger filesystems
[ -z "$LAST_TIME" ] && LAST_TIME=0
[ $LAST_TIME -gt $CURR_TIME ] && LAST_TIME=0
}
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 +'$ddns_dateformat'"
write_log 7 "last update: $(eval $EPOCH_TIME)"
fi
# verify DNS server
[ -n "$dns_server" ] && verify_dns "$dns_server"
# verify Proxy server and set environment
[ -n "$proxy" ] && {
verify_proxy "$proxy" && {
# everything ok set proxy
export HTTP_PROXY="http://$proxy"
export HTTPS_PROXY="http://$proxy"
export http_proxy="http://$proxy"
export https_proxy="http://$proxy"
}
}
# let's check if there is already an IP registered on the web
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
[ $FORCE_SECONDS -eq 0 -o $LAST_TIME -eq 0 ] \
&& NEXT_TIME=0 \
|| NEXT_TIME=$(( $LAST_TIME + $FORCE_SECONDS ))
get_uptime CURR_TIME # get current uptime
# 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 -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
write_log 7 "Forced Update - L: '$LOCAL_IP' == R: '$REGISTERED_IP'"
fi
ERR_LAST=0
[ $VERBOSE -lt 3 ] && {
# only send if VERBOSE < 3
send_update "$LOCAL_IP"
ERR_LAST=$? # save return value
}
# error sending local IP to provider
# we have no communication error (handled inside send_update/do_transfer)
# but update was not recognized
# do NOT retry after RETRY_SECONDS, do retry after CHECK_SECONDS
# to early retrys will block most DDNS provider
# providers answer is checked inside send_update() function
if [ $ERR_LAST -eq 0 ]; then
get_uptime LAST_TIME # we send update, so
echo $LAST_TIME > $UPDFILE # save LASTTIME to file
[ "$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 "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 <= 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 - 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 -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"
write_log 4 "Updating IP at DDNS provider failed - starting retry $ERR_UPDATE/$retry_count"
continue # loop to beginning
else
write_log 4 "Updating IP at DDNS provider failed"
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 > 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 -gt 1 -o $FORCE_SECONDS -eq 0 ] && exit 0
write_log 6 "Rerun IP check at $(eval $DATE_PROG)"
done
# we should never come here there must be a programming error
write_log 12 "Error in 'dynamic_dns_updater.sh - program coding error"

View File

@@ -1,198 +0,0 @@
#!/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-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
# 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
#
# The proxy status would not be changed by this script. Please change it in Cloudflare dashboard manually.
#
# variable __IP already defined with the ip-address to use for update
#
# check parameters
[ -z "$CURL" ] && [ -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 __PROXIED
local __URLBASE="https://api.cloudflare.com/client/v4"
local __TTL=120
# 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":\s*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
if [ "$username" = "Bearer" ]; then
write_log 7 "Found Username 'Bearer' using Password as Bearer Authorization Token"
__PRGBASE="$__PRGBASE --header 'Authorization: Bearer $password' "
else
__PRGBASE="$__PRGBASE --header 'X-Auth-Email: $username' "
__PRGBASE="$__PRGBASE --header 'X-Auth-Key: $password' "
fi
__PRGBASE="$__PRGBASE --header 'Content-Type: 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":\s*"[^"]*' $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":\s*"[^"]*' $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":\s*"[^"]*' $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
# set proxied parameter
__PROXIED=$(grep -o '"proxied":\s*[^",]*' $DATFILE | grep -o '[^:]*$')
# use file to work around " needed for json
cat > $DATFILE << EOF
{"id":"$__ZONEID","type":"$__TYPE","name":"$__HOST","content":"$__IP","ttl":$__TTL,"proxied":$__PROXIED}
EOF
# let's complete transfer command
__RUNPROG="$__PRGBASE --request PUT --data @$DATFILE '$__URLBASE/zones/$__ZONEID/dns_records/$__RECID'"
cloudflare_transfer || return 1
return 0

View File

@@ -1,86 +0,0 @@
# 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'"
local urlCp='http://cp.cnkuai.cn/'
local urlLogin='http://cp.cnkuai.cn/userlogin.asp'
local urlCaptcha='http://cp.cnkuai.cn/inc/image.asp'
local urlDnsA='http://cp.cnkuai.cn/dns_a.asp'
local urlDnsAAAA='http://cp.cnkuai.cn/dns_ipv6.asp'
local urlDnsSave='http://cp.cnkuai.cn/dns_save.asp'
getPixel(){
local filename=$1
local x=$(($2*3))
local y=$(($3*3))
local width=48
hexdump -s "$((x+width*y))" -n 3 -e '3/1 "%02X"' "$filename"
}
captchaChar(){
local filename=$1
local xoffset=$2
if [ "$(getPixel "$filename" $((xoffset+2)) 5)" = '000000' ]; then
echo '1'
elif [ "$(getPixel "$filename" $((xoffset+5)) 7)" = '000000' ]; then
echo '2'
elif [ "$(getPixel "$filename" $((xoffset+4)) 3)" = '000000' ]; then
echo '4'
elif [ "$(getPixel "$filename" $((xoffset+6)) 4)" = '000000' ]; then
echo '7'
elif [ "$(getPixel "$filename" $((xoffset+5)) 8)" = '000000' ]; then
echo '8'
elif [ "$(getPixel "$filename" $((xoffset+6)) 8)" = '000000' ]; then
echo '9'
elif [ "$(getPixel "$filename" $((xoffset+5)) 6)" = '000000' ]; then
echo '3'
elif [ "$(getPixel "$filename" $((xoffset+0)) 4)" = '000000' ]; then
echo '5'
elif [ "$(getPixel "$filename" $((xoffset+1)) 5)" = '000000' ]; then
echo '6'
else
echo '0'
fi
}
captcha(){
local str
str=$(captchaChar "$1" 9)
str=$str$(captchaChar "$1" 18)
str=$str$(captchaChar "$1" 26)
str=$str$(captchaChar "$1" 35)
echo "$str"
}
#clean
rm /tmp/cnkuai.*
#login to cnkuai dns cp
curl -c '/tmp/cnkuai.cookiejar' "$urlCaptcha" | gif2rgb > /tmp/cnkuai.rgb || return 1
yzm=$(captcha "/tmp/cnkuai.rgb")
curl -b '/tmp/cnkuai.cookiejar' -c '/tmp/cnkuai.cookiejar' -H "Content-Type: application/x-www-form-urlencoded" -H "Referer: $urlCp" -d "userid=$URL_USER&password=$URL_PASS&yzm=$yzm&B1=%C8%B7%C8%CF%B5%C7%C2%BD&lx=0&userlx=3" -X POST "$urlLogin" > /dev/null || return 1
if [ "$use_ipv6" -eq 0 ]; then
curl -b '/tmp/cnkuai.cookiejar' -c '/tmp/cnkuai.cookiejar' "$urlDnsA" > /tmp/cnkuai.html || return 1
else
curl -b '/tmp/cnkuai.cookiejar' -c '/tmp/cnkuai.cookiejar' "$urlDnsAAAA" > /tmp/cnkuai.html || return 1
fi
local domainline
domainline=$(awk "/<td>$domain<\/td>/{ print NR; exit }" /tmp/cnkuai.html)
local domainid
domainid=$(awk "NR==$((domainline+3))" /tmp/cnkuai.html | sed 's/^.*name=\x27domainid\x27 value="//g' | sed 's/".*$//g')
local dnslistid
dnslistid=$(awk "NR==$((domainline+3))" /tmp/cnkuai.html | sed 's/^.*name=\x27dnslistid\x27 value="//g' | sed 's/".*$//g')
local data
if [ "$use_ipv6" -eq 0 ]; then
data="T2=$__IP&T3=120&act=dns_a_edit&domainid=$domainid&dnslistid=$dnslistid&B1=%D0%DE%B8%C4"
else
data="T2=$__IP&T3=120&act=dns_ipv6_edit&domainid=$domainid&dnslistid=$dnslistid&B1=%D0%DE%B8%C4"
fi
curl -b '/tmp/cnkuai.cookiejar' -c '/tmp/cnkuai.cookiejar' -H "Content-Type: application/x-www-form-urlencoded" -H "Referer: $urlDnsA" -d "$data" -X POST "$urlDnsSave" > /dev/null || return 1
return 0

View File

@@ -1,51 +0,0 @@
# Script for sending user defined updates using DO API
# 2015 Artem Yakimenko <code at temik dot me>
#
# activated inside /etc/config/ddns by setting
#
# option update_script '/usr/lib/ddns/update_do.sh'
#
# the script is parsed (not executed) inside send_update() function
# of /usr/lib/ddns/dynamic_dns_functions.sh
# so you can use all available functions and global variables inside this script
# already defined in dynamic_dns_updater.sh and dynamic_dns_functions.sh
#
# It make sence to define the update url ONLY inside this script
# because it's anyway unique to the update script
# otherwise it should work with the default scripts
#
# Options are passed from /etc/config/ddns:
# Username - the record name DO Zone
# Password - API Token
# Domain - the domain managed by DO
# Parm_opt - The Record ID in the DO API structure
local __URL="https://api.digitalocean.com/v2/domains/[DOMAIN]/records/[RECORD_ID]"
local __HEADER="Authorization: Bearer [PASSWORD]"
local __HEADER_CONTENT="Content-Type: application/json"
local __BODY='{"name":"[NAME]","data": "[IP]"}'
# inside url we need 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 'Zone name in Username'"
[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'"
[ -z "$param_opt" ] && write_log 14 "Service section not configured correctly! Missing 'Zone ID in Optional Parameter'"
# do replaces in URL, header and body:
__URL=$(echo $__URL | sed -e "s#\[RECORD_ID\]#$param_opt#g" \
-e "s#\[DOMAIN\]#$domain#g")
__HEADER=$(echo $__HEADER| sed -e "s#\[PASSWORD\]#$password#g")
__HEADER_CONTENT=$(echo $__HEADER_CONTENT)
__BODY=$(echo $__BODY | sed -e "s#\[NAME\]#$username#g" -e "s#\[IP\]#$__IP#g")
#Send PUT request
curl -X PUT -H "$__HEADER_CONTENT" -H "$__HEADER" -d "$__BODY" "$__URL"
write_log 7 "DDNS Provider answered:\n$(cat $DATFILE)"
# analyse provider answers
# If IP is contained in the returned datastructure - API call was sucessful
grep -E "$__IP" $DATFILE >/dev/null 2>&1
return $? # "0" if IP has been changed or no change is needed

View File

@@ -1,17 +0,0 @@
#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
#.2018 Michal Lipka <michal at sysadmin dot care>
local __DUMMY
local __URL="https://freedns.42.pl/xmlrpc.php"
[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'"
[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'"
[ $ip_dynamic -eq 1 ] && __IP='\&lt;dynamic\&gt;'
PROG="$(command -v curl) -sk"
write_log 7 "sending update to freedns.42.pl with ip $__IP"
XMLDATA="<?xml version='1.0'?><methodCall><methodName>xname.updateArecord</methodName><params><param><value><struct><member><name>name</name><value><string>[RECORDNAME]</string></value></member><member><name>zone</name><value><string>[ZONENAME]</string></value></member><member><name>oldaddress</name><value><string>*</string></value></member><member><name>updatereverse</name><value><string>0</string></value></member><member><name>user</name><value><string>[USERNAME]</string></value></member><member><name>ttl</name><value><string>600</string></value></member><member><name>newaddress</name><value><string>[IP]</string></value></member><member><name>password</name><value><string>[PASSWORD]</string></value></member></struct></value></param></params></methodCall>"
XMLDATA=$(echo $XMLDATA | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \
-e "s#\[ZONENAME\]#$zone#g" -e "s#\[RECORDNAME\]#$record#g" -e "s#\[IP\]#$__IP#g")
$PROG -d "$XMLDATA" -o $DATFILE $__URL || return 1
write_log 7 "'freedns.42.pl' answered:${N}$(cat $DATFILE)"
grep "<fault>" $DATFILE > /dev/null 2>&1 && return 1
grep '<name>serial</name>' $DATFILE >/dev/null 2>&1
return $?

View File

@@ -1,20 +0,0 @@
#!/bin/sh
# Thanks goes to Alex Griffin who provided this script.
local __TTL=600
local __RRTYPE
local __ENDPOINT="https://dns.api.gandi.net/api/v5"
[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing subdomain as 'username'"
[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing API Key as 'password'"
[ $use_ipv6 -ne 0 ] && __RRTYPE="AAAA" || __RRTYPE="A"
curl -s -X PUT "$__ENDPOINT/domains/$domain/records/$username/$__RRTYPE" \
-H "X-Api-Key: $password" \
-H "Content-Type: application/json" \
-d "{\"rrset_ttl\": $__TTL, \"rrset_values\": [\"$__IP\"]}" >$DATFILE
write_log 7 "gandi.net answered: $(cat $DATFILE)"
return 0

View File

@@ -1,172 +0,0 @@
#!/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-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
# 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" ] && [ -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
}
return 0
}
# 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

View File

@@ -1,54 +0,0 @@
#
#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
#
# script for sending updates to no-ip.com / noip.com
#.2014-2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
#
# This script is parsed by dynamic_dns_functions.sh inside send_update() function
#
# provider did not reactivate records, if no IP change was recognized
# so we send a dummy (localhost) and a seconds later we send the correct IP addr
#
local __DUMMY
local __UPDURL6="http://[USERNAME]:[PASSWORD]@dynupdate6.noip.com/nic/update?hostname=[DOMAIN]&myip=[IP]"
local __UPDURL="http://[USERNAME]:[PASSWORD]@dynupdate.noip.com/nic/update?hostname=[DOMAIN]&myip=[IP]"
# inside url we need username and password
[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'"
[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'"
# set IP version dependend dummy (localhost)
[ $use_ipv6 -eq 0 ] && __DUMMY="127.0.0.1" || __DUMMY="::1"
[ $use_ipv6 -eq 0 ] && __UPDURL=$__UPDURL || __UPDURL=$__UPDURL6
# lets do DUMMY transfer
write_log 7 "sending dummy IP to 'no-ip.com'"
__URL=$(echo $__UPDURL | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \
-e "s#\[DOMAIN\]#$domain#g" -e "s#\[IP\]#$__DUMMY#g")
[ $use_https -ne 0 ] && __URL=$(echo $__URL | sed -e 's#^http:#https:#')
do_transfer "$__URL" || return 1
write_log 7 "'no-ip.com' 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 || return 1
# lets wait a seconds
sleep 1
# now send the correct data
write_log 7 "sending real IP to 'no-ip.com'"
__URL=$(echo $__UPDURL | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#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 "'no-ip.com' 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
return $? # "0" if "good" or "nochg" found

View File

@@ -1,48 +0,0 @@
#
#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
#
# The script directly updates a PowerDNS (or maybe bind server) via nsupdate from bind-client package.
#.based on github request #957 by Jan Riechers <de at r-jan dot de>
#.2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
#
# This script is parsed by dynamic_dns_functions.sh inside send_update() function
#
# using following options from /etc/config/ddns
# option username - keyname
# option password - shared secret (base64 encoded)
# option domain - full qualified domain to update
# option dns_server - DNS server to update
#
# variable __IP already defined with the ip-address to use for update
#
local __TTL=600 #.preset DNS TTL (in seconds)
local __RRTYPE __PW __TCP
local __PROG=$(command -v nsupdate) # BIND nsupdate ?
[ -z "$__PROG" ] && __PROG=$(command -v knsupdate) # Knot nsupdate ?
[ -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'"
[ $use_ipv6 -ne 0 ] && __RRTYPE="AAAA" || __RRTYPE="A"
[ $force_dnstcp -ne 0 ] && __TCP="-v" || __TCP=""
# create command file
cat >$DATFILE <<-EOF
server $dns_server
key $username $password
update del $domain $__RRTYPE
update add $domain $__TTL $__RRTYPE $__IP
show
send
answer
quit
EOF
$__PROG -d $__TCP $DATFILE >$ERRFILE 2>&1
# nsupdate always return success
write_log 7 "(k)nsupdate reports:${N}$(cat $ERRFILE)"
return 0

View File

@@ -1,95 +0,0 @@
#!/bin/sh
# Distributed under the terms of the GNU General Public License (GPL) version 2.0
# based on Yuval Adam's route53.sh found at https://github.com/yuvadm/route53-ddns/blob/master/route53.sh
# 2017 Max Berger <max at berger dot name>
[ -z "${CURL_SSL}" ] && write_log 14 "Amazon AWS Route53 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'"
[ -z "${domain}" ] && write_log 14 "Service section not configured correctly! Missing zone id as 'domain'"
ENDPOINT="route53.amazonaws.com"
RECORD_TTL=300
RECORD_NAME="${lookup_host}."
[ ${use_ipv6} -eq 0 ] && RECORD_TYPE="A"
[ ${use_ipv6} -eq 1 ] && RECORD_TYPE="AAAA"
RECORD_VALUE="${LOCAL_IP}"
HOSTED_ZONE_ID="${domain}"
API_PATH="/2013-04-01/hostedzone/${HOSTED_ZONE_ID}/rrset/"
AWS_ACCESS_KEY_ID="${username}"
AWS_SECRET_ACCESS_KEY="${password}"
AWS_REGION='us-east-1'
AWS_SERVICE='route53'
hash() {
msg="$1"
echo -en "${msg}" | openssl dgst -sha256 | sed 's/^.* //'
}
sign_plain() {
# Sign message using a plaintext key
key="$1"
msg="$2"
echo -en "${msg}" | openssl dgst -hex -sha256 -hmac "${key}" | sed 's/^.* //'
}
sign() {
# Sign message using a hex formatted key
key="$1"
msg="$2"
echo -en "${msg}" | openssl dgst -hex -sha256 -mac HMAC -macopt "hexkey:${key}" | sed 's/^.* //'
}
request_body="<?xml version=\"1.0\" encoding=\"UTF-8\"?> \
<ChangeResourceRecordSetsRequest xmlns=\"https://route53.amazonaws.com/doc/2013-04-01/\"> \
<ChangeBatch> \
<Changes> \
<Change> \
<Action>UPSERT</Action> \
<ResourceRecordSet> \
<Name>${RECORD_NAME}</Name> \
<Type>${RECORD_TYPE}</Type> \
<TTL>${RECORD_TTL}</TTL> \
<ResourceRecords> \
<ResourceRecord> \
<Value>${RECORD_VALUE}</Value> \
</ResourceRecord> \
</ResourceRecords> \
</ResourceRecordSet> \
</Change> \
</Changes> \
</ChangeBatch> \
</ChangeResourceRecordSetsRequest>"
fulldate="$(date --utc +%Y%m%dT%H%M%SZ)"
shortdate="$(date --utc +%Y%m%d)"
signed_headers="host;x-amz-date"
request_hash="$(hash "${request_body}")"
canonical_request="POST\n${API_PATH}\n\nhost:route53.amazonaws.com\nx-amz-date:${fulldate}\n\n${signed_headers}\n${request_hash}"
date_key="$(sign_plain "AWS4${AWS_SECRET_ACCESS_KEY}" "${shortdate}")"
region_key="$(sign "${date_key}" ${AWS_REGION})"
service_key="$(sign "${region_key}" ${AWS_SERVICE})"
signing_key="$(sign "${service_key}" aws4_request)"
credential="${shortdate}/${AWS_REGION}/${AWS_SERVICE}/aws4_request"
sigmsg="AWS4-HMAC-SHA256\n${fulldate}\n${credential}\n$(hash "${canonical_request}")"
signature="$(sign "${signing_key}" "${sigmsg}")"
authorization="AWS4-HMAC-SHA256 Credential=${AWS_ACCESS_KEY_ID}/${credential}, SignedHeaders=${signed_headers}, Signature=${signature}"
ANSWER="$(flock /tmp/$(basename -s .sh "$0").lock curl \
-X "POST" \
-H "Host: route53.amazonaws.com" \
-H "X-Amz-Date: ${fulldate}" \
-H "Authorization: ${authorization}" \
-H "Content-Type: text/xml" \
-d "$request_body" \
"https://${ENDPOINT}${API_PATH}")"
write_log 7 "${ANSWER}"
echo "${ANSWER}" | grep -F "Error" >/dev/null && return 1
echo "${ANSWER}" | grep -F "ChangeInfo" >/dev/null && return 0
return 2

View File

@@ -1,6 +0,0 @@
{
"name": "3322.org",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@members.3322.org/dyndns/update?system=dyndns&hostname=[DOMAIN]&myip=[IP]"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "able.or.kr",
"ipv4": {
"url": "http://able.or.kr/ddns/src/update.php?hostname=[DOMAIN]&myip=[IP]&ddnsuser=[USERNAME]&pwd=[PASSWORD]"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "afraid.org-basicauth",
"ipv4": {
"url": "https://[USERNAME]:[PASSWORD]@freedns.afraid.org/nic/update?hostname=[DOMAIN]&myip=[IP]"
},
"ipv6": {
"url": "https://[USERNAME]:[PASSWORD]@freedns.afraid.org/nic/update?hostname=[DOMAIN]&myip=[IP]"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "afraid.org-keyauth",
"ipv4": {
"url": "https://freedns.afraid.org/dynamic/update.php?[PASSWORD]&address=[IP]"
},
"ipv6": {
"url": "https://freedns.afraid.org/dynamic/update.php?[PASSWORD]&address=[IP]"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "afraid.org-v2-basic",
"ipv4": {
"url": "https://[USERNAME]:[PASSWORD]@sync.afraid.org/u/?h=[DOMAIN]&ip=[IP]"
},
"ipv6": {
"url": "https://[USERNAME]:[PASSWORD]@v6.sync.afraid.org/u/?h=[DOMAIN]&ip=[IP]"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "afraid.org-v2-token",
"ipv4": {
"url": "https://sync.afraid.org/u/[PASSWORD]/?address=[IP]"
},
"ipv6": {
"url": "https://v6.sync.afraid.org/u/[PASSWORD]/?address=[IP]"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "all-inkl.com",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@dyndns.kasserver.com/?myip=[IP]"
},
"ipv6": {
"url": "http://[USERNAME]:[PASSWORD]@dyndns.kasserver.com/?myip=[IP]"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "bind-nsupdate",
"ipv4": {
"url": "update_nsupdate.sh"
},
"ipv6": {
"url": "update_nsupdate.sh"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "changeip.com",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@nic.changeip.com/nic/update?u=[USERNAME]&p=[PASSWORD]&cmd=update&hostname=[DOMAIN]&ip=[IP]",
"answer": "Successful"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "cloudflare.com-v4",
"ipv4": {
"url": "update_cloudflare_com_v4.sh"
},
"ipv6": {
"url": "update_cloudflare_com_v4.sh"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "cnkuai.cn",
"ipv4": {
"url": "update_cnkuai_cn.sh"
},
"ipv6": {
"url": "update_cnkuai_cn.sh"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "core-networks.de",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@dyndns.core-networks.de/?hostname=[DOMAIN]&myip=[IP]&keepipv6=1",
"answer": "good"
},
"ipv6": {
"url": "http://[USERNAME]:[PASSWORD]@dyndns.core-networks.de/?hostname=[DOMAIN]&myip=[IP]&keepipv4=1",
"answer": "good"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "ddnss.de",
"ipv4": {
"url": "http://ip4.ddnss.de/upd.php?user=[USERNAME]&pwd=[PASSWORD]&host=[DOMAIN]&ip=[IP]",
"answer": "Updated|No change"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "ddo.jp",
"ipv4": {
"url": "http://free.ddo.jp/dnsupdate.php?dn=[DOMAIN]&pw=[PASSWORD]&ip=[IP]"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "desec.io",
"ipv4": {
"url": "http://update.dedyn.io/update?username=[USERNAME]&password=[PASSWORD]&hostname=[DOMAIN]&myipv4=[IP]",
"answer": "good|nochg"
},
"ipv6": {
"url": "http://update.dedyn.io/update?username=[USERNAME]&password=[PASSWORD]&hostname=[DOMAIN]&myipv6=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "dhis.org",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@is.dhis.org/"
},
"ipv6": {
"url": "http://[USERNAME]:[PASSWORD]@is.dhis.org/"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "digitalocean.com-v2",
"ipv4": {
"url": "update_digitalocean_com_v2.sh"
},
"ipv6": {
"url": "update_digitalocean_com_v2.sh"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "dnsdynamic.org",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@www.dnsdynamic.org/api/?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "dnsever.com",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@dyna.dnsever.com/update.php?host[[DOMAIN]]"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "dnsexit.com",
"ipv4": {
"url": "http://update.dnsexit.com/RemoteUpdate.sv?login=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]&myip=[IP]"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "dnshome.de",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@www.dnshome.de/dyndns.php?hostname=[DOMAIN]&ip=[IP]"
},
"ipv6": {
"url": "http://[USERNAME]:[PASSWORD]@www.dnshome.de/dyndns.php?hostname=[DOMAIN]&ip6=[IP]"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "dnsmadeeasy.com",
"ipv4": {
"url": "http://cp.dnsmadeeasy.com/servlet/updateip?username=[USERNAME]&password=[PASSWORD]&id=[DOMAIN]&ip=[IP]",
"answer": "success|ip-same"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "dnsmax.com",
"ipv4": {
"url": "http://update.dnsmax.com/update/?username=[USERNAME]&password=[PASSWORD]&resellerid=1&clientname=openwrt&clientversion=8.09&protocolversion=2.0&updatehostname=[DOMAIN]&ip=[IP]"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "dnsomatic.com",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@updates.dnsomatic.com/nic/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "dnspark.com",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@control.dnspark.com/api/dynamic/update.php?hostname=[DOMAIN]&ip=[IP]",
"answer": "ok|nochange"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "do.de",
"ipv4": {
"url": "http://ddns.do.de/?myip=[IP]&hostname=[DOMAIN]&username=[USERNAME]&password=[PASSWORD]",
"answer": "good|nochg"
},
"ipv6": {
"url": "http://ddns.do.de/?myip=[IP]&hostname=[DOMAIN]&username=[USERNAME]&password=[PASSWORD]",
"answer": "good|nochg"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "domopoli.de",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@http://dyndns.domopoli.de/nic/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "dtdns.com",
"ipv4": {
"url": "http://www.dtdns.com/api/autodns.cfm?id=[DOMAIN]&pw=[PASSWORD]&ip=[IP]"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "duckdns.org",
"ipv4": {
"url": "http://www.duckdns.org/update?domains=[DOMAIN]&token=[PASSWORD]&ip=[IP]",
"answer": "OK"
},
"ipv6": {
"url": "http://www.duckdns.org/update?domains=[DOMAIN]&token=[PASSWORD]&ipv6=[IP]",
"answer": "OK"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "duiadns.net",
"ipv4": {
"url": "http://ip.duiadns.net/dynamic.duia?host=[DOMAIN]&password=[PASSWORD]&ip4=[IP]"
},
"ipv6": {
"url": "http://ip.duiadns.net/dynamic.duia?host=[DOMAIN]&password=[PASSWORD]&ip6=[IP]"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "dy.fi",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@www.dy.fi/nic/update?hostname=[DOMAIN]",
"answer": "good|nochg"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "dyn.com",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@members.dyndns.org/v3/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
},
"ipv6": {
"url": "http://[USERNAME]:[PASSWORD]@members.dyndns.org/v3/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "dyndns.it",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@update.dyndns.it/nic/update?system=dyndns&hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "dyndns.org",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@members.dyndns.org/v3/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
},
"ipv6": {
"url": "http://[USERNAME]:[PASSWORD]@members.dyndns.org/v3/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "dyndnss.net",
"ipv4": {
"url": "http://www.dyndnss.net/?user=[USERNAME]&pass=[PASSWORD]&domain=[DOMAIN]&updater=other"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "dynsip.org",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@dynsip.org/nic/update?hostname=[DOMAIN]&myip=[IP]"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "dynu.com",
"ipv4": {
"url": "http://api.dynu.com/nic/update?hostname=[DOMAIN]&myip=[IP]&username=[USERNAME]&password=[PASSWORD]"
},
"ipv6": {
"url": "http://api.dynu.com/nic/update?hostname=[DOMAIN]&myipv6=[IP]&username=[USERNAME]&password=[PASSWORD]"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "dynv6.com",
"ipv4": {
"url": "http://dynv6.com/api/update?hostname=[DOMAIN]&token=[PASSWORD]&ipv4=[IP]",
"answer": "updated|unchanged"
},
"ipv6": {
"url": "http://dynv6.com/api/update?hostname=[DOMAIN]&token=[PASSWORD]&ipv6=[IP]",
"answer": "updated|unchanged"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "easydns.com",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@api.cp.easydns.com/dyn/generic.php?hostname=[DOMAIN]&myip=[IP]",
"answer": "OK|NOERROR"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "editdns.net",
"ipv4": {
"url": "http://dyndns-free.editdns.net/api/dynLinux.php?p=[PASSWORD]&r=[DOMAIN]"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "freedns.42.pl",
"ipv4": {
"url": "update_freedns_42_pl.sh"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "gandi.net",
"ipv4": {
"url": "update_gandi_net.sh"
},
"ipv6": {
"url": "update_gandi_net.sh"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "godaddy.com-v1",
"ipv4": {
"url": "update_godaddy_com_v1.sh"
},
"ipv6": {
"url": "update_godaddy_com_v1.sh"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "goip.de",
"ipv4": {
"url": "http://www.goip.de/setip?username=[USERNAME]&password=[PASSWORD]&subdomain=[DOMAIN]&ip=[IP]"
},
"ipv6": {
"url": "http://www.goip.de/setip?username=[USERNAME]&password=[PASSWORD]&subdomain=[DOMAIN]&ip6=[IP]"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "google.com",
"ipv4": {
"url": "https://[USERNAME]:[PASSWORD]@domains.google.com/nic/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
},
"ipv6": {
"url": "https://[USERNAME]:[PASSWORD]@domains.google.com/nic/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "he.net",
"ipv4": {
"url": "http://[DOMAIN]:[PASSWORD]@dyn.dns.he.net/nic/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
},
"ipv6": {
"url": "http://[DOMAIN]:[PASSWORD]@dyn.dns.he.net/nic/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "inwx.de",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@dyndns.inwx.com/nic/update?myip=[IP]",
"answer": "good|nochg"
},
"ipv6": {
"url": "http://[USERNAME]:[PASSWORD]@dyndns.inwx.com/nic/update?myipv6=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "joker.com",
"ipv4": {
"url": "http://svc.joker.com/nic/update?username=[USERNAME]&password=[PASSWORD]&myip=[IP]&hostname=[DOMAIN]",
"answer": "good|nochg"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "loopia.se",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@dns.loopia.se/XDynDNSServer/XDynDNS.php?system=custom&hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
},
"ipv6": {
"url": "http://[USERNAME]:[PASSWORD]@dns.loopia.se/XDynDNSServer/XDynDNS.php?system=custom&hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "moniker.com",
"ipv4": {
"url": "https://dynamicdns.key-systems.net/update.php?hostname=[DOMAIN]&password=[PASSWORD]&ip=[IP]",
"answer": "success"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "mydns.jp",
"ipv4": {
"url": "http://www.mydns.jp/directip.html?MID=[USERNAME]&PWD=[PASSWORD]&IPV4ADDR=[IP]"
},
"ipv6": {
"url": "http://www.mydns.jp/directip.html?MID=[USERNAME]&PWD=[PASSWORD]&IPV6ADDR=[IP]"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "myip.co.ua",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@myip.co.ua/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "myonlineportal.net",
"ipv4": {
"url": "http://myonlineportal.net/updateddns?hostname=[DOMAIN]&ip=[IP]&username=[USERNAME]&password=[PASSWORD]",
"answer": "good|nochg"
},
"ipv6": {
"url": "http://myonlineportal.net/updateddns?hostname=[DOMAIN]&ip6=[IP]&username=[USERNAME]&password=[PASSWORD]",
"answer": "good|nochg"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "mythic-beasts.com",
"ipv4": {
"url": "http://dnsapi4.mythic-beasts.com/?domain=[USERNAME]&password=[PASSWORD]&command=REPLACE%20[DOMAIN]%2060%20A%20DYNAMIC_IP&origin=."
},
"ipv6": {
"url": "http://dnsapi6.mythic-beasts.com/?domain=[USERNAME]&password=[PASSWORD]&command=REPLACE%20[DOMAIN]%2060%20AAAA%20DYNAMIC_IP&origin=."
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "namecheap.com",
"ipv4": {
"url": "http://dynamicdns.park-your-domain.com/update?host=[USERNAME]&domain=[DOMAIN]&password=[PASSWORD]&ip=[IP]"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "nettica.com",
"ipv4": {
"url": "http://www.nettica.com/Domain/Update.aspx?U=[USERNAME]&PC=[PASSWORD]&FQDN=[DOMAIN]&N=[IP]"
}
}

View File

@@ -1,10 +0,0 @@
{
"name": "no-ip.com",
"ipv4": {
"url": "update_no-ip_com.sh"
},
"ipv6": {
"url": "update_no-ip_com.sh"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "no-ip.pl",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@update.no-ip.pl/?hostname=[DOMAIN]"
},
"ipv6": {
"url": "http://[USERNAME]:[PASSWORD]@update.no-ip.pl/?hostname=[DOMAIN]"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "now-dns.com",
"ipv4": {
"url": "https://[USERNAME]:[PASSWORD]@now-dns.com/update?hostname=[DOMAIN]",
"answer": "good|nochg"
},
"ipv6": {
"url": "https://[USERNAME]:[PASSWORD]@now-dns.com/update?hostname=[DOMAIN]",
"answer": "good|nochg"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "nsupdate.info",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@ipv4.nsupdate.info/nic/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
},
"ipv6": {
"url": "http://[USERNAME]:[PASSWORD]@ipv6.nsupdate.info/nic/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,7 +0,0 @@
{
"name":"opendns.com",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@updates.opendns.com/nic/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "oray.com",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@ddns.oray.com/ph/update?hostname=[DOMAIN]&myip=[IP]"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "ovh.com",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@www.ovh.com/nic/update?system=dyndns&hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "regfish.de",
"ipv4": {
"url": "http://dyndns.regfish.de/?fqdn=[DOMAIN]&forcehost=1&authtype=secure&token=[PASSWORD]&ipv4=[IP]",
"answer": "success|100|101"
},
"ipv6": {
"url": "http://dyndns.regfish.de/?fqdn=[DOMAIN]&forcehost=1&authtype=secure&token=[PASSWORD]&ipv6=[IP]",
"answer": "success|100|101"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "route53-v1",
"ipv4": {
"url": "update_route53_v1.sh"
},
"ipv6": {
"url": "update_route53_v1.sh"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "schokokeks.org",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@dyndns.schokokeks.org/nic/update?myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "selfhost.de",
"ipv4": {
"url": "http://carol.selfhost.de/update?username=[USERNAME]&password=[PASSWORD]&myip=[IP]&hostname=1",
"answer": "good|nochg|200|204"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "sitelutions.com",
"ipv4": {
"url": "https://dnsup.sitelutions.com/dnsup?user=[USERNAME]&pass=[PASSWORD]&id=[DOMAIN]&ip=[IP]",
"answer": "success"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "spdyn.de",
"ipv4": {
"url": "https://update.spdyn.de/nic/update?hostname=[DOMAIN]&myip=[IP]&user=[USERNAME]&pass=[PASSWORD]",
"answer": "good|nochg"
},
"ipv6": {
"url": "https://update.spdyn.de/nic/update?hostname=[DOMAIN]&myip=[IP]&user=[USERNAME]&pass=[PASSWORD]",
"answer": "good|nochg"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "strato.com",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@dyndns.strato.com/nic/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,8 +0,0 @@
{
"name": "system-ns.com",
"ipv4": {
"url": "http://system-ns.com/api?type=dynamic&command=set&domain=[DOMAIN]&token=[PASSWORD]&ip=[IP]",
"answer": "0"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "thatip.com",
"ipv4": {
"url": "http://update.dnsmax.com/update/?username=[USERNAME]&password=[PASSWORD]&resellerid=2&clientname=openwrt&clientversion=8.09&protocolversion=2.0&updatehostname=[DOMAIN]&ip=[IP]"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "twodns.de",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@update.twodns.de/update?hostname=[DOMAIN]&ip=[IP]"
}
}

View File

@@ -1,9 +0,0 @@
{
"name": "udmedia.de",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@www.udmedia.de/nic/update?myip=[IP]"
},
"ipv6": {
"url": "http://[USERNAME]:[PASSWORD]@www.udmedia.de/nic/update?myip=[IP]"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "variomedia.de",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@dyndns.variomedia.de/nic/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
},
"ipv6": {
"url": "http://[USERNAME]:[PASSWORD]@dyndns.variomedia.de/nic/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,7 +0,0 @@
{
"name": "xlhost.de",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@nsupdate.xlhost.de/nic/update?hostname=[DOMAIN]&myip=[IP]",
"answer": "good|nochg"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "zerigo.com",
"ipv4": {
"url": "http://update.zerigo.com/dynamic?user=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]&ip=[IP]",
"answer": "ok"
},
"ipv6": {
"url": "http://update.zerigo.com/dynamic?user=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]&ip=[IP]",
"answer": "ok"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "zoneedit.com",
"ipv4": {
"url": "http://[USERNAME]:[PASSWORD]@dynamic.zoneedit.com/auth/dynamic.html?host=[DOMAIN]&dnsto=[IP]"
}
}

View File

@@ -1,11 +0,0 @@
{
"name": "zzzz.io",
"ipv4": {
"url": "http://zzzz.io/api/v1/update/[DOMAIN]/?token=[PASSWORD]&ip=[IP]",
"answer": "Updated|No change"
},
"ipv6": {
"url": "http://zzzz.io/api/v1/update/[DOMAIN]/?token=[PASSWORD]&type=aaaa&ip=[IP]",
"answer": "Updated|No change"
}
}

View File

@@ -1,70 +0,0 @@
3322.org
able.or.kr
afraid.org-basicauth
afraid.org-keyauth
afraid.org-v2-basic
afraid.org-v2-token
all-inkl.com
changeip.com
core-networks.de
ddnss.de
ddo.jp
desec.io
dhis.org
dnsdynamic.org
dnsever.com
dnsexit.com
dnshome.de
dnsmadeeasy.com
dnsmax.com
dnsomatic.com
dnspark.com
do.de
domopoli.de
dtdns.com
duckdns.org
duiadns.net
dy.fi
dyn.com
dyndns.it
dyndns.org
dyndnss.net
dynsip.org
dynu.com
dynv6.com
easydns.com
editdns.net
goip.de
google.com
he.net
inwx.de
joker.com
loopia.se
moniker.com
mydns.ip
myip.co.ua
myonlineportal.net
mythic-beasts.com
namecheap.com
nettica.com
no-ip.pl
now-dns.com
nsupdate.info
opendns.com
oray.com
ovh.com
regfish.de
schokokeks.org
selfhost.de
sitelutions.com
spdyn.de
strato.com
system-ns.com
thatip.com
twodns.de
udmedia.de
variomedia.de
xlhost.de
zerigo.com
zoneedit.com
zzzz.io

Some files were not shown because too many files have changed in this diff Show More