Hello community,

here is the log from the commit of package yast2-dns-server for 
openSUSE:Factory checked in at 2013-11-28 16:54:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-dns-server (Old)
 and      /work/SRC/openSUSE:Factory/.yast2-dns-server.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "yast2-dns-server"

Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-dns-server/yast2-dns-server.changes        
2013-11-26 19:35:45.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.yast2-dns-server.new/yast2-dns-server.changes   
2013-11-28 16:54:14.000000000 +0100
@@ -1,0 +2,6 @@
+Tue Nov 26 15:10:30 CET 2013 - [email protected]
+
+- Added possibility to set local DNS forwarder (FATE#309036)
+- 3.1.3
+
+-------------------------------------------------------------------

Old:
----
  yast2-dns-server-3.1.2.tar.bz2

New:
----
  yast2-dns-server-3.1.3.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ yast2-dns-server.spec ++++++
--- /var/tmp/diff_new_pack.Y25cBh/_old  2013-11-28 16:54:14.000000000 +0100
+++ /var/tmp/diff_new_pack.Y25cBh/_new  2013-11-28 16:54:14.000000000 +0100
@@ -17,13 +17,14 @@
 
 
 Name:           yast2-dns-server
-Version:        3.1.2
+Version:        3.1.3
 Release:        0
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 Source0:        %{name}-%{version}.tar.bz2
 
 BuildRequires:  perl-XML-Writer
+BuildRequires:  rubygem-rspec
 BuildRequires:  update-desktop-files
 BuildRequires:  yast2
 BuildRequires:  yast2-devtools >= 3.0.6

++++++ yast2-dns-server-3.1.2.tar.bz2 -> yast2-dns-server-3.1.3.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-dns-server-3.1.2/VERSION 
new/yast2-dns-server-3.1.3/VERSION
--- old/yast2-dns-server-3.1.2/VERSION  2013-11-26 16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/VERSION  2013-11-28 11:08:49.000000000 +0100
@@ -1 +1 @@
-3.1.2
+3.1.3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-dns-server-3.1.2/package/yast2-dns-server.changes 
new/yast2-dns-server-3.1.3/package/yast2-dns-server.changes
--- old/yast2-dns-server-3.1.2/package/yast2-dns-server.changes 2013-11-26 
16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/package/yast2-dns-server.changes 2013-11-28 
11:08:49.000000000 +0100
@@ -1,4 +1,10 @@
 -------------------------------------------------------------------
+Tue Nov 26 15:10:30 CET 2013 - [email protected]
+
+- Added possibility to set local DNS forwarder (FATE#309036)
+- 3.1.3
+
+-------------------------------------------------------------------
 Mon Nov 25 15:48:26 CET 2013 - [email protected]
 
 - Switched to using Service library instead of calling init script
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-dns-server-3.1.2/package/yast2-dns-server.spec 
new/yast2-dns-server-3.1.3/package/yast2-dns-server.spec
--- old/yast2-dns-server-3.1.2/package/yast2-dns-server.spec    2013-11-26 
16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/package/yast2-dns-server.spec    2013-11-28 
11:08:49.000000000 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-dns-server
-Version:        3.1.2
+Version:        3.1.3
 Release:        0
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
@@ -27,6 +27,7 @@
 License:        GPL-2.0
 BuildRequires: yast2-ldap-client perl-XML-Writer update-desktop-files yast2 
yast2-testsuite yast2-perl-bindings
 BuildRequires:  yast2-devtools >= 3.0.6
+BuildRequires:  rubygem-rspec
 
 # requires DnsServerAPI::GetReverseIPforIPv6
 BuildRequires:  yast2 >= 2.17.8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-dns-server-3.1.2/src/include/dns-server/dialog-main.rb 
new/yast2-dns-server-3.1.3/src/include/dns-server/dialog-main.rb
--- old/yast2-dns-server-3.1.2/src/include/dns-server/dialog-main.rb    
2013-11-26 16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/src/include/dns-server/dialog-main.rb    
2013-11-28 11:08:49.000000000 +0100
@@ -743,28 +743,41 @@
       dialog = VBox(
         # label
         VBox(
-          # `RadioButtonGroup( `id ( "who_sets_forwarder" ),
-          #     `VBox (
-          #    // Radiobutton DNS-Forwarders
-          #    `Left( `RadioButton( `id ( "ppp_forwarder" ), _("&PPP Daemon 
Sets Forwarders") ) ),
-          #    // Radiobutton DNS-Forwarders
-          #    `Left( `RadioButton( `id ( "manually_forwarder" ), _("Set 
Forwarders &Manually"), true ) )
-          #     )
-          # )
           HBox(
             ComboBox(
               Id("forwarder_policy"),
               Opt(:notify),
-              _("Netconfig DNS policy"),
+              # T: ComboBox label
+              _("Local DNS Resolution &Policy"),
               [
-                Item(Id(:nomodify), "disable"),
-                Item(Id(:auto), "auto"),
-                Item(Id(:static), "static"),
-                Item(Id(:custom), "custom")
+                # T: ComboBox item
+                Item(Id(:nomodify), _("Merging forwarders is disabled")),
+                # T: ComboBox item
+                Item(Id(:auto),     _("Automatic merging")),
+                # T: ComboBox item
+                Item(Id(:static),   _("Merging forwarders is enabled")),
+                # T: ComboBox item
+                Item(Id(:custom),   _("Custom configuration"))
               ]
             ),
             HSpacing(1),
             InputField(Id("custom_policy"), Opt(:hstretch), _("Custom policy"))
+          ),
+          VSpacing(1),
+          Left(
+            ComboBox(
+              Id("forwarder"),
+              # T: ComboBox label
+              _("Local DNS Resolution &Forwarder"),
+              [
+                # T: ComboBox item
+                Item(Id(:resolver), _("Using system name servers")),
+                # T: ComboBox item
+                Item(Id(:bind),     _("This name server (bind)")),
+                # T: ComboBox item
+                Item(Id(:dnsmasq),  _("Local dnsmasq server")),
+              ]
+            )
           )
         ),
         VSpacing(1),
@@ -900,44 +913,55 @@
     end
 
     def handlePolicy(policy)
-      if :nomodify == policy
+      if policy == :nomodify
         UI.ChangeWidget(Id("custom_policy"), :Enabled, false)
         UI.ChangeWidget(Id("custom_policy"), :Value, "")
         UI.ChangeWidget(Id("forwarders_new_ip_address"), :Enabled, false)
         UI.ChangeWidget(Id("forwarders_add_ip_address"), :Enabled, false)
+        UI.ChangeWidget(Id("forwarder"), :Enabled, false)
       else
-        if :custom == policy
-          UI.ChangeWidget(Id("custom_policy"), :Enabled, true)
+        if policy == :custom
           # preinitialize with STATIC
           UI.ChangeWidget(Id("custom_policy"), :Value, "STATIC")
+          UI.ChangeWidget(Id("custom_policy"), :Enabled, true)
         else
-          if :static == policy
+          if policy == :static
             UI.ChangeWidget(Id("custom_policy"), :Value, "STATIC")
-          elsif :auto == policy
+          elsif policy == :auto
             UI.ChangeWidget(Id("custom_policy"), :Value, "auto")
           end
           UI.ChangeWidget(Id("custom_policy"), :Enabled, false)
         end
+
         UI.ChangeWidget(Id("forwarders_new_ip_address"), :Enabled, true)
         UI.ChangeWidget(Id("forwarders_add_ip_address"), :Enabled, true)
+        UI.ChangeWidget(Id("forwarder"), :Enabled, true)
       end
 
       nil
     end
+
+    def initialize_local_forwarder
+      local_forwarder = DnsServer.GetLocalForwarder
+
+      if local_forwarder != DnsServerUIClass::PREFERRED_LOCAL_FORWARDER && 
DnsServer.first_run
+        Builtins.y2milestone(
+          "Current local forwarder: #{local_forwarder}, proposing new: 
#{DnsServerUIClass::PREFERRED_LOCAL_FORWARDER}"
+        )
+        local_forwarder = DnsServerUIClass::PREFERRED_LOCAL_FORWARDER
+      end
+
+      UI.ChangeWidget(Id("forwarder"), :Value, local_forwarder.to_sym)
+    end
+
     # Initialize the tab of the dialog
     def InitExpertForwardersPage(key)
       SetDNSSErverIcon()
-      # if (DnsServer::GetModifyNamedConfDynamically ())
-      # {
-      #        UI::ChangeWidget (`id ("who_sets_forwarder"), `CurrentButton, 
"ppp_forwarder");
-      # }
-      # else
-      # {
-      #        UI::ChangeWidget (`id ("who_sets_forwarder"), `CurrentButton, 
"manually_forwarder");
-      # }
+
       UI.ChangeWidget(Id("custom_policy"), :Enabled, false)
       policy = DnsServer.GetNetconfigDNSPolicy
       policy_symb = :Empty
+
       if policy == nil || policy == ""
         policy_symb = :nomodify
       elsif policy == "auto" || policy == "STATIC *"
@@ -947,8 +971,10 @@
       else
         policy_symb = :custom
       end
+
       UI.ChangeWidget(Id("forwarder_policy"), :Value, policy_symb)
       handlePolicy(policy_symb)
+      initialize_local_forwarder
       ReadForwarders()
       RedrawForwardersListWidget()
       ValidCharsForwardersPage()
@@ -959,28 +985,20 @@
     # Store settings of a tab of a dialog
     def StoreExpertForwardersPage(key, event)
       event = deep_copy(event)
-      #     if (UI::QueryWidget (`id ("who_sets_forwarder"), `CurrentButton)
-      #        == "ppp_forwarder")
-      #     {
-      #        DnsServer::SetModifyNamedConfDynamically (true);
-      #        DnsServer::SetModifyResolvConfDynamically (false);
-      #     }
-      #     else
-      #     {
-      #        DnsServer::SetModifyNamedConfDynamically (false);
-      #        DnsServer::SetModifyResolvConfDynamically (true);
-      #     }
+
       policy = Convert.to_symbol(UI.QueryWidget(Id("forwarder_policy"), 
:Value))
-      if :custom == policy
-        DnsServer.SetNetconfigDNSPolicy(
-          Convert.to_string(UI.QueryWidget(Id("custom_policy"), :Value))
-        )
-      elsif :auto == policy
-        DnsServer.SetNetconfigDNSPolicy("auto")
-      elsif :static == policy
-        DnsServer.SetNetconfigDNSPolicy("STATIC")
-      else
-        DnsServer.SetNetconfigDNSPolicy("")
+      new_dns_policy = case policy
+        when :custom   then UI.QueryWidget(Id("custom_policy"), :Value)
+        when :auto     then "auto"
+        when :static   then "static"
+        when :nomodify then ""
+        else raise ArgumentError.new("Unknown forwarder_policy '#{policy}'")
+      end
+      DnsServer.SetNetconfigDNSPolicy(new_dns_policy)
+
+      forwarder = (UI.QueryWidget(Id("forwarder"), :Value)).to_s
+      if ! DnsServer.SetLocalForwarder(forwarder)
+        Report.Error(_("Cannot set local forwarder to %{forwarder}") % { 
'forwarder' => forwarder })
       end
 
       options = DnsServer.GetGlobalOptions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-dns-server-3.1.2/src/include/dns-server/wizards.rb 
new/yast2-dns-server-3.1.3/src/include/dns-server/wizards.rb
--- old/yast2-dns-server-3.1.2/src/include/dns-server/wizards.rb        
2013-11-26 16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/src/include/dns-server/wizards.rb        
2013-11-28 11:08:49.000000000 +0100
@@ -122,13 +122,7 @@
       Wizard.CreateDialog
       SetDNSSErverIcon()
 
-      if {} ==
-          SCR.Read(
-            path(".target.stat"),
-            Ops.add(Directory.vardir, "/dns_server")
-          )
-        Ops.set(sequence, ["read", :next], "wizard")
-      end
+      sequence["read"][:next] = "wizard" if DnsServer.first_run
 
       ret = Sequencer.Run(aliases, sequence)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-dns-server-3.1.2/src/modules/DnsData.pm 
new/yast2-dns-server-3.1.3/src/modules/DnsData.pm
--- old/yast2-dns-server-3.1.2/src/modules/DnsData.pm   2013-11-26 
16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/src/modules/DnsData.pm   2013-11-28 
11:08:49.000000000 +0100
@@ -21,7 +21,8 @@
 @zones @options @logging $ddns_file_name
 $modified $save_all @files_to_delete %current_zone $current_zone_index
 $adapt_firewall %firewall_settings $write_only @new_includes @deleted_includes
-@zones_update_actions $firewall_support @new_includes_tsig 
@deleted_includes_tsig);
+@zones_update_actions $firewall_support @new_includes_tsig 
@deleted_includes_tsig
+$local_forwarder);
 
 # persistent variables
 
