All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Zaman <jason@perfinion.com>
To: selinux@tycho.nsa.gov
Subject: [PATCH 1/7] genhomedircon: factor out common replacement code
Date: Sat,  9 Apr 2016 00:05:29 +0800	[thread overview]
Message-ID: <1460131535-15688-2-git-send-email-jason@perfinion.com> (raw)
In-Reply-To: <1460131535-15688-1-git-send-email-jason@perfinion.com>

All the write_*_contexts() methods use exactly the same code.
This splits it off into a common helper function.
---
 libsemanage/src/genhomedircon.c | 69 ++++++++++++++---------------------------
 1 file changed, 23 insertions(+), 46 deletions(-)

diff --git a/libsemanage/src/genhomedircon.c b/libsemanage/src/genhomedircon.c
index 1a9e87e..a95ab16 100644
--- a/libsemanage/src/genhomedircon.c
+++ b/libsemanage/src/genhomedircon.c
@@ -548,23 +548,11 @@ static int check_line(genhomedircon_settings_t * s, Ustr *line)
 	return result;
 }
 
-static int write_home_dir_context(genhomedircon_settings_t * s, FILE * out,
-				  semanage_list_t * tpl, const char *user,
-				  const char *seuser, const char *home,
-				  const char *role_prefix, const char *level)
+static int write_replacements(genhomedircon_settings_t * s, FILE * out,
+			      semanage_list_t * tpl, replacement_pair_t *repl)
 {
-	replacement_pair_t repl[] = {
-		{.search_for = TEMPLATE_SEUSER,.replace_with = seuser},
-		{.search_for = TEMPLATE_HOME_DIR,.replace_with = home},
-		{.search_for = TEMPLATE_ROLE,.replace_with = role_prefix},
-		{.search_for = TEMPLATE_LEVEL,.replace_with = level},
-		{NULL, NULL}
-	};
 	Ustr *line = USTR_NULL;
 
-	if (fprintf(out, COMMENT_USER_HOME_CONTEXT, user) < 0)
-		return STATUS_ERR;
-
 	for (; tpl; tpl = tpl->next) {
 		line = replace_all(tpl->data, repl);
 		if (!line)
@@ -582,6 +570,25 @@ static int write_home_dir_context(genhomedircon_settings_t * s, FILE * out,
 	return STATUS_ERR;
 }
 
+static int write_home_dir_context(genhomedircon_settings_t * s, FILE * out,
+				  semanage_list_t * tpl, const char *user,
+				  const char *seuser, const char *home,
+				  const char *role_prefix, const char *level)
+{
+	replacement_pair_t repl[] = {
+		{.search_for = TEMPLATE_SEUSER,.replace_with = seuser},
+		{.search_for = TEMPLATE_HOME_DIR,.replace_with = home},
+		{.search_for = TEMPLATE_ROLE,.replace_with = role_prefix},
+		{.search_for = TEMPLATE_LEVEL,.replace_with = level},
+		{NULL, NULL}
+	};
+
+	if (fprintf(out, COMMENT_USER_HOME_CONTEXT, user) < 0)
+		return STATUS_ERR;
+
+	return write_replacements(s, out, tpl, repl);
+}
+
 static int write_home_root_context(genhomedircon_settings_t * s, FILE * out,
 				   semanage_list_t * tpl, char *homedir)
 {
@@ -589,23 +596,8 @@ static int write_home_root_context(genhomedircon_settings_t * s, FILE * out,
 		{.search_for = TEMPLATE_HOME_ROOT,.replace_with = homedir},
 		{NULL, NULL}
 	};
-	Ustr *line = USTR_NULL;
-
-	for (; tpl; tpl = tpl->next) {
-		line = replace_all(tpl->data, repl);
-		if (!line)
-			goto fail;
-		if (check_line(s, line) == STATUS_SUCCESS) {
-			if (!ustr_io_putfileline(&line, out))
-				goto fail;
-		}
-		ustr_sc_free(&line);
-	}
-	return STATUS_SUCCESS;
 
-      fail:
-	ustr_sc_free(&line);
-	return STATUS_ERR;
+	return write_replacements(s, out, tpl, repl);
 }
 
 static int write_user_context(genhomedircon_settings_t * s, FILE * out,
@@ -618,23 +610,8 @@ static int write_user_context(genhomedircon_settings_t * s, FILE * out,
 		{.search_for = TEMPLATE_SEUSER,.replace_with = seuser},
 		{NULL, NULL}
 	};
-	Ustr *line = USTR_NULL;
-
-	for (; tpl; tpl = tpl->next) {
-		line = replace_all(tpl->data, repl);
-		if (!line)
-			goto fail;
-		if (check_line(s, line) == STATUS_SUCCESS) {
-			if (!ustr_io_putfileline(&line, out))
-				goto fail;
-		}
-		ustr_sc_free(&line);
-	}
-	return STATUS_SUCCESS;
 
-      fail:
-	ustr_sc_free(&line);
-	return STATUS_ERR;
+	return write_replacements(s, out, tpl, repl);
 }
 
 static int user_sort_func(semanage_user_t ** arg1, semanage_user_t ** arg2)
-- 
2.7.3

  reply	other threads:[~2016-04-08 16:06 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-01  9:36 genhomedircon uid template Jason Zaman
2016-02-01 19:30 ` Stephen Smalley
2016-02-02  6:26   ` Jason Zaman
2016-02-02 13:57     ` Christopher J. PeBenito
2016-02-02 15:03     ` Stephen Smalley
2016-02-02 20:39       ` Nicolas Iooss
2016-04-08 16:05 ` genhomedircon USERID and USERNAME patches Jason Zaman
2016-04-08 16:05   ` Jason Zaman [this message]
2016-04-08 16:05   ` [PATCH 2/7] genhomedircon: move fallback user to genhomedircon_user_entry_t Jason Zaman
2016-04-08 16:05   ` [PATCH 3/7] genhomedircon: rename FALLBACK #defines consistent with struct Jason Zaman
2016-04-08 16:05   ` [PATCH 4/7] genhomedircon: make all write context funcs take user_entry struct Jason Zaman
2016-04-08 16:05   ` [PATCH 5/7] genhomedircon: Add uid and gid to struct user_entry Jason Zaman
2016-04-08 16:05   ` [PATCH 6/7] genhomedircon: make USERID, USERNAME context lists Jason Zaman
2016-04-08 16:05   ` [PATCH 7/7] genhomedircon: write contexts for username and userid Jason Zaman
2016-04-11 21:44   ` genhomedircon USERID and USERNAME patches Nicolas Iooss
2016-04-12  7:56     ` Dominick Grift
2016-04-12 11:51     ` Jason Zaman
2016-04-12 12:57     ` Stephen Smalley
2016-04-12 14:35       ` Christopher J. PeBenito
2016-04-13 16:34         ` Dominick Grift
2016-04-13 17:00           ` Stephen Smalley
2016-04-13 17:10             ` Dominick Grift
2016-04-13 17:18               ` Dominick Grift
2016-04-13 18:25                 ` Dominick Grift
2016-04-17 10:12                   ` Dominick Grift
2016-04-17 12:03                     ` Dominick Grift
2016-04-17 19:19                       ` Dominick Grift
2016-04-18  6:23                         ` Dominick Grift
2016-04-23  6:04   ` genhomedircon USERID and USERNAME patches v2 Jason Zaman
2016-04-23  6:04     ` [PATCH v2 1/8] genhomedircon: factor out common replacement code Jason Zaman
2016-04-23  6:04     ` [PATCH v2 2/8] genhomedircon: move fallback user to genhomedircon_user_entry_t Jason Zaman
2016-04-29 16:54       ` Stephen Smalley
2016-04-29 19:23         ` Jason Zaman
2016-04-29 20:29           ` Stephen Smalley
2016-04-23  6:04     ` [PATCH v2 3/8] genhomedircon: rename FALLBACK #defines consistent with struct Jason Zaman
2016-04-23  6:04     ` [PATCH v2 4/8] genhomedircon: make all write context funcs take user_entry struct Jason Zaman
2016-04-23  6:04     ` [PATCH v2 5/8] genhomedircon: Add uid and gid to struct user_entry Jason Zaman
2016-04-27 17:04       ` Stephen Smalley
2016-04-28 17:53         ` Jason Zaman
2016-04-28 18:13           ` Stephen Smalley
2016-04-29 12:01             ` Jason Zaman
2016-04-23  6:04     ` [PATCH v2 6/8] genhomedircon: make USERID, USERNAME context lists Jason Zaman
2016-04-23  6:04     ` [PATCH v2 7/8] genhomedircon: write contexts for username and userid Jason Zaman
2016-04-23  6:04     ` [PATCH v2 8/8] genhomedircon: fix FALLBACK_NAME regex Jason Zaman
2016-04-26 22:03     ` genhomedircon USERID and USERNAME patches v2 Nicolas Iooss
2016-04-29 12:04   ` [PATCH v3 5/8] genhomedircon: Add uid and gid to struct user_entry Jason Zaman
2016-04-29 20:28     ` Stephen Smalley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1460131535-15688-2-git-send-email-jason@perfinion.com \
    --to=jason@perfinion.com \
    --cc=selinux@tycho.nsa.gov \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.