Content-type: text/html
struct config_line *
register_config_handler(const char *filePrefix,
const char *token,
void (*parser)(const char *, char *),
void (*releaser)(void),
const char *usageLine);
struct config_line *
register_premib_handler(const char *filePrefix,
const char *token,
void (*parser)(const char *, char *),
void (*releaser)(void),
const char *usageLine);
void unregister_config_handler(const char *filePrefix,
const char *token);
struct config_line *
register_app_config_handler(const char *token,
void (*parser)(const char *, char *),
void (*releaser)(void),
const char *usageLine);
struct config_line *
register_app_premib_handler(const char *token,
void (*parser)(const char *, char *),
void (*releaser)(void),
const char *usageLine);
void unregister_app_config_handler(const char *token);
void read_config_print_usage(char *lead);
void read_configs(void);
void read_premib_configs(void);
void config_pwarn(const char *string);
void config_perror(const char *string);
The idea is that the calling application is able to register handlers for certain tokens specified in certain types of files. The read_configs() function can then be called to look for all the files that it has registrations for, find the first word on each line, and pass the remainder to the appropriately registered handler.
Handler functions should have the following signature:
The function will be called with two arguments, the first being the token that triggered the call to this function (which would be one of the tokens that the function had been registered for), and the second being the remainder of the configuration file line beyond the white space following the token.
If the parameter releaser passed to register_config_handler is non-NULL, then the function specified is called if and when the configuration files are re-read. This function should free any resources allocated by the token handler function and reset its notion of the configuration to its default. The token handler function will then be called again. No arguments are passed to the resource freeing handler.
The usageLine parameter passed to register_config_handler() and similar calls, is used to display help information when the read_config_print_usage() function is called. This function is used by all of the applications when the -H flag is passed on the command line. It prints a summary of all of the configuration file lines, and the associated files, that the configuration system understands. The usageLine parameter should be a list of arguments expected after the token, and not a lengthy description (which should go into a manual page instead). The lead prefix will be prepended to each line that the function prints to stderr, where it displays its output.
The init_snmp() function should be called before the read_config_print_usage() function is called, so that the library can register its configuration file directives as well for the read_config_print_usage() function to display.
If the init_snmp() function is used, none of the following functions need to be called by the application:
The configuration files read are found by using the colon separated SNMPCONFPATH environment variable (or its default value, which will be /usr/local/etc/snmp, followed by /usr/local/share/snmp, followed by /usr/local/lib/snmp, followed by $HOME/.snmp) and reading in the files found that match both the prefix registered and the two suffixes .conf and .local.conf. The idea behind the two different suffixes is that the first file can be shared (via rdist or an NFS mount) across a large number of machines and the second file can be used to configure local settings for one particular machine. They do not need to be present, and will only be read if found.
The two functions config_pwarn() and config_perror() both take an error string as an argument and print it to stderr along with the file and line number that caused the error. A call to the second function will also force read_configs() to eventually return with an error code indicating to it's calling function that it should abort the operation of the application.