summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2008-12-29 01:17:55 +0100
committerDavid Sommerseth <dazo@users.sourceforge.net>2008-12-29 01:17:55 +0100
commit35483a27a1c2d4c6f8da3f696eaa7ad2402e393a (patch)
tree66bf2285182bba49600c25c14275a3deac82db14
parent5856a56db1f049a8e81b96878a0eaa3b2c2e2157 (diff)
downloadeurephia-35483a27a1c2d4c6f8da3f696eaa7ad2402e393a.tar.gz
eurephia-35483a27a1c2d4c6f8da3f696eaa7ad2402e393a.tar.xz
eurephia-35483a27a1c2d4c6f8da3f696eaa7ad2402e393a.zip
usercerts command: Added add/delete function for user/cert links
-rw-r--r--eurephiadm/commands/usercerts.c112
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: