Пример #1
0
static void abrt_handler(int sig)
{
	syslog(LOG_ERR, "sigabrt received");
	if (client != NULL) 
		close_child(false);
	syslog_close();
	_exit(1);
}
Пример #2
0
static void daemon_terminate ()
{
	if ( timerpid > 0 )
		kill(timerpid, SIGTERM);

	semlock_close (master->semid);
	syslog_close ();
	_exit (1);
}
Пример #3
0
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;
}
Пример #4
0
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;
	}
}
Пример #5
0
Файл: stunnel.c Проект: ssem/rat
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) */
}
Пример #6
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); 
	}
}
Пример #7
0
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);
}
Пример #8
0
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;
}
Пример #9
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);
}
Пример #10
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;
}
Пример #11
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);
}
Пример #12
0
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 ;
}