Super User's BSD Cross Reference: /OpenBSD/usr.sbin/ldapd/schema.h

1 /* $OpenBSD: schema.h,v 1.7 2010年11月04日 15:35:00 martinh Exp $ */
2
3 /*
4 * Copyright (c) 2010 Martin Hedenfalk <martinh@openbsd.org>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19#ifndef _schema_h_
20#define _schema_h_
21
22#define OBJ_NAME(obj) ((obj)->names ? SLIST_FIRST((obj)->names)->name : \
23 (obj)->oid)
24#define ATTR_NAME(at) OBJ_NAME(at)
25
26 enum usage {
27 USAGE_USER_APP,
28 USAGE_DIR_OP, /* operational attribute */
29 USAGE_DIST_OP, /* operational attribute */
30 USAGE_DSA_OP /* operational attribute */
31};
32
33 enum match_rule_type {
34 MATCH_EQUALITY,
35 MATCH_ORDERING,
36 MATCH_SUBSTR,
37};
38
39 struct name {
40 SLIST_ENTRY(name) next;
41 char *name;
42};
43 SLIST_HEAD(name_list, name);
44
45 struct schema;
46 struct syntax {
47 char *oid;
48 char *desc;
49 int (*is_valid)(struct schema *schema, char *value,
50 size_t len);
51};
52
53 struct match_rule
54{
55 char *oid;
56 char *name;
57 enum match_rule_type type;
58 int (*prepare)(char *value, size_t len);
59 const char *syntax_oid;
60 const char **alt_syntax_oids;
61};
62
63 struct attr_type {
64 RB_ENTRY(attr_type) link;
65 char *oid;
66 struct name_list *names;
67 char *desc;
68 int obsolete;
69 struct attr_type *sup;
70 const struct match_rule *equality;
71 const struct match_rule *ordering;
72 const struct match_rule *substr;
73 const struct syntax *syntax;
74 int single;
75 int collective;
76 int immutable; /* no-user-modification */
77 enum usage usage;
78};
79 RB_HEAD(attr_type_tree, attr_type);
80 RB_PROTOTYPE(attr_type_tree, attr_type, link, attr_oid_cmp);
81
82 struct attr_ptr {
83 SLIST_ENTRY(attr_ptr) next;
84 struct attr_type *attr_type;
85};
86 SLIST_HEAD(attr_list, attr_ptr);
87
88 enum object_kind {
89 KIND_ABSTRACT,
90 KIND_STRUCTURAL,
91 KIND_AUXILIARY
92};
93
94 struct object;
95 struct obj_ptr {
96 SLIST_ENTRY(obj_ptr) next;
97 struct object *object;
98};
99 SLIST_HEAD(obj_list, obj_ptr);
100
101 struct object {
102 RB_ENTRY(object) link;
103 char *oid;
104 struct name_list *names;
105 char *desc;
106 int obsolete;
107 struct obj_list *sup;
108 enum object_kind kind;
109 struct attr_list *must;
110 struct attr_list *may;
111};
112 RB_HEAD(object_tree, object);
113 RB_PROTOTYPE(object_tree, object, link, obj_oid_cmp);
114
115 struct oidname {
116 RB_ENTRY(oidname) link;
117 const char *on_name;
118#define on_attr_type on_ptr.ou_attr_type
119#define on_object on_ptr.ou_object
120 union {
121 struct attr_type *ou_attr_type;
122 struct object *ou_object;
123 } on_ptr;
124};
125 RB_HEAD(oidname_tree, oidname);
126 RB_PROTOTYPE(oidname_tree, oidname, link, oidname_cmp);
127
128 struct symoid {
129 RB_ENTRY(symoid) link;
130 char *name; /* symbolic name */
131 char *oid;
132};
133 RB_HEAD(symoid_tree, symoid);
134 RB_PROTOTYPE(symoid_tree, symoid, link, symoid_cmp);
135
136#define SCHEMA_MAXPUSHBACK 128
137
138 struct schema
139{
140 struct attr_type_tree attr_types;
141 struct oidname_tree attr_names;
142 struct object_tree objects;
143 struct oidname_tree object_names;
144 struct symoid_tree symbolic_oids;
145
146 FILE *fp;
147 const char *filename;
148 char pushback_buffer[SCHEMA_MAXPUSHBACK];
149 int pushback_index;
150 int lineno;
151 int error;
152};
153
154 struct schema *schema_new(void);
155 int schema_parse(struct schema *schema,
156 const char *filename);
157 int schema_dump_object(struct object *obj,
158 char *buf, size_t size);
159 int schema_dump_attribute(struct attr_type *obj,
160 char *buf, size_t size);
161 int schema_dump_match_rule(struct match_rule *mr,
162 char *buf, size_t size);
163
164 struct attr_type *lookup_attribute_by_oid(struct schema *schema, char *oid);
165 struct attr_type *lookup_attribute_by_name(struct schema *schema, char *name);
166 struct attr_type *lookup_attribute(struct schema *schema, char *oid_or_name);
167 struct object *lookup_object_by_oid(struct schema *schema, char *oid);
168 struct object *lookup_object_by_name(struct schema *schema, char *name);
169 struct object *lookup_object(struct schema *schema, char *oid_or_name);
170 char *lookup_symbolic_oid(struct schema *schema, char *name);
171 int is_oidstr(const char *oidstr);
172
173 /* syntax.c */
174 const struct syntax *syntax_lookup(const char *oid);
175
176 /* matching.c */
177 extern struct match_rule match_rules[];
178 extern int num_match_rules;
179 const struct match_rule *match_rule_lookup(const char *oid);
180
181#endif
182
183 

AltStyle によって変換されたページ (->オリジナル) /