@@ -71,6 +72,8 @@
 
 my @deleted_includes_tsig = ();
 
+my $local_forwarder = "";
+
 1;
 
 # EOF
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-dns-server-3.1.2/src/modules/DnsServer.pm 
new/yast2-dns-server-3.1.3/src/modules/DnsServer.pm
--- old/yast2-dns-server-3.1.2/src/modules/DnsServer.pm 2013-11-26 
16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/src/modules/DnsServer.pm 2013-11-28 
11:08:49.000000000 +0100
@@ -44,7 +44,8 @@
 @zones @options @logging $ddns_file_name
 $modified $save_all @files_to_delete %current_zone $current_zone_index
 $write_only @new_includes @deleted_includes
-@zones_update_actions $firewall_support @new_includes_tsig 
@deleted_includes_tsig);
+@zones_update_actions $firewall_support @new_includes_tsig 
@deleted_includes_tsig
+$local_forwarder);
 use DnsRoutines;
 
 my $reverse_zones_connections = 'yast2-dns-server_reverse-zones';
@@ -53,6 +54,8 @@
 
 my $forwarders_include = '/etc/named.d/forwarders.conf';
 
+my $data_file = Directory->vardir."/dns_server";
+
 # include of forwarders
 my $include_defined_in_conf = 0;
 
