Skip to content

Commit 036e727

Browse files
authored
HDDS-11732. Fix ACL check on bucket resolution while reading from snapshot (apache#7446)
Change-Id: I192219d1840ea9ddb06c2c177207cf870a7be8eb
1 parent dbda703 commit 036e727

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmSnapshotManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,7 @@ public ReferenceCounted<IOmMetadataReader> getActiveFsMetadataOrSnapshot(
628628
// Updating the volumeName & bucketName in case the bucket is a linked bucket. We need to do this before a
629629
// permission check, since linked bucket permissions and source bucket permissions could be different.
630630
ResolvedBucket resolvedBucket = ozoneManager.resolveBucketLink(Pair.of(volumeName,
631-
bucketName), false);
631+
bucketName), false, false);
632632
volumeName = resolvedBucket.realVolume();
633633
bucketName = resolvedBucket.realBucket();
634634
return (ReferenceCounted<IOmMetadataReader>) (ReferenceCounted<?>)

hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4402,10 +4402,16 @@ public ResolvedBucket resolveBucketLink(Pair<String, String> requested,
44024402
}
44034403

44044404
public ResolvedBucket resolveBucketLink(Pair<String, String> requested,
4405-
boolean allowDanglingBuckets)
4405+
boolean allowDanglingBuckets) throws IOException {
4406+
return resolveBucketLink(requested, allowDanglingBuckets, isAclEnabled);
4407+
}
4408+
4409+
public ResolvedBucket resolveBucketLink(Pair<String, String> requested,
4410+
boolean allowDanglingBuckets,
4411+
boolean aclEnabled)
44064412
throws IOException {
44074413
OmBucketInfo resolved;
4408-
if (isAclEnabled) {
4414+
if (aclEnabled) {
44094415
UserGroupInformation ugi = getRemoteUser();
44104416
if (getS3Auth() != null) {
44114417
ugi = UserGroupInformation.createRemoteUser(
@@ -4416,15 +4422,26 @@ public ResolvedBucket resolveBucketLink(Pair<String, String> requested,
44164422
ugi,
44174423
remoteIp != null ? remoteIp : omRpcAddress.getAddress(),
44184424
remoteIp != null ? remoteIp.getHostName() :
4419-
omRpcAddress.getHostName(), allowDanglingBuckets);
4425+
omRpcAddress.getHostName(), allowDanglingBuckets, aclEnabled);
44204426
} else {
44214427
resolved = resolveBucketLink(requested, new HashSet<>(),
4422-
null, null, null, allowDanglingBuckets);
4428+
null, null, null, allowDanglingBuckets, aclEnabled);
44234429
}
44244430
return new ResolvedBucket(requested.getLeft(), requested.getRight(),
44254431
resolved);
44264432
}
44274433

4434+
private OmBucketInfo resolveBucketLink(
4435+
Pair<String, String> volumeAndBucket,
4436+
Set<Pair<String, String>> visited,
4437+
UserGroupInformation userGroupInformation,
4438+
InetAddress remoteAddress,
4439+
String hostName,
4440+
boolean allowDanglingBuckets) throws IOException {
4441+
return resolveBucketLink(volumeAndBucket, visited, userGroupInformation, remoteAddress, hostName,
4442+
allowDanglingBuckets, isAclEnabled);
4443+
}
4444+
44284445
/**
44294446
* Resolves bucket symlinks. Read permission is required for following links.
44304447
*
@@ -4442,7 +4459,8 @@ private OmBucketInfo resolveBucketLink(
44424459
UserGroupInformation userGroupInformation,
44434460
InetAddress remoteAddress,
44444461
String hostName,
4445-
boolean allowDanglingBuckets) throws IOException {
4462+
boolean allowDanglingBuckets,
4463+
boolean aclEnabled) throws IOException {
44464464

44474465
String volumeName = volumeAndBucket.getLeft();
44484466
String bucketName = volumeAndBucket.getRight();
@@ -4465,7 +4483,7 @@ private OmBucketInfo resolveBucketLink(
44654483
DETECTED_LOOP_IN_BUCKET_LINKS);
44664484
}
44674485

4468-
if (isAclEnabled) {
4486+
if (aclEnabled) {
44694487
final ACLType type = ACLType.READ;
44704488
checkAcls(ResourceType.BUCKET, StoreType.OZONE, type,
44714489
volumeName, bucketName, null, userGroupInformation,
@@ -4476,7 +4494,7 @@ private OmBucketInfo resolveBucketLink(
44764494
return resolveBucketLink(
44774495
Pair.of(info.getSourceVolume(), info.getSourceBucket()),
44784496
visited, userGroupInformation, remoteAddress, hostName,
4479-
allowDanglingBuckets);
4497+
allowDanglingBuckets, aclEnabled);
44804498
}
44814499

44824500
@VisibleForTesting

0 commit comments

Comments
 (0)