diff options
author | David Sommerseth <dazo@users.sourceforge.net> | 2009-09-01 19:07:24 +0200 |
---|---|---|
committer | David Sommerseth <dazo@users.sourceforge.net> | 2009-09-01 19:07:24 +0200 |
commit | 88dcbd1a0b62bde794ab8a56661f2412503574e6 (patch) | |
tree | 0f8ad4c32a5853e6e8f4c7450cd0fa5512428957 /eurephiadm/commands/usercerts.c | |
parent | aec2553a8ff182353804fc498797dfcb8212bd92 (diff) | |
download | eurephia-88dcbd1a0b62bde794ab8a56661f2412503574e6.tar.gz eurephia-88dcbd1a0b62bde794ab8a56661f2412503574e6.tar.xz eurephia-88dcbd1a0b62bde794ab8a56661f2412503574e6.zip |
Modified eurephiadm users and usercerts commands to use the new db API
In regards to modifying usercerts links, make use of the new unified
eDBadminUserCertsLink(...) function.
Diffstat (limited to 'eurephiadm/commands/usercerts.c')
-rw-r--r-- | eurephiadm/commands/usercerts.c | 125 |
1 files changed, 70 insertions, 55 deletions
diff --git a/eurephiadm/commands/usercerts.c b/eurephiadm/commands/usercerts.c index 1fc23a3..2227c25 100644 --- a/eurephiadm/commands/usercerts.c +++ b/eurephiadm/commands/usercerts.c @@ -108,9 +108,9 @@ int help_UserCerts2(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg } int list_usercerts(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int argc, char **argv) { - xmlDoc *list_xml = NULL; + xmlDoc *list_xml = NULL, *srch_xml = NULL; + xmlNode *srch_n = NULL, *fmap_n = NULL; int i = 0; - char *sortkeys = NULL; #ifdef FIREWALL const char *xsltparams[] = { "firewall", "'1'", NULL}; #else @@ -125,11 +125,19 @@ int list_usercerts(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, assert( (ctx != NULL) && (ctx->dbc != NULL) && (ctx->dbc->config != NULL)); + eurephiaXML_CreateDoc(ctx, 1, "usercerts", &srch_xml, &srch_n); + assert( srch_xml != NULL && srch_n != NULL ); + xmlNewProp(srch_n, (xmlChar *) "mode", (xmlChar *) "search"); + + fmap_n = xmlNewChild(srch_n, NULL, (xmlChar *) "fieldMapping", NULL); + xmlNewProp(fmap_n, (xmlChar *) "table", (xmlChar *) "usercerts"); + + // Parse arguments for( i = 1; i < argc; i++ ) { switch( eurephia_getopt(&i, argc, argv, listargs) ) { case 'S': - sortkeys = optargs[0]; + xmlNewChild(srch_n, NULL, (xmlChar *) "sortfields", (xmlChar *)optargs[0]); break; case 'h': @@ -141,7 +149,7 @@ int list_usercerts(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, } } - list_xml = eDBadminGetUserCertsList(ctx, sortkeys); + list_xml = eDBadminUserCertsLink(ctx, srch_xml); if( list_xml == NULL ) { fprintf(stderr, "%s: Error retrieving user/certificate link list\n", MODULE); return 1; @@ -154,9 +162,9 @@ int list_usercerts(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int add_del_usercert(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int argc, char **argv) { - xmlDoc *usercert_xml = NULL; - xmlNode *usercert_n = NULL; - int i = 0, id = 0, rc = 0, actmode = 0; + xmlDoc *usercert_xml = NULL, *resxml = NULL; + xmlNode *usercert_n = NULL, *res_n = NULL; + int i = 0, rc = 0, actmode = 0; char *certid = NULL, *uid = NULL, *uicid = NULL, *actmode_str = NULL, *accessprofile = NULL; e_options addargs[] = { @@ -180,102 +188,109 @@ int add_del_usercert(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cf actmode_str = "deleted"; } + eurephiaXML_CreateDoc(ctx, 1, "usercerts", &usercert_xml, &usercert_n); + assert( (usercert_xml != NULL) && (usercert_n != NULL) ); + + xmlNewProp(usercert_n, (xmlChar *) "mode", (xmlChar *) (actmode == 'D' ? "remove" : "register")); + usercert_n = xmlNewChild(usercert_n, NULL, (xmlChar *) "fieldMapping", NULL); + xmlNewProp(usercert_n, (xmlChar *) "table", (xmlChar *) "usercerts"); + for( i = 1; i < argc; i++ ) { switch( eurephia_getopt(&i, argc, argv, addargs) ) { case 'i': if( atoi_nullsafe(optargs[0]) < 1 ) { fprintf(stderr, "%s: User ID must be a positive number (>0)\n", MODULE); - return 1; + rc = 1; + goto exit; } + xmlNewChild(usercert_n, NULL, (xmlChar *) "uid", (xmlChar *) optargs[0]); uid = optargs[0]; break; case 'c': if( atoi_nullsafe(optargs[0]) < 1 ) { - fprintf(stderr, "%s: Certificate ID must be a positive number (>0)\n", MODULE); - return 1; + fprintf(stderr,"%s: Certificate ID must be a positive number (>0)\n",MODULE); + rc = 1; + goto exit; } + xmlNewChild(usercert_n, NULL, (xmlChar *) "certid", (xmlChar *) optargs[0]); certid = optargs[0]; break; -#ifdef FIRWALL +#ifdef FIREWALL case 'a': if( atoi_nullsafe(optargs[0]) < 1 ) { - fprintf(stderr, "%s: Firewall profile ID must be a positive number (>0)\n",MODULE); - return 1; + fprintf(stderr, "%s: Firewall profile ID must be a positive number (>0)\n", + MODULE); + rc = 1; + goto exit; } + xmlNewChild(usercert_n, NULL, (xmlChar *) "accessprofile", (xmlChar *) optargs[0]); accessprofile = optargs[0]; break; #endif case 'n': if( actmode != 'D' ) { fprintf(stderr, "%s: --uicid cannot be used with --add\n", MODULE); - return 1; + rc = 1; + goto exit; } if( atoi_nullsafe(optargs[0]) < 1 ) { - fprintf(stderr, "%s: Certificate ID must be a positive number (>0)\n", MODULE); - return 1; + fprintf(stderr, "%s: Certificate ID must be a positive number (>0)\n", + MODULE); + rc = 1; + goto exit; } + xmlNewChild(usercert_n, NULL, (xmlChar *) "uicid", (xmlChar *) optargs[0]); uicid = optargs[0]; + break; case 'h': display_usercerts_help(actmode); - return 0; + rc = 0; + goto exit; default: - return 1; + rc = 1; + goto exit; } } if( (actmode == 'A') && ((certid == NULL) || (uid == NULL)) ) { - fprintf(stderr, "%s: You must provide both a user ID (--uid) and a certificate ID (--certid)\n", - MODULE); - return 1; - } - - if( (actmode == 'D') && (certid == NULL) && (uid == NULL) && (uicid == NULL) && (accessprofile == NULL)) { - fprintf(stderr, "%s: You must provide at least --uid, --certid, --uicid or --accessprofile\n", - MODULE); - return 1; + fprintf(stderr, "%s: You must provide both a user ID (--uid) and " + "a certificate ID (--certid)\n", MODULE); + rc = 1; + goto exit; } - - eurephiaXML_CreateDoc(ctx, 1, "usercerts_link", &usercert_xml, &usercert_n); - assert( (usercert_xml != NULL) && (usercert_n != NULL) ); - - xmlNewProp(usercert_n, (xmlChar *) "mode", (xmlChar *) (actmode == 'D' ? "remove" : "register")); - usercert_n = xmlNewChild(usercert_n, NULL, (xmlChar *) "fieldMapping", NULL); - - xmlNewProp(usercert_n, (xmlChar *) "table", (xmlChar *) "usercerts"); - if( uid != NULL ) { - xmlNewChild(usercert_n, NULL, (xmlChar *) "uid", (xmlChar *) uid); - } - if( certid != NULL ) { - xmlNewChild(usercert_n, NULL, (xmlChar *) "certid", (xmlChar *) certid); + if( (actmode == 'D') && (certid == NULL) && (uid == NULL) + && (uicid == NULL) && (accessprofile == NULL)) { + fprintf(stderr, "%s: You must provide at least --uid, --certid, " + "--uicid or --accessprofile\n", MODULE); + rc = 1; + goto exit; } -#ifdef FIREWALL - if( accessprofile != NULL ) { - xmlNewChild(usercert_n, NULL, (xmlChar *) "accessprofile", (xmlChar *) accessprofile); - } -#endif + resxml = eDBadminUserCertsLink(ctx, usercert_xml); + if( resxml == NULL ) { + fprintf(stderr, "%s: Failed to update user <-> certificate link\n", MODULE); + rc = 1; + goto exit; + } - if( uicid != NULL ) { - xmlNewChild(usercert_n, NULL, (xmlChar *) "uicid", (xmlChar *) uicid); - } + res_n = eurephiaXML_getRoot(ctx, resxml, NULL, 1); - if( (id = eDBadminUpdateUserCertLink(ctx, usercert_xml)) < 1 ) { - fprintf(stderr, "%s: Failed to update user <-> certificate link\n", MODULE); + if( xmlStrcmp(res_n->name, (xmlChar *) "Error") == 0 ) { + fprintf(stderr, "%s: %s\n", MODULE, xmlExtractContent(res_n)); rc = 1; } else { - printf("%s: User account and certificate link is %s\n", MODULE, actmode_str); - if( actmode == 'A' ) { - printf("(uicid %i)", id); - } - printf("\n"); + fprintf(stdout, "%s: %s\n", MODULE, xmlExtractContent(res_n)); rc = 0; } + xmlFreeDoc(resxml); + + exit: xmlFreeDoc(usercert_xml); return rc; } |