@@ -836,20 +839,6 @@
     return 0;
 }
 
-#BEGIN{$TYPEINFO{GetModifyNamedConfDynamically} = ["function","boolean"];}
-#sub GetModifyNamedConfDynamically {
-#    my $self = shift;
-#
-#    return $modify_named_conf_dynamically;
-#}
-
-#BEGIN{$TYPEINFO{SetModifyNamedConfDynamically} = 
["function","void","boolean"];}
-#sub SetModifyNamedConfDynamically {
-#    my $self = shift;
-#    $modify_named_conf_dynamically = shift;
-#    $self->SetModified ();
-#}
-
 BEGIN{$TYPEINFO{GetNetconfigDNSPolicy} = ["function","string"];}
 sub GetNetconfigDNSPolicy{
     my $self = shift;
@@ -860,23 +849,34 @@
 BEGIN{$TYPEINFO{SetNetconfigDNSPolicy} = ["function","void","string"];}
 sub SetNetconfigDNSPolicy{
     my $self = shift;
-    $netconfig_dns_policy= shift;
+    $netconfig_dns_policy = shift;
     $self->SetModified ();
 }
 
-#BEGIN{$TYPEINFO{GetModifyResolvConfDynamically} = ["function","boolean"];}
-#sub GetModifyResolvConfDynamically {
-#    my $self = shift;
-#
-#    return $modify_resolv_conf_dynamically;
-#}
-#
-#BEGIN{$TYPEINFO{SetModifyResolvConfDynamically} = 
["function","void","boolean"];}
-#sub SetModifyResolvConfDynamically {
-#    my $self = shift;
-#    $modify_resolv_conf_dynamically = shift;
-#    $self->SetModified ();
-#}
+BEGIN{$TYPEINFO{GetLocalForwarder} = ["function","string"];}
+sub GetLocalForwarder {
+    my $self = shift;
+
+    return "resolver" if (not defined $local_forwarder or $local_forwarder eq 
"");
+    return $local_forwarder;
+}
+
+BEGIN{$TYPEINFO{SetLocalForwarder} = ["function","boolean","string"];}
+sub SetLocalForwarder {
+    my $self = shift;
+    my $new_local_forwarder = shift;
+
+    if (not defined $new_local_forwarder) {
+        y2error("New local forwarder must be defined");
+        return 0;
+    } elsif (not defined $local_forwarder or $local_forwarder ne 
$new_local_forwarder) {
+        $local_forwarder = $new_local_forwarder;
+        y2milestone("New local forwarder: ".$local_forwarder);
+        $self->SetModified();
+    }
+
+    return 1;
+}
 
 BEGIN{$TYPEINFO{GetAcl} = ["function",["list","string"]];}
 sub GetAcl {
@@ -1009,21 +1009,12 @@
            : 0;
     y2milestone ("Chroot: $chroot");
 
-#    $modify_named_conf_dynamically = SCR->Read (
-#      ".sysconfig.network.config.MODIFY_NAMED_CONF_DYNAMICALLY") || "no";
-#    $modify_named_conf_dynamically = $modify_named_conf_dynamically eq "yes"
-#          ? 1
-#          : 0;
-#
-#    $modify_resolv_conf_dynamically = SCR->Read (
-#      ".sysconfig.network.config.MODIFY_RESOLV_CONF_DYNAMICALLY") || "no";
-#    $modify_resolv_conf_dynamically = $modify_resolv_conf_dynamically eq "yes"
-#          ? 1
-#          : 0;
-
     $netconfig_dns_policy = 
SCR->Read(".sysconfig.network.config.NETCONFIG_DNS_POLICY") || "";
     y2milestone ("NETCONFIG_DNS_POLICY: $netconfig_dns_policy");
-    
+
+    $local_forwarder = 
SCR->Read(".sysconfig.network.config.NETCONFIG_DNS_FORWARDER") || "resolver";
+    y2milestone ("NETCONFIG_DNS_FORWARDER: $local_forwarder");
+
     my @zone_headers = @{SCR->Dir (".dns.named.section") || []};
     @zone_headers = grep (/^zone/, @zone_headers);
     y2milestone ("Read zone headers @zone_headers");
@@ -1227,6 +1218,51 @@
     return \@ret;
 }
 
