summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2015-05-18 17:37:05 +0200
committerThomas Haller <thaller@redhat.com>2015-06-05 16:52:49 +0200
commit39f2b51abb70100f62c42b77e55cf3e386b9c49a (patch)
treef401ee263cc19eaed4b0a3bc6cb696434b0afffa
parent57958b93b62a29053ca0f7d4e2b2844a50627d21 (diff)
downloadNetworkManager-39f2b51abb70100f62c42b77e55cf3e386b9c49a.tar.gz
core: add option to suppress error logging if nm_utils_modprobe() fails
We don't want error logging for nm_platform_link_add() which tries to load the bonding module. Later we will run tests as non-root, where modprobe will fail. Logging an error would break the tests.
-rw-r--r--src/NetworkManagerUtils.c23
-rw-r--r--src/NetworkManagerUtils.h2
-rw-r--r--src/devices/nm-device.c2
-rw-r--r--src/platform/nm-linux-platform.c2
-rw-r--r--src/ppp-manager/nm-ppp-manager.c2
5 files changed, 23 insertions, 8 deletions
diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c
index cc1cef4677..fdaa31cd77 100644
--- a/src/NetworkManagerUtils.c
+++ b/src/NetworkManagerUtils.c
@@ -303,8 +303,19 @@ nm_spawn_process (const char *args, GError **error)
return status;
}
+static const char *
+_trunk_first_line (char *str)
+{
+ char *s;
+
+ s = strchr (str, '\n');
+ if (s)
+ s[0] = '\0';
+ return str;
+}
+
int
-nm_utils_modprobe (GError **error, const char *arg1, ...)
+nm_utils_modprobe (GError **error, gboolean suppress_error_logging, const char *arg1, ...)
{
gs_unref_ptrarray GPtrArray *argv = NULL;
int exit_status;
@@ -312,6 +323,8 @@ nm_utils_modprobe (GError **error, const char *arg1, ...)
#define ARGV_TO_STR(argv) (_log_str ? _log_str : (_log_str = g_strjoinv (" ", (char **) argv->pdata)))
GError *local = NULL;
va_list ap;
+ NMLogLevel llevel = suppress_error_logging ? LOGL_DEBUG : LOGL_ERR;
+ gs_free char *std_out = NULL, *std_err = NULL;
g_return_val_if_fail (!error || !*error, -1);
g_return_val_if_fail (arg1, -1);
@@ -329,12 +342,14 @@ nm_utils_modprobe (GError **error, const char *arg1, ...)
g_ptr_array_add (argv, NULL);
nm_log_dbg (LOGD_CORE, "modprobe: '%s'", ARGV_TO_STR (argv));
- if (!g_spawn_sync (NULL, (char **) argv->pdata, NULL, 0, NULL, NULL, NULL, NULL, &exit_status, &local)) {
- nm_log_err (LOGD_CORE, "modprobe: '%s' failed: %s", ARGV_TO_STR (argv), local->message);
+ if (!g_spawn_sync (NULL, (char **) argv->pdata, NULL, 0, NULL, NULL, &std_out, &std_err, &exit_status, &local)) {
+ nm_log (llevel, LOGD_CORE, "modprobe: '%s' failed: %s", ARGV_TO_STR (argv), local->message);
g_propagate_error (error, local);
return -1;
} else if (exit_status != 0)
- nm_log_err (LOGD_CORE, "modprobe: '%s' exited with error %d", ARGV_TO_STR (argv), exit_status);
+ nm_log (llevel, LOGD_CORE, "modprobe: '%s' exited with error %d%s%s%s%s%s%s", ARGV_TO_STR (argv), exit_status,
+ std_out&&*std_out ? " (" : "", std_out&&*std_out ? _trunk_first_line (std_out) : "", std_out&&*std_out ? ")" : "",
+ std_err&&*std_err ? " (" : "", std_err&&*std_err ? _trunk_first_line (std_err) : "", std_err&&*std_err ? ")" : "");
return exit_status;
}
diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h
index c7b1e13627..7624715264 100644
--- a/src/NetworkManagerUtils.h
+++ b/src/NetworkManagerUtils.h
@@ -51,7 +51,7 @@ nm_utils_ip6_route_metric_normalize (guint32 metric)
int nm_spawn_process (const char *args, GError **error);
-int nm_utils_modprobe (GError **error, const char *arg1, ...) G_GNUC_NULL_TERMINATED;
+int nm_utils_modprobe (GError **error, gboolean suppress_error_loggin, const char *arg1, ...) G_GNUC_NULL_TERMINATED;
/**
* str_if_set:
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index ee767ebcab..9e3a10bf0a 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -5294,7 +5294,7 @@ share_init (void)
}
for (iter = modules; *iter; iter++)
- nm_utils_modprobe (NULL, *iter, NULL);
+ nm_utils_modprobe (NULL, FALSE, *iter, NULL);
return TRUE;
}
diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c
index 3ae29dafab..64f33af5dd 100644
--- a/src/platform/nm-linux-platform.c
+++ b/src/platform/nm-linux-platform.c
@@ -2439,7 +2439,7 @@ link_add (NMPlatform *platform,
* bond0 automatically.
*/
if (!g_file_test ("/sys/class/net/bonding_masters", G_FILE_TEST_EXISTS))
- nm_utils_modprobe (NULL, "bonding", "max_bonds=0", NULL);
+ nm_utils_modprobe (NULL, TRUE, "bonding", "max_bonds=0", NULL);
}
debug ("link: add link '%s' of type '%s' (%d)",
diff --git a/src/ppp-manager/nm-ppp-manager.c b/src/ppp-manager/nm-ppp-manager.c
index d410ebfab9..c13672976f 100644
--- a/src/ppp-manager/nm-ppp-manager.c
+++ b/src/ppp-manager/nm-ppp-manager.c
@@ -1071,7 +1071,7 @@ nm_ppp_manager_start (NMPPPManager *manager,
/* Make sure /dev/ppp exists (bgo #533064) */
if (stat ("/dev/ppp", &st) || !S_ISCHR (st.st_mode))
- nm_utils_modprobe (NULL, "ppp_generic", NULL);
+ nm_utils_modprobe (NULL, FALSE, "ppp_generic", NULL);
connection = nm_act_request_get_connection (req);
g_assert (connection);