Browse code

Replace leading dash ('-') characters in an X509 name with underbars ('_') before calling user-defined scripts, to preclude the chance of a leading dash being interpreted as an option prefix.

git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@3083 e7ae566f-a301-0410-adde-c780ea21d3b5

james authored on 2008/07/19 09:29:31
Showing 3 changed files
... ...
@@ -804,6 +804,20 @@ string_mod_const (const char *str,
804 804
     return NULL;
805 805
 }
806 806
 
807
+void
808
+string_replace_leading (char *str, const char match, const char replace)
809
+{
810
+  ASSERT (match != '\0');
811
+  while (*str)
812
+    {
813
+      if (*str == match)
814
+	*str = replace;
815
+      else
816
+	break;
817
+      ++str;
818
+    }
819
+}
820
+
807 821
 #ifdef CHARACTER_CLASS_DEBUG
808 822
 
809 823
 #define CC_INCLUDE    (CC_PRINT)
... ...
@@ -615,6 +615,8 @@ const char *string_mod_const (const char *str,
615 615
 			      const char replace,
616 616
 			      struct gc_arena *gc);
617 617
 
618
+void string_replace_leading (char *str, const char match, const char replace);
619
+
618 620
 #ifdef CHARACTER_CLASS_DEBUG
619 621
 void character_class_debug (void);
620 622
 #endif
... ...
@@ -554,6 +554,9 @@ verify_callback (int preverify_ok, X509_STORE_CTX * ctx)
554 554
 
555 555
   /* enforce character class restrictions in X509 name */
556 556
   string_mod (subject, X509_NAME_CHAR_CLASS, 0, '_');
557
+  string_replace_leading (subject, '-', '_');
558
+
559
+  msg (M_INFO, "X509: '%s'", subject); // JYFIXME
557 560
 
558 561
   /* extract the common name */
559 562
 #ifdef USE_OLD_EXTRACT_X509_FIELD