From fe21ea1986f3527864ed0c25cd2f24265f67fb2a Mon Sep 17 00:00:00 2001 From: David Sommerseth Date: Sun, 22 Mar 2009 22:55:20 +0100 Subject: Added support for editing the eurephia_adminaccess table Implemented eDBadminEditAdminAccess(...) function in db driver --- database/sqlite/administration.c | 66 ++++++++++++++++++++++++++++++++++++++++ database/sqlite/fieldmapping.h | 7 +++++ 2 files changed, 73 insertions(+) (limited to 'database/sqlite') 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: +// +// +// +// +// {user id} +// {C|W} +// {access level string} +// +// +// +// +// 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_ */ -- cgit