[debian-edu-commits] debian-edu/upstream/ 01/01: Adjust parser for collected information to handle the new ifconfig output format (Closes: #832342).

Petter Reinholdtsen pere at moszumanska.debian.org
Sat Nov 26 17:03:49 UTC 2016


This is an automated email from the git hooks/post-receive script.

pere pushed a commit to branch master
in repository sitesummary.

commit 73b95020cb796d845e81487bbd83ec582e9ea9e1
Author: Petter Reinholdtsen <pere at hungry.com>
Date:   Sat Nov 26 18:03:24 2016 +0100

    Adjust parser for collected information to handle the new ifconfig output format (Closes: #832342).
---
 SiteSummary.pm    | 90 ++++++++++++++++++++++++++++++-------------------------
 debian/changelog  |  7 +++++
 sitesummary-nodes | 12 +++++++-
 3 files changed, 68 insertions(+), 41 deletions(-)

diff --git a/SiteSummary.pm b/SiteSummary.pm
index e9f2a93..3d13334 100644
--- a/SiteSummary.pm
+++ b/SiteSummary.pm
@@ -123,12 +123,13 @@ sub get_hostclass {
 sub get_primary_ip_address {
     my $hostid = shift;
     my $path = get_filepath_current($hostid, "/system/ifconfig-a");
-    # XXX Not properly implemented, just pick the first IP
+    # XXX Not properly implemented, just pick the first non-local IP
     my $ip;
     if (open (FILE, $path)) {
         while(<FILE>) {
             chomp;
-            if (m/inet addr:(\S+)\s+/) {
+            if ((m/inet addr:(\S+)\s+/ || m/\s*inet\s+(\S+)\s+/)
+                && "127.0.0.1" ne $1) {
                 $ip = $1;
                 last;
             }
@@ -142,22 +143,47 @@ sub get_primary_ip_address {
 
 #
 # Return all MAC addresses
-sub get_macaddresses {
-    my $hostid = shift;
-    my $path = get_filepath_current($hostid, "/system/ifconfig-a");
-    if (open (FILE, $path)) {
-        my @macs;
-        while(<FILE>) {
-            chomp;
-            if (m/Link encap:Ethernet\s+HWaddr (\S+)\s+/) {
-                push(@macs, $1);
+sub get_macaddresses_from_ifconfig {
+    my $ifconfigoutput = shift;
+    my %macs;
+    open(IFCONFIG, $ifconfigoutput) || return ();
+    my $line = "";
+    while (<IFCONFIG>) {
+        chomp;
+        if (m/^(\w+)\s+Link encap:Ethernet  HWaddr (\S+)/) {
+            # Old ifconfig format
+            $macs{$1} = $2;
+            while (<IFCONFIG>) {
+                chomp;
+                last if (/^\s*$/);
+            }
+        } elsif (m/flags=/) {
+            # New ifconfig format
+            my $line = $_;
+            while (<IFCONFIG>) {
+                chomp;
+                $line .= $_;
+                last if (/^\s*$/);
+            }
+            if ($line =~ m/^(\S+): .+\sether\s+(\S+)\s/) {
+                $macs{$1} = $2;
             }
         }
-        close(FILE);
-        return @macs;
-    } else {
-        return undef;
     }
+    close (IFCONFIG);
+    my $if = (sort keys %macs)[0];
+    my $mac = $macs{$if};
+    return lc("$mac");
+
+    return undef;
+}
+
+#
+# Return all MAC addresses
+sub get_macaddresses {
+    my $hostid = shift;
+    my $path = get_filepath_current($hostid, "/system/ifconfig-a");
+    return get_macaddresses_from_ifconfig($path);
 }
 
 # Return current default route used on host
@@ -177,22 +203,13 @@ sub get_default_route {
 }
 
 #
-# Return the IP address on the primary network interface
+# Return the MAC address on the primary network interface
 #
 sub get_primary_macaddress {
     my $hostid = shift;
     my $path = get_filepath_current($hostid, "/system/ifconfig-a");
-    # XXX Not properly implemented, just pick the first MAC after
-    # sorting alphabetically.
-    if (open (FILE, $path)) {
-        my @macs;
-        while(<FILE>) {
-            chomp;
-            if (m/Link encap:Ethernet\s+HWaddr (\S+)\s+/) {
-                push(@macs, $1);
-            }
-        }
-        close(FILE);
+    my @macs = get_macaddresses_from_ifconfig($path);
+    if (@macs) {
         return (sort @macs)[0];
     } else {
         return undef;
@@ -207,20 +224,13 @@ sub get_primary_macaddress {
 #
 sub get_unique_ether_id {
     my $ifconfigoutput = shift;
-    my $eth0mac;
-    my $eth1mac;
-    my $eth2mac;
-    open(IFCONFIG, $ifconfigoutput) || return undef;
-    while (<IFCONFIG>) {
-        chomp;
-        $eth0mac = $1 if (m/^eth0\s+Link encap:Ethernet  HWaddr (\S+)/);
-        $eth1mac = $1 if (m/^eth1\s+Link encap:Ethernet  HWaddr (\S+)/);
-        $eth2mac = $1 if (m/^eth2\s+Link encap:Ethernet  HWaddr (\S+)/);
+    my @macs = get_macaddresses_from_ifconfig($ifconfigoutput);
+    if (@macs) {
+        my $mac = (sort @macs)[0];
+        return lc("ether-$mac");
+    } else {
+        return undef;
     }
-    close (IFCONFIG);
-    #print STDERR "MAC: $eth0mac\n";
-    my $mac = $eth0mac || $eth1mac || $eth2mac || "unknown";
-    return lc("ether-$mac");
 }
 
 #
diff --git a/debian/changelog b/debian/changelog
index 4b5b4c3..3943ed9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+sitesummary (0.1.25+nmu1) UNRELEASED; urgency=medium
+
+  * Adjust parser for collected information to handle the new ifconfig
+    output format (Closes: #832342).
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sat, 26 Nov 2016 17:31:59 +0100
+
 sitesummary (0.1.25) unstable; urgency=medium
 
   [ Wolfgang Schweer ]
diff --git a/sitesummary-nodes b/sitesummary-nodes
index a889fe7..a554fa9 100755
--- a/sitesummary-nodes
+++ b/sitesummary-nodes
@@ -145,7 +145,17 @@ sub is_remote_nagios_client {
 sub get_switch_info {
     my $hostid = shift;
     my %switch = ();
-    for my $if (qw(eth0 eth1)) {
+    my $ifconfigoutput = get_filepath_current($hostid, "/system/ifconfig-a");
+    my %ifs;
+    open(IFCONFIG, $ifconfigoutput) || return ();
+    while (<IFCONFIG>) {
+        chomp;
+        $ifs{$1} = 1
+            if (m/^(\w+)\s+Link encap:Ethernet  HWaddr (\S+)/
+                || m/^(\w+): flags=\S+<UP,BROADCAST/);
+    }
+    close (IFCONFIG);
+    for my $if (sort keys %ifs) {
         my $path = get_filepath_current($hostid, "/system/cdpr.$if");
         my ($id, $addr);
         if (open(my $fh, $path)) {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-edu/upstream/sitesummary.git



More information about the debian-edu-commits mailing list