summaryrefslogtreecommitdiffstats
path: root/database/sqlite
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2009-03-22 22:55:20 +0100
committerDavid Sommerseth <dazo@users.sourceforge.net>2009-03-22 22:55:20 +0100
commitfe21ea1986f3527864ed0c25cd2f24265f67fb2a (patch)
tree93a4db5c0bfad812cf3060f990b7a660783f663a /database/sqlite
parentc30851586fc6c8de1a67202dc1c99de855e34f43 (diff)
downloadeurephia-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/sqlite')
-rw-r--r--database/sqlite/administration.c66
-rw-r--r--database/sqlite/fieldmapping.h7
2 files changed, 73 insertions, 0 deletions
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_ */