mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
89cf5c3f76
We are going to end up supporting 2 different server schemes: A. the old/default behaviour of sending all the linked attributes last, at the end of the replication cycle. B. the new/Microsoft way of sending the linked attributes interleaved with the source/target objects. Normally if we're talking to a server using the old scheme-A, we won't ever use the GET_TGT flag. However, there are a couple of cases where it can happen: - A link to a new object was added during the replication cycle. - An object was deleted while the replication was in progress (and the linked attribute got queued before the object was deleted). Talking to an Samba DC running the old scheme will just cause it to start the replication cycle from scratch again, which is fairly harmless. However, there is a chance that the same thing can happen again, in which case the replication cycle will fail (because GET_TGT was already set). Even if we're using the new scheme (B), we could still potentially hit this case, as we can still queue up linked attributes between requests (group memberships can be larger than what can fit into a single replication chunk). If GET_TGT is set in the GetNcChanges request, then the local copy of the target object should always be up-to-date when we process the linked attribute. So if we still think the target object is deleted/recycled at this point, then it's safe to ignore the linked attribute (because we know our local copy is up-to-date). This logic matches the MS spec logic in ProcessLinkValue(). Not failing the replication cycle may be beneficial if we're trying to do a full-sync of a large database. Otherwise it might be time-consuming and frustrating to repeat the sync unnecessarily. Signed-off-by: Tim Beale <timbeale@catalyst.net.nz> Reviewed-by: Garming Sam <garming@samba.org> Reviewed-by: Andrew Bartlett <abartlet@samba.org> BUG: https://bugzilla.samba.org/show_bug.cgi?id=12972 |
||
---|---|---|
.. | ||
composite.h | ||
groupinfo.c | ||
groupinfo.h | ||
groupman.c | ||
groupman.h | ||
libnet_become_dc.c | ||
libnet_become_dc.h | ||
libnet_domain.c | ||
libnet_domain.h | ||
libnet_export_keytab.c | ||
libnet_export_keytab.h | ||
libnet_group.c | ||
libnet_group.h | ||
libnet_join.c | ||
libnet_join.h | ||
libnet_lookup.c | ||
libnet_lookup.h | ||
libnet_passwd.c | ||
libnet_passwd.h | ||
libnet_rpc.c | ||
libnet_rpc.h | ||
libnet_samdump.c | ||
libnet_samsync_ldb.c | ||
libnet_samsync.c | ||
libnet_samsync.h | ||
libnet_share.c | ||
libnet_share.h | ||
libnet_site.c | ||
libnet_site.h | ||
libnet_time.c | ||
libnet_time.h | ||
libnet_unbecome_dc.c | ||
libnet_unbecome_dc.h | ||
libnet_user.c | ||
libnet_user.h | ||
libnet_vampire.c | ||
libnet_vampire.h | ||
libnet.c | ||
libnet.h | ||
prereq_domain.c | ||
py_net_dckeytab.c | ||
py_net.c | ||
py_net.h | ||
userinfo.c | ||
userinfo.h | ||
userman.c | ||
userman.h | ||
wscript_build |