mirror of
https://github.com/yrutschle/sslh.git
synced 2025-06-07 02:43:14 +03:00
move logging code to its own file
This commit is contained in:
parent
3013658b20
commit
317c08604b
2
Makefile
2
Makefile
@ -27,7 +27,7 @@ CC ?= gcc
|
|||||||
CFLAGS ?=-Wall -DLIBPCRE -g $(CFLAGS_COV)
|
CFLAGS ?=-Wall -DLIBPCRE -g $(CFLAGS_COV)
|
||||||
|
|
||||||
LIBS=-lm -lpcre2-8
|
LIBS=-lm -lpcre2-8
|
||||||
OBJS=sslh-conf.o common.o sslh-main.o probe.o tls.o argtable3.o udp-listener.o collection.o gap.o
|
OBJS=sslh-conf.o common.o log.o sslh-main.o probe.o tls.o argtable3.o udp-listener.o collection.o gap.o
|
||||||
|
|
||||||
CONDITIONAL_TARGETS=
|
CONDITIONAL_TARGETS=
|
||||||
|
|
||||||
|
73
common.c
73
common.c
@ -4,7 +4,6 @@
|
|||||||
* No code here should assume whether sockets are blocking or not.
|
* No code here should assume whether sockets are blocking or not.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#define SYSLOG_NAMES
|
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
@ -42,8 +41,6 @@ struct sslhcfg_item cfg;
|
|||||||
struct addrinfo *addr_listen = NULL; /* what addresses do we listen to? */
|
struct addrinfo *addr_listen = NULL; /* what addresses do we listen to? */
|
||||||
|
|
||||||
|
|
||||||
static int do_syslog = 1; /* Should we syslog? controled by syslog_facility = "none" */
|
|
||||||
|
|
||||||
#ifdef LIBWRAP
|
#ifdef LIBWRAP
|
||||||
#include <tcpd.h>
|
#include <tcpd.h>
|
||||||
int allow_severity =0, deny_severity = 0;
|
int allow_severity =0, deny_severity = 0;
|
||||||
@ -590,23 +587,6 @@ void resolve_name(struct addrinfo **out, char* fullname)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Log to syslog or stderr if foreground */
|
|
||||||
void log_message(int type, const char* msg, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, msg);
|
|
||||||
if (cfg.foreground)
|
|
||||||
vfprintf(stderr, msg, ap);
|
|
||||||
va_end(ap);
|
|
||||||
|
|
||||||
if (do_syslog) {
|
|
||||||
va_start(ap, msg);
|
|
||||||
vsyslog(type, msg, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Fills a connection description; returns 0 on failure */
|
/* Fills a connection description; returns 0 on failure */
|
||||||
int get_connection_desc(struct connection_desc* desc, const struct connection *cnx)
|
int get_connection_desc(struct connection_desc* desc, const struct connection *cnx)
|
||||||
@ -641,30 +621,6 @@ int get_connection_desc(struct connection_desc* desc, const struct connection *c
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* syslogs who connected to where
|
|
||||||
* desc: string description of the connection. if NULL, log_connection will
|
|
||||||
* manage on its own
|
|
||||||
* cnx: connection descriptor
|
|
||||||
* */
|
|
||||||
void log_connection(struct connection_desc* desc, const struct connection *cnx)
|
|
||||||
{
|
|
||||||
struct connection_desc d;
|
|
||||||
|
|
||||||
if (cnx->proto->log_level < 1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!desc) {
|
|
||||||
desc = &d;
|
|
||||||
get_connection_desc(desc, cnx);
|
|
||||||
}
|
|
||||||
|
|
||||||
log_message(LOG_INFO, "%s:connection from %s to %s forwarded from %s to %s\n",
|
|
||||||
cnx->proto->name,
|
|
||||||
desc->peer,
|
|
||||||
desc->service,
|
|
||||||
desc->local,
|
|
||||||
desc->target);
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_proctitle_shovel(struct connection_desc* desc, const struct connection *cnx)
|
void set_proctitle_shovel(struct connection_desc* desc, const struct connection *cnx)
|
||||||
{
|
{
|
||||||
@ -760,35 +716,6 @@ void setup_signals(void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Open syslog connection with appropriate banner;
|
|
||||||
* banner is made up of basename(bin_name)+"[pid]" */
|
|
||||||
void setup_syslog(const char* bin_name) {
|
|
||||||
char *name1, *name2;
|
|
||||||
int res, fn;
|
|
||||||
|
|
||||||
if (!strcmp(cfg.syslog_facility, "none")) {
|
|
||||||
do_syslog = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
name1 = strdup(bin_name);
|
|
||||||
res = asprintf(&name2, "%s[%d]", basename(name1), getpid());
|
|
||||||
CHECK_RES_DIE(res, "asprintf");
|
|
||||||
|
|
||||||
for (fn = 0; facilitynames[fn].c_val != -1; fn++)
|
|
||||||
if (strcmp(facilitynames[fn].c_name, cfg.syslog_facility) == 0)
|
|
||||||
break;
|
|
||||||
if (facilitynames[fn].c_val == -1) {
|
|
||||||
fprintf(stderr, "Unknown facility %s\n", cfg.syslog_facility);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
openlog(name2, LOG_CONS, facilitynames[fn].c_val);
|
|
||||||
free(name1);
|
|
||||||
/* Don't free name2, as openlog(3) uses it (at least in glibc) */
|
|
||||||
|
|
||||||
log_message(LOG_INFO, "%s %s started\n", server_type, VERSION);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Ask OS to keep capabilities over a setuid(nonzero) */
|
/* Ask OS to keep capabilities over a setuid(nonzero) */
|
||||||
void set_keepcaps(int val) {
|
void set_keepcaps(int val) {
|
||||||
|
106
log.c
Normal file
106
log.c
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
/*
|
||||||
|
# log: processing of all outgoing messages
|
||||||
|
#
|
||||||
|
# Copyright (C) 2007-2021 Yves Rutschle
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it
|
||||||
|
# and/or modify it under the terms of the GNU General Public
|
||||||
|
# License as published by the Free Software Foundation; either
|
||||||
|
# version 2 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be
|
||||||
|
# useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
# PURPOSE. See the GNU General Public License for more
|
||||||
|
# details.
|
||||||
|
#
|
||||||
|
# The full text for the General Public License is here:
|
||||||
|
# http://www.gnu.org/licenses/gpl.html
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define SYSLOG_NAMES
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "sslh-conf.h"
|
||||||
|
#include "common.h"
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
|
static int do_syslog = 1; /* Should we syslog? controled by syslog_facility = "none" */
|
||||||
|
|
||||||
|
/* Open syslog connection with appropriate banner;
|
||||||
|
* banner is made up of basename(bin_name)+"[pid]" */
|
||||||
|
void setup_syslog(const char* bin_name) {
|
||||||
|
char *name1, *name2;
|
||||||
|
int res, fn;
|
||||||
|
|
||||||
|
if (!strcmp(cfg.syslog_facility, "none")) {
|
||||||
|
do_syslog = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
name1 = strdup(bin_name);
|
||||||
|
res = asprintf(&name2, "%s[%d]", basename(name1), getpid());
|
||||||
|
CHECK_RES_DIE(res, "asprintf");
|
||||||
|
|
||||||
|
for (fn = 0; facilitynames[fn].c_val != -1; fn++)
|
||||||
|
if (strcmp(facilitynames[fn].c_name, cfg.syslog_facility) == 0)
|
||||||
|
break;
|
||||||
|
if (facilitynames[fn].c_val == -1) {
|
||||||
|
fprintf(stderr, "Unknown facility %s\n", cfg.syslog_facility);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
openlog(name2, LOG_CONS, facilitynames[fn].c_val);
|
||||||
|
free(name1);
|
||||||
|
/* Don't free name2, as openlog(3) uses it (at least in glibc) */
|
||||||
|
|
||||||
|
log_message(LOG_INFO, "%s %s started\n", server_type, VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Log to syslog or stderr if foreground */
|
||||||
|
void log_message(int type, const char* msg, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start(ap, msg);
|
||||||
|
if (cfg.foreground)
|
||||||
|
vfprintf(stderr, msg, ap);
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
if (do_syslog) {
|
||||||
|
va_start(ap, msg);
|
||||||
|
vsyslog(type, msg, ap);
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* syslogs who connected to where
|
||||||
|
* desc: string description of the connection. if NULL, log_connection will
|
||||||
|
* manage on its own
|
||||||
|
* cnx: connection descriptor
|
||||||
|
* */
|
||||||
|
void log_connection(struct connection_desc* desc, const struct connection *cnx)
|
||||||
|
{
|
||||||
|
struct connection_desc d;
|
||||||
|
|
||||||
|
if (cnx->proto->log_level < 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!desc) {
|
||||||
|
desc = &d;
|
||||||
|
get_connection_desc(desc, cnx);
|
||||||
|
}
|
||||||
|
|
||||||
|
log_message(LOG_INFO, "%s:connection from %s to %s forwarded from %s to %s\n",
|
||||||
|
cnx->proto->name,
|
||||||
|
desc->peer,
|
||||||
|
desc->service,
|
||||||
|
desc->local,
|
||||||
|
desc->target);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user