I think the whole code should be more autoconf depended.
Autoconf can detect if POSIX version is available and if not, code can
provide alternative.
No need for the openvpn_ functions and wrappers.

On Fri, Dec 2, 2011 at 1:02 PM, David Sommerseth <dav...@redhat.com> wrote:
>
> Commit 0f2bc0dd92f43c91e33bba8a66b06b98f281efc1 adds some extra
> checks on configured files and directories.  This required use of
> the dirname() function.  Unfortunately, this function is not available
> on Windows.
>
> This function reimplements the POSIX variant of dirname(), using the
> framework already available in openvpn_basename().  The POSIX variant
> of dirname() will modify the input data.
>
> Signed-off-by: David Sommerseth <dav...@redhat.com>
> Cc: Heiko Hund <heiko.h...@sophos.com>
> ---
>  misc.c    |   36 ++++++++++++++++++++++++++++++++----
>  misc.h    |    3 +++
>  options.c |    3 +--
>  3 files changed, 36 insertions(+), 6 deletions(-)
>
> diff --git a/misc.c b/misc.c
> index 99e5bc5..eb04918 100644
> --- a/misc.c
> +++ b/misc.c
> @@ -2370,10 +2370,13 @@ argv_test (void)
>  }
>  #endif
>
> -const char *
> -openvpn_basename (const char *path)
> +
> +enum ovpn_dirbasename_t { DIRNAME, BASENAME };
> +
> +static inline char *
> +openvpn_dirbasename(char *path, enum ovpn_dirbasename_t type)
>  {
> -  const char *ret;
> +  char *ret;
>   const int dirsep = OS_SPECIFIC_DIRSEP;
>
>   if (path)
> @@ -2384,11 +2387,36 @@ openvpn_basename (const char *path)
>       else
>        ret = path;
>       if (*ret)
> -       return ret;
> +        switch( type ) {
> +        case BASENAME:
> +          return ret;
> +
> +        case DIRNAME:
> +          /* This implements the POSIX variant of dirname(),
> +           * which do modify the input
> +           */
> +          *(ret-1) = 0;
> +          return path;
> +        }
>     }
>   return NULL;
>  }
>
> +const char *
> +openvpn_basename (const char *path)
> +{
> +  /* the path is recasted as non-const, as we are sure it will not be 
> modified
> +   * in the basename type
> +   */
> +  return (const char *) openvpn_dirbasename((char *) path, BASENAME);
> +}
> +
> +const char *
> +openvpn_dirname (char *path)
> +{
> +        return openvpn_dirbasename(path, DIRNAME);
> +}
> +
>  /*
>  * Remove security-sensitive strings from control message
>  * so that they will not be output to log file.
> diff --git a/misc.h b/misc.h
> index b2e6f91..9b35f18 100644
> --- a/misc.h
> +++ b/misc.h
> @@ -384,6 +384,9 @@ size_t adjust_power_of_2 (size_t u);
>  /* return the basename of path */
>  const char *openvpn_basename (const char *path);
>
> +/* return the dirname of path - POSIX variant, which modifies the input */
> +const char *openvpn_dirname (char *path);
> +
>  /*
>  * A printf-like function (that only recognizes a subset of standard printf
>  * format operators) that prints arguments to an argv list instead
> diff --git a/options.c b/options.c
> index 28296a5..a29c115 100644
> --- a/options.c
> +++ b/options.c
> @@ -53,7 +53,6 @@
>  #include "forward.h"
>  #include <ctype.h>
>  #include <unistd.h>
> -#include <libgen.h>
>
>  #include "memdbg.h"
>
> @@ -2616,7 +2615,7 @@ check_file_access(const int type, const char *file, 
> const int mode, const char *
>   if (type & CHKACC_DIRPATH)
>     {
>       char *fullpath = strdup(file);  /* POSIX dirname() implementaion may 
> modify its arguments */
> -      char *dirpath = dirname(fullpath);
> +      const char *dirpath = openvpn_dirname(fullpath);
>
>       if (access (dirpath, mode|X_OK) != 0)
>           errcode = errno;
> --
> 1.7.4.4
>
>
> ------------------------------------------------------------------------------
> All the data continuously generated in your IT infrastructure
> contains a definitive record of customers, application performance,
> security threats, fraudulent activity, and more. Splunk takes this
> data and makes sense of it. IT sense. And common sense.
> http://p.sf.net/sfu/splunk-novd2d
> _______________________________________________
> Openvpn-devel mailing list
> Openvpn-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to