Convert some more files to GPLv3.
[jra/samba/.git] / source4 / lib / policy / parse_adm.y
1 /* 
2    Unix SMB/CIFS implementation.
3    Copyright (C) 2006 Wilco Baan Hofman <wilco@baanhofman.nl>
4    Copyright (C) 2006 Jelmer Vernooij <jelmer@samba.org>
5    
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10    
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15    
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
20    For more information on the .ADM file format:
21    http://msdn2.microsoft.com/en-us/library/aa372405.aspx 
22 */
23
24 %{
25 #include "config.h"
26 void error_message (const char *format, ...);
27 int yyparse (void);
28 void yyerror (const char *s);
29 extern int yylex (void);
30
31 %}
32
33 %union {
34         char *text;
35         int integer;
36 }
37
38 %token CATEGORY
39 %token CLASS
40 %token CLASS_USER
41 %token CLASS_MACHINE
42 %token POLICY
43 %token KEYNAME
44 %token EXPLAIN
45 %token VALUENAME
46 %token VALUEON VALUEOFF
47 %token PART
48 %token ITEMLIST
49 %token NAME
50 %token VALUE
51 %token NUMERIC EDITTEXT TEXT DROPDOWNLIST CHECKBOX
52 %token MINIMUM MAXIMUM DEFAULT
53 %token END
54 %token ACTIONLIST
55 %token DEL
56 %token SUPPORTED
57 %token <text> LITERAL
58 %token <integer> INTEGER
59 %token <text> LOOKUPLITERAL
60 %token CLIENTEXT
61 %token REQUIRED
62 %token NOSORT
63 %token SPIN
64 %token EQUALS
65 %token STRINGSSECTION
66
67 %start admfile
68
69 %% 
70
71 admfile: classes strings;
72
73 classes: /* empty */ | class classes;
74
75 class: CLASS classvalue categories;
76 classvalue: CLASS_USER|CLASS_MACHINE;
77
78 categories: /* empty */ | category categories;
79
80 string: LITERAL | LOOKUPLITERAL;
81
82 category: CATEGORY string categoryitems END CATEGORY;
83
84 categoryitem: explain | category | policy | keyname;
85 categoryitems: categoryitem categoryitems | /* empty */ ;
86
87 policy: POLICY string policyitems END POLICY;
88 policyitem: explain | keyname | valuename | valueon | valueoff | min | max | defaultvalue | supported | part;
89 policyitems: policyitem policyitems | /* empty */;
90
91 valuetype: NUMERIC | EDITTEXT | TEXT | DROPDOWNLIST | CHECKBOX;
92
93 part: PART string valuetype partitems END PART;
94
95 spin: SPIN INTEGER;
96
97 partitem: keyname | valuename | valueon | valueoff | min | max | defaultvalue | itemlist | REQUIRED | spin;
98 partitems: partitem partitems | /* empty */;
99
100 min: MINIMUM INTEGER;
101 max: MAXIMUM INTEGER;
102 defaultvalue: DEFAULT INTEGER;
103
104 explain: EXPLAIN string;
105 value: DEL | NUMERIC INTEGER;
106
107 valueon: VALUEON value;
108 valueoff: VALUEOFF value;
109
110 valuename: VALUENAME string;
111 keyname: KEYNAME string;
112
113 itemlist: ITEMLIST items END ITEMLIST;
114 itemname: NAME string;
115 itemvalue: VALUE value;
116
117 item: itemname | itemvalue | DEFAULT | actionlist;
118 items: /* empty */ | item items;
119
120 supported: SUPPORTED string;
121
122 actionlist: ACTIONLIST actions END ACTIONLIST;
123 actions: valuename actions | itemvalue actions | /* empty */;
124
125 variable: LITERAL EQUALS LITERAL;
126 variables: variable variables | /* empty */;
127 strings: STRINGSSECTION variables;
128
129 %%
130
131 void
132 yyerror (const char *s)
133 {
134      error_message ("%s\n", s);
135 }
136
137
138