Skip to content

Commit 4f6ca9b

Browse files
[Network Drive] fix duplicate ids in access control sync (#2832)
1 parent ce5a4c1 commit 4f6ca9b

File tree

2 files changed

+41
-15
lines changed

2 files changed

+41
-15
lines changed

connectors/sources/network_drive.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -724,8 +724,7 @@ async def _user_access_control_doc(self, user, sid, groups_info=None):
724724
rid_groups = []
725725

726726
for group_sid in groups_info or []:
727-
rid = group_sid.split("-")[-1]
728-
rid_groups.append(_prefix_rid(rid))
727+
rid_groups.append(_prefix_rid(group_sid.split("-")[-1]))
729728

730729
access_control = [rid_user, prefixed_username, *rid_groups]
731730

@@ -744,13 +743,14 @@ def read_user_info_csv(self):
744743
try:
745744
csv_reader = csv.reader(file, delimiter=";")
746745
for row in csv_reader:
747-
user_info.append(
748-
{
749-
"name": row[0],
750-
"user_sid": row[1],
751-
"groups": row[2].split(",") if len(row[2]) > 0 else [],
752-
}
753-
)
746+
if row:
747+
user_info.append(
748+
{
749+
"name": row[0],
750+
"user_sid": row[1],
751+
"groups": row[2].split(",") if len(row[2]) > 0 else [],
752+
}
753+
)
754754
except csv.Error as e:
755755
self._logger.exception(
756756
f"Error while reading user mapping file at the location: {self.identity_mappings}. Error: {e}"
@@ -882,9 +882,11 @@ async def get_docs(self, filtering=None):
882882
async for document in self.fetch_filtered_directory(advanced_rules):
883883
yield (
884884
document,
885-
partial(self.get_content, document)
886-
if document["type"] == "file"
887-
else None,
885+
(
886+
partial(self.get_content, document)
887+
if document["type"] == "file"
888+
else None
889+
),
888890
)
889891

890892
else:
@@ -899,7 +901,9 @@ async def get_docs(self, filtering=None):
899901
await self._decorate_with_access_control(
900902
document, document["path"], document["type"], groups_info
901903
),
902-
partial(self.get_content, document)
903-
if document["type"] == "file"
904-
else None,
904+
(
905+
partial(self.get_content, document)
906+
if document["type"] == "file"
907+
else None
908+
),
905909
)

tests/sources/test_network_drive.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -855,6 +855,28 @@ async def test_get_access_control_dls_enabled():
855855
assert expected_user_access_control == user_access_control
856856

857857

858+
@pytest.mark.asyncio
859+
async def test_get_access_control_without_duplicate_ids():
860+
async with create_source(NASDataSource) as source:
861+
source._dls_enabled = MagicMock(return_value=True)
862+
source.drive_type = LINUX
863+
source.identity_mappings = "/a/b"
864+
865+
source.read_user_info_csv = MagicMock(
866+
return_value=[
867+
{"name": "user1", "user_sid": "S-1", "groups": ["S-11", "S-22"]},
868+
{"name": "user2", "user_sid": "S-2", "groups": ["S-22"]},
869+
{"name": "user3", "user_sid": "S-3", "groups": ["S-11"]},
870+
]
871+
)
872+
873+
seen_users = set()
874+
async for access_control in source.get_access_control():
875+
seen_users.add(access_control["_id"])
876+
877+
assert len(seen_users) == 3
878+
879+
858880
@mock.patch.object(
859881
NASDataSource,
860882
"traverse_diretory",

0 commit comments

Comments
 (0)