summaryrefslogtreecommitdiff
path: root/gconfig.txt
diff options
context:
space:
mode:
Diffstat (limited to 'gconfig.txt')
-rw-r--r--gconfig.txt160
1 files changed, 0 insertions, 160 deletions
diff --git a/gconfig.txt b/gconfig.txt
deleted file mode 100644
index ec77545..0000000
--- a/gconfig.txt
+++ /dev/null
@@ -1,160 +0,0 @@
-Documentation for gconfig
-
-gconfig is a configuration file parser. It is generic in the sense that it can
-be used for different applications that need different configuration keywords
-and value. There is however a fixed syntax.
-
-The basic syntax is
-
-option-name value
-or
-option-name = value
-
-where white space is used as delimiters, where you can have any amount of
-whitespace (spaces and tabs) where there is a space above. option-name cannot
-contain spaces. A value can contain spaces if the value is quoted. E.g.
-
-option-name = "option value"
-
-There is a special keyword "include" used for including config files.
-Anywhere in a config file one can write "include filespec". At that
-point the entire content of a file pointed to by filespec will be
-inserted. When the end of the file is read, the config parser will
-continue with whatever is after include. "filespec" can use UNIX
-shell type globbing, so you may do e.g. "include /etc/gconf.d/*" to
-include everything in that directory. This will behave exactly like
-including each of the files separately (in alphabetic order).
-
-In addition to this, one may also group options together into
-blocks, where blocks also have names.
-
-A block has the syntax
-
-type name {
- option-name value
- option-name value
- ...
-}
-
-The application specifies which block types are valid, and which
-option-names and syntaxes can be used for each of the types.
-
-The available option syntaxes (or types) are String, Integer and
-Boolean.
-
-Usually the same option-name cannot be repeated (unless in different
-blocks). For Strings one can specify whether it is allowed or not.
-Also, for strings one can use hex notation for bytes. This works
-similar to URL hex escaping. E.g. a space can be written as "%20".
-
-radsecproxy uses gconfig and shows what is possible. Here is an
-example extracted from getmainconfig() from radsecproxy.
-
-struct gconffile *cfs;
-cfs = openconfigfile(configfile);
- if (!getgenericconfig(&cfs, NULL,
- "ListenUDP", CONF_MSTR, &listenudp,
- "LogDestination", CONF_STR, &logdestination,
- "LogLevel", CONF_LINT, &loglevel,
- "LoopPrevention", CONF_BLN, &loopprevention,
- "Client", CONF_CBK, confclient_cb, NULL,
- NULL
- ))
- debugx(1, DBG_ERR, "configuration error"); /* exit */
- /* parsing successful, continue normal operations */
-
-The arguments to getgenericconfig are as follows. First there is a
-gconffile struct, this is normally a single file, but as we discuss later,
-it can also be a list of files (or data). The second parameter should be
-NULL when not in a block, or the block name if inside one. This is only
-used for logging.
-
-After this one lists all the legal option and block names that are allowed.
-For each option one specifies a name followed by a syntax type and a pointer to
-the variable that will hold the value. The syntax types are CONF_STR for a
-string, CONF_MSTR for string when the option can be used multiple times,
-CONF_LINT for Integer (long int), CONF_BLN for Boolean ("on" or "off"). For
-blocks one uses CONF_CBK followed by a callback function for handling the
-block, and a pointer to userdata that can be passed to the callback. Normally
-this would just be set to NULL.
-
-We will now discuss each of the syntax types and blocks in more detail.
-
-CONF_STR:
-This is used for strings. The value argument must be of type "char **". If
-the option is found in the config, it will allocate memory for a null-terminated
-copy of the string and return a pointer to this. The value argument is not
-modified if the option is not used. In the example above, one might do
-"char *logdestination = NULL". One then uses &logdestination for the
-argument, and can check for NULL to see whether the option was present.
-
-CONF_MSTR:
-This is used for strings when the option can be used multiple times. It
-will return an array of strings in the order they are found in the config.
-The value argument must be of type "char ***". One might do
-"char **listenudp = NULL", and use &listenudp for the argument. Memory will
-be allocated for the array and the strings if the option is used. If no
-options are found, the value is unchanged. If there is at least one value,
-one will get an array of strings, and the last element of the array will be
-set to NULL.
-
-CONF_LINT:
-The option value argument must be of type "long int *". If the option is
-present, the value will be set, else it will not be modified.
-
-CONF_BLN:
-The option value argument must be of type "uint8_t *". It is set to 0 or 1
-for "off" or "on" resp. It is only modified if the option is found.
-
-CONF_CBK:
-This is a block where one uses a call back. Here is an example callback:
-
-int confclient_cb(struct gconffile **cf, void *arg, char *block, char *opt, char
- *val) {
- char *type = NULL, *host = NULL;
- debug(DBG_DBG, "confclient_cb called for %s", block);
- if (!getgenericconfig(cf, block,
- "type", CONF_STR, &type,
- "host", CONF_STR, &host,
- NULL
- ))
- debugx(1, DBG_ERR, "configuration error"); /* exit */
- /* parsing successful, continue normal operations */
-
-Here cf is the list of config files we're using, arg is a pointer to
-userdata (the parameter after the name of the callback function, often
-this is just set to NULL). opt is the type of block, in this case it will
-be set to "client". val is the value of the block. E.g. if the config said
-
-client example {
- type udp
- host 1.2.3.4
-}
-
-then val will be set to "example". The string block is set to
-"client example" (opt val) and is normally just used for logging.
-Note that the opt, val and optval parameters to the callback will all be
-freed when the callback function exits.
-
-The gconffile struct can hold a list of config files. Typically one would
-just use cfs = openconfigfile(configfile) as above. But one can use any of
-the ones below. It can be used to create a new struct (a pointer to NULL),
-or a pointer to an existing struct where new files are pushed (as a stack).
-The latest pushed is used first, when that is used it continues reading
-from the next.
-
-int pushgconfdata(struct gconffile **cf, const char *data);
-This can be used to read config stored in memory
-
-FILE *pushgconfpath(struct gconffile **cf, const char *path);
-Here one specifies a file path (no globbing)
-
-FILE *pushgconfpaths(struct gconffile **cf, const char *path);
-Here one specifies a filespec with globbing. In case of multiple files,
-they are pushed in reverse alphabetical order so that the alphabetically
-first file is read first.
-
-FILE *pushgconffile(struct gconffile **cf, FILE *file, const char *description);
-This can be used for reading config from an already open file descriptor.
-
-For a complete example, see radsecproxy.