diff options
-rw-r--r-- | common/eurephia_admin_common.c | 69 | ||||
-rw-r--r-- | common/eurephia_admin_common.h | 92 | ||||
-rw-r--r-- | common/eurephia_admin_struct.h | 7 | ||||
-rw-r--r-- | database/eurephiadb_mapping.c | 41 | ||||
-rw-r--r-- | database/eurephiadb_mapping.h | 1 | ||||
-rw-r--r-- | database/sqlite/CMakeLists.txt | 2 | ||||
-rw-r--r-- | database/sqlite/administration.c | 3 | ||||
-rw-r--r-- | database/sqlite/fieldmapping.h | 15 |
8 files changed, 54 insertions, 176 deletions
diff --git a/common/eurephia_admin_common.c b/common/eurephia_admin_common.c index 8b62779..8a51ca4 100644 --- a/common/eurephia_admin_common.c +++ b/common/eurephia_admin_common.c @@ -27,76 +27,9 @@ #include <passwd.h> #define EUREPHIA_ADMIN_COMMON_C +#include "eurephia_admin_struct.h" #include "eurephia_admin_common.h" -eFieldMap *eAdminGetTableMap(int table) { - eFieldMap *map; - - switch( table ) { - case TABLE_USERS: - map = eSortkeys_user; - break; - - case TABLE_CERTS: - map = eSortkeys_certificates; - break; - - case TABLE_LASTLOG: - map = eSortkeys_lastlog; - - case TABLE_ATTEMPTS: - map = eSortkeys_attempts; - - case TABLE_BLACKLIST: - map = eSortkeys_blacklist; - - default: - map = NULL; - } - return map; -} - - -char *eAdminConvertSortKeys(eFieldMap *tfmap, const char *skeys_str) { - eFieldMap *sk_map = NULL; - int i, j; - char *cp = NULL, *tok = NULL, *delims = ","; - static char sortkeys[8194]; - - if( skeys_str == NULL ) { - return NULL; - } - - // Make sure we have table field map - assert( tfmap != NULL ); - - // Get the correct table mapping for user input - sk_map = eAdminGetTableMap(tfmap[0].tableid); - assert( sk_map != NULL ); - - // Split up the skeys_str (sort keys string) and build up a map - cp = strdup_nullsafe(skeys_str); - tok = strtok(cp, delims); - memset(&sortkeys, 0, 8194); - while( tok != NULL ) { - for( i = 0; sk_map[i].fieldname != NULL; i++ ) { - // If we find the the field in the unified mapping table ... - if( strcmp(tok, sk_map[i].fieldname) == 0 ) { - // look up the proper field name for the current database - for( j = 0; tfmap[j].fieldname != 0; j++ ) { - if( (sk_map[i].sortkeyid & tfmap[j].sortkeyid) == sk_map[i].sortkeyid ) { - strncat(sortkeys, tfmap[j].fieldname, (8192-strlen(sortkeys))); - strcat(sortkeys,","); - } - } - } - } - tok = strtok(NULL, delims); - } - free_nullsafe(cp); - sortkeys[strlen(sortkeys)-1] = '\0'; - return sortkeys; -} eurephiaUSERINFO *eAdminPopulateUSERINFO(int uid, const char *uname, const char *pwd, const char *activated, const char *deactivd, const char *lastacc) diff --git a/common/eurephia_admin_common.h b/common/eurephia_admin_common.h index aa6a989..58bbd96 100644 --- a/common/eurephia_admin_common.h +++ b/common/eurephia_admin_common.h @@ -21,98 +21,6 @@ #ifndef EUREPHIA_ADMIN_COMMON_H_ # define EUREPHIA_ADMIN_COMMON_H_ -#include <eurephia_admin_struct.h> - -#define TABLE_USERS 0x01 -#define TABLE_CERTS 0x02 -#define TABLE_LASTLOG 0x03 -#define TABLE_ATTEMPTS 0x04 -#define TABLE_BLACKLIST 0x05 - -#define SORTKEY_NONE 0x00000 -#define SORTKEY_RECID 0x00001 // Primary keys -#define SORTKEY_UID 0x00002 -#define SORTKEY_CERTID 0x00004 -#define SORTKEY_UNAME 0x00008 -#define SORTKEY_ACTIVATED 0x00010 -#define SORTKEY_DEACTIVATED 0x00020 -#define SORTKEY_LASTACCESS 0x00040 - -#define SORTKEY_CERTDEPTH 0x00080 -#define SORTKEY_CNAME 0x00100 -#define SORTKEY_EMAIL 0x00200 -#define SORTKEY_ORG 0x00400 -#define SORTKEY_REGISTERED 0x00800 - -#define SORTKEY_REMOTEIP 0x01000 -#define SORTKEY_VPNIP 0x02000 -#define SORTKEY_ATTEMPTS 0x04000 -#define SORTKEY_LASTATTEMPT 0x08000 - -#define SORTKEY_SESSTATUS 0x10000 -#define SORTKEY_LOGIN 0x20000 -#define SORTKEY_LOGOUT 0x40000 - -#ifdef EUREPHIA_ADMIN_COMMON_C -eFieldMap eSortkeys_user[] = { - {TABLE_USERS, SORTKEY_RECID, "recid"}, - {TABLE_USERS, SORTKEY_RECID, "uid"}, - {TABLE_USERS, SORTKEY_UNAME, "username"}, - {TABLE_USERS, SORTKEY_ACTIVATED, "activated"}, - {TABLE_USERS, SORTKEY_DEACTIVATED, "deactivated"}, - {TABLE_USERS, SORTKEY_LASTACCESS, "lastaccess"}, - {TABLE_USERS, SORTKEY_NONE, NULL} -}; - -eFieldMap eSortkeys_certificates[] = { - {TABLE_CERTS, SORTKEY_RECID, "recid"}, - {TABLE_CERTS, SORTKEY_RECID, "certid"}, - {TABLE_CERTS, SORTKEY_CERTDEPTH, "depth"}, - {TABLE_CERTS, SORTKEY_CNAME, "name"}, - {TABLE_CERTS, SORTKEY_ORG, "org"}, - {TABLE_CERTS, SORTKEY_EMAIL, "email"}, - {TABLE_CERTS, SORTKEY_REGISTERED, "registered"}, - {TABLE_CERTS, SORTKEY_NONE, NULL} -}; - -eFieldMap eSortkeys_lastlog[] = { - {TABLE_LASTLOG, SORTKEY_UID, "uid"}, - {TABLE_LASTLOG, SORTKEY_CERTID, "certid"}, - {TABLE_LASTLOG, SORTKEY_REMOTEIP, "ip"}, - {TABLE_LASTLOG, SORTKEY_VPNIP, "vpnip"}, - {TABLE_LASTLOG, SORTKEY_SESSTATUS, "status"}, - {TABLE_LASTLOG, SORTKEY_LOGIN, "login"}, - {TABLE_LASTLOG, SORTKEY_LOGOUT, "logout"}, - {TABLE_LASTLOG, SORTKEY_RECID, "recid"}, - {TABLE_LASTLOG, SORTKEY_NONE, NULL} -}; - -eFieldMap eSortkeys_attempts[] = { - {TABLE_ATTEMPTS, SORTKEY_UNAME, "username"}, - {TABLE_ATTEMPTS, SORTKEY_REMOTEIP, "ip"}, - {TABLE_ATTEMPTS, SORTKEY_ATTEMPTS, "attempts"}, - {TABLE_ATTEMPTS, SORTKEY_REGISTERED, "registered"}, - {TABLE_ATTEMPTS, SORTKEY_LASTATTEMPT, "lastattempt"}, - {TABLE_ATTEMPTS, SORTKEY_RECID, "recid"}, - {TABLE_ATTEMPTS, SORTKEY_NONE, NULL} -}; - -eFieldMap eSortkeys_blacklist[] = { - {TABLE_BLACKLIST, SORTKEY_UNAME, "username"}, - {TABLE_BLACKLIST, SORTKEY_REMOTEIP, "ip"}, - {TABLE_BLACKLIST, SORTKEY_REGISTERED, "registered"}, - {TABLE_BLACKLIST, SORTKEY_LASTACCESS, "lastattempt"}, - {TABLE_BLACKLIST, SORTKEY_LASTACCESS, "lastaccessed"}, - {TABLE_BLACKLIST, SORTKEY_RECID, "recid"}, - {TABLE_BLACKLIST, SORTKEY_NONE, NULL} -}; - -#endif // #ifdef EUREPHIA_ADMIN_COMMON_C - - -eFieldMap *eAdminGetTableMap(int table); -char *eAdminConvertSortKeys(eFieldMap *, const char *); - eurephiaUSERINFO *eAdminPopulateUSERINFO(int uid, const char *uname, const char *pwd, const char *activated, const char *deactivd, const char *lastacc); diff --git a/common/eurephia_admin_struct.h b/common/eurephia_admin_struct.h index 9f962bf..5a13a1f 100644 --- a/common/eurephia_admin_struct.h +++ b/common/eurephia_admin_struct.h @@ -71,11 +71,4 @@ typedef struct { int maxlen_header; } eurephiaLOGLIST; - -typedef struct { - int tableid; - long sortkeyid; - char *fieldname; -} eFieldMap; - #endif diff --git a/database/eurephiadb_mapping.c b/database/eurephiadb_mapping.c index f7bd979..a12a863 100644 --- a/database/eurephiadb_mapping.c +++ b/database/eurephiadb_mapping.c @@ -64,3 +64,44 @@ char *eDBgetTableField(eDBfieldMap *dbmap, int field) { } return NULL; } + +char *eDBmkSortKeyString(eDBfieldMap *tfmap, const char *skeys_str) { + eDBfieldMap *sk_map = NULL; + int i, j; + char *cp = NULL, *tok = NULL, *delims = ","; + static char sortkeys[8194]; + + if( skeys_str == NULL ) { + return NULL; + } + + // Make sure we have table field map + assert( tfmap != NULL ); + + // Get the correct table mapping for user input + sk_map = eDBgetTableFieldMapping(tfmap[0].tableid); + assert( sk_map != NULL ); + + // Split up the skeys_str (sort keys string) and build up a map + cp = strdup_nullsafe(skeys_str); + tok = strtok(cp, delims); + memset(&sortkeys, 0, 8194); + while( tok != NULL ) { + for( i = 0; sk_map[i].field_id != FIELD_NONE; i++ ) { + // If we find the the field in the unified mapping table ... + if( strcmp(tok, sk_map[i].field_name) == 0 ) { + // look up the proper field name for the current database + for( j = 0; tfmap[j].field_name != 0; j++ ) { + if( sk_map[i].field_id == tfmap[j].field_id ) { + strncat(sortkeys, tfmap[j].field_name, (8192-strlen(sortkeys)-2)); + strcat(sortkeys,","); + } + } + } + } + tok = strtok(NULL, delims); + } + free_nullsafe(cp); + sortkeys[strlen(sortkeys)-1] = '\0'; + return sortkeys; +} diff --git a/database/eurephiadb_mapping.h b/database/eurephiadb_mapping.h index 1f04e6a..768510b 100644 --- a/database/eurephiadb_mapping.h +++ b/database/eurephiadb_mapping.h @@ -121,5 +121,6 @@ static eDBfieldMap eTblMap_blacklist[] = { #endif // #ifdef EUREPHIADB_MAPPING_C char *eDBgetTableField(eDBfieldMap *dbmap, int field); +char *eDBmkSortKeyString(eDBfieldMap *tfmap, const char *skeys_str); #endif // !EUREPHIADB_MAPPING_H diff --git a/database/sqlite/CMakeLists.txt b/database/sqlite/CMakeLists.txt index f1d5fef..2a4771b 100644 --- a/database/sqlite/CMakeLists.txt +++ b/database/sqlite/CMakeLists.txt @@ -8,10 +8,10 @@ SET(edb_sqlite_SRC administration.c ) SET(COMMON + ../eurephiadb_mapping.c ../../common/eurephia_log.c ../../common/eurephiadb_session_common.c ../../common/eurephia_values.c - ../../common/eurephia_admin_common.c ../../common/passwd.c ../../common/sha512.c ) diff --git a/database/sqlite/administration.c b/database/sqlite/administration.c index 037f52d..8e2c513 100644 --- a/database/sqlite/administration.c +++ b/database/sqlite/administration.c @@ -16,6 +16,7 @@ #include <eurephia_log.h> #include <eurephia_values.h> #include <eurephiadb_session_struct.h> +#include <eurephiadb_mapping.h> #include <passwd.h> #include "sqlite.h" @@ -339,7 +340,7 @@ eurephiaUSERLIST *eDBadminGetUserList(eurephiaCTX *ctx, const char *sortkeys) { assert((ctx != NULL) && (ctx->dbc != 0)); // Convert the input sort keys to the proper database field names - dbsort = eAdminConvertSortKeys(tbl_sqlite_user, sortkeys); + dbsort = eDBmkSortKeyString(tbl_sqlite_users, sortkeys); // Query database for all users res = sqlite_query(ctx, diff --git a/database/sqlite/fieldmapping.h b/database/sqlite/fieldmapping.h index 227b50b..3037f3d 100644 --- a/database/sqlite/fieldmapping.h +++ b/database/sqlite/fieldmapping.h @@ -22,13 +22,14 @@ #ifndef FIELDMAPPING_H_ # define FIELDMAPPING_H_ -eFieldMap tbl_sqlite_user[] = { - {TABLE_USERS, SORTKEY_RECID, "uid"}, - {TABLE_USERS, SORTKEY_UNAME, "username"}, - {TABLE_USERS, SORTKEY_ACTIVATED, "activated"}, - {TABLE_USERS, SORTKEY_DEACTIVATED, "deactivated"}, - {TABLE_USERS, SORTKEY_LASTACCESS, "last_accessed"}, - {TABLE_USERS, SORTKEY_NONE, NULL} +static eDBfieldMap tbl_sqlite_users[] = { + {TABLE_USERS, FIELD_RECID, "uid", NULL, NULL}, + {TABLE_USERS, FIELD_UNAME, "username", NULL, NULL}, + {TABLE_USERS, FIELD_PASSWD, "password", NULL, NULL}, + {TABLE_USERS, FIELD_ACTIVATED, "activated", NULL, NULL}, + {TABLE_USERS, FIELD_DEACTIVATED, "deactivated", NULL, NULL}, + {TABLE_USERS, FIELD_LASTACCESS, "last_accessed", NULL, NULL}, + {TABLE_USERS, FIELD_NONE, NULL, NULL, NULL} }; #endif /* !FIELDMAPPING_H_ */ |