+# Writes forwarding settings and updates the system using netconfig.
+# This also automatically updates /etc/named.d/forwarders.conf
+sub write_local_forwarder {
+    my $self = shift;
+
+    y2milestone("Current dns forwarder: ".GetLocalForwarder());
+    SCR->Write (".sysconfig.network.config.NETCONFIG_DNS_FORWARDER", 
GetLocalForwarder());
+    SCR->Write (".sysconfig.network.config", undef);
+
+    y2milestone("Updating forwarders by netconfig");
+    my $ret = SCR->Execute (".target.bash_output", "/sbin/netconfig update -m 
dns");
+    if ($ret->{'exit'} != 0) {
+        Report->Error (__("Error occurred while calling netconfig.\nError: 
".$ret->{'stdout'}));
+    }
+}
+
+sub update_forwarding {
+    # Netconfig updates /etc/named.d/forwarders.conf only if 'bind' is selected
+    # as resolver. Manual writing of forwarders.conf is otherwise requested to 
be
+    # done by Yast.
+    #
+    # Cheating netconfig by using local 'bind' as resolver temporarily to 
generate
+    # correct /etc/named.d/forwarders.conf and then returning back to 
user-defined
+    # resolver.
+    #
+    # This behavior including requested manual changes is described in 
FATE#309036
+
+    my $self = shift;
+    my $current_forwarder = $self->GetLocalForwarder();
+
+    if ($current_forwarder ne 'bind') {
+        y2milestone(
+            "User-defined forwarder: ".$current_forwarder.", using 'bind' for 
a while to update forwarders.conf"
+        );
+        $self->SetLocalForwarder('bind');
+
+        $self->write_local_forwarder();
+
+        y2milestone("Returning back to user-defined forwarder: 
".$current_forwarder);
+        $self->SetLocalForwarder($current_forwarder);
+    }
+
+    $self->write_local_forwarder();
+}
+
 BEGIN { $TYPEINFO{Write} = ["function", "boolean"]; }
 sub Write {
     my $self = shift;
@@ -1409,24 +1445,12 @@
 
     Progress->NextStage ();
 
-    # set and write forwarding
-    my $forwarder = "bind";
     $ret = {};
 
-    y2milestone("Setting dns forwarder: $forwarder");
-    SCR->Write 
(".sysconfig.network.config.NETCONFIG_DNS_FORWARDER",$forwarder);
-    SCR->Write (".sysconfig.network.config", undef);
+    my $user_defined_forwarder = GetLocalForwarder();
 
-    # update forwarders.conf
-    y2milestone("Calling netconfig");
-    $ret->{'exit'} = 0;
-    $ret = SCR->Execute (".target.bash_output", "/sbin/netconfig update -m 
dns");
-    if ($ret->{'exit'} != 0)
-    {
-       Report->Error (__("Error occurred while calling netconfig.\nError: 
".$ret->{'stdout'}));
-    }
-
-    my $last_forwarder = $forwarder;
+    # Write forwarding settings before starting 'named'
+    $self->update_forwarding();
 
     $ret = {};
     # named has to be started
@@ -1443,8 +1467,6 @@
                y2milestone("Restarting service 'named'");
                $success = Service->Restart("named")
            }
-           # 'named' is running. Set dns forwarder to 'bind'.
-           $forwarder = "bind";
        }
        Service->Enable ("named");
        if (! $success)
@@ -1452,8 +1474,9 @@
            # Cannot start service 'named', because of error that follows 
Error:.  Do not translate named.
            Report->Error (__("Error occurred while starting service 
named.\n\n".Service->FullInfo("named")));
            $ok = 0;
-           # There's no 'named' running. Reset dns forwarder again
-           $forwarder = "resolver";
+           # There's no 'named' running -> prevent from blocking DNS queries
+           $self->SetLocalForwarder("resolver") if GetLocalForwarder() eq 
"bind";
+           y2warning("Local forwarder set to: ".GetLocalForwarder());
        }
     }
     # named has to be stopped
@@ -1464,33 +1487,25 @@
            y2milestone("Stopping service 'named'");
            Service->Stop("named");
            # There's no 'named' running. Reset dns forwarder again
-           $forwarder = "resolver";
+           $self->SetLocalForwarder("resolver") if GetLocalForwarder() eq 
"bind";
+           y2warning("Local forwarder set to: ".GetLocalForwarder());
        }
        Service->Disable ("named");
     }
 
-    if ($ok)
+    # First run finished
+    if ($ok and first_run())
     {
-       # FIXME when YaST settings are needed
-       SCR->Write (".target.ycp", Directory->vardir() . "/dns_server", {});
+       SCR->Write (".target.string", $data_file, "");
     }
     
     Progress->NextStage ();
 
-    # if $forwarder has changed
-    if ($last_forwarder ne $forwarder) {
-       y2milestone ("NETCONFIG_DNS_FORWARDER has been changed from 
".$last_forwarder." to ".$forwarder);
-
-       y2milestone("Setting dns forwarder: $forwarder");
-       SCR->Write 
(".sysconfig.network.config.NETCONFIG_DNS_FORWARDER",$forwarder);
-       SCR->Write (".sysconfig.network.config", undef);
-
-       y2milestone("Calling netconfig");
-       $ret->{'exit'} = 0;
-       $ret = SCR->Execute (".target.bash_output", "/sbin/netconfig update -m 
dns");
-       if ($ret->{'exit'} != 0) {
-           Report->Error (__("Error occurred while calling netconfig.\nError: 
".$ret->{'stdout'}));
-       }
+    # local forwarder has been changed because 'named' was unable to start
+    # or it was disabled by user
+    if ($user_defined_forwarder ne GetLocalForwarder()) {
+        y2milestone ("NETCONFIG_DNS_FORWARDER has been changed from 
".$user_defined_forwarder." to ".GetLocalForwarder());
+        $self->write_local_forwarder();
     }
 
     Progress->NextStage ();
@@ -2089,6 +2104,11 @@
     return $expert_ui;
 }
 
+BEGIN { $TYPEINFO{first_run} = ["function", "boolean"]; };
+sub first_run () {
+    return ! FileUtils->Exists($data_file);
+}
+
 1;
 
 # EOF
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-dns-server-3.1.2/src/modules/DnsServerUI.rb 
new/yast2-dns-server-3.1.3/src/modules/DnsServerUI.rb
--- old/yast2-dns-server-3.1.2/src/modules/DnsServerUI.rb       2013-11-26 
16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/src/modules/DnsServerUI.rb       2013-11-28 
11:08:49.000000000 +0100
@@ -13,6 +13,9 @@
 
 module Yast
   class DnsServerUIClass < Module
+
+    PREFERRED_LOCAL_FORWARDER = "bind"
+
     def main
       Yast.import "UI"
       textdomain "dns-server"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-dns-server-3.1.2/test/Makefile.am 
new/yast2-dns-server-3.1.3/test/Makefile.am
--- old/yast2-dns-server-3.1.2/test/Makefile.am 1970-01-01 01:00:00.000000000 
+0100
+++ new/yast2-dns-server-3.1.3/test/Makefile.am 2013-11-28 11:08:49.000000000 
+0100
@@ -0,0 +1,7 @@
+TESTS = \
+  dns_server_test.rb
+
+TEST_EXTENSIONS = .rb
+RB_LOG_COMPILER = rspec
+VERBOSE = 1
+EXTRA_DIST = $(TESTS)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-dns-server-3.1.2/test/dns_server_test.rb 
new/yast2-dns-server-3.1.3/test/dns_server_test.rb
--- old/yast2-dns-server-3.1.2/test/dns_server_test.rb  1970-01-01 
01:00:00.000000000 +0100
+++ new/yast2-dns-server-3.1.3/test/dns_server_test.rb  2013-11-28 
11:08:49.000000000 +0100
@@ -0,0 +1,39 @@
+#! /usr/bin/env rspec
+
+ENV["Y2DIR"] = File.expand_path("../../src", __FILE__)
+
+require "yast"
+
+Yast.import "DnsServer"
+
+describe "#GetLocalForwarder" do
+
+  it "returns default forwarder if it's not initalized" do
+    expect(Yast::DnsServer.GetLocalForwarder).to eq "resolver"
+  end
+
+  it "returns default forwarder if it's reset to default (blank entry)" do
+    Yast::DnsServer.SetLocalForwarder("")
+    expect(Yast::DnsServer.GetLocalForwarder).to eq "resolver"
+  end
+
+  it "returns given forwarder if it's previously set" do
+    new_forwarder = "whichever-forwarder"
+    Yast::DnsServer.SetLocalForwarder(new_forwarder)
+    expect(Yast::DnsServer.GetLocalForwarder).to eq new_forwarder
+  end
+
+end
+
+describe "#SetLocalForwarder" do
+
+  it "does not set new forwarder if the forwarder is undefined" do
+    expect(Yast::DnsServer.SetLocalForwarder(nil)).to be_false
+  end
+
+  it "sets new local forwarder if it's defined" do
+    expect(Yast::DnsServer.SetLocalForwarder("")).to be_true
+    expect(Yast::DnsServer.SetLocalForwarder("new_forwarder")).to be_true
+  end
+
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-dns-server-3.1.2/testsuite/tests/DnsServerAPI.out 
new/yast2-dns-server-3.1.3/testsuite/tests/DnsServerAPI.out
--- old/yast2-dns-server-3.1.2/testsuite/tests/DnsServerAPI.out 2013-11-26 
16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/testsuite/tests/DnsServerAPI.out 2013-11-28 
11:08:49.000000000 +0100
@@ -11,6 +11,7 @@
 Execute        .target.bash_output "stat --format='rights: %a, blocks: %b, 
size: %s, owner: %u:%g changed: %Z, modifyied: %Y' /etc/named.conf" $["exit":1, 
"stderr":"", "stdout":""]
 Read   .sysconfig.named.NAMED_RUN_CHROOTED nil
 Read   .sysconfig.network.config.NETCONFIG_DNS_POLICY "auto"
+Read   .sysconfig.network.config.NETCONFIG_DNS_FORWARDER "resolver"
 Dir    .dns.named.section: ["options", "zone \"localhost\" in"]
 Dir    .dns.named.value.options: ["directory", "notify"]
 Read   .dns.named.value.options.directory ["\"/var/lib/named\""]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-dns-server-3.1.2/testsuite/tests/DnsServerAPI.rb 
new/yast2-dns-server-3.1.3/testsuite/tests/DnsServerAPI.rb
--- old/yast2-dns-server-3.1.2/testsuite/tests/DnsServerAPI.rb  2013-11-26 
16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/testsuite/tests/DnsServerAPI.rb  2013-11-28 
11:08:49.000000000 +0100
@@ -116,7 +116,8 @@
               "MODIFY_NAMED_CONF_DYNAMICALLY"  => "yes",
               "MODIFY_RESOLV_CONF_DYNAMICALLY" => "yes",
               "NETCONFIG_DNS_POLICY"           => "auto",
-              "NETCONFIG_DNS_STATIC_SERVERS"   => "1.2.3.4"
+              "NETCONFIG_DNS_STATIC_SERVERS"   => "1.2.3.4",
+              "NETCONFIG_DNS_FORWARDER"        => "resolver",
             }
           }
         },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-dns-server-3.1.2/testsuite/tests/Read.out 
new/yast2-dns-server-3.1.3/testsuite/tests/Read.out
--- old/yast2-dns-server-3.1.2/testsuite/tests/Read.out 2013-11-26 
16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/testsuite/tests/Read.out 2013-11-28 
11:08:49.000000000 +0100
@@ -3,6 +3,7 @@
 Execute        .target.bash_output "stat --format='rights: %a, blocks: %b, 
size: %s, owner: %u:%g changed: %Z, modifyied: %Y' /etc/named.conf" $["exit":1, 
"stderr":"", "stdout":""]
 Read   .sysconfig.named.NAMED_RUN_CHROOTED 0
 Read   .sysconfig.network.config.NETCONFIG_DNS_POLICY "STATIC"
+Read   .sysconfig.network.config.NETCONFIG_DNS_FORWARDER 0
 Dir    .dns.named.section: ["options", "zone \"localhost\" in"]
 Dir    .dns.named.value.options: ["directory", "notify"]
 Read   .dns.named.value.options.directory ["\"/var/lib/named\""]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-dns-server-3.1.2/testsuite/tests/Read.rb 
new/yast2-dns-server-3.1.3/testsuite/tests/Read.rb
--- old/yast2-dns-server-3.1.2/testsuite/tests/Read.rb  2013-11-26 
16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/testsuite/tests/Read.rb  2013-11-28 
11:08:49.000000000 +0100
@@ -75,7 +75,8 @@
             "FW_ALLOW_FW_BROADCAST"    => ""
           },
           "personal-firewall" => { "REJECT_ALL_INCOMING_CONNECTIONS" => "" },
-          "displaymanager"    => { "DISPLAYMANAGER" => "" }
+          "displaymanager"    => { "DISPLAYMANAGER" => "" },
+          "network"           => { "NETCONFIG_DNS_FORWARDER"  => "resolver" },
         },
         "target"    => {
           "stat"  => {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-dns-server-3.1.2/testsuite/tests/Write.out 
new/yast2-dns-server-3.1.3/testsuite/tests/Write.out
--- old/yast2-dns-server-3.1.2/testsuite/tests/Write.out        2013-11-26 
16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/testsuite/tests/Write.out        2013-11-28 
11:08:49.000000000 +0100
@@ -38,7 +38,6 @@
 Write  .sysconfig.network.config.NETCONFIG_DNS_FORWARDER "bind" true
 Write  .sysconfig.network.config nil true
 Execute        .target.bash_output "/sbin/netconfig update -m dns" $["exit":0, 
"stdout":"20030806"]
-Write  .target.ycp "/var/lib/YaST2/dns_server" $[] true
 Write  .sysconfig.network.config.NETCONFIG_DNS_FORWARDER "resolver" true
 Write  .sysconfig.network.config nil true
 Execute        .target.bash_output "/sbin/netconfig update -m dns" $["exit":0, 
"stdout":"20030806"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-dns-server-3.1.2/testsuite/tests/Write.rb 
new/yast2-dns-server-3.1.3/testsuite/tests/Write.rb
--- old/yast2-dns-server-3.1.2/testsuite/tests/Write.rb 2013-11-26 
16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/testsuite/tests/Write.rb 2013-11-28 
11:08:49.000000000 +0100
@@ -70,7 +70,10 @@
           "language"          => {
             "RC_LANG"        => "en_US.UTF-8",
             "ROOT_USES_LANG" => "ctype"
-          }
+          },
+          "network" => {
+            "NETCONFIG_DNS_FORWARDER"  => "resolver",
+          },
         },
         "target"    => {
           "yast2" => { "lang2iso.ycp" => {} },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-dns-server-3.1.2/testsuite/tests/YaPIReadGlobalOptions.out 
new/yast2-dns-server-3.1.3/testsuite/tests/YaPIReadGlobalOptions.out
--- old/yast2-dns-server-3.1.2/testsuite/tests/YaPIReadGlobalOptions.out        
2013-11-26 16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/testsuite/tests/YaPIReadGlobalOptions.out        
2013-11-28 11:08:49.000000000 +0100
@@ -3,6 +3,7 @@
 Execute        .target.bash_output "stat --format='rights: %a, blocks: %b, 
size: %s, owner: %u:%g changed: %Z, modifyied: %Y' /etc/named.conf" $["exit":1, 
"stderr":"", "stdout":""]
 Read   .sysconfig.named.NAMED_RUN_CHROOTED nil
 Read   .sysconfig.network.config.NETCONFIG_DNS_POLICY "STATIC"
+Read   .sysconfig.network.config.NETCONFIG_DNS_FORWARDER "resolver"
 Dir    .dns.named.section: ["options", "zone \"localhost\" in"]
 Dir    .dns.named.value.options: ["directory", "notify"]
 Read   .dns.named.value.options.directory ["\"/var/lib/named\""]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-dns-server-3.1.2/testsuite/tests/YaPIReadGlobalOptions.rb 
new/yast2-dns-server-3.1.3/testsuite/tests/YaPIReadGlobalOptions.rb
--- old/yast2-dns-server-3.1.2/testsuite/tests/YaPIReadGlobalOptions.rb 
2013-11-26 16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/testsuite/tests/YaPIReadGlobalOptions.rb 
2013-11-28 11:08:49.000000000 +0100
@@ -232,7 +232,8 @@
               "MODIFY_NAMED_CONF_DYNAMICALLY"  => "yes",
               "MODIFY_RESOLV_CONF_DYNAMICALLY" => "yes",
               "NETCONFIG_DNS_POLICY"           => "STATIC",
-              "NETCONFIG_DNS_STATIC_SERVERS"   => "1.2.3.4 5.6.7.8 9.10.11.12"
+              "NETCONFIG_DNS_STATIC_SERVERS"   => "1.2.3.4 5.6.7.8 9.10.11.12",
+              "NETCONFIG_DNS_FORWARDER"        => "resolver",
             }
           }
         },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-dns-server-3.1.2/testsuite/tests/YaPIReadZones.out 
