int log_opensyslog(const char *fn) { int res = 0; if (set_facility != -1) facility = set_facility; if (fn) { memset(systemlog_fn, '\0', sizeof(systemlog_fn)); sstrncpy(systemlog_fn, fn, sizeof(systemlog_fn)); } if (!*systemlog_fn) { /* The child may have inherited a valid socket from the parent. */ pr_closelog(syslog_sockfd); if ((syslog_sockfd = pr_openlog("proftpd", LOG_NDELAY|LOG_PID, facility)) < 0) return -1; systemlog_fd = -1; } else if ((res = pr_log_openfile(systemlog_fn, &systemlog_fd, PR_LOG_SYSTEM_MODE)) < 0) { memset(systemlog_fn, '\0', sizeof(systemlog_fn)); return res; } syslog_open = TRUE; return 0; }
void log_closesyslog(void) { (void) close(systemlog_fd); systemlog_fd = -1; (void) pr_closelog(syslog_sockfd); syslog_sockfd = -1; syslog_open = FALSE; }
void log_closesyslog(void) { if (systemlog_fd != -1) { close(systemlog_fd); systemlog_fd = -1; } else { pr_closelog(syslog_sockfd); syslog_sockfd = -1; } syslog_open = FALSE; }
int log_opensyslog(const char *fn) { int res = 0; if (set_facility != -1) facility = set_facility; if (fn) { memset(systemlog_fn, '\0', sizeof(systemlog_fn)); sstrncpy(systemlog_fn, fn, sizeof(systemlog_fn)); } if (!*systemlog_fn) { /* The child may have inherited a valid socket from the parent. */ pr_closelog(syslog_sockfd); syslog_sockfd = pr_openlog("proftpd", LOG_NDELAY|LOG_PID, facility); if (syslog_sockfd < 0) { int xerrno = errno; (void) pr_trace_msg(trace_channel, 1, "error opening syslog fd: %s", strerror(xerrno)); errno = xerrno; return -1; } /* Find a usable fd for the just-opened socket fd. */ if (syslog_sockfd <= STDERR_FILENO) { res = pr_fs_get_usable_fd(syslog_sockfd); if (res > 0) { (void) close(syslog_sockfd); syslog_sockfd = res; } } (void) fcntl(syslog_sockfd, F_SETFD, FD_CLOEXEC); systemlog_fd = -1; } else if ((res = pr_log_openfile(systemlog_fn, &systemlog_fd, PR_LOG_SYSTEM_MODE)) < 0) { memset(systemlog_fn, '\0', sizeof(systemlog_fn)); return res; } syslog_open = TRUE; return 0; }
static void log_write(int priority, int f, char *s) { unsigned int *max_priority = NULL; char serverinfo[PR_TUNABLE_BUFFER_SIZE] = {'\0'}; memset(serverinfo, '\0', sizeof(serverinfo)); if (main_server && main_server->ServerFQDN) { pr_netaddr_t *remote_addr = pr_netaddr_get_sess_remote_addr(); const char *remote_name = pr_netaddr_get_sess_remote_name(); snprintf(serverinfo, sizeof(serverinfo), "%s", main_server->ServerFQDN); serverinfo[sizeof(serverinfo)-1] = '\0'; if (remote_addr && remote_name) { snprintf(serverinfo + strlen(serverinfo), sizeof(serverinfo) - strlen(serverinfo), " (%s[%s])", remote_name, pr_netaddr_get_ipstr(remote_addr)); serverinfo[sizeof(serverinfo)-1] = '\0'; } } if (logstderr || !main_server) { fprintf(stderr, "%s - %s\n", serverinfo, s); return; } if (syslog_discard) return; if (systemlog_fd != -1) { char buf[LOGBUFFER_SIZE] = {'\0'}; time_t tt = time(NULL); struct tm *t; t = localtime(&tt); strftime(buf, sizeof(buf), "%b %d %H:%M:%S ", t); buf[sizeof(buf) - 1] = '\0'; if (*serverinfo) { snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%s proftpd[%u] %s: %s\n", systemlog_host, (unsigned int) getpid(), serverinfo, s); } else { snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%s proftpd[%u]: %s\n", systemlog_host, (unsigned int) getpid(), s); } buf[sizeof(buf) - 1] = '\0'; write(systemlog_fd, buf, strlen(buf)); return; } if (set_facility != -1) f = set_facility; if (!syslog_open) { syslog_sockfd = pr_openlog("proftpd", LOG_NDELAY|LOG_PID, f); } else if (f != facility) { (void) pr_setlogfacility(f); } max_priority = get_param_ptr(main_server->conf, "SyslogLevel", FALSE); if (max_priority != NULL && priority > *max_priority) return; if (*serverinfo) pr_syslog(syslog_sockfd, priority, "%s - %s\n", serverinfo, s); else pr_syslog(syslog_sockfd, priority, "%s\n", s); if (!syslog_open) { pr_closelog(syslog_sockfd); syslog_sockfd = -1; } else if (f != facility) { (void) pr_setlogfacility(f); } }