samba-tool user edit: use ldb methods to create ldif to modify user
authorBjörn Baumbach <bb@sernet.de>
Fri, 15 Mar 2019 13:19:35 +0000 (14:19 +0100)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 4 Jul 2019 02:07:20 +0000 (02:07 +0000)
Remove tests from knownfail:
  samba.tests.samba_tool.user_edit.add_attribute_base64
  samba.tests.samba_tool.user_edit.add_attribute_base64_control
  samba.tests.samba_tool.user_edit.change_attribute_base64_control

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14003

Signed-off-by: Björn Baumbach <bb@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
python/samba/netcmd/user.py
selftest/knownfail.d/samba_tool.user_edit [deleted file]

index a64d2176dfac1e5b2d652d50ee95153bdaf0c1c8..28ff617f12b3755fde9f356e1c4dd4301f045b9b 100644 (file)
@@ -2467,46 +2467,21 @@ LDAP server using the 'nano' editor.
                 with open(t_file.name) as edited_file:
                     edited_message = edited_file.read()
 
-        if result_ldif != edited_message:
-            diff = difflib.ndiff(result_ldif.splitlines(),
-                                 edited_message.splitlines())
-            minus_lines = []
-            plus_lines = []
-            for line in diff:
-                if line.startswith('-'):
-                    line = line[2:]
-                    minus_lines.append(line)
-                elif line.startswith('+'):
-                    line = line[2:]
-                    plus_lines.append(line)
-
-            user_ldif = "dn: %s\n" % user_dn
-            user_ldif += "changetype: modify\n"
-
-            for line in minus_lines:
-                attr, val = line.split(':', 1)
-                search_attr = "%s:" % attr
-                if not re.search(r'^' + search_attr, str(plus_lines)):
-                    user_ldif += "delete: %s\n" % attr
-                    user_ldif += "%s: %s\n" % (attr, val)
-
-            for line in plus_lines:
-                attr, val = line.split(':', 1)
-                search_attr = "%s:" % attr
-                if re.search(r'^' + search_attr, str(minus_lines)):
-                    user_ldif += "replace: %s\n" % attr
-                    user_ldif += "%s: %s\n" % (attr, val)
-                if not re.search(r'^' + search_attr, str(minus_lines)):
-                    user_ldif += "add: %s\n" % attr
-                    user_ldif += "%s: %s\n" % (attr, val)
 
-            try:
-                samdb.modify_ldif(user_ldif)
-            except Exception as e:
-                raise CommandError("Failed to modify user '%s': " %
-                                   username, e)
+        msgs_edited = samdb.parse_ldif(edited_message)
+        msg_edited = next(msgs_edited)[1]
+
+        res_msg_diff = samdb.msg_diff(msg, msg_edited)
+        if len(res_msg_diff) == 0:
+            self.outf.write("Nothing to do\n")
+            return
+
+        try:
+            samdb.modify(res_msg_diff)
+        except Exception as e:
+            raise CommandError("Failed to modify user '%s': " % username, e)
 
-            self.outf.write("Modified User '%s' successfully\n" % username)
+        self.outf.write("Modified User '%s' successfully\n" % username)
 
 
 class cmd_user_show(Command):
diff --git a/selftest/knownfail.d/samba_tool.user_edit b/selftest/knownfail.d/samba_tool.user_edit
deleted file mode 100644 (file)
index 46a1f2b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-samba.tests.samba_tool.user_edit.add_attribute_base64
-samba.tests.samba_tool.user_edit.add_attribute_base64_control
-samba.tests.samba_tool.user_edit.change_attribute_base64_control