summaryrefslogtreecommitdiffstats
path: root/bus/config-parser.c
diff options
context:
space:
mode:
authorMatt McCutchen <matt@mattmccutchen.net>2008-11-10 08:55:27 -0500
committerColin Walters <walters@verbum.org>2009-01-06 18:20:13 -0500
commit6663d1dd35f94717209cd6fca86045bca853ef79 (patch)
tree116860d652ea821fe147e302db6e9cb4fa91c024 /bus/config-parser.c
parent9928648f16afd45078fb93116b6529a7dcca80dc (diff)
Bug 18446: Keep umask for session bus
Signed-off-by: Colin Walters <walters@verbum.org>
Diffstat (limited to 'bus/config-parser.c')
-rw-r--r--bus/config-parser.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/bus/config-parser.c b/bus/config-parser.c
index a8de3ff3..38ce8a1d 100644
--- a/bus/config-parser.c
+++ b/bus/config-parser.c
@@ -112,6 +112,7 @@ struct BusConfigParser
unsigned int fork : 1; /**< TRUE to fork into daemon mode */
unsigned int syslog : 1; /**< TRUE to enable syslog */
+ unsigned int keep_umask : 1; /**< TRUE to keep original umask when forking */
unsigned int is_toplevel : 1; /**< FALSE if we are a sub-config-file inside another one */
};
@@ -308,6 +309,9 @@ merge_included (BusConfigParser *parser,
if (included->fork)
parser->fork = TRUE;
+ if (included->keep_umask)
+ parser->keep_umask = TRUE;
+
if (included->pidfile != NULL)
{
dbus_free (parser->pidfile);
@@ -710,11 +714,26 @@ start_busconfig_child (BusConfigParser *parser,
BUS_SET_OOM (error);
return FALSE;
}
-
+
parser->syslog = TRUE;
return TRUE;
}
+ else if (element_type == ELEMENT_KEEP_UMASK)
+ {
+ if (!check_no_attributes (parser, "keep_umask", attribute_names, attribute_values, error))
+ return FALSE;
+
+ if (push_element (parser, ELEMENT_KEEP_UMASK) == NULL)
+ {
+ BUS_SET_OOM (error);
+ return FALSE;
+ }
+
+ parser->keep_umask = TRUE;
+
+ return TRUE;
+ }
else if (element_type == ELEMENT_PIDFILE)
{
if (!check_no_attributes (parser, "pidfile", attribute_names, attribute_values, error))
@@ -1970,6 +1989,7 @@ bus_config_parser_end_element (BusConfigParser *parser,
case ELEMENT_DENY:
case ELEMENT_FORK:
case ELEMENT_SYSLOG:
+ case ELEMENT_KEEP_UMASK:
case ELEMENT_SELINUX:
case ELEMENT_ASSOCIATE:
case ELEMENT_STANDARD_SESSION_SERVICEDIRS:
@@ -2256,6 +2276,7 @@ bus_config_parser_content (BusConfigParser *parser,
case ELEMENT_DENY:
case ELEMENT_FORK:
case ELEMENT_SYSLOG:
+ case ELEMENT_KEEP_UMASK:
case ELEMENT_STANDARD_SESSION_SERVICEDIRS:
case ELEMENT_STANDARD_SYSTEM_SERVICEDIRS:
case ELEMENT_SELINUX:
@@ -2584,6 +2605,12 @@ bus_config_parser_get_syslog (BusConfigParser *parser)
return parser->syslog;
}
+dbus_bool_t
+bus_config_parser_get_keep_umask (BusConfigParser *parser)
+{
+ return parser->keep_umask;
+}
+
const char *
bus_config_parser_get_pidfile (BusConfigParser *parser)
{
@@ -2977,6 +3004,9 @@ config_parsers_equal (const BusConfigParser *a,
if (! bools_equal (a->fork, b->fork))
return FALSE;
+ if (! bools_equal (a->keep_umask, b->keep_umask))
+ return FALSE;
+
if (! bools_equal (a->is_toplevel, b->is_toplevel))
return FALSE;