$(BINARY_LDFLAGS)
script_DEPENDENCIES = $(LIBDOVECOT_DEPS)
script_SOURCES = \
- script.c
+ script.c \
+ health-check-settings.c
if TCPWRAPPERS
TCPWRAP_BIN = tcpwrap
maildirlock_DEPENDENCIES = $(LIBDOVECOT_DEPS)
maildirlock_SOURCES = \
maildirlock.c
+
+pkglibexec_SCRIPTS = health-check.sh
+EXTRA_DIST = $(pkglibexec_SCRIPTS)
--- /dev/null
+/* Copyright (c) 2019 Dovecot authors, see the included COPYING file */
+
+#include "lib.h"
+#include "buffer.h"
+#include "settings-parser.h"
+#include "service-settings.h"
+
+struct service_settings health_check_service_settings = {
+ .name = "health-check",
+ .protocol = "",
+ .type = "",
+ .executable = "script -p health-check.sh",
+ .user = "$default_internal_user",
+ .group = "",
+ .privileged_group = "",
+ .extra_groups = "",
+ .chroot = "",
+
+ .drop_priv_before_exec = TRUE,
+
+ .process_min_avail = 0,
+ .process_limit = 0,
+ .client_limit = 1,
+ .service_count = 0,
+ .idle_kill = 0,
+ .vsz_limit = (uoff_t)-1,
+
+ .unix_listeners = ARRAY_INIT,
+ .fifo_listeners = ARRAY_INIT,
+ .inet_listeners = ARRAY_INIT
+};
--- /dev/null
+#!/usr/bin/env bash
+#
+# Copyright (c) 2019 Dovecot authors, see the included COPYING file */
+#
+# This script is intended to be called by the script service and to be
+# connected to a socket using a service configuration like this:
+# executable = script -p /path/to/health-check.sh
+#
+# This simple example merely answers "PONG\n" if the input is "PING\n". It
+# stops waiting for input after $TIMEOUT which causes the process to die
+# which causes the script module to close the socket. Inputs and outputs
+# can be written to STDIN and STDOUT, they are duplicated file-descriptors
+# if called from the script service.
+
+TIMEOUT=10
+
+read -t ${TIMEOUT} -r input
+
+exit_code=$?
+cleaned_input=${input//[^a-zA-Z0-9]/}
+
+if [ $exit_code -eq 0 ] && [ "$cleaned_input" = "PING" ];then
+ echo "PONG"
+fi
+# always exit successful
+exit 0