summaryrefslogtreecommitdiffstats
path: root/eurephiadm/commands/usercerts.c
diff options
context:
space:
mode:
Diffstat (limited to 'eurephiadm/commands/usercerts.c')
-rw-r--r--eurephiadm/commands/usercerts.c125
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;
}