Hello community, here is the log from the commit of package ddclient for openSUSE:Factory checked in at 2012-01-17 11:32:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ddclient (Old) and /work/SRC/openSUSE:Factory/.ddclient.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ddclient", Maintainer is "[email protected]" Changes: -------- --- /work/SRC/openSUSE:Factory/ddclient/ddclient.changes 2011-10-21 16:28:11.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.ddclient.new/ddclient.changes 2012-01-17 16:04:57.000000000 +0100 @@ -1,0 +2,11 @@ +Mon Jan 9 15:25:09 UTC 2012 - [email protected] + +- update to 3.8.1 + * Fixing #28: FreeDNS.afraid.org changed api slightly + * Added dtdns-support + * Added support for longer password + * Added cisco-asa patch + * Added support for LoopiaDNS +- rebase patches + +------------------------------------------------------------------- Old: ---- ddclient-3.8.0-config.patch ddclient-3.8.0-update_nic.patch ddclient-3.8.0.tar.bz2 New: ---- ddclient-3.8.1-config.patch ddclient-3.8.1-update_nic.patch ddclient-3.8.1.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ddclient.spec ++++++ --- /var/tmp/diff_new_pack.YfefcZ/_old 2012-01-17 16:04:58.000000000 +0100 +++ /var/tmp/diff_new_pack.YfefcZ/_new 2012-01-17 16:04:58.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package ddclient # -# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,19 +16,18 @@ # - Name: ddclient Summary: A Perl Client to Update Dynamic DNS Entries -Version: 3.8.0 -Release: 15 License: GPL-2.0+ Group: Productivity/Networking/DNS/Utilities +Version: 3.8.1 +Release: 0 Url: http://ddclient.sourceforge.net/ Source0: http://switch.dl.sourceforge.net/sourceforge/ddclient/%{name}-%{version}.tar.bz2 Source1: rc.ddclient Source2: %{name}.sysconfig -Patch0: %{name}-3.8.0-config.patch -Patch1: %{name}-3.8.0-update_nic.patch +Patch0: %{name}-3.8.1-config.patch +Patch1: %{name}-3.8.1-update_nic.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build PreReq: %fillup_prereq Requires: perl >= 5.004 @@ -48,8 +47,8 @@ %prep %setup -%patch0 -p1 -%patch1 -p1 +%patch0 +%patch1 rm -f sample-etc_ddclient.conf.orig chmod a-x sample-etc* mkdir examples ++++++ ddclient-3.8.0-config.patch -> ddclient-3.8.1-config.patch ++++++ --- /work/SRC/openSUSE:Factory/ddclient/ddclient-3.8.0-config.patch 2011-09-23 01:54:54.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.ddclient.new/ddclient-3.8.1-config.patch 2012-01-17 16:04:57.000000000 +0100 @@ -1,18 +1,7 @@ -diff -ruN ddclient-3.8.0-orig/ddclient ddclient-3.8.0/ddclient ---- ddclient-3.8.0-orig/ddclient 2009-01-27 19:14:02.000000000 +0000 -+++ ddclient-3.8.0/ddclient 2009-04-29 21:37:27.690282779 +0000 -@@ -27,7 +27,7 @@ - $program =~ s/d$//; - my $now = time; - my $hostname = hostname(); --my $etc = ($program =~ /test/i) ? './' : '/etc/ddclient/'; -+my $etc = ($program =~ /test/i) ? './' : '/etc/'; - my $cachedir = ($program =~ /test/i) ? './' : '/var/cache/ddclient/'; - my $savedir = ($program =~ /test/i) ? 'URL/' : '/tmp/'; - my $msgs = ''; -diff -ruN ddclient-3.8.0-orig/sample-etc_ddclient.conf ddclient-3.8.0/sample-etc_ddclient.conf ---- ddclient-3.8.0-orig/sample-etc_ddclient.conf 2008-11-19 20:20:34.000000000 +0000 -+++ ddclient-3.8.0/sample-etc_ddclient.conf 2009-04-30 14:14:47.793725557 +0000 +Index: sample-etc_ddclient.conf +=================================================================== +--- sample-etc_ddclient.conf.orig ++++ sample-etc_ddclient.conf @@ -18,12 +18,16 @@ ## are mentioned here. ## @@ -32,8 +21,8 @@ # ssl-library # postscript=script # run script after updating. The # new IP is added as argument. -@@ -52,10 +56,17 @@ - ## To obtain an IP address from Web status page (using the proxy if defined) +@@ -56,10 +60,17 @@ ssl=yes # use ssl-support. Works wi + ## get banned from their service. #use=web, web=checkip.dyndns.org/, web-skip='IP Address' # found after IP Address # +###################################################################### ++++++ ddclient-3.8.0-update_nic.patch -> ddclient-3.8.1-update_nic.patch ++++++ --- /work/SRC/openSUSE:Factory/ddclient/ddclient-3.8.0-update_nic.patch 2011-09-23 01:54:54.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.ddclient.new/ddclient-3.8.1-update_nic.patch 2012-01-17 16:04:57.000000000 +0100 @@ -1,12 +1,19 @@ -diff -ruN ddclient-3.8.0-orig/ddclient ddclient-3.8.0/ddclient ---- ddclient-3.8.0-orig/ddclient 2009-01-27 19:14:02.000000000 +0000 -+++ ddclient-3.8.0/ddclient 2009-05-01 20:55:20.386630124 +0000 -@@ -726,7 +726,7 @@ - foreach my $h (sort keys %config) { - next if $config{$h}{'protocol'} ne lc($s); - $examined{$h} = 1; -- my $use = $config{$h}{'use'} || opt('use'); -+ my $use = $opt{'use'} || $config{$h}{'use'}; - local $opt{$use} = $config{$h}{$use} if $config{$h}{$use}; - my $ip = get_ip($use); - if (!defined $ip || !$ip) { +Index: ddclient +=================================================================== +--- ddclient.orig ++++ ddclient +@@ -1,5 +1,4 @@ + #!/usr/bin/perl -w +-#!/usr/local/bin/perl -w + ###################################################################### + # $Id: ddclient 130 2011-07-11 21:02:07Z wimpunk $ + # +@@ -773,7 +772,7 @@ sub update_nics { + foreach my $h (sort keys %config) { + next if $config{$h}{'protocol'} ne lc($s); + $examined{$h} = 1; +- my $use = $config{$h}{'use'} || opt('use'); ++ my $use = opt('use') || $config{$h}{'use'}; + local $opt{$use} = $config{$h}{$use} if $config{$h}{$use}; + # bug #13: we should only do this once + # use isn't enough, we have to save the origin to. ++++++ ddclient-3.8.0.tar.bz2 -> ddclient-3.8.1.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ddclient-3.8.0/Changelog new/ddclient-3.8.1/Changelog --- old/ddclient-3.8.0/Changelog 2008-06-13 22:26:59.000000000 +0200 +++ new/ddclient-3.8.1/Changelog 2011-07-11 23:04:21.000000000 +0200 @@ -300,5 +300,5 @@ network connectivity problems or a DynDNS server outage ------------------------------------------------------------------------------- -$Id: Changelog 98 2008-06-13 20:26:56Z wimpunk $ +$Id: Changelog 96 2008-06-13 20:24:24Z wimpunk $ ------------------------------------------------------------------------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ddclient-3.8.0/README new/ddclient-3.8.1/README --- old/ddclient-3.8.0/README 2008-06-13 22:26:59.000000000 +0200 +++ new/ddclient-3.8.1/README 2011-07-11 23:04:21.000000000 +0200 @@ -27,6 +27,7 @@ DnsPark - See http://www.dnspark.com for details DslReports - See http://www.dslreports.com for details Sitelutions - see http://www.sitelutions.com for details +Loopia - See http://www.loopia.se for details DDclient now supports many of cable/dsl broadband routers. @@ -172,4 +173,4 @@ and monitor your ethernet interface. ------------------------------------------------------------------------------- -$Id: README 98 2008-06-13 20:26:56Z wimpunk $ +$Id: README 112 2009-09-10 10:21:19Z wimpunk $ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ddclient-3.8.0/README.cisco new/ddclient-3.8.1/README.cisco --- old/ddclient-3.8.0/README.cisco 2008-06-13 22:26:59.000000000 +0200 +++ new/ddclient-3.8.1/README.cisco 2011-07-11 23:04:21.000000000 +0200 @@ -1,4 +1,4 @@ -$Id: README.cisco 98 2008-06-13 20:26:56Z wimpunk $ +$Id: README.cisco 96 2008-06-13 20:24:24Z wimpunk $ Method 1 ------------------------------------------------------ The following config will allow the Linux machine (10.1.1.2) to read diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ddclient-3.8.0/README.ssl new/ddclient-3.8.1/README.ssl --- old/ddclient-3.8.0/README.ssl 2008-06-13 22:26:59.000000000 +0200 +++ new/ddclient-3.8.1/README.ssl 2011-07-11 23:04:21.000000000 +0200 @@ -1,4 +1,4 @@ -$Id: README.ssl 98 2008-06-13 20:26:56Z wimpunk $ +$Id: README.ssl 96 2008-06-13 20:24:24Z wimpunk $ Since 3.7.0, ddclient support ssl-updates To use ssl, put "ssl=yes" in your configuration and make sure diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ddclient-3.8.0/RELEASENOTE new/ddclient-3.8.1/RELEASENOTE --- old/ddclient-3.8.0/RELEASENOTE 2009-01-27 20:33:14.000000000 +0100 +++ new/ddclient-3.8.1/RELEASENOTE 2011-07-11 23:13:44.000000000 +0200 @@ -1,11 +1,10 @@ -It's been a while but here is new release of ddclient. There are some important -changes and some documentation is modified. A detailed overview can be found -in ChangeLog but here's a quick overview: - - * Added ddclient-noip.patch send by Kurt Bussche. - * Added and applied default timeout patch from - https://bugs.launchpad.net/ubuntu/+source/ddclient/+bug/116066 - * Sending mail when killed, not after TERM-signal - * Added support for multiple IP adresses. +Once again it has been to before releasing a new version of ddclient. This +version has some minor changes which are all logged in the ChangeLog file. + * Fixing #28: FreeDNS.afraid.org changed api slightly + * Added dtdns-support + * Added support for longer password + * Added cisco-asa patch + * Added support for LoopiaDNS +Hopefully we will be able to release the next version of ddclient much sooner. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ddclient-3.8.0/ddclient new/ddclient-3.8.1/ddclient --- old/ddclient-3.8.0/ddclient 2009-01-27 20:14:02.000000000 +0100 +++ new/ddclient-3.8.1/ddclient 2011-07-11 23:04:21.000000000 +0200 @@ -1,7 +1,7 @@ #!/usr/bin/perl -w #!/usr/local/bin/perl -w ###################################################################### -# $Id: ddclient 106 2008-12-04 18:05:23Z wimpunk $ +# $Id: ddclient 130 2011-07-11 21:02:07Z wimpunk $ # # DDCLIENT - a Perl client for updating DynDNS information # @@ -20,7 +20,9 @@ use Sys::Hostname; use IO::Socket; -my $version = "3.8.0"; +my ($VERSION) = q$Revision: 130 $ =~ /(\d+)/; + +my $version = "3.8.1"; my $programd = $0; $programd =~ s%^.*/%%; my $program = $programd; @@ -63,6 +65,7 @@ 'dyndns' => { 'url' => 'http://checkip.dyndns.org/', 'skip' => 'Current IP Address:', }, 'dnspark' => { 'url' => 'http://ipdetect.dnspark.com/', 'skip' => 'Current Address:', }, + 'loopia' => { 'url' => 'http://dns.loopia.se/checkip/checkip.php', 'skip' => 'Current Address:', }, ); my %builtinfw = ( 'watchguard-soho' => { @@ -80,6 +83,11 @@ 'url' => '/status.htm', 'skip' => 'IP Address', }, + 'smc-barricade-alt' => { + 'name' => 'SMC Barricade FW (alternate config)', + 'url' => '/status.HTM', + 'skip' => 'WAN IP', + }, 'smc-barricade-7401bra' => { 'name' => 'SMC Barricade 7401BRA FW', 'url' => '/admin/wan1.htm', @@ -283,6 +291,7 @@ 'if' => ": obtain IP from the -if {interface}", 'cmd' => ": obtain IP from the -cmd {external-command}", 'cisco' => ": obtain IP from Cisco FW at the -fw {address}", + 'cisco-asa' => ": obtain IP from Cisco ASA at the -fw {address}", map { $_ => sprintf ": obtain IP from %s at the -fw {address}", $builtinfw{$_}->{'name'} } keys %builtinfw, ); sub ip_strategies_usage { @@ -292,6 +301,7 @@ my %web_strategies = ( 'dyndns'=> 1, 'dnspark'=> 1, + 'loopia'=> 1, ); sub setv { @@ -307,6 +317,7 @@ my %variables = ( 'global-defaults' => { 'daemon' => setv(T_DELAY, 0, 0, 1, 0, interval('60s')), + 'foreground' => setv(T_BOOL, 0, 0, 1, 0, undef), 'file' => setv(T_FILE, 0, 0, 1, "$etc$program.conf", undef), 'cache' => setv(T_FILE, 0, 0, 1, "$cachedir$program.cache", undef), 'pid' => setv(T_FILE, 0, 0, 1, "", undef), @@ -411,6 +422,13 @@ 'warned-min-interval' => setv(T_ANY, 0, 1, 0, 0, undef), 'warned-min-error-interval' => setv(T_ANY, 0, 1, 0, 0, undef), }, + 'zoneedit-service-common-defaults' => { + 'zone' => setv(T_OFQDN, 0, 0, 1, undef, undef), + }, + 'dtdns-common-defaults' => { + 'login' => setv(T_LOGIN, 0, 0, 0, 'unused', undef), + 'client' => setv(T_STRING, 0, 1, 1, $program, undef), + }, ); my %services = ( 'dyndns1' => { @@ -428,6 +446,7 @@ 'examples' => \&nic_dyndns2_examples, 'variables' => merge( { 'custom' => setv(T_BOOL, 0, 1, 1, 0, undef), }, + { 'script' => setv(T_STRING, 1, 1, 1, '/nic/update', undef), }, # { 'offline' => setv(T_BOOL, 0, 1, 1, 0, undef), }, $variables{'dyndns-common-defaults'}, $variables{'service-common-defaults'}, @@ -480,6 +499,7 @@ { 'server' => setv(T_FQDNP, 1, 0, 1, 'dynamic.zoneedit.com', undef) }, { 'min-interval' => setv(T_DELAY, 0, 0, 1, interval('5m'), 0),}, $variables{'service-common-defaults'}, + $variables{'zoneedit-service-common-defaults'}, ), }, 'easydns' => { @@ -524,6 +544,25 @@ $variables{'service-common-defaults'}, ), }, + 'freedns' => { + 'updateable' => undef, + 'update' => \&nic_freedns_update, + 'examples' => \&nic_freedns_examples, + 'variables' => merge( + { 'server' => setv(T_FQDNP, 1, 0, 1, 'freedns.afraid.org', undef) }, + { 'min-interval' => setv(T_DELAY, 0, 0, 1, 0, interval('5m')),}, + $variables{'service-common-defaults'}, + ), + }, + 'dtdns' => { + 'updateable' => undef, + 'update' => \&nic_dtdns_update, + 'examples' => \&nic_dtdns_examples, + 'variables' => merge( + $variables{'dtdns-common-defaults'}, + $variables{'service-common-defaults'}, + ), + }, ); $variables{'merged'} = merge($variables{'global-defaults'}, $variables{'service-common-defaults'}, @@ -535,6 +574,7 @@ "usage: ${program} [options]", "options are:", [ "daemon", "=s", "-daemon delay : run as a daemon, specify delay as an interval." ], ++ [ "foreground", "!", "-foreground : do not fork" ], [ "proxy", "=s", "-proxy host : use 'host' as the HTTP proxy" ], [ "server", "=s", "-server host : update DNS information on 'host'" ], [ "protocol", "=s", "-protocol type : update protocol used" ], @@ -623,7 +663,10 @@ $SIG{'HUP'} = sub { $caught_hup = 1; }; $SIG{'TERM'} = sub { $caught_term = 1; }; $SIG{'KILL'} = sub { $caught_kill = 1; }; -if (opt('daemon') && !opt('force')) { +# don't fork() if foreground or force is on +if (opt('foreground') || opt('force')) { + ; +} elsif (opt('daemon')) { $SIG{'CHLD'} = 'IGNORE'; my $pid = fork; if ($pid < 0) { @@ -633,12 +676,15 @@ exit 0; } $SIG{'CHLD'} = 'DEFAULT'; - $opt{'syslog'} = 1; open(STDOUT, ">/dev/null"); open(STDERR, ">/dev/null"); open(STDIN, "</dev/null"); +} +# write out the pid file if we're daemon'ized +if(opt('daemon')) { write_pid(); + $opt{'syslog'} = 1; } umask 077; @@ -716,47 +762,58 @@ ## update_nics ###################################################################### sub update_nics { - my %examined = (); - - foreach my $s (sort keys %services) { - my (@hosts, %ips) = (); - my $updateable = $services{$s}{'updateable'}; - my $update = $services{$s}{'update'}; + my %examined = (); + my %iplist = (); - foreach my $h (sort keys %config) { - next if $config{$h}{'protocol'} ne lc($s); - $examined{$h} = 1; - my $use = $config{$h}{'use'} || opt('use'); - local $opt{$use} = $config{$h}{$use} if $config{$h}{$use}; - my $ip = get_ip($use); - if (!defined $ip || !$ip) { - warning("unable to determine IP address") - if !$daemon || opt('verbose'); - next; - } - if ($ip !~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { - warning("malformed IP address (%s)", $ip); - next; - } - $config{$h}{'wantip'} = $ip; - next if !nic_updateable($h, $updateable); - push @hosts, $h; - $ips{$ip} = $h; - } - if (@hosts) { - $0 = sprintf("%s - updating %s", $program, join(',', @hosts)); - &$update(@hosts); - runpostscript(join ' ', keys %ips); + foreach my $s (sort keys %services) { + my (@hosts, %ips) = (); + my $updateable = $services{$s}{'updateable'}; + my $update = $services{$s}{'update'}; + + foreach my $h (sort keys %config) { + next if $config{$h}{'protocol'} ne lc($s); + $examined{$h} = 1; + my $use = $config{$h}{'use'} || opt('use'); + local $opt{$use} = $config{$h}{$use} if $config{$h}{$use}; + # bug #13: we should only do this once + # use isn't enough, we have to save the origin to. + # this will break the multiple ip stuff if use has + # been used twice for the same device. + my $ip = ""; + if (defined $iplist{$use}) { + $ip = $iplist{$use}; + } else { + $ip = get_ip($use, $h); + if (!defined $ip || !$ip) { + warning("unable to determine IP address") + if !$daemon || opt('verbose'); + next; + } + if ($ip !~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { + warning("malformed IP address (%s)", $ip); + next; + } + $iplist{$use} = $ip; + } + $config{$h}{'wantip'} = $ip; + next if !nic_updateable($h, $updateable); + push @hosts, $h; + $ips{$ip} = $h; + } + if (@hosts) { + $0 = sprintf("%s - updating %s", $program, join(',', @hosts)); + &$update(@hosts); + runpostscript(join ' ', keys %ips); + } } - } - foreach my $h (sort keys %config) { - if (!exists $examined{$h}) { - failed("%s was not updated because protocol %s is not supported.", - $h, define($config{$h}{'protocol'}, '<undefined>') - ); + foreach my $h (sort keys %config) { + if (!exists $examined{$h}) { + failed("%s was not updated because protocol %s is not supported.", + $h, define($config{$h}{'protocol'}, '<undefined>') + ); + } } - } - write_cache(opt('cache')); + write_cache(opt('cache')); } ###################################################################### ## unlink_pid() @@ -841,9 +898,9 @@ %opt = %saved; foreach my $h (keys %cache) { - if (exists $config{$h}) { + if (exists $config->{$h}) { foreach (qw(atime mtime wtime ip status)) { - $config{$h}{$_} = $cache{$h}{$_} if exists $cache{$h}{$_}; + $config->{$h}{$_} = $cache{$h}{$_} if exists $cache{$h}{$_}; } } } @@ -1055,7 +1112,7 @@ $opt{'use'} = 'web' if !define($opt{'use'}) && defined($opt{'web'}); ## sanity check - $opt{'max-interval'} = max(interval(opt('max-interval')), interval(default('max-interval'))); + $opt{'max-interval'} = min(interval(opt('max-interval')), interval(default('max-interval'))); $opt{'min-interval'} = max(interval(opt('min-interval')), interval(default('min-interval'))); $opt{'min-error-interval'} = max(interval(opt('min-error-interval')), interval(default('min-error-interval'))); @@ -1093,7 +1150,7 @@ ## merge options into host definitions or globals if (@hosts) { foreach my $h (@hosts) { - $config{$h} = %{ merge(\%options, $config{$h}) }; + $config{$h} = merge(\%options, $config{$h}); } $opt{'host'} = join(',', @hosts); } else { @@ -1157,6 +1214,8 @@ $proto = $config{$h}{'protocol'}; $proto = opt('protocol') if !defined($proto); + load_sha1_support() if ($proto eq "freedns"); + if (!exists($services{$proto})) { warning("skipping host: %s: unrecognized protocol '%s'", $h, $proto); delete $config{$h}; @@ -1481,6 +1540,8 @@ } sub opt { my $v = shift; + my $h = shift; + return $config{$h}{$v} if defined($h && $config{$h}{$v}); return $opt{$v} if defined $opt{$v}; return $globals{$v} if defined $globals{$v}; return default($v) if defined default($v); @@ -1696,11 +1757,6 @@ # fix padding at the end my $padding = (3 - length($_[0]) % 3) % 3; $res =~ s/.{$padding}$/'=' x $padding/e if $padding; - - # break encoded string into lines of no more than 76 characters each - if (length $eol) { - $res =~ s/(.{1,76})/$1$eol/g; - } $res; } ###################################################################### @@ -1712,12 +1768,26 @@ fatal(<<"EOM"); Error loading the Perl module IO::Socket::SSL needed for SSL connect. On Debian, the package libio-socket-ssl-perl must be installed. +On Red Hat, the package perl-IO-Socket-SSL must be installed. EOM } import IO::Socket::SSL; { no warnings; $IO::Socket::SSL::DEBUG = 0; } } ###################################################################### +## load_sha1_support +###################################################################### +sub load_sha1_support { + my $sha1_loaded = eval {require Digest::SHA1}; + unless ($sha1_loaded) { + fatal(<<"EOM"); +Error loading the Perl module Digest::SHA1 needed for freedns update. +On Debian, the package libdigest-sha1-perl must be installed. +EOM + } + import Digest::SHA1 (qw/sha1_hex/); +} +###################################################################### ## geturl ###################################################################### sub geturl { @@ -1729,8 +1799,10 @@ my ($sd, $rq, $request, $reply); debug("proxy = $proxy"); - debug("url = $url"); + debug("url = %s", $url); ## canonify proxy and url + my $force_ssl; + $force_ssl = 1 if ($url =~ /^https:/); $proxy =~ s%^https?://%%i; $url =~ s%^https?://%%i; $server = $url; @@ -1743,7 +1815,7 @@ $globals{'fw'} && debug("glo fw = $globals{'fw'}"); #if ( $globals{'ssl'} and $server ne $globals{'fw'} ) { ## always omit SSL for connections to local router - if ( $globals{'ssl'} and (caller(1))[3] ne 'main::get_ip' ) { + if ( $force_ssl || ($globals{'ssl'} and (caller(1))[3] ne 'main::get_ip') ) { $use_ssl = 1; $default_port = 443; load_ssl_support; @@ -1769,7 +1841,7 @@ $request .= "Host: $server\n"; my $auth = encode_base64("${login}:${password}"); - $request .= "Authorization: Basic $auth" if $login || $password; + $request .= "Authorization: Basic $auth\n" if $login || $password; $request .= "User-Agent: ${program}/${version}\n"; $request .= "Connection: close\n"; $request .= "\n"; @@ -1781,7 +1853,7 @@ $0 = sprintf("%s - connecting to %s port %s", $program, $peer, $port); if (! opt('exec')) { debug("skipped network connection"); - verbose("SENDING:", $request); + verbose("SENDING:", "%s", $request); } elsif ($use_ssl) { $sd = IO::Socket::SSL->new( PeerAddr => $peer, @@ -1802,39 +1874,39 @@ defined $sd or warning("cannot connect to $peer:$port socket: $@"); } - if (defined $sd) { - ## send the request to the http server - verbose("CONNECTED: ", $use_ssl ? 'using SSL' : 'using HTTP'); - verbose("SENDING:", $request); - - $0 = sprintf("%s - sending to %s port %s", $program, $peer, $port); - my $result = syswrite $sd, $rq; - if ($result != length($rq)) { - warning("cannot send to $peer:$port ($!)."); - - } else { - my $timeout = 0; - local $SIG{'ALRM'} = sub { $timeout = 1; }; - - $0 = sprintf("%s - reading from %s port %s", $program, $peer, $port); - alarm(opt('timeout')) if opt('timeout') > 0; - while (!$timeout && ($_ = <$sd>)) { - $0 = sprintf("%s - read from %s port %s", $program, $peer, $port); - verbose("RECEIVE:", "%s", define($_, "<undefined>")); - $reply .= $_ if defined $_; - } - if (opt('timeout') > 0) { - alarm(0); - } - close($sd); - if ($timeout) { - warning("TIMEOUT: %s after %s seconds", $to, opt('timeout')); - $reply = ''; - } - $reply = '' if !defined $reply; + if (defined $sd) { + ## send the request to the http server + verbose("CONNECTED: ", $use_ssl ? 'using SSL' : 'using HTTP'); + verbose("SENDING:", "%s", $request); + + $0 = sprintf("%s - sending to %s port %s", $program, $peer, $port); + my $result = syswrite $sd, $rq; + if ($result != length($rq)) { + warning("cannot send to $peer:$port ($!)."); + } else { + $0 = sprintf("%s - reading from %s port %s", $program, $peer, $port); + eval { + local $SIG{'ALRM'} = sub { die "timeout";}; + alarm(opt('timeout')) if opt('timeout') > 0; + while ($_ = <$sd>) { + $0 = sprintf("%s - read from %s port %s", $program, $peer, $port); + verbose("RECEIVE:", "%s", define($_, "<undefined>")); + $reply .= $_ if defined $_; + } + if (opt('timeout') > 0) { + alarm(0); + } + }; + close($sd); + + if ($@ and $@ =~ /timeout/) { + warning("TIMEOUT: %s after %s seconds", $to, opt('timeout')); + $reply = ''; + } + $reply = '' if !defined $reply; + } } - } - $0 = sprintf("%s - closed %s port %s", $program, $peer, $port); + $0 = sprintf("%s - closed %s port %s", $program, $peer, $port); ## during testing simulate reading the URL if (opt('test')) { @@ -1855,28 +1927,29 @@ ###################################################################### sub get_ip { my $use = lc shift; + my $h = shift; my ($ip, $arg, $reply, $url, $skip) = (undef, opt($use), ''); $arg = '' unless $arg; if ($use eq 'ip') { - $ip = opt('ip'); + $ip = opt('ip', $h); $arg = 'ip'; } elsif ($use eq 'if') { - $skip = opt('if-skip') || ''; + $skip = opt('if-skip', $h) || ''; $reply = `ifconfig $arg 2> /dev/null`; $reply = '' if $?; } elsif ($use eq 'cmd') { if ($arg) { - $skip = opt('cmd-skip') || ''; + $skip = opt('cmd-skip', $h) || ''; $reply = `$arg`; $reply = '' if $?; } } elsif ($use eq 'web') { - $url = opt('web') || ''; - $skip = opt('web-skip') || ''; + $url = opt('web', $h) || ''; + $skip = opt('web-skip', $h) || ''; if (exists $builtinweb{$url}) { $skip = $builtinweb{$url}->{'skip'} unless $skip; @@ -1885,15 +1958,32 @@ $arg = $url; if ($url) { - $reply = geturl(opt('proxy'), $url) || ''; + $reply = geturl(opt('proxy', $h), $url) || ''; } } elsif (($use eq 'cisco')) { # Stuff added to support Cisco router ip http daemon # User fw-login should only have level 1 access to prevent # password theft. This is pretty harmless. - my $queryif = opt('if'); - $skip = opt('fw-skip') || ''; + my $queryif = opt('if', $h); + $skip = opt('fw-skip', $h) || ''; + + # Convert slashes to protected value "\/" + $queryif =~ s%\/%\\\/%g; + + # Protect special HTML characters (like '?') + $queryif =~ s/([\?&= ])/sprintf("%%%02x",ord($1))/ge; + + $url = "http://".opt('fw', $h)."/level/1/exec/show/ip/interface/brief/${queryif}/CR"; + $reply = geturl('', $url, opt('fw-login', $h), opt('fw-password', $h)) || ''; + $arg = $url; + + } elsif (($use eq 'cisco-asa')) { + # Stuff added to support Cisco ASA ip https daemon + # User fw-login should only have level 1 access to prevent + # password theft. This is pretty harmless. + my $queryif = opt('if', $h); + $skip = opt('fw-skip', $h) || ''; # Convert slashes to protected value "\/" $queryif =~ s%\/%\\\/%g; @@ -1901,13 +1991,13 @@ # Protect special HTML characters (like '?') $queryif =~ s/([\?&= ])/sprintf("%%%02x",ord($1))/ge; - $url = "http://".opt('fw')."/level/1/exec/show/ip/interface/brief/${queryif}/CR"; - $reply = geturl('', $url, opt('fw-login'), opt('fw-password')) || ''; + $url = "https://".opt('fw', $h)."/exec/show%20interface%20${queryif}"; + $reply = geturl('', $url, opt('fw-login', $h), opt('fw-password', $h)) || ''; $arg = $url; } else { - $url = opt('fw') || ''; - $skip = opt('fw-skip') || ''; + $url = opt('fw', $h) || ''; + $skip = opt('fw-skip', $h) || ''; if (exists $builtinfw{$use}) { $skip = $builtinfw{$use}->{'skip'} unless $skip; @@ -1916,7 +2006,7 @@ $arg = $url; if ($url) { - $reply = geturl('', $url, opt('fw-login'), opt('fw-password')) || ''; + $reply = geturl('', $url, opt('fw-login', $h), opt('fw-password', $h)) || ''; } } if (!defined $reply) { @@ -2093,11 +2183,14 @@ } elsif (defined($sub) && &$sub($host)) { $update = 1; - - } elsif (($cache{$host}{'static'} ne $config{$host}{'static'}) || - ($cache{$host}{'wildcard'} ne $config{$host}{'wildcard'}) || - ($cache{$host}{'mx'} ne $config{$host}{'mx'}) || - ($cache{$host}{'backupmx'} ne $config{$host}{'backupmx'})) { + } elsif ((defined($cache{$host}{'static'}) && defined($config{$host}{'static'}) && + ($cache{$host}{'static'} ne $config{$host}{'static'})) || + (defined($cache{$host}{'wildcard'}) && defined($config{$host}{'wildcard'}) && + ($cache{$host}{'wildcard'} ne $config{$host}{'wildcard'})) || + (defined($cache{$host}{'mx'}) && defined($config{$host}{'mx'}) && + ($cache{$host}{'mx'} ne $config{$host}{'mx'})) || + (defined($cache{$host}{'backupmx'}) && defined($config{$host}{'backupmx'}) && + ($cache{$host}{'backupmx'} ne $config{$host}{'backupmx'})) ) { info("updating %s because host settings have been changed.", $host); $update = 1; @@ -2270,6 +2363,7 @@ Configuration variables applicable to the 'dyndns2' protocol are: protocol=dyndns2 ## server=fqdn.of.service ## defaults to members.dyndns.org + script=/path/to/script ## defaults to /nic/update backupmx=no|yes ## indicates that this host is the primary MX for the domain. static=no|yes ## indicates that this host has a static IP address. custom=no|yes ## indicates that this host is a 'custom' top-level domain name. @@ -2318,7 +2412,9 @@ '!yours' => 'The hostname specified exists, but not under the username currently being used', '!donator' => 'The offline setting was set, when the user is not a donator', '!active' => 'The hostname specified is in a Custom DNS domain which has not yet been activated.', - 'abuse', => 'The hostname specified is blocked for abuse; fill in the form at http://support.dyndns.org/abuse.php to be unblocked', + 'abuse', => 'The hostname specified is blocked for abuse; you should receive an email notification ' . + 'which provides an unblock request link. More info can be found on ' . + 'https://www.dyndns.com/support/abuse.html', 'numhost' => 'System error: Too many or too few hosts found. Contact [email protected]', 'dnserr' => 'System error: DNS error encountered. Contact [email protected]', @@ -2338,7 +2434,7 @@ verbose("UPDATE:","updating %s", $hosts); ## Select the DynDNS system to update - my $url = "http://$config{$h}{'server'}/nic/update?system="; + my $url = "http://$config{$h}{'server'}$config{$h}{'script'}?system="; if ($config{$h}{'custom'}) { warning("updating %s: 'custom' and 'static' may not be used together. ('static' ignored)", $hosts) if $config{$h}{'static'}; @@ -2375,6 +2471,8 @@ my @reply = split /\n/, $reply; my $state = 'header'; + my $returnedip = $ip; + foreach my $line (@reply) { if ($state eq 'header') { $state = 'body'; @@ -2385,7 +2483,10 @@ } elsif ($state =~ /^results/) { $state = 'results2'; - my ($status, $ip) = split / /, lc $line; + # bug #10: some dyndns providers does not return the IP so + # we can't use the returned IP + my ($status, $returnedip) = split / /, lc $line; + $ip = $returnedip if (not $ip); my $h = shift @hosts; $config{$h}{'status'} = $status; @@ -2801,6 +2902,11 @@ Configuration variables applicable to the 'zoneedit1' protocol are: protocol=zoneedit1 ## server=fqdn.of.service ## defaults to www.zoneedit.com + zone=zone-where-domains-are ## only needed if 1 or more subdomains are deeper + ## than 1 level in relation to the zone where it + ## is defined. For example, b.foo.com in a zone + ## foo.com doesn't need this, but a.b.foo.com in + ## the same zone needs zone=foo.com login=service-login ## login name and password registered with the service password=service-password ## your.domain.name ## the host registered with the service. @@ -2808,7 +2914,8 @@ Example ${program}.conf file entries: ## single host update protocol=zoneedit1, \\ - server=dynamic.zoneedit.com, \\ + server=dynamic.zoneedit.com, \\ + zone=zone-where-domains-are, \\ login=my-zoneedit-login, \\ password=my-zoneedit-password \\ my.domain.name @@ -2832,7 +2939,7 @@ debug("\nnic_zoneedit1_update -------------------"); ## group hosts with identical attributes together - my %groups = group_hosts_by([ @_ ], [ qw(login password server) ]); + my %groups = group_hosts_by([ @_ ], [ qw(login password server zone) ]); ## update each set of hosts that had similar configurations foreach my $sig (keys %groups) { @@ -2849,6 +2956,7 @@ $url .= "http://$config{$h}{'server'}/auth/dynamic.html"; $url .= "?host=$hosts"; $url .= "&dnsto=$ip" if $ip; + $url .= "&zone=$config{$h}{'zone'}" if defined $config{$h}{'zone'}; my $reply = geturl(opt('proxy'), $url, $config{$h}{'login'}, $config{$h}{'password'}); if (!defined($reply) || !$reply) { @@ -3378,6 +3486,191 @@ } } +###################################################################### + +###################################################################### +## nic_freedns_examples +###################################################################### +sub nic_freedns_examples { +return <<EoEXAMPLE; + +o 'freedns' + +The 'freedns' protocol is used by DNS services offered by freedns.afraid.org. + +Configuration variables applicable to the 'freedns' protocol are: + protocol=freedns ## + server=fqdn.of.service ## defaults to freedns.afraid.org + login=service-login ## login name and password registered with the service + password=service-password ## + fully.qualified.host ## the host registered with the service. + +Example ${program}.conf file entries: + ## single host update + protocol=freedns, \\ + login=my-freedns.afraid.org-login, \\ + password=my-freedns.afraid.org-password \\ + myhost.afraid.com + +EoEXAMPLE +} +###################################################################### +## nic_freedns_update +## +## written by John Haney +## +## based on http://freedns.afraid.org/api/ +## needs this url to update: +## http://freedns.afraid.org/api/?action=getdyndns&sha=<sha1sum of login|password> +## This returns a list of host|currentIP|updateURL lines. +## Pick the line that matches myhost, and fetch the URL. +## word 'Updated' for success, 'fail' for failure. +## +###################################################################### +sub nic_freedns_update { + + + debug("\nnic_freedns_update -------------------"); + + ## First get the list of updatable hosts + my $url; + $url = "http://$config{$_[0]}{'server'}/api/?action=getdyndns&sha=".&sha1_hex("$config{$_[0]}{'login'}|$config{$_[0]}{'password'}"); + my $reply = geturl(opt('proxy'), $url); + if (!defined($reply) || !$reply || !header_ok($_[0], $reply)) { + failed("updating %s: Could not connect to %s for site list.", $_[0], $url); + return; + } + my @lines = split("\n", $reply); + my %freedns_hosts; + grep { + my @rec = split(/\|/, $_); + $freedns_hosts{$rec[0]} = \@rec if ($#rec > 0); + } @lines; + if (!keys %freedns_hosts) { + failed("Could not get freedns update URLs from %s", $config{$_[0]}{'server'}); + return; + } + ## update each configured host + foreach my $h (@_) { + if(!$h){ next }; + my $ip = delete $config{$h}{'wantip'}; + info("setting IP address to %s for %s", $ip, $h); + verbose("UPDATE:","updating %s", $h); + + if($ip eq $freedns_hosts{$h}->[1]) { + $config{$h}{'ip'} = $ip; + $config{$h}{'mtime'} = $now; + $config{$h}{'status'} = 'good'; + success("update not necessary %s: good: IP address already set to %s", $h, $ip); + } else { + my $reply = geturl(opt('proxy'), $freedns_hosts{$h}->[2]); + if (!defined($reply) || !$reply) { + failed("updating %s: Could not connect to %s.", $h, $freedns_hosts{$h}->[2]); + last; + } + if(!header_ok($h, $reply)) { + $config{$h}{'status'} = 'failed'; + last; + } + + if($reply =~ /Updated.*$h.*to.*$ip/) { + $config{$h}{'ip'} = $ip; + $config{$h}{'mtime'} = $now; + $config{$h}{'status'} = 'good'; + success("updating %s: good: IP address set to %s", $h, $ip); + } else { + $config{$h}{'status'} = 'failed'; + warning("SENT: %s", $freedns_hosts{$h}->[2]) unless opt('verbose'); + warning("REPLIED: %s", $reply); + failed("updating %s: Invalid reply.", $h); + } + } + } +} + +###################################################################### + +###################################################################### +## nic_dtdns_examples +###################################################################### +sub nic_dtdns_examples { + return <<EoEXAMPLE; +o 'dtdns' + +The 'dtdns' protocol is the protocol used by the dynamic hostname services +of the 'DtDNS' dns services. This is currently used by the free +dynamic DNS service offered by www.dtdns.com. + +Configuration variables applicable to the 'dtdns' protocol are: + protocol=dtdns ## + server=www.fqdn.of.service ## defaults to www.dtdns.com + password=service-password ## password registered with the service + client=name_of_updater ## defaults to $program (10 chars max, no spaces) + fully.qualified.host ## the host registered with the service. + +Example ${program}.conf file entries: + ## single host update + protocol=dtdns, \\ + password=my-dydns.za.net-password, \\ + client=ddclient \\ + myhost.dtdns.net + +EoEXAMPLE +} + +###################################################################### +## nic_dtdns_update +## by Achim Franke +###################################################################### +sub nic_dtdns_update { + debug("\nnic_dtdns_update -------------------"); + + ## update each configured host + foreach my $h (@_) { + my $ip = delete $config{$h}{'wantip'}; + info("setting IP address to %s for %s", $ip, $h); + verbose("UPDATE:","updating %s", $h); + + # Set the URL that we're going to to update + my $url; + $url = "http://$config{$h}{'server'}/api/autodns.cfm"; + $url .= "?id="; + $url .= $h; + $url .= "&pw="; + $url .= $config{$h}{'password'}; + $url .= "&ip="; + $url .= $ip; + $url .= "&client="; + $url .= $config{$h}{'client'}; + + # Try to get URL + my $reply = geturl(opt('proxy'), $url); + + # No response, declare as failed + if (!defined($reply) || !$reply) { + failed("updating %s: Could not connect to %s.", $h, $config{$h}{'server'}); + last; + } + last if !header_ok($h, $reply); + + # Response found, just declare as success (this is ugly, we need more error checking) + if ($reply =~ /now\spoints\sto/) + { + $config{$h}{'ip'} = $ip; + $config{$h}{'mtime'} = $now; + $config{$h}{'status'} = 'good'; + success("updating %s: good: IP address set to %s", $h, $ip); + } + else + { + my @reply = split /\n/, $reply; + my $returned = pop(@reply); + $config{$h}{'status'} = 'failed'; + failed("updating %s: Server said: '$returned'", $h); + } + } +} + ###################################################################### # vim: ai ts=4 sw=4 tw=78 : diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ddclient-3.8.0/sample-etc_cron.d_ddclient new/ddclient-3.8.1/sample-etc_cron.d_ddclient --- old/ddclient-3.8.0/sample-etc_cron.d_ddclient 2008-06-13 22:26:59.000000000 +0200 +++ new/ddclient-3.8.1/sample-etc_cron.d_ddclient 2011-07-11 23:04:21.000000000 +0200 @@ -1,6 +1,6 @@ ###################################################################### ## ddclient is an IP address updater for www.dyndns.org -## $Id: sample-etc_cron.d_ddclient 98 2008-06-13 20:26:56Z wimpunk $ +## $Id: sample-etc_cron.d_ddclient 96 2008-06-13 20:24:24Z wimpunk $ ###################################################################### ## minute 0-59 ## hour 0-23 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ddclient-3.8.0/sample-etc_ddclient.conf new/ddclient-3.8.1/sample-etc_ddclient.conf --- old/ddclient-3.8.0/sample-etc_ddclient.conf 2008-11-19 21:20:34.000000000 +0100 +++ new/ddclient-3.8.1/sample-etc_ddclient.conf 2011-07-11 23:04:21.000000000 +0200 @@ -1,6 +1,6 @@ ###################################################################### ## -## $Id: sample-etc_ddclient.conf 102 2008-11-01 11:23:03Z wimpunk $ +## $Id: sample-etc_ddclient.conf 125 2011-05-19 20:31:20Z wimpunk $ ## ## Define default global variables with lines like: ## var=value [, var=value]* @@ -50,6 +50,10 @@ #use=fw, fw=192.168.1.254/status.htm, fw-skip='IP Address' # found after IP Address # ## To obtain an IP address from Web status page (using the proxy if defined) +## by default, checkip.dyndns.org is used if you use the dyndns protocol. +## Using use=web is enough to get it working. +## WARNING: set deamon at least to 600 seconds if you use checkip or you could +## get banned from their service. #use=web, web=checkip.dyndns.org/, web-skip='IP Address' # found after IP Address # #use=ip, ip=127.0.0.1 # via static IP's @@ -160,3 +164,25 @@ # login=my-namecheap.com-login, \ # password=my-namecheap.com-password \ # myhost.namecheap.com + +## +## +## Loopia (loopia.se) +## +# use=web +# web=loopia +# protocol=dyndns2 +# server=dns.loopia.se +# script=/XDynDNSServer/XDynDNS.php +# login=my-loopia.se-login +# password=my-loopia.se-password +# my.domain.tld,other.domain.tld + +## +## DtDNS (www.dtdns.com) +## +# protocol=dtdns, +# server=www.dtdns.com, +# client=ddclient, +# password=my-dtdns.com-password +# myhost.dtdns.net, otherhost.dtdns.net diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ddclient-3.8.0/sample-etc_dhclient-exit-hooks new/ddclient-3.8.1/sample-etc_dhclient-exit-hooks --- old/ddclient-3.8.0/sample-etc_dhclient-exit-hooks 2008-06-13 22:26:59.000000000 +0200 +++ new/ddclient-3.8.1/sample-etc_dhclient-exit-hooks 2011-07-11 23:04:21.000000000 +0200 @@ -1,6 +1,6 @@ #!/bin/sh ###################################################################### -## $Id: sample-etc_dhclient-exit-hooks 98 2008-06-13 20:26:56Z wimpunk $ +## $Id: sample-etc_dhclient-exit-hooks 96 2008-06-13 20:24:24Z wimpunk $ ###################################################################### # The /etc/dhclient-enter-hooks script is run by the ISC DHCP client's standard # update script whenever dhclient obtains or renews an address. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ddclient-3.8.0/sample-etc_dhcpc_dhcpcd-eth0.exe new/ddclient-3.8.1/sample-etc_dhcpc_dhcpcd-eth0.exe --- old/ddclient-3.8.0/sample-etc_dhcpc_dhcpcd-eth0.exe 2008-06-13 22:26:59.000000000 +0200 +++ new/ddclient-3.8.1/sample-etc_dhcpc_dhcpcd-eth0.exe 2011-07-11 23:04:21.000000000 +0200 @@ -1,6 +1,6 @@ #!/bin/sh ###################################################################### -## $Id: sample-etc_dhcpc_dhcpcd-eth0.exe 98 2008-06-13 20:26:56Z wimpunk $ +## $Id: sample-etc_dhcpc_dhcpcd-eth0.exe 96 2008-06-13 20:24:24Z wimpunk $ ###################################################################### PATH=/usr/sbin:${PATH} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ddclient-3.8.0/sample-etc_ppp_ip-up.local new/ddclient-3.8.1/sample-etc_ppp_ip-up.local --- old/ddclient-3.8.0/sample-etc_ppp_ip-up.local 2008-06-13 22:26:59.000000000 +0200 +++ new/ddclient-3.8.1/sample-etc_ppp_ip-up.local 2011-07-11 23:04:21.000000000 +0200 @@ -1,6 +1,6 @@ #!/bin/sh ###################################################################### -## $Id: sample-etc_ppp_ip-up.local 98 2008-06-13 20:26:56Z wimpunk $ +## $Id: sample-etc_ppp_ip-up.local 128 2011-07-11 20:24:43Z wimpunk $ ###################################################################### ## ## On my host, pppd invokes this script with args: @@ -22,6 +22,10 @@ IP=${IP:-$IPLOCAL} IP=${IP:-$4} +IFACE= +IFACE=${IFACE:-$PPP_IFACE} +IFACE=${IFACE:-$1} + ## update the DNS server unless the IP address is a private address ## that may be used as an internal LAN address (or PPtP tunnel). @@ -34,7 +38,7 @@ ;; *) ( sleep 5 - ddclient -daemon=0 -syslog -use=if -if=$1 >/dev/null 2>&1 + ddclient -daemon=0 -syslog -use=if -if=$IFACE >/dev/null 2>&1 ) & ;; esac diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ddclient-3.8.0/sample-etc_rc.d_init.d_ddclient.lsb new/ddclient-3.8.1/sample-etc_rc.d_init.d_ddclient.lsb --- old/ddclient-3.8.0/sample-etc_rc.d_init.d_ddclient.lsb 2008-06-13 22:26:59.000000000 +0200 +++ new/ddclient-3.8.1/sample-etc_rc.d_init.d_ddclient.lsb 2011-07-11 23:04:21.000000000 +0200 @@ -21,7 +21,7 @@ # can be used on many types of firewalls ### END INIT INFO # -# $Id: sample-etc_rc.d_init.d_ddclient.lsb 98 2008-06-13 20:26:56Z wimpunk $ +# $Id: sample-etc_rc.d_init.d_ddclient.lsb 96 2008-06-13 20:24:24Z wimpunk $ # ### diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ddclient-3.8.0/sample-etc_rc.d_init.d_ddclient.redhat new/ddclient-3.8.1/sample-etc_rc.d_init.d_ddclient.redhat --- old/ddclient-3.8.0/sample-etc_rc.d_init.d_ddclient.redhat 2008-06-13 22:26:59.000000000 +0200 +++ new/ddclient-3.8.1/sample-etc_rc.d_init.d_ddclient.redhat 2011-07-11 23:04:21.000000000 +0200 @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: sample-etc_rc.d_init.d_ddclient.redhat 98 2008-06-13 20:26:56Z wimpunk $ +# $Id: sample-etc_rc.d_init.d_ddclient.redhat 96 2008-06-13 20:24:24Z wimpunk $ # ddclient This shell script takes care of starting and stopping # ddclient. # -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
