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
Joe Martin
OpenLDAP
Commits
93ba7a8e
Commit
93ba7a8e
authored
May 27, 2008
by
Quanah Gibson-Mount
Browse files
allow to customize the modifiersName of internal modifications (partially addresses ITS#5505)
parent
01c15593
Changes
3
Hide whitespace changes
Inline
Side-by-side
CHANGES
View file @
93ba7a8e
...
...
@@ -10,6 +10,7 @@ OpenLDAP 2.4.10 Engineering
Fixed slapd-bdb/hdb MAXPATHLEN (ITS#5531)
Fixed slapd-ldap entry_get() op-dependent behavior (ITS#5513)
Fixed slapd-meta quarantine crasher (ITS#5522)
Fixed slapo-refint to allow setting modifiers name (ITS#5505)
Fixed slapo-syncprov csn update with delta-syncrepl (ITS#5493)
Fixed slapo-syncprov op2.o_extra reset (ITS#5501, #5506)
Fixed slapo-syncprov sending ops without queued CSNs (ITS#5465)
...
...
doc/man/man5/slapo-refint.5
View file @
93ba7a8e
...
...
@@ -39,7 +39,7 @@ They should appear after the
.B overlay
directive.
.TP
.B refint_attributes <attribute...
>
.B refint_attributes <attribute
> [
...
]
Specify one or more attributes for which integrity will be maintained
as described above.
.TP
...
...
@@ -49,6 +49,12 @@ would otherwise be deleted from an attribute. This can be useful in cases
where the schema requires the existence of an attribute for which referential
integrity is enforced. The attempted deletion of a required attribute will
otherwise result in an Object Class Violation, causing the request to fail.
The string must be a valid DN.
.TP
.B refint_modifiersname <DN>
Specify the DN to be used as the modifiersName of the internal modifications
performed by the overlay.
It defaults to "\fIcn=Referential Integrity Overlay\fP".
.B
.SH FILES
.TP
...
...
servers/slapd/overlays/refint.c
View file @
93ba7a8e
...
...
@@ -81,6 +81,8 @@ typedef struct refint_data_s {
BerValue
dn
;
/* basedn in parent, */
BerValue
nothing
;
/* the nothing value, if needed */
BerValue
nnothing
;
/* normalized nothingness */
BerValue
refint_dn
;
/* modifier's name */
BerValue
refint_ndn
;
/* normalized modifier's name */
struct
re_s
*
qtask
;
refint_q
*
qhead
;
refint_q
*
qtail
;
...
...
@@ -93,7 +95,8 @@ static MatchingRule *mr_dnSubtreeMatch;
enum
{
REFINT_ATTRS
=
1
,
REFINT_NOTHING
REFINT_NOTHING
,
REFINT_MODIFIERSNAME
};
static
ConfigDriver
refint_cf_gen
;
...
...
@@ -110,6 +113,11 @@ static ConfigTable refintcfg[] = {
"( OLcfgOvAt:11.2 NAME 'olcRefintNothing' "
"DESC 'Replacement DN to supply when needed' "
"SYNTAX OMsDN SINGLE-VALUE )"
,
NULL
,
NULL
},
{
"refint_modifiersName"
,
"DN"
,
2
,
2
,
0
,
ARG_DN
|
ARG_MAGIC
|
REFINT_MODIFIERSNAME
,
refint_cf_gen
,
"( OLcfgOvAt:11.3 NAME 'olcRefintModifiersName' "
"DESC 'The DN to use as modifiersName' "
"SYNTAX OMsDN SINGLE-VALUE )"
,
NULL
,
NULL
},
{
NULL
,
NULL
,
0
,
0
,
0
,
ARG_IGNORED
}
};
...
...
@@ -118,7 +126,10 @@ static ConfigOCs refintocs[] = {
"NAME 'olcRefintConfig' "
"DESC 'Referential integrity configuration' "
"SUP olcOverlayConfig "
"MAY ( olcRefintAttribute $ olcRefintNothing ) )"
,
"MAY ( olcRefintAttribute "
"$ olcRefintNothing "
"$ olcRefintModifiersName "
") )"
,
Cft_Overlay
,
refintcfg
},
{
NULL
,
0
,
NULL
}
};
...
...
@@ -157,6 +168,17 @@ refint_cf_gen(ConfigArgs *c)
}
rc
=
0
;
break
;
case
REFINT_MODIFIERSNAME
:
if
(
!
BER_BVISEMPTY
(
&
dd
->
refint_dn
))
{
rc
=
value_add_one
(
&
c
->
rvalue_vals
,
&
dd
->
refint_dn
);
if
(
rc
)
return
rc
;
rc
=
value_add_one
(
&
c
->
rvalue_nvals
,
&
dd
->
refint_ndn
);
return
rc
;
}
rc
=
0
;
break
;
default:
abort
();
}
...
...
@@ -196,6 +218,15 @@ refint_cf_gen(ConfigArgs *c)
dd
->
nnothing
.
bv_len
=
0
;
rc
=
0
;
break
;
case
REFINT_MODIFIERSNAME
:
if
(
dd
->
refint_dn
.
bv_val
)
ber_memfree
(
dd
->
refint_dn
.
bv_val
);
if
(
dd
->
refint_ndn
.
bv_val
)
ber_memfree
(
dd
->
refint_ndn
.
bv_val
);
dd
->
refint_dn
.
bv_len
=
0
;
dd
->
refint_ndn
.
bv_len
=
0
;
rc
=
0
;
break
;
default:
abort
();
}
...
...
@@ -233,6 +264,15 @@ refint_cf_gen(ConfigArgs *c)
dd
->
nnothing
=
c
->
value_ndn
;
rc
=
0
;
break
;
case
REFINT_MODIFIERSNAME
:
if
(
dd
->
refint_dn
.
bv_val
)
ber_memfree
(
dd
->
refint_dn
.
bv_val
);
if
(
dd
->
refint_ndn
.
bv_val
)
ber_memfree
(
dd
->
refint_ndn
.
bv_val
);
dd
->
refint_dn
=
c
->
value_dn
;
dd
->
refint_ndn
=
c
->
value_ndn
;
rc
=
0
;
break
;
default:
abort
();
}
...
...
@@ -302,6 +342,10 @@ refint_open(
return
-
1
;
ber_dupbv
(
&
id
->
dn
,
&
be
->
be_nsuffix
[
0
]
);
}
if
(
BER_BVISNULL
(
&
id
->
refint_dn
)
)
{
ber_dupbv
(
&
id
->
refint_dn
,
&
refint_dn
);
ber_dupbv
(
&
id
->
refint_ndn
,
&
refint_ndn
);
}
return
(
0
);
}
...
...
@@ -339,6 +383,10 @@ refint_close(
BER_BVZERO
(
&
id
->
nothing
);
ch_free
(
id
->
nnothing
.
bv_val
);
BER_BVZERO
(
&
id
->
nnothing
);
ch_free
(
id
->
refint_dn
.
bv_val
);
BER_BVZERO
(
&
id
->
refint_dn
);
ch_free
(
id
->
refint_ndn
.
bv_val
);
BER_BVZERO
(
&
id
->
refint_ndn
);
return
(
0
);
}
...
...
@@ -580,8 +628,8 @@ refint_repair(
m
->
sml_nvalues
=
m
->
sml_values
+
2
;
BER_BVZERO
(
&
m
->
sml_values
[
1
]
);
BER_BVZERO
(
&
m
->
sml_nvalues
[
1
]
);
m
->
sml_values
[
0
]
=
refint_dn
;
m
->
sml_nvalues
[
0
]
=
refint_ndn
;
m
->
sml_values
[
0
]
=
id
->
refint_dn
;
m
->
sml_nvalues
[
0
]
=
id
->
refint_ndn
;
}
if
(
!
BER_BVISEMPTY
(
&
rq
->
newdn
)
||
(
ra
->
next
&&
ra
->
attr
==
ra
->
next
->
attr
)
)
...
...
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