[Nagios-checkins] ndoutils/src io.c, 1.2, 1.3 ndo2db.c, 1.24, 1.25 ndomod.c, 1.18, 1.19

Hendrik Bäcker hendrikb at users.sourceforge.net
Wed Aug 12 21:19:40 UTC 2009


Update of /cvsroot/nagios/ndoutils/src
In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv15704/src

Modified Files:
	io.c ndo2db.c ndomod.c 
Log Message:
Added SSL Support to NDOUtils

Thanks to Jean Gabes for the patch - http://tracker.nagios.org/view.php?id=38


Index: io.c
===================================================================
RCS file: /cvsroot/nagios/ndoutils/src/io.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** io.c	17 Jul 2009 01:11:02 -0000	1.2
--- io.c	12 Aug 2009 21:19:38 -0000	1.3
***************
*** 3,7 ****
   *
   * Copyright (c) 2009 Nagios Core Development Team and Community Contributors
!  * Copyright (c) 2005-2006 Ethan Galstad 
   *
   * First Written: 05-20-2006
--- 3,7 ----
   *
   * Copyright (c) 2009 Nagios Core Development Team and Community Contributors
!  * Copyright (c) 2005-2006 Ethan Galstad
   *
   * First Written: 05-20-2006
***************
*** 13,16 ****
--- 13,24 ----
  #include "../include/io.h"
  
+ #ifdef HAVE_SSL
+ SSL_METHOD *meth;
+ SSL_CTX *ctx;
+ SSL *ssl;
+ int use_ssl=NDO_TRUE;
+ #else
+ int use_ssl=NDO_FALSE;
+ #endif
  
  
***************
*** 81,85 ****
  		free(temp_mmapfile->path);
  	free(temp_mmapfile);
! 	
  	return NDO_OK;
          }
--- 89,93 ----
  		free(temp_mmapfile->path);
  	free(temp_mmapfile);
! 
  	return NDO_OK;
          }
***************
*** 142,145 ****
--- 150,154 ----
  	mode_t mode=S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP;
  	int newfd=0;
+ 	int rc=0;
  
  	/* use file */
***************
*** 168,173 ****
  
  		/* copy the socket address/path */
! 		strncpy(server_address_u.sun_path,name,sizeof(server_address_u.sun_path)); 
! 		server_address_u.sun_family=AF_UNIX; 
  
  		/* connect to the socket */
--- 177,182 ----
  
  		/* copy the socket address/path */
! 		strncpy(server_address_u.sun_path,name,sizeof(server_address_u.sun_path));
! 		server_address_u.sun_family=AF_UNIX;
  
  		/* connect to the socket */
***************
*** 183,187 ****
  		if(name==NULL)
  			return NDO_ERROR;
! 		
  		/* clear the address */
  		bzero((char *)&server_address_i,sizeof(server_address_i));
--- 192,213 ----
  		if(name==NULL)
  			return NDO_ERROR;
! 
! #ifdef HAVE_SSL
! 		if(use_ssl==NDO_TRUE){
! 			SSL_library_init();
! 			SSLeay_add_ssl_algorithms();
! 			meth=SSLv23_client_method();
! 			SSL_load_error_strings();
! 
! 			if((ctx=SSL_CTX_new(meth))==NULL){
! 					printf("CHECK_NRPE: Error - could not create SSL context.\n");
! 					return NDO_ERROR;
! 			}
! 			/* ADDED 01/19/2004 */
! 			/* use only TLSv1 protocol */
! 			SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
! 	}
! #endif
! 
  		/* clear the address */
  		bzero((char *)&server_address_i,sizeof(server_address_i));
***************
*** 202,206 ****
  
  		/* copy the host/ip address and port */
! 		server_address_i.sin_family=AF_INET; 
  		server_address_i.sin_port=htons(port);
  
--- 228,232 ----
  
  		/* copy the host/ip address and port */
! 		server_address_i.sin_family=AF_INET;
  		server_address_i.sin_port=htons(port);
  
***************
*** 210,214 ****
  			return NDO_ERROR;
  		        }
! 	        }
  
  	/* unknown sink type */
--- 236,258 ----
  			return NDO_ERROR;
  		        }
