Explorar el Código

- logging facility can be configure - usefull when you config syslogd to
divert all ser loggings into a separat file.
Config param is log_facility=LOG_LOCAL0 (see syslog(3) man page)

Bogdan-Andrei Iancu hace 21 años
padre
commit
26456acefe
Se han modificado 5 ficheros con 58 adiciones y 19 borrados
  1. 2 0
      cfg.lex
  2. 8 0
      cfg.y
  3. 25 0
      dprint.c
  4. 20 18
      dprint.h
  5. 3 1
      main.c

+ 2 - 0
cfg.lex

@@ -155,6 +155,7 @@ OR		"or"|"||"|"|"
 DEBUG	debug
 FORK	fork
 LOGSTDERROR	log_stderror
+LOGFACILITY	log_facility
 LISTEN		listen
 ALIAS		alias
 DNS		 dns
@@ -315,6 +316,7 @@ EAT_ABLE	[\ \t\b\r]
 <INITIAL>{DEBUG}	{ count(); yylval.strval=yytext; return DEBUG; }
 <INITIAL>{FORK}		{ count(); yylval.strval=yytext; return FORK; }
 <INITIAL>{LOGSTDERROR}	{ yylval.strval=yytext; return LOGSTDERROR; }
+<INITIAL>{LOGFACILITY}	{ yylval.strval=yytext; return LOGFACILITY; }
 <INITIAL>{LISTEN}	{ count(); yylval.strval=yytext; return LISTEN; }
 <INITIAL>{ALIAS}	{ count(); yylval.strval=yytext; return ALIAS; }
 <INITIAL>{DNS}	{ count(); yylval.strval=yytext; return DNS; }

+ 8 - 0
cfg.y

@@ -181,6 +181,7 @@ static struct id_list* mk_listen_id(char*, int, int);
 %token DEBUG
 %token FORK
 %token LOGSTDERROR
+%token LOGFACILITY
 %token LISTEN
 %token ALIAS
 %token DNS
@@ -367,6 +368,13 @@ assign_stm:	DEBUG EQUAL NUMBER { debug=$3; }
 		| FORK  EQUAL error  { yyerror("boolean value expected"); }
 		| LOGSTDERROR EQUAL NUMBER { if (!config_check) log_stderr=$3; }
 		| LOGSTDERROR EQUAL error { yyerror("boolean value expected"); }
+		| LOGFACILITY EQUAL ID {
+					if ( (i_tmp=str2facility($3))==-1)
+						yyerror("bad facility (see syslog(3) man page)");
+					if (!config_check)
+						log_facility=i_tmp;
+									}
+		| LOGFACILITY EQUAL error { yyerror("ID expected"); }
 		| DNS EQUAL NUMBER   { received_dns|= ($3)?DO_DNS:0; }
 		| DNS EQUAL error { yyerror("boolean value expected"); }
 		| REV_DNS EQUAL NUMBER { received_dns|= ($3)?DO_REV_DNS:0; }

+ 25 - 0
dprint.c

@@ -35,6 +35,19 @@
  
 #include <stdarg.h>
 #include <stdio.h>
+#include <strings.h>
+
+static char* str_fac[]={"LOG_AUTH","LOG_AUTHPRIV","LOG_CRON","LOG_DAEMON",
+					"LOG_FTP","LOG_KERN","LOG_LOCAL0","LOG_LOCAL1",
+					"LOG_LOCAL2","LOG_LOCAL3","LOG_LOCAL4","LOG_LOCAL5",
+					"LOG_LOCAL6","LOG_LOCAL7","LOG_LPR","LOG_MAIL",
+					"LOG_NEWS","LOG_SYSLOG","LOG_USER","LOG_UUCP",0};
+static int int_fac[]={LOG_AUTH , LOG_AUTHPRIV , LOG_CRON , LOG_DAEMON ,
+					LOG_FTP , LOG_KERN , LOG_LOCAL0 , LOG_LOCAL1 ,
+					LOG_LOCAL2 , LOG_LOCAL3 , LOG_LOCAL4 , LOG_LOCAL5 ,
+					LOG_LOCAL6 , LOG_LOCAL7 , LOG_LPR , LOG_MAIL ,
+					LOG_NEWS , LOG_SYSLOG , LOG_USER , LOG_UUCP};
+
 
 void dprint(char * format, ...)
 {
@@ -46,3 +59,15 @@ void dprint(char * format, ...)
 	fflush(stderr);
 	va_end(ap);
 }
+
+
+int str2facility(char *s)
+{
+	int i;
+
+	for( i=0; str_fac[i] ; i++) {
+		if (!strcasecmp(s,str_fac[i]))
+			return int_fac[i];
+	}
+	return -1;
+}

+ 20 - 18
dprint.h

@@ -45,17 +45,19 @@
 
 extern int debug;
 extern int log_stderr;
+extern int log_facility;
 
 
 #define DPRINT_LEV	1
