Pārlūkot izejas kodu

560827 - Admin Server templates: DistinguishName validation fails

https://bugzilla.redhat.com/show_bug.cgi?id=560827

Description: adding a perl subroutine dnEscape to escape special
characters and eliminate spaces around ',', which is to make
the given dn compliant with RFC4514.
Noriko Hosoi 16 gadi atpakaļ
vecāks
revīzija
5c859f5b94
1 mainītis faili ar 31 papildinājumiem un 0 dzēšanām
  1. 31 0
      ldap/admin/src/scripts/DSUtil.pm.in

+ 31 - 0
ldap/admin/src/scripts/DSUtil.pm.in

@@ -693,6 +693,37 @@ sub shellEscape {
     return $val;
 }
 
+# given a string, escape the special characters in the string.
+# the characters are defined in RFC 4514.
+# special = escaped / SPACE / SHARP / EQUALS
+# escaped = DQUOTE / PLUS / COMMA / SEMI / LANGLE / RANGLE
+# hex string "# HEX HEX" is unlikely appearing in the installation.
+# thus, it won't be supported for now.
+my %dnspecial = (
+    '"'  => '\\"',  # '\\22'
+    '\+' => '\\+',  # '\\2B'
+    ','  => '\\,',  # '\\2C'
+    ';'  => '\\;',  # '\\3B'
+    '<'  => '\\<',  # '\\3C'
+    '>'  => '\\>',  # '\\3E'
+    '='  => '\\='   # '\\3D'
+);
+
+sub dnEscape {
+    my $val = shift;
+    # first, remove spaces surrounding ',' and leading/trailing spaces
+    $val =~ s/^\s*//;
+    $val =~ s/\s*$//;
+    $val =~ s/\s*,\s*/,/g;
+    # next, replace the special characters
+    foreach my $idx (keys %dnspecial) {
+        $val =~ s/$idx/$dnspecial{$idx}/g;
+    }
+    $val =~ s/\s*,\s*/,/g;
+
+    return $val;
+}
+
 sub getHashedPassword {
     my $pwd = shift;
     my $alg = shift;