aboutsummaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorChip Lee <chplee@gmail.com>2020-03-21 20:27:01 +0800
committerChip Lee <chplee@gmail.com>2020-03-21 20:31:05 +0800
commit066b8b427afba16ae37a88afe7188c2d567b24d6 (patch)
tree210c05de82d3eb215ddb36b1d143db50a844a60c /net
parent63586f98cdf12679e82b38614198d18c1d0468e9 (diff)
ddns-scripts: Append ddns script for cnkuai.cn
A low-cost domain name service provider in China Signed-off-by: Chip Lee <chplee@gmail.com>
Diffstat (limited to 'net')
2 files changed, 144 insertions, 1 deletions
diff --git a/net/ddns-scripts/Makefile b/net/ddns-scripts/Makefile
index 0863b5656..fe634882d 100755
--- a/net/ddns-scripts/Makefile
+++ b/net/ddns-scripts/Makefile
@@ -12,7 +12,7 @@ PKG_NAME:=ddns-scripts
PKG_VERSION:=2.7.8
# Release == build
# increase on changes of services files or tld_names.dat
-PKG_RELEASE:=16
+PKG_RELEASE:=17
PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=
@@ -128,6 +128,21 @@ define Package/ddns-scripts_route53-v1/description
endef
###### *************************************************************************
+define Package/ddns-scripts_cnkuai_cn
+ $(call Package/ddns-scripts/Default)
+ TITLE:=CnKuai API
+ DEPENDS:=ddns-scripts +curl +giflib-utils
+endef
+define Package/ddns-scripts_cnkuai_cn/description
+ Dynamic DNS Client scripts extension for CnKuai.Note: You
+ must also install giflib-utils.
+ 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 Build/Configure
endef
define Build/Compile
@@ -437,6 +452,47 @@ define Package/ddns-scripts_route53-v1/prerm
endef
###### *************************************************************************
+define Package/ddns-scripts_cnkuai_cn/preinst
+ #!/bin/sh
+ # if NOT run buildroot then stop service
+ [ -z "$${IPKG_INSTROOT}" ] && /etc/init.d/ddns stop >/dev/null 2>&1
+ exit 0 # suppress errors
+endef
+define Package/ddns-scripts_cnkuai_cn/install
+ $(INSTALL_DIR) $(1)/etc/uci-defaults
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/ddns.defaults $(1)/etc/uci-defaults/ddns_cnkuai_cn
+ $(INSTALL_DIR) $(1)/usr/lib/ddns
+ $(INSTALL_BIN) $(PKG_BUILD_DIR)/files/update_cnkuai_cn.sh $(1)/usr/lib/ddns
+endef
+define Package/ddns-scripts_cnkuai_cn/postinst
+ #!/bin/sh
+ # remove old services file entries
+ /bin/sed -i '/cnkuai.cn/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1
+ /bin/sed -i '/cnkuai.cn/d' $${IPKG_INSTROOT}/etc/ddns/services_ipv6 >/dev/null 2>&1
+ # and create new
+ printf "%s\\t%s\\n" '"cnkuai.cn"' '"update_cnkuai_cn.sh"' >> $${IPKG_INSTROOT}/etc/ddns/services
+ printf "%s\\t%s\\n" '"cnkuai.cn"' '"update_cnkuai_cn.sh"' >> $${IPKG_INSTROOT}/etc/ddns/services_ipv6
+ # on real system restart service if enabled
+ [ -z "$${IPKG_INSTROOT}" ] && {
+ [ -x /etc/uci-defaults/ddns_cnkuai_cn ] && \
+ /etc/uci-defaults/ddns_cnkuai_cn && \
+ rm -f /etc/uci-defaults/cnkuai.cn >/dev/null 2>&1
+ /etc/init.d/ddns enabled \
+ && /etc/init.d/ddns start >/dev/null 2>&1
+ }
+ exit 0 # suppress errors
+endef
+define Package/ddns-scripts_cnkuai_cn/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 'cnkuai.cn/d' $${IPKG_INSTROOT}/etc/ddns/services >/dev/null 2>&1
+ /bin/sed -i 'cnkuai.cn/d' $${IPKG_INSTROOT}/etc/ddns/services_ipv6 >/dev/null 2>&1
+ exit 0 # suppress errors
+endef
+
+###### *************************************************************************
$(eval $(call BuildPackage,ddns-scripts))
$(eval $(call BuildPackage,ddns-scripts_cloudflare.com-v4))
$(eval $(call BuildPackage,ddns-scripts_freedns_42_pl))
@@ -444,3 +500,4 @@ $(eval $(call BuildPackage,ddns-scripts_godaddy.com-v1))
$(eval $(call BuildPackage,ddns-scripts_no-ip_com))
$(eval $(call BuildPackage,ddns-scripts_nsupdate))
$(eval $(call BuildPackage,ddns-scripts_route53-v1))
+$(eval $(call BuildPackage,ddns-scripts_cnkuai_cn))
diff --git a/net/ddns-scripts/files/update_cnkuai_cn.sh b/net/ddns-scripts/files/update_cnkuai_cn.sh
new file mode 100755
index 000000000..a2b78630f
--- /dev/null
+++ b/net/ddns-scripts/files/update_cnkuai_cn.sh
@@ -0,0 +1,86 @@
+# 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