Bugzilla will be upgraded to version 5.0. The upgrade date is tentatively scheduled for 2 December 2018, pending final testing and feedback.
Bug 1445414 - ifcfg: try to stay compatible with pykickstart
ifcfg: try to stay compatible with pykickstart
Status: CLOSED ERRATA
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: NetworkManager (Show other bugs)
7.4
Unspecified Unspecified
medium Severity medium
: rc
: ---
Assigned To: Thomas Haller
Desktop QE
:
Depends On:
Blocks:
  Show dependency treegraph
 
Reported: 2017-04-25 11:42 EDT by Lubomir Rintel
Modified: 2017-08-01 05:27 EDT (History)
9 users (show)

See Also:
Fixed In Version: NetworkManager-1.8.0-5.el7
Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2017-08-01 05:27:08 EDT
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)
Proposed patch (5.89 KB, text/plain)
2017-04-26 14:48 EDT, Lubomir Rintel
no flags Details
[patch] ifcfg-rh: treat a wrongly quoted value like empty string (2.00 KB, patch)
2017-04-26 15:56 EDT, Thomas Haller
no flags Details | Diff


External Trackers
Tracker ID Priority Status Summary Last Updated
Red Hat Product Errata RHSA-2017:2299 normal SHIPPED_LIVE Moderate: NetworkManager and libnl3 security, bug fix and enhancement update 2017-08-01 08:40:28 EDT

  None (edit)
Description Lubomir Rintel 2017-04-25 11:42:12 EDT
From https://access.redhat.com/solutions/2868101:

    RHEL7.2 populated /etc/sysconfig/network-scripts/ifcfg-* with PREFIX and several IPv6 variables:

Raw

TYPE="Ethernet"
BOOTPROTO="none"
IPADDR="192.0.2.2"
PREFIX="24"
GATEWAY="192.0.2.1"
DNS1="192.0.2.1"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
UUID="00b141e5-cbda-4624-9cf4-ec21ebbf91fe"
DEVICE="eth0"
ONBOOT="yes"

    A kickstarted RHEL 7.3 system has a much leaner ifcfg configuration:

Raw

# Generated by parse-kickstart
UUID="8b4753fb-c562-4784-bfa7-f44dc6581e73"
DNS1="192.0.2.1"
IPADDR="102.0.2.2"
GATEWAY="192.0.2.1"
NETMASK="255.255.255.0"
BOOTPROTO="static"
DEVICE="eth0"
ONBOOT="yes"
IPV6INIT="yes"


Essentially, we need to stay compatible with the later form.
Comment 2 Lubomir Rintel 2017-04-26 14:48 EDT
Created attachment 1274362 [details]
Proposed patch
Comment 3 Thomas Haller 2017-04-26 15:56 EDT
Created attachment 1274379 [details]
[patch] ifcfg-rh: treat a wrongly quoted value like empty string

src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c:2107:7: error: variable 'tmp' is used uninitialized whenever '||' condition is true [-Werror,-Wsometimes-uninitialized]
                if (!num || g_strcmp0 (svGetValue (ifcfg, "BOOTPROTO", &tmp), "static"))





+         tmp = g_strdup_printf ("%u", prefix);
          svSetValueStr (ifcfg, prefix_key, tmp);
          g_free (tmp);

svSetValueInt64()?


+         tmp = svGetValueStr_cp (ifcfg, netmask_key);
          svUnsetValue (ifcfg, netmask_key);