! 
! 		#ifdef HAVE_SSL
! 		if(use_ssl==NDO_TRUE){
! 			if((ssl=SSL_new(ctx))!=NULL){
! 				SSL_CTX_set_cipher_list(ctx,"ADH");
! 				SSL_set_fd(ssl,newfd);
! 				if((rc=SSL_connect(ssl))!=1){
! 					printf("Error - Could not complete SSL handshake.\n");
! 					SSL_CTX_free(ctx);
! 					close(newfd);
! 					return NDO_ERROR;
! 				}
! 			} else {
! 				printf("CHECK_NRPE: Error - Could not create SSL connection structure.\n");
! 				return NDO_ERROR;
! 			}
! 		}
! #endif
! 		}
  
  	/* unknown sink type */
***************
*** 236,240 ****
  
  		/* try to write everything we have left */
! 		result=write(fd,buf+tbytes,buflen-tbytes);
  
  		/* some kind of error occurred */
--- 280,290 ----
  
  		/* try to write everything we have left */
! 		if (use_ssl == NDO_FALSE) {
! 			result=write(fd, buf+tbytes, buflen-tbytes);
! 		}
! 		else{
! 			result=SSL_write(ssl, buf+tbytes, buflen-tbytes);
! 		}
! 
  
  		/* some kind of error occurred */
***************
*** 321,329 ****
  				val=(val*base)+(c -'0');
  				c=*++cp;
! 			        } 
  			else if(base==16 && isascii((int)c) && isxdigit((int)c)){
  				val=(val<<4) | (c+10-(islower((int)c)?'a':'A'));
  				c = *++cp;
! 			        } 
  			else
  				break;
--- 371,379 ----
  				val=(val*base)+(c -'0');
  				c=*++cp;
! 			        }
  			else if(base==16 && isascii((int)c) && isxdigit((int)c)){
  				val=(val<<4) | (c+10-(islower((int)c)?'a':'A'));
  				c = *++cp;
! 			        }
  			else
  				break;
***************
*** 342,346 ****
  			*pp++=val;
  			c=*++cp;
! 		        } 
  		else
  			break;
--- 392,396 ----
  			*pp++=val;
  			c=*++cp;
! 		        }
  		else
  			break;

Index: ndomod.c
===================================================================
RCS file: /cvsroot/nagios/ndoutils/src/ndomod.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** ndomod.c	17 Jul 2009 01:25:10 -0000	1.18
--- ndomod.c	12 Aug 2009 21:19:38 -0000	1.19
***************
*** 106,109 ****
--- 106,110 ----
  extern int __nagios_object_structure_version;
  
+ extern int use_ssl;
  
  
***************
*** 438,441 ****
--- 439,445 ----
  		ndomod_buffer_file=strdup(val);
  
+ 	else if(!strcmp(var,"use_ssl"))
+ 		use_ssl=strtoul(val,NULL,0);
+ 
  	else
  		return NDO_ERROR;
***************
*** 799,802 ****
--- 803,810 ----
  			ndomod_write_to_logs(temp_buffer,NSLOG_INFO_MESSAGE);
  			free(temp_buffer);
+ 			asprintf(&temp_buffer,"ndomod: Please check remote ndo2db log, database connection or SSL Parameters");
+ 			ndomod_write_to_logs(temp_buffer,NSLOG_INFO_MESSAGE);
+ 			free(temp_buffer);
+ 
  			temp_buffer=NULL;
  		        }

Index: ndo2db.c
===================================================================
RCS file: /cvsroot/nagios/ndoutils/src/ndo2db.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -C2 -d -r1.24 -r1.25
*** ndo2db.c	10 Aug 2009 08:47:44 -0000	1.24
--- ndo2db.c	12 Aug 2009 21:19:38 -0000	1.25
***************
*** 26,33 ****
--- 26,43 ----
  #include "../include/dbhandlers.h"
  
+ #ifdef HAVE_SSL
+ #include "../include/dh.h"
+ #endif
+ 
  #define NDO2DB_VERSION "1.4b8"
  #define NDO2DB_NAME "NDO2DB"
  #define NDO2DB_DATE "07-16-2009"
  