new/yast2-dns-server-3.1.3/testsuite/tests/YaPIReadZones.out
--- old/yast2-dns-server-3.1.2/testsuite/tests/YaPIReadZones.out        
2013-11-26 16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/testsuite/tests/YaPIReadZones.out        
2013-11-28 11:08:49.000000000 +0100
@@ -3,6 +3,7 @@
 Execute        .target.bash_output "stat --format='rights: %a, blocks: %b, 
size: %s, owner: %u:%g changed: %Z, modifyied: %Y' /etc/named.conf" $["exit":1, 
"stderr":"", "stdout":""]
 Read   .sysconfig.named.NAMED_RUN_CHROOTED nil
 Read   .sysconfig.network.config.NETCONFIG_DNS_POLICY "auto"
+Read   .sysconfig.network.config.NETCONFIG_DNS_FORWARDER "resolver"
 Dir    .dns.named.section: ["options", "zone \"localhost\" in"]
 Dir    .dns.named.value.options: ["directory", "notify"]
 Read   .dns.named.value.options.directory ["\"/var/lib/named\""]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-dns-server-3.1.2/testsuite/tests/YaPIReadZones.rb 
new/yast2-dns-server-3.1.3/testsuite/tests/YaPIReadZones.rb
--- old/yast2-dns-server-3.1.2/testsuite/tests/YaPIReadZones.rb 2013-11-26 
16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/testsuite/tests/YaPIReadZones.rb 2013-11-28 
11:08:49.000000000 +0100
@@ -231,7 +231,8 @@
               "MODIFY_NAMED_CONF_DYNAMICALLY"  => "yes",
               "MODIFY_RESOLV_CONF_DYNAMICALLY" => "yes",
               "NETCONFIG_DNS_POLICY"           => "auto",
