diff -Nur smeserver-ddclient-1.2.1.old/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/ddclient smeserver-ddclient-1.2.1/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/ddclient --- smeserver-ddclient-1.2.1.old/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/ddclient 2019-01-19 21:10:55.543000000 -0500 +++ smeserver-ddclient-1.2.1/root/etc/e-smith/locale/en-us/etc/e-smith/web/functions/ddclient 2019-01-19 23:46:36.234000000 -0500 @@ -305,4 +305,48 @@ SUCCESSFULLY_MODIFIED_RETRIEVE_IP You have successfully modified the retrieve IP options. + + RETRIEVE_METHOD + Method to retrieve new IP: + + + RETRIEVE_IF + Local interface to get new IP, if selected interface method + + + RETRIEVE_CMD + Comand to execute to get IP, if selected comand method + + + SME external Interface + SME external interface + + + SME configuration DB + SME configuration DB + + + web + Web query + + + Interface + IP from interface + + + IP + Manual IP setting + + + Command + Command to execute + + + RETRIEVE_IP + IP to manually force + + + + + diff -Nur smeserver-ddclient-1.2.1.old/root/etc/e-smith/templates/etc/ddclient/ddclient.conf/10Headers smeserver-ddclient-1.2.1/root/etc/e-smith/templates/etc/ddclient/ddclient.conf/10Headers --- smeserver-ddclient-1.2.1.old/root/etc/e-smith/templates/etc/ddclient/ddclient.conf/10Headers 2019-01-19 21:10:55.544000000 -0500 +++ smeserver-ddclient-1.2.1/root/etc/e-smith/templates/etc/ddclient/ddclient.conf/10Headers 2019-01-20 00:19:43.400000000 -0500 @@ -9,5 +9,45 @@ pid=/var/run/ddclient.pid # record PID in file. ssl=$ssl #); + + my $method = $ddclient{'method'}||'web'; + my $webskip = $ddclient{'webskip'}||'IP Address:'; + my $cmdskip = $ddclient{'cmdskip'}||''; + my $ifskip = $ddclient{'ifskip'}||''; + my $Extinterface = $ddclient{'Extinterface'}|| $ExternalInterface{'Name'}|| ''; + my $cmd = $ddclient{'cmd'} || '/sbin/e-smith/db configuration getprop ExternalInterface IPAddress'; + my $ForceIP = $ddclient{'ForceIP'} || $ExternalInterface{'IPAddress'} || $ExternalIP || ''; + $OUT .= "\n"; + if ( $method eq 'smeIF' ) { + # we use SME db to get the external interface NAME : ppp0, eth1, tap0... + $Extinterface = $ExternalInterface{'Name'} ||$Extinterface; + $OUT .="use=if, if=$Extinterface\n"; + } elsif ( $method eq 'smeCMD') { + # we choose to just get the value from configuration DB + $OUT .="use=cmd, cmd='/sbin/e-smith/db configuration getprop ExternalInterface IPAddress'\n"; + } elsif ( $method eq 'web') { + # old good way, we get the value from an external web page. best if we are not gateway + $OUT .="use=web, web=$ddclient{'urlcheckip'}\/, web-skip='$webskip' \n"; + } elsif ( $method eq 'if') { + # we have a specific configuation and can not trust sme to get the interface correctly + $OUT .="use=if, if=$Extinterface, if-skip='$ifskip'\n"; + } elsif ( $method eq 'ip') { + # we want to force manually + $OUT.="use=ip, ip=$ForceIP \n"; + } elsif ( $method eq 'cmd') { + $OUT .="use=cmd, cmd='$cmd', cmd-skip='$cmdskip' \n"; + } else { + # fw method + my $fwaddress = $ddclient{'fwaddress'}||''; + my $fwlogin = $ddclient{'fwlogin'}||''; + my $fwpassword = $ddclient{'fwpassword'}||''; + my $fwskip = $ddclient{'fwskip'}||''; + $OUT .= "use=$method, fw=$fwaddress"; + $OUT .= ", fw-login=$fwlogin " if ( $fwlogin ne '' ); + $OUT .= ", fw-password=$fwpassword " if ( $fwpassword ne '' ); + $OUT .= ", fw-skip='$fwskip' " if ( $fwskip ne '' ); + $OUT .= "\n"; + } + } diff -Nur smeserver-ddclient-1.2.1.old/root/etc/e-smith/templates/etc/ddclient/ddclient.conf/20Declaration smeserver-ddclient-1.2.1/root/etc/e-smith/templates/etc/ddclient/ddclient.conf/20Declaration --- smeserver-ddclient-1.2.1.old/root/etc/e-smith/templates/etc/ddclient/ddclient.conf/20Declaration 2019-01-19 21:15:16.756000000 -0500 +++ smeserver-ddclient-1.2.1/root/etc/e-smith/templates/etc/ddclient/ddclient.conf/20Declaration 2019-01-19 23:52:13.859000000 -0500 @@ -5,8 +5,6 @@ my $ddb = esmith::DomainsDB->open_ro(); - $OUT .="use=web, web=$ddclient{'urlcheckip'}\/, web-skip='IP Address:' \n"; - for my $edom ( $ddb->domains ) { { diff -Nur smeserver-ddclient-1.2.1.old/root/etc/e-smith/web/functions/ddclient smeserver-ddclient-1.2.1/root/etc/e-smith/web/functions/ddclient --- smeserver-ddclient-1.2.1.old/root/etc/e-smith/web/functions/ddclient 2019-01-19 21:10:55.546000000 -0500 +++ smeserver-ddclient-1.2.1/root/etc/e-smith/web/functions/ddclient 2019-01-19 23:48:15.869000000 -0500 @@ -58,6 +58,7 @@ sub genServer ($$); sub genRetrieve($$); +sub genRetrieveMethod($$); sub performRetrieve($); ################################################################################################################" @@ -226,7 +227,32 @@ -labels => \%Labels)); } #------------------------------------------------------------ +sub genRetrieveMethod($$) { + my ($q, $curSetting) = @_; + + if ((! defined $curSetting) || ($curSetting eq '')) + { + $curSetting = 'web'; + } + my %Labels = ( + 'smeIF' => $fm->localise('SME external interface'), + 'smeCMD' => $fm->localise('SME configuration DB'), + 'web' => $fm->localise('web'), + 'if' => $fm->localise('Interface'), + 'ip' => $fm->localise('IP'), + 'cmd' => $fm->localise('Command'), + ); + + return esmith::cgi::genCell ($q, $q->popup_menu (-name => 'retrievemethod', + -values => [ + 'smeIF','smeCMD','web','if','ip','cmd' + ], + -default => $curSetting, + -labels => \%Labels)); +} +#------------------------------------------------------------ +# sub showInitial ($$) { my ($q, $msg) = @_; @@ -253,25 +279,37 @@ # get the ip retrieve method #------------------------------------------------------------ my $ddretrieve=$conf->get('ddclient'); + my $ExtIF=$conf->get('ExternalInterface'); my $DeamonUpdate=$ddretrieve->prop('DeamonUpdate')|| '300'; my $urlcheckip=$ddretrieve->prop('urlcheckip')|| 'checkip.dyndns.org'; my $ssl=$ddretrieve->prop('SSL')|| 'yes'; + my $method=$ddretrieve->prop('method')||'web'; + my $Extinterface=$ddretrieve->prop('Extinterface')||''; + my $cmd=$ddretrieve->prop('cmd')||''; + my $forceIP=$ddretrieve->prop('ForceIP')||''; print $q->startform (-method => 'POST', -action => $q->url (-absolute => 1)); print $q->table ({border => 0, cellspacing => 0, cellpadding => 4}, - $q->Tr (esmith::cgi::genCell ($q,$fm->localise('RETRIEVE_SSL')), + $q->Tr (esmith::cgi::genCell($q, + $fm->localise('RETRIEVE_SSL').":", 'sme-noborders-label' ), genRetrieve($q,$ssl)), # esmith::cgi::genWidgetRow ($q, $fm->localise('RETRIEVE_SSL')), # $q->popup_menu (-name => 'SSL', # -values => ['yes', 'no'], # -default => $ssl), # -labels => \%status)) , - - $q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('RETRIEVE_DEAMONUPDATE'), "retrievedeamonupdate",$DeamonUpdate)), + $q->Tr (esmith::cgi::genCell ($q,$fm->localise('RETRIEVE_METHOD').":", 'sme-noborders-label' ), + genRetrieveMethod($q,$method)), + $q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('RETRIEVE_IF'), + "retrieveinterface",$Extinterface)), + $q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('RETRIEVE_CMD'), + "retrievecmd",$cmd)), + $q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('RETRIEVE_IP'), + "retrieveip",$forceIP)), $q->Tr (esmith::cgi::genNameValueRow ($q,$fm->localise('RETRIEVE_URLCHECKIP'), "retrieveurlcheckip",$urlcheckip)), esmith::cgi::genButtonRow ( $q, @@ -480,11 +518,19 @@ my $deamonupdate =$q->param('retrievedeamonupdate'); my $urlcheckip =$q->param('retrieveurlcheckip'); my $ssl = $q->param('retrievessl'); + my $retrievemethod = $q->param('retrievemethod'); + my $retrieveinterface = $q->param('retrieveinterface'); + my $retrievecmd = $q->param('retrievecmd'); + my $retrieveip = $q->param('retrieveip'); my $ddclient=$conf->get('ddclient'); $ddclient->set_prop('urlcheckip' => $urlcheckip); $ddclient->set_prop('DeamonUpdate' => $deamonupdate); $ddclient->set_prop('SSL' => $ssl); + $ddclient->set_prop('method' => $retrievemethod); + $ddclient->set_prop('Extinterface' => $retrieveinterface ); + $ddclient->set_prop('cmd' => $retrievecmd); + $ddclient->set_prop('ForceIP' => $retrieveip); $domaindb->reload();