Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
orbea -
OpenLDAP
Commits
6ab46208
Commit
6ab46208
authored
Jul 13, 2007
by
Ralf Haferkamp
Browse files
Allow utf-8 in AD-Canonical Names
parent
88cbe052
Changes
1
Hide whitespace changes
Inline
Side-by-side
libraries/libldap/getdn.c
View file @
6ab46208
...
...
@@ -2368,12 +2368,12 @@ strval2DCEstr( struct berval *val, char *str, unsigned flags, ber_len_t *len )
/*
* Length of the (supposedly) AD canonical string representation,
* accounting for
escaped hex of UTF-8 chars
* accounting for
chars that need to be escaped
*/
static
int
strval2ADstrlen
(
struct
berval
*
val
,
unsigned
flags
,
ber_len_t
*
len
)
{
ber_len_t
l
;
ber_len_t
l
,
cl
;
char
*
p
;
assert
(
val
!=
NULL
);
...
...
@@ -2384,37 +2384,31 @@ strval2ADstrlen( struct berval *val, unsigned flags, ber_len_t *len )
return
(
0
);
}
if
(
flags
&
LDAP_AVA_NONPRINTABLE
)
{
/*
* FIXME: Turn the value into a binary encoded BER?
*/
return
(
-
1
);
}
else
{
for
(
l
=
0
,
p
=
val
->
bv_val
;
p
[
0
];
p
++
)
{
if
(
LDAP_DN_NEEDESCAPE_AD
(
p
[
0
]
)
)
{
l
+=
2
;
}
else
{
l
++
;
}
for
(
l
=
0
,
p
=
val
->
bv_val
;
p
[
0
];
p
+=
cl
)
{
cl
=
LDAP_UTF8_CHARLEN2
(
p
,
cl
);
if
(
cl
==
0
)
{
/* illegal utf-8 char */
return
-
1
;
}
else
if
(
(
cl
==
1
)
&&
LDAP_DN_NEEDESCAPE_AD
(
p
[
0
]
)
)
{
l
+=
2
;
}
else
{
l
+=
cl
;
}
}
*
len
=
l
;
return
(
0
);
}
/*
* convert to (supposedly) AD string representation,
* escaping with hex the UTF-8 stuff;
* convert to (supposedly) AD string representation,
* assume the destination has enough room for escaping
*/
static
int
strval2ADstr
(
struct
berval
*
val
,
char
*
str
,
unsigned
flags
,
ber_len_t
*
len
)
{
ber_len_t
s
,
d
;
ber_len_t
s
,
d
,
cl
;
assert
(
val
!=
NULL
);
assert
(
str
!=
NULL
);
...
...
@@ -2425,24 +2419,20 @@ strval2ADstr( struct berval *val, char *str, unsigned flags, ber_len_t *len )
return
(
0
);
}
if
(
flags
&
LDAP_AVA_NONPRINTABLE
)
{
/*
* FIXME: Turn the value into a binary encoded BER?
*/
*
len
=
0
;
return
(
-
1
);
}
else
{
/*
* we assume the string has enough room for the hex encoding
* of the value
*/
/*
* we assume the string has enough room for the escaping
* of the value
*/
for
(
s
=
0
,
d
=
0
;
s
<
val
->
bv_len
;
)
{
if
(
LDAP_DN_NEEDESCAPE_AD
(
val
->
bv_val
[
s
]
)
)
{
str
[
d
++
]
=
'\\'
;
}
for
(
s
=
0
,
d
=
0
;
s
<
val
->
bv_len
;
)
{
cl
=
LDAP_UTF8_CHARLEN2
(
val
->
bv_val
+
s
,
cl
);
if
(
cl
==
0
)
{
/* illegal utf-8 char */
return
-
1
;
}
else
if
(
(
cl
==
1
)
&&
LDAP_DN_NEEDESCAPE_AD
(
val
->
bv_val
[
s
])
)
{
str
[
d
++
]
=
'\\'
;
}
for
(;
cl
--
;)
{
str
[
d
++
]
=
val
->
bv_val
[
s
++
];
}
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment