diff options
Diffstat (limited to 'database/sqlite/administration.c')
| -rw-r--r-- | database/sqlite/administration.c | 22 |
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; } |
