From: Marco Bettini Date: Fri, 5 May 2023 15:20:34 +0000 (+0000) Subject: auth: mech_gssapi_unwrap() - Release gss_release_buffe(outbuf) before returning X-Git-Tag: 2.3.21~79 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=80ddfb7b307d823c366ff8f48fb129738fa9fd66;p=thirdparty%2Fdovecot%2Fcore.git auth: mech_gssapi_unwrap() - Release gss_release_buffe(outbuf) before returning --- diff --git a/src/auth/mech-gssapi.c b/src/auth/mech-gssapi.c index e9f2af2f2b..5ed8edbde1 100644 --- a/src/auth/mech-gssapi.c +++ b/src/auth/mech-gssapi.c @@ -602,6 +602,7 @@ mech_gssapi_unwrap(struct gssapi_auth_request *request, gss_buffer_desc inbuf) if (outbuf.length < 4) { e_error(auth_request->mech_event, "Invalid response length"); + (void)gss_release_buffer(&minor_status, &outbuf); return -1; } @@ -612,6 +613,7 @@ mech_gssapi_unwrap(struct gssapi_auth_request *request, gss_buffer_desc inbuf) if (data_has_nuls(name, name_len)) { e_info(auth_request->mech_event, "authz_name has NULs"); + (void)gss_release_buffer(&minor_status, &outbuf); return -1; } @@ -621,13 +623,16 @@ mech_gssapi_unwrap(struct gssapi_auth_request *request, gss_buffer_desc inbuf) request->authz_name = duplicate_name(auth_request, request->authn_name); if (get_display_name(auth_request, request->authz_name, - NULL, &login_user) < 0) + NULL, &login_user) < 0) { + (void)gss_release_buffer(&minor_status, &outbuf); return -1; + } } if (request->authz_name == GSS_C_NO_NAME) { e_info(auth_request->mech_event, "no authz_name"); + (void)gss_release_buffer(&minor_status, &outbuf); return -1; } @@ -639,6 +644,7 @@ mech_gssapi_unwrap(struct gssapi_auth_request *request, gss_buffer_desc inbuf) if (!auth_request_set_username(auth_request, login_user, &error)) { e_info(auth_request->mech_event, "authz_name: %s", error); + (void)gss_release_buffer(&minor_status, &outbuf); return -1; } @@ -647,6 +653,7 @@ mech_gssapi_unwrap(struct gssapi_auth_request *request, gss_buffer_desc inbuf) auth_request->passdb_success = TRUE; /* default to success */ auth_request_lookup_credentials(&request->auth_request, "", gssapi_credentials_callback); + (void)gss_release_buffer(&minor_status, &outbuf); return 0; }