-              "NETCONFIG_DNS_STATIC_SERVERS"   => ""
+              "NETCONFIG_DNS_STATIC_SERVERS"   => "",
+              "NETCONFIG_DNS_FORWARDER"        => "resolver",
             }
           }
         },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-dns-server-3.1.2/testsuite/tests/YaPIWriteGlobalOptions.out 
new/yast2-dns-server-3.1.3/testsuite/tests/YaPIWriteGlobalOptions.out
--- old/yast2-dns-server-3.1.2/testsuite/tests/YaPIWriteGlobalOptions.out       
2013-11-26 16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/testsuite/tests/YaPIWriteGlobalOptions.out       
2013-11-28 11:08:49.000000000 +0100
@@ -3,6 +3,7 @@
 Execute        .target.bash_output "stat --format='rights: %a, blocks: %b, 
size: %s, owner: %u:%g changed: %Z, modifyied: %Y' /etc/named.conf" $["exit":1, 
"stderr":"", "stdout":""]
 Read   .sysconfig.named.NAMED_RUN_CHROOTED nil
 Read   .sysconfig.network.config.NETCONFIG_DNS_POLICY "auto"
+Read   .sysconfig.network.config.NETCONFIG_DNS_FORWARDER "resolver"
 Dir    .dns.named.section: ["options", "zone \"localhost\" in"]
 Dir    .dns.named.value.options: ["directory", "notify"]
 Read   .dns.named.value.options.directory ["\"/var/lib/named\""]
