[syslog-ng]patch to add service names to syslogng

Matthew Crosby mcrosby@marthon.org
Sun, 14 Jan 2001 20:07:51 -0700 (MST)


The below patch adds support to syslog-ng for supplying service names rather
then port numbers.  For example, with this you can have a config line
along the lines of

source foo { tcp(port(syslogng)); };

Should be fully backwards compatable, you can still use the numeric form.
If anyone's interested.  (I'd love to see this integrated into the main 
tree...)

----------------
diff -c src/afinet.c patched/afinet.c
*** src/afinet.c	Sun Jan 14 21:56:53 2001
--- patched/afinet.c	Sun Jan 14 21:56:47 2001
***************
*** 45,53 ****
  	}
  }
  
! void inet_address_setport(struct address_info **a, UINT32 port)
  {
  	CAST(inet_address_info, addr, *a);
  	if (!addr) {
  		*a = &make_inet_address(NULL, port)->super;
  	}
--- 45,64 ----
  	}
  }
  
! void inet_address_setport(struct address_info **a, UINT32 port, 
! 			  const char *service, const char *proto)
  {
+ 	struct servent *srv;
  	CAST(inet_address_info, addr, *a);
+ 
+ 	if(!port) {
+ 		if((srv=getservbyname(service,proto))) {
+ 			port=srv->s_port;
+ 		} else {
+ 		    werror("Error finding port for service %z.  Falling back to default\n", service);
+ 		    return;
+ 		}
+ 	} 
  	if (!addr) {
  		*a = &make_inet_address(NULL, port)->super;
  	}
***************
*** 156,166 ****
  	inet_address_setip(&source->bind_addr, ip);
  }
  
! void afinet_src_set_localport(struct log_source_driver *c, UINT32 port)
  {
  	CAST_SUBTYPE(afsocket_source, source, c);
  
! 	inet_address_setport(&source->bind_addr, port);
  }
  
  void afinet_src_set_auth(struct log_source_driver *c, UINT32 v)
--- 167,178 ----
  	inet_address_setip(&source->bind_addr, ip);
  }
  
! void afinet_src_set_localport(struct log_source_driver *c, UINT32 port, 
! 			      const char *service, const char *proto)
  {
  	CAST_SUBTYPE(afsocket_source, source, c);
  
! 	inet_address_setport(&source->bind_addr, port, service, proto);
  }
  
  void afinet_src_set_auth(struct log_source_driver *c, UINT32 v)
***************
*** 378,395 ****
  	inet_address_setip(&dest->dest_addr, ip);
  }
  
! void afinet_dest_set_localport(struct log_dest_driver *c, UINT32 port)
  {
  	CAST_SUBTYPE(afsocket_dest, dest, c);
  
! 	inet_address_setport(&dest->dest_addr, port);
  }
  
! void afinet_dest_set_destport(struct log_dest_driver *c, UINT32 port)
  {
  	CAST_SUBTYPE(afsocket_dest, dest, c);
  
! 	inet_address_setport(&dest->dest_addr, port);
  }
  
  static int do_init_afinet_dest(struct log_handler *c, 
--- 390,409 ----
  	inet_address_setip(&dest->dest_addr, ip);
  }
  
! void afinet_dest_set_localport(struct log_dest_driver *c, UINT32 port, 
! 			       const char *service, const char *proto)
  {
  	CAST_SUBTYPE(afsocket_dest, dest, c);
  
! 	inet_address_setport(&dest->dest_addr, port, service, proto);
  }
  
