diff options
author | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-07 21:44:00 +0100 |
---|---|---|
committer | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-07 21:44:00 +0100 |
commit | ef65848a7820fcdb71f8f6f7a01f21300e58acaa (patch) | |
tree | 9757a059864ad4a3d5f80dc7254ff267d6017015 | |
parent | 0180c2a6b2163bd2f703aeeb27931b96dc44a11e (diff) | |
download | eurephia-ef65848a7820fcdb71f8f6f7a01f21300e58acaa.tar.gz eurephia-ef65848a7820fcdb71f8f6f7a01f21300e58acaa.tar.xz eurephia-ef65848a7820fcdb71f8f6f7a01f21300e58acaa.zip |
Added eDBadminGetUserInfo(...) function, to retrieve user info
-rw-r--r-- | database/eurephiadb_driver.h | 2 | ||||
-rw-r--r-- | database/sqlite/administration.c | 48 |
2 files changed, 47 insertions, 3 deletions
diff --git a/database/eurephiadb_driver.h b/database/eurephiadb_driver.h index 2aa2bf6..6e24f29 100644 --- a/database/eurephiadb_driver.h +++ b/database/eurephiadb_driver.h @@ -95,7 +95,7 @@ int (*eDBadminConfigSet) (eurephiaCTX *ctx, const char *key, const char *val); int (*eDBadminConfigDelete) (eurephiaCTX *ctx, const char *key); eurephiaUSERLIST *(*eDBadminGetUserList) (eurephiaCTX *ctx, const char *sortkeys); -eurephiaUSERINFO *(*eDBadminGetUserInfo) (eurephiaCTX *ctx, eurephiaUSERINFO *searchkey); +int (*eDBadminGetUserInfo) (eurephiaCTX *ctx, eurephiaUSERINFO *user); int (*eDBadminAddUser) (eurephiaCTX *ctx, eurephiaUSERINFO *userinfo); int (*eDBadminUpdateUser) (eurephiaCTX *ctx, const int uid, eurephiaUSERINFO *userinfo); int (*eDBadminDeleteUser) (eurephiaCTX *ctx, const int uid, eurephiaUSERINFO *userinfo); diff --git a/database/sqlite/administration.c b/database/sqlite/administration.c index a070c23..4ae6047 100644 --- a/database/sqlite/administration.c +++ b/database/sqlite/administration.c @@ -403,8 +403,52 @@ eurephiaUSERLIST *eDBadminGetUserList(eurephiaCTX *ctx, const char *sortkeys) { return ret; } -eurephiaUSERINFO *eDBadminGetUserInfo(eurephiaCTX *ctx, eurephiaUSERINFO *srchkey) { - return NULL; +// This function will read out all info from eurephiaINFO *user which is not NULL and create a query based +// on these values. If a user is found, the *user struct will be updated with the user found. On success +// the function returns 1. +int eDBadminGetUserInfo(eurephiaCTX *ctx, eurephiaUSERINFO *user) { + dbresult *uinf = NULL; + eDBfieldMap *uinfo_map = NULL; + + uinfo_map = eDBmkMapping_USERINFO(ctx, tbl_sqlite_users, user); + + // Query the database, find the user defined in the user map + uinf = sqlite_query_mapped(ctx, + "SELECT username, activated, deactivated, last_accessed, uid" + " FROM openvpn_users", uinfo_map); + + if( uinf == NULL ) { + eurephia_log(ctx, LOG_ERROR, 0, "Error querying the database for a user"); + return 0; + } + eDBfreeMapping(uinfo_map); + + switch( sqlite_get_numtuples(uinf) ) { + case 0: + sqlite_free_results(uinf); + return 0; // No user found + + case 1: + free_nullsafe(user->username); + free_nullsafe(user->password); + free_nullsafe(user->activated); + free_nullsafe(user->deactivated); + free_nullsafe(user->last_accessed); + + user->username = strdup_nullsafe(sqlite_get_value(uinf, 0, 0)); + user->activated = strdup_nullsafe(sqlite_get_value(uinf, 0, 1)); + user->deactivated = strdup_nullsafe(sqlite_get_value(uinf, 0, 2)); + user->last_accessed = strdup_nullsafe(sqlite_get_value(uinf, 0, 3)); + user->uid = atoi_nullsafe(sqlite_get_value(uinf, 0, 4)); + + sqlite_free_results(uinf); + return 1; + + default: + sqlite_free_results(uinf); + eurephia_log(ctx, LOG_ERROR, 0, "Too many user records was found."); + return 0; + } } int eDBadminAddUser(eurephiaCTX *ctx, eurephiaUSERINFO *usrinf) { |