diff options
author | Kozlov Dmitry <dima@server> | 2010-10-06 16:55:05 +0400 |
---|---|---|
committer | Kozlov Dmitry <dima@server> | 2010-10-06 16:55:05 +0400 |
commit | 45b3c9c5bdd896f51f47e29069e3c030ddb17d51 (patch) | |
tree | cbec5824ffb2eee20b98ad9892a357304384ff01 /accel-pptpd/pwdb.c | |
parent | ba3db9f17477ea4b49c266c5cb50f63f3b074db2 (diff) | |
parent | 01ccd98495c9da1e79f7867bf52416b23f20200d (diff) | |
download | accel-ppp-45b3c9c5bdd896f51f47e29069e3c030ddb17d51.tar.gz accel-ppp-45b3c9c5bdd896f51f47e29069e3c030ddb17d51.zip |
merged branch accel-pptpd
Diffstat (limited to 'accel-pptpd/pwdb.c')
-rw-r--r-- | accel-pptpd/pwdb.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/accel-pptpd/pwdb.c b/accel-pptpd/pwdb.c new file mode 100644 index 00000000..4c0ab02e --- /dev/null +++ b/accel-pptpd/pwdb.c @@ -0,0 +1,56 @@ +#include <stdlib.h> + +#include "triton.h" + +#include "pwdb.h" + +#include "memdebug.h" + +static LIST_HEAD(pwdb_handlers); + +int __export pwdb_check(struct ppp_t *ppp, const char *username, int type, ...) +{ + struct pwdb_t *pwdb; + int r, res = PWDB_NO_IMPL; + va_list args; + + va_start(args, type); + + list_for_each_entry(pwdb, &pwdb_handlers, entry) { + if (!pwdb->check) + continue; + r = pwdb->check(pwdb, ppp, username, type, args); + if (r == PWDB_NO_IMPL) + continue; + if (r == PWDB_SUCCESS) + return PWDB_SUCCESS; + res = r; + } + + return res; +} +__export char *pwdb_get_passwd(struct ppp_t *ppp, const char *username) +{ + struct pwdb_t *pwdb; + char *r = NULL; + + list_for_each_entry(pwdb, &pwdb_handlers, entry) { + if (!pwdb->get_passwd) + continue; + r = pwdb->get_passwd(pwdb, ppp, username); + if (r) + break; + } + + return r; +} + +void __export pwdb_register(struct pwdb_t *pwdb) +{ + list_add_tail(&pwdb->entry, &pwdb_handlers); +} +void __export pwdb_unregister(struct pwdb_t *pwdb) +{ + list_del(&pwdb->entry); +} + |