Please stop sending me mails u fools, this is not unsubscribing fed up of
this.
Remove my mail I'd for GOD sacks

On 15-Sep-2017 3:05 AM, "Steffan Karger" <steffan.kar...@fox-it.com> wrote:

> This function is called in response to connecting clients, and can fail
> when I/O fails for some (possibly temporary) reason.  In such cases we
> should not exit the process, but just reject the connecting client.
>
> This commit changes the function to actually return NULL on errors, and
> (where needed) changes the callers to check for and handle errors.
>
> Note that this changes the behavior for pf plugins: instead of just not
> initializing the firewall rules and happily continuing, this now rejects
> the client in the case of an (unlikely) failure to initialize the pf.
>
> Since the tls-crypt-v2 metadata code also calls create_temp_file() when
> clients connect, I consider this a prerequisite for tls-crypt-v2.
>
> Signed-off-by: Steffan Karger <steffan.kar...@fox-it.com>
> ---
>  src/openvpn/misc.c       |  6 +++---
>  src/openvpn/pf.c         |  8 ++++----
>  src/openvpn/ssl_verify.c | 32 +++++++++++++++++++++-----------
>  3 files changed, 28 insertions(+), 18 deletions(-)
>
> diff --git a/src/openvpn/misc.c b/src/openvpn/misc.c
> index 8c7f611..25f3800 100644
> --- a/src/openvpn/misc.c
> +++ b/src/openvpn/misc.c
> @@ -740,7 +740,7 @@ create_temp_file(const char *directory, const char
> *prefix, struct gc_arena *gc)
>          retfname = gen_path(directory, BSTR(&fname), gc);
>          if (!retfname)
>          {
> -            msg(M_FATAL, "Failed to create temporary filename and path");
> +            msg(M_WARN, "Failed to create temporary filename and path");
>              return NULL;
>          }
>
> @@ -755,14 +755,14 @@ create_temp_file(const char *directory, const char
> *prefix, struct gc_arena *gc)
>          else if (fd == -1 && errno != EEXIST)
>          {
>              /* Something else went wrong, no need to retry.  */
> -            msg(M_FATAL | M_ERRNO, "Could not create temporary file '%s'",
> +            msg(M_WARN | M_ERRNO, "Could not create temporary file '%s'",
>                  retfname);
>              return NULL;
>          }
>      }
>      while (attempts < 6);
>
> -    msg(M_FATAL, "Failed to create temporary file after %i attempts",
> attempts);
> +    msg(M_WARN, "Failed to create temporary file after %i attempts",
> attempts);
>      return NULL;
>  }
>
> diff --git a/src/openvpn/pf.c b/src/openvpn/pf.c
> index 5cb002b..5fe1734 100644
> --- a/src/openvpn/pf.c
> +++ b/src/openvpn/pf.c
> @@ -639,10 +639,10 @@ pf_init_context(struct context *c)
>                  }
>  #endif
>              }
> -            else
> -            {
> -                msg(M_WARN, "WARNING: OPENVPN_PLUGIN_ENABLE_PF disabled");
> -            }
> +        }
> +        if (!c->c2.pf.enabled)
> +        {
> +            register_signal(c, SIGUSR1, "plugin-pf-init-failed");
>          }
>      }
>  #endif /* ifdef PLUGIN_PF */
> diff --git a/src/openvpn/ssl_verify.c b/src/openvpn/ssl_verify.c
> index 9cd36d7..df2736c 100644
> --- a/src/openvpn/ssl_verify.c
> +++ b/src/openvpn/ssl_verify.c
> @@ -547,14 +547,14 @@ verify_cert_export_cert(openvpn_x509_cert_t
> *peercert, const char *tmp_dir, stru
>      FILE *peercert_file;
>      const char *peercert_filename = "";
>
> -    if (!tmp_dir)
> +    /* create tmp file to store peer cert */
> +    if (!tmp_dir ||
> +        !(peercert_filename = create_temp_file(tmp_dir, "pcf", gc)))
>      {
> +        msg (M_WARN, "Failed to create peer cert file");
>          return NULL;
>      }
>
> -    /* create tmp file to store peer cert */
> -    peercert_filename = create_temp_file(tmp_dir, "pcf", gc);
> -
>      /* write peer-cert in tmp-file */
>      peercert_file = fopen(peercert_filename, "w+");
>      if (!peercert_file)
> @@ -589,10 +589,13 @@ verify_cert_call_command(const char *verify_command,
> struct env_set *es,
>
>      if (verify_export_cert)
>      {
> -        if ((tmp_file = verify_cert_export_cert(cert, verify_export_cert,
> &gc)))
> +        tmp_file = verify_cert_export_cert(cert, verify_export_cert, &gc);
> +        if (!tmp_file)
>          {
> -            setenv_str(es, "peer_cert", tmp_file);
> +            ret = false;
> +            goto cleanup;
>          }
> +        setenv_str(es, "peer_cert", tmp_file);
>      }
>
>      argv_parse_cmd(&argv, verify_command);
> @@ -609,6 +612,7 @@ verify_cert_call_command(const char *verify_command,
> struct env_set *es,
>          }
>      }
>
> +cleanup:
>      gc_free(&gc);
>      argv_reset(&argv);
>
> @@ -879,21 +883,21 @@ key_state_rm_auth_control_file(struct key_state *ks)
>      }
>  }
>
> -static void
> +static bool
>  key_state_gen_auth_control_file(struct key_state *ks, const struct
> tls_options *opt)
>  {
>      struct gc_arena gc = gc_new();
> -    const char *acf;
>
>      key_state_rm_auth_control_file(ks);
> -    acf = create_temp_file(opt->tmp_dir, "acf", &gc);
> +    const char *acf = create_temp_file(opt->tmp_dir, "acf", &gc);
>      if (acf)
>      {
>          ks->auth_control_file = string_alloc(acf, NULL);
>          setenv_str(opt->es, "auth_control_file", ks->auth_control_file);
> -    } /* FIXME: Should have better error handling? */
> +    }
>
>      gc_free(&gc);
> +    return acf;
>  }
>
>  static unsigned int
> @@ -1184,7 +1188,12 @@ verify_user_pass_plugin(struct tls_session
> *session, const struct user_pass *up,
>
>  #ifdef PLUGIN_DEF_AUTH
>          /* generate filename for deferred auth control file */
> -        key_state_gen_auth_control_file(ks, session->opt);
> +        if (!key_state_gen_auth_control_file(ks, session->opt))
> +        {
> +            msg (D_TLS_ERRORS, "TLS Auth Error (%s): "
> +                 "could not create deferred auth control file", __func__);
> +            goto cleanup;
> +        }
>  #endif
>
>          /* call command */
> @@ -1209,6 +1218,7 @@ verify_user_pass_plugin(struct tls_session *session,
> const struct user_pass *up,
>          msg(D_TLS_ERRORS, "TLS Auth Error (verify_user_pass_plugin): peer
> provided a blank username");
>      }
>
> +cleanup:
>      return retval;
>  }
>
> --
> 2.7.4
>
>
> ------------------------------------------------------------
> ------------------
> 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
>
------------------------------------------------------------------------------
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