pam_pkcs11  0.6.12
scconf.h
Go to the documentation of this file.
1 /*
2  * $Id$
3  *
4  * Copyright (C) 2002
5  * Antti Tapaninen <aet@cc.hut.fi>
6  *
7  * Originally based on source by Timo Sirainen <tss@iki.fi>
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22  */
23 
24 #ifndef _SC_CONF_H
25 #define _SC_CONF_H
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
31 typedef struct _scconf_entry {
32  const char *name;
33  unsigned int type;
34  unsigned int flags;
35  void *parm;
36  void *arg;
37 } scconf_entry;
38 
39 /* Entry flags */
40 #define SCCONF_PRESENT 0x00000001
41 #define SCCONF_MANDATORY 0x00000002
42 #define SCCONF_ALLOC 0x00000004
43 #define SCCONF_ALL_BLOCKS 0x00000008
44 #define SCCONF_VERBOSE 0x00000010 /* For debugging purposes only */
45 
46 /* Entry types */
47 #define SCCONF_CALLBACK 1
48 #define SCCONF_BLOCK 2
49 #define SCCONF_LIST 3
50 
51 #define SCCONF_BOOLEAN 11
52 #define SCCONF_INTEGER 12
53 #define SCCONF_STRING 13
54 
55 typedef struct _scconf_block scconf_block;
56 
57 typedef struct _scconf_list {
58  struct _scconf_list *next;
59  char *data;
60 } scconf_list;
61 
62 #define SCCONF_ITEM_TYPE_COMMENT 0 /* key = NULL, comment */
63 #define SCCONF_ITEM_TYPE_BLOCK 1 /* key = key, block */
64 #define SCCONF_ITEM_TYPE_VALUE 2 /* key = key, list */
65 
66 typedef struct _scconf_item {
67  struct _scconf_item *next;
68  int type;
69  char *key;
70  union {
71  char *comment;
74  } value;
75 } scconf_item;
76 
77 struct _scconf_block {
81 };
82 
83 typedef struct {
84  char *filename;
85  int debug;
87  char *errmsg;
89 
90 /* Allocate scconf_context
91  * The filename can be NULL
92  */
93 extern scconf_context *scconf_new(const char *filename);
94 
95 /* Free scconf_context
96  */
97 extern void scconf_free(scconf_context * config);
98 
99 /* Parse configuration
100  * Returns 1 = ok, 0 = error, -1 = error opening config file
101  */
102 extern int scconf_parse(scconf_context * config);
103 
104 /* Parse a static configuration string
105  * Returns 1 = ok, 0 = error
106  */
107 extern int scconf_parse_string(scconf_context * config, const char *string);
108 
109 /* Parse entries
110  */
111 extern int scconf_parse_entries(const scconf_context * config, const scconf_block * block, scconf_entry * entry);
112 
113 /* Write config to a file
114  * If the filename is NULL, use the config->filename
115  * Returns 0 = ok, else = errno
116  */
117 extern int scconf_write(scconf_context * config, const char *filename);
118 
119 /* Write configuration entries to block
120  */
121 extern int scconf_write_entries(scconf_context * config, scconf_block * block, scconf_entry * entry);
122 
123 /* Find a block by the item_name
124  * If the block is NULL, the root block is used
125  */
126 extern const scconf_block *scconf_find_block(const scconf_context * config, const scconf_block * block, const char *item_name);
127 
128 /* Find blocks by the item_name
129  * If the block is NULL, the root block is used
130  * The key can be used to specify what the blocks first name should be
131  */
132 extern scconf_block **scconf_find_blocks(const scconf_context * config, const scconf_block * block, const char *item_name, const char *key);
133 
134 /* Get a list of values for option
135  */
136 extern const scconf_list *scconf_find_list(const scconf_block * block, const char *option);
137 
138 /* Return the first string of the option
139  * If no option found, return def
140  */
141 extern const char *scconf_get_str(const scconf_block * block, const char *option, const char *def);
142 
143 /* Return the first value of the option as integer
144  * If no option found, return def
145  */
146 extern int scconf_get_int(const scconf_block * block, const char *option, int def);
147 
148 /* Return the first value of the option as boolean
149  * If no option found, return def
150  */
151 extern int scconf_get_bool(const scconf_block * block, const char *option, int def);
152 
153 /* Write value to a block as a string
154  */
155 extern const char *scconf_put_str(scconf_block * block, const char *option, const char *value);
156 
157 /* Write value to a block as an integer
158  */
159 extern int scconf_put_int(scconf_block * block, const char *option, int value);
160 
161 /* Write value to a block as a boolean
162  */
163 extern int scconf_put_bool(scconf_block * block, const char *option, int value);
164 
165 /* Add block structure
166  * If the block is NULL, the root block is used
167  */
168 extern scconf_block *scconf_block_add(scconf_context * config, scconf_block * block, const char *key, const scconf_list *name);
169 
170 /* Copy block structure (recursive)
171  */
172 extern scconf_block *scconf_block_copy(const scconf_block * src, scconf_block ** dst);
173 
174 /* Free block structure (recursive)
175  */
176 extern void scconf_block_destroy(scconf_block * block);
177 
178 /* Add item to block structure
179  * If the block is NULL, the root block is used
180  */
181 extern scconf_item *scconf_item_add(scconf_context * config, scconf_block * block, scconf_item * item, int type, const char *key, const void *data);
182 
183 /* Copy item structure (recursive)
184  */
185 extern scconf_item *scconf_item_copy(const scconf_item * src, scconf_item ** dst);
186 
187 /* Free item structure (recursive)
188  */
189 extern void scconf_item_destroy(scconf_item * item);
190 
191 /* Add a new value to the list
192  */
193 extern scconf_list *scconf_list_add(scconf_list ** list, const char *value);
194 
195 /* Copy list structure
196  */
197 extern scconf_list *scconf_list_copy(const scconf_list * src, scconf_list ** dst);
198 
199 /* Free list structure
200  */
201 extern void scconf_list_destroy(scconf_list * list);
202 
203 /* Return the length of an list array
204  */
205 extern int scconf_list_array_length(const scconf_list * list);
206 
207 /* Return the combined length of the strings on all arrays
208  */
209 extern int scconf_list_strings_length(const scconf_list * list);
210 
211 /* Return an allocated string that contains all
212  * the strings in a list separated by the filler
213  * The filler can be NULL
214  */
215 extern char *scconf_list_strdup(const scconf_list * list, const char *filler);
216 
217 /* Returns an allocated array of const char *pointers to
218  * list elements.
219  * Last pointer is NULL
220  * Array must be freed, but pointers to strings belong to scconf_list
221  */
222 extern const char **scconf_list_toarray(const scconf_list * list);
223 
224 #ifdef __cplusplus
225 }
226 #endif
227 #endif
const scconf_list * scconf_find_list(const scconf_block *block, const char *option)
char * scconf_list_strdup(const scconf_list *list, const char *filler)
scconf_item * items
Definition: scconf.h:80
unsigned int type
Definition: scconf.h:33
char * filename
Definition: scconf.h:84
int scconf_write(scconf_context *config, const char *filename)
struct _scconf_list * next
Definition: scconf.h:58
scconf_context * scconf_new(const char *filename)
struct _scconf_entry scconf_entry
scconf_list * scconf_list_add(scconf_list **list, const char *value)
scconf_block * scconf_block_copy(const scconf_block *src, scconf_block **dst)
const char * name
Definition: scconf.h:32
scconf_block * root
Definition: scconf.h:86
int scconf_parse_string(scconf_context *config, const char *string)
scconf_block * scconf_block_add(scconf_context *config, scconf_block *block, const char *key, const scconf_list *name)
int scconf_list_strings_length(const scconf_list *list)
void scconf_item_destroy(scconf_item *item)
int scconf_put_int(scconf_block *block, const char *option, int value)
struct _scconf_item * next
Definition: scconf.h:67
unsigned int flags
Definition: scconf.h:34
scconf_list * name
Definition: scconf.h:79
scconf_item * scconf_item_add(scconf_context *config, scconf_block *block, scconf_item *item, int type, const char *key, const void *data)
void * parm
Definition: scconf.h:35
Definition: scconf.h:31
int scconf_put_bool(scconf_block *block, const char *option, int value)
void scconf_list_destroy(scconf_list *list)
scconf_list * list
Definition: scconf.h:73
union _scconf_item::@1 value
void * arg
Definition: scconf.h:36
int scconf_parse(scconf_context *config)
int scconf_get_int(const scconf_block *block, const char *option, int def)
int scconf_list_array_length(const scconf_list *list)
scconf_block * parent
Definition: scconf.h:78
const char ** scconf_list_toarray(const scconf_list *list)
char * data
Definition: scconf.h:59
char * key
Definition: scconf.h:69
int type
Definition: scconf.h:68
void scconf_free(scconf_context *config)
char * errmsg
Definition: scconf.h:87
struct _scconf_item scconf_item
scconf_block * block
Definition: scconf.h:72
scconf_block ** scconf_find_blocks(const scconf_context *config, const scconf_block *block, const char *item_name, const char *key)
char * comment
Definition: scconf.h:71
const char * scconf_put_str(scconf_block *block, const char *option, const char *value)
scconf_item * scconf_item_copy(const scconf_item *src, scconf_item **dst)
void scconf_block_destroy(scconf_block *block)
struct _scconf_list scconf_list
scconf_list * scconf_list_copy(const scconf_list *src, scconf_list **dst)
int scconf_get_bool(const scconf_block *block, const char *option, int def)
const char * scconf_get_str(const scconf_block *block, const char *option, const char *def)
int scconf_parse_entries(const scconf_context *config, const scconf_block *block, scconf_entry *entry)
int scconf_write_entries(scconf_context *config, scconf_block *block, scconf_entry *entry)
const scconf_block * scconf_find_block(const scconf_context *config, const scconf_block *block, const char *item_name)