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.4.0~2772 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cac9cfe422191ead1296eb28a4a447682f3b8019;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 66444a16df..38f2d4d830 100644 --- a/src/auth/mech-gssapi.c +++ b/src/auth/mech-gssapi.c @@ -565,6 +565,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; } @@ -575,6 +576,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; } @@ -584,13 +586,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; } @@ -602,6 +607,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; } @@ -610,6 +616,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; }