/* configuration-dependent initialization */ int main_configure(char *arg1, char *arg2) { if(options_cmdline(arg1, arg2)) return 1; options_apply(); str_canary_init(); /* needs prng initialization from options_cmdline */ #if !defined(USE_WIN32) && !defined(__vms) /* syslog_open() must be called before change_root() * to be able to access /dev/log socket */ syslog_open(); #endif /* !defined(USE_WIN32) && !defined(__vms) */ if(bind_ports()) return 1; #ifdef HAVE_CHROOT /* change_root() must be called before drop_privileges() * since chroot() needs root privileges */ if(change_root()) return 1; #endif /* HAVE_CHROOT */ if(drop_privileges(1)) return 1; /* log_open() must be be called after drop_privileges() * or logfile rotation won't be possible */ /* log_open() must be be called before daemonize() * since daemonize() invalidates stderr */ if(log_open()) return 1; #ifndef USE_FORK num_clients=0; /* the first valid config */ #endif return 0; }
/* configuration-dependent initialization */ int main_configure(char *arg1, char *arg2) { if(parse_commandline(arg1, arg2)) return 1; str_canary_init(); /* needs prng initialization from parse_commandline */ #if !defined(USE_WIN32) && !defined(__vms) /* syslog_open() must be called before change_root() * to be able to access /dev/log socket */ syslog_open(); #endif /* !defined(USE_WIN32) && !defined(__vms) */ if(bind_ports()) return 1; #ifdef HAVE_CHROOT /* change_root() must be called before drop_privileges() * since chroot() needs root privileges */ if(change_root()) return 1; #endif /* HAVE_CHROOT */ #if !defined(USE_WIN32) && !defined(__vms) && !defined(USE_OS2) if(drop_privileges(1)) return 1; #endif /* standard Unix */ /* log_open() must be be called after drop_privileges() * or logfile rotation won't be possible */ /* log_open() must be be called before daemonize() * since daemonize() invalidates stderr */ log_open(); return 0; }
int log_set_syslog(char *ip, int port, int facility, char *hostname, char *program) { int result = 0; result = syslog_open(ip, port, facility, hostname, program); if(result){ log_dst = LOG_DESTINATION_SYSLOG; } return result; }
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); } }
void log_init(void) { regcomp(&pat_prio, "^<([0-9]*)>(.*)", REG_EXTENDED); regcomp(&pat_tstamp, "^\[[ 0]*([0-9]*).([0-9]*)] (.*)", REG_EXTENDED); if (log_buffer_init(log_size)) { ERROR("Failed to allocate log memory\n"); exit(-1); } syslog_open(); klog_open(); openlog("sysinit", LOG_CONS, LOG_DAEMON); }
void log_init(int _log_size) { if (_log_size > 0) log_size = _log_size; regcomp(&pat_prio, "^<([0-9]*)>(.*)", REG_EXTENDED); regcomp(&pat_tstamp, "^\[[ 0]*([0-9]*).([0-9]*)] (.*)", REG_EXTENDED); if (log_buffer_init(log_size)) { fprintf(stderr, "Failed to allocate log memory\n"); exit(-1); } syslog_open(); klog_open(); openlog("sysinit", LOG_CONS, LOG_DAEMON); }
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); }