[PATCH] config: do not overwrite symlinks when saving config file
Jani Nikula
jani at nikula.org
Sat Mar 2 13:24:02 PST 2013
Use realpath on the config path before writing. If that fails,
fallback to the previous behaviour.
Previously 'notmuch setup' and 'notmuch config set' overwrote the
config file even if it was a symbolic link.
---
notmuch-config.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/notmuch-config.c b/notmuch-config.c
index b5c2066..1e7389f 100644
--- a/notmuch-config.c
+++ b/notmuch-config.c
@@ -461,7 +461,7 @@ int
notmuch_config_save (notmuch_config_t *config)
{
size_t length;
- char *data;
+ char *data, *filename;
GError *error = NULL;
data = g_key_file_to_data (config->key_file, &length, NULL);
@@ -470,14 +470,20 @@ notmuch_config_save (notmuch_config_t *config)
return 1;
}
- if (! g_file_set_contents (config->filename, data, length, &error)) {
+ /* Try not to overwrite symlinks. */
+ filename = realpath (config->filename, NULL);
+
+ if (! g_file_set_contents (filename ? filename : config->filename,
+ data, length, &error)) {
fprintf (stderr, "Error saving configuration to %s: %s\n",
config->filename, error->message);
g_error_free (error);
+ free (filename);
g_free (data);
return 1;
}
+ free (filename);
g_free (data);
return 0;
}
--
1.7.10.4
More information about the notmuch
mailing list