bx509d: Fix leaks

This commit is contained in:
Nicolas Williams
2023-01-03 20:53:05 -06:00
parent c6074377bc
commit 12160382a0

View File

@@ -569,7 +569,6 @@ bad_reqv(struct bx509_request_desc *r,
va_list ap) va_list ap)
{ {
krb5_error_code ret; krb5_error_code ret;
krb5_context context = NULL;
const char *k5msg = NULL; const char *k5msg = NULL;
const char *emsg = NULL; const char *emsg = NULL;
char *formatted = NULL; char *formatted = NULL;
@@ -589,8 +588,10 @@ bad_reqv(struct bx509_request_desc *r,
if (code) { if (code) {
if (r->context) if (r->context)
emsg = k5msg = krb5_get_error_message(r->context, code); emsg = k5msg = krb5_get_error_message(r->context, code);
else else if (code > -1)
emsg = strerror(code); emsg = strerror(code);
else
emsg = "Unknown error";
} }
ret = vasprintf(&formatted, fmt, ap); ret = vasprintf(&formatted, fmt, ap);
@@ -603,10 +604,11 @@ bad_reqv(struct bx509_request_desc *r,
} }
heim_audit_addreason((heim_svc_req_desc)r, "%s", msg); heim_audit_addreason((heim_svc_req_desc)r, "%s", msg);
audit_trail(r, code); audit_trail(r, code);
krb5_free_error_message(context, k5msg); if (r->context)
krb5_free_error_message(r->context, k5msg);
if (ret == -1 || msg == NULL) { if (ret == -1 || msg == NULL) {
if (context) if (r->context)
krb5_log_msg(r->context, logfac, 1, NULL, "Out of memory"); krb5_log_msg(r->context, logfac, 1, NULL, "Out of memory");
return resp(r, MHD_HTTP_SERVICE_UNAVAILABLE, MHD_RESPMEM_PERSISTENT, return resp(r, MHD_HTTP_SERVICE_UNAVAILABLE, MHD_RESPMEM_PERSISTENT,
NULL, "Out of memory", sizeof("Out of memory") - 1, NULL); NULL, "Out of memory", sizeof("Out of memory") - 1, NULL);
@@ -885,7 +887,7 @@ do_CA(struct bx509_request_desc *r, const char *csr)
bytes = rk_base64_decode(csr2, d.data); bytes = rk_base64_decode(csr2, d.data);
free(csr2); free(csr2);
if (bytes < 0) if (bytes < 0)
ret = errno; ret = errno ? errno : EINVAL;
else else
d.length = bytes; d.length = bytes;
if (ret) { if (ret) {
@@ -1850,9 +1852,7 @@ authorize_TGT_REQ(struct bx509_request_desc *r)
if (for_cname == r->cname || strcmp(r->cname, r->for_cname) == 0) if (for_cname == r->cname || strcmp(r->cname, r->for_cname) == 0)
return 0; return 0;
ret = krb5_parse_name(r->context, r->cname, &p); ret = hx509_request_init(r->context->hx509ctx, &r->req);
if (ret == 0)
ret = hx509_request_init(r->context->hx509ctx, &r->req);
if (ret) if (ret)
return bad_500(r, ret, "Out of resources"); return bad_500(r, ret, "Out of resources");
heim_audit_addkv((heim_svc_req_desc)r, KDC_AUDIT_VIS, heim_audit_addkv((heim_svc_req_desc)r, KDC_AUDIT_VIS,
@@ -1862,6 +1862,8 @@ authorize_TGT_REQ(struct bx509_request_desc *r)
if (ret == 0) if (ret == 0)
ret = hx509_request_add_pkinit(r->context->hx509ctx, r->req, ret = hx509_request_add_pkinit(r->context->hx509ctx, r->req,
for_cname); for_cname);
if (ret == 0)
ret = krb5_parse_name(r->context, r->cname, &p);
if (ret == 0) if (ret == 0)
ret = kdc_authorize_csr(r->context, "get-tgt", r->req, p); ret = kdc_authorize_csr(r->context, "get-tgt", r->req, p);
krb5_free_principal(r->context, p); krb5_free_principal(r->context, p);
@@ -1984,7 +1986,7 @@ get_tgts_accumulate_ccache_write_json(struct bx509_request_desc *r,
if (o && k && v) if (o && k && v)
ret = heim_dict_set_value(o, k, v); ret = heim_dict_set_value(o, k, v);
else else
ret = errno; ret = ENOMEM;
if (ret == 0) { if (ret == 0) {
heim_release(v); heim_release(v);
@@ -2238,8 +2240,10 @@ get_tgts(struct bx509_request_desc *r)
r->error_code = 0; r->error_code = 0;
res = MHD_get_connection_values(r->connection, MHD_GET_ARGUMENT_KIND, res = MHD_get_connection_values(r->connection, MHD_GET_ARGUMENT_KIND,
get_tgt_param_cb, r); get_tgt_param_cb, r);
if (r->response || res == MHD_NO) if (r->response || res == MHD_NO) {
krb5_free_principal(r->context, p);
return res; return res;
}
ret = r->error_code; ret = r->error_code;
} }
@@ -2251,8 +2255,10 @@ get_tgts(struct bx509_request_desc *r)
r->error_code = 0; r->error_code = 0;
res = MHD_get_connection_values(r->connection, MHD_GET_ARGUMENT_KIND, res = MHD_get_connection_values(r->connection, MHD_GET_ARGUMENT_KIND,
get_tgts_param_authorize_cb, r); get_tgts_param_authorize_cb, r);
if (r->response || res == MHD_NO) if (r->response || res == MHD_NO) {
krb5_free_principal(r->context, p);
return res; return res;
}
ret = r->error_code; ret = r->error_code;
if (ret == 0) { if (ret == 0) {
@@ -2282,8 +2288,10 @@ get_tgts(struct bx509_request_desc *r)
r->error_code = 0; r->error_code = 0;
res = MHD_get_connection_values(r->connection, MHD_GET_ARGUMENT_KIND, res = MHD_get_connection_values(r->connection, MHD_GET_ARGUMENT_KIND,
get_tgts_param_execute_cb, r); get_tgts_param_execute_cb, r);
if (r->response || res == MHD_NO) if (r->response || res == MHD_NO) {
krb5_free_principal(r->context, p);
return res; return res;
}
ret = r->error_code; ret = r->error_code;
} }
krb5_free_principal(r->context, p); krb5_free_principal(r->context, p);