summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2022-07-21 23:03:19 +0200
committerBastien Nocera <hadess@hadess.net>2022-07-24 19:56:26 +0200
commit952105f3d9580ba1e7a28907769a9cf575ce0c48 (patch)
treea5bd6f2d5bfad558d1d4cceaf97dd041d29c29e3
parent3f96fa3133396d2c821cf665e8ca7a58669d1bfb (diff)
downloadaccountsservice-952105f3d9580ba1e7a28907769a9cf575ce0c48.tar.gz
user: Add helper to allow overriding the root directory
This makes it possible to override the hardcoded USERDIR, ICONDIR, and /etc by setting the ROOTDIR environment variable, if the daemon is running as a normal user.
-rw-r--r--src/util.c47
-rw-r--r--src/util.h6
-rw-r--r--tests/meson.build1
3 files changed, 54 insertions, 0 deletions
diff --git a/src/util.c b/src/util.c
index 54cdd6d..0994401 100644
--- a/src/util.c
+++ b/src/util.c
@@ -397,3 +397,50 @@ verify_locale (const char *locale)
return TRUE;
return verify_xpg_locale (locale);
}
+
+static char *userdir = NULL;
+static char *sysconfdir = NULL;
+static char *icondir = NULL;
+
+void
+init_dirs (void)
+{
+ if (getuid() != 0 &&
+ geteuid() != 0 &&
+ g_getenv ("ROOTDIR") != NULL) {
+ userdir = g_build_filename (g_getenv ("ROOTDIR"), USERDIR, NULL);
+ icondir = g_build_filename (g_getenv ("ROOTDIR"), ICONDIR, NULL);
+ sysconfdir = g_build_filename (g_getenv ("ROOTDIR"), "etc", NULL);
+ return;
+ }
+
+ userdir = g_strdup (USERDIR);
+ icondir = g_strdup (ICONDIR);
+ sysconfdir = g_strdup ("/etc/");
+}
+
+void
+free_dirs (void)
+{
+ g_free (userdir);
+ g_free (icondir);
+ g_free (sysconfdir);
+}
+
+const char *
+get_userdir (void)
+{
+ return userdir;
+}
+
+const char *
+get_sysconfdir (void)
+{
+ return sysconfdir;
+}
+
+const char *
+get_icondir (void)
+{
+ return icondir;
+}
diff --git a/src/util.h b/src/util.h
index 6bb9110..cc46f3e 100644
--- a/src/util.h
+++ b/src/util.h
@@ -42,3 +42,9 @@ gint get_user_groups (const gchar *username,
gboolean verify_xpg_locale (const char *locale);
gboolean verify_locale (const char *locale);
+
+void init_dirs (void);
+void free_dirs (void);
+const char *get_userdir (void);
+const char *get_sysconfdir (void);
+const char *get_icondir (void);
diff --git a/tests/meson.build b/tests/meson.build
index b730270..0a72697 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -85,6 +85,7 @@ deps = [
foreach test_name : tests
exe = executable(test_name, '@0@.c'.format(test_name),
include_directories: top_inc,
+ c_args: cflags,
dependencies: deps)
test(test_name, exe)
endforeach