@@ -48,7 +49,6 @@
 Write  .sysconfig.network.config.NETCONFIG_DNS_FORWARDER "bind" true
 Write  .sysconfig.network.config nil true
 Execute        .target.bash_output "/sbin/netconfig update -m dns" $["exit":1, 
"stderr":"", "stdout":""]
-Write  .target.ycp "/var/lib/YaST2/dns_server" $[] true
 Write  .sysconfig.network.config.NETCONFIG_DNS_FORWARDER "resolver" true
 Write  .sysconfig.network.config nil true
 Execute        .target.bash_output "/sbin/netconfig update -m dns" $["exit":1, 
"stderr":"", "stdout":""]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-dns-server-3.1.2/testsuite/tests/YaPIWriteGlobalOptions.rb 
new/yast2-dns-server-3.1.3/testsuite/tests/YaPIWriteGlobalOptions.rb
--- old/yast2-dns-server-3.1.2/testsuite/tests/YaPIWriteGlobalOptions.rb        
2013-11-26 16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/testsuite/tests/YaPIWriteGlobalOptions.rb        
2013-11-28 11:08:49.000000000 +0100
@@ -203,7 +203,8 @@
               "MODIFY_NAMED_CONF_DYNAMICALLY"  => "yes",
               "MODIFY_RESOLV_CONF_DYNAMICALLY" => "yes",
               "NETCONFIG_DNS_POLICY"           => "auto",
