Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Tero Saarni
OpenLDAP
Commits
19f8f2d3
Commit
19f8f2d3
authored
Nov 10, 2008
by
Quanah Gibson-Mount
Browse files
ITS#5750
parent
d50035af
Changes
5
Hide whitespace changes
Inline
Side-by-side
CHANGES
View file @
19f8f2d3
...
...
@@ -3,8 +3,10 @@ OpenLDAP 2.4 Change Log
OpenLDAP 2.4.13 Engineering
Fixed liblutil hex conversion (ITS#5699)
Added slapd GSSAPI refactoring (ITS#5369)
Fixed slapd nameUIDPretty bitstring parsing (ITS#5750)
Fixed slapd overlay/database open with real structure (ITS#5724)
Fixed slapd parsing of read entry control (ITS#5741)
Added slapd PMI schema (ITS#5695)
Added slapd private databases in global overlays (ITS#5735,ITS#5736)
Added slapd support for certificateListExactMatch (ITS#5700)
Fixed slapd-bdb/hdb invalid db crash (ITS#5698)
...
...
servers/slapd/schema_init.c
View file @
19f8f2d3
...
...
@@ -1105,12 +1105,7 @@ bitStringValidate(
...
*
* Note: normalization strips any leading "0"s, unless the
* bit string is exactly "'0'B", so the normalized example,
* in slapd, would result in
*
* 1.3.6.1.4.1.1466.0=#04024869,o=test,c=gb#'101'B
*
* Note:
* RFC 4514 clarifies that SHARP, i.e. "#", doesn't have to
* be escaped except when at the beginning of a value, the
* definition of Name and Optional UID appears to be flawed,
...
...
@@ -1134,11 +1129,11 @@ bitStringValidate(
*
* in fact "com#'1'B" is a valid IA5 string.
*
* As a consequence, current slapd code
assumes that the
*
presence of portions of a
BitString at the end of the string
*
representation
of a NameAndOptionalUID mean
s
a BitString
*
is expected, and cause an error otherwise. This is quite
*
arbitrary, and might
change in the future.
* As a consequence, current slapd code
takes the presence of
*
#<valid
BitString
>
at the end of the string
representation
* of a NameAndOptionalUID
to
mean
this is indeed
a BitString
.
*
This is quite arbitrary - it has changed the past and might
* change in the future.
*/
...
...
@@ -1209,7 +1204,8 @@ nameUIDPretty(
if
(
rc
==
LDAP_SUCCESS
)
{
ber_dupbv_x
(
&
dnval
,
val
,
ctx
);
dnval
.
bv_len
-=
uidval
.
bv_len
+
1
;
uidval
.
bv_val
--
;
dnval
.
bv_len
-=
++
uidval
.
bv_len
;
dnval
.
bv_val
[
dnval
.
bv_len
]
=
'\0'
;
}
else
{
...
...
@@ -1226,36 +1222,18 @@ nameUIDPretty(
}
if
(
!
BER_BVISNULL
(
&
uidval
)
)
{
int
i
,
c
,
got1
;
char
*
tmp
;
tmp
=
slap_sl_realloc
(
out
->
bv_val
,
out
->
bv_len
+
STRLENOF
(
"#"
)
+
uidval
.
bv_len
+
1
,
+
uidval
.
bv_len
+
1
,
ctx
);
if
(
tmp
==
NULL
)
{
ber_memfree_x
(
out
->
bv_val
,
ctx
);
return
LDAP_OTHER
;
}
out
->
bv_val
=
tmp
;
out
->
bv_val
[
out
->
bv_len
++
]
=
'#'
;
out
->
bv_val
[
out
->
bv_len
++
]
=
'\''
;
got1
=
uidval
.
bv_len
<
sizeof
(
"'0'B"
);
for
(
i
=
1
;
i
<
uidval
.
bv_len
-
2
;
i
++
)
{
c
=
uidval
.
bv_val
[
i
];
switch
(
c
)
{
case
'0'
:
if
(
got1
)
out
->
bv_val
[
out
->
bv_len
++
]
=
c
;
break
;
case
'1'
:
got1
=
1
;
out
->
bv_val
[
out
->
bv_len
++
]
=
c
;
break
;
}
}
out
->
bv_val
[
out
->
bv_len
++
]
=
'\''
;
out
->
bv_val
[
out
->
bv_len
++
]
=
'B'
;
memcpy
(
out
->
bv_val
+
out
->
bv_len
,
uidval
.
bv_val
,
uidval
.
bv_len
);
out
->
bv_len
+=
uidval
.
bv_len
;
out
->
bv_val
[
out
->
bv_len
]
=
'\0'
;
}
}
...
...
tests/data/dn.out
View file @
19f8f2d3
...
...
@@ -78,15 +78,15 @@ objectClass: groupOfUniqueNames
cn: Name and Optional UID
uniqueMember: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com
uniqueMember: #'1'B
uniqueMember: #'10'B
uniqueMember: #'
00
10'B
uniqueMember: dc=example,dc=com#'1000'B
uniqueMember: dc=example,dc=com#'
0
'B
uniqueMember: dc=example,dc=com#''B
description: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com //
only DN portion
description: #'1'B // empty "" DN
description: #'0010'B // empty "" DN with leading '0's
description: dc=example,dc=com#'1000'B // with DN portion
description: dc=example,dc=com#'
0
'B // with DN portion
and just one '0'
description: dc=example,dc=com#''B // with DN portion
+ bitstring with no bits
dn: ou=Related Syntaxes,dc=example,dc=com
objectClass: organizationalUnit
...
...
@@ -183,20 +183,21 @@ description: testUUID=597ae2f6-16a6-1027-98f4-abcdefABCDEF,DC=Example
# Searching database for nameAndOptionalUID="dc=example,dc=com"...
# Searching database for nameAndOptionalUID="dc=example,dc=com#'001000'B"...
# Searching database for nameAndOptionalUID="dc=example,dc=com#'1000'B"...
dn: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com
objectClass: groupOfUniqueNames
cn: Name and Optional UID
uniqueMember: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com
uniqueMember: #'1'B
uniqueMember: #'10'B
uniqueMember: #'
00
10'B
uniqueMember: dc=example,dc=com#'1000'B
uniqueMember: dc=example,dc=com#'
0
'B
uniqueMember: dc=example,dc=com#''B
description: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com //
only DN portion
description: #'1'B // empty "" DN
description: #'0010'B // empty "" DN with leading '0's
description: dc=example,dc=com#'1000'B // with DN portion
description: dc=example,dc=com#'
0
'B // with DN portion
and just one '0'
description: dc=example,dc=com#''B // with DN portion
+ bitstring with no bits
# Searching database for uniqueMember~="dc=example,dc=com" (approx)...
dn: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com
...
...
@@ -204,29 +205,29 @@ objectClass: groupOfUniqueNames
cn: Name and Optional UID
uniqueMember: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com
uniqueMember: #'1'B
uniqueMember: #'10'B
uniqueMember: #'
00
10'B
uniqueMember: dc=example,dc=com#'1000'B
uniqueMember: dc=example,dc=com#'
0
'B
uniqueMember: dc=example,dc=com#''B
description: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com //
only DN portion
description: #'1'B // empty "" DN
description: #'0010'B // empty "" DN with leading '0's
description: dc=example,dc=com#'1000'B // with DN portion
description: dc=example,dc=com#'
0
'B // with DN portion
and just one '0'
description: dc=example,dc=com#''B // with DN portion
+ bitstring with no bits
# Searching database for uniqueMember~="dc=example,dc=com#'
00
1000'B" (approx)...
# Searching database for uniqueMember~="dc=example,dc=com#'1000'B" (approx)...
dn: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com
objectClass: groupOfUniqueNames
cn: Name and Optional UID
uniqueMember: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com
uniqueMember: #'1'B
uniqueMember: #'10'B
uniqueMember: #'
00
10'B
uniqueMember: dc=example,dc=com#'1000'B
uniqueMember: dc=example,dc=com#'
0
'B
uniqueMember: dc=example,dc=com#''B
description: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com //
only DN portion
description: #'1'B // empty "" DN
description: #'0010'B // empty "" DN with leading '0's
description: dc=example,dc=com#'1000'B // with DN portion
description: dc=example,dc=com#'
0
'B // with DN portion
and just one '0'
description: dc=example,dc=com#''B // with DN portion
+ bitstring with no bits
tests/data/test-dn.ldif
View file @
19f8f2d3
...
...
@@ -226,12 +226,12 @@ uniqueMember: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com
uniqueMember: #'1'B
uniqueMember: #'0010'B
uniqueMember: dc=example,dc=com#'1000'B
uniqueMember: dc=example,dc=com#'
0
'B
uniqueMember: dc=example,dc=com#''B
description: cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com // only DN portion
description: #'1'B // empty "" DN
description: #'0010'B // empty "" DN with leading '0's
description: dc=example,dc=com#'1000'B // with DN portion
description: dc=example,dc=com#'
0
'B // with DN portion
and just one '0'
description: dc=example,dc=com#''B // with DN portion
+ bitstring with no bits
dn: cn=Should Fail 1,cn=Name and Optional UID,ou=Related Syntaxes,dc=example,dc=com
objectClass: groupOfUniqueNames
...
...
tests/scripts/test026-dn
View file @
19f8f2d3
...
...
@@ -117,6 +117,19 @@ if test $RC != 0 ; then
exit
$RC
fi
DN
=
"dc=example,dc=com#'1000'B"
echo
"Searching database for nameAndOptionalUID=
\"
$DN
\"
..."
echo
"# Searching database for nameAndOptionalUID=
\"
$DN
\"
..."
>>
$SEARCHOUT
$LDAPSEARCH
-S
""
-b
"
$BASEDN
"
-h
$LOCALHOST
-p
$PORT1
\
"(uniqueMember=
$DN
)"
>>
$SEARCHOUT
2>&1
RC
=
$?
if
test
$RC
!=
0
;
then
echo
"ldapsearch failed (
$RC
)!"
test
$KILLSERVERS
!=
no
&&
kill
-HUP
$KILLPIDS
exit
$RC
fi
DN
=
"dc=example,dc=com"
echo
"Searching database for uniqueMember~=
\"
$DN
\"
(approx)..."
echo
"# Searching database for uniqueMember~=
\"
$DN
\"
(approx)..."
>>
$SEARCHOUT
...
...
@@ -130,7 +143,7 @@ if test $RC != 0 ; then
exit
$RC
fi
DN
=
"dc=example,dc=com#'
00
1000'B"
DN
=
"dc=example,dc=com#'1000'B"
echo
"Searching database for uniqueMember~=
\"
$DN
\"
(approx)..."
echo
"# Searching database for uniqueMember~=
\"
$DN
\"
(approx)..."
>>
$SEARCHOUT
$LDAPSEARCH
-S
""
-b
"
$BASEDN
"
-h
$LOCALHOST
-p
$PORT1
\
...
...
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