summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2026-05-05 07:50:15 +0100
committerJoe Carstairs <me@joeac.net>2026-05-05 07:50:15 +0100
commit7c1d05b5ed9c720133cfe1edebf685fbd073120e (patch)
tree3e42f97dddb5bf3ad55cba51876320506b22a204
parentaf72435df2ba165b2dd23e8e2072640e0dd20a20 (diff)
works for subdomains I think?
-rwxr-xr-xdyndns.sh42
1 files changed, 25 insertions, 17 deletions
diff --git a/dyndns.sh b/dyndns.sh
index 4b7d1ca..dd7b021 100755
--- a/dyndns.sh
+++ b/dyndns.sh
@@ -21,26 +21,34 @@ if [ -z "$IP" ]; then
exit 1
fi
+DIGITALOCEAN_TOKEN=`cat $SCRIPT_DIR/DIGITALOCEAN_TOKEN`
+DOMAIN=${2:-`cat $SCRIPT_DIR/DIGITALOCEAN_DOMAIN`}
+SUBDOMAIN=`echo $DOMAIN | sed "s/[^.]\+\.[^.]\+$//g"`
+if [ -z "$SUBDOMAIN" ]; then
+ SUBDOMAIN="@"
+ ROOT_DOMAIN=$DOMAIN
+else
+ SUBDOMAIN=`echo $SUBDOMAIN | sed "s/\.$//g"`
+ ROOT_DOMAIN=`echo $DOMAIN | sed "s/^${SUBDOMAIN}\.//g"`
+fi
+
REPEAT_CHECK_DIR=$SCRIPT_DIR
-REPEAT_CHECK_A=$REPEAT_CHECK_DIR/REPEAT_CHECK_A
-REPEAT_CHECK_AAAA=$REPEAT_CHECK_DIR/REPEAT_CHECK_AAAA
+REPEAT_CHECK_A=$REPEAT_CHECK_DIR/REPEAT_CHECK_${DOMAIN}_A
+REPEAT_CHECK_AAAA=$REPEAT_CHECK_DIR/REPEAT_CHECK_${DOMAIN}_AAAA
REPEAT_CHECK="$([ $ip_version = 4 ] && echo $REPEAT_CHECK_A || echo $REPEAT_CHECK_AAAA)"
-DIGITALOCEAN_DOMAIN=${2:-`cat $SCRIPT_DIR/DIGITALOCEAN_DOMAIN`}
-DIGITALOCEAN_TOKEN=`cat $SCRIPT_DIR/DIGITALOCEAN_TOKEN`
-
get_a_record_ids() {
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
- "https://api.digitalocean.com/v2/domains/$DIGITALOCEAN_DOMAIN/records" 2> /dev/null | jq '.domain_records | map(select(.type == "A" and .name == "@")) | map(.id) | .[]'
+ "https://api.digitalocean.com/v2/domains/$ROOT_DOMAIN/records" 2> /dev/null | jq '.domain_records | map(select(.type == "A" and .name == "$SUBDOMAIN")) | map(.id) | .[]'
}
get_aaaa_record_ids() {
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
- "https://api.digitalocean.com/v2/domains/$DIGITALOCEAN_DOMAIN/records" 2> /dev/null | jq '.domain_records | map(select(.type == "AAAA" and .name == "@")) | map(.id) | .[]'
+ "https://api.digitalocean.com/v2/domains/$ROOT_DOMAIN/records" 2> /dev/null | jq '.domain_records | map(select(.type == "AAAA" and .name == "$SUBDOMAIN")) | map(.id) | .[]'
}
add_a_record() {
@@ -48,7 +56,7 @@ add_a_record() {
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d "{\"type\":\"A\" \
- ,\"name\":\"@\" \
+ ,\"name\":\"$SUBDOMAIN\" \
,\"data\":\"$IP\" \
,\"priority\":null \
,\"port\":null \
@@ -57,7 +65,7 @@ add_a_record() {
,\"flags\":null \
,\"tag\":null \
}" \
- "https://api.digitalocean.com/v2/domains/$DIGITALOCEAN_DOMAIN/records" 2> /dev/null | jq '.domain_record.id'
+ "https://api.digitalocean.com/v2/domains/$ROOT_DOMAIN/records" 2> /dev/null | jq '.domain_record.id'
}
add_aaaa_record() {
@@ -65,7 +73,7 @@ add_aaaa_record() {
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d "{\"type\":\"AAAA\" \
- ,\"name\":\"@\" \
+ ,\"name\":\"$SUBDOMAIN\" \
,\"data\":\"$IP\" \
,\"priority\":null \
,\"port\":null \
@@ -74,15 +82,15 @@ add_aaaa_record() {
,\"flags\":null \
,\"tag\":null \
}" \
- "https://api.digitalocean.com/v2/domains/$DIGITALOCEAN_DOMAIN/records" 2> /dev/null | jq '.domain_record.id'
+ "https://api.digitalocean.com/v2/domains/$ROOT_DOMAIN/records" 2> /dev/null | jq '.domain_record.id'
}
delete_record_by_id() {
- echo deleting existing A/AAAA record for $DIGITALOCEAN_DOMAIN
+ echo deleting existing A/AAAA record for $DOMAIN
curl -X DELETE \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
- "https://api.digitalocean.com/v2/domains/$DIGITALOCEAN_DOMAIN/records/$1" > /dev/null 2>&1
+ "https://api.digitalocean.com/v2/domains/$ROOT_DOMAIN/records/$1" > /dev/null 2>&1
}
replace_a_records() {
@@ -92,10 +100,10 @@ replace_a_records() {
new_record_id=`add_a_record`
if [ "$new_record_id" = "null" ] ; then
- echo unable to add new A record for $DIGITALOCEAN_DOMAIN with value: $IP
+ echo unable to add new A record for $DOMAIN with value: $IP
return 1
fi
- echo added new A record for $DIGITALOCEAN_DOMAIN with value: $IP
+ echo added new A record for $DOMAIN with value: $IP
}
@@ -106,10 +114,10 @@ replace_aaaa_records() {
new_record_id=`add_aaaa_record`
if [ "$new_record_id" = "null" ] ; then
- echo unable to add new AAAA record for $DIGITALOCEAN_DOMAIN with value: $IP
+ echo unable to add new AAAA record for $DOMAIN with value: $IP
return 1
fi
- echo added new AAAA record for $DIGITALOCEAN_DOMAIN with value: $IP
+ echo added new AAAA record for $DOMAIN with value: $IP
}
replace_records() {