static void deamonise(){ pid_t pid; /* Fork off the parent process */ pid = fork(); /* An error occurred */ if (pid < 0) exit(EXIT_FAILURE); /* Success: Let the parent terminate */ if (pid > 0) exit(EXIT_SUCCESS); /* On success: The child process becomes session leader */ if (setsid() < 0) exit(EXIT_FAILURE); /* Fork off for the second time*/ pid = fork(); /* An error occurred */ if (pid < 0){ exit(EXIT_FAILURE); } /* Success: Let the parent terminate */ if (pid > 0) exit(EXIT_SUCCESS); /* Set new file permissions */ umask(0); /* Change the working directory to the root directory */ /* or another appropriated directory */ chdir("/"); deamon = 1; notify_log("Info", "Deamonised"); }
static int notify_send_message(dns_sock_t *sock, char *zone_name) { int len; dns_sock_buf_t sbuf; notify_log(sock, zone_name); if ((len = notify_make_message(sbuf.sb_buf, sizeof(sbuf.sb_buf), zone_name)) < 0) return -1; sbuf.sb_buflen = len; sbuf.sb_sock = sock; if (dns_sock_send(&sbuf) < 0) return -1; dns_timer_request_cont(&sock->sock_timer, SEC2MS(NOTIFY_TIMEOUT), (dns_timer_func_t *) notify_timeout, sock, zone_name); return 0; }
static void dieIfFaultOccurred (xmlrpc_env * const envP) { if (envP->fault_occurred) { notify_log("ERROR: %s (%d)", envP->fault_string, envP->fault_code); exit(1); } }
int main(int argc, char ** argv){ signal(SIGINT, stop_notifier); signal(SIGTERM, stop_notifier); notify_log("Info", "Strated scheduler"); //load in config if (ini_parse("/etc/network-sensor-server/config.ini", handler, &config) < 0) { notify_log("Error", "Can't load 'config.ini'\n"); return 1; } //make deamon if(argc == 2) deamonise(); /* */ /* -- RPC server -- */ /* */ struct xmlrpc_method_info3 const add_alarm_method = { "add_alarm.request", &add_alarm, }; xmlrpc_server_abyss_parms serverparm; xmlrpc_registry * registryP; xmlrpc_env env; xmlrpc_server_abyss_t * serverP; xmlrpc_server_abyss_sig * oldHandlersP; xmlrpc_env_init(&env); xmlrpc_server_abyss_global_init(&env); registryP = xmlrpc_registry_new(&env); if (env.fault_occurred) { notify_log("Error", "xmlrpc_registry_new() failed. %s", env.fault_string); exit(1); } //add methods xmlrpc_registry_add_method3(&env, registryP, &add_alarm_method); if (env.fault_occurred) { notify_log("Error", "xmlrpc_registry_add_method3() add_alarm failed. %s", env.fault_string); exit(1); } serverparm.config_file_name = NULL; /* Select the modern normal API */ serverparm.registryP = registryP; serverparm.port_number = config.notifier_rpc_port; serverparm.runfirst = NULL; serverparm.runfirst_arg = NULL; serverparm.log_file_name = "/var/log/network-sensor-server/xmlrpc_log"; xmlrpc_server_abyss_create(&env, &serverparm, XMLRPC_APSIZE(log_file_name), &serverP); notify_log("Info", "Started XML-RPC server"); xmlrpc_server_abyss_run_server(&env, serverP); if (env.fault_occurred) { printf("xmlrpc_server_abyss() failed. %s\n", env.fault_string); exit(1); } notify_log("Info", "Stopping XML-RPC server"); xmlrpc_server_abyss_destroy(serverP); xmlrpc_server_abyss_global_term(); }
void stop_notifier(int sig){ notify_log("Info", "Scheduler stopped"); mysql_stop_all(); exit(1); }
void ns_notify_start(ns_client_t *client) { dns_message_t *request = client->message; isc_result_t result; dns_name_t *zonename; dns_rdataset_t *zone_rdataset; dns_zone_t *zone = NULL; char namebuf[DNS_NAME_FORMATSIZE]; char tsigbuf[DNS_NAME_FORMATSIZE + sizeof(": TSIG ''")]; dns_tsigkey_t *tsigkey; /* * Interpret the question section. */ result = dns_message_firstname(request, DNS_SECTION_QUESTION); if (result != ISC_R_SUCCESS) { notify_log(client, ISC_LOG_NOTICE, "notify question section empty"); goto formerr; } /* * The question section must contain exactly one question. */ zonename = NULL; dns_message_currentname(request, DNS_SECTION_QUESTION, &zonename); zone_rdataset = ISC_LIST_HEAD(zonename->list); if (ISC_LIST_NEXT(zone_rdataset, link) != NULL) { notify_log(client, ISC_LOG_NOTICE, "notify question section contains multiple RRs"); goto formerr; } /* The zone section must have exactly one name. */ result = dns_message_nextname(request, DNS_SECTION_ZONE); if (result != ISC_R_NOMORE) { notify_log(client, ISC_LOG_NOTICE, "notify question section contains multiple RRs"); goto formerr; } /* The one rdataset must be an SOA. */ if (zone_rdataset->type != dns_rdatatype_soa) { notify_log(client, ISC_LOG_NOTICE, "notify question section contains no SOA"); goto formerr; } tsigkey = dns_message_gettsigkey(request); if (tsigkey != NULL) { dns_name_format(&tsigkey->name, namebuf, sizeof(namebuf)); if (tsigkey->generated) { char cnamebuf[DNS_NAME_FORMATSIZE]; dns_name_format(tsigkey->creator, cnamebuf, sizeof(cnamebuf)); snprintf(tsigbuf, sizeof(tsigbuf), ": TSIG '%s' (%s)", namebuf, cnamebuf); } else { snprintf(tsigbuf, sizeof(tsigbuf), ": TSIG '%s'", namebuf); } } else tsigbuf[0] = '\0'; dns_name_format(zonename, namebuf, sizeof(namebuf)); result = dns_zt_find(client->view->zonetable, zonename, 0, NULL, &zone); if (result != ISC_R_SUCCESS) goto notauth; switch (dns_zone_gettype(zone)) { case dns_zone_master: case dns_zone_slave: case dns_zone_stub: /* Allow dialup passive to work. */ notify_log(client, ISC_LOG_INFO, "received notify for zone '%s'%s", namebuf, tsigbuf); respond(client, dns_zone_notifyreceive(zone, ns_client_getsockaddr(client), request)); break; default: goto notauth; } dns_zone_detach(&zone); return; notauth: notify_log(client, ISC_LOG_NOTICE, "received notify for zone '%s'%s: not authoritative", namebuf, tsigbuf); result = DNS_R_NOTAUTH; goto failure; formerr: result = DNS_R_FORMERR; failure: if (zone != NULL) dns_zone_detach(&zone); respond(client, result); }