-              "NETCONFIG_DNS_STATIC_SERVERS"   => ""
+              "NETCONFIG_DNS_STATIC_SERVERS"   => "",
+              "NETCONFIG_DNS_FORWARDER"        => "resolver",
             }
           },
           "console"           => { "CONSOLE_ENCODING" => "utf8" },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-dns-server-3.1.2/testsuite/tests/YaPIWriteZones.out 
new/yast2-dns-server-3.1.3/testsuite/tests/YaPIWriteZones.out
--- old/yast2-dns-server-3.1.2/testsuite/tests/YaPIWriteZones.out       
2013-11-26 16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/testsuite/tests/YaPIWriteZones.out       
2013-11-28 11:08:49.000000000 +0100
@@ -3,6 +3,7 @@
 Execute        .target.bash_output "stat --format='rights: %a, blocks: %b, 
size: %s, owner: %u:%g changed: %Z, modifyied: %Y' /etc/named.conf" $["exit":1, 
"stderr":"", "stdout":""]
 Read   .sysconfig.named.NAMED_RUN_CHROOTED nil
 Read   .sysconfig.network.config.NETCONFIG_DNS_POLICY "STATIC"
+Read   .sysconfig.network.config.NETCONFIG_DNS_FORWARDER nil
 Dir    .dns.named.section: ["options", "zone \"localhost\" in"]
 Dir    .dns.named.value.options: ["directory", "notify"]
 Read   .dns.named.value.options.directory ["\"/var/lib/named\""]
@@ -54,7 +55,6 @@
 Write  .sysconfig.network.config.NETCONFIG_DNS_FORWARDER "bind" true
 Write  .sysconfig.network.config nil true
 Execute        .target.bash_output "/sbin/netconfig update -m dns" $["exit":1, 
"stderr":"", "stdout":""]
-Write  .target.ycp "/var/lib/YaST2/dns_server" $[] true
 Write  .sysconfig.network.config.NETCONFIG_DNS_FORWARDER "resolver" true
 Write  .sysconfig.network.config nil true
 Execute        .target.bash_output "/sbin/netconfig update -m dns" $["exit":1, 
"stderr":"", "stdout":""]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-dns-server-3.1.2/testsuite/tests/YaPIWriteZones.rb 
new/yast2-dns-server-3.1.3/testsuite/tests/YaPIWriteZones.rb
--- old/yast2-dns-server-3.1.2/testsuite/tests/YaPIWriteZones.rb        
2013-11-26 16:22:48.000000000 +0100
+++ new/yast2-dns-server-3.1.3/testsuite/tests/YaPIWriteZones.rb        
2013-11-28 11:08:49.000000000 +0100
@@ -70,7 +70,8 @@
           "language"          => {
             "RC_LANG"        => "en_US.UTF-8",
             "ROOT_USES_LANG" => "ctype"
-          }
+          },
+          "network"           => { "NETCONFIG_DNS_FORWARDER" => "resolver" },
         },
         "target"    => {
           "stat"  => {

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to