From 17e82f5728d3fc8abd41c816b1c34c506339c7a7 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Tue, 25 Mar 2003 04:45:25 +0000 Subject: add start on config parser files --- bus/config-parser.c | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++ bus/config-parser.h | 55 +++++++++++++++++ 2 files changed, 225 insertions(+) create mode 100644 bus/config-parser.c create mode 100644 bus/config-parser.h diff --git a/bus/config-parser.c b/bus/config-parser.c new file mode 100644 index 00000000..26e52a8b --- /dev/null +++ b/bus/config-parser.c @@ -0,0 +1,170 @@ +/* -*- mode: C; c-file-style: "gnu" -*- */ +/* config-parser.c XML-library-agnostic configuration file parser + * + * Copyright (C) 2003 Red Hat, Inc. + * + * Licensed under the Academic Free License version 1.2 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "config-parser.h" +#include + +typedef enum +{ + ELEMENT_BUSCONFIG, + ELEMENT_INCLUDE, + ELEMENT_USER, + ELEMENT_LISTEN, + ELEMENT_AUTH, + ELEMENT_POLICY, + ELEMENT_LIMIT +} ElementType; + +typedef struct +{ + ElementType type; + + union + { + struct + { + BusConfigParser *parser; + } include; + + struct + { + char *username; + } user; + + struct + { + char *address; + } listen; + + struct + { + char *mechanism; + } auth; + + struct + { + char *context; + char *user; + char *group; + DBusList *rules; + } policy; + + struct + { + int foo; + } limit; + + } d; + +} Element; + +struct BusConfigParser +{ + int refcount; + + DBusList *stack; +}; + +BusConfigParser* +bus_config_parser_new (void) +{ + BusConfigParser *parser; + + parser = dbus_new0 (BusConfigParser, 1); + if (parser == NULL) + return NULL; + + parser->refcount = 1; + + return parser; +} + +void +bus_config_parser_ref (BusConfigParser *parser) +{ + _dbus_assert (parser->refcount > 0); + + parser->refcount += 1; +} + +void +bus_config_parser_unref (BusConfigParser *parser) +{ + _dbus_assert (parser->refcount > 0); + + parser->refcount -= 1; + + if (parser->refcount == 0) + { + + + dbus_free (parser); + } +} + +dbus_bool_t +bus_config_parser_check_doctype (BusConfigParser *parser, + const char *doctype, + DBusError *error) +{ + if (strcmp (doctype, "busconfig") != 0) + { + dbus_set_error (error, + DBUS_ERROR_FAILED, + "Document has the wrong type %s", + doctype); + return FALSE; + } + else + return TRUE; +} + +dbus_bool_t +bus_config_parser_start_element (BusConfigParser *parser, + const char *element_name, + const char **attribute_names, + const char **attribute_values, + DBusError *error) +{ + + +} + +dbus_bool_t +bus_config_parser_end_element (BusConfigParser *parser, + const char *element_name, + DBusError *error) +{ + + +} + +dbus_bool_t +bus_config_parser_content (BusConfigParser *parser, + const DBusString *content, + DBusError *error) +{ + + +} + diff --git a/bus/config-parser.h b/bus/config-parser.h new file mode 100644 index 00000000..371a658c --- /dev/null +++ b/bus/config-parser.h @@ -0,0 +1,55 @@ +/* -*- mode: C; c-file-style: "gnu" -*- */ +/* config-parser.h XML-library-agnostic configuration file parser + * + * Copyright (C) 2003 Red Hat, Inc. + * + * Licensed under the Academic Free License version 1.2 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef BUS_CONFIG_PARSER_H +#define BUS_CONFIG_PARSER_H + +#include + +#include +#include + +/* Whatever XML library we're using just pushes data into this API */ + +typedef struct BusConfigParser BusConfigParser; + +BusConfigParser* bus_config_parser_new (void); +void bus_config_parser_ref (BusConfigParser *parser); +void bus_config_parser_unref (BusConfigParser *parser); +dbus_bool_t bus_config_parser_check_doctype (BusConfigParser *parser, + const char *doctype, + DBusError *error); +dbus_bool_t bus_config_parser_start_element (BusConfigParser *parser, + const char *element_name, + const char **attribute_names, + const char **attribute_values, + DBusError *error); +dbus_bool_t bus_config_parser_end_element (BusConfigParser *parser, + const char *element_name, + DBusError *error); +dbus_bool_t bus_config_parser_content (BusConfigParser *parser, + const DBusString *content, + DBusError *error); + + +#endif /* BUS_CONFIG_PARSER_H */ -- cgit