[SCM] Samba Shared Repository - branch master updated
Matthieu Patou
mat at samba.org
Tue Jan 3 00:21:02 MST 2012
The branch, master has been updated
via f66ef5c upgradeprovision: do not hold references to messageElements
via f05edc0 pyldb: raise an exception if we can't add the attribute
via 3213d1e upgradeprovision: treat provision without oem attribute as quite recent, it's provision that comes from Windows replication
from 90f06d6 s4-provision: Fix the problem of DnsProperty values not being set correctly
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit f66ef5cfbc932dc03a5bea61e9cb10dd8d948128
Author: Matthieu Patou <mat at matws.net>
Date: Mon Jan 2 19:27:48 2012 -0800
upgradeprovision: do not hold references to messageElements
Autobuild-User: Matthieu Patou <mat at samba.org>
Autobuild-Date: Tue Jan 3 08:20:02 CET 2012 on sn-devel-104
commit f05edc0ecb9da2cb00a83b38d0be5812cc4ccf77
Author: Matthieu Patou <mat at matws.net>
Date: Mon Jan 2 19:25:56 2012 -0800
pyldb: raise an exception if we can't add the attribute
commit 3213d1e0b770690b1a964f38fb57ebbcd8ce0746
Author: Matthieu Patou <mat at matws.net>
Date: Thu Aug 25 18:05:28 2011 +0200
upgradeprovision: treat provision without oem attribute as quite recent, it's provision that comes from Windows replication
-----------------------------------------------------------------------
Summary of changes:
lib/ldb/pyldb.c | 7 ++++++-
source4/scripting/bin/upgradeprovision | 29 ++++++++++++++++++-----------
2 files changed, 24 insertions(+), 12 deletions(-)
Changeset truncated at 500 lines:
diff --git a/lib/ldb/pyldb.c b/lib/ldb/pyldb.c
index b2315e6..b253bcd 100644
--- a/lib/ldb/pyldb.c
+++ b/lib/ldb/pyldb.c
@@ -2668,12 +2668,17 @@ static int py_ldb_msg_setitem(PyLdbMessageObject *self, PyObject *name, PyObject
/* delitem */
ldb_msg_remove_attr(self->msg, attr_name);
} else {
+ int ret;
struct ldb_message_element *el = PyObject_AsMessageElement(self->msg,
value, 0, attr_name);
if (el == NULL)
return -1;
ldb_msg_remove_attr(pyldb_Message_AsMessage(self), attr_name);
- ldb_msg_add(pyldb_Message_AsMessage(self), el, el->flags);
+ ret = ldb_msg_add(pyldb_Message_AsMessage(self), el, el->flags);
+ if (ret != LDB_SUCCESS) {
+ PyErr_SetLdbError(PyExc_LdbError, ret, NULL);
+ return -1;
+ }
}
return 0;
}
diff --git a/source4/scripting/bin/upgradeprovision b/source4/scripting/bin/upgradeprovision
index f403120..738d6be 100755
--- a/source4/scripting/bin/upgradeprovision
+++ b/source4/scripting/bin/upgradeprovision
@@ -341,11 +341,11 @@ def handle_special_case(att, delta, new, old, useReplMetadata, basedn, aldb):
:return: True to indicate that the attribute should be kept, False for
discarding it"""
- flag = delta.get(att).flags()
# We do most of the special case handle if we do not have the
# highest usn as otherwise the replPropertyMetaData will guide us more
# correctly
if not useReplMetadata:
+ flag = delta.get(att).flags()
if (att == "sPNMappings" and flag == FLAG_MOD_REPLACE and
ldb.Dn(aldb, "CN=Directory Service,CN=Windows NT,"
"CN=Services,CN=Configuration,%s" % basedn)
@@ -418,7 +418,7 @@ def handle_special_case(att, delta, new, old, useReplMetadata, basedn, aldb):
# This is a bit of special animal as we might have added
# already SPN entries to the list that has to be modified
# So we go in detail to try to find out what has to be added ...
- if (att == "servicePrincipalName" and flag == FLAG_MOD_REPLACE):
+ if (att == "servicePrincipalName" and delta.get(att).flags() == FLAG_MOD_REPLACE):
hash = {}
newval = []
changeDelta = 0
@@ -763,8 +763,7 @@ def handle_links(samdb, att, basedn, dn, value, ref_value, delta):
:param delta: The MessageElement object that will be applied for
transforming the current provision"""
- res = samdb.search(expression="dn=%s" % dn, base=basedn,
- controls=["search_options:1:2", "reveal:1"],
+ res = samdb.search(base=dn, controls=["search_options:1:2", "reveal:1"],
attrs=[att])
blacklist = {}
@@ -772,7 +771,8 @@ def handle_links(samdb, att, basedn, dn, value, ref_value, delta):
newlinklist = []
changed = False
- newlinklist.extend(value)
+ for v in value:
+ newlinklist.append(str(v))
for e in value:
hash[e] = 1
@@ -797,6 +797,8 @@ def handle_links(samdb, att, basedn, dn, value, ref_value, delta):
else:
delta.remove(att)
+ return delta
+
msg_elt_flag_strs = {
ldb.FLAG_MOD_ADD: "MOD_ADD",
@@ -895,11 +897,12 @@ def checkKeepAttributeWithMetadata(delta, att, message, reference, current,
if att in forwardlinked:
curval = current[0].get(att, ())
refval = reference[0].get(att, ())
- handle_links(samdb, att, basedn, current[0]["dn"],
+ delta = handle_links(samdb, att, basedn, current[0]["dn"],
curval, refval, delta)
continue
- if isFirst and len(delta.items())>1:
+
+ if isFirst and len(list(delta)) > 1:
isFirst = False
txt = "%s\n" % (str(dn))
@@ -1048,10 +1051,12 @@ def update_present(ref_samdb, samdb, basedn, listPresent, usns):
delta.remove("name")
- if len(delta.items()) == 1:
+ nb_items = len(list(delta))
+
+ if nb_items == 1:
continue
- if len(delta.items()) > 1 and usns is not None:
+ if nb_items > 1 and usns is not None:
# Fetch the replPropertyMetaData
res = samdb.search(expression="dn=%s" % (str(dn)), base=basedn,
scope=SCOPE_SUBTREE, controls=controls,
@@ -1077,7 +1082,9 @@ def update_present(ref_samdb, samdb, basedn, listPresent, usns):
delta = checkKeepAttributeOldMtd(delta, att, reference, current, basedn, samdb)
delta.dn = dn
- if len(delta.items()) >1:
+
+
+ if len(delta) >1:
# Skip dn as the value is not really changed ...
attributes=", ".join(delta.keys()[1:])
modcontrols = []
@@ -1805,7 +1812,7 @@ if __name__ == '__main__':
deltaattr = None
# 11)
message(GUESS, oem)
- if hasATProvision(ldbs.sam) or re.match(".*alpha((9)|(\d\d+)).*", str(oem)):
+ if oem is None or hasATProvision(ldbs.sam) or re.match(".*alpha((9)|(\d\d+)).*", str(oem)):
# 11) A
# Starting from alpha9 we can consider that the structure is quite ok
# and that we should do only dela
--
Samba Shared Repository
More information about the samba-cvs
mailing list