From: Ralph Boehme Date: Mon, 2 Mar 2026 15:51:34 +0000 (+0100) Subject: python/tests: enhance LibsmbTests.clean_file to work with READ-ONLY attributes X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fc2f8a4a396439080f590ea741d860d7dfa63927;p=thirdparty%2Fsamba.git python/tests: enhance LibsmbTests.clean_file to work with READ-ONLY attributes Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison --- diff --git a/python/samba/tests/libsmb.py b/python/samba/tests/libsmb.py index e3683901df2..124eeac4c05 100644 --- a/python/samba/tests/libsmb.py +++ b/python/samba/tests/libsmb.py @@ -25,6 +25,7 @@ from samba import (ntstatus,NTSTATUSError) import samba.tests import os import stat +import struct class LibsmbTests(samba.tests.TestCase): @@ -46,15 +47,38 @@ class LibsmbTests(samba.tests.TestCase): self.server = samba.tests.env_get_var_value("SERVER") self.server_ip = samba.tests.env_get_var_value("SERVER_IP") - def clean_file(self, conn, filename): + def clean_file(self, conn, filename, retry=True): try: conn.unlink(filename) except NTSTATUSError as e: if e.args[0] == ntstatus.NT_STATUS_FILE_IS_A_DIRECTORY: conn.rmdir(filename) - elif not (e.args[0] == ntstatus.NT_STATUS_OBJECT_NAME_NOT_FOUND or - e.args[0] == ntstatus.NT_STATUS_OBJECT_PATH_NOT_FOUND): - raise + return + if e.args[0] == ntstatus.NT_STATUS_CANNOT_DELETE: + if not retry: + raise e + elif (e.args[0] == ntstatus.NT_STATUS_OBJECT_NAME_NOT_FOUND or + e.args[0] == ntstatus.NT_STATUS_OBJECT_PATH_NOT_FOUND): + return + else: + raise e + else: + return + + # Reset READ-ONLY attribute so we can delete the file + h,_,_ = conn.create_ex( + 'test_delete_read_only_attr', + CreateDisposition=libsmb.FILE_OPEN, + DesiredAccess=security.SEC_FILE_WRITE_ATTRIBUTE) + + blob = struct.pack("