diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2024-04-02 10:41:37 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2024-04-02 10:41:44 -0400 |
commit | 38698dd38e56b6de31545ac284e36feb00d413cb (patch) | |
tree | 8ac48219001252f8187731798bdc9303a8e9aae1 | |
parent | cafe1056558fe07cdc52b95205588fcd80870362 (diff) | |
download | postgresql-38698dd38e56b6de31545ac284e36feb00d413cb.tar.gz postgresql-38698dd38e56b6de31545ac284e36feb00d413cb.zip |
Unwind #if spaghetti in hmac_openssl.c a bit.
Make this code a little less confusing by defining a separate macro
that controls whether we'll use ResourceOwner facilities to track
the existence of a pg_hmac_ctx context.
The proximate reason to touch this is that since b8bff07da, we got
"unused function" warnings if building with older OpenSSL, because
the #if guards around the ResourceOwner wrapper function definitions
were different from those around the calls of those functions.
Pulling the ResourceOwner machinations outside of the #ifdef HAVE_xxx
guards fixes that and makes the code clearer too.
Discussion: https://postgr.es/m/1394271.1712016101@sss.pgh.pa.us
-rw-r--r-- | src/common/hmac_openssl.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/common/hmac_openssl.c b/src/common/hmac_openssl.c index d10f7e5af73..84fcf340d8e 100644 --- a/src/common/hmac_openssl.c +++ b/src/common/hmac_openssl.c @@ -41,6 +41,7 @@ */ #ifndef FRONTEND #ifdef HAVE_HMAC_CTX_NEW +#define USE_RESOWNER_FOR_HMAC #define ALLOC(size) MemoryContextAlloc(TopMemoryContext, size) #else #define ALLOC(size) palloc(size) @@ -67,13 +68,13 @@ struct pg_hmac_ctx pg_hmac_errno error; const char *errreason; -#ifndef FRONTEND +#ifdef USE_RESOWNER_FOR_HMAC ResourceOwner resowner; #endif }; /* ResourceOwner callbacks to hold HMAC contexts */ -#ifndef FRONTEND +#ifdef USE_RESOWNER_FOR_HMAC static void ResOwnerReleaseHMAC(Datum res); static const ResourceOwnerDesc hmac_resowner_desc = @@ -138,10 +139,12 @@ pg_hmac_create(pg_cryptohash_type type) * previous runs. */ ERR_clear_error(); -#ifdef HAVE_HMAC_CTX_NEW -#ifndef FRONTEND + +#ifdef USE_RESOWNER_FOR_HMAC ResourceOwnerEnlarge(CurrentResourceOwner); #endif + +#ifdef HAVE_HMAC_CTX_NEW ctx->hmacctx = HMAC_CTX_new(); #else ctx->hmacctx = ALLOC(sizeof(HMAC_CTX)); @@ -159,14 +162,14 @@ pg_hmac_create(pg_cryptohash_type type) return NULL; } -#ifdef HAVE_HMAC_CTX_NEW -#ifndef FRONTEND +#ifndef HAVE_HMAC_CTX_NEW + memset(ctx->hmacctx, 0, sizeof(HMAC_CTX)); +#endif + +#ifdef USE_RESOWNER_FOR_HMAC ctx->resowner = CurrentResourceOwner; ResourceOwnerRememberHMAC(CurrentResourceOwner, ctx); #endif -#else - memset(ctx->hmacctx, 0, sizeof(HMAC_CTX)); -#endif /* HAVE_HMAC_CTX_NEW */ return ctx; } @@ -327,15 +330,16 @@ pg_hmac_free(pg_hmac_ctx *ctx) #ifdef HAVE_HMAC_CTX_FREE HMAC_CTX_free(ctx->hmacctx); -#ifndef FRONTEND - if (ctx->resowner) - ResourceOwnerForgetHMAC(ctx->resowner, ctx); -#endif #else explicit_bzero(ctx->hmacctx, sizeof(HMAC_CTX)); FREE(ctx->hmacctx); #endif +#ifdef USE_RESOWNER_FOR_HMAC + if (ctx->resowner) + ResourceOwnerForgetHMAC(ctx->resowner, ctx); +#endif + explicit_bzero(ctx, sizeof(pg_hmac_ctx)); FREE(ctx); } @@ -375,7 +379,7 @@ pg_hmac_error(pg_hmac_ctx *ctx) /* ResourceOwner callbacks */ -#ifndef FRONTEND +#ifdef USE_RESOWNER_FOR_HMAC static void ResOwnerReleaseHMAC(Datum res) { |