Name
libaccdb - The Unified Account Database libaccdb API
libaccdb provides some essential functions for applications wishing to access a user database. It also contains some common used code, such as password generation routines. Applications that wish to use ACCDB must link against it, usually with gcc's -laccdb parameter.
accdb_load() opens a back-end module (module.so and/or module.dll), acquires all necessary symbols and returns them in a malloc()ed struct accdb_module, which is then to be freed with accdb_unload(). In most cases, module will be just be an asterisk, which says to use the default ACCDB back-end, defined in ./vetc/libaccdb/accdb or /etc/libaccdb/accdb, variable DEFAULT_BACKEND. On failure, accdb_load() returns NULL and sets errno to the ones set by system calls, plus EFAULT if no q_open() function in the ACCDB module could be found. ENOENT is returned if no default module was defined.
The back-end interface is discussed in its own chapter. Configuration file parsing
While developing the Vitalnix Suite, I came to a point where I realized I had common used code duplicated in nearly every file that used ACCDB in some way, so I decided to move that code part to ACCDB since it is a central place. Configuration files are based on the key=value scheme, and lines beginning with a hash mark (#) are ignored, as are empty lines and unrecognized keys:
ACCDB provides two (one) function to deal with configuration files. The second is just for handling multiple configuration files at once.
accdb_rconfig() will return >0 to indicate success, or <0 (= errno) to signal an error. accdb_rconfig_pv() will return the number of files successfully parsed. Types for rconfig_opt.type can be:
.callback is called when the corresponding option has been parsed and .callback is not NULL. Since the options can be arranged in any order in the configuration file, you should take care when assuming that other keys/ptrs have already been filled. To start parsing a file, call the accdb_rconfig() function with the corresponding parameters. If you want to read configuration files from different paths, i.e. to build up on default values, you can use accdb_rconfig_pv() like the next code example. (pv = path vector)
The call to accdb_rconfig() will either return 1 for success, 0 for no success (actually 0 is never returned) and -errno for an error. The next call, with pv_a will parse /etc/configfile, etc. (pv from left to right). No value is returned. The call with pv_b will only read the first successful opened file, i.e. if you have both ./configfile and /etc/configfile, only the former is read if it can be opened. Password generation
Password generation is currently limited to create plain text passwords only, filling in the crypted field is currently not available.
accdb_genpw() generates a random password. Depending on flags, it might even produce one to be easily memorized by humans, but still being pronounceable. The method and flags fields are:
|