From 64e37e3822afbed2f5b97b8d456108cc79bd99bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Baumbach?= Date: Fri, 15 Mar 2019 14:19:35 +0100 Subject: samba-tool user edit: use ldb methods to create ldif to modify user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Andrew Bartlett --- python/samba/netcmd/user.py | 51 ++++++++++++--------------------------------- 1 file changed, 13 insertions(+), 38 deletions(-) (limited to 'python') diff --git a/python/samba/netcmd/user.py b/python/samba/netcmd/user.py index a64d2176dfa..28ff617f12b 100644 --- a/python/samba/netcmd/user.py +++ b/python/samba/netcmd/user.py @@ -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): -- cgit v1.2.1