Group :: Sistema/Bibliotecas
RPM: libsemanage
Main Changelog Spec Patches Sources Download Gear Bugs e FR Repocop
Patch: alt-extra-homedirs.patch
Download
Download
diff --git a/src/genhomedircon.c b/src/genhomedircon.c
index 1aea839..d6fddfe 100644
--- a/src/genhomedircon.c
+++ b/src/genhomedircon.c
@@ -55,6 +55,8 @@
#define PATH_DEFAULT_HOME "/home"
#define PATH_EXPORT_HOME "/export/home"
#define PATH_ETC_LOGIN_DEFS "/etc/login.defs"
+#define PATH_SRV_HOME "/srv/home"
+#define PATH_VAR_SRV_HOME "/var/srv/home"
/* other paths */
#define PATH_SHELLS_FILE "/etc/shells"
@@ -275,6 +277,15 @@ done:
return retval;
}
+static int push_extra_homedirs(semanage_list_t **phomedir_list, const char *path)
+{
+ struct stat buf;
+
+ if (!lstat(path, &buf) && S_ISDIR(buf.st_mode))
+ return semanage_list_push(phomedir_list, path);
+ return 0;
+}
+
static semanage_list_t *get_home_dirs(genhomedircon_settings_t * s)
{
semanage_list_t *homedir_list = NULL;
@@ -310,13 +321,14 @@ static semanage_list_t *get_home_dirs(genhomedircon_settings_t * s)
}
}
- if (!stat(PATH_EXPORT_HOME, &buf)) {
- if (S_ISDIR(buf.st_mode)) {
- if (semanage_list_push(&homedir_list, PATH_EXPORT_HOME)) {
- goto fail;
- }
- }
- }
+ if (push_extra_homedirs(&homedir_list, PATH_EXPORT_HOME))
+ goto fail;
+
+ if (push_extra_homedirs(&homedir_list, PATH_SRV_HOME))
+ goto fail;
+
+ if (push_extra_homedirs(&homedir_list, PATH_VAR_SRV_HOME))
+ goto fail;
if (!(s->usepasswd))
return homedir_list;
@@ -610,12 +622,13 @@ static int write_home_root_context(genhomedircon_settings_t * s, FILE * out,
static int write_user_context(genhomedircon_settings_t * s, FILE * out,
semanage_list_t * tpl, const char *user,
- const char *seuser, const char *role_prefix)
+ const char *seuser, const char *role_prefix, const char *level)
{
replacement_pair_t repl[] = {
{.search_for = TEMPLATE_USER,.replace_with = user},
{.search_for = TEMPLATE_ROLE,.replace_with = role_prefix},
{.search_for = TEMPLATE_SEUSER,.replace_with = seuser},
+ {.search_for = TEMPLATE_LEVEL,.replace_with = level},
{NULL, NULL}
};
Ustr *line = USTR_NULL;
@@ -945,7 +958,7 @@ static int write_gen_home_dir_context(genhomedircon_settings_t * s, FILE * out,
users->prefix, users->level))
goto err;
if (write_user_context(s, out, user_context_tpl, users->name,
- users->sename, users->prefix))
+ users->sename, users->prefix, users->level))
goto err;
}
@@ -1031,7 +1044,7 @@ static int write_context_file(genhomedircon_settings_t * s, FILE * out)
if (user_context_tpl) {
if (write_user_context(s, out, user_context_tpl,
".*", s->fallback_user,
- s->fallback_user_prefix) != STATUS_SUCCESS) {
+ s->fallback_user_prefix, s->fallback_user_level) != STATUS_SUCCESS) {
retval = STATUS_ERR;
goto done;
}