diff options
author | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-29 01:17:55 +0100 |
---|---|---|
committer | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-29 01:17:55 +0100 |
commit | 35483a27a1c2d4c6f8da3f696eaa7ad2402e393a (patch) | |
tree | 66bf2285182bba49600c25c14275a3deac82db14 /eurephiadm | |
parent | 5856a56db1f049a8e81b96878a0eaa3b2c2e2157 (diff) | |
download | eurephia-35483a27a1c2d4c6f8da3f696eaa7ad2402e393a.tar.gz eurephia-35483a27a1c2d4c6f8da3f696eaa7ad2402e393a.tar.xz eurephia-35483a27a1c2d4c6f8da3f696eaa7ad2402e393a.zip |
usercerts command: Added add/delete function for user/cert links
Diffstat (limited to 'eurephiadm')
-rw-r--r-- | eurephiadm/commands/usercerts.c | 112 |
1 files changed, 110 insertions, 2 deletions
diff --git a/eurephiadm/commands/usercerts.c b/eurephiadm/commands/usercerts.c index 23e3279..5998091 100644 --- a/eurephiadm/commands/usercerts.c +++ b/eurephiadm/commands/usercerts.c @@ -173,6 +173,114 @@ 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; + char *certid = NULL, *uid = NULL, *uicid = NULL, *actmode_str = NULL; + + e_options addargs[] = { + {"--uid", "-i", 1}, + {"--certid", "-c", 1}, + {"--uicid", "-n", 1}, + {"--help", "-h", 0}, + {NULL, NULL, 0} + }; + + assert( (ctx != NULL) && (ctx->dbc != NULL) && (ctx->dbc->config != NULL)); + + if( (strcmp(argv[0], "--add") == 0) || (strcmp(argv[0], "-A") == 0) ) { + actmode = 'A'; + actmode_str = "registered"; + } else if( (strcmp(argv[0], "--delete") == 0) || (strcmp(argv[0], "-D") == 0) ) { + actmode = 'D'; + actmode_str = "deleted"; + } + + 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; + } + 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; + } + certid = optargs[0]; + break; + + case 'n': + if( actmode != 'D' ) { + fprintf(stderr, "%s: --uicid cannot be used with --add\n", MODULE); + return 1; + } + if( atoi_nullsafe(optargs[0]) < 1 ) { + fprintf(stderr, "%s: Certificate ID must be a positive number (>0)\n", MODULE); + return 1; + } + uicid = optargs[0]; + break; + + case 'h': + display_usercerts_help(actmode); + return 0; + + default: + return 1; + } + } + + 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) ) { + fprintf(stderr, "%s: You must provide at least --uid, --certid or --uicid\n", MODULE); + return 1; + } + + + 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( uicid != NULL ) { + xmlNewChild(usercert_n, NULL, (xmlChar *) "uicid", (xmlChar *) uicid); + } + + xmlSaveFormatFileEnc("-", usercert_xml, "UTF-8", 1); + if( (id = eDBadminUpdateUserCertLink(ctx, usercert_xml)) < 1 ) { + fprintf(stderr, "%s: Failed to register user <-> certificate link\n", MODULE); + 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"); + rc = 0; + } + xmlFreeDoc(usercert_xml); + return rc; +} + int cmd_UserCerts(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int argc, char **argv) { char **mode_argv; int i, mode_argc = 0, rc = 0; @@ -199,11 +307,11 @@ int cmd_UserCerts(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, break; case 'A': - // mode_fnc = add_usercert; + mode_fnc = add_del_usercert; break; case 'D': - // mode_fnc = delete_usercert; + mode_fnc = add_del_usercert; break; default: |