static void abrt_handler(int sig) { syslog(LOG_ERR, "sigabrt received"); if (client != NULL) close_child(false); syslog_close(); _exit(1); }
static void daemon_terminate () { if ( timerpid > 0 ) kill(timerpid, SIGTERM); semlock_close (master->semid); syslog_close (); _exit (1); }
void syslog_open(void) { syslog_close(); if(global_options.option.log_syslog) #ifdef __ultrix__ openlog(service_options.servname, 0); #else openlog(service_options.servname, LOG_CONS|LOG_NDELAY, global_options.log_facility); #endif /* __ultrix__ */ syslog_opened=1; }
static void term_handler(int sig) { syslog(LOG_NOTICE, "sigterm received"); if (client != NULL) { client_quit(); close_child(true); syslog_close(); _exit(1); } else { terminate = true; } }
void main_cleanup() { unbind_ports(); s_poll_free(fds); fds=NULL; #if 0 str_stats(); /* main thread allocation tracking */ #endif log_flush(LOG_MODE_ERROR); #if !defined(USE_WIN32) && !defined(__vms) syslog_close(); #endif /* !defined(USE_WIN32) && !defined(__vms) */ }
static void daemon_accept (int fd, fd_set socketfds, fd_set sslfds, int maxfd) { struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); CLIENT *initclient; int rc = -1; rc = accept (fd, (struct sockaddr *)&addr, &addrlen); if (rc < 0) return; initclient = access_check (rc, addr); // uint port = ntohs (addr.sin_port); if (! initclient) { close (rc); return; } initclient->useSSL = FD_ISSET(fd, &sslfds); initclient->ssl = NULL; #if defined(_SC_NPROCESSORS_ONLN) if ( cfg.CoreBind > 0 ) { /* Select CPU core to bind to */ master->currcore++; if ( master->currcore >= master->numcores ) master->currcore = 0; initclient->numcore = master->currcore; } #endif switch (fork ()) { case 0: syslog_open ("nntpswitchd", LOG_PID, LOG_NEWS); for (int i = 0; i <= maxfd; i++) { if (FD_ISSET (i, &socketfds)) close (i); } run_child (initclient); syslog_close (); _exit (0); case -1: info ("couldnt fork child %s", strerror (errno)); default: if ( cfg.JSONACL == 1 && initclient->acl != NULL ) { freehttpacl(initclient->acl); } close (rc); } }
static void __exit ipt_log_fini(void) { nf_log_unregister(&ipt_log_logger); /* remove timer, if it is pending */ if (timer_pending(&timer)) del_timer(&timer); flush_scheduled_work(); syslog_close(&sl_socket); if (loglist_total > 0) printk(KERN_WARNING "ip_SYSLOG: dropping %d log(s). Dropped: %d\n", loglist_total, loglist_dropped + loglist_total); proc_net_remove(&init_net, STAT_PROC_FS_NAME); xt_unregister_target(&ipt_log_reg); }
int log_close() { if(LOG_DESTINATION_FILE == log_dst || LOG_DESTINATION_CONSOLE == log_dst){ if(log_fd >= 3){ close(log_fd); log_fd = STDOUT_FILENO; } } else if(LOG_DESTINATION_SYSLOG == log_dst){ syslog_close(); } else{ printf("unknown log_dst == %d.\n", log_dst); } return 1; }
int main(int argc, char **argv) { int i, cur; tgetopt(argc, argv); if ( toptset('h') ) { printf(usage, argv[0]); exit(0); } if ( toptset('c') ) config_file = toptargs('c'); syslog_open("updategroups", LOG_PID, LOG_NEWS); if ( (master = memmap(sizeof(MASTER))) == NULL ) die("Can't allocate master memory"); if ( (groups = memmap(sizeof(ACTIVE) * MAX_GROUPS)) == NULL ) die("Can't allocate groups memory"); loadconfig(); load_servers(); cur = -1; for (i=master->numservers-2; i>=0; i-- ) if ( (master->lservers[i])->Level != cur ) { cur = (master->lservers[i])->Level; update_server( master->lservers[i] ); } write_active(); write_newsgroups(); memunmap(master, sizeof(MASTER)); memunmap(groups, sizeof(ACTIVE) * MAX_GROUPS); syslog_close(); exit(0); }
int main (int argc, char *argv[]) { syslog_open("nntpswitchd", LOG_PID, LOG_NEWS); init_options(argc, argv); init_sighandlers(); initproctitle(argc, argv); if ((master = memmap(sizeof (MASTER))) == NULL) die("Can't allocate master memory"); info("Server starting up.."); run_daemon(); syslog_close(); return 0; }
/* This is the daemon's main work - listen for connections and spawn. */ static void run_daemon (void) { pid_t pid; fd_set serverfds; fd_set sslrds; int maxfd; loadconfig (); init_sockets (&serverfds, &sslrds, &maxfd); if (cfg.EnableSSL) ssl_init(); curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if ( !curl ) { syslog(LOG_ERR, "curlGetURL: cant initialize curl!"); return; } if (! test_only) { writepidfile (); if (getuid () == 0) { struct passwd *pwent; if ((pwent = getpwnam (cfg.RunAsUser)) == NULL) die ("Unknown user %s, check configuration", cfg.RunAsUser); if (setuid (pwent->pw_uid)) die ("Cant setuid %s", cfg.RunAsUser); } errno = 0; } daemon_chdir (); load_servers(); loadactive(); loadoverviewfmt(); load_access_conf(); load_statsfile(); // init_cache(); master->serverstart = time (NULL); master->nrforks = 0; #if defined(_SC_NPROCESSORS_ONLN) master->numcores = sysconf(_SC_NPROCESSORS_ONLN); info("Found %d CPU cores", master->numcores); #else info("No CPU core binding support"); #endif if ((master->semid = semlock_init (MASTER_SEMKEY)) == -1) die ("semlock_init: semget failed: %m"); if (test_only) { info ("Startup Test Successfull, Exiting.."); syslog_close (); exit (0); } info ("NNTP Server Starting.."); if (!opt_stay) { syslog_close (); pid = init_daemon (serverfds); syslog_open ("nntpswitchd", LOG_PID, LOG_NEWS); if (pid < 0) die ("Can't fork"); /* 2nd time, with the right pid, as user news */ writepidfile (); } // start the timer process for statistics if ( cfg.StatsFilePeriod > 0 ) timerpid = run_timer_loop(); info("Server running new pid %d uid %d euid %d timerpid %d" , (int)getpid(), (int)getuid(), (int)geteuid(), (int)timerpid); setproctitle("nntpswitchd: waiting for connections"); daemon_select_loop (serverfds, sslrds, maxfd); }
static void syslog_work_fn(struct work_struct *work) { struct msghdr msg; struct kvec iov; int ret; size_t n = 0; struct logs * log_entry; if (sl_socket != NULL) goto cont; ret = syslog_connect(&sl_socket); if (ret >= 0) goto cont; if (!timer_pending(&timer)) { timer.expires = jiffies + msecs_to_jiffies(reconnect_freq); add_timer(&timer); } return ; cont: if (list_empty(&logs_list)) return; spin_lock_irq(&log_lock); while (!list_empty(&logs_list)) { log_entry = list_first_entry(&logs_list, struct logs, logs_list); printk(KERN_DEBUG "ip_syslog: work data (%d): %d\n", counter, log_entry->counter); n = strlen(log_entry->data); iov.iov_base = (void *)log_entry->data; iov.iov_len = n; msg.msg_name = NULL; msg.msg_namelen = 0; msg.msg_iov = (struct iovec *)&iov; msg.msg_iovlen = 1; msg.msg_control = NULL; msg.msg_controllen = 0; msg.msg_namelen = 0; msg.msg_flags = MSG_DONTWAIT|MSG_NOSIGNAL; ret = kernel_sendmsg(sl_socket, &msg, &iov, 1, n); if (ret < 0) { printk("ip_syslog: kernel_sendmsg error:%d\n", ret); if (ret == -EPIPE) { syslog_close(&sl_socket); schedule_work(&syslog_work); } break; } loglist_total--; list_del(&log_entry->logs_list); kfree(log_entry->data); kfree(log_entry); } spin_unlock_irq(&log_lock); return ; }