summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2008-12-07 21:44:00 +0100
committerDavid Sommerseth <dazo@users.sourceforge.net>2008-12-07 21:44:00 +0100
commitef65848a7820fcdb71f8f6f7a01f21300e58acaa (patch)
tree9757a059864ad4a3d5f80dc7254ff267d6017015
parent0180c2a6b2163bd2f703aeeb27931b96dc44a11e (diff)
downloadeurephia-ef65848a7820fcdb71f8f6f7a01f21300e58acaa.tar.gz
eurephia-ef65848a7820fcdb71f8f6f7a01f21300e58acaa.tar.xz
eurephia-ef65848a7820fcdb71f8f6f7a01f21300e58acaa.zip
Added eDBadminGetUserInfo(...) function, to retrieve user info
-rw-r--r--database/eurephiadb_driver.h2
-rw-r--r--database/sqlite/administration.c48
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) {