Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Joe Martin
OpenLDAP
Commits
0ac9b952
Commit
0ac9b952
authored
Oct 10, 2007
by
Pierangelo Masarati
Browse files
import fix to ITS#5172
parent
4ec752e2
Changes
2
Hide whitespace changes
Inline
Side-by-side
CHANGES
View file @
0ac9b952
...
...
@@ -9,6 +9,7 @@ OpenLDAP 2.3.39 Engineering
Fixed slapd-bdb DB_CONFIG conversion bug (ITS#5118)
Fixed slapd-ldap search control parsing (ITS#5138)
Fixed slapd-ldap SASL idassert w/o authcId
Fixed slapd-ldif directory separators in DN (ITS#5172)
Fixed slapd-meta conn caching on bind failure (ITS#5154)
Fixed slapd-sql concurrency issue (ITS#5095)
Fixed slapo-chain double-free (ITS#5137)
...
...
servers/slapd/back-ldif/ldif.c
View file @
0ac9b952
...
...
@@ -82,25 +82,56 @@ static ConfigOCs ldifocs[] = {
};
static
void
dn2path
(
struct
berval
*
dn
,
struct
berval
*
suffixdn
,
struct
berval
*
base_path
,
dn2path
(
struct
berval
*
orig_
dn
,
struct
berval
*
suffixdn
,
struct
berval
*
base_path
,
struct
berval
*
res
)
{
char
*
ptr
,
*
sep
,
*
end
;
int
nsep
=
0
;
struct
berval
dn
;
assert
(
dn
!=
NULL
);
assert
(
!
BER_BVISNULL
(
dn
)
);
assert
(
orig_
dn
!=
NULL
);
assert
(
!
BER_BVISNULL
(
orig_
dn
)
);
assert
(
suffixdn
!=
NULL
);
assert
(
!
BER_BVISNULL
(
suffixdn
)
);
assert
(
dnIsSuffix
(
dn
,
suffixdn
)
);
assert
(
dnIsSuffix
(
orig_
dn
,
suffixdn
)
);
res
->
bv_len
=
dn
->
bv_len
+
base_path
->
bv_len
+
1
+
STRLENOF
(
LDIF
);
dn
=
*
orig_dn
;
for
(
ptr
=
dn
.
bv_val
,
end
=
&
dn
.
bv_val
[
dn
.
bv_len
];
ptr
<
end
;
ptr
++
)
{
if
(
ptr
[
0
]
==
LDAP_DIRSEP
[
0
]
)
{
nsep
++
;
}
}
if
(
nsep
)
{
char
*
p
;
dn
.
bv_len
+=
2
*
nsep
;
dn
.
bv_val
=
ch_malloc
(
dn
.
bv_len
+
1
);
for
(
ptr
=
orig_dn
->
bv_val
,
end
=
&
orig_dn
->
bv_val
[
orig_dn
->
bv_len
],
p
=
dn
.
bv_val
;
ptr
<
end
;
ptr
++
,
p
++
)
{
static
const
char
hex
[]
=
"0123456789ABCDEF"
;
if
(
ptr
[
0
]
==
LDAP_DIRSEP
[
0
]
)
{
*
p
++
=
'\\'
;
/* FIXME: fs-escape */
*
p
++
=
hex
[(
LDAP_DIRSEP
[
0
]
&
0xF0U
)
>>
4
];
*
p
=
hex
[
LDAP_DIRSEP
[
0
]
&
0x0FU
];
}
else
{
p
[
0
]
=
ptr
[
0
];
}
}
p
[
0
]
=
'\0'
;
}
res
->
bv_len
=
dn
.
bv_len
+
base_path
->
bv_len
+
1
+
STRLENOF
(
LDIF
);
res
->
bv_val
=
ch_malloc
(
res
->
bv_len
+
1
);
ptr
=
lutil_strcopy
(
res
->
bv_val
,
base_path
->
bv_val
);
*
ptr
++
=
LDAP_DIRSEP
[
0
];
ptr
=
lutil_strcopy
(
ptr
,
suffixdn
->
bv_val
);
end
=
dn
->
bv_val
+
dn
->
bv_len
-
suffixdn
->
bv_len
-
1
;
while
(
end
>
dn
->
bv_val
)
{
for
(
sep
=
end
-
1
;
sep
>=
dn
->
bv_val
&&
!
DN_SEPARATOR
(
*
sep
);
sep
--
);
end
=
dn
.
bv_val
+
dn
.
bv_len
-
suffixdn
->
bv_len
-
1
;
while
(
end
>
dn
.
bv_val
)
{
for
(
sep
=
end
-
1
;
sep
>=
dn
.
bv_val
&&
!
DN_SEPARATOR
(
*
sep
);
sep
--
);
*
ptr
++
=
LDAP_DIRSEP
[
0
];
ptr
=
lutil_strncopy
(
ptr
,
sep
+
1
,
end
-
sep
-
1
);
end
=
sep
;
...
...
@@ -117,6 +148,9 @@ dn2path(struct berval * dn, struct berval * suffixdn, struct berval * base_path,
break
;
}
#endif
if
(
dn
.
bv_val
!=
orig_dn
->
bv_val
)
{
ch_free
(
dn
.
bv_val
);
}
}
static
char
*
slurp_file
(
int
fd
)
{
...
...
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