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 /database/sqlite | |
| parent | 0180c2a6b2163bd2f703aeeb27931b96dc44a11e (diff) | |
| download | eurephia-ef65848a7820fcdb71f8f6f7a01f21300e58acaa.tar.gz eurephia-ef65848a7820fcdb71f8f6f7a01f21300e58acaa.tar.xz eurephia-ef65848a7820fcdb71f8f6f7a01f21300e58acaa.zip | |
Added eDBadminGetUserInfo(...) function, to retrieve user info
Diffstat (limited to 'database/sqlite')
| -rw-r--r-- | database/sqlite/administration.c | 48 |
1 files changed, 46 insertions, 2 deletions
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) { |
