main: create parent directories of NMSTATEDIR with permissions 755
authorThomas Haller <thaller@redhat.com>
Mon, 21 Mar 2016 11:01:26 +0000 (12:01 +0100)
committerThomas Haller <thaller@redhat.com>
Mon, 21 Mar 2016 12:31:40 +0000 (13:31 +0100)
In case, "$PREFIX/var/lib" does not exist, we want to create those
directories with permissions 755, not 700.

src/main-utils.c
src/main-utils.h
src/main.c

index 7385e9c..8624280 100644 (file)
@@ -29,6 +29,7 @@
 #include <sys/stat.h>
 #include <locale.h>
 
+#include <glib/gstdio.h>
 #include <glib-unix.h>
 #include <gmodule.h>
 
@@ -111,6 +112,31 @@ nm_main_utils_write_pidfile (const char *pidfile)
        return success;
 }
 
+void
+nm_main_utils_ensure_statedir ()
+{
+       gs_free char *parent = NULL;
+       int errsv;
+
+       parent = g_path_get_dirname (NMSTATEDIR);
+
+       /* Ensure parent state directories exists */
+       if (   parent
+           && parent[0] == '/'
+           && parent[1] != '\0'
+           && g_mkdir_with_parents (parent, 0755) != 0) {
+               errsv = errno;
+               fprintf (stderr, "Cannot create parents for '%s': %s", NMSTATEDIR, g_strerror (errsv));
+               exit (1);
+       }
+       /* Ensure state directory exists */
+       if (g_mkdir_with_parents (NMSTATEDIR, 0700) != 0) {
+               errsv = errno;
+               fprintf (stderr, "Cannot create '%s': %s", NMSTATEDIR, g_strerror (errsv));
+               exit (1);
+       }
+}
+
 void
 nm_main_utils_ensure_rundir ()
 {
index cae97b5..10ba313 100644 (file)
@@ -27,6 +27,7 @@ void     nm_main_utils_ensure_root (void);
 
 void     nm_main_utils_setup_signals (GMainLoop *main_loop);
 
+void     nm_main_utils_ensure_statedir (void);
 void     nm_main_utils_ensure_rundir (void);
 
 gboolean nm_main_utils_write_pidfile (const char *pidfile);
index bf1224d..4616155 100644 (file)
@@ -309,12 +309,7 @@ main (int argc, char *argv[])
 
        nm_main_utils_ensure_not_running_pidfile (global_opt.pidfile);
 
-       /* Ensure state directory exists */
-       if (g_mkdir_with_parents (NMSTATEDIR, 0700) != 0) {
-               fprintf (stderr, "Cannot create '%s': %s", NMSTATEDIR, strerror (errno));
-               exit (1);
-       }
-
+       nm_main_utils_ensure_statedir ();
        nm_main_utils_ensure_rundir ();
 
        /* When running from the build directory, determine our build directory