mirror of
https://codeberg.org/shm0rt/ddns-pdns-updater.git
synced 2025-07-29 13:39:06 +02:00
158 lines
6 KiB
Bash
158 lines
6 KiB
Bash
#!/usr/bin/env sh
|
|
|
|
# ════════════════════════════════════════════════════════════════════════════
|
|
# FUNCTIONS (Must be defined before use!)
|
|
# ════════════════════════════════════════════════════════════════════════════
|
|
show_help() {
|
|
cat << EOF
|
|
update-ddns - Dynamic DNS updater for PowerDNS and Infomaniak
|
|
|
|
USAGE:
|
|
update-ddns [OPTIONS]
|
|
|
|
OPTIONS:
|
|
-h, --help Show this help message
|
|
-v, --verbose Enable verbose output (debug messages)
|
|
-f, --force Force update even if IP hasn't changed
|
|
--config-file FILE Use custom config file (default: /etc/update-ddns.conf)
|
|
--list-changes
|
|
|
|
FILES:
|
|
/etc/update-ddns.conf Configuration file
|
|
/var/lib/update-ddns/ State and history files
|
|
|
|
EOF
|
|
}
|
|
|
|
log() {
|
|
local level="$1"
|
|
local message="$2"
|
|
|
|
case "$level" in
|
|
"info")
|
|
echo "[INFO] $message"
|
|
;;
|
|
"warning")
|
|
echo "[WARNING] $message" >&2
|
|
;;
|
|
"error")
|
|
echo "[ERROR] $message" >&2
|
|
exit 1
|
|
;;
|
|
"debug")
|
|
[ "$VERBOSE" = "1" ] && echo "[DEBUG] $message"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# ════════════════════════════════════════════════════════════════════════════
|
|
# COMMAND LINE PARSING
|
|
# ════════════════════════════════════════════════════════════════════════════
|
|
|
|
# Default values
|
|
VERBOSE=0
|
|
FORCE=0
|
|
CONFIG_FILE="/etc/update-ddns.conf"
|
|
HISTORY_FILE="/var/lib/update-ddns/ip.history"
|
|
|
|
# Parse command line arguments
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--help|-h)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
--config-file)
|
|
shift
|
|
if [ -z "$1" ]; then
|
|
log error "--config-file requires a filename"
|
|
fi
|
|
CONFIG_FILE="$1"
|
|
;;
|
|
--verbose|-v)
|
|
VERBOSE=1
|
|
;;
|
|
--force|-f)
|
|
FORCE=1
|
|
;;
|
|
--list-changes)
|
|
shift
|
|
lines="${1:-5}"
|
|
|
|
if [ ! -f "$HISTORY_FILE" ]; then
|
|
log error "History file not found"
|
|
exit 1
|
|
fi
|
|
|
|
# Validate number
|
|
case "$lines" in
|
|
''|*[!0-9]*) lines=5 ;;
|
|
esac
|
|
|
|
echo "Last "$lines" IP changes:"
|
|
tail -n "$lines" "$HISTORY_FILE"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
echo "Use --help or -h for usage information"
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
# ════════════════════════════════════════════════════════════════════════════
|
|
# CHECK DEPENDENCIES & FILES
|
|
# ════════════════════════════════════════════════════════════════════════════
|
|
# cron, curl, wget, pdnsutil, sh, dig
|
|
# (-v --version)
|
|
check_dependencies() {
|
|
|
|
}
|
|
check_files() {
|
|
|
|
}
|
|
|
|
|
|
# ════════════════════════════════════════════════════════════════════════════
|
|
# CHECK FOR ACCESS DIR AND ACCESS FILES AND CREATE IF NOT CREATED (POPULATE)
|
|
# ════════════════════════════════════════════════════════════════════════════
|
|
# config
|
|
# init_function
|
|
|
|
|
|
# ════════════════════════════════════════════════════════════════════════════
|
|
# IP CHANGE DETECTION
|
|
# ════════════════════════════════════════════════════════════════════════════
|
|
# check_infomaniak_ip
|
|
# providers: cloudflare, quad9, google, amazon, opendns, akamai
|
|
# check_for_ip_change
|
|
# check_infomaniak_zone
|
|
# check_pdns_zones
|
|
check_for_ip_change() {
|
|
|
|
}
|
|
|
|
# ════════════════════════════════════════════════════════════════════════════
|
|
# UPDATE IP
|
|
# ════════════════════════════════════════════════════════════════════════════
|
|
# update_infomaniak_ip
|
|
# update_infomaniak_zone
|
|
# update_pdns_zones
|
|
|
|
|
|
# ════════════════════════════════════════════════════════════════════════════
|
|
# MAIN EXECUTION
|
|
# ════════════════════════════════════════════════════════════════════════════
|
|
main() {
|
|
log info "Starting update-ddns"
|
|
check_dependencies
|
|
check_files
|
|
check_for_ip_change
|
|
}
|
|
|
|
|
|
|
|
|
|
main
|