On 04-10-16 22:20, Lev Stipakov wrote:
> v2:
>  - Move digest update to separate method
> 
> Peer-id might change on restart and this should not trigger reopening
> tun.
> 
> Trac #649
> ---
>  src/openvpn/push.c | 45 ++++++++++++++++++++++++++++++---------------
>  1 file changed, 30 insertions(+), 15 deletions(-)
> 
> diff --git a/src/openvpn/push.c b/src/openvpn/push.c
> index a1b999e..c0c78a0 100644
> --- a/src/openvpn/push.c
> +++ b/src/openvpn/push.c
> @@ -597,6 +597,20 @@ process_incoming_push_request (struct context *c)
>  }
>  #endif
>  
> +static void
> +push_update_digest(md_ctx_t *ctx, struct buffer *buf)
> +{
> +  char line[OPTION_PARM_SIZE];
> +  while (buf_parse (buf, ',', line, sizeof (line)))
> +    {
> +      /* peer-id might change on restart and this should not trigger 
> reopening tun */
> +      if (strstr (line, "peer-id ") != line)
> +     {
> +       md_ctx_update (ctx, (const uint8_t *) line, strlen(line));
> +     }
> +    }
> +}
> +
>  int
>  process_incoming_push_msg (struct context *c,
>                          const struct buffer *buffer,
> @@ -636,21 +650,22 @@ process_incoming_push_msg (struct context *c,
>                                 permission_mask,
>                                 option_types_found,
>                                 c->c2.es))
> -         switch (c->options.push_continuation)
> -           {
> -           case 0:
> -           case 1:
> -             md_ctx_update (&c->c2.pulled_options_state, BPTR(&buf_orig), 
> BLEN(&buf_orig));
> -             md_ctx_final (&c->c2.pulled_options_state, 
> c->c2.pulled_options_digest.digest);
> -             md_ctx_cleanup (&c->c2.pulled_options_state);
> -             c->c2.pulled_options_md5_init_done = false;
> -             ret = PUSH_MSG_REPLY;
> -             break;
> -           case 2:
> -             md_ctx_update (&c->c2.pulled_options_state, BPTR(&buf_orig), 
> BLEN(&buf_orig));
> -             ret = PUSH_MSG_CONTINUATION;
> -             break;
> -           }
> +         {
> +           push_update_digest (&c->c2.pulled_options_state, &buf_orig);
> +           switch (c->options.push_continuation)
> +             {
> +               case 0:
> +               case 1:
> +                 md_ctx_final (&c->c2.pulled_options_state, 
> c->c2.pulled_options_digest.digest);
> +                 md_ctx_cleanup (&c->c2.pulled_options_state);
> +                 c->c2.pulled_options_md5_init_done = false;
> +                 ret = PUSH_MSG_REPLY;
> +                 break;
> +               case 2:
> +                 ret = PUSH_MSG_CONTINUATION;
> +                 break;
> +             }
> +         }
>       }
>        else if (ch == '\0')
>       {
> 

ACK

-Steffan

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to