diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/monitor/monitor.c | 13 | ||||
-rw-r--r-- | src/monitor/monitor_interfaces.h | 3 | ||||
-rw-r--r-- | src/monitor/monitor_sbus.c | 13 | ||||
-rw-r--r-- | src/providers/data_provider_be.c | 1 | ||||
-rw-r--r-- | src/responder/nss/nsssrv.c | 1 | ||||
-rw-r--r-- | src/responder/pam/pamsrv.c | 1 | ||||
-rw-r--r-- | src/util/debug.c | 13 | ||||
-rw-r--r-- | src/util/server.c | 19 | ||||
-rw-r--r-- | src/util/util.h | 1 |
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 { |