s4: upgradeprovision rename also when there is a mismatch on the case of name attribute
authorMatthieu Patou <mat@matws.net>
Sat, 12 Dec 2009 15:33:53 +0000 (18:33 +0300)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 14 Dec 2009 23:04:04 +0000 (10:04 +1100)
  Renaming not only helps when name attribute is not here
  it also helps when the case is not the good one. So
  in order to avoid problem and have as much as possible similar provision
  we should use the rename whenever a name difference appear.

source4/scripting/bin/upgradeprovision

index ae84c9586b08b3922c66927224fe7c36e6faa4fe..e231d08477b8349508168b07a28bf68cbaddc304 100755 (executable)
@@ -140,6 +140,12 @@ if setup_dir is None:
 
 session = system_session()
 
+# simple helper to allow back and forth rename
+def identic_rename(ldb,dn):
+       (before,sep,after)=str(dn).partition('=')
+       ldb.rename(dn,ldb.Dn(ldb,"%s=foo%s"%(before,after)))
+       ldb.rename(ldb.Dn(ldb,"%s=foo%s"%(before,after)),dn)
+
 # Create an array of backlinked attributes
 def populate_backlink(newpaths,creds,session,schemadn):
        newsam_ldb = Ldb(newpaths.samdb, session_info=session, credentials=creds,lp=lp)
@@ -458,8 +464,7 @@ def update_secrets(newpaths,paths,creds,session):
 
                        if att == "name":
                                message(CHANGE,"Found attribute name on  %s, must rename the DN "%(res2[0].dn))
-                               secrets_ldb.rename(res2[0].dn,ldb.Dn(secrets_ldb,"%sfoo"%str(res2[0].dn)))
-                               secrets_ldb.rename(ldb.Dn(secrets_ldb,"%sfoo"%str(res2[0].dn)),res2[0].dn)
+                               identic_rename(secrets_ldb,res[0].dn)
                        else:
                                delta.remove(att)