1dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes/* config-parser-common.c  Common defines and routines for config file parsing
3dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes *
4dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes * Copyright (C) 2007 Red Hat, Inc.
5dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes *
6dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes * Licensed under the Academic Free License version 2.1
7dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes *
8dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes * This program is free software; you can redistribute it and/or modify
9dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes * it under the terms of the GNU General Public License as published by
10dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes * the Free Software Foundation; either version 2 of the License, or
11dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes * (at your option) any later version.
12dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes *
13dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes * This program is distributed in the hope that it will be useful,
14dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes * but WITHOUT ANY WARRANTY; without even the implied warranty of
15dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes * GNU General Public License for more details.
17dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes *
18dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes * You should have received a copy of the GNU General Public License
19dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes * along with this program; if not, write to the Free Software
205baf2f856a9c6625993234855b07680da1c8916fTobias Mueller * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
21dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes *
22dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes */
23dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes
24dbecdeabb20e0ce11121819c63373f0afba57c58Marcus Brinkmann#include <config.h>
25dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes#include <dbus/dbus-internals.h>
26dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes#include <string.h>
27dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes
28dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes#include "config-parser-common.h"
29dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes#include "utils.h"
30dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes
31dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard HughesElementType
32dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughesbus_config_parser_element_name_to_type (const char *name)
33dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes{
34dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  if (strcmp (name, "none") == 0)
35dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
36dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_NONE;
37dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
38dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "busconfig") == 0)
39dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
40dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_BUSCONFIG;
41dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
42dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "user") == 0)
43dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
44dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_USER;
45dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
46dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "auth") == 0)
47dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
48dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_AUTH;
49dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
50dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "type") == 0)
51dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
52dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_TYPE;
53dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
54dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "fork") == 0)
55dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
56dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_FORK;
57dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
58dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "pidfile") == 0)
59dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
60dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_PIDFILE;
61dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
62dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "listen") == 0)
63dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
64dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_LISTEN;
65dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
66dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "auth") == 0)
67dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
68dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_AUTH;
69dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
70dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "allow") == 0)
71dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
72dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_ALLOW;
73dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
74dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "deny") == 0)
75dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
76dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_DENY;
77dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
78dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "servicehelper") == 0)
79dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
80dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_SERVICEHELPER;
81dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
82dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "includedir") == 0)
83dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
84dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_INCLUDEDIR;
85dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
86dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "standard_session_servicedirs") == 0)
87dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
88dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_STANDARD_SESSION_SERVICEDIRS;
89dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
90dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "standard_system_servicedirs") == 0)
91dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
92dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_STANDARD_SYSTEM_SERVICEDIRS;
93dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
94dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "servicedir") == 0)
95dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
96dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_SERVICEDIR;
97dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
98dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "include") == 0)
99dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
100dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_INCLUDE;
101dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
102dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "policy") == 0)
103dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
104dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_POLICY;
105dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
106dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "limit") == 0)
107dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
108dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_LIMIT;
109dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
110dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "selinux") == 0)
111dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
112dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_SELINUX;
113dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
114dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  else if (strcmp (name, "associate") == 0)
115dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
116dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return ELEMENT_ASSOCIATE;
117dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
118bb2a464067c6843320f367b590b0e4cb00225e50Colin Walters  else if (strcmp (name, "syslog") == 0)
119bb2a464067c6843320f367b590b0e4cb00225e50Colin Walters    {
120bb2a464067c6843320f367b590b0e4cb00225e50Colin Walters      return ELEMENT_SYSLOG;
121bb2a464067c6843320f367b590b0e4cb00225e50Colin Walters    }
1226663d1dd35f94717209cd6fca86045bca853ef79Matt McCutchen  else if (strcmp (name, "keep_umask") == 0)
1236663d1dd35f94717209cd6fca86045bca853ef79Matt McCutchen    {
1246663d1dd35f94717209cd6fca86045bca853ef79Matt McCutchen      return ELEMENT_KEEP_UMASK;
1256663d1dd35f94717209cd6fca86045bca853ef79Matt McCutchen    }
12607a4ad4b04702fc384b324e5f902a5b2279b0c25Dennis Kaarsemaker  else if (strcmp (name, "allow_anonymous") == 0)
12707a4ad4b04702fc384b324e5f902a5b2279b0c25Dennis Kaarsemaker    {
12807a4ad4b04702fc384b324e5f902a5b2279b0c25Dennis Kaarsemaker      return ELEMENT_ALLOW_ANONYMOUS;
12907a4ad4b04702fc384b324e5f902a5b2279b0c25Dennis Kaarsemaker    }
130dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  return ELEMENT_NONE;
131dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes}
132dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes
133dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughesconst char*
134dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughesbus_config_parser_element_type_to_name (ElementType type)
135dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes{
136dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  switch (type)
137dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    {
138dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_NONE:
139dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return NULL;
140dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_BUSCONFIG:
141dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "busconfig";
142dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_INCLUDE:
143dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "include";
144dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_USER:
145dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "user";
146dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_LISTEN:
147dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "listen";
148dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_AUTH:
149dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "auth";
150dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_POLICY:
151dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "policy";
152dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_LIMIT:
153dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "limit";
154dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_ALLOW:
155dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "allow";
156dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_DENY:
157dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "deny";
158dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_FORK:
159dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "fork";
160dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_PIDFILE:
161dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "pidfile";
162dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_STANDARD_SESSION_SERVICEDIRS:
163dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "standard_session_servicedirs";
164dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_STANDARD_SYSTEM_SERVICEDIRS:
165dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "standard_system_servicedirs";
166dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_SERVICEDIR:
167dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "servicedir";
168dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_SERVICEHELPER:
169dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "servicehelper";
170dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_INCLUDEDIR:
171dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "includedir";
172dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_TYPE:
173dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "type";
174dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_SELINUX:
175dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "selinux";
176dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    case ELEMENT_ASSOCIATE:
177dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes      return "associate";
178bb2a464067c6843320f367b590b0e4cb00225e50Colin Walters    case ELEMENT_SYSLOG:
179bb2a464067c6843320f367b590b0e4cb00225e50Colin Walters      return "syslog";
1806663d1dd35f94717209cd6fca86045bca853ef79Matt McCutchen    case ELEMENT_KEEP_UMASK:
1816663d1dd35f94717209cd6fca86045bca853ef79Matt McCutchen      return "keep_umask";
18207a4ad4b04702fc384b324e5f902a5b2279b0c25Dennis Kaarsemaker    case ELEMENT_ALLOW_ANONYMOUS:
18307a4ad4b04702fc384b324e5f902a5b2279b0c25Dennis Kaarsemaker      return "allow_anonymous";
184dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes    }
185dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes
186dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  _dbus_assert_not_reached ("bad element type");
187dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes
188dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes  return NULL;
189dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes}
190dd8f96b8af8e079bc0292375cfd5da9625b7b5ddRichard Hughes
191