diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 13:44:03 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 13:44:03 +0000 |
commit | 293913568e6a7a86fd1479e1cff8e2ecb58d6568 (patch) | |
tree | fc3b469a3ec5ab71b36ea97cc7aaddb838423a0c /contrib/auth_delay | |
parent | Initial commit. (diff) | |
download | postgresql-16-293913568e6a7a86fd1479e1cff8e2ecb58d6568.tar.xz postgresql-16-293913568e6a7a86fd1479e1cff8e2ecb58d6568.zip |
Adding upstream version 16.2.upstream/16.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'contrib/auth_delay')
-rw-r--r-- | contrib/auth_delay/Makefile | 15 | ||||
-rw-r--r-- | contrib/auth_delay/auth_delay.c | 74 | ||||
-rw-r--r-- | contrib/auth_delay/meson.build | 17 |
3 files changed, 106 insertions, 0 deletions
diff --git a/contrib/auth_delay/Makefile b/contrib/auth_delay/Makefile new file mode 100644 index 0000000..4b86ec3 --- /dev/null +++ b/contrib/auth_delay/Makefile @@ -0,0 +1,15 @@ +# contrib/auth_delay/Makefile + +MODULES = auth_delay +PGFILEDESC = "auth_delay - delay authentication failure reports" + +ifdef USE_PGXS +PG_CONFIG = pg_config +PGXS := $(shell $(PG_CONFIG) --pgxs) +include $(PGXS) +else +subdir = contrib/auth_delay +top_builddir = ../.. +include $(top_builddir)/src/Makefile.global +include $(top_srcdir)/contrib/contrib-global.mk +endif diff --git a/contrib/auth_delay/auth_delay.c b/contrib/auth_delay/auth_delay.c new file mode 100644 index 0000000..8d6e4d2 --- /dev/null +++ b/contrib/auth_delay/auth_delay.c @@ -0,0 +1,74 @@ +/* ------------------------------------------------------------------------- + * + * auth_delay.c + * + * Copyright (c) 2010-2023, PostgreSQL Global Development Group + * + * IDENTIFICATION + * contrib/auth_delay/auth_delay.c + * + * ------------------------------------------------------------------------- + */ +#include "postgres.h" + +#include <limits.h> + +#include "libpq/auth.h" +#include "port.h" +#include "utils/guc.h" +#include "utils/timestamp.h" + +PG_MODULE_MAGIC; + +/* GUC Variables */ +static int auth_delay_milliseconds = 0; + +/* Original Hook */ +static ClientAuthentication_hook_type original_client_auth_hook = NULL; + +/* + * Check authentication + */ +static void +auth_delay_checks(Port *port, int status) +{ + /* + * Any other plugins which use ClientAuthentication_hook. + */ + if (original_client_auth_hook) + original_client_auth_hook(port, status); + + /* + * Inject a short delay if authentication failed. + */ + if (status != STATUS_OK) + { + pg_usleep(1000L * auth_delay_milliseconds); + } +} + +/* + * Module Load Callback + */ +void +_PG_init(void) +{ + /* Define custom GUC variables */ + DefineCustomIntVariable("auth_delay.milliseconds", + "Milliseconds to delay before reporting authentication failure", + NULL, + &auth_delay_milliseconds, + 0, + 0, INT_MAX / 1000, + PGC_SIGHUP, + GUC_UNIT_MS, + NULL, + NULL, + NULL); + + MarkGUCPrefixReserved("auth_delay"); + + /* Install Hooks */ + original_client_auth_hook = ClientAuthentication_hook; + ClientAuthentication_hook = auth_delay_checks; +} diff --git a/contrib/auth_delay/meson.build b/contrib/auth_delay/meson.build new file mode 100644 index 0000000..f2b2da0 --- /dev/null +++ b/contrib/auth_delay/meson.build @@ -0,0 +1,17 @@ +# Copyright (c) 2022-2023, PostgreSQL Global Development Group + +auth_delay_sources = files( + 'auth_delay.c', +) + +if host_system == 'windows' + auth_delay_sources += rc_lib_gen.process(win32ver_rc, extra_args: [ + '--NAME', 'auth_delay', + '--FILEDESC', 'auth_delay - delay authentication failure reports',]) +endif + +auth_delay = shared_module('auth_delay', + auth_delay_sources, + kwargs: contrib_mod_args, +) +contrib_targets += auth_delay |