-/* log facility (see syslog(3)) */
-#define L_FAC  LOG_DAEMON
 /* priority at which we log */
 #define DPRINT_PRIO LOG_DEBUG
 
 
 void dprint (char* format, ...);
 
+int str2facility(char *s);
+
+
 #ifdef NO_DEBUG
 	#ifdef __SUNPRO_C
 		#define DPrint(...)
@@ -70,7 +72,7 @@ void dprint (char* format, ...);
 					if (log_stderr){ \
 						dprint (__VA_ARGS__); \
 					}else{ \
-						syslog(DPRINT_LEV|L_FAC,  __VA_ARGS__); \
+						syslog(DPRINT_LEV|log_facility,  __VA_ARGS__); \
 					}\
 				} \
 			}while(0)
@@ -81,7 +83,7 @@ void dprint (char* format, ...);
 					if (log_stderr){ \
 						dprint (fmt, ## args); \
 					}else{ \
-						syslog(DPRINT_LEV|L_FAC, fmt, ## args); \
+						syslog(DPRINT_LEV|log_facility, fmt, ## args); \
 					}\
 				} \
 			}while(0)
@@ -108,25 +110,25 @@ void dprint (char* format, ...);
 					else { \
 						switch(lev){ \
 							case L_CRIT: \
-								syslog(LOG_CRIT | L_FAC, __VA_ARGS__); \
+								syslog(LOG_CRIT|log_facility, __VA_ARGS__); \
 								break; \
 							case L_ALERT: \
-								syslog(LOG_ALERT | L_FAC, __VA_ARGS__); \
+								syslog(LOG_ALERT|log_facility, __VA_ARGS__); \
 								break; \
 							case L_ERR: \
-								syslog(LOG_ERR | L_FAC, __VA_ARGS__); \
+								syslog(LOG_ERR|log_facility, __VA_ARGS__); \
 								break; \
 							case L_WARN: \
-								syslog(LOG_WARNING | L_FAC, __VA_ARGS__);\
+								syslog(LOG_WARNING|log_facility, __VA_ARGS__);\
 								break; \
 							case L_NOTICE: \
-								syslog(LOG_NOTICE | L_FAC, __VA_ARGS__); \
+								syslog(LOG_NOTICE|log_facility, __VA_ARGS__); \
 								break; \
 							case L_INFO: \
-								syslog(LOG_INFO | L_FAC, __VA_ARGS__); \
+								syslog(LOG_INFO|log_facility, __VA_ARGS__); \
 								break; \
 							case L_DBG: \
-								syslog(LOG_DEBUG | L_FAC, __VA_ARGS__); \
+								syslog(LOG_DEBUG|log_facility, __VA_ARGS__); \
 								break; \
 						} \
 					} \
@@ -140,25 +142,25 @@ void dprint (char* format, ...);
 					else { \
 						switch(lev){ \
 							case L_CRIT: \
-								syslog(LOG_CRIT | L_FAC, fmt, ##args); \
+								syslog(LOG_CRIT|log_facility, fmt, ##args); \
 								break; \
 							case L_ALERT: \
-								syslog(LOG_ALERT | L_FAC, fmt, ##args); \
+								syslog(LOG_ALERT|log_facility, fmt, ##args); \
 								break; \
 							case L_ERR: \
-								syslog(LOG_ERR | L_FAC, fmt, ##args); \
+								syslog(LOG_ERR|log_facility, fmt, ##args); \
 								break; \
 							case L_WARN: \
-								syslog(LOG_WARNING | L_FAC, fmt, ##args); \
+								syslog(LOG_WARNING|log_facility, fmt, ##args);\
 								break; \
 							case L_NOTICE: \
-								syslog(LOG_NOTICE | L_FAC, fmt, ##args); \
+								syslog(LOG_NOTICE|log_facility, fmt, ##args); \
 								break; \
 							case L_INFO: \
-								syslog(LOG_INFO | L_FAC, fmt, ##args); \
+								syslog(LOG_INFO|log_facility, fmt, ##args); \
 								break; \
 							case L_DBG: \
-								syslog(LOG_DEBUG | L_FAC, fmt, ##args); \
+								syslog(LOG_DEBUG|log_facility, fmt, ##args); \
 								break; \
 						} \
 					} \

+ 3 - 1
main.c

@@ -294,6 +294,8 @@ int sig_flag = 0;              /* last signal received */
 int debug = L_NOTICE;
 int dont_fork = 0;
 int log_stderr = 0;
+/* log facility (see syslog(3)) */
+int log_facility = LOG_DAEMON;
 int config_check = 0;
 /* check if reply first via host==us */
 int check_via =  0;        
@@ -534,7 +536,7 @@ int daemonize(char*  name)
 	}
 	
 	if (log_stderr==0)
-		openlog(name, LOG_PID|LOG_CONS, LOG_DAEMON);
+		openlog(name, LOG_PID|LOG_CONS, log_facility);
 		/* LOG_CONS, LOG_PERRROR ? */
 	return  0;