Re: fix relayd dns protocol

2017-07-04 Thread Florian Obser
OK florian@

On Thu, Jun 29, 2017 at 09:26:16PM +, Rivo Nurges wrote:
> Hi!
> 
> config_setrelay>relay_privinit>relay_udp_privinit doesn't set env
> since env isn't set in relay.c yet, causing dns relay to SIGSEGV
> in relay_udp_server. Move setting env to relay_udp_init.
> 
> Rivo
> 
> Index: usr.sbin/relayd/relay.c
> ===
> RCS file: /cvs/src/usr.sbin/relayd/relay.c,v
> retrieving revision 1.221
> diff -u -p -r1.221 relay.c
> --- usr.sbin/relayd/relay.c   28 May 2017 10:39:15 -  1.221
> +++ usr.sbin/relayd/relay.c   29 Jun 2017 20:58:08 -
> @@ -285,7 +285,7 @@ relay_privinit(struct relay *rlay)
>  
>   switch (rlay->rl_proto->type) {
>   case RELAY_PROTO_DNS:
> - relay_udp_privinit(env, rlay);
> + relay_udp_privinit(rlay);
>   break;
>   case RELAY_PROTO_TCP:
>   break;
> @@ -445,7 +445,7 @@ relay_launch(void)
>  
>   switch (rlay->rl_proto->type) {
>   case RELAY_PROTO_DNS:
> - relay_udp_init(rlay);
> + relay_udp_init(env, rlay);
>   break;
>   case RELAY_PROTO_TCP:
>   case RELAY_PROTO_HTTP:
> Index: usr.sbin/relayd/relay_udp.c
> ===
> RCS file: /cvs/src/usr.sbin/relayd/relay_udp.c,v
> retrieving revision 1.46
> diff -u -p -r1.46 relay_udp.c
> --- usr.sbin/relayd/relay_udp.c   28 May 2017 10:39:15 -  1.46
> +++ usr.sbin/relayd/relay_udp.c   29 Jun 2017 20:58:08 -
> @@ -58,20 +58,20 @@ void   relay_dns_result(struct rsession 
>  int   relay_dns_cmp(struct rsession *, struct rsession *);
>  
>  void
> -relay_udp_privinit(struct relayd *x_env, struct relay *rlay)
> +relay_udp_privinit(struct relay *rlay)
>  {
> - if (env == NULL)
> - env = x_env;
> -
>   if (rlay->rl_conf.flags & F_TLS)
>   fatalx("tls over udp is not supported");
>   rlay->rl_conf.flags |= F_UDP;
>  }
>  
>  void
> -relay_udp_init(struct relay *rlay)
> +relay_udp_init(struct relayd *x_env, struct relay *rlay)
>  {
>   struct protocol *proto = rlay->rl_proto;
> +
> + if (env == NULL)
> + env = x_env;
>  
>   switch (proto->type) {
>   case RELAY_PROTO_DNS:
> Index: usr.sbin/relayd/relayd.h
> ===
> RCS file: /cvs/src/usr.sbin/relayd/relayd.h,v
> retrieving revision 1.240
> diff -u -p -r1.240 relayd.h
> --- usr.sbin/relayd/relayd.h  27 May 2017 08:33:25 -  1.240
> +++ usr.sbin/relayd/relayd.h  29 Jun 2017 20:58:08 -
> @@ -1218,8 +1218,8 @@ int  relay_httpdesc_init(struct ctl_rela
>  ssize_t   relay_http_time(time_t, char *, size_t);
>  
>  /* relay_udp.c */
> -void  relay_udp_privinit(struct relayd *, struct relay *);
> -void  relay_udp_init(struct relay *);
> +void  relay_udp_privinit(struct relay *);
> +void  relay_udp_init(struct relayd *, struct relay *);
>  int   relay_udp_bind(struct sockaddr_storage *, in_port_t,
>   struct protocol *);
>  void  relay_udp_server(int, short, void *);
> 
> 

-- 
I'm not entirely sure you are real.



fix relayd dns protocol

2017-06-29 Thread Rivo Nurges
Hi!

config_setrelay>relay_privinit>relay_udp_privinit doesn't set env
since env isn't set in relay.c yet, causing dns relay to SIGSEGV
in relay_udp_server. Move setting env to relay_udp_init.

Rivo

Index: usr.sbin/relayd/relay.c
===
RCS file: /cvs/src/usr.sbin/relayd/relay.c,v
retrieving revision 1.221
diff -u -p -r1.221 relay.c
--- usr.sbin/relayd/relay.c 28 May 2017 10:39:15 -  1.221
+++ usr.sbin/relayd/relay.c 29 Jun 2017 20:58:08 -
@@ -285,7 +285,7 @@ relay_privinit(struct relay *rlay)
 
switch (rlay->rl_proto->type) {
case RELAY_PROTO_DNS:
-   relay_udp_privinit(env, rlay);
+   relay_udp_privinit(rlay);
break;
case RELAY_PROTO_TCP:
break;
@@ -445,7 +445,7 @@ relay_launch(void)
 
switch (rlay->rl_proto->type) {
case RELAY_PROTO_DNS:
-   relay_udp_init(rlay);
+   relay_udp_init(env, rlay);
break;
case RELAY_PROTO_TCP:
case RELAY_PROTO_HTTP:
Index: usr.sbin/relayd/relay_udp.c
===
RCS file: /cvs/src/usr.sbin/relayd/relay_udp.c,v
retrieving revision 1.46
diff -u -p -r1.46 relay_udp.c
--- usr.sbin/relayd/relay_udp.c 28 May 2017 10:39:15 -  1.46
+++ usr.sbin/relayd/relay_udp.c 29 Jun 2017 20:58:08 -
@@ -58,20 +58,20 @@ void relay_dns_result(struct rsession 
 int relay_dns_cmp(struct rsession *, struct rsession *);
 
 void
-relay_udp_privinit(struct relayd *x_env, struct relay *rlay)
+relay_udp_privinit(struct relay *rlay)
 {
-   if (env == NULL)
-   env = x_env;
-
if (rlay->rl_conf.flags & F_TLS)
fatalx("tls over udp is not supported");
rlay->rl_conf.flags |= F_UDP;
 }
 
 void
-relay_udp_init(struct relay *rlay)
+relay_udp_init(struct relayd *x_env, struct relay *rlay)
 {
struct protocol *proto = rlay->rl_proto;
+
+   if (env == NULL)
+   env = x_env;
 
switch (proto->type) {
case RELAY_PROTO_DNS:
Index: usr.sbin/relayd/relayd.h
===
RCS file: /cvs/src/usr.sbin/relayd/relayd.h,v
retrieving revision 1.240
diff -u -p -r1.240 relayd.h
--- usr.sbin/relayd/relayd.h27 May 2017 08:33:25 -  1.240
+++ usr.sbin/relayd/relayd.h29 Jun 2017 20:58:08 -
@@ -1218,8 +1218,8 @@ intrelay_httpdesc_init(struct ctl_rela
 ssize_t relay_http_time(time_t, char *, size_t);
 
 /* relay_udp.c */
-voidrelay_udp_privinit(struct relayd *, struct relay *);
-voidrelay_udp_init(struct relay *);
+voidrelay_udp_privinit(struct relay *);
+voidrelay_udp_init(struct relayd *, struct relay *);
 int relay_udp_bind(struct sockaddr_storage *, in_port_t,
struct protocol *);
 voidrelay_udp_server(int, short, void *);