diff --git a/cmd/admin-bucket-handlers.go b/cmd/admin-bucket-handlers.go index bfb997b33..bf0c4faad 100644 --- a/cmd/admin-bucket-handlers.go +++ b/cmd/admin-bucket-handlers.go @@ -427,6 +427,21 @@ func (a adminAPIHandlers) ExportBucketMetadataHandler(w http.ResponseWriter, r * cfgPath := pathJoin(bi.Name, cfgFile) bucket := bi.Name switch cfgFile { + case bucketPolicyConfig: + config, _, err := globalBucketMetadataSys.GetBucketPolicy(bucket) + if err != nil { + if errors.Is(err, BucketPolicyNotFound{Bucket: bucket}) { + continue + } + writeErrorResponse(ctx, w, exportError(ctx, err, cfgFile, bucket), r.URL) + return + } + configData, err := json.Marshal(config) + if err != nil { + writeErrorResponse(ctx, w, exportError(ctx, err, cfgFile, bucket), r.URL) + return + } + rawDataFn(bytes.NewReader(configData), cfgPath, len(configData)) case bucketNotificationConfig: config, err := globalBucketMetadataSys.GetNotificationConfig(bucket) if err != nil { diff --git a/cmd/bucket-metadata-sys.go b/cmd/bucket-metadata-sys.go index ee050a9a4..8abbf3e1f 100644 --- a/cmd/bucket-metadata-sys.go +++ b/cmd/bucket-metadata-sys.go @@ -264,6 +264,21 @@ func (sys *BucketMetadataSys) GetVersioningConfig(bucket string) (*versioning.Ve return meta.versioningConfig, meta.VersioningConfigUpdatedAt, nil } +// GetBucketPolicy returns configured bucket policy +func (sys *BucketMetadataSys) GetBucketPolicy(bucket string) (*policy.BucketPolicy, time.Time, error) { + meta, _, err := sys.GetConfig(GlobalContext, bucket) + if err != nil { + if errors.Is(err, errConfigNotFound) { + return nil, time.Time{}, BucketPolicyNotFound{Bucket: bucket} + } + return nil, time.Time{}, err + } + if meta.policyConfig == nil { + return nil, time.Time{}, BucketPolicyNotFound{Bucket: bucket} + } + return meta.policyConfig, meta.PolicyConfigUpdatedAt, nil +} + // GetTaggingConfig returns configured tagging config // The returned object may not be modified. func (sys *BucketMetadataSys) GetTaggingConfig(bucket string) (*tags.Tags, time.Time, error) {