+ #ifdef HAVE_SSL
+ SSL_METHOD *meth;
+ SSL_CTX *ctx;
+ int allow_weak_random_seed = NDO_FALSE;
+ #endif
+ extern int use_ssl;
  
  extern int errno;
***************
*** 79,82 ****
--- 89,98 ----
  #endif
  
+ #ifdef HAVE_SSL
+ 	DH *dh;
+ 	char seedfile[FILENAME_MAX];
+ 	int i,c;
+ #endif
+ 
  	result=ndo2db_process_arguments(argc,argv);
  
***************
*** 92,95 ****
--- 108,114 ----
  		printf("Last Modified: %s\n",NDO2DB_DATE);
  		printf("License: GPL v2\n");
+ #ifdef HAVE_SSL
+ 		printf("SSL/TLS Available: Anonymous DH Mode, OpenSSL 0.9.6 or higher required\n");
+ #endif
  		printf("\n");
  		printf("Stores Nagios event and configuration data to a database for later retrieval\n");
***************
*** 104,107 ****
--- 123,174 ----
  	        }
  
+ #ifdef HAVE_SSL
+         /* initialize SSL */
+         if(use_ssl==NDO_TRUE){
+         	SSL_library_init();
+         	SSLeay_add_ssl_algorithms();
+         	meth=SSLv23_server_method();
+         	SSL_load_error_strings();
+ 
+         	/* use week random seed if necessary */
+         	if(allow_weak_random_seed && (RAND_status()==0)){
+ 
+         		if(RAND_file_name(seedfile,sizeof(seedfile)-1))
+         			if(RAND_load_file(seedfile,-1))
+         				RAND_write_file(seedfile);
+ 
+         		if(RAND_status()==0){
+         			syslog(LOG_ERR,"Warning: SSL/TLS uses a weak random seed which is highly discouraged");
+         			srand(time(NULL));
+         			for(i=0;i<500 && RAND_status()==0;i++){
+         				for(c=0;c<sizeof(seedfile);c+=sizeof(int)){
+         					*((int *)(seedfile+c))=rand();
+         					}
+         				RAND_seed(seedfile,sizeof(seedfile));
+         				}
+         			}
+         		}
+         	if((ctx=SSL_CTX_new(meth))==NULL){
+         		syslog(LOG_ERR,"Error: could not create SSL context.\n");
+         		exit(1);
+         		}
+ 
+         	/* ADDED 01/19/2004 */
+         	/* use only TLSv1 protocol */
+         	SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
+ 
+         	/* use anonymous DH ciphers */
+         	SSL_CTX_set_cipher_list(ctx,"ADH");
+         	dh=get_dh512();
+         	SSL_CTX_set_tmp_dh(ctx,dh);
+         	DH_free(dh);
+         	syslog(LOG_INFO,"INFO: SSL/TLS initialized. All network traffic will be encrypted.");
+         	}
+         else{
+         	syslog(LOG_INFO,"INFO: SSL/TLS NOT initialized. Network encryption DISABLED.");
+         	}
+         /*Fin Hack SSL*/
+ #endif
+ 
  	/* initialize variables */
  	ndo2db_initialize_variables();
***************
*** 112,116 ****
  		exit(1);
  	        }
! 	
  	/* make sure we're good to go */
  	if(ndo2db_check_init_reqs()!=NDO_OK){
--- 179,183 ----
  		exit(1);
  	        }
! 
  	/* make sure we're good to go */
  	if(ndo2db_check_init_reqs()!=NDO_OK){
***************
*** 133,138 ****
  	if(db_supported==NDO_FALSE){
  		printf("Support for the specified database server is either not yet supported, or was not found on your system.\n");
  		exit(1);
! 	        }
  
  	/* initialize signal handling */
--- 200,211 ----
  	if(db_supported==NDO_FALSE){
  		printf("Support for the specified database server is either not yet supported, or was not found on your system.\n");
+ 
+ #ifdef HAVE_SSL
+ 		if(use_ssl==NDO_TRUE)
+ 			SSL_CTX_free(ctx);
+ #endif
+ 
  		exit(1);
! 		}
  
  	/* initialize signal handling */
***************
*** 175,180 ****
  	ndo2db_free_program_memory();
  
  	return 0;
!         }
  
  
--- 248,258 ----
  	ndo2db_free_program_memory();
  
