diff options
-rw-r--r-- | src/NetworkManagerUtils.c | 10 | ||||
-rw-r--r-- | src/dns-manager/nm-dns-manager.c | 13 |
2 files changed, 20 insertions, 3 deletions
diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c index 5c9c0e20f3..dd17f7d275 100644 --- a/src/NetworkManagerUtils.c +++ b/src/NetworkManagerUtils.c @@ -154,6 +154,7 @@ nm_utils_ip6_address_clear_host_address (struct in6_addr *dst, const struct in6_ int nm_spawn_process (const char *args, GError **error) { + GError *local = NULL; gint num_args; char **argv = NULL; int status = -1; @@ -161,11 +162,16 @@ nm_spawn_process (const char *args, GError **error) g_return_val_if_fail (args != NULL, -1); g_return_val_if_fail (!error || !*error, -1); - if (g_shell_parse_argv (args, &num_args, &argv, error)) { - g_spawn_sync ("/", argv, NULL, 0, NULL, NULL, NULL, NULL, &status, error); + if (g_shell_parse_argv (args, &num_args, &argv, &local)) { + g_spawn_sync ("/", argv, NULL, 0, NULL, NULL, NULL, NULL, &status, &local); g_strfreev (argv); } + if (local) { + nm_log_warn (LOGD_CORE, "could not spawn process '%s': %s", args, local->message); + g_propagate_error (error, local); + } + return status; } diff --git a/src/dns-manager/nm-dns-manager.c b/src/dns-manager/nm-dns-manager.c index 00834cbb49..3dcc6da633 100644 --- a/src/dns-manager/nm-dns-manager.c +++ b/src/dns-manager/nm-dns-manager.c @@ -398,6 +398,7 @@ dispatch_resolvconf (char **searches, char *cmd; FILE *f; gboolean retval = FALSE; + int errnosv, err; if (!g_file_test (RESOLVCONF_PATH, G_FILE_TEST_IS_EXECUTABLE)) { g_set_error_literal (error, @@ -419,7 +420,17 @@ dispatch_resolvconf (char **searches, g_strerror (errno)); else { retval = write_resolv_conf (f, searches, nameservers, error); - (void) pclose (f); + /* Ignore pclose() failure; can't do anything about it */ + err = pclose (f); + if (err < 0) { + errnosv = errno; + g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errnosv), + "Failed to close pipe to resolvconf: %d", errnosv); + retval = FALSE; + } else if (ret > 0) { + nm_log_warn (LOGD_DNS, "resolvconf failed with status %d", ret); + retval = FALSE; + } } } else { cmd = g_strconcat (RESOLVCONF_PATH, " -d ", "NetworkManager", NULL); |