Skip to contentSkip to conversation

support UTF-8 --client-config-dir

PATCH In review Heiko Hund 2 participants 2 messages Oct 29, 2012

lore
Share & tools
lore

Heiko Hund

author
#0 lore raw

PATCH 1/1 support UTF-8 --client-config-dir

If a common name (or user name, when used in conjunction with --username-as-common-name) contains UTF-8 encoded characters their octets get replaced by underscores. This becomes problematic when user "Müller" and "Möller" need to have a CCD files and both would be receive options from the file "M__ller". The situation is even worse for non-latin alphabets, where CCD file names consist of underscores entirely.

This patch removes that limitation and also allows the file names to contain any punctuation characters besided the resevered ones.

---
 src/openvpn/buffer.c |   10 ++++++++++
 src/openvpn/buffer.h |    5 +++++
 src/openvpn/misc.c   |    8 +++++++-
 3 files changed, 22 insertions(+), 1 deletion(-)
src/openvpn/buffer.c +10 -0
index 5eee3ee..56d14b1 100644
@@ -782,6 +782,16 @@ char_class (const unsigned char c, const unsigned int flags)
     return true;
   if ((flags & CC_EQUAL) && c == '=')
     return true;
+  if ((flags & CC_LESS_THAN) && c == '<')
+    return true;
+  if ((flags & CC_GREATER_THAN) && c == '>')
+    return true;
+  if ((flags & CC_PIPE) && c == '|')
+    return true;
+  if ((flags & CC_QUESTION_MARK) && c == '?')
+    return true;
+  if ((flags & CC_ASTERISK) && c == '*')
+    return true;
 
   return false;
 }
src/openvpn/buffer.h +5 -0
index 9bc33db..5e11de0 100644
@@ -736,6 +736,11 @@ const char *np (const char *str);
 #define CC_REVERSE_QUOTE      (1<<23)
 #define CC_AT                 (1<<24)
 #define CC_EQUAL              (1<<25)
+#define CC_LESS_THAN          (1<<26)
+#define CC_GREATER_THAN       (1<<27)
+#define CC_PIPE               (1<<28)
+#define CC_QUESTION_MARK      (1<<29)
+#define CC_ASTERISK           (1<<30)
 
 /* macro classes */
 #define CC_NAME               (CC_ALNUM|CC_UNDERBAR)
src/openvpn/misc.c +7 -1
index d2882d8..d33db20 100644
@@ -1056,7 +1056,13 @@ hostname_randomize(const char *hostname, struct gc_arena *gc)
 const char *
 gen_path (const char *directory, const char *filename, struct gc_arena *gc)
 {
-  const char *safe_filename = string_mod_const (filename, CC_ALNUM|CC_UNDERBAR|CC_DASH|CC_DOT|CC_AT, 0, '_', gc);
+#if WIN32
+  const int CC_PATH_RESERVED = CC_LESS_THAN|CC_GREATER_THAN|CC_COLON|
+    CC_DOUBLE_QUOTE|CC_SLASH|CC_BACKSLASH|CC_PIPE|CC_QUESTION_MARK|CC_ASTERISK;
+#else
+  const int CC_PATH_RESERVED = CC_SLASH;
+#endif
+  const char *safe_filename = string_mod_const (filename, CC_PRINT, CC_PATH_RESERVED, '_', gc);
 
   if (safe_filename
       && strcmp (safe_filename, ".")
Signature · 1 line
1.7.9.5
#1 lore raw
Quoted 11 lines · Heiko Hund

If a common name (or user name, when used in conjunction with --username-as-common-name) contains UTF-8 encoded characters their octets get replaced by underscores. This becomes problematic when user "Müller" and "Möller" need to have a CCD files and both would be receive options from the file "M__ller". The situation is even worse for non-latin alphabets, where CCD file names consist of underscores entirely.

This patch removes that limitation and also allows the file names to contain any punctuation characters besided the resevered ones.

Quoted 7 lines
---
 src/openvpn/buffer.c |   10 ++++++++++
 src/openvpn/buffer.h |    5 +++++
 src/openvpn/misc.c   |    8 +++++++-
 3 files changed, 22 insertions(+), 1 deletion(-)

ACK. Applied to master and beta/2.3.

commit 9885f57e3ac8d2e32ba20ca84f6bdd0a1a995eac (master) commit d442b8dbc4230e4252a63fbd57f149ef3fa090c8 (beta/2.3)

Author: Heiko Hund <[email protected]...>
Date:   Mon Oct 29 14:16:37 2012 +0100
    Support UTF-8 --client-config-dir
    
    Signed-off-by: Heiko Hund <[email protected]...>
    Acked-by: David Sommerseth <[email protected]...>
    Message-Id: [email protected]...
    URL: http://article.gmane.org/gmane.network.openvpn.devel/7110
    Signed-off-by: David Sommerseth <[email protected]...>

kind regards,

David Sommerseth