diff options
| author | David Sommerseth <dazo@users.sourceforge.net> | 2009-03-29 21:28:56 +0200 |
|---|---|---|
| committer | David Sommerseth <dazo@users.sourceforge.net> | 2009-03-29 21:28:56 +0200 |
| commit | a74d623da04b214ffa9844d0dd2d5b930deb4161 (patch) | |
| tree | 0a0e81229140fb3895257501f19126d75722943f /database | |
| parent | 2b2d4c802ff93aedc63c86cd882b7ccef57cc6cd (diff) | |
| download | eurephia-a74d623da04b214ffa9844d0dd2d5b930deb4161.tar.gz eurephia-a74d623da04b214ffa9844d0dd2d5b930deb4161.tar.xz eurephia-a74d623da04b214ffa9844d0dd2d5b930deb4161.zip | |
Changed eDBadminGetFirewallProfiles(...) to eDBadminFirewallProfiles(...)
Will try a new approach to use the same entry point for all actions
connected to the firewall profiles configuration.
Diffstat (limited to 'database')
| -rw-r--r-- | database/eurephiadb.c | 2 | ||||
| -rw-r--r-- | database/eurephiadb_driver.h | 2 | ||||
| -rw-r--r-- | database/sqlite/firewalladmin.c | 84 |
3 files changed, 63 insertions, 25 deletions
diff --git a/database/eurephiadb.c b/database/eurephiadb.c index f90abb2..913ca7b 100644 --- a/database/eurephiadb.c +++ b/database/eurephiadb.c @@ -108,7 +108,7 @@ int eDBlink_init(eurephiaCTX *ctx, const char *dbl, const int minver) eDBadminGetAdminAccess = eGetSym(ctx, ctx->eurephia_driver, "eDBadminGetAdminAccess"); eDBadminEditAdminAccess = eGetSym(ctx, ctx->eurephia_driver, "eDBadminEditAdminAccess"); - eDBadminGetFirewallProfiles = eGetSym(ctx, ctx->eurephia_driver, "eDBadminGetFirewallProfiles"); + eDBadminFirewallProfiles = eGetSym(ctx, ctx->eurephia_driver, "eDBadminFirewallProfiles"); eDBadminGetLastlog = eGetSym(ctx, ctx->eurephia_driver, "eDBadminGetLastlog"); eDBadminGetAttemptsLog = eGetSym(ctx, ctx->eurephia_driver, "eDBadminGetAttemptsLog"); diff --git a/database/eurephiadb_driver.h b/database/eurephiadb_driver.h index 5ada459..5e5dd97 100644 --- a/database/eurephiadb_driver.h +++ b/database/eurephiadb_driver.h @@ -123,7 +123,7 @@ int (*eDBadminUpdateUserCertLink) (eurephiaCTX *ctx, xmlDoc *usrcrt_xml); xmlDoc *(*eDBadminGetAdminAccess) (eurephiaCTX *ctx, xmlDoc *srch_xml); int (*eDBadminEditAdminAccess) (eurephiaCTX *ctx, xmlDoc *grant_xml); -xmlDoc *(*eDBadminGetFirewallProfiles) (eurephiaCTX *ctx, xmlDoc *srch); +xmlDoc *(*eDBadminFirewallProfiles) (eurephiaCTX *ctx, xmlDoc *srch); xmlDoc *(*eDBadminGetLastlog) (eurephiaCTX *ctx, xmlDoc *srch, const char *sortkeys); xmlDoc *(*eDBadminGetAttemptsLog) (eurephiaCTX *ctx, xmlDoc *usersrch, xmlDoc *certsrch, const char *sortkeys); diff --git a/database/sqlite/firewalladmin.c b/database/sqlite/firewalladmin.c index 2da930b..5238b40 100644 --- a/database/sqlite/firewalladmin.c +++ b/database/sqlite/firewalladmin.c @@ -51,31 +51,22 @@ void xmlReplaceChars(xmlChar *str, char s, char r); -// The search XML document format is: -// <eurephia format="1"> -// <firewall_profiles mode="get"> -// <fieldMapping table="fwprofiles"> -// <{search field}>{search value}</{search field}> -// </fieldMapping> -// </admin_access> -// </eurehpia> -// -// It can be several search field tags to limit the search even more. -// -xmlDoc *eDBadminGetFirewallProfiles(eurephiaCTX *ctx, xmlDoc *srch) { +xmlDoc *fwadmin_search(eurephiaCTX *ctx, eDBfieldMap *fmap) { dbresult *res = NULL; - eDBfieldMap *fmap = NULL; - int last_acp = -1, i = 0; - xmlDoc *doc = NULL; - xmlNode *root_n = NULL, *fieldmap_n = NULL, *rec_n = NULL, *acg_n = NULL, *acc_n = NULL, *tmp_n = NULL; - - DEBUG(ctx, 20, "Function call: eDBadminGetFirewallProfiles(ctx, {xmlDoc})"); - assert( (ctx != NULL) && (srch != NULL) ); + xmlNode *root_n = NULL, *rec_n = NULL, *acg_n = NULL, *acc_n = NULL, *tmp_n = NULL; + eDBfieldMap *fptr = NULL; + int last_acp = -1, i = 0; - tmp_n = eurephiaXML_getRoot(ctx, srch, "firewall_profiles", 1); - fieldmap_n = xmlFindNode(tmp_n, "fieldMapping"); - fmap = eDBxmlMapping(ctx, tbl_sqlite_openvpnaccesses, NULL, fieldmap_n); + // Add table alias on the certid, to avoid SQL error + for( fptr = fmap; fptr != NULL; fptr = fptr->next) { + switch( fptr->field_id ) { + case FIELD_CERTID: + fptr->table_alias = strdup("c"); + default: + break; + } + } // Query the database for accesses res = sqlite_query_mapped(ctx, SQL_SELECT, @@ -92,7 +83,6 @@ xmlDoc *eDBadminGetFirewallProfiles(eurephiaCTX *ctx, xmlDoc *srch) { eurephia_log(ctx, LOG_ERROR, 0, "Error querying the database for firewall profiles"); return 0; } - eDBfreeMapping(fmap); eurephiaXML_CreateDoc(ctx, 1, "firewall_profiles", &doc, &root_n); xmlNewProp(root_n, (xmlChar *) "mode", (xmlChar *) "profiles"); @@ -134,3 +124,51 @@ xmlDoc *eDBadminGetFirewallProfiles(eurephiaCTX *ctx, xmlDoc *srch) { return doc; } + + +// The search XML document format is: +// <eurephia format="1"> +// <firewall_profiles mode="search"> +// <fieldMapping table="fwprofiles"> +// <{search field}>{search value}</{search field}> +// </fieldMapping> +// </firewall_profiles> +// </eurehpia> +// +// It can be several search field tags to limit the search even more. +// +xmlDoc *eDBadminFirewallProfiles(eurephiaCTX *ctx, xmlDoc *srch) { + eDBfieldMap *fmap = NULL; + char *mode = NULL; + xmlDoc *resxml = NULL; + xmlNode *root_n = NULL, *fieldmap_n = NULL; + + DEBUG(ctx, 20, "Function call: eDBadminFirewallProfiles(ctx, {xmlDoc})"); + assert( (ctx != NULL) && (srch != NULL) ); + + root_n = eurephiaXML_getRoot(ctx, srch, "firewall_profiles", 1); + if( root_n == NULL ) { + eurephia_log(ctx, LOG_CRITICAL, 0, "Invalid XML input."); + return NULL; + } + mode = xmlGetAttrValue(root_n->properties, "mode"); + if( mode == NULL ) { + eurephia_log(ctx, LOG_ERROR, 0, "Missing mode attribute"); + return NULL; + } + + if( strcmp(mode, "search") == 0 ) { + fieldmap_n = xmlFindNode(root_n, "fieldMapping"); + if( fieldmap_n == NULL ) { + eurephia_log(ctx, LOG_ERROR, 0, "Missing fieldMapping"); + } + fmap = eDBxmlMapping(ctx, tbl_sqlite_openvpnaccesses, NULL, fieldmap_n); + resxml = fwadmin_search(ctx, fmap); + eDBfreeMapping(fmap); + } else { + eurephia_log(ctx, LOG_ERROR, 0, "Unknown mode: '%s'", mode); + resxml = NULL; + } + return resxml; +} + |
