diff --git a/uffd-ldapd b/uffd-ldapd index 6beac0bd363d5d598ba057bec8832c5af9cb4912..e69a8b257e31bea547bc828badfd9f313ff744f3 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: