diff options
author | Björn Baumbach <bb@sernet.de> | 2019-03-15 14:19:35 +0100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2019-07-04 02:07:20 +0000 |
commit | 64e37e3822afbed2f5b97b8d456108cc79bd99bc (patch) | |
tree | 59ed786e7794f6cefa27fdd02439bae8e6f7439b /python | |
parent | 824c98ac225b58ca9fba7fb18e4a39157ed174df (diff) | |
download | samba-64e37e3822afbed2f5b97b8d456108cc79bd99bc.tar.gz |
samba-tool user edit: use ldb methods to create ldif to modify user
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>
Diffstat (limited to 'python')
-rw-r--r-- | python/samba/netcmd/user.py | 51 |
1 files changed, 13 insertions, 38 deletions
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): |