From 0a1e1a2b4b8872be3424f7c3d3dc6e12f3815245 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Thu, 4 Aug 2016 12:48:37 +0100 Subject: [PATCH 1/2] Make service evaluation lazy The code to install the missing package exists, but if we call these in the initialization method of an include file, SystemdService will return nil and ServiceStatus will raise, before the user has had a chance to install the missing package. service = SystemdService.find("named") status_widget = ::UI::ServiceStatus.new(service) --- src/include/dns-server/dialog-main.rb | 754 +++++++++++++------------- 1 file changed, 387 insertions(+), 367 deletions(-) diff --git a/src/include/dns-server/dialog-main.rb b/src/include/dns-server/dialog-main.rb index 988216c..8d9a4db 100644 --- a/src/include/dns-server/dialog-main.rb +++ b/src/include/dns-server/dialog-main.rb @@ -39,9 +39,6 @@ def initialize_dns_server_dialog_main(include_target) # String defines the initial screen for the expert dialog @initial_screen = "start_up" - @service = SystemdService.find("named") - @status_widget = ::UI::ServiceStatus.new(@service) - @global_options_add_items = Builtins.sort( [ "additional-from-auth", @@ -258,370 +255,107 @@ def initialize_dns_server_dialog_main(include_target) # Dialog label DNS - expert settings @dns_server_label = _("DNS Server") - @new_widgets = { - "start_up" => { - "widget" => :custom, - "custom_widget" => VBox(), - "init" => fun_ref( - method(:InitStartUp), - "void (string)" - ), - "handle" => fun_ref( - method(:HandleStartUp), - "symbol (string, map)" - ), - "help" => @status_widget.help - }, - "firewall" => CWMFirewallInterfaces.CreateOpenFirewallWidget( - { "services" => ["service:bind"], "display_details" => true } - ), - "use_ldap" => CWMServiceStart.CreateLdapWidget( - { - "get_use_ldap" => fun_ref( - DnsServer.method(:GetUseLdap), - "boolean ()" - ), - "set_use_ldap" => fun_ref( - DnsServer.method(:SetUseLdap), - "boolean (boolean)" - ), - # TRANSLATORS: checkbox label, turning LDAP support on or off - "use_ldap_checkbox" => _( - "&LDAP Support Active" + + @functions = { :abort => fun_ref(method(:confirmAbort), "boolean ()") } + end + + def InitStartUp(_key) + status_widget.refresh + nil + end + + def HandleStartUp(_key, event) + event_id = event["ID"] + if event_id == "apply" + SaveAndRestart() + else + if status_widget.handle_input(event_id) == :enabled_flag + DnsServer.SetStartService(status_widget.enabled_flag?) + end + end + nil + end + + # Sets the dialog icon + def InitDNSSErverIcon(key) + SetDNSSErverIcon() + + nil + end + + # Dialog Expert Settings - Forwarders + # @return [Yast::Term] for Get_ExpertDialog() + def ExpertForwardersDialog + dialog = VBox( + # label + VBox( + HBox( + ComboBox( + Id("forwarder_policy"), + Opt(:notify), + # T: ComboBox label + _("Local DNS Resolution &Policy"), + [ + # 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")) + ] ), - "help" => CWMServiceStart.EnableLdapHelp - } - ), - "forwarders" => { - "widget" => :custom, - "custom_widget" => VBox(), - "init" => fun_ref( - method(:InitExpertForwardersPage), - "void (string)" - ), - "handle" => fun_ref( - method(:HandleExpertForwardersPage), - "symbol (string, map)" - ), - "store" => fun_ref( - method(:StoreExpertForwardersPage), - "void (string, map)" - ), - "help" => Ops.get_string(@HELPS, "forwarders", "") - }, - "basic_options" => { - "widget" => :custom, - "custom_widget" => VBox(), - "init" => fun_ref( - method(:InitExpertBasicOptionsPage), - "void (string)" - ), - "handle" => fun_ref( - method(:HandleExpertBasicOptionsPage), - "symbol (string, map)" - ), - "store" => fun_ref( - method(:StoreExpertBasicOptionsPage), - "void (string, map)" - ), - "help" => Ops.get_string(@HELPS, "basic_options", "") - }, - "logging" => { - "widget" => :custom, - "custom_widget" => VBox(), - "init" => fun_ref( - method(:InitExpertLoggingPage), - "void (string)" - ), - "handle" => fun_ref( - method(:HandleExpertLoggingPage), - "symbol (string, map)" - ), - "store" => fun_ref( - method(:StoreExpertLoggingPage), - "void (string, map)" - ), - "help" => Ops.get_string(@HELPS, "logging", "") - }, - "acls" => { - "widget" => :custom, - "custom_widget" => VBox(), - "init" => fun_ref( - method(:InitExpertAclPage), - "void (string)" - ), - "handle" => fun_ref( - method(:HandleExpertAclPage), - "symbol (string, map)" - ), - "store" => fun_ref( - method(:StoreExpertAclPage), - "void (string, map)" + HSpacing(1), + InputField(Id("custom_policy"), Opt(:hstretch), _("Custom policy")) ), - "help" => Ops.get_string(@HELPS, "acls", "") - }, - "tsig_keys" => CWMTsigKeys.CreateWidget( - { - "get_keys_info" => fun_ref( - DnsTsigKeys.method(:GetTSIGKeys), - "map ()" - ), - "set_keys_info" => fun_ref( - DnsTsigKeys.method(:SetTSIGKeys), - "void (map )" + 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")), + ] ) - } + ) ), - "keys" => { - "widget" => :custom, - "custom_widget" => VBox(), - "help" => Ops.get_string(@HELPS, "keys", "") - }, - "zones" => { - "widget" => :custom, - "custom_widget" => VBox(), - "init" => fun_ref( - method(:InitExpertZonesPage), - "void (string)" - ), - "handle" => fun_ref( - method(:HandleExpertZonesPage), - "symbol (string, map)" - ), - "store" => fun_ref( - method(:StoreExpertZonesPage), - "void (string, map)" - ), - "help" => Ops.get_string(@HELPS, "zones", "") - }, - "set_icon" => { - "widget" => :custom, - "custom_widget" => Empty(), - "init" => fun_ref( - method(:InitDNSSErverIcon), - "void (string)" - ), - "help" => " " - } - } - - @tabs = { - "start_up" => { - # FIXME: new startup - "contents" => VBox( - @status_widget.widget, - VSpacing(), - "firewall", - VStretch(), - Right( - PushButton(Id("apply"), _("Apply Changes")) - ) - ), - # Dialog Label - DNS - expert settings - "caption" => Ops.add( - Ops.add(@dns_server_label, ": "), - _("Start-Up") - ), - # Tree Menu Item - DNS - expert settings - "tree_item_label" => _( - "Start-Up" - ), - # FIXME: new startup - "widget_names" => DnsServer.ExpertUI ? - # expert mode - ["start_up", "firewall"] : - # simple mode - ["start_up", "firewall", "set_icon"] - }, - "forwarders" => { - "contents" => ExpertForwardersDialog(), - # Dialog Label - DNS - expert settings - "caption" => Ops.add( - Ops.add(@dns_server_label, ": "), - _("Forwarders") - ), - # Tree Menu Item - DNS - expert settings - "tree_item_label" => _( - "Forwarders" - ), - "widget_names" => ["forwarders"] - }, - "basic_options" => { - "contents" => ExpertBasicOptionsDialog(), - # Dialog Label - DNS - expert settings - "caption" => Ops.add( - Ops.add(@dns_server_label, ": "), - _("Basic Options") - ), - # Tree Menu Item - DNS - expert settings - "tree_item_label" => _( - "Basic Options" - ), - "widget_names" => ["basic_options"] - }, - "logging" => { - "contents" => Expert_Logging_Dialog(), - # Dialog Label - DNS - expert settings - "caption" => Ops.add( - Ops.add(@dns_server_label, ": "), - _("Logging") - ), - "tree_item_label" => _("Logging"), - # Tree Menu Item - DNS - expert settings - "widget_names" => [ - "logging" - ] - }, - "acls" => { - "contents" => Expert_ACLs_Dialog(), - # Dialog Label - DNS - expert settings - "caption" => Ops.add( - Ops.add(@dns_server_label, ": "), - _("ACLs") - ), - # Tree Menu Item - DNS - expert settings - "tree_item_label" => _( - "ACLs" - ), - "widget_names" => ["acls"] - }, - "keys" => { - "contents" => HBox( - HSpacing(2), - VBox(VSpacing(1), "tsig_keys", VSpacing(1)), - HSpacing(2) - ), - # Dialog Label - DNS - expert settings - "caption" => Ops.add( - Ops.add(@dns_server_label, ": "), - _("TSIG Keys") - ), - # Tree Menu Item - DNS - expert settings - "tree_item_label" => _( - "TSIG Keys" - ), - "widget_names" => ["tsig_keys"], - "widget_descr" => @new_widgets - }, - "zones" => { - "contents" => VBox( - "use_ldap", - VSpacing(), - ExpertZonesDialog() - ), - # Dialog Label - DNS - expert settings - "caption" => Ops.add( - Ops.add(@dns_server_label, ": "), - _("DNS Zones") - ), - # Tree Menu Item - DNS - expert settings - "tree_item_label" => _( - "DNS Zones" - ), - "widget_names" => ["use_ldap", "zones"] - } - } - - @functions = { :abort => fun_ref(method(:confirmAbort), "boolean ()") } - end - - def InitStartUp(_key) - @status_widget.refresh - nil - end - - def HandleStartUp(_key, event) - event_id = event["ID"] - if event_id == "apply" - SaveAndRestart() - else - if @status_widget.handle_input(event_id) == :enabled_flag - DnsServer.SetStartService(@status_widget.enabled_flag?) - end - end - nil - end - - # Sets the dialog icon - def InitDNSSErverIcon(key) - SetDNSSErverIcon() - - nil - end - - # Dialog Expert Settings - Forwarders - # @return [Yast::Term] for Get_ExpertDialog() - def ExpertForwardersDialog - dialog = VBox( - # label - VBox( - HBox( - ComboBox( - Id("forwarder_policy"), - Opt(:notify), - # T: ComboBox label - _("Local DNS Resolution &Policy"), - [ - # 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), - # Frame label for DNS-Forwarders options - VSquash( - Frame( - # Frame label for DNS-Forwarders adding IP - _("Add IP Address"), - VBox( - HBox( - HWeight( - 9, - # Textentry for DNS-Forwarders adding IP - InputField( - Id("forwarders_new_ip_address"), - Opt(:hstretch), - _("IPv4 or IPv6 A&ddress"), - "" - ) - ), - HWeight( - 2, - Bottom( - PushButton( - Id("forwarders_add_ip_address"), - Opt(:hstretch), - Label.AddButton - ) - ) - ) - ), - VSpacing(0.5) + VSpacing(1), + # Frame label for DNS-Forwarders options + VSquash( + Frame( + # Frame label for DNS-Forwarders adding IP + _("Add IP Address"), + VBox( + HBox( + HWeight( + 9, + # Textentry for DNS-Forwarders adding IP + InputField( + Id("forwarders_new_ip_address"), + Opt(:hstretch), + _("IPv4 or IPv6 A&ddress"), + "" + ) + ), + HWeight( + 2, + Bottom( + PushButton( + Id("forwarders_add_ip_address"), + Opt(:hstretch), + Label.AddButton + ) + ) + ) + ), + VSpacing(0.5) ) ) ), @@ -2147,7 +1881,7 @@ def WriteDialog Wizard.RestoreHelp(Ops.get_string(@HELPS, "write", "")) ret = DnsServer.Write if ret - @service.reload if @status_widget.reload_flag? + service.reload if status_widget.reload_flag? :next else if Popup.YesNo(_("Saving the configuration failed. Change the settings?")) @@ -2164,7 +1898,7 @@ def SaveAndRestart Wizard.RestoreHelp(Ops.get_string(@HELPS, "write", "")) ret = DnsServer.Write if ret - @service.reload if @status_widget.reload_flag? + service.reload if status_widget.reload_flag? else Report.Error(_("Saving the configuration failed")) end @@ -2211,8 +1945,8 @@ def runExpertDialog { "ids_order" => DnsServer.ExpertUI ? expert_dialogs : normal_dialog, "initial_screen" => @initial_screen, - "screens" => @tabs, - "widget_descr" => @new_widgets, + "screens" => tabs, + "widget_descr" => new_widgets, "back_button" => "", "abort_button" => Label.CancelButton, "next_button" => Label.OKButton, @@ -2220,5 +1954,291 @@ def runExpertDialog } ) end + + # Returns a hash describing the UI tabs + def tabs + @tabs ||= { + "start_up" => { + # FIXME: new startup + "contents" => VBox( + status_widget.widget, + VSpacing(), + "firewall", + VStretch(), + Right( + PushButton(Id("apply"), _("Apply Changes")) + ) + ), + # Dialog Label - DNS - expert settings + "caption" => Ops.add( + Ops.add(@dns_server_label, ": "), + _("Start-Up") + ), + # Tree Menu Item - DNS - expert settings + "tree_item_label" => _( + "Start-Up" + ), + # FIXME: new startup + "widget_names" => DnsServer.ExpertUI ? + # expert mode + ["start_up", "firewall"] : + # simple mode + ["start_up", "firewall", "set_icon"] + }, + "forwarders" => { + "contents" => ExpertForwardersDialog(), + # Dialog Label - DNS - expert settings + "caption" => Ops.add( + Ops.add(@dns_server_label, ": "), + _("Forwarders") + ), + # Tree Menu Item - DNS - expert settings + "tree_item_label" => _( + "Forwarders" + ), + "widget_names" => ["forwarders"] + }, + "basic_options" => { + "contents" => ExpertBasicOptionsDialog(), + # Dialog Label - DNS - expert settings + "caption" => Ops.add( + Ops.add(@dns_server_label, ": "), + _("Basic Options") + ), + # Tree Menu Item - DNS - expert settings + "tree_item_label" => _( + "Basic Options" + ), + "widget_names" => ["basic_options"] + }, + "logging" => { + "contents" => Expert_Logging_Dialog(), + # Dialog Label - DNS - expert settings + "caption" => Ops.add( + Ops.add(@dns_server_label, ": "), + _("Logging") + ), + "tree_item_label" => _("Logging"), + # Tree Menu Item - DNS - expert settings + "widget_names" => [ + "logging" + ] + }, + "acls" => { + "contents" => Expert_ACLs_Dialog(), + # Dialog Label - DNS - expert settings + "caption" => Ops.add( + Ops.add(@dns_server_label, ": "), + _("ACLs") + ), + # Tree Menu Item - DNS - expert settings + "tree_item_label" => _( + "ACLs" + ), + "widget_names" => ["acls"] + }, + "keys" => { + "contents" => HBox( + HSpacing(2), + VBox(VSpacing(1), "tsig_keys", VSpacing(1)), + HSpacing(2) + ), + # Dialog Label - DNS - expert settings + "caption" => Ops.add( + Ops.add(@dns_server_label, ": "), + _("TSIG Keys") + ), + # Tree Menu Item - DNS - expert settings + "tree_item_label" => _( + "TSIG Keys" + ), + "widget_names" => ["tsig_keys"], + "widget_descr" => new_widgets + }, + "zones" => { + "contents" => VBox( + "use_ldap", + VSpacing(), + ExpertZonesDialog() + ), + # Dialog Label - DNS - expert settings + "caption" => Ops.add( + Ops.add(@dns_server_label, ": "), + _("DNS Zones") + ), + # Tree Menu Item - DNS - expert settings + "tree_item_label" => _( + "DNS Zones" + ), + "widget_names" => ["use_ldap", "zones"] + } + } + end + + # Returns a hash describing the UI widgets + def new_widgets + @new_widgets ||= { + "start_up" => { + "widget" => :custom, + "custom_widget" => VBox(), + "init" => fun_ref( + method(:InitStartUp), + "void (string)" + ), + "handle" => fun_ref( + method(:HandleStartUp), + "symbol (string, map)" + ), + "help" => status_widget.help + }, + "firewall" => CWMFirewallInterfaces.CreateOpenFirewallWidget( + { "services" => ["service:bind"], "display_details" => true } + ), + "use_ldap" => CWMServiceStart.CreateLdapWidget( + { + "get_use_ldap" => fun_ref( + DnsServer.method(:GetUseLdap), + "boolean ()" + ), + "set_use_ldap" => fun_ref( + DnsServer.method(:SetUseLdap), + "boolean (boolean)" + ), + # TRANSLATORS: checkbox label, turning LDAP support on or off + "use_ldap_checkbox" => _( + "&LDAP Support Active" + ), + "help" => CWMServiceStart.EnableLdapHelp + } + ), + "forwarders" => { + "widget" => :custom, + "custom_widget" => VBox(), + "init" => fun_ref( + method(:InitExpertForwardersPage), + "void (string)" + ), + "handle" => fun_ref( + method(:HandleExpertForwardersPage), + "symbol (string, map)" + ), + "store" => fun_ref( + method(:StoreExpertForwardersPage), + "void (string, map)" + ), + "help" => Ops.get_string(@HELPS, "forwarders", "") + }, + "basic_options" => { + "widget" => :custom, + "custom_widget" => VBox(), + "init" => fun_ref( + method(:InitExpertBasicOptionsPage), + "void (string)" + ), + "handle" => fun_ref( + method(:HandleExpertBasicOptionsPage), + "symbol (string, map)" + ), + "store" => fun_ref( + method(:StoreExpertBasicOptionsPage), + "void (string, map)" + ), + "help" => Ops.get_string(@HELPS, "basic_options", "") + }, + "logging" => { + "widget" => :custom, + "custom_widget" => VBox(), + "init" => fun_ref( + method(:InitExpertLoggingPage), + "void (string)" + ), + "handle" => fun_ref( + method(:HandleExpertLoggingPage), + "symbol (string, map)" + ), + "store" => fun_ref( + method(:StoreExpertLoggingPage), + "void (string, map)" + ), + "help" => Ops.get_string(@HELPS, "logging", "") + }, + "acls" => { + "widget" => :custom, + "custom_widget" => VBox(), + "init" => fun_ref( + method(:InitExpertAclPage), + "void (string)" + ), + "handle" => fun_ref( + method(:HandleExpertAclPage), + "symbol (string, map)" + ), + "store" => fun_ref( + method(:StoreExpertAclPage), + "void (string, map)" + ), + "help" => Ops.get_string(@HELPS, "acls", "") + }, + "tsig_keys" => CWMTsigKeys.CreateWidget( + { + "get_keys_info" => fun_ref( + DnsTsigKeys.method(:GetTSIGKeys), + "map ()" + ), + "set_keys_info" => fun_ref( + DnsTsigKeys.method(:SetTSIGKeys), + "void (map )" + ) + } + ), + "keys" => { + "widget" => :custom, + "custom_widget" => VBox(), + "help" => Ops.get_string(@HELPS, "keys", "") + }, + "zones" => { + "widget" => :custom, + "custom_widget" => VBox(), + "init" => fun_ref( + method(:InitExpertZonesPage), + "void (string)" + ), + "handle" => fun_ref( + method(:HandleExpertZonesPage), + "symbol (string, map)" + ), + "store" => fun_ref( + method(:StoreExpertZonesPage), + "void (string, map)" + ), + "help" => Ops.get_string(@HELPS, "zones", "") + }, + "set_icon" => { + "widget" => :custom, + "custom_widget" => Empty(), + "init" => fun_ref( + method(:InitDNSSErverIcon), + "void (string)" + ), + "help" => " " + } + } + end + + # Returns the status widget for service + # + # @return [::UI::ServiceStatus] status widget + # + # @see #service + def status_widget + @status_widget ||= ::UI::ServiceStatus.new(service) + end + + # Returns the 'named' systemd service + # + # @return [SystemdService] 'named' systemd service instance + def service + @service ||= SystemdService.find("named") + end end end From c0180bf5e4181a968de990fc699aac231b0897fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Imobach=20Gonz=C3=A1lez=20Sosa?= Date: Thu, 4 Aug 2016 12:55:33 +0100 Subject: [PATCH 2/2] Bump version and update changes file --- package/yast2-dns-server.changes | 7 +++++++ package/yast2-dns-server.spec | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/package/yast2-dns-server.changes b/package/yast2-dns-server.changes index 591ecd2..52ab0f0 100644 --- a/package/yast2-dns-server.changes +++ b/package/yast2-dns-server.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Thu Aug 4 11:53:40 UTC 2016 - igonzalezsosa@suse.com + +- Fix an Internal Error 'undefined method DnsSequence' in case + bind.rpm is not installed (bsc#990453) +- 3.1.23 + ------------------------------------------------------------------- Tue Jun 7 11:28:51 UTC 2016 - igonzalezsosa@suse.com diff --git a/package/yast2-dns-server.spec b/package/yast2-dns-server.spec index 6b0406c..06a7e7e 100644 --- a/package/yast2-dns-server.spec +++ b/package/yast2-dns-server.spec @@ -17,7 +17,7 @@ Name: yast2-dns-server -Version: 3.1.22 +Version: 3.1.23 Release: 0 Url: https://github.com/yast/yast-dns-server