+ #ifdef HAVE_SSL
+ 	if(use_ssl==NDO_TRUE)
+ 		SSL_CTX_free(ctx);
+ #endif
+ 
  	return 0;
! }
  
  
***************
*** 373,377 ****
  	else if(!strcmp(var,"ndo2db_group"))
  		ndo2db_group=strdup(val);
! 		
  	else if(!strcmp(var,"debug_file")){
  		if((ndo2db_debug_file=strdup(val))==NULL)
--- 451,455 ----
  	else if(!strcmp(var,"ndo2db_group"))
  		ndo2db_group=strdup(val);
! 
  	else if(!strcmp(var,"debug_file")){
  		if((ndo2db_debug_file=strdup(val))==NULL)
***************
*** 384,387 ****
--- 462,467 ----
  	else if(!strcmp(var,"max_debug_file_size"))
  		ndo2db_max_debug_file_size=strtoul(val,NULL,0);
+ 	else if(!strcmp(var,"use_ssl"))
+ 		use_ssl = strtoul(val, NULL, 0);
  
  	return NDO_OK;
***************
*** 391,395 ****
  /* initialize variables */
  int ndo2db_initialize_variables(void){
! 	
  	ndo2db_db_settings.server_type=NDO2DB_DBSERVER_NONE;
  	ndo2db_db_settings.host=NULL;
--- 471,475 ----
  /* initialize variables */
  int ndo2db_initialize_variables(void){
! 
  	ndo2db_db_settings.server_type=NDO2DB_DBSERVER_NONE;
  	ndo2db_db_settings.host=NULL;
***************
*** 491,495 ****
  	/* set effective group ID */
  	if(group!=NULL){
! 		
  		/* see if this is a group name */
  		if(strspn(group,"0123456789")<strlen(group)){
--- 571,575 ----
  	/* set effective group ID */
  	if(group!=NULL){
! 
  		/* see if this is a group name */
  		if(strspn(group,"0123456789")<strlen(group)){
***************
*** 517,521 ****
  	/* set effective user ID */
  	if(user!=NULL){
! 		
  		/* see if this is a user name */
  		if(strspn(user,"0123456789")<strlen(user)){
--- 597,601 ----
  	/* set effective user ID */
  	if(user!=NULL){
! 
  		/* see if this is a user name */
  		if(strspn(user,"0123456789")<strlen(user)){
***************
*** 531,535 ****
  		else
  			uid=(uid_t)atoi(user);
! 			
  		/* set effective user ID if other than current EUID */
  		if(uid!=geteuid()){
--- 611,615 ----
  		else
  			uid=(uid_t)atoi(user);
! 
  		/* set effective user ID if other than current EUID */
  		if(uid!=geteuid()){
***************
*** 740,743 ****
--- 820,824 ----
  	socklen_t client_address_length;
  
+ 
  	/* TCP socket */
  	if(ndo2db_socket_type==NDO_SINK_TCPSOCKET){
***************
*** 758,762 ****
  		/* clear the address */
  		bzero((char *)&server_address_i,sizeof(server_address_i));
! 		server_address_i.sin_family=AF_INET; 
  		server_address_i.sin_addr.s_addr=INADDR_ANY;
  		server_address_i.sin_port=htons(ndo2db_tcp_port);
--- 839,843 ----
  		/* clear the address */
  		bzero((char *)&server_address_i,sizeof(server_address_i));
! 		server_address_i.sin_family=AF_INET;
  		server_address_i.sin_addr.s_addr=INADDR_ANY;
  		server_address_i.sin_port=htons(ndo2db_tcp_port);
***************
*** 782,787 ****
  
  		/* copy the socket path */
! 		strncpy(server_address_u.sun_path,ndo2db_socket_name,sizeof(server_address_u.sun_path)); 
! 		server_address_u.sun_family=AF_UNIX; 
  
  		/* bind the socket */
--- 863,868 ----
  
  		/* copy the socket path */
! 		strncpy(server_address_u.sun_path,ndo2db_socket_name,sizeof(server_address_u.sun_path));
! 		server_address_u.sun_family=AF_UNIX;
  
  		/* bind the socket */
***************
*** 812,816 ****
  	while(1){
  
! 		/* 
  		Solaris 10 gets an EINTR error when file2sock invoked on the 2nd call
  		An alternative fix is not to fork below, but this has wider implications
--- 893,897 ----
  	while(1){
  
! 		/*
  		Solaris 10 gets an EINTR error when file2sock invoked on the 2nd call
  		An alternative fix is not to fork below, but this has wider implications
***************
*** 818,821 ****
--- 899,911 ----
  		while(1) {
  			new_sd=accept(ndo2db_sd,(ndo2db_socket_type==NDO_SINK_TCPSOCKET)?(struct sockaddr *)&client_address_i:(struct sockaddr *)&client_address_u,(socklen_t *)&client_address_length);
+ 
+ 			/* ToDo:  Hendrik 08/12/2009
+ 			 * If both ends think differently about SSL encryption, data from a ndomod will
+ 			 * be lost forever (likewise on database errors/misconfiguration)
+ 			 * This seems a good place to output some information from which client
+ 			 * a possible misconfiguration comes from.
+ 			 * Logging the ip address together with the ndomod instance name might be
+ 			 * a great hint for further error hunting
+ 			 */
  			if(new_sd>=0)
  				/* data available */
***************
*** 823,827 ****
  			if(errno == EINTR) {
  				/* continue */
! 				} 
  			else {
  				perror("Accept error");
--- 913,917 ----
  			if(errno == EINTR) {
  				/* continue */
! 				}
  			else {
  				perror("Accept error");
***************
*** 881,884 ****
--- 971,978 ----
  	int error=NDO_FALSE;
  
+ #ifdef HAVE_SSL
+ 	SSL *ssl=NULL;
+ #endif
+ 
  	/* open syslog facility */
  	/*openlog("ndo2db",0,LOG_DAEMON);*/
***************
*** 905,910 ****
--- 999,1032 ----
  	ndo2db_db_connect(&idi);
  
+ #ifdef HAVE_SSL
+ 	if(use_ssl==NDO_TRUE){
+ 		if((ssl=SSL_new(ctx))!=NULL){
+ 
+ 			SSL_set_fd(ssl,sd);
+ 
+ 			/* keep attempting the request if needed */
+ 			while(((result=SSL_accept(ssl))!=1) && (SSL_get_error(ssl,result)==SSL_ERROR_WANT_READ));
+ 
+ 			if(result!=1){
+ 				syslog(LOG_ERR,"Error: Could not complete SSL handshake. %d\n",SSL_get_error(ssl,result));
+ 
+ 				return NDO_ERROR;
+ 			}
+ 		}
+ 	}
+ #endif
+ 
  	/* read all data from client */
  	while(1){
+ #ifdef HAVE_SSL
+ 		if(use_ssl==NDO_FALSE)
+ 			result=read(sd,buf,sizeof(buf)-1);
+ 		else{
+ 			result=SSL_read(ssl,buf,sizeof(buf)-1);
+ 			if(result==-1 && (SSL_get_error(ssl,result)==SSL_ERROR_WANT_READ)){
+ 				syslog(LOG_ERR,"SSL read error\n");
+ 			}
+ 		}
+ #endif
  
  		result=read(sd,buf,sizeof(buf)-1);
***************
*** 917,920 ****
--- 1039,1050 ----
  			else {
  				error=NDO_TRUE;
+ 
+ #ifdef HAVE_SSL
+ 				if(ssl){
+ 					SSL_shutdown(ssl);
+ 					SSL_free(ssl);
+ 					syslog(LOG_INFO,"INFO: SSL Socket Shutdown.\n");
+ 				}
+ #endif
  				break;
  				}
***************
*** 924,927 ****
--- 1054,1065 ----
  		if(result==0){
  
+ #ifdef HAVE_SSL
+ 				if(ssl){
+ 					SSL_shutdown(ssl);
+ 					SSL_free(ssl);
+ 					syslog(LOG_INFO,"INFO: SSL Socket Shutdown.\n");
+ 				}
+ #endif
+ 
  			/* gracefully back out of current operation... */
  			ndo2db_db_goodbye(&idi);
***************
*** 1008,1012 ****
  		idi->mbuf[x].buffer=NULL;
  	        }
! 	
  	return NDO_OK;
          }
--- 1146,1150 ----
  		idi->mbuf[x].buffer=NULL;
  	        }
! 
  	return NDO_OK;
          }
***************
*** 1017,1021 ****
  	char *buf=NULL;
  	register int x;
! 	
  
  	if(dbuf==NULL)
--- 1155,1159 ----
  	char *buf=NULL;
  	register int x;
! 
  
  	if(dbuf==NULL)
***************
*** 1048,1052 ****
  				idi->bytes_processed+=(x+1);
  			        }
! 		
  			/* shift data back to front of buffer and adjust counters */
  			memmove((void *)&dbuf->buf[0],(void *)&dbuf->buf[x+1],(size_t)((int)dbuf->used_size-x-1));
--- 1186,1190 ----
  				idi->bytes_processed+=(x+1);
  			        }
! 
  			/* shift data back to front of buffer and adjust counters */
  			memmove((void *)&dbuf->buf[0],(void *)&dbuf->buf[x+1],(size_t)((int)dbuf->used_size-x-1));
***************
*** 1347,1351 ****
  			/* get the data type */
  			data_type_long=strtoul(var,NULL,0);
! 				
  			/* there was an error with the data type - throw it out */
  			if(data_type_long==ULONG_MAX && errno==ERANGE)
--- 1485,1489 ----
  			/* get the data type */
  			data_type_long=strtoul(var,NULL,0);
! 
  			/* there was an error with the data type - throw it out */
  			if(data_type_long==ULONG_MAX && errno==ERANGE)
***************
*** 1380,1384 ****
  		                }
  		        }
! 		
  		break;
  
--- 1518,1522 ----
  		                }
  		        }
! 
  		break;
  
***************
*** 1885,1889 ****
  	return NDO_OK;
  	}
! 	
  
  
--- 2023,2027 ----
  	return NDO_OK;
  	}
! 
  
  
***************
*** 1897,1901 ****
  	int result3=NDO_OK;
  	int result4=NDO_OK;
! 	
  	result1=ndo2db_convert_string_to_int(idi->buffered_input[NDO_DATA_TYPE],type);
  	result2=ndo2db_convert_string_to_int(idi->buffered_input[NDO_DATA_FLAGS],flags);
--- 2035,2039 ----
  	int result3=NDO_OK;
  	int result4=NDO_OK;
! 
  	result1=ndo2db_convert_string_to_int(idi->buffered_input[NDO_DATA_TYPE],type);
  	result2=ndo2db_convert_string_to_int(idi->buffered_input[NDO_DATA_FLAGS],flags);
***************
*** 1903,1907 ****
  	result4=ndo2db_convert_string_to_timeval(idi->buffered_input[NDO_DATA_TIMESTAMP],tstamp);
  
! 	if(result1==NDO_ERROR || result2==NDO_ERROR || result3==NDO_ERROR || result4==NDO_ERROR) 
  		return NDO_ERROR;
  
--- 2041,2045 ----
  	result4=ndo2db_convert_string_to_timeval(idi->buffered_input[NDO_DATA_TIMESTAMP],tstamp);
  
! 	if(result1==NDO_ERROR || result2==NDO_ERROR || result3==NDO_ERROR || result4==NDO_ERROR)
  		return NDO_ERROR;
  
***************
*** 2049,2053 ****
  	if(ndo2db_debug_file_fp!=NULL)
  		fclose(ndo2db_debug_file_fp);
! 	
  	ndo2db_debug_file_fp=NULL;
  
--- 2187,2191 ----
  	if(ndo2db_debug_file_fp!=NULL)
  		fclose(ndo2db_debug_file_fp);
! 
  	ndo2db_debug_file_fp=NULL;
  
***************
*** 2088,2092 ****
  		/* close the file */
  		ndo2db_close_debug_log();
! 		
  		/* rotate the log file */
  		asprintf(&temp_path,"%s.old",ndo2db_debug_file);
--- 2226,2230 ----
  		/* close the file */
  		ndo2db_close_debug_log();
! 
  		/* rotate the log file */
  		asprintf(&temp_path,"%s.old",ndo2db_debug_file);





More information about the Nagios-commits mailing list