From acabe1d6628fde5592d344ee9290fad7eea0a2af Mon Sep 17 00:00:00 2001 From: Fraser Tweedale Date: Sep 05 2025 13:04:35 +0000 Subject: express payload type via an enum Introduce `enum cm_rpm_protocol` for more ergonomic and readable expression of whether the payload is XML or JSON, and update call sites. Related: https://pagure.io/certmonger/issue/284 --- diff --git a/src/dogtag.c b/src/dogtag.c index c1e8bbc..dd57bdc 100644 --- a/src/dogtag.c +++ b/src/dogtag.c @@ -489,7 +489,8 @@ xml_workflow( break; case op_submit: ret = cm_submit_d_submit_eval(ctx, results, lasturl, - can_agent, &p, &q, 1); + can_agent, &p, &q, + CM_RPC_PROTOCOL_XML); if (p != NULL) { fprintf(stdout, "%s", p); } @@ -500,7 +501,8 @@ xml_workflow( break; case op_check: ret = cm_submit_d_check_eval(ctx, results, lasturl, - can_agent, &p, &q, 0); + can_agent, &p, &q, + CM_RPC_PROTOCOL_JSON); if (p != NULL) { fprintf(stdout, "%s", p); } @@ -512,7 +514,8 @@ xml_workflow( case op_approve: if (url2 == NULL) { ret = cm_submit_d_approve_eval(ctx, results, lasturl, - &p, &q, 1); + &p, &q, + CM_RPC_PROTOCOL_XML); if (p != NULL) { fprintf(stdout, "%s", p); } @@ -534,7 +537,8 @@ xml_workflow( break; case op_retrieve: ret = cm_submit_d_fetch_eval(ctx, results, lasturl, - &p, &q, 1); + &p, &q, + CM_RPC_PROTOCOL_XML); if (p != NULL) { fprintf(stdout, "%s", p); } @@ -545,7 +549,8 @@ xml_workflow( break; case op_profiles: ret = cm_submit_d_profiles_eval(ctx, results, - &p, &q, 1); + &p, &q, + CM_RPC_PROTOCOL_XML); if (p != NULL) { fprintf(stdout, "%s", p); } @@ -839,7 +844,8 @@ ipa_workflow( switch (op) { case op_submit: rval = cm_submit_d_submit_eval(ctx, results, NULL, - can_agent, &p, &q, 0); + can_agent, &p, &q, + CM_RPC_PROTOCOL_JSON); if (p != NULL) { fprintf(stdout, "%s", p); } @@ -849,7 +855,8 @@ ipa_workflow( break; case op_check: rval = cm_submit_d_check_eval(ctx, results, NULL, - can_agent, &p, &q, 0); + can_agent, &p, &q, + CM_RPC_PROTOCOL_JSON); if (p != NULL) { fprintf(stdout, "%s", p); } @@ -859,7 +866,8 @@ ipa_workflow( break; case op_retrieve: rval = cm_submit_d_fetch_eval(ctx, results, NULL, - &p, &q, 0); + &p, &q, + CM_RPC_PROTOCOL_JSON); if (p != NULL) { fprintf(stdout, "%s", p); } @@ -869,7 +877,8 @@ ipa_workflow( break; case op_approve: rval = cm_submit_d_approve_eval(ctx, results, NULL, - &p, &q, 0); + &p, &q, + CM_RPC_PROTOCOL_JSON); if (p != NULL) { fprintf(stdout, "%s", p); } @@ -879,7 +888,8 @@ ipa_workflow( break; case op_profiles: rval = cm_submit_d_profiles_eval(ctx, results, - &p, &q, 0); + &p, &q, + CM_RPC_PROTOCOL_JSON); if (p != NULL) { fprintf(stdout, "%s", p); diff --git a/src/submit-d.c b/src/submit-d.c index a56b55e..a44a28e 100644 --- a/src/submit-d.c +++ b/src/submit-d.c @@ -612,20 +612,23 @@ cm_submit_d_profiles_result(void *parent, const char *xml, enum cm_external_status cm_submit_d_submit_eval(void *parent, const char *xml, const char *url, - dbus_bool_t can_agent, char **out, char **err, int is_xml) + dbus_bool_t can_agent, char **out, char **err, enum cm_rpc_protocol format) { char *error = NULL, *error_code = NULL, *error_reason = NULL; char *status = NULL, *requestId = NULL, *cert = NULL; *out = NULL; *err = NULL; - if (is_xml) { + switch (format) { + case CM_RPC_PROTOCOL_XML: cm_submit_d_submit_result(parent, xml, &error_code, &error_reason, &error, &status, &requestId, &cert); - } else { + break; + case CM_RPC_PROTOCOL_JSON: cm_submit_d_rest_submit_result(parent, xml, &error_code, &error_reason, &status, &requestId, &cert); + break; } if ((status != NULL) && (strcmp(status, "0") == 0) && (cert != NULL)) { @@ -665,19 +668,22 @@ cm_submit_d_submit_eval(void *parent, const char *xml, const char *url, enum cm_external_status cm_submit_d_check_eval(void *parent, const char *xml, const char *url, - dbus_bool_t can_agent, char **out, char **err, int is_xml) + dbus_bool_t can_agent, char **out, char **err, enum cm_rpc_protocol format) { char *error = NULL, *error_code = NULL, *error_reason = NULL; char *status = NULL, *requestId = NULL; *out = NULL; *err = NULL; - if (is_xml) { + switch (format) { + case CM_RPC_PROTOCOL_XML: cm_submit_d_check_result(parent, xml, &error, &status, &requestId); - } else { + break; + case CM_RPC_PROTOCOL_JSON: cm_submit_d_rest_check_result(parent, xml, &error_code, &error_reason, &status, &requestId); + break; } if ((status != NULL) && (strcmp(status, "complete") == 0) && @@ -794,20 +800,23 @@ cm_submit_d_review_eval(void *parent, const char *xml, const char *url, enum cm_external_status cm_submit_d_approve_eval(void *parent, const char *xml, const char *url, - char **out, char **err, int is_xml) + char **out, char **err, enum cm_rpc_protocol format) { char *error = NULL, *error_code = NULL, *error_reason = NULL; char *status = NULL, *requestId = NULL; *out = NULL; *err = NULL; - if (is_xml) { + switch (format) { + case CM_RPC_PROTOCOL_XML: cm_submit_d_approve_result(parent, xml, &error_code, &error_reason, &status, &requestId); - } else { + break; + case CM_RPC_PROTOCOL_JSON: cm_submit_d_rest_approve_result(parent, xml, &error_code, &error_reason, &status, &requestId); + break; } if ((status != NULL) && (strcmp(status, "complete") == 0) && (requestId != NULL)) { @@ -835,20 +844,23 @@ cm_submit_d_approve_eval(void *parent, const char *xml, const char *url, enum cm_external_status cm_submit_d_fetch_eval(void *parent, const char *xml, const char *url, - char **out, char **err, int is_xml) + char **out, char **err, enum cm_rpc_protocol format) { char *error = NULL, *error_code = NULL, *error_reason = NULL; char *status = NULL, *requestId = NULL, *cert = NULL; *out = NULL; *err = NULL; - if (is_xml) { + switch (format) { + case CM_RPC_PROTOCOL_XML: cm_submit_d_fetch_result(parent, xml, &error, &status, &requestId, &cert); - } else { + break; + case CM_RPC_PROTOCOL_JSON: cm_submit_d_rest_fetch_result(parent, xml, &error_code, &error_reason, &status, &cert); + break; } if (cert != NULL) { *out = talloc_asprintf(parent, "%s\n", trim(parent, cert)); @@ -874,7 +886,7 @@ cm_submit_d_fetch_eval(void *parent, const char *xml, const char *url, enum cm_external_status cm_submit_d_profiles_eval(void *parent, const char *xml, char **out, char **err, - int is_xml) + enum cm_rpc_protocol format) { char *error_code = NULL, *error_reason = NULL; char **profiles = NULL; @@ -882,12 +894,15 @@ cm_submit_d_profiles_eval(void *parent, const char *xml, *out = NULL; *err = NULL; - if (is_xml) { + switch (format) { + case CM_RPC_PROTOCOL_XML: cm_submit_d_profiles_result(parent, xml, &error_code, &error_reason, &profiles); - } else { + break; + case CM_RPC_PROTOCOL_JSON: cm_submit_d_rest_profiles_result(parent, xml, &error_code, &error_reason, &profiles); + break; } if (profiles != NULL) { for (i = 0; profiles[i] != NULL; i++) { diff --git a/src/submit-d.h b/src/submit-d.h index 9486bf0..28f53bf 100644 --- a/src/submit-d.h +++ b/src/submit-d.h @@ -35,6 +35,11 @@ #define DOGTAG_DISPLAY_CERT_METHOD HTTP_METHOD_GET #define DOGTAG_DISPLAY_CERT_RESOURCE "displayCertFromRequest" +enum cm_rpc_protocol { + CM_RPC_PROTOCOL_JSON, + CM_RPC_PROTOCOL_XML, +}; + int cm_submit_d_submit_result(void *parent, const char *xml, char **error_code, char **error_reason, char **error, char **status, @@ -63,11 +68,11 @@ int cm_submit_d_profiles_result(void *parent, const char *xml, enum cm_external_status cm_submit_d_submit_eval(void *parent, const char *xml, const char *url, dbus_bool_t can_agent, - char **out, char **err, int is_xml); + char **out, char **err, enum cm_rpc_protocol format); enum cm_external_status cm_submit_d_check_eval(void *parent, const char *xml, const char *url, dbus_bool_t can_agent, - char **out, char **err, int is_xml); + char **out, char **err, enum cm_rpc_protocol format); enum cm_external_status cm_submit_d_reject_eval(void *parent, const char *xml, const char *url, char **out, char **err); @@ -75,12 +80,12 @@ enum cm_external_status cm_submit_d_review_eval(void *parent, const char *xml, const char *url, char **out, char **err); enum cm_external_status cm_submit_d_approve_eval(void *parent, const char *xml, const char *url, - char **out, char **err, int is_xml); + char **out, char **err, enum cm_rpc_protocol format); enum cm_external_status cm_submit_d_fetch_eval(void *parent, const char *xml, const char *url, - char **out, char **err, int is_xml); + char **out, char **err, enum cm_rpc_protocol format); enum cm_external_status cm_submit_d_profiles_eval(void *parent, const char *xml, - char **out, char **err, int is_xml); + char **out, char **err, enum cm_rpc_protocol format); int cm_submit_d_rest_profiles_result(void *parent, const char *result, char **error_code, char **error_reason, diff --git a/tests/tools/dparse.c b/tests/tools/dparse.c index 9495732..332ffca 100644 --- a/tests/tools/dparse.c +++ b/tests/tools/dparse.c @@ -41,7 +41,8 @@ main(int argc, char **argv) char *error = NULL, *error_code = NULL, *error_reason = NULL; char *status = NULL, *requestId = NULL, *cert = NULL; char *xml, *out = NULL, *err = NULL, **profiles = NULL; - dbus_bool_t can_agent, is_xml; + dbus_bool_t can_agent; + enum cm_rpc_protocol format; int i, vars; void *ctx; @@ -56,7 +57,11 @@ main(int argc, char **argv) role = argv[2]; filename = argv[3]; can_agent = (strcasecmp(role, "agent") == 0); - is_xml = ((strcasecmp(role, "agent") == 0) || (strcasecmp(role, "end-entity") == 0)); + if ((strcasecmp(role, "agent") == 0) || (strcasecmp(role, "end-entity") == 0)) { + format = CM_RPC_PROTOCOL_XML; + } else { + format = CM_RPC_PROTOCOL_JSON; + } xml = cm_submit_u_from_file(filename); if (xml == NULL) { @@ -66,29 +71,36 @@ main(int argc, char **argv) ctx = talloc_new(NULL); if (strcmp(mode, "submit") == 0) { - if (is_xml) { + + switch (format) { + case CM_RPC_PROTOCOL_XML: cm_submit_d_submit_result(ctx, xml, &error_code, &error_reason, &error, &status, &requestId, &cert); - } else { + break; + case CM_RPC_PROTOCOL_JSON: cm_submit_d_rest_submit_result(ctx, xml, &error_code, &error_reason, &status, &requestId, &cert); + break; } i = cm_submit_d_submit_eval(ctx, xml, "SUBMIT", - can_agent, &out, &err, is_xml); + can_agent, &out, &err, format); } else if (strcmp(mode, "check") == 0) { - if (is_xml) { + switch (format) { + case CM_RPC_PROTOCOL_XML: cm_submit_d_check_result(ctx, xml, &error, &status, &requestId); - } else { + break; + case CM_RPC_PROTOCOL_JSON: cm_submit_d_rest_check_result(ctx, xml, &error_code, &error_reason, &status, &requestId); + break; } i = cm_submit_d_check_eval(ctx, xml, "CHECK", - can_agent, &out, &err, is_xml); + can_agent, &out, &err, format); } else if (strcmp(mode, "reject") == 0) { cm_submit_d_reject_result(ctx, xml, @@ -104,41 +116,50 @@ main(int argc, char **argv) &out, &err); } else if (strcmp(mode, "approve") == 0) { - if (is_xml) { + switch (format) { + case CM_RPC_PROTOCOL_XML: cm_submit_d_approve_result(ctx, xml, &error_code, &error_reason, &status, &requestId); - } else { + break; + case CM_RPC_PROTOCOL_JSON: cm_submit_d_rest_approve_result(ctx, xml, &error_code, &error_reason, &error, &requestId); + break; } i = cm_submit_d_approve_eval(ctx, xml, "APPROVE", - &out, &err, is_xml); + &out, &err, format); } else if (strcmp(mode, "fetch") == 0) { - if (is_xml) { + switch (format) { + case CM_RPC_PROTOCOL_XML: cm_submit_d_fetch_result(ctx, xml, &error, &status, &requestId, &cert); - } else { + break; + case CM_RPC_PROTOCOL_JSON: cm_submit_d_rest_fetch_result(ctx, xml, &error_code, &error_reason, &status, &cert); + break; } i = cm_submit_d_fetch_eval(ctx, xml, "FETCH", - &out, &err, is_xml); + &out, &err, format); } else if (strcmp(mode, "profiles") == 0) { - if (is_xml) { + switch (format) { + case CM_RPC_PROTOCOL_XML: cm_submit_d_profiles_result(ctx, xml, &error_code, &error_reason, &profiles); - } else { + break; + case CM_RPC_PROTOCOL_JSON: cm_submit_d_rest_profiles_result(ctx, xml, &error_code, &error_reason, &profiles); + break; } - i = cm_submit_d_profiles_eval(ctx, xml, &out, &err, is_xml); + i = cm_submit_d_profiles_eval(ctx, xml, &out, &err, format); } else { fprintf(stderr, "unknown mode \"%s\"\n", mode); return -1;