From: Howard Chu Date: Wed, 11 Nov 2009 03:01:48 +0000 (+0000) Subject: ITS#6373 revert 2009/03/10 commit, resurrect sync subentry code X-Git-Tag: ACLCHECK_0~137 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=a48e329fc8af02339994cdf15861d9a49e1d251c;p=openldap ITS#6373 revert 2009/03/10 commit, resurrect sync subentry code --- diff --git a/servers/slapd/ctxcsn.c b/servers/slapd/ctxcsn.c index a9738e032f..54118e76da 100644 --- a/servers/slapd/ctxcsn.c +++ b/servers/slapd/ctxcsn.c @@ -26,6 +26,8 @@ #include "slap.h" #include "lutil_ldap.h" +const struct berval slap_ldapsync_bv = BER_BVC("ldapsync"); +const struct berval slap_ldapsync_cn_bv = BER_BVC("cn=ldapsync"); int slap_serverID; /* maxcsn->bv_val must point to a char buf[LDAP_PVT_CSNSTR_BUFSIZE] */ @@ -133,6 +135,46 @@ slap_graduate_commit_csn( Operation *op ) return; } +static struct berval ocbva[] = { + BER_BVC("top"), + BER_BVC("subentry"), + BER_BVC("syncProviderSubentry"), + BER_BVNULL +}; + +Entry * +slap_create_context_csn_entry( + Backend *be, + struct berval *context_csn ) +{ + Entry* e; + + struct berval bv; + + e = entry_alloc(); + + attr_merge( e, slap_schema.si_ad_objectClass, + ocbva, NULL ); + attr_merge_one( e, slap_schema.si_ad_structuralObjectClass, + &ocbva[1], NULL ); + attr_merge_one( e, slap_schema.si_ad_cn, + (struct berval *)&slap_ldapsync_bv, NULL ); + + if ( context_csn ) { + attr_merge_one( e, slap_schema.si_ad_contextCSN, + context_csn, NULL ); + } + + BER_BVSTR( &bv, "{}" ); + attr_merge_one( e, slap_schema.si_ad_subtreeSpecification, &bv, NULL ); + + build_new_dn( &e->e_name, &be->be_nsuffix[0], + (struct berval *)&slap_ldapsync_cn_bv, NULL ); + ber_dupbv( &e->e_nname, &e->e_name ); + + return e; +} + void slap_queue_csn( Operation *op, diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h index e97e23f8f5..74cbf5db17 100644 --- a/servers/slapd/proto-slap.h +++ b/servers/slapd/proto-slap.h @@ -814,10 +814,13 @@ LDAP_SLAPD_F (ContentRule *) cr_bvfind LDAP_P(( */ LDAP_SLAPD_V( int ) slap_serverID; +LDAP_SLAPD_V( const struct berval ) slap_ldapsync_bv; +LDAP_SLAPD_V( const struct berval ) slap_ldapsync_cn_bv; LDAP_SLAPD_F (void) slap_get_commit_csn LDAP_P(( Operation *, struct berval *maxcsn, int *foundit )); LDAP_SLAPD_F (void) slap_rewind_commit_csn LDAP_P(( Operation * )); LDAP_SLAPD_F (void) slap_graduate_commit_csn LDAP_P(( Operation * )); +LDAP_SLAPD_F (Entry *) slap_create_context_csn_entry LDAP_P(( Backend *, struct berval *)); LDAP_SLAPD_F (int) slap_get_csn LDAP_P(( Operation *, struct berval *, int )); LDAP_SLAPD_F (void) slap_queue_csn LDAP_P(( Operation *, struct berval * ));