summaryrefslogtreecommitdiffstats
path: root/eurephiadm/commands/usercerts.c
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2009-09-01 19:07:24 +0200
committerDavid Sommerseth <dazo@users.sourceforge.net>2009-09-01 19:07:24 +0200
commit88dcbd1a0b62bde794ab8a56661f2412503574e6 (patch)
tree0f8ad4c32a5853e6e8f4c7450cd0fa5512428957 /eurephiadm/commands/usercerts.c
parentaec2553a8ff182353804fc498797dfcb8212bd92 (diff)
downloadeurephia-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.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;
}