Sisyphus repositório
Última atualização: 1 outubro 2023 | SRPMs: 18631 | Visitas: 37880092
en ru br
ALT Linux repositórios
S:3.2-alt2
5.0: 1.10.9-alt1
4.1: 1.10.9-alt1

Group :: Sistema/Bibliotecas
RPM: libsemanage

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs e FR  Repocop 

Patch: alt-extra-homedirs.patch
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;
 		}
 
projeto & código: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
mantenedor atual: Michael Shigorin
mantenedor da tradução: Fernando Martini aka fmartini © 2009