X-Git-Url: http://git.ipfire.org/?p=people%2Fteissler%2Fipfire-2.x.git;a=blobdiff_plain;f=src%2Fscripts%2Fsetddns.pl;h=5a195650c691c34d14dd7625bd01077d4751457c;hp=f97e75074b48e5bf9d6f6412b800ce7d5084a03e;hb=7eb25cb302c28a7969a160a8672df6744c0b85af;hpb=3a60bf3483d0f40deba348c120df3e75da7b3ce0 diff --git a/src/scripts/setddns.pl b/src/scripts/setddns.pl index f97e75074..5a195650c 100644 --- a/src/scripts/setddns.pl +++ b/src/scripts/setddns.pl @@ -51,7 +51,7 @@ if ($ip eq "unavailable") { exit(0); } -&General::log("Dynamic DNS public router IP is: $ip"); +#&General::log("Dynamic DNS public router IP is: $ip"); if ($ARGV[0] eq '-f') { unlink ($cachefile); # next regular calls will try again if this force update fails. @@ -400,6 +400,41 @@ if ($ip ne $ipcache) { &General::log("Dynamic DNS ip-update for $settings{'HOSTNAME'}.$settings{'DOMAIN'} : failure (could not connect to server)"); } } + elsif ($settings{'SERVICE'} eq 'spdns.de') { + # use proxy ? + my %proxysettings; + &General::readhash("${General::swroot}/proxy/settings", \%proxysettings); + if ($_=$proxysettings{'UPSTREAM_PROXY'}) { + my ($peer, $peerport) = (/^(?:[a-zA-Z ]+\:\/\/)?(?:[A-Za-z0-9\_\.\-]*?(?:\:[A-Za-z0-9\_\.\-]*?)?\@)?([a-zA-Z0-9\.\_\-]*?)(?:\:([0-9]{1,5}))?(?:\/.*?)?$/); + Net::SSLeay::set_proxy($peer,$peerport,$proxysettings{'UPSTREAM_USER'},$proxysettings{'UPSTREAM_PASSWORD'} ); + } + + if ($settings{'HOSTNAME'} eq '') { + $settings{'HOSTDOMAIN'} = $settings{'DOMAIN'}; + } else { + $settings{'HOSTDOMAIN'} = "$settings{'HOSTNAME'}.$settings{'DOMAIN'}"; + } + + my ($out, $response) = Net::SSLeay::get_https( 'update.spdns.de', 443, + "/nic/update?&hostname=$settings{'HOSTDOMAIN'}&myip=$ip", + Net::SSLeay::make_headers('User-Agent' => 'IPFire' , + 'Authorization' => 'Basic ' . encode_base64("$settings{'LOGIN'}:$settings{'PASSWORD'}")) + ); + + #Valid responses from service are: + # good xxx.xxx.xxx.xxx + # nochg xxx.xxx.xxx.xxx + if ($response =~ m%HTTP/1\.. 200 OK%) { + if ($out !~ m/good |nochg /ig) { + &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} : failure ($out)"); + } else { + &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} : success"); + $success++; + } + } else { + &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} : failure (could not connect to server)"); + } + } elsif ($settings{'SERVICE'} eq 'strato') { # use proxy ? my %proxysettings; @@ -597,26 +632,25 @@ if ($ip ne $ipcache) { $settings{'HOSTDOMAIN'} = "$settings{'HOSTNAME'}.$settings{'DOMAIN'}"; } - my ($out, $response) = Net::SSLeay::get_http( 'dynserv.ca', - 80, - "/dyn/dynengine.cgi?func=set&name=$settings{'LOGIN'}&pass=$settings{'PASSWORD'}&ip=$ip&domain=$settings{'DOMAIN'}", + my ($out, $response) = Net::SSLeay::get_https( 'api.dynu.com', + 443, + "/nic/update?hostname=$settings{'HOSTDOMAIN'}&myip=$ip&username=$settings{'LOGIN'}&password=$settings{'PASSWORD'}", Net::SSLeay::make_headers('User-Agent' => 'IPFire' ) ); - #Valid responses from service are: - # 02 == Domain already exists, refreshing data for ... => xxx.xxx.xxx.xxx - # + # Valid responses are 'good xxx.xxx.xxx.xxx', 'nochg' + # see http://www.dynu.com/Default.aspx?page=dnsapi for further details if ($response =~ m%HTTP/1\.. 200 OK%) { - if ( $out !~ m/Domain already exists, refreshing data for/ig ) { + if ( $out !~ m/^(good|nochg)/ ) { &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} : failure ($out)"); } else { - &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} : success"); + &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} : success ($out)"); $success++; } } else { - &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} : failure (could not connect to server)"); + &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} : failure (could not connect to server---$out-$response)"); } } - elsif ($settings{'SERVICE'} eq 'udmedia.de') { + elsif ($settings{'SERVICE'} eq 'udmedia') { # use proxy ? my %proxysettings; &General::readhash("${General::swroot}/proxy/settings", \%proxysettings); @@ -650,6 +684,73 @@ if ($ip ne $ipcache) { &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} : failure (could not connect to server, check your credentials---$out-$response--)"); } } + elsif ($settings{'SERVICE'} eq 'twodns') { + # use proxy ? + my %proxysettings; + &General::readhash("${General::swroot}/proxy/settings", \%proxysettings); + if ($_=$proxysettings{'UPSTREAM_PROXY'}) { + my ($peer, $peerport) = (/^(?:[a-zA-Z ]+\:\/\/)?(?:[A-Za-z0-9\_\.\-]*?(?:\:[A-Za-z0-9\_\.\-]*?)?\@)?([a-zA-Z0-9\.\_\-]*?)(?:\:([0-9]{1,5}))?(?:\/.*?)?$/); + Net::SSLeay::set_proxy($peer,$peerport,$proxysettings{'UPSTREAM_USER'},$proxysettings{'UPSTREAM_PASSWORD'} ); + } + + if ($settings{'HOSTNAME'} eq '') { + $settings{'HOSTDOMAIN'} = $settings{'DOMAIN'}; + } else { + $settings{'HOSTDOMAIN'} = "$settings{'HOSTNAME'}.$settings{'DOMAIN'}"; + } + + my ($out, $response) = Net::SSLeay::get_https( 'update.twodns.de', + 443, + "/update?hostname=$settings{'HOSTDOMAIN'}&ip=$ip", + Net::SSLeay::make_headers('User-Agent' => 'IPFire', + 'Authorization' => 'Basic ' . encode_base64("$settings{'LOGIN'}:$settings{'PASSWORD'}")) ); + + # Valid response are 'ok' 'nochange' + if ($response =~ m%HTTP/1\.. 200 OK%) { + if ( $out !~ m/^(good|nochg)/ ) { + $out =~ s/\n/ /g; + &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} : failure ($out)"); + } else { + &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} : success"); + $success++; + } + } else { + &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} : failure (could not connect to server, check your credentials---$out-$response--)"); + } + } + elsif ($settings{'SERVICE'} eq 'variomedia') { + # use proxy ? + my %proxysettings; + &General::readhash("${General::swroot}/proxy/settings", \%proxysettings); + if ($_=$proxysettings{'UPSTREAM_PROXY'}) { + my ($peer, $peerport) = (/^(?:[a-zA-Z ]+\:\/\/)?(?:[A-Za-z0-9\_\.\-]*?(?:\:[A-Za-z0-9\_\.\-]*?)?\@)?([a-zA-Z0-9\.\_\-]*?)(?:\:([0-9]{1,5}))?(?:\/.*?)?$/); + Net::SSLeay::set_proxy($peer,$peerport,$proxysettings{'UPSTREAM_USER'},$proxysettings{'UPSTREAM_PASSWORD'} ); + } + + if ($settings{'HOSTNAME'} eq '') { + $settings{'HOSTDOMAIN'} = $settings{'DOMAIN'}; + } else { + $settings{'HOSTDOMAIN'} = "$settings{'HOSTNAME'}.$settings{'DOMAIN'}"; + } + + my ($out, $response) = Net::SSLeay::get_https( 'dyndns.variomedia.de', + 443, + "/nic/update?hostname=$settings{'HOSTDOMAIN'}&myip=$ip", + Net::SSLeay::make_headers('User-Agent' => 'IPFire', + 'Authorization' => 'Basic ' . encode_base64("$settings{'LOGIN'}:$settings{'PASSWORD'}")) ); + + # Valid response is 'good $ip' + if ($response =~ m%HTTP/1\.. 200 OK%) { + if ( $out !~ m/^good $ip/ ) { + &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} ($ip) : failure ($out)"); + } else { + &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} ($ip) : success"); + $success++; + } + } else { + &General::log("Dynamic DNS ip-update for $settings{'HOSTDOMAIN'} : failure (could not connect to server, check your credentials---$out-$response--)"); + } + } else { if ($settings{'WILDCARDS'} eq 'on') { $settings{'WILDCARDS'} = '-w';