00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <config.h>
00022 #include <drizzled/plugin/authentication.h>
00023 #include <drizzled/error.h>
00024 #include <drizzled/gettext.h>
00025 #include <drizzled/identifier.h>
00026
00027 #include <vector>
00028
00029 namespace drizzled
00030 {
00031
00032 std::vector<plugin::Authentication *> all_authentication;
00033
00034
00035 bool plugin::Authentication::addPlugin(plugin::Authentication *auth)
00036 {
00037 if (auth != NULL)
00038 all_authentication.push_back(auth);
00039
00040 return false;
00041 }
00042
00043 void plugin::Authentication::removePlugin(plugin::Authentication *auth)
00044 {
00045 if (auth != NULL)
00046 all_authentication.erase(std::find(all_authentication.begin(),
00047 all_authentication.end(),
00048 auth));
00049 }
00050
00051 class AuthenticateBy : public std::unary_function<plugin::Authentication *, bool>
00052 {
00053 const identifier::User &sctx;
00054 const std::string &password;
00055
00056 public:
00057 AuthenticateBy(const identifier::User &sctx_arg, const std::string &password_arg) :
00058 std::unary_function<plugin::Authentication *, bool>(),
00059 sctx(sctx_arg), password(password_arg) {}
00060
00061 inline result_type operator()(argument_type auth)
00062 {
00063 return auth->authenticate(sctx, password);
00064 }
00065 };
00066
00067 bool plugin::Authentication::isAuthenticated(drizzled::identifier::User::const_reference sctx,
00068 const std::string &password)
00069 {
00070
00071 std::vector<plugin::Authentication *>::iterator iter=
00072 std::find_if(all_authentication.begin(), all_authentication.end(),
00073 AuthenticateBy(sctx, password));
00074
00075
00076
00077
00078
00079 if (iter == all_authentication.end())
00080 {
00081 error::access(sctx);
00082
00083 return false;
00084 }
00085
00086 return true;
00087 }
00088
00089 }