+         if (tmp) {

the "_cp" stands for copy. Using it is IMO dicouraged, because you can avoid the copy in many cases.

Also, svGetValueStr() swallows empty string (often useful where a shell script might do `test -n`). It seems in this case, the svGetValue() would be more appropriate.


  if (inet_ntop (AF_INET, &prefix, buf, INET_ADDRSTRLEN))

inet_ntop() cannot fail (unless you provide an invalid family, which you do not). Also, more often we use nm_utils_inet4_ntop().





Together with patch 0001-ifcfg-rh-treat-a-wrongly-quoted-value-like-empty-str.patch, it would be:

  if (svGetValue (ifcfg, netmask_key, &tmp) {
      char buf[INET_ADDRSTRLEN];

      g_free (tmp);
      svSetValueStr (ifcfg, netmask_key,
                     nm_utils_inet4_ntop(prefix, buf));
  }
Comment 6 Vladimir Benes 2017-05-24 09:21:14 EDT
This doesn't look good. NETMASK was chnaged to PREFIX. I think this shouldn't happen.

    [root@qe-dell-ovs5-vm-6 NetworkManager]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
    # Generated by parse-kickstart
    UUID="8b4753fb-c562-4784-bfa7-f44dc6581e73"
    DNS1="192.0.2.1"
    IPADDR="102.0.2.2"
    GATEWAY="192.0.2.1"
    NETMASK="255.255.255.0"
    BOOTPROTO="static"
    DEVICE="eth1"
    ONBOOT="yes"
    IPV6INIT="yes"
    [root@qe-dell-ovs5-vm-6 NetworkManager]# nmcli connection modify "System eth1" ipv4.addresses 1.2.3.4/24 ipv4.gateway 1.2.3.1
    [root@qe-dell-ovs5-vm-6 NetworkManager]# nmcli connection show "System eth1"
    connection.id:                          System eth1
    connection.uuid:                        8b4753fb-c562-4784-bfa7-f44dc6581e73
    connection.stable-id:                   --
    connection.interface-name:              eth1
    connection.type:                        802-3-ethernet
    connection.autoconnect:                 yes
    connection.autoconnect-priority:        0
    connection.autoconnect-retries:         -1 (default)
    connection.timestamp:                   1495630993
    connection.read-only:                   no
    connection.permissions:                 --
    connection.zone:                        --
    connection.master:                      --
    connection.slave-type:                  --
    connection.autoconnect-slaves:          -1 (default)
    connection.secondaries:                 --
    connection.gateway-ping-timeout:        0
    connection.metered:                     unknown
    connection.lldp:                        -1 (default)
    802-3-ethernet.port:                    --
    802-3-ethernet.speed:                   0
    802-3-ethernet.duplex:                  --
    802-3-ethernet.auto-negotiate:          no
    802-3-ethernet.mac-address:             --
    802-3-ethernet.cloned-mac-address:      --
    802-3-ethernet.generate-mac-address-mask:--
    802-3-ethernet.mac-address-blacklist:   --
    802-3-ethernet.mtu:                     auto
    802-3-ethernet.s390-subchannels:        --
    802-3-ethernet.s390-nettype:            --
    802-3-ethernet.s390-options:            --
    802-3-ethernet.wake-on-lan:             1 (default)
    802-3-ethernet.wake-on-lan-password:    --
    ipv4.method:                            manual
    ipv4.dns:                               192.0.2.1
    ipv4.dns-search:                        --
    ipv4.dns-options:                       (default)
    ipv4.dns-priority:                      0
    ipv4.addresses:                         1.2.3.4/24
    ipv4.gateway:                           1.2.3.1
    ipv4.routes:                            { ip = 1.2.3.1/32 }
    ipv4.route-metric:                      -1
    ipv4.ignore-auto-routes:                no
    ipv4.ignore-auto-dns:                   no
    ipv4.dhcp-client-id:                    --
    ipv4.dhcp-timeout:                      0
    ipv4.dhcp-send-hostname:                yes
    ipv4.dhcp-hostname:                     --
    ipv4.dhcp-fqdn:                         --
    ipv4.never-default:                     no
    ipv4.may-fail:                          yes
    ipv4.dad-timeout:                       -1 (default)
    ipv6.method:                            auto
    ipv6.dns:                               --
    ipv6.dns-search:                        --
    ipv6.dns-options:                       (default)
    ipv6.dns-priority:                      0
    ipv6.addresses:                         --
    ipv6.gateway:                           --
    ipv6.routes:                            --
    ipv6.route-metric:                      -1
    ipv6.ignore-auto-routes:                no
    ipv6.ignore-auto-dns:                   no
    ipv6.never-default:                     no
    ipv6.may-fail:                          yes
    ipv6.ip6-privacy:                       -1 (unknown)
    ipv6.addr-gen-mode:                     eui64
    ipv6.dhcp-send-hostname:                yes
    ipv6.dhcp-hostname:                     --
    ipv6.token:                             --
    proxy.method:                           none
    proxy.browser-only:                     no
    proxy.pac-url:                          --
    proxy.pac-script:                       --
    [root@qe-dell-ovs5-vm-6 NetworkManager]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
    # Generated by parse-kickstart
    UUID=8b4753fb-c562-4784-bfa7-f44dc6581e73
    DNS1=192.0.2.1
    IPADDR=1.2.3.4
    GATEWAY=1.2.3.1
    BOOTPROTO="static"
    DEVICE=eth1
    ONBOOT=yes
    IPV6INIT=yes
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    PREFIX=24
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    NAME="System eth1"
Comment 7 Thomas Haller 2017-05-25 10:02:29 EDT
fix for master: th/ifcfg-netmask-legacy-rh1445414

(as the code changed there, the backport for nm-1-8 will need some adjustments).

Please review.
Comment 8 Beniamino Galvani 2017-05-30 05:34:17 EDT
(In reply to Thomas Haller from comment #7)
> fix for master: th/ifcfg-netmask-legacy-rh1445414

LGTM
Comment 9 Francesco Giudici 2017-05-30 06:47:31 EDT
Branch LGTM.

In the message of "ifcfg-rh: fix preserving NETMASK key in write_ip4_setting()" commit I would explicitly state that also if we preserve the legacy NETMASK key there we will add also the PREFIX key. That is not clear.

In the same commit message minor typo in the second paragraph:
"That was borken [...]"
"That was bROken [...]"
Comment 10 Thomas Haller 2017-05-30 08:29:10 EDT
fixed upstream:

master: https://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?id=70c0f7965d0d028364a5de05113974880e829706


the branch was partially backported to nm-1-8:
https://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?id=47ebca23e3403243a97c1d0936f023a7c9f1ac38


... and will be fixed in next rhel-7.4 package.
Comment 11 errata-xmlrpc 2017-08-01 05:27:08 EDT
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHSA-2017:2299

Note You need to log in before you can comment on or make changes to this bug.