summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2008-12-20 14:51:10 +0100
committerDavid Sommerseth <dazo@users.sourceforge.net>2008-12-20 14:51:10 +0100
commit12cf780e59073fcc81cb72174884d2affe6b460e (patch)
tree85e43fdc90256303f3a228187242feae1704b3f2
parent3d9bc3a1f5bbc5457da4a43ce240c30eea9dac74 (diff)
downloadeurephia-12cf780e59073fcc81cb72174884d2affe6b460e.tar.gz
eurephia-12cf780e59073fcc81cb72174884d2affe6b460e.tar.xz
eurephia-12cf780e59073fcc81cb72174884d2affe6b460e.zip
Added eDBadminDeleteCertificate(...) function in SQLite3 driver
-rw-r--r--database/eurephiadb_driver.h2
-rw-r--r--database/sqlite/administration.c54
2 files changed, 53 insertions, 3 deletions
diff --git a/database/eurephiadb_driver.h b/database/eurephiadb_driver.h
index d5135d0..94aee7f 100644
--- a/database/eurephiadb_driver.h
+++ b/database/eurephiadb_driver.h
@@ -115,7 +115,7 @@ int (*eDBadminDeleteUser) (eurephiaCTX *ctx, const int uid, xmlDoc *userinfo);
xmlDoc *(*eDBadminGetCertificateList) (eurephiaCTX *ctx, const char *sortkeys);
xmlDoc *(*eDBadminGetCertificateInfo) (eurephiaCTX *ctx, xmlDoc *searchkey);
int (*eDBadminAddCertificate) (eurephiaCTX *ctx, xmlDoc *certinfo);
-int (*eDBadminDeleteCertificate) (eurephiaCTX *ctx, const int certid, xmlDoc *certinfo);
+int (*eDBadminDeleteCertificate) (eurephiaCTX *ctx, xmlDoc *certinfo);
xmlDoc *(*eDBadminGetLastlog) (eurephiaCTX *ctx, xmlDoc *usersrch, xmlDoc *certsrch, const char *sortkeys);
xmlDoc *(*eDBadminGetAttemptsLog) (eurephiaCTX *ctx, xmlDoc *usersrch, xmlDoc *certsrch, const char *sortkeys);
diff --git a/database/sqlite/administration.c b/database/sqlite/administration.c
index 41417e8..44f9bc1 100644
--- a/database/sqlite/administration.c
+++ b/database/sqlite/administration.c
@@ -884,8 +884,58 @@ int eDBadminAddCertificate(eurephiaCTX *ctx, xmlDoc *certxml) {
return rc;
}
-int eDBadminDeleteCertificate(eurephiaCTX *ctx, const int uid, xmlDoc *crtinf) {
- return 0;
+
+// This functions deletes certificates from openvpn_certificates, based on the
+// following XML document:
+//
+// <eurephia format="1">
+// <delete_certificate>
+// <fieldMapping table="certificates">
+// <digest>{SHA1 digest}</digest>
+// <common_name>{common_name}</common_name>
+// <organisation>{org.}</organisation>
+// <email>{email addr}</email>
+// </fieldMapping>
+// </register_certificate>
+// </eurephia>
+//
+// Not all fieldMapping fields are needed, as you can do bulk removal certificates
+//
+int eDBadminDeleteCertificate(eurephiaCTX *ctx, xmlDoc *certxml) {
+ int rc = 0;
+ xmlNode *crtinf_n = NULL;
+ eDBfieldMap *crtinf_map = NULL;
+ dbresult *res = NULL;
+
+ assert( (ctx != NULL) && (certxml != NULL) );
+
+ crtinf_n = eurephiaXML_getRoot(ctx, certxml, "delete_certificate", 1);
+ if( crtinf_n == NULL ) {
+ eurephia_log(ctx, LOG_ERROR, 0, "Could not find a valid XML for the delete certificate request");
+ return 0;
+ }
+
+ crtinf_n = xmlFindNode(crtinf_n, "fieldMapping");
+ if( crtinf_n == NULL ) {
+ eurephia_log(ctx, LOG_ERROR, 0, "Could not find a valid XML for the delete certificate request");
+ return 0;
+ }
+
+ crtinf_map = eDBxmlMapping(ctx, tbl_sqlite_certs, NULL, crtinf_n);
+ assert( crtinf_map != NULL );
+
+ // Register the certificate
+ res = sqlite_query_mapped(ctx, SQL_DELETE, "DELETE FROM openvpn_certificates", NULL, crtinf_map);
+ if( res == NULL ) {
+ eurephia_log(ctx, LOG_FATAL, 0, "Could not complete the delete certificate request");
+ rc = 0;
+ } else {
+ rc = 1;
+ }
+ sqlite_free_results(res);
+ eDBfreeMapping(crtinf_map);
+
+ return rc;
}
xmlDoc *eDBadminGetLastlog(eurephiaCTX *ctx, xmlDoc *usersrch, xmlDoc *certsrch,