Hello community, here is the log from the commit of package yast2-network for openSUSE:Factory checked in at 2016-08-10 19:54:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/yast2-network (Old) and /work/SRC/openSUSE:Factory/.yast2-network.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-network" Changes: -------- --- /work/SRC/openSUSE:Factory/yast2-network/yast2-network.changes 2016-07-16 22:12:35.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.yast2-network.new/yast2-network.changes 2016-08-10 19:54:21.000000000 +0200 @@ -1,0 +2,30 @@ +Wed Aug 10 16:07:26 UTC 2016 - [email protected] + +- bnc#991486 + - Do not allow creating device with oversized configuration name. +- 3.1.163 + +------------------------------------------------------------------- +Tue Aug 9 12:29:35 UTC 2016 - [email protected] + +- Added entry "s390-devices" to the AutoYaST schema file. + Bug similar bnc#954412. +- 3.1.162 + +------------------------------------------------------------------- +Tue Aug 9 12:25:01 UTC 2016 - [email protected] + +- bnc#991920 + - do not crash with internal error when renaming unconfigured + device +- 3.1.161 + +------------------------------------------------------------------- +Tue Aug 2 12:40:53 UTC 2016 - [email protected] + +- bnc#991382 + - Do not crash with internal error when using "On Cable + Connection" device activation mode. +- 3.1.160 + +------------------------------------------------------------------- Old: ---- yast2-network-3.1.159.tar.bz2 New: ---- yast2-network-3.1.163.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ yast2-network.spec ++++++ --- /var/tmp/diff_new_pack.w3rBNs/_old 2016-08-10 19:54:23.000000000 +0200 +++ /var/tmp/diff_new_pack.w3rBNs/_new 2016-08-10 19:54:23.000000000 +0200 @@ -17,7 +17,7 @@ Name: yast2-network -Version: 3.1.159 +Version: 3.1.163 Release: 0 BuildRoot: %{_tmppath}/%{name}-%{version}-build ++++++ yast2-network-3.1.159.tar.bz2 -> yast2-network-3.1.163.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.159/package/yast2-network.changes new/yast2-network-3.1.163/package/yast2-network.changes --- old/yast2-network-3.1.159/package/yast2-network.changes 2016-07-15 10:26:35.000000000 +0200 +++ new/yast2-network-3.1.163/package/yast2-network.changes 2016-08-09 18:43:38.000000000 +0200 @@ -1,4 +1,34 @@ ------------------------------------------------------------------- +Wed Aug 10 16:07:26 UTC 2016 - [email protected] + +- bnc#991486 + - Do not allow creating device with oversized configuration name. +- 3.1.163 + +------------------------------------------------------------------- +Tue Aug 9 12:29:35 UTC 2016 - [email protected] + +- Added entry "s390-devices" to the AutoYaST schema file. + Bug similar bnc#954412. +- 3.1.162 + +------------------------------------------------------------------- +Tue Aug 9 12:25:01 UTC 2016 - [email protected] + +- bnc#991920 + - do not crash with internal error when renaming unconfigured + device +- 3.1.161 + +------------------------------------------------------------------- +Tue Aug 2 12:40:53 UTC 2016 - [email protected] + +- bnc#991382 + - Do not crash with internal error when using "On Cable + Connection" device activation mode. +- 3.1.160 + +------------------------------------------------------------------- Tue Jul 12 10:41:58 CEST 2016 - [email protected] - Added entry "dhclient_set_hostname" to the AutoYaST schema file. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.159/package/yast2-network.spec new/yast2-network-3.1.163/package/yast2-network.spec --- old/yast2-network-3.1.159/package/yast2-network.spec 2016-07-15 10:26:35.000000000 +0200 +++ new/yast2-network-3.1.163/package/yast2-network.spec 2016-08-09 18:43:38.000000000 +0200 @@ -17,7 +17,7 @@ Name: yast2-network -Version: 3.1.159 +Version: 3.1.163 Release: 0 BuildRoot: %{_tmppath}/%{name}-%{version}-build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.159/src/autoyast-rnc/networking.rnc new/yast2-network-3.1.163/src/autoyast-rnc/networking.rnc --- old/yast2-network-3.1.159/src/autoyast-rnc/networking.rnc 2016-07-15 10:26:35.000000000 +0200 +++ new/yast2-network-3.1.163/src/autoyast-rnc/networking.rnc 2016-08-09 18:43:38.000000000 +0200 @@ -15,6 +15,7 @@ dhcp_options? & routing? & dns? & + s390-devices? & net-udev? } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.159/src/include/network/lan/hardware.rb new/yast2-network-3.1.163/src/include/network/lan/hardware.rb --- old/yast2-network-3.1.159/src/include/network/lan/hardware.rb 2016-07-15 10:26:35.000000000 +0200 +++ new/yast2-network-3.1.163/src/include/network/lan/hardware.rb 2016-08-09 18:43:38.000000000 +0200 @@ -29,6 +29,8 @@ require "network/edit_nic_name" +include Yast::UIShortcuts + module Yast module NetworkLanHardwareInclude def initialize_network_lan_hardware(include_target) @@ -790,21 +792,25 @@ def validate_hw(_key, _event) nm = devname_from_hw_dialog - if UsedNicName(nm) + ret = if UsedNicName(nm) Popup.Error( - Builtins.sformat( - _( - "Configuration name %1 already exists.\nChoose a different one." - ), - nm - ) + format(_("Configuration name %s already exists.\nChoose a different one."), nm) ) - UI.SetFocus(Id(:ifcfg_name)) - return false + false + elsif !ValidNicName(nm) + Popup.Error( + format(_("Configuration name %s is invalid.\nChoose a different one."), nm) + ) + + false + else + true end - true + UI.SetFocus(Id(:ifcfg_name)) if !ret + + ret end VLAN_SIZE = 4 # size of vlanN prefix without number diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.159/src/include/network/lan/udev.rb new/yast2-network-3.1.163/src/include/network/lan/udev.rb --- old/yast2-network-3.1.159/src/include/network/lan/udev.rb 2016-07-15 10:26:35.000000000 +0200 +++ new/yast2-network-3.1.163/src/include/network/lan/udev.rb 2016-08-09 18:43:38.000000000 +0200 @@ -45,6 +45,25 @@ rule end + # Returns a value of the particular key in the rule + # + # @param rule [array] an udev rule represented as a list of strings + # @param key [string] a key name which is asked for value + # @return [string] value corresponding to the key or empty string + def udev_key_value(rule, key) + raise ArgumentError, "Rule must not be nil when querying a key value" if rule.nil? + + rule.each do |tuple| + # note that when using =~ then named capture groups (?<name>...) currently + # cannot be used together with interpolation (#{}) + # see http://stackoverflow.com/questions/15890729/why-does-capturing-named-groups-in-ruby-result-in-undefined-local-variable-or-m + matches = tuple.match(/#{key}={1,2}"?(?<value>[^[:space:]"]*)/) + return matches[:value] if matches + end + + "" + end + # Writes new persistent udev net rules and tells udevd to update its configuration def write_update_udevd(udev_rules) SCR.Write(path(".udev_persistent.rules"), udev_rules) @@ -67,7 +86,7 @@ path(".target.bash"), "udevadm trigger --subsystem-match=net --action=add" ) - ret == 0 + ret.zero? end # Removes (key,operator,value) tripplet from given udev rule. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.159/src/include/network/lan/virtual.rb new/yast2-network-3.1.163/src/include/network/lan/virtual.rb --- old/yast2-network-3.1.159/src/include/network/lan/virtual.rb 2016-07-15 10:26:35.000000000 +0200 +++ new/yast2-network-3.1.163/src/include/network/lan/virtual.rb 2016-08-09 18:43:38.000000000 +0200 @@ -185,9 +185,6 @@ nil end - # max length of device / interface filename lenght supported by kernel - IFACE_LABEL_MAX = 16 - # Open a dialog to edit a name-ipaddr-netmask triple. # @param id [Integer] an id for the table item to be returned # @param entry [Yast::Term] an existing entry to be edited, or term(:empty) @@ -239,7 +236,7 @@ host = Item(Id(id)) val = UI.QueryWidget(Id(:name), :Value) - if LanItems.device.size + val.size + 1 > IFACE_LABEL_MAX + if !ValidNicName("#{LanItems.device}.#{val}") # Popup::Error text Popup.Error(_("Label is too long.")) UI.SetFocus(Id(:name)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.159/src/modules/LanItems.rb new/yast2-network-3.1.163/src/modules/LanItems.rb --- old/yast2-network-3.1.159/src/modules/LanItems.rb 2016-07-15 10:26:35.000000000 +0200 +++ new/yast2-network-3.1.163/src/modules/LanItems.rb 2016-08-09 18:43:38.000000000 +0200 @@ -405,26 +405,9 @@ deep_copy(udev_rules) end + # It returns a value for the particular key of udev rule belonging to the current item. def GetItemUdev(key) - value = "" - - Builtins.foreach(getUdevFallback) do |row| - if Builtins.issubstring(row, key) - items = Builtins.filter(Builtins.splitstring(row, "=")) do |s| - Ops.greater_than(Builtins.size(s), 0) - end - if Builtins.size(items) == 2 && Ops.get_string(items, 0, "") == key - value = Builtins.deletechars(Ops.get_string(items, 1, ""), "\"") - else - Builtins.y2warning( - "udev items %1 doesn't match the key %2", - items, - key - ) - end - end - end - value + udev_key_value(getUdevFallback, key) end # It replaces a tuple identified by replace_key in current item's udev rule @@ -432,38 +415,33 @@ # Note that the tuple is identified by key only. However modification flag is # set only if value was changed (in case when replace_key == new_key) # + # It also contain a logic on tuple operators. When the new_key is "NAME" + # then assignment operator (=) is used. Otherwise equality operator (==) is used. + # Thats bcs this function is currently used for touching "NAME", "KERNELS" and + # "ATTR{address}" keys only + # # @param replace_key [string] udev key which identifies tuple to be replaced # @param new_key [string] new key to by used # @param new_val [string] value for new key # @return updated rule when replace_key is found, current rule otherwise def ReplaceItemUdev(replace_key, new_key, new_val) - new_rule = [] - # udev syntax distinguishes among others: # = for assignment # == for equality checks operator = new_key == "NAME" ? "=" : "==" current_rule = getUdevFallback + rule = RemoveKeyFromUdevRule(getUdevFallback, replace_key) + new_rule = AddToUdevRule(rule, "#{new_key}#{operator}\"#{new_val}\"") - return current_rule if !new_key || new_key.empty? - return current_rule if !new_val || new_val.empty? + log.info("ReplaceItemUdev: new udev rule = #{new_rule}") - i = current_rule.find_index { |tuple| tuple =~ /#{replace_key}/ } - if i - # deep_copy is most probably not neccessary because getUdevFallback does - # deep_copy on return value. However, getUdevFallback will be subect of refactoring - # so caution is must. Moreover new_rule is also return value so it should be - # copied anyway - new_rule = deep_copy(current_rule) - new_rule[i] = "#{new_key}#{operator}\"#{new_val}\"" + if current_rule.sort != new_rule.sort + SetModified() - SetModified() if current_rule != new_rule + Items()[@current]["udev"] = { "net" => {} } if !Items()[@current]["udev"] + Items()[@current]["udev"]["net"] = new_rule end - log.info("LanItems#ReplaceItemUdev: #{current_rule} -> #{new_rule}") - - Items()[@current]["udev"]["net"] = new_rule - - new_rule + deep_copy(new_rule) end # Updates device name. @@ -1830,7 +1808,7 @@ devmap["MTU"] = @mtu devmap["ETHTOOL_OPTIONS"] = @ethtool_options devmap["STARTMODE"] = @startmode - devmap["IFPLUGD_PRIORITY"] = @ifplugd_priority.to_i if @startmode == "ifplugd" + devmap["IFPLUGD_PRIORITY"] = @ifplugd_priority if @startmode == "ifplugd" devmap["BOOTPROTO"] = @bootproto devmap["_aliases"] = @aliases if @aliases && [email protected]? diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.159/test/Makefile.am new/yast2-network-3.1.163/test/Makefile.am --- old/yast2-network-3.1.159/test/Makefile.am 2016-07-15 10:26:35.000000000 +0200 +++ new/yast2-network-3.1.163/test/Makefile.am 2016-08-09 18:43:38.000000000 +0200 @@ -9,6 +9,7 @@ dns_test.rb \ edit_nic_name_test.rb \ firewall_stage1_proposal_test.rb \ + hardware_test.rb \ host_test.rb \ ifroute_test.rb \ install_inf_convertor_test.rb \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.159/test/hardware_test.rb new/yast2-network-3.1.163/test/hardware_test.rb --- old/yast2-network-3.1.159/test/hardware_test.rb 1970-01-01 01:00:00.000000000 +0100 +++ new/yast2-network-3.1.163/test/hardware_test.rb 2016-08-09 18:43:38.000000000 +0200 @@ -0,0 +1,44 @@ +#! /usr/bin/env rspec + +require_relative "test_helper" + +require "yast" + +Yast.import "NetworkInterfaces" + +class HardwareTestClass < Yast::Module + def initialize + Yast.include self, "network/lan/hardware.rb" + end +end + +describe "#validate_hw" do + subject { HardwareTestClass.new } + + let(:valid_name) { "eth0" } + let(:long_name) { "verylongcustomnicname123" } + + it "passes for valid names only" do + allow(subject).to receive(:devname_from_hw_dialog).and_return valid_name + + expect(subject).to receive(:UsedNicName).and_return false + expect(subject.validate_hw(nil, nil)).to be true + end + + # bnc#991486 + it "fails for long names" do + allow(subject).to receive(:devname_from_hw_dialog).and_return long_name + + expect(Yast::UI).to receive(:SetFocus) + expect(subject).to receive(:UsedNicName).and_return false + expect(subject.validate_hw(nil, nil)).to be false + end + + it "fails for already used names" do + allow(subject).to receive(:devname_from_hw_dialog).and_return valid_name + allow(Yast::NetworkInterfaces).to receive(:List).and_return [valid_name] + + expect(Yast::UI).to receive(:SetFocus) + expect(subject.validate_hw(nil, nil)).to be false + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.159/test/lan_items_helpers_test.rb new/yast2-network-3.1.163/test/lan_items_helpers_test.rb --- old/yast2-network-3.1.159/test/lan_items_helpers_test.rb 2016-07-15 10:26:35.000000000 +0200 +++ new/yast2-network-3.1.163/test/lan_items_helpers_test.rb 2016-08-09 18:43:38.000000000 +0200 @@ -27,14 +27,12 @@ end describe "LanItemsClass#delete_dev" do - MOCKED_ITEMS_DEL = { - 0 => { - "ifcfg" => "enp0s3" - } - }.freeze - before(:each) do - Yast::LanItems.Items = MOCKED_ITEMS_DEL.dup + Yast::LanItems.Items = { + 0 => { + "ifcfg" => "enp0s3" + } + } end it "removes device config when found" do @@ -126,3 +124,45 @@ expect(Yast::LanItems.send(:s390_correct_lladdr, "0a:00:27:00:00:00")).to be true end end + +describe "LanItems#GetItemUdev" do + def check_GetItemUdev(key, expected_value) + expect(Yast::LanItems.GetItemUdev(key)).to eql expected_value + end + + context "when current item has an udev rule associated" do + BUSID = "0000:00:00.0".freeze + + before(:each) do + allow(Yast::LanItems) + .to receive(:getCurrentItem) + .and_return("udev" => { "net" => ["KERNELS==\"#{BUSID}\""] }) + end + + it "returns proper value when key exists" do + check_GetItemUdev("KERNELS", BUSID) + end + + it "returns an empty string when key doesn't exist" do + check_GetItemUdev("NAME", "") + end + end + + context "when current item doesn't have an udev rule associated" do + MAC = "00:11:22:33:44:55".freeze + + before(:each) do + allow(Yast::LanItems) + .to receive(:GetLanItem) + .and_return("hwinfo" => { "mac" => MAC }, "ifcfg" => "eth0") + end + + it "returns proper value when key exists" do + check_GetItemUdev("ATTR{address}", MAC) + end + + it "returns an empty string when key doesn't exist" do + check_GetItemUdev("KERNELS", "") + end + end +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.159/test/udev_test.rb new/yast2-network-3.1.163/test/udev_test.rb --- old/yast2-network-3.1.159/test/udev_test.rb 2016-07-15 10:26:35.000000000 +0200 +++ new/yast2-network-3.1.163/test/udev_test.rb 2016-08-09 18:43:38.000000000 +0200 @@ -53,6 +53,23 @@ end end +describe "#udev_rule_key" do + let(:rule) { ["KERNELS=\"invalid\"", "KERNEL=\"eth*\"", "NAME=\"eth1\""] } + + it "raises ArgumentError if given rule is empty" do + expect { Yast::LanItems.udev_key_value(nil, "KERNEL") } + .to raise_error(ArgumentError, "Rule must not be nil when querying a key value") + end + + it "returns value of the first attribute which matches given key" do + expect(Yast::LanItems.udev_key_value(rule, "KERNEL")).to eql("eth*") + end + + it "returns an empty string if no rule matches" do + expect(Yast::LanItems.udev_key_value(rule, "ATTR{address}")).to eql("") + end +end + describe "NetworkLanUdevInclude#AddToUdevRule" do subject(:udev) { NetworkLanComplexUdev.new } @@ -90,6 +107,9 @@ it "replaces triplet in the rule as requested" do allow(Yast::LanItems) + .to receive(:Items) + .and_return(0 => {}) + allow(Yast::LanItems) .to receive(:getUdevFallback) .and_return( [ @@ -101,12 +121,16 @@ expect(Yast::LanItems).to receive(:SetModified) + # internally used in ReplaceItemUdev, needed to be able to mock its usage + Yast::LanItems.current = 0 + updated_rule = Yast::LanItems.ReplaceItemUdev( "KERNELS", "ATTR{address}", "xx:01:02:03:04:05" ) expect(updated_rule).to include "ATTR{address}==\"xx:01:02:03:04:05\"" + expect(updated_rule).not_to include "KERNELS" end it "do not set modification flag in case of no change" do diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-network-3.1.159/test/yapi_network_test.rb new/yast2-network-3.1.163/test/yapi_network_test.rb --- old/yast2-network-3.1.159/test/yapi_network_test.rb 2016-07-15 10:26:35.000000000 +0200 +++ new/yast2-network-3.1.163/test/yapi_network_test.rb 2016-08-09 18:43:38.000000000 +0200 @@ -274,6 +274,7 @@ end it "returns the correct hash" do + allow(lan_items).to receive(:Items).with(no_args).and_return({}) expect(subject.Read).to eql(config) end end
