From 44ed933284589134603913b05f55ca55e8c5a566 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Tue, 1 Apr 2003 05:33:01 +0000 Subject: 2003-04-01 Havoc Pennington * dbus/dbus-server.c (dbus_server_set_auth_mechanisms): new function * dbus/dbus-auth.c (_dbus_auth_set_mechanisms): new * dbus/dbus-internals.c (_dbus_dup_string_array): new function * dbus/dbus-sysdeps.c (_dbus_listen_unix_socket): chmod the socket 0777, and unlink any existing socket. * bus/bus.c (bus_context_new): change our UID/GID and fork if the configuration file so specifies; set up auth mechanism restrictions * bus/config-parser.c (bus_config_parser_content): add support for option and fill in code for * bus/system.conf.in: add to default configuration, and limit auth mechanisms to EXTERNAL * doc/config-file.txt (Elements): add * dbus/dbus-sysdeps.c (_dbus_become_daemon): new function (_dbus_change_identity): new function --- bus/config-parser.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 68 insertions(+), 2 deletions(-) (limited to 'bus/config-parser.c') diff --git a/bus/config-parser.c b/bus/config-parser.c index 39239888..dc3cb4d6 100644 --- a/bus/config-parser.c +++ b/bus/config-parser.c @@ -37,7 +37,8 @@ typedef enum ELEMENT_POLICY, ELEMENT_LIMIT, ELEMENT_ALLOW, - ELEMENT_DENY + ELEMENT_DENY, + ELEMENT_FORK } ElementType; typedef struct @@ -84,6 +85,10 @@ struct BusConfigParser char *user; /**< user to run as */ DBusList *listen_on; /**< List of addresses to listen to */ + + DBusList *mechanisms; /**< Auth mechanisms */ + + unsigned int fork : 1; /**< TRUE to fork into daemon mode */ }; static const char* @@ -111,6 +116,8 @@ element_type_to_name (ElementType type) return "allow"; case ELEMENT_DENY: return "deny"; + case ELEMENT_FORK: + return "fork"; } _dbus_assert_not_reached ("bad element type"); @@ -195,9 +202,15 @@ merge_included (BusConfigParser *parser, included->user = NULL; } + if (included->fork) + parser->fork = TRUE; + while ((link = _dbus_list_pop_first_link (&included->listen_on))) _dbus_list_append_link (&parser->listen_on, link); + while ((link = _dbus_list_pop_first_link (&included->mechanisms))) + _dbus_list_append_link (&parser->mechanisms, link); + return TRUE; } @@ -407,6 +420,21 @@ start_busconfig_child (BusConfigParser *parser, return FALSE; } + return TRUE; + } + else if (strcmp (element_name, "fork") == 0) + { + if (!check_no_attributes (parser, "fork", attribute_names, attribute_values, error)) + return FALSE; + + if (push_element (parser, ELEMENT_FORK) == NULL) + { + dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); + return FALSE; + } + + parser->fork = TRUE; + return TRUE; } else if (strcmp (element_name, "listen") == 0) @@ -420,6 +448,19 @@ start_busconfig_child (BusConfigParser *parser, return FALSE; } + return TRUE; + } + else if (strcmp (element_name, "auth") == 0) + { + if (!check_no_attributes (parser, "auth", attribute_names, attribute_values, error)) + return FALSE; + + if (push_element (parser, ELEMENT_AUTH) == NULL) + { + dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); + return FALSE; + } + return TRUE; } else if (strcmp (element_name, "include") == 0) @@ -654,6 +695,7 @@ bus_config_parser_end_element (BusConfigParser *parser, case ELEMENT_LIMIT: case ELEMENT_ALLOW: case ELEMENT_DENY: + case ELEMENT_FORK: break; } @@ -715,6 +757,7 @@ bus_config_parser_content (BusConfigParser *parser, case ELEMENT_LIMIT: case ELEMENT_ALLOW: case ELEMENT_DENY: + case ELEMENT_FORK: if (all_whitespace (content)) return TRUE; else @@ -800,8 +843,19 @@ bus_config_parser_content (BusConfigParser *parser, case ELEMENT_AUTH: { + char *s; + e->had_content = TRUE; - /* FIXME */ + + if (!_dbus_string_copy_data (content, &s)) + goto nomem; + + if (!_dbus_list_append (&parser->mechanisms, + s)) + { + dbus_free (s); + goto nomem; + } } break; } @@ -851,6 +905,18 @@ bus_config_parser_get_addresses (BusConfigParser *parser) return &parser->listen_on; } +DBusList** +bus_config_parser_get_mechanisms (BusConfigParser *parser) +{ + return &parser->mechanisms; +} + +dbus_bool_t +bus_config_parser_get_fork (BusConfigParser *parser) +{ + return parser->fork; +} + #ifdef DBUS_BUILD_TESTS #include -- cgit