示例#1
0
    /* 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;
}
示例#2
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;
}
示例#3
0
文件: _log.c 项目: lubing521/libutils
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;
}
示例#4
0
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); 
	}
}
示例#5
0
文件: syslog.c 项目: fingon/procd
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);
}
示例#6
0
文件: syslog.c 项目: asac/ubox
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);
}
示例#7
0
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);
}
示例#8
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;
}
示例#9
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);
}