diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c index cc1cef467..fdaa31cd7 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 c7b1e1362..762471526 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 ee767ebca..9e3a10bf0 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 3ae29dafa..64f33af5d 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 d410ebfab..c13672976 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);