summaryrefslogtreecommitdiff
path: root/accel-pptpd/pwdb.c
diff options
context:
space:
mode:
authorKozlov Dmitry <dima@server>2010-10-06 16:55:05 +0400
committerKozlov Dmitry <dima@server>2010-10-06 16:55:05 +0400
commit45b3c9c5bdd896f51f47e29069e3c030ddb17d51 (patch)
treecbec5824ffb2eee20b98ad9892a357304384ff01 /accel-pptpd/pwdb.c
parentba3db9f17477ea4b49c266c5cb50f63f3b074db2 (diff)
parent01ccd98495c9da1e79f7867bf52416b23f20200d (diff)
downloadaccel-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.c56
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);
+}
+