From a267913ec338ac548464c3e43e5316c45931255c Mon Sep 17 00:00:00 2001
From: Nis Wechselberg <enbewe@enbewe.de>
Date: Mon, 9 Jun 2025 16:23:09 +0200
Subject: [PATCH] Added SIGTERM handler for proper shutdown

Signed-off-by: Nis Wechselberg <enbewe@enbewe.de>
---
 uffd-ldapd | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/uffd-ldapd b/uffd-ldapd
index 6beac0b..e69a8b2 100755
--- a/uffd-ldapd
+++ b/uffd-ldapd
@@ -5,6 +5,7 @@ import socketserver
 import logging
 import socket
 import re
+import signal
 
 import click
 import requests
@@ -284,6 +285,10 @@ class StdoutFilter(logging.Filter):
 	def filter(self, record):
 		return record.levelno <= logging.INFO
 
+def sigterm_handler(_signum, _frame):
+	logger.info("Received SIGTERM, shutting down gracefully ...")
+	sys.exit(0)
+
 # pylint: disable=line-too-long
 @click.command(help='LDAP proxy for integrating LDAP service with uffd SSO. Supports user and group searches and as well as binds with user passwords.')
 @click.option('--socket-address', help='Host and port "ip:port" to listen on')
@@ -298,6 +303,10 @@ class StdoutFilter(logging.Filter):
 @click.option('--group-filter-regex', help='Python regular expression that group names must match for the group to be visible to LDAP clients')
 def main(socket_address, socket_path, socket_fd, api_url, api_user, api_secret, cache_ttl, base_dn, bind_password, group_filter_regex):
 	# pylint: disable=too-many-locals
+
+	# Register signal handler for proper SIGTERM handling
+	signal.signal(signal.SIGTERM, sigterm_handler)
+
 	if (socket_address is not None) \
 	   + (socket_path is not None) \
 	   + (socket_fd is not None) != 1:
-- 
GitLab