132 int options_index = 0;
136 int cmdline_verbosity = 0;
137 char *time_arg = NULL;
138 const char* cfgfile = ODS_SE_CFGFILE;
139 static struct option long_options[] = {
140 {
"single-run", no_argument, 0,
'1'},
141 {
"config", required_argument, 0,
'c'},
142 {
"no-daemon", no_argument, 0,
'd'},
143 {
"help", no_argument, 0,
'h'},
144 {
"info", no_argument, 0,
'i'},
145 {
"verbose", no_argument, 0,
'v'},
146 {
"version", no_argument, 0,
'V'},
147 {
"set-time", required_argument, 0, 256},
151 if(argv[0][0] !=
'/') {
152 char *path = getcwd(NULL,0);
153 asprintf(&
argv0,
"%s/%s", path, argv[0]);
156 argv0 = strdup(argv[0]);
160 while ((c=getopt_long(argc, argv,
"1c:dhivV",
161 long_options, &options_index)) != -1) {
200 if(set_time_now_str(time_arg)) {
201 fprintf(stderr,
"Error: Failed to interpret start time argument. Daemon not started.\n");
207 fprintf(stdout,
"OpenDNSSEC key and signing policy enforcer version %s\n",
210 ods_janitor_initialize(
argv0);
211 program_setup(cfgfile, cmdline_verbosity);
214 ods_log_crit(
"Could not start engine");
221 while (!engine->need_to_exit) {
223 cfg =
engine_config(cfgfile, cmdline_verbosity, engine->config);
236 ods_log_crit(
"[%s] cfgfile %s has errors", enforcerd_str, cfgfile);
243 engine->config = cfg;
254 ods_log_error(
"setup failed: %s", ods_status2str(status));
256 fprintf(stderr,
"setup failed: %s\n", ods_status2str(status));
258 engine->need_to_exit = 1;
262 engine->need_to_exit = 1;
266 if (!engine->need_to_exit)
267 ods_log_info(
"[%s] enforcer reloading", enforcerd_str);
270 ods_log_info(
"[engine] enforcer shutdown");
271 ods_log_info(
"[%s] enforcerd (pid: %lu) stopped with exitcode %d",
272 enforcerd_str, (
unsigned long) engine->pid, returncode);
274 if (returncode && daemonize) {
275 fprintf(stderr,
"enforcerd stopped with exitcode %d\n",