! void afinet_dest_set_destport(struct log_dest_driver *c, UINT32 port, 
! 			      const char *service, const char *proto)
  {
  	CAST_SUBTYPE(afsocket_dest, dest, c);
  
! 	inet_address_setport(&dest->dest_addr, port, service, proto);
  }
  
  static int do_init_afinet_dest(struct log_handler *c, 
diff -c src/afsocket.h patched/afsocket.h
*** src/afsocket.h	Tue Nov 23 14:32:37 1999
--- patched/afsocket.h	Sun Jan 14 21:54:36 2001
***************
*** 125,131 ****
  void afunix_set_group(struct log_source_driver *c, const char *group);
  void afunix_set_perm(struct log_source_driver *c, int perm);
  
! void afinet_src_set_localport(struct log_source_driver *c, UINT32 port);
  void afinet_src_set_localip(struct log_source_driver *c, const char *ip);
  void afinet_src_set_auth(struct log_source_driver *c, UINT32 v);
  void afinet_src_set_mac(struct log_source_driver *c, UINT32 v);
--- 125,131 ----
  void afunix_set_group(struct log_source_driver *c, const char *group);
  void afunix_set_perm(struct log_source_driver *c, int perm);
  
! void afinet_src_set_localport(struct log_source_driver *c, UINT32 port, const char *service,const char *proto);
  void afinet_src_set_localip(struct log_source_driver *c, const char *ip);
  void afinet_src_set_auth(struct log_source_driver *c, UINT32 v);
  void afinet_src_set_mac(struct log_source_driver *c, UINT32 v);
***************
*** 132,139 ****
  void afinet_src_set_encrypt(struct log_source_driver *c, UINT32 v);
  
  void afinet_dest_set_localip(struct log_dest_driver *c, const char *ip);
! void afinet_dest_set_localport(struct log_dest_driver *c, UINT32 port);
! void afinet_dest_set_destport(struct log_dest_driver *c, UINT32 port);
  void afinet_dest_set_auth(struct log_dest_driver *c, UINT32 value);
  void afinet_dest_set_mac(struct log_dest_driver *c, UINT32 value);
  void afinet_dest_set_encrypt(struct log_dest_driver *c, UINT32 value);
--- 132,139 ----
  void afinet_src_set_encrypt(struct log_source_driver *c, UINT32 v);
  
  void afinet_dest_set_localip(struct log_dest_driver *c, const char *ip);
! void afinet_dest_set_localport(struct log_dest_driver *c, UINT32 port, const char *service,const char *proto);
! void afinet_dest_set_destport(struct log_dest_driver *c, UINT32 port, const char *service,const char *proto);
  void afinet_dest_set_auth(struct log_dest_driver *c, UINT32 value);
  void afinet_dest_set_mac(struct log_dest_driver *c, UINT32 value);
  void afinet_dest_set_encrypt(struct log_dest_driver *c, UINT32 value);
diff -c src/cfg-grammar.y patched/cfg-grammar.y
*** src/cfg-grammar.y	Sun Jan 14 21:57:19 2001
--- patched/cfg-grammar.y	Sun Jan 14 21:57:26 2001
***************
*** 72,78 ****
  %token KW_COMPRESS KW_MAC KW_AUTH KW_ENCRYPT
  
  /* filter items*/
! %token KW_FACILITY KW_LEVEL KW_PROGRAM KW_HOST KW_MATCH
  
  /* yes/no switches */
  %token KW_YES KW_NO
--- 72,78 ----
  %token KW_COMPRESS KW_MAC KW_AUTH KW_ENCRYPT
  
  /* filter items*/
! %token KW_FACILITY KW_LEVEL KW_HOST KW_MATCH
  
  /* yes/no switches */
  %token KW_YES KW_NO
***************
*** 255,265 ****
  	;
  
  source_afinet_udp_option
  	: KW_LOCALIP '(' string ')'		{ afinet_src_set_localip(last_source_driver, $3); free($3); }
  	| KW_IP '(' string ')'			{ afinet_src_set_localip(last_source_driver, $3); free($3); }
- 	| KW_LOCALPORT '(' NUMBER ')'		{ afinet_src_set_localport(last_source_driver, $3); }
- 	| KW_PORT '(' NUMBER ')'		{ afinet_src_set_localport(last_source_driver, $3); }
- 	;
  
  
  source_afinet_tcp_params
--- 255,270 ----
  	;
  
  source_afinet_udp_option
+ 	: source_afinet_option
+ 	| KW_LOCALPORT '(' string ')'		{ afinet_src_set_localport(last_source_driver, 0, $3 ,"udp"); free($3); }
+ 	| KW_PORT '(' string ')'		{ afinet_src_set_localport(last_source_driver, 0, $3, "udp"); free($3); }
+ 	;
+ 
+ source_afinet_option
  	: KW_LOCALIP '(' string ')'		{ afinet_src_set_localip(last_source_driver, $3); free($3); }
+ 	| KW_LOCALPORT '(' NUMBER ')'		{ afinet_src_set_localport(last_source_driver, $3, NULL, NULL); }
+ 	| KW_PORT '(' NUMBER ')'		{ afinet_src_set_localport(last_source_driver, $3, NULL, NULL); }
  	| KW_IP '(' string ')'			{ afinet_src_set_localip(last_source_driver, $3); free($3); }
  
  
  source_afinet_tcp_params
***************
*** 278,284 ****
  	;
  
  source_afinet_tcp_option
!         : source_afinet_udp_option
  	| KW_AUTH '(' tripleoption ')'		{ afinet_src_set_auth(last_source_driver, $3); }
  	| KW_MAC '(' tripleoption ')'		{ afinet_src_set_mac(last_source_driver, $3); }
  	| KW_ENCRYPT '(' tripleoption ')'	{ afinet_src_set_encrypt(last_source_driver, $3); }
--- 283,291 ----
  	;
  
  source_afinet_tcp_option
!         : source_afinet_option
! 	| KW_LOCALPORT '(' string ')'		{ afinet_src_set_localport(last_source_driver, 0, $3,"tcp"); free($3); }
! 	| KW_PORT '(' string ')'		{ afinet_src_set_localport(last_source_driver, 0, $3,"tcp"); free($3); }
  	| KW_AUTH '(' tripleoption ')'		{ afinet_src_set_auth(last_source_driver, $3); }
  	| KW_MAC '(' tripleoption ')'		{ afinet_src_set_mac(last_source_driver, $3); }
  	| KW_ENCRYPT '(' tripleoption ')'	{ afinet_src_set_encrypt(last_source_driver, $3); }
***************
*** 428,440 ****
  	|
  	;
  
! dest_afinet_udp_option
  	: KW_LOCALIP '(' string ')'		{ afinet_dest_set_localip(last_dest_driver, $3); free($3); }
! 	| KW_LOCALPORT '(' NUMBER ')'		{ afinet_dest_set_localport(last_dest_driver, $3); }
! 	| KW_PORT '(' NUMBER ')'		{ afinet_dest_set_destport(last_dest_driver, $3); }
! 	| KW_DESTPORT '(' NUMBER ')'		{ afinet_dest_set_destport(last_dest_driver, $3); }
  	;
  
  dest_afinet_tcp_params
  	: string 	
  	  { 
--- 435,454 ----
  	|
  	;
  
! dest_afinet_option
  	: KW_LOCALIP '(' string ')'		{ afinet_dest_set_localip(last_dest_driver, $3); free($3); }
! 	| KW_LOCALPORT '(' NUMBER ')'		{ afinet_dest_set_localport(last_dest_driver, $3, NULL, NULL); }
! 	| KW_PORT '(' NUMBER ')'		{ afinet_dest_set_destport(last_dest_driver, $3, NULL, NULL); }
! 	| KW_DESTPORT '(' NUMBER ')'		{ afinet_dest_set_destport(last_dest_driver, $3, NULL, NULL); }
  	;
  
+ dest_afinet_udp_option
+ 	: dest_afinet_option
+ 	| KW_LOCALPORT '(' string ')'		{ afinet_dest_set_localport(last_dest_driver, 0, $3,"udp"); free($3); }
+ 	| KW_PORT '(' string ')'		{ afinet_dest_set_destport(last_dest_driver, 0, $3,"udp"); free($3); }
+ 	| KW_DESTPORT '(' string ')'		{ afinet_dest_set_destport(last_dest_driver, 0, $3,"udp"); free($3); }
+ 	;
+ 
  dest_afinet_tcp_params
  	: string 	
  	  { 
***************
*** 452,458 ****
  	;
  
  dest_afinet_tcp_option
! 	: dest_afinet_udp_option
  	| KW_MAC '(' yesno ')'
  	| KW_AUTH '(' yesno ')'
  	| KW_ENCRYPT '(' yesno ')'
--- 466,475 ----
  	;
  
  dest_afinet_tcp_option
! 	: dest_afinet_option
! 	| KW_LOCALPORT '(' string ')'		{ afinet_dest_set_localport(last_dest_driver, 0, $3,"tcp"); free($3); }
! 	| KW_PORT '(' string ')'		{ afinet_dest_set_destport(last_dest_driver, 0, $3,"tcp"); free($3); }
! 	| KW_DESTPORT '(' string ')'		{ afinet_dest_set_destport(last_dest_driver, 0, $3,"tcp"); free($3); }
  	| KW_MAC '(' yesno ')'
  	| KW_AUTH '(' yesno ')'
  	| KW_ENCRYPT '(' yesno ')'