diff options
| author | David Sommerseth <dazo@users.sourceforge.net> | 2009-03-22 22:55:20 +0100 |
|---|---|---|
| committer | David Sommerseth <dazo@users.sourceforge.net> | 2009-03-22 22:55:20 +0100 |
| commit | fe21ea1986f3527864ed0c25cd2f24265f67fb2a (patch) | |
| tree | 93a4db5c0bfad812cf3060f990b7a660783f663a /database | |
| parent | c30851586fc6c8de1a67202dc1c99de855e34f43 (diff) | |
| download | eurephia-fe21ea1986f3527864ed0c25cd2f24265f67fb2a.tar.gz eurephia-fe21ea1986f3527864ed0c25cd2f24265f67fb2a.tar.xz eurephia-fe21ea1986f3527864ed0c25cd2f24265f67fb2a.zip | |
Added support for editing the eurephia_adminaccess table
Implemented eDBadminEditAdminAccess(...) function in db driver
Diffstat (limited to 'database')
| -rw-r--r-- | database/eurephiadb.c | 2 | ||||
| -rw-r--r-- | database/eurephiadb_driver.h | 2 | ||||
| -rw-r--r-- | database/eurephiadb_mapping.c | 5 | ||||
| -rw-r--r-- | database/eurephiadb_mapping.h | 22 | ||||
| -rw-r--r-- | database/sqlite/administration.c | 66 | ||||
| -rw-r--r-- | database/sqlite/fieldmapping.h | 7 |
6 files changed, 98 insertions, 6 deletions
diff --git a/database/eurephiadb.c b/database/eurephiadb.c index cc13c4f..6dc0b87 100644 --- a/database/eurephiadb.c +++ b/database/eurephiadb.c @@ -115,6 +115,8 @@ int eDBlink_init(eurephiaCTX *ctx, const char *dbl, const int minver) eDBadminGetUserCertsList = eGetSym(ctx, ctx->eurephia_driver, "eDBadminGetUserCertsList"); eDBadminUpdateUserCertLink = eGetSym(ctx, ctx->eurephia_driver, "eDBadminUpdateUserCertLink"); + eDBadminEditAdminAccess = eGetSym(ctx, ctx->eurephia_driver, "eDBadminEditAdminAccess"); + eDBadminGetLastlog = eGetSym(ctx, ctx->eurephia_driver, "eDBadminGetLastlog"); eDBadminGetAttemptsLog = eGetSym(ctx, ctx->eurephia_driver, "eDBadminGetAttemptsLog"); #endif diff --git a/database/eurephiadb_driver.h b/database/eurephiadb_driver.h index acaecfc..a71d827 100644 --- a/database/eurephiadb_driver.h +++ b/database/eurephiadb_driver.h @@ -119,6 +119,8 @@ int (*eDBadminDeleteCertificate) (eurephiaCTX *ctx, xmlDoc *certinfo); xmlDoc *(*eDBadminGetUserCertsList) (eurephiaCTX *ctx, const char *sortkeys); int (*eDBadminUpdateUserCertLink) (eurephiaCTX *ctx, xmlDoc *usrcrt_xml); +int (*eDBadminEditAdminAccess) (eurephiaCTX *ctx, xmlDoc *grant_xml); + xmlDoc *(*eDBadminGetLastlog) (eurephiaCTX *ctx, xmlDoc *usersrch, xmlDoc *certsrch, const char *sortkeys); xmlDoc *(*eDBadminGetAttemptsLog) (eurephiaCTX *ctx, xmlDoc *usersrch, xmlDoc *certsrch, const char *sortkeys); #endif /* HAVE_LIBXML2 */ diff --git a/database/eurephiadb_mapping.c b/database/eurephiadb_mapping.c index 2f8fdea..c9adbca 100644 --- a/database/eurephiadb_mapping.c +++ b/database/eurephiadb_mapping.c @@ -43,6 +43,7 @@ const char *TABLE_NAME[] = { "lastlog", "attempts", "blacklist", + "eurephia_adminaccess", NULL}; // Simple mapping table for session status @@ -105,6 +106,10 @@ eDBfieldMap *eDBgetTableFieldMapping(int table) { case TABLE_USERCERTS: srcmap = eTblMap_usercerts; break; + + case TABLE_EUREPHIAADMACC: + srcmap = eTblMap_eurephiaadmacc; + break; default: return NULL; } diff --git a/database/eurephiadb_mapping.h b/database/eurephiadb_mapping.h index eedb979..c04fbc8 100644 --- a/database/eurephiadb_mapping.h +++ b/database/eurephiadb_mapping.h @@ -38,12 +38,13 @@ typedef struct _eDBfieldMap_s { extern const char *SESSION_STATUS[]; -#define TABLE_USERS 0x01 -#define TABLE_CERTS 0x02 -#define TABLE_USERCERTS 0x03 -#define TABLE_LASTLOG 0x04 -#define TABLE_ATTEMPTS 0x05 -#define TABLE_BLACKLIST 0x06 +#define TABLE_USERS 0x01 +#define TABLE_CERTS 0x02 +#define TABLE_USERCERTS 0x03 +#define TABLE_LASTLOG 0x04 +#define TABLE_ATTEMPTS 0x05 +#define TABLE_BLACKLIST 0x06 +#define TABLE_EUREPHIAADMACC 0x07 #define FIELD_NONE 0x000000 #define FIELD_RECID 0x000001 // Primary keys @@ -73,6 +74,8 @@ extern const char *SESSION_STATUS[]; #define FIELD_ACCPROFILE 0x200000 +#define FIELD_INTERFACE 0x400000 +#define FIELD_ACCESSLVL 0x800000 #ifdef EUREPHIADB_MAPPING_C @@ -138,6 +141,13 @@ static eDBfieldMap eTblMap_usercerts[] = { {0, NULL, FIELD_NONE, ft_UNDEF, NULL, NULL, NULL} }; +static eDBfieldMap eTblMap_eurephiaadmacc[] = { + {TABLE_EUREPHIAADMACC, NULL, FIELD_UID, ft_INT, "uid", NULL, NULL}, + {TABLE_EUREPHIAADMACC, NULL, FIELD_INTERFACE, ft_STRING, "interface", NULL, NULL}, + {TABLE_EUREPHIAADMACC, NULL, FIELD_ACCESSLVL, ft_STRING, "accesslevel", NULL, NULL}, + {0, NULL, FIELD_NONE, ft_UNDEF, NULL, NULL, NULL} +}; + #endif // #ifdef EUREPHIADB_MAPPING_C #ifdef HAVE_LIBXML2 diff --git a/database/sqlite/administration.c b/database/sqlite/administration.c index c8e5a7e..0e66db4 100644 --- a/database/sqlite/administration.c +++ b/database/sqlite/administration.c @@ -1210,6 +1210,72 @@ int eDBadminUpdateUserCertLink(eurephiaCTX *ctx, xmlDoc *usrcrt_xml) { return rc; } +// This functions updates (INSERT/DELETE) records in the eurephia_adminaccess table +// based on information from the following XML document: +// +// <eurephia format="1"> +// <edit_admin_access mode="{grant|revoke}"> +// <fieldMapping table="eurephia_adminaccess"> +// <uid>{user id}</uid> +// <interface>{C|W}</uid> +// <accesslevel>{access level string}</accesslevel> +// </fieldMapping> +// </edit_admin_access> +// </eurephia> +// +// To grant access, all fields are needed. For bulk revokes, some fields can be skipped +// +int eDBadminEditAdminAccess(eurephiaCTX *ctx, xmlDoc *grant_xml) { + dbresult *res = NULL; + xmlNode *grant_n = NULL, *fmap_n = NULL; + eDBfieldMap *grant_m = NULL; + char *mode = NULL; + int rc = 0; + + DEBUG(ctx, 20, "Function call: eDBadminEditAdminAccess(ctx, xmlDoc)"); + assert( (ctx != NULL) && (grant_xml != NULL) ); + + grant_n = eurephiaXML_getRoot(ctx, grant_xml, "edit_admin_access", 1); + if( grant_n == NULL ) { + eurephia_log(ctx, LOG_ERROR, 0, "Could not find a valid XML for the user-certs link request"); + return 0; + } + mode = xmlGetAttrValue(grant_n->properties, "mode"); + if( mode == NULL ) { + eurephia_log(ctx, LOG_ERROR, 0, "Invalid edit admin access request (1)."); + return 0; + } + + fmap_n = xmlFindNode(grant_n, "fieldMapping"); + if( fmap_n == NULL ) { + eurephia_log(ctx, LOG_ERROR, 0, "Invalid edit admin access request (2)."); + return 0; + } + + grant_m = eDBxmlMapping(ctx, tbl_sqlite_eurephiaadmacc, NULL, fmap_n); + assert(grant_m != NULL); + + if( strcmp(mode, "grant") == 0 ) { + res = sqlite_query_mapped(ctx, SQL_INSERT, "INSERT INTO eurephia_adminaccess", + grant_m, NULL, NULL); + rc = res->last_insert_id; + } else if( strcmp(mode, "revoke") == 0 ) { + res = sqlite_query_mapped(ctx, SQL_DELETE, "DELETE FROM eurephia_adminaccess", + NULL, grant_m, NULL); + rc = 1; + } + + if( res == NULL ) { + eurephia_log(ctx, LOG_ERROR, 0, "Failed to update admin access"); + rc = -1; + } else { + sqlite_free_results(res); + } + eDBfreeMapping(grant_m); + + return rc; +} + xmlDoc *eDBadminGetLastlog(eurephiaCTX *ctx, xmlDoc *usersrch, xmlDoc *certsrch, const char *sortkeys) diff --git a/database/sqlite/fieldmapping.h b/database/sqlite/fieldmapping.h index 64d66c4..fb8a97c 100644 --- a/database/sqlite/fieldmapping.h +++ b/database/sqlite/fieldmapping.h @@ -52,4 +52,11 @@ static eDBfieldMap tbl_sqlite_usercerts[] = { {0, NULL, FIELD_NONE, ft_UNDEF, NULL, NULL, NULL} }; +static eDBfieldMap tbl_sqlite_eurephiaadmacc[] = { + {TABLE_EUREPHIAADMACC, NULL, FIELD_UID, ft_INT, "uid", NULL, NULL}, + {TABLE_EUREPHIAADMACC, NULL, FIELD_INTERFACE, ft_STRING, "interface", NULL, NULL}, + {TABLE_EUREPHIAADMACC, NULL, FIELD_ACCESSLVL, ft_STRING, "access", NULL, NULL}, + {0, NULL, FIELD_NONE, ft_UNDEF, NULL, NULL, NULL} +}; + #endif /* !FIELDMAPPING_H_ */ |
