summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2015-03-09 11:02:33 -0500
committerDan Williams <dcbw@redhat.com>2015-03-09 11:02:33 -0500
commit5a9fac4b91797a5c6c2a117e2691f4e4085b571f (patch)
tree838e93ed6e7e791e68a84873b5a8844732b74dae
parentb905362f56ba53fe664e8b17b122fa0171e2b91d (diff)
downloadNetworkManager-5a9fac4b91797a5c6c2a117e2691f4e4085b571f.tar.gz
fixup! dns: ensure that update_dns() always returns a GError on failure
-rw-r--r--src/NetworkManagerUtils.c10
-rw-r--r--src/dns-manager/nm-dns-manager.c13
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);