Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
openldap
OpenLDAP
Commits
6e128193
Commit
6e128193
authored
Dec 01, 2004
by
Pierangelo Masarati
Browse files
allow undefined schema items to be returned by back-ldap and remapped by the rwm overlay
parent
8697bcdf
Changes
5
Hide whitespace changes
Inline
Side-by-side
servers/slapd/back-ldap/search.c
View file @
6e128193
...
...
@@ -420,15 +420,24 @@ ldap_build_entry(
if
(
pretty
)
{
rc
=
pretty
(
attr
->
a_desc
->
ad_type
->
sat_syntax
,
&
attr
->
a_vals
[
i
],
&
pval
,
NULL
);
}
else
{
rc
=
validate
(
attr
->
a_desc
->
ad_type
->
sat_syntax
,
&
attr
->
a_vals
[
i
]
);
}
if
(
rc
!=
LDAP_SUCCESS
)
{
attr
->
a_nvals
=
NULL
;
attr_free
(
attr
);
goto
next_attr
;
/* check if, by chance, it's an undefined objectClass */
if
(
attr
->
a_desc
==
slap_schema
.
si_ad_objectClass
&&
oc_bvfind_undef
(
&
attr
->
a_vals
[
i
]
)
!=
NULL
)
{
ber_dupbv
(
&
pval
,
&
attr
->
a_vals
[
i
]
);
}
else
{
attr
->
a_nvals
=
NULL
;
attr_free
(
attr
);
goto
next_attr
;
}
}
if
(
pretty
)
{
...
...
@@ -539,7 +548,7 @@ ldap_back_entry_get(
retry:
rc
=
ldap_search_ext_s
(
lc
->
lc_ld
,
ndn
->
bv_val
,
LDAP_SCOPE_BASE
,
filter
,
gattr
,
0
,
NULL
,
NULL
,
LDAP_NO_LIMIT
,
at
?
gattr
:
NULL
,
0
,
NULL
,
NULL
,
LDAP_NO_LIMIT
,
LDAP_NO_LIMIT
,
&
result
);
if
(
rc
!=
LDAP_SUCCESS
)
{
if
(
rc
==
LDAP_SERVER_DOWN
&&
do_retry
)
{
...
...
servers/slapd/oc.c
View file @
6e128193
...
...
@@ -170,6 +170,47 @@ oc_bvfind( struct berval *ocname )
return
(
NULL
);
}
static
LDAP_SLIST_HEAD
(
OCUList
,
slap_object_class
)
oc_undef_list
=
LDAP_SLIST_HEAD_INITIALIZER
(
&
oc_undef_list
);
ObjectClass
*
oc_bvfind_undef
(
struct
berval
*
ocname
)
{
ObjectClass
*
oc
=
oc_bvfind
(
ocname
);
if
(
oc
)
{
return
oc
;
}
LDAP_SLIST_FOREACH
(
oc
,
&
oc_undef_list
,
soc_next
)
{
int
d
=
oc
->
soc_cname
.
bv_len
-
ocname
->
bv_len
;
if
(
d
)
{
continue
;
}
if
(
strcasecmp
(
oc
->
soc_cname
.
bv_val
,
ocname
->
bv_val
)
==
0
)
{
break
;
}
}
if
(
oc
)
{
return
oc
;
}
oc
=
ch_malloc
(
sizeof
(
ObjectClass
)
+
ocname
->
bv_len
+
1
);
memset
(
oc
,
0
,
sizeof
(
ObjectClass
)
);
oc
->
soc_cname
.
bv_len
=
ocname
->
bv_len
;
oc
->
soc_cname
.
bv_val
=
(
char
*
)
&
oc
[
1
];
AC_MEMCPY
(
oc
->
soc_cname
.
bv_val
,
ocname
->
bv_val
,
ocname
->
bv_len
);
LDAP_SLIST_NEXT
(
oc
,
soc_next
)
=
NULL
;
LDAP_SLIST_INSERT_HEAD
(
&
oc_undef_list
,
oc
,
soc_next
);
return
oc
;
}
static
int
oc_create_required
(
ObjectClass
*
soc
,
...
...
@@ -337,6 +378,13 @@ oc_destroy( void )
if
(
o
->
soc_allowed
)
ldap_memfree
(
o
->
soc_allowed
);
ldap_objectclass_free
((
LDAPObjectClass
*
)
o
);
}
while
(
!
LDAP_SLIST_EMPTY
(
&
oc_undef_list
)
)
{
o
=
LDAP_SLIST_FIRST
(
&
oc_undef_list
);
LDAP_SLIST_REMOVE_HEAD
(
&
oc_undef_list
,
soc_next
);
ch_free
(
(
ObjectClass
*
)
o
);
}
}
static
int
...
...
servers/slapd/overlays/rwm.c
View file @
6e128193
...
...
@@ -771,7 +771,9 @@ rwm_attrs( Operation *op, SlapReply *rs, Attribute** a_first )
goto
cleanup_attr
;
}
if
(
(
*
ap
)
->
a_desc
->
ad_type
->
sat_no_user_mod
)
{
if
(
(
*
ap
)
->
a_desc
->
ad_type
->
sat_no_user_mod
&&
(
*
ap
)
->
a_desc
->
ad_type
!=
slap_schema
.
si_at_undefined
)
{
goto
next_attr
;
}
...
...
servers/slapd/overlays/rwmconf.c
View file @
6e128193
...
...
@@ -142,10 +142,19 @@ rwm_map_config(
"is not defined in schema
\n
"
,
fname
,
lineno
,
dst
);
mapping
[
0
].
m_dst_oc
=
oc_bvfind_undef
(
&
mapping
[
0
].
m_dst
);
if
(
mapping
[
0
].
m_dst_oc
==
NULL
)
{
fprintf
(
stderr
,
"%s: line %d: unable to mimic destination objectClass '%s'
\n
"
,
fname
,
lineno
,
dst
);
return
1
;
}
#if 0
mapping[0].m_dst_oc = ch_malloc( sizeof( ObjectClass ) );
memset( mapping[0].m_dst_oc, 0, sizeof( ObjectClass ) );
mapping[0].m_dst_oc->soc_cname = mapping[0].m_dst;
mapping[0].m_flags |= RWMMAP_F_FREE_DST;
#endif
}
mapping
[
1
].
m_src_oc
=
mapping
[
0
].
m_dst_oc
;
...
...
servers/slapd/schema_prep.c
View file @
6e128193
...
...
@@ -1248,7 +1248,7 @@ slap_schema_load( void )
}
}
slap_at_undefined
.
sat_syntax
=
slap_schema
.
si_syn_
distinguishedName
;
slap_at_undefined
.
sat_syntax
=
slap_schema
.
si_syn_
octetString
;
slap_schema
.
si_at_undefined
=
&
slap_at_undefined
;
return
LDAP_SUCCESS
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a 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