summaryrefslogtreecommitdiffstats
path: root/database/sqlite/administration.c
diff options
context:
space:
mode:
Diffstat (limited to 'database/sqlite/administration.c')
-rw-r--r--database/sqlite/administration.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/database/sqlite/administration.c b/database/sqlite/administration.c
index 7612c6d..037f52d 100644
--- a/database/sqlite/administration.c
+++ b/database/sqlite/administration.c
@@ -17,7 +17,9 @@
#include <eurephia_values.h>
#include <eurephiadb_session_struct.h>
#include <passwd.h>
+
#include "sqlite.h"
+#include "fieldmapping.h"
#if DRIVERAPIVERSION > 1
/*
@@ -328,28 +330,35 @@ int eDBadminConfigDelete(eurephiaCTX *ctx, const char *key) {
}
eurephiaUSERLIST *eDBadminGetUserList(eurephiaCTX *ctx, const char *sortkeys) {
- eurephiaUSERINFO *list = NULL, *rec = NULL, *last = NULL;
+ eurephiaUSERINFO *rec = NULL, *last = NULL;
eurephiaUSERLIST *ret = NULL;
dbresult *res = NULL;
+ char *dbsort = NULL;
int i = 0;
assert((ctx != NULL) && (ctx->dbc != 0));
+ // Convert the input sort keys to the proper database field names
+ dbsort = eAdminConvertSortKeys(tbl_sqlite_user, sortkeys);
+
+ // Query database for all users
res = sqlite_query(ctx,
"SELECT username, activated, deactivated, last_accessed, uid"
- " FROM openvpn_users"
- "%s", (sortkeys != NULL ? sortkeys : ""));
+ " FROM openvpn_users "
+ "ORDER BY %s", (sortkeys != NULL ? dbsort : "uid"));
if( res == NULL ) {
eurephia_log(ctx, LOG_ERROR, 0, "Error querying the user database");
return NULL;
}
+ // Prepare a list with all users
ret = (eurephiaUSERLIST *) malloc(sizeof(eurephiaUSERLIST)+2);
assert(ret != NULL);
memset(ret, 0, sizeof(eurephiaUSERLIST)+2);
ret->num_users = sqlite_get_numtuples(res);
+ // Register all records
for( i = 0; i < ret->num_users; i++ ) {
rec = eAdminPopulateUSERINFO(
atoi_nullsafe(sqlite_get_value(res, i, 4)), // uid
@@ -359,9 +368,9 @@ eurephiaUSERLIST *eDBadminGetUserList(eurephiaCTX *ctx, const char *sortkeys) {
sqlite_get_value(res, i, 2), // deactivated
sqlite_get_value(res, i, 3) // last accessed
);
- if( list == NULL ) {
- list = rec;
- last = list;
+ if( ret->users == NULL ) {
+ ret->users = rec;
+ last = ret->users;
} else {
last->next = rec;
last = rec;
@@ -369,6 +378,7 @@ eurephiaUSERLIST *eDBadminGetUserList(eurephiaCTX *ctx, const char *sortkeys) {
}
sqlite_free_results(res);
+ // Return a user list
return ret;
}