[yast-commit] r50530 - in /trunk/network/src: clients/lan_auto.ycp modules/DNS.ycp services/dns.ycp
Author: kmachalkova Date: Mon Sep 1 16:40:41 2008 New Revision: 50530 URL: http://svn.opensuse.org/viewcvs/yast?rev=50530&view=rev Log: Reading/writing of /etc/resolv.conf adapted to using netconfig (FaTE #303618) Modified: trunk/network/src/clients/lan_auto.ycp trunk/network/src/modules/DNS.ycp trunk/network/src/services/dns.ycp Modified: trunk/network/src/clients/lan_auto.ycp URL: http://svn.opensuse.org/viewcvs/yast/trunk/network/src/clients/lan_auto.ycp?rev=50530&r1=50529&r2=50530&view=diff ============================================================================== --- trunk/network/src/clients/lan_auto.ycp (original) +++ trunk/network/src/clients/lan_auto.ycp Mon Sep 1 16:40:41 2008 @@ -161,9 +161,7 @@ if (haskey(dns, "dhcp_hostname")) dhcp["DHCLIENT_SET_HOSTNAME"] = dns["dhcp_hostname"]:false; - if (haskey(dns, "dhcp_resolv")) - dhcp["DHCLIENT_MODIFY_RESOLV_CONF"] = dns["dhcp_resolv"]:false; - + dhcp = UpcaseCondSet (dhcp, dhcpopts, "dhclient_client_id"); dhcp = UpcaseCondSet (dhcp, dhcpopts, "dhclient_additional_options"); dhcp = UpcaseCondSet (dhcp, dhcpopts, "dhclient_hostname_option"); @@ -231,11 +229,9 @@ map config = settings["config"]:$[]; map dhcp = config["dhcp"]:$[]; - boolean dhcp_resolv = dhcp["DHCLIENT_MODIFY_RESOLV_CONF"]:false; boolean dhcp_hostname = dhcp["DHCLIENT_SET_HOSTNAME"]:false; map dns = settings["dns"]:$[]; dns["dhcp_hostname"] = dhcp_hostname; - dns["dhcp_resolv"] = dhcp_resolv; map dhcpopts = $[]; if (haskey(dhcp, "DHCLIENT_HOSTNAME_OPTION")) dhcpopts["dhclient_hostname_option"] = dhcp["DHCLIENT_HOSTNAME_OPTION"]:"AUTO"; Modified: trunk/network/src/modules/DNS.ycp URL: http://svn.opensuse.org/viewcvs/yast/trunk/network/src/modules/DNS.ycp?rev=50530&r1=50529&r2=50530&view=diff ============================================================================== --- trunk/network/src/modules/DNS.ycp (original) +++ trunk/network/src/modules/DNS.ycp Mon Sep 1 16:40:41 2008 @@ -50,6 +50,8 @@ global string resolv_conf_process = ""; global boolean resolv_conf_force = false; +global string resolv_conf_policy = ""; + // fully qualified string oldhostname = ""; @@ -137,38 +139,15 @@ // bogus?! y2milestone ("install.inf: %1", install_inf); - /* check for externally modified resolv.conf */ - if(SCR::Execute(.target.bash, "/sbin/modify_resolvconf check -q < /dev/null") != 0) - resolv_conf_process = (string) SCR::Read(.etc.resolv_conf.process); - else - { - resolv_conf_process = ""; + resolv_conf_policy = (string)SCR::Read(.sysconfig.network.config.NETCONFIG_DNS_POLICY); + list<string> resolvlist = splitstring((string)SCR::Read(.sysconfig.network.config.NETCONFIG_DNS_STATIC_SERVERS), " "); + if(resolvlist == nil) { + ReadNameserver (install_inf["Nameserver"]:""); } + else + nameservers = resolvlist; - /* only read /etc/resolv.conf if present */ - if(SCR::Read(.target.size, resolv_conf) > 0) { - - /* name servers */ - list<string> resolvlist = (list<string>) SCR::Read(.etc.resolv_conf.nameserver); - if(resolvlist == nil) { - ReadNameserver (install_inf["Nameserver"]:""); - } - else - nameservers = resolvlist; - - /* search list */ - resolvlist = (list<string>) SCR::Read(.etc.resolv_conf.search); - if(resolvlist != nil) searchlist = resolvlist; - if(size(searchlist) < 1) { - string dom = (string) SCR::Read(.etc.resolv_conf.domain); - if(dom != nil && dom != "") searchlist = [ dom ]; - } - } - else { - /* FIXME: propose DNS from Detection */ - nameservers = []; - searchlist = []; - } + searchlist = splitstring((string)SCR::Read(.sysconfig.network.config.NETCONFIG_DNS_STATIC_SEARCHLIST), " "); /* hostname and domain */ // all this is much too intelligent and belongs rather to the proposal @@ -303,32 +282,23 @@ /* update X authorization */ SCR::Write(.xauth.key, xauth_key); + /* if(SCR::Read(.target.size, resolv_conf) < 0) SCR::Write(.target.string, resolv_conf, ""); - + */ + if( update_resolv ) { /* Progress step 3/3 */ ProgressNextStage(_("Updating /etc/resolv.conf ...")); - /* update /etc/resolv.conf */ - SCR::Write(.etc.resolv_conf.search, searchlist); - SCR::Write(.etc.resolv_conf.nameserver, nameservers); - /* update domain in /etc/resolv.conf */ - if(size(searchlist) > 0) - SCR::Write(.etc.resolv_conf.domain, ""); - else - SCR::Write(.etc.resolv_conf.domain, domain); - - /* write only an original header */ - if(resolv_conf_force == true && - (NetworkConfig::DHCP["DHCLIENT_MODIFY_RESOLV_CONF"]:false == true)) { - SCR::Write(.etc.resolv_conf.write_header, true); - } + SCR::Write(.sysconfig.network.config.NETCONFIG_DNS_POLICY, resolv_conf_policy); + SCR::Write(.sysconfig.network.config.NETCONFIG_DNS_STATIC_SEARCHLIST, mergestring(searchlist, " ")); + SCR::Write(.sysconfig.network.config.NETCONFIG_DNS_STATIC_SERVERS, mergestring(nameservers, " ")); + SCR::Write(.sysconfig.network.config, nil); - /* flush the cache */ - SCR::Write(.etc.resolv_conf, nil); - SCR::Execute(.target.bash, "/bin/chmod a+r /etc/resolv.conf"); + SCR::Execute(.target.bash, "/sbin/netconfig update"); + sleep(sl); } else y2milestone("resolv.conf changed by %1, leave untouched", resolv_conf_process); @@ -392,13 +362,14 @@ if (NetworkConfig::DHCP["WRITE_HOSTNAME_TO_HOSTS"]:true == false) summary = Summary::AddListItem(summary, _("Hostname will not be written to /etc/hosts")); - if (has_dhcp && NetworkConfig::DHCP["DHCLIENT_MODIFY_RESOLV_CONF"]:false) { + + /*if (has_dhcp && NetworkConfig::DHCP["DHCLIENT_MODIFY_RESOLV_CONF"]:false) {*/ /* Summary text */ - summary = Summary::AddListItem(summary, _("Name Servers: Set by DHCP")); + /*summary = Summary::AddListItem(summary, _("Name Servers: Set by DHCP")); */ /* Summary text */ - summary = Summary::AddListItem(summary, _("Search List: Set by DHCP")); - } - else { + /*summary = Summary::AddListItem(summary, _("Search List: Set by DHCP")); */ + /*}*/ + /*else {*/ list<string> nslist = maplist(string ns, nameservers, { string nss = NetHwDetection::ResolveIP(ns); return (nss == "") ? ns : (ns + " (" + nss + ")"); @@ -410,7 +381,7 @@ if(size(searchlist) > 0) /* Summary text */ summary = Summary::AddListItem(summary, sformat(_("Search List: %1"), mergestring(searchlist, ", "))); - } + /*}*/ if(size(summary) < 1) return ""; return "<ul>" + summary + "</ul>"; Modified: trunk/network/src/services/dns.ycp URL: http://svn.opensuse.org/viewcvs/yast/trunk/network/src/services/dns.ycp?rev=50530&r1=50529&r2=50530&view=diff ============================================================================== --- trunk/network/src/services/dns.ycp (original) +++ trunk/network/src/services/dns.ycp Mon Sep 1 16:40:41 2008 @@ -70,8 +70,7 @@ "DOMAIN": DNS::domain, "DHCP_HOSTNAME": NetworkConfig::DHCP["DHCLIENT_SET_HOSTNAME"]:false, // set as true by default because there wasn't this option in previous version - "WRITE_HOSTNAME": NetworkConfig::DHCP["WRITE_HOSTNAME_TO_HOSTS"]:true, - "DHCP_RESOLV": NetworkConfig::DHCP["DHCLIENT_MODIFY_RESOLV_CONF"]:false, + "WRITE_HOSTNAME": NetworkConfig::DHCP["WRITE_HOSTNAME_TO_HOSTS"]:true ]; // the rest is not so straightforward, // because we have list variables but non-list widgets @@ -79,7 +78,7 @@ /* domain search */ string searchstring = mergestring (DNS::searchlist, "\n"); // #49094: populate the search list - if (searchstring == "" && !settings["DHCP_RESOLV"]:false) + if (searchstring == "") { searchstring = settings["DOMAIN"]:""; } @@ -109,8 +108,7 @@ DNS::searchlist = NonEmpty (searchlist); NetworkConfig::DHCP["DHCLIENT_SET_HOSTNAME"] = settings["DHCP_HOSTNAME"]:false; NetworkConfig::DHCP["WRITE_HOSTNAME_TO_HOSTS"] = settings["WRITE_HOSTNAME"]:true; - NetworkConfig::DHCP["DHCLIENT_MODIFY_RESOLV_CONF"] = settings["DHCP_RESOLV"]:false; - if ((boolean)UI::QueryWidget(`id("MODIFY_RESOLV"), `Value)) DNS::resolv_conf_process=""; + /* update modified flag */ DNS::modified = true; y2milestone("modified DNS"); @@ -154,19 +152,6 @@ } /** - * Event handler for DHCP_RESOLV checkbox. - * enable or disable: is DHCP available and not used now? HUH?! - * @param key the widget receiving the event - * @param event the event being handled - * @return nil so that the dialog loops on - */ -define symbol HandleDhcpResolv (string key, map event) { - UI::ChangeWidget (`id ("DHCP_RESOLV"), `Enabled, has_dhcp && resolver_modifiable); - if (!has_dhcp) UI::ReplaceWidget(`id ("dh_resolv_text"),`Label(_("No interface with dhcp"))); - return nil; -} - -/** * Event handler for resolver data (nameservers, searchlist) * enable or disable: is DHCP available? * @param key the widget receiving the event @@ -174,9 +159,7 @@ * @return nil so that the dialog loops on */ define symbol HandleResolverData (string key, map event) { - boolean dhcp_resolv = (boolean) UI::QueryWidget (`id ("DHCP_RESOLV"), `Value); - dhcp_resolv = dhcp_resolv && has_dhcp; // #146162 - UI::ChangeWidget (`id (key), `Enabled, resolver_modifiable && (!dhcp_resolv)); + UI::ChangeWidget (`id (key), `Enabled, resolver_modifiable); return nil; } @@ -258,28 +241,77 @@ } -void initModifyResolv (string key){ - string process = DNS::resolv_conf_process; - if(process == nil || process == "") { - resolver_modifiable = true; - UI::ChangeWidget(`id("MODIFY_RESOLV"), `Enabled, false); - } else { - resolver_modifiable = false; - } - DNS::resolv_conf_force = resolver_modifiable; +void initPolicy(string key) { + + y2milestone("initPolicy: %1", UI::QueryWidget(`id("MODIFY_RESOLV"), `Value)); + + if(UI::QueryWidget(`id("MODIFY_RESOLV"), `Value) == `custom) + { + UI::ChangeWidget(`id("PLAIN_POLICY"), `Enabled, true); + if (UI::QueryWidget(`id("PLAIN_POLICY"), `Value) == "") + { + UI::ChangeWidget(`id("PLAIN_POLICY"), `Value, DNS::resolv_conf_policy); + } + } + else + { + UI::ChangeWidget(`id("PLAIN_POLICY"), `Value, ""); + UI::ChangeWidget(`id("PLAIN_POLICY"), `Enabled, false); + } } -symbol handleModifyResolv (string key, map event){ - if ((boolean)UI::QueryWidget(`id("MODIFY_RESOLV"), `Enabled)) - { - if ((boolean)UI::QueryWidget(`id("MODIFY_RESOLV"), `Value)) - { - resolver_modifiable = true; - } else { - resolver_modifiable = false; +symbol handlePolicy(string key, map event) { + + y2milestone("handlePolicy"); + + if(UI::QueryWidget(`id("MODIFY_RESOLV"), `Value) == `custom) + { + DNS::resolv_conf_policy = (string)UI::QueryWidget(`id("PLAIN_POLICY"), `Value); + } + else if(UI::QueryWidget(`id("MODIFY_RESOLV"), `Value) == `auto) + { + DNS::resolv_conf_policy = "auto"; + } + else + { + DNS::resolv_conf_policy = ""; + } +} + +void initModifyResolvPolicy (string key){ + + y2milestone("initModifyResolvPolicy"); + + if(DNS::resolv_conf_policy == nil || DNS::resolv_conf_policy == "") + { + UI::ChangeWidget(`id("MODIFY_RESOLV"), `Value, `id(`nomodify) ); + } + else if(DNS::resolv_conf_policy == "auto" || DNS::resolv_conf_policy == "STATIC *") + { + UI::ChangeWidget(`id("MODIFY_RESOLV"), `Value, `id(`auto) ); } - } - return nil; + else + { + UI::ChangeWidget(`id("MODIFY_RESOLV"), `Value, `id(`custom) ); + } +} + +symbol handleModifyResolvPolicy (string key, map event){ + y2milestone("handleModifyResolvPolicy called: %1", UI::QueryWidget(`id("MODIFY_RESOLV"), `Value)); + + if (UI::QueryWidget(`id("MODIFY_RESOLV"), `Value) == `nomodify) + { + resolver_modifiable = false; + } + else + { + resolver_modifiable = true; + } + + initPolicy(key); + + y2milestone("Exit: resolver_modifiable = %1", resolver_modifiable); + return nil; } @@ -363,14 +395,28 @@ // help "help": help["write_hostname"]:"", ], - "MODIFY_RESOLV" : $[ - "widget": `checkbox, - "label" : _("&Change /etc/resolv.conf manually"), - "opt" : [`notify], - "init" : initModifyResolv, - "handle": handleModifyResolv, - "help" : "" - ], + "MODIFY_RESOLV" : $[ + "widget": `combobox, + "label": _("&Modify DNS configuration"), + "opt" : [`notify], + "items": [ [`nomodify, _("Only Manually")], + [`auto, _("Use Default Policy")], + [`custom, _("Use Custom Policy")] ], + "init" : initModifyResolvPolicy, + "handle": handleModifyResolvPolicy, + "help" : "" + ], + "PLAIN_POLICY" : $[ + "widget": `combobox, + "label": _("&Custom Policy Rule"), + "opt" : [`editable], + "items" : [ [`static, "STATIC"], + [`static_fallback, "STATIC_FALLBACK" ] + ], + "init": initPolicy, + "handle": handlePolicy, + "help" : "" + ], "NAMESERVER_1": $[ "widget": `textentry, /* textentry label */ @@ -397,16 +443,6 @@ "validate_type": `function, "validate_function": ValidateSearchList, ], - "DHCP_RESOLV": $[ - "widget": `custom, - "custom_widget" : `HBox( - `CheckBox(`id("DHCP_RESOLV"), `opt(`notify), _("&Update DNS data via DHCP")), - `ReplacePoint( `id("dh_resolv_text"), `Empty() ) - ), - // help - "help": "", // at "SEARCHLIST_S" - "handle": HandleDhcpResolv, - ], ]; widget_descr_dns["NAMESERVER_2"] = widget_descr_dns["NAMESERVER_1"]:$[]; @@ -432,7 +468,11 @@ `Left("WRITE_HOSTNAME") )), `VSpacing(0.49), - `Left("MODIFY_RESOLV"), + `Left( `HBox( + "MODIFY_RESOLV", + `HSpacing (1), + "PLAIN_POLICY" + ) ), /* Frame label */ `Frame(_("Name Servers and Domain Search List"), `VBox( `VSquash ( `HBox( @@ -444,9 +484,7 @@ `HSpacing (1), `HWeight (1, "SEARCHLIST_S") )), - `VSpacing(0.49), - /* CheckBox label */ - `Left ("DHCP_RESOLV") + `VSpacing(0.49) ) ), `VStretch() @@ -456,8 +494,8 @@ "resolv" : $[ "header" : _("Hostname/DNS"), "contents" : dns_contents, - "widget_names" : ["HOSTNAME", "HOSTNAME_GLOBAL", "DOMAIN", "DHCP_HOSTNAME", "WRITE_HOSTNAME", "MODIFY_RESOLV", - "NAMESERVER_1", "NAMESERVER_2", "NAMESERVER_3", "SEARCHLIST_S", "DHCP_RESOLV"] + "widget_names" : ["HOSTNAME", "HOSTNAME_GLOBAL", "DOMAIN", "DHCP_HOSTNAME", "WRITE_HOSTNAME", "MODIFY_RESOLV", "PLAIN_POLICY", + "NAMESERVER_1", "NAMESERVER_2", "NAMESERVER_3", "SEARCHLIST_S"] ] ]; -- To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org For additional commands, e-mail: yast-commit+help@opensuse.org
participants (1)
-
kmachalkova@svn.opensuse.org