summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/monitor/monitor.c13
-rw-r--r--src/monitor/monitor_interfaces.h3
-rw-r--r--src/monitor/monitor_sbus.c13
-rw-r--r--src/providers/data_provider_be.c1
-rw-r--r--src/responder/nss/nsssrv.c1
-rw-r--r--src/responder/pam/pamsrv.c1
-rw-r--r--src/util/debug.c13
-rw-r--r--src/util/server.c19
-rw-r--r--src/util/util.h1
9 files changed, 62 insertions, 3 deletions
diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c
index 0f9fb95e3..56a74fba6 100644
--- a/src/monitor/monitor.c
+++ b/src/monitor/monitor.c
@@ -742,6 +742,10 @@ static int service_signal_offline(struct mt_svc *svc)
{
return service_signal(svc, MON_CLI_METHOD_OFFLINE);
}
+static int service_signal_rotate(struct mt_svc *svc)
+{
+ return service_signal(svc, MON_CLI_METHOD_ROTATE);
+}
static int check_domain_ranges(struct sss_domain_info *domains)
{
@@ -1103,11 +1107,14 @@ static void monitor_hup(struct tevent_context *ev,
void *private_data)
{
struct mt_ctx *ctx = talloc_get_type(private_data, struct mt_ctx);
+ struct mt_svc *cur_svc;
DEBUG(1, ("Received SIGHUP.\n"));
- /* Right now this function doesn't do anything.
- * It will handle logrotate HUPs soon.
- */
+
+ /* Signal all services to rotate debug files */
+ for(cur_svc = ctx->svc_list; cur_svc; cur_svc = cur_svc->next) {
+ service_signal_rotate(cur_svc);
+ }
}
static int monitor_cleanup(void)
diff --git a/src/monitor/monitor_interfaces.h b/src/monitor/monitor_interfaces.h
index 205b072e6..8e334ab73 100644
--- a/src/monitor/monitor_interfaces.h
+++ b/src/monitor/monitor_interfaces.h
@@ -41,6 +41,7 @@
#define MON_CLI_METHOD_SHUTDOWN "shutDown"
#define MON_CLI_METHOD_RES_INIT "resInit"
#define MON_CLI_METHOD_OFFLINE "goOffline" /* Applicable only to providers */
+#define MON_CLI_METHOD_ROTATE "rotateLogs"
#define SSSD_SERVICE_PIPE "private/sbus-monitor"
@@ -51,4 +52,6 @@ int monitor_common_pong(DBusMessage *message,
struct sbus_connection *conn);
int monitor_common_res_init(DBusMessage *message,
struct sbus_connection *conn);
+int monitor_common_rotate_logs(DBusMessage *message,
+ struct sbus_connection *conn);
diff --git a/src/monitor/monitor_sbus.c b/src/monitor/monitor_sbus.c
index 3f73e84f7..d60a087e5 100644
--- a/src/monitor/monitor_sbus.c
+++ b/src/monitor/monitor_sbus.c
@@ -193,3 +193,16 @@ int monitor_common_res_init(DBusMessage *message,
return monitor_common_pong(message, conn);
}
+int monitor_common_rotate_logs(DBusMessage *message,
+ struct sbus_connection *conn)
+{
+ int ret;
+
+ ret = rotate_debug_files();
+ if (ret) {
+ DEBUG(1, ("Could not rotate debug files!\n"));
+ return ret;
+ }
+
+ return monitor_common_pong(message, conn);
+}
diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c
index c384d015c..15f6882cd 100644
--- a/src/providers/data_provider_be.c
+++ b/src/providers/data_provider_be.c
@@ -60,6 +60,7 @@ struct sbus_method monitor_be_methods[] = {
{ MON_CLI_METHOD_PING, monitor_common_pong },
{ MON_CLI_METHOD_RES_INIT, data_provider_res_init },
{ MON_CLI_METHOD_OFFLINE, data_provider_go_offline },
+ { MON_CLI_METHOD_ROTATE, monitor_common_rotate_logs },
{ NULL, NULL }
};
diff --git a/src/responder/nss/nsssrv.c b/src/responder/nss/nsssrv.c
index 06e8bfe98..02150c982 100644
--- a/src/responder/nss/nsssrv.c
+++ b/src/responder/nss/nsssrv.c
@@ -50,6 +50,7 @@
struct sbus_method monitor_nss_methods[] = {
{ MON_CLI_METHOD_PING, monitor_common_pong },
{ MON_CLI_METHOD_RES_INIT, monitor_common_res_init },
+ { MON_CLI_METHOD_ROTATE, monitor_common_rotate_logs },
{ NULL, NULL }
};
diff --git a/src/responder/pam/pamsrv.c b/src/responder/pam/pamsrv.c
index ac1cf4010..cb3429f1a 100644
--- a/src/responder/pam/pamsrv.c
+++ b/src/responder/pam/pamsrv.c
@@ -49,6 +49,7 @@
struct sbus_method monitor_pam_methods[] = {
{ MON_CLI_METHOD_PING, monitor_common_pong },
{ MON_CLI_METHOD_RES_INIT, monitor_common_res_init },
+ { MON_CLI_METHOD_ROTATE, monitor_common_rotate_logs },
{ NULL, NULL }
};
diff --git a/src/util/debug.c b/src/util/debug.c
index d26d31c95..5b6fccd68 100644
--- a/src/util/debug.c
+++ b/src/util/debug.c
@@ -152,3 +152,16 @@ int open_debug_file(void)
{
return open_debug_file_ex(NULL, NULL);
}
+
+int rotate_debug_files(void)
+{
+ int ret;
+
+ if (!debug_to_file) return EOK;
+
+ ret = fclose(debug_file);
+ if (ret) return ret;
+ debug_file = NULL;
+
+ return open_debug_file();
+}
diff --git a/src/util/server.c b/src/util/server.c
index 226e16e25..a0ec2a265 100644
--- a/src/util/server.c
+++ b/src/util/server.c
@@ -284,6 +284,17 @@ int die_if_parent_died(void)
return EOK;
}
+static void te_server_hup(struct tevent_context *ev,
+ struct tevent_signal *se,
+ int signum,
+ int count,
+ void *siginfo,
+ void *private_data)
+{
+ DEBUG(1, ("Received SIGHUP. Rotating logfiles.\n"));
+ rotate_debug_files();
+}
+
int server_setup(const char *name, int flags,
const char *conf_entry,
struct main_context **main_ctx)
@@ -295,6 +306,7 @@ int server_setup(const char *name, int flags,
int ret = EOK;
bool dt;
bool dl;
+ struct tevent_signal *tes;
debug_prg_name = strdup(name);
if (!debug_prg_name) {
@@ -391,6 +403,13 @@ int server_setup(const char *name, int flags,
}
if (dl) debug_to_file = 1;
+ /* before opening the log file set up log rotation */
+ tes = tevent_add_signal(ctx->event_ctx, ctx, SIGHUP, 0,
+ te_server_hup, NULL);
+ if (tes == NULL) {
+ return EIO;
+ }
+
/* open log file if told so */
if (debug_to_file) {
ret = open_debug_file();
diff --git a/src/util/util.h b/src/util/util.h
index 1f5573d43..db8e1ac33 100644
--- a/src/util/util.h
+++ b/src/util/util.h
@@ -201,6 +201,7 @@ void ldb_debug_messages(void *context, enum ldb_debug_level level,
const char *fmt, va_list ap);
int open_debug_file_ex(const char *filename, FILE **filep);
int open_debug_file(void);
+int rotate_debug_files(void);
/* from server.c */
struct main_context {