#include "lib/messaging/irpc.h"
#include "param/param.h"
#include "librpc/gen_ndr/ndr_irpc_c.h"
+#include "dynconfig/dynconfig.h"
/*
terminate a task service
int from_parent_fd)
{
struct task_state *state;
+ char *config_logfile = NULL;
+ char *logdir = NULL;
+ char *logfile = NULL;
+ NTSTATUS status = NT_STATUS_INTERNAL_ERROR;
state = talloc(event_ctx, struct task_state);
NT_STATUS_HAVE_NO_MEMORY(state);
state->service_details = service_details;
state->model_ops = model_ops;
+ config_logfile = lpcfg_logfile(lp_ctx, state);
+ if (config_logfile != NULL) {
+ char *end = NULL;
+
+ logdir = talloc_strdup(state, config_logfile);
+ if (logdir == NULL) {
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
+ }
+
+ end = strrchr_m(logdir, '/');
+ if (end != NULL) {
+ *end = '\0';
+ }
+ } else {
+ logdir = talloc_strdup(state, get_dyn_LOGFILEBASE());
+ if (logdir == NULL) {
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
+ }
+ }
+
+ logfile = talloc_asprintf(state, "%s/%s.log", logdir, service_name);
+ if (logfile == NULL) {
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
+ }
+
+ lpcfg_do_global_parameter(lp_ctx, "log file", logfile);
+ debug_set_logfile(logfile);
+ reopen_logs_internal();
+
state->model_ops->new_task(event_ctx, lp_ctx, service_name,
task_server_callback, state, service_details,
from_parent_fd);
- return NT_STATUS_OK;
+ status = NT_STATUS_OK;
+
+done:
+ TALLOC_FREE(config_logfile);
+ TALLOC_FREE(logfile);
+ TALLOC_FREE(logdir);
+ return status;
}
/*