Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
aea631d9
Unverified
Commit
aea631d9
authored
Dec 02, 2017
by
neil
Committed by
GitHub
Dec 02, 2017
Browse files
Merge pull request #1126 from Neilpang/dev
Dev
parents
cc3660e2
bf942a4c
Changes
1
Hide whitespace changes
Inline
Side-by-side
dnsapi/dns_freedns.sh
View file @
aea631d9
...
@@ -53,6 +53,8 @@ dns_freedns_add() {
...
@@ -53,6 +53,8 @@ dns_freedns_add() {
i
=
"
$(
_math
"
$i
"
- 1
)
"
i
=
"
$(
_math
"
$i
"
- 1
)
"
sub_domain
=
"
$(
echo
"
$fulldomain
"
|
cut
-d
.
-f
-
"
$i
"
)
"
sub_domain
=
"
$(
echo
"
$fulldomain
"
|
cut
-d
.
-f
-
"
$i
"
)
"
_debug top_domain
"
$top_domain
"
_debug sub_domain
"
$sub_domain
"
# Sometimes FreeDNS does not return the subdomain page but rather
# Sometimes FreeDNS does not return the subdomain page but rather
# returns a page regarding becoming a premium member. This usually
# returns a page regarding becoming a premium member. This usually
# happens after a period of inactivity. Immediately trying again
# happens after a period of inactivity. Immediately trying again
...
@@ -61,7 +63,6 @@ dns_freedns_add() {
...
@@ -61,7 +63,6 @@ dns_freedns_add() {
attempts
=
2
attempts
=
2
while
[
"
$attempts
"
-gt
"0"
]
;
do
while
[
"
$attempts
"
-gt
"0"
]
;
do
attempts
=
"
$(
_math
"
$attempts
"
- 1
)
"
attempts
=
"
$(
_math
"
$attempts
"
- 1
)
"
htmlpage
=
"
$(
_freedns_retrieve_subdomain_page
"
$FREEDNS_COOKIE
"
)
"
htmlpage
=
"
$(
_freedns_retrieve_subdomain_page
"
$FREEDNS_COOKIE
"
)
"
if
[
"
$?
"
!=
"0"
]
;
then
if
[
"
$?
"
!=
"0"
]
;
then
if
[
"
$using_cached_cookies
"
=
"true"
]
;
then
if
[
"
$using_cached_cookies
"
=
"true"
]
;
then
...
@@ -70,19 +71,11 @@ dns_freedns_add() {
...
@@ -70,19 +71,11 @@ dns_freedns_add() {
fi
fi
return
1
return
1
fi
fi
_debug2 htmlpage
"
$htmlpage
"
subdomain_csv
=
"
$(
echo
"
$htmlpage
"
|
tr
-d
"
\n\r
"
| _egrep_o
'<form .*</form>'
|
sed
's/<tr>/@<tr>/g'
|
tr
'@'
'\n'
|
grep
edit.php |
grep
$top_domain
)
"
_debug2 subdomain_csv
"
$subdomain_csv
"
# Now convert the tables in the HTML to CSV. This litte gem from
# http://stackoverflow.com/questions/1403087/how-can-i-convert-an-html-table-to-csv
subdomain_csv
=
"
$(
echo
"
$htmlpage
"
\
|
grep
-i
-e
'</\?TABLE\|</\?TD\|</\?TR\|</\?TH'
\
|
sed
's/^[\ \t]*//g'
\
|
tr
-d
'\n'
\
|
sed
's/<\/TR[^>]*>/\n/Ig'
\
|
sed
's/<\/\?\(TABLE\|TR\)[^>]*>//Ig'
\
|
sed
's/^<T[DH][^>]*>\|<\/\?T[DH][^>]*>$//Ig'
\
|
sed
's/<\/T[DH][^>]*><T[DH][^>]*>/,/Ig'
\
|
grep
'edit.php?'
\
|
grep
"
$top_domain
"
)
"
# The above beauty ends with striping out rows that do not have an
# The above beauty ends with striping out rows that do not have an
# href to edit.php and do not have the top domain we are looking for.
# href to edit.php and do not have the top domain we are looking for.
# So all we should be left with is CSV of table of subdomains we are
# So all we should be left with is CSV of table of subdomains we are
...
@@ -90,30 +83,32 @@ dns_freedns_add() {
...
@@ -90,30 +83,32 @@ dns_freedns_add() {
# Now we have to read through this table and extract the data we need
# Now we have to read through this table and extract the data we need
lines
=
"
$(
echo
"
$subdomain_csv
"
|
wc
-l
)
"
lines
=
"
$(
echo
"
$subdomain_csv
"
|
wc
-l
)
"
nl
=
'
'
i
=
0
i
=
0
found
=
0
found
=
0
while
[
"
$i
"
-lt
"
$lines
"
]
;
do
while
[
"
$i
"
-lt
"
$lines
"
]
;
do
i
=
"
$(
_math
"
$i
"
+ 1
)
"
i
=
"
$(
_math
"
$i
"
+ 1
)
"
line
=
"
$(
echo
"
$subdomain_csv
"
|
cut
-d
"
$nl
"
-f
"
$i
"
)
"
line
=
"
$(
echo
"
$subdomain_csv
"
|
sed
-n
${
i
}
p
)
"
tmp
=
"
$(
echo
"
$line
"
|
cut
-d
','
-f
1
)
"
_debug2 line
"
$line
"
if
[
$found
=
0
]
&&
_
startswith
"
$tmp
"
"<td>
$top_domain
"
;
then
if
[
$found
=
0
]
&&
_
contains
"
$line
"
"<td>
$top_domain
</td>
"
;
then
# this line will contain DNSdomainid for the top_domain
# this line will contain DNSdomainid for the top_domain
DNSdomainid
=
"
$(
echo
"
$line
"
|
cut
-d
','
-f
2 |
sed
's/^.*domain_id=//;s/>.*//'
)
"
DNSdomainid
=
"
$(
echo
"
$line
"
| _egrep_o
"edit_domain_id *= *.*>"
|
cut
-d
=
-f
2 |
cut
-d
'>'
-f
1
)
"
_debug2 DNSdomainid
"
$DNSdomainid
"
found
=
1
found
=
1
else
else
# lines contain DNS records for all subdomains
# lines contain DNS records for all subdomains
DNSname
=
"
$(
echo
"
$line
"
|
cut
-d
','
-f
2 |
sed
's/^[^>]*>//;s/<\/a>.*//'
)
"
DNSname
=
"
$(
echo
"
$line
"
| _egrep_o
'edit.php.*</a>'
|
cut
-d
'>'
-f
2 |
cut
-d
'<'
-f
1
)
"
DNStype
=
"
$(
echo
"
$line
"
|
cut
-d
','
-f
3
)
"
_debug2 DNSname
"
$DNSname
"
DNStype
=
"
$(
echo
"
$line
"
|
sed
's/<td/@<td/g'
|
tr
'@'
'\n'
|
sed
-n
'4p'
|
cut
-d
'>'
-f
2 |
cut
-d
'<'
-f
1
)
"
_debug2 DNStype
"
$DNStype
"
if
[
"
$DNSname
"
=
"
$fulldomain
"
]
&&
[
"
$DNStype
"
=
"TXT"
]
;
then
if
[
"
$DNSname
"
=
"
$fulldomain
"
]
&&
[
"
$DNStype
"
=
"TXT"
]
;
then
DNSdataid
=
"
$(
echo
"
$line
"
|
cut
-d
','
-f
2 |
sed
's/^.*data_id=//;s/>.*//'
)
"
DNSdataid
=
"
$(
echo
"
$line
"
|
_egrep_o
'data_id=.*'
|
cut
-d
=
-f
2 |
cut
-d
'>'
-f
1
)
"
# Now get current value for the TXT record. This method may
# Now get current value for the TXT record. This method may
# not produce accurate results as the value field is truncated
# not produce accurate results as the value field is truncated
# on this webpage. To get full value we would need to load
# on this webpage. To get full value we would need to load
# another page. However we don't really need this so long as
# another page. However we don't really need this so long as
# there is only one TXT record for the acme challenge subdomain.
# there is only one TXT record for the acme challenge subdomain.
DNSvalue
=
"
$(
echo
"
$line
"
|
cut
-d
','
-f
4 |
sed
's/^[^"]*"//;s/".*//;s/<\/td>.*//'
)
"
DNSvalue
=
"
$(
echo
"
$line
"
|
sed
's/<td/@<td/g'
|
tr
'@'
'\n'
|
sed
-n
'5p'
|
cut
-d
'>'
-f
2 |
cut
-d
'<'
-f
1
)
"
_debug2 DNSvalue
"
$DNSvalue
"
if
[
$found
!=
0
]
;
then
if
[
$found
!=
0
]
;
then
break
break
# we are breaking out of the loop at the first match of DNS name
# we are breaking out of the loop at the first match of DNS name
...
@@ -169,8 +164,7 @@ dns_freedns_add() {
...
@@ -169,8 +164,7 @@ dns_freedns_add() {
return
0
return
0
else
else
# Delete the old TXT record (with the wrong value)
# Delete the old TXT record (with the wrong value)
_freedns_delete_txt_record
"
$FREEDNS_COOKIE
"
"
$DNSdataid
"
if
_freedns_delete_txt_record
"
$FREEDNS_COOKIE
"
"
$DNSdataid
"
;
then
if
[
"
$?
"
=
"0"
]
;
then
# And add in new TXT record with the value provided
# And add in new TXT record with the value provided
_freedns_add_txt_record
"
$FREEDNS_COOKIE
"
"
$DNSdomainid
"
"
$sub_domain
"
"
$txtvalue
"
_freedns_add_txt_record
"
$FREEDNS_COOKIE
"
"
$DNSdomainid
"
"
$sub_domain
"
"
$txtvalue
"
fi
fi
...
@@ -210,18 +204,9 @@ dns_freedns_rm() {
...
@@ -210,18 +204,9 @@ dns_freedns_rm() {
return
1
return
1
fi
fi
# Now convert the tables in the HTML to CSV. This litte gem from
subdomain_csv
=
"
$(
echo
"
$htmlpage
"
|
tr
-d
"
\n\r
"
| _egrep_o
'<form .*</form>'
|
sed
's/<tr>/@<tr>/g'
|
tr
'@'
'\n'
|
grep
edit.php |
grep
$fulldomain
)
"
# http://stackoverflow.com/questions/1403087/how-can-i-convert-an-html-table-to-csv
_debug2 subdomain_csv
"
$subdomain_csv
"
subdomain_csv
=
"
$(
echo
"
$htmlpage
"
\
|
grep
-i
-e
'</\?TABLE\|</\?TD\|</\?TR\|</\?TH'
\
|
sed
's/^[\ \t]*//g'
\
|
tr
-d
'\n'
\
|
sed
's/<\/TR[^>]*>/\n/Ig'
\
|
sed
's/<\/\?\(TABLE\|TR\)[^>]*>//Ig'
\
|
sed
's/^<T[DH][^>]*>\|<\/\?T[DH][^>]*>$//Ig'
\
|
sed
's/<\/T[DH][^>]*><T[DH][^>]*>/,/Ig'
\
|
grep
'edit.php?'
\
|
grep
"
$fulldomain
"
)
"
# The above beauty ends with striping out rows that do not have an
# The above beauty ends with striping out rows that do not have an
# href to edit.php and do not have the domain name we are looking for.
# href to edit.php and do not have the domain name we are looking for.
# So all we should be left with is CSV of table of subdomains we are
# So all we should be left with is CSV of table of subdomains we are
...
@@ -229,19 +214,21 @@ dns_freedns_rm() {
...
@@ -229,19 +214,21 @@ dns_freedns_rm() {
# Now we have to read through this table and extract the data we need
# Now we have to read through this table and extract the data we need
lines
=
"
$(
echo
"
$subdomain_csv
"
|
wc
-l
)
"
lines
=
"
$(
echo
"
$subdomain_csv
"
|
wc
-l
)
"
nl
=
'
'
i
=
0
i
=
0
found
=
0
found
=
0
while
[
"
$i
"
-lt
"
$lines
"
]
;
do
while
[
"
$i
"
-lt
"
$lines
"
]
;
do
i
=
"
$(
_math
"
$i
"
+ 1
)
"
i
=
"
$(
_math
"
$i
"
+ 1
)
"
line
=
"
$(
echo
"
$subdomain_csv
"
|
cut
-d
"
$nl
"
-f
"
$i
"
)
"
line
=
"
$(
echo
"
$subdomain_csv
"
|
sed
-n
${
i
}
p
)
"
DNSname
=
"
$(
echo
"
$line
"
|
cut
-d
','
-f
2 |
sed
's/^[^>]*>//;s/<\/a>.*//'
)
"
_debug2 line
"
$line
"
DNStype
=
"
$(
echo
"
$line
"
|
cut
-d
','
-f
3
)
"
DNSname
=
"
$(
echo
"
$line
"
| _egrep_o
'edit.php.*</a>'
|
cut
-d
'>'
-f
2 |
cut
-d
'<'
-f
1
)
"
_debug2 DNSname
"
$DNSname
"
DNStype
=
"
$(
echo
"
$line
"
|
sed
's/<td/@<td/g'
|
tr
'@'
'\n'
|
sed
-n
'4p'
|
cut
-d
'>'
-f
2 |
cut
-d
'<'
-f
1
)
"
_debug2 DNStype
"
$DNStype
"
if
[
"
$DNSname
"
=
"
$fulldomain
"
]
&&
[
"
$DNStype
"
=
"TXT"
]
;
then
if
[
"
$DNSname
"
=
"
$fulldomain
"
]
&&
[
"
$DNStype
"
=
"TXT"
]
;
then
DNSdataid
=
"
$(
echo
"
$line
"
|
cut
-d
','
-f
2 |
sed
's/^.*data_id=//;s/>.*//'
)
"
DNSdataid
=
"
$(
echo
"
$line
"
| _egrep_o
'data_id=.*'
|
cut
-d
=
-f
2 |
cut
-d
'>'
-f
1
)
"
DNSvalue
=
"
$(
echo
"
$line
"
|
cut
-d
','
-f
4 |
sed
's/^[^"]*"//;s/".*//;s/<\/td>.*//'
)
"
_debug2 DNSdataid
"
$DNSdataid
"
_debug
"DNSvalue:
$DNSvalue
"
DNSvalue
=
"
$(
echo
"
$line
"
|
sed
's/<td/@<td/g'
|
tr
'@'
'\n'
|
sed
-n
'5p'
|
cut
-d
'>'
-f
2 |
cut
-d
'<'
-f
1
)
"
_debug2 DNSvalue
"
$DNSvalue
"
# if [ "$DNSvalue" = "$txtvalue" ]; then
# if [ "$DNSvalue" = "$txtvalue" ]; then
# Testing value match fails. Website is truncating the value
# Testing value match fails. Website is truncating the value
# field. So for now we will assume that there is only one TXT
# field. So for now we will assume that there is only one TXT
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment