diff options
author | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-20 14:51:10 +0100 |
---|---|---|
committer | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-20 14:51:10 +0100 |
commit | 12cf780e59073fcc81cb72174884d2affe6b460e (patch) | |
tree | 85e43fdc90256303f3a228187242feae1704b3f2 | |
parent | 3d9bc3a1f5bbc5457da4a43ce240c30eea9dac74 (diff) | |
download | eurephia-12cf780e59073fcc81cb72174884d2affe6b460e.tar.gz eurephia-12cf780e59073fcc81cb72174884d2affe6b460e.tar.xz eurephia-12cf780e59073fcc81cb72174884d2affe6b460e.zip |
Added eDBadminDeleteCertificate(...) function in SQLite3 driver
-rw-r--r-- | database/eurephiadb_driver.h | 2 | ||||
-rw-r--r-- | database/sqlite/administration.c | 54 |
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, |