summaryrefslogtreecommitdiffstats
path: root/database
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
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')
-rw-r--r--database/eurephiadb.c2
-rw-r--r--database/eurephiadb_driver.h2
-rw-r--r--database/eurephiadb_mapping.c5
-rw-r--r--database/eurephiadb_mapping.h22
-rw-r--r--database/sqlite/administration.c66
-rw-r--r--database/sqlite/fieldmapping.h7
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_ */