Skip to content

Commit 60a9c14

Browse files
Correct account type of HNS accounts (#1671)
1 parent 061bd51 commit 60a9c14

File tree

11 files changed

+106
-33
lines changed

11 files changed

+106
-33
lines changed

CHANGELOG.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
## 2.5.0 (Unreleased)
1+
## 2.4.2 (Unreleased)
22
**Features**
33
- Added `Client Assertion` based authentication for containers. Configure `tenant-id, client-id, aad-application-id and security scope` with `authMode` set to `workloadidentity`.
4-
5-
## 2.5.0~preview.1 (Unreleased)
6-
**Features**
4+
- Auto detection of account-type (block/adls) when user has not provided the type explicitly.
75

86
**Bug Fixes**
7+
[#1630](https://github.com/Azure/azure-storage-fuse/issues/1426) Added support to mount special containers in `mount all` command.
8+
[#1647](https://github.com/Azure/azure-storage-fuse/issues/1647) Provide detailed error when authentication fails.
99

1010
## 2.4.1 (2025-02-18)
1111
**Bug Fixes**

common/types.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ import (
4747

4848
// Standard config default values
4949
const (
50-
blobfuse2Version_ = "2.5.0~preview.1"
50+
blobfuse2Version_ = "2.4.2"
5151

5252
DefaultMaxLogFileSize = 512
5353
DefaultLogFileCount = 10

component/azstorage/azstorage.go

+10
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ func (az *AzStorage) Configure(isParent bool) error {
9090
return fmt.Errorf("config error in %s [%s]", az.Name(), err.Error())
9191
}
9292

93+
reconfigure:
94+
9395
err = ParseAndValidateConfig(az, conf)
9496
if err != nil {
9597
log.Err("AzStorage::Configure : Config validation failed [%s]", err.Error())
@@ -102,6 +104,14 @@ func (az *AzStorage) Configure(isParent bool) error {
102104
return err
103105
}
104106

107+
// If user has not specified the account type then detect it's HNS or FNS
108+
if conf.AccountType == "" && az.storage.IsAccountADLS() {
109+
log.Crit("AzStorage::Configure : Auto detected account type as adls, reconfiguring storage connection.")
110+
az.storage = nil
111+
conf.AccountType = "adls"
112+
goto reconfigure
113+
}
114+
105115
return nil
106116
}
107117

component/azstorage/block_blob.go

+34
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,40 @@ func (bb *BlockBlob) TestPipeline() error {
212212
return nil
213213
}
214214

215+
// IsAccountADLS : Check account is ADLS or not
216+
func (bb *BlockBlob) IsAccountADLS() bool {
217+
includeFields := bb.listDetails
218+
includeFields.Permissions = true // for FNS account this property will return back error
219+
220+
listBlobPager := bb.Container.NewListBlobsHierarchyPager("/", &container.ListBlobsHierarchyOptions{
221+
MaxResults: to.Ptr((int32)(2)),
222+
Prefix: &bb.Config.prefixPath,
223+
Include: includeFields,
224+
})
225+
226+
// we are just validating the auth mode used. So, no need to iterate over the pages
227+
_, err := listBlobPager.NextPage(context.Background())
228+
229+
if err == nil {
230+
// Call will be successful only when we are able to retrieve the permissions
231+
// Permissions will work only in case of HNS accounts
232+
log.Crit("BlockBlob::IsAccountADLS : Detected HNS account")
233+
return true
234+
}
235+
236+
var respErr *azcore.ResponseError
237+
errors.As(err, &respErr)
238+
if respErr != nil {
239+
if respErr.ErrorCode == "InvalidQueryParameterValue" {
240+
log.Crit("BlockBlob::IsAccountADLS : Detected FNS account")
241+
return false
242+
}
243+
}
244+
245+
log.Crit("BlockBlob::IsAccountADLS : Unable to detect account type, assuming FNS [%s]", err.Error())
246+
return false
247+
}
248+
215249
func (bb *BlockBlob) ListContainers() ([]string, error) {
216250
log.Trace("BlockBlob::ListContainers : Listing containers")
217251
cntList := make([]string, 0)

component/azstorage/block_blob_test.go

+12
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,18 @@ func (s *blockBlobTestSuite) TestNoEndpoint() {
335335
s.assert.Nil(err)
336336
}
337337

338+
func (s *blockBlobTestSuite) TestAccountType() {
339+
defer s.cleanupTest()
340+
// Setup
341+
s.tearDownTestHelper(false) // Don't delete the generated container.
342+
config := fmt.Sprintf("azstorage:\n account-name: %s\n type: block\n account-key: %s\n mode: key\n container: %s\n fail-unsupported-op: true",
343+
storageTestConfigurationParameters.BlockAccount, storageTestConfigurationParameters.BlockKey, s.container)
344+
s.setupTestHelper(config, s.container, true)
345+
346+
val := s.az.storage.IsAccountADLS()
347+
s.assert.False(val)
348+
}
349+
338350
func (s *blockBlobTestSuite) TestContainerNotFound() {
339351
defer s.cleanupTest()
340352
// Setup

component/azstorage/connection.go

+1
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ type AzConnection interface {
9797

9898
SetupPipeline() error
9999
TestPipeline() error
100+
IsAccountADLS() bool
100101

101102
ListContainers() ([]string, error)
102103

component/azstorage/datalake.go

+5
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,11 @@ func (dl *Datalake) TestPipeline() error {
212212
return dl.BlockBlob.TestPipeline()
213213
}
214214

215+
// IsAccountADLS : Check account is ADLS or not
216+
func (dl *Datalake) IsAccountADLS() bool {
217+
return dl.BlockBlob.IsAccountADLS()
218+
}
219+
215220
func (dl *Datalake) ListContainers() ([]string, error) {
216221
log.Trace("Datalake::ListContainers : Listing containers")
217222
return dl.BlockBlob.ListContainers()

component/azstorage/datalake_test.go

+12
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,18 @@ func (s *datalakeTestSuite) TestNoEndpoint() {
202202
s.assert.Nil(err)
203203
}
204204

205+
func (s *datalakeTestSuite) TestAccountType() {
206+
defer s.cleanupTest()
207+
// Setup
208+
s.tearDownTestHelper(false) // Don't delete the generated container.
209+
config := fmt.Sprintf("azstorage:\n account-name: %s\n type: adls\n account-key: %s\n mode: key\n container: %s\n fail-unsupported-op: true",
210+
storageTestConfigurationParameters.AdlsAccount, storageTestConfigurationParameters.AdlsKey, s.container)
211+
s.setupTestHelper(config, s.container, true)
212+
213+
val := s.az.storage.IsAccountADLS()
214+
s.assert.True(val)
215+
}
216+
205217
func (s *datalakeTestSuite) TestFileSystemNotFound() {
206218
defer s.cleanupTest()
207219
// Setup

component/block_cache/block_cache.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -679,9 +679,8 @@ func (bc *BlockCache) getBlock(handle *handlemap.Handle, readoffset uint64) (*Bl
679679

680680
if readoffset >= uint64(prop.Size) {
681681
//create a null block and return
682-
block := bc.blockPool.TryGet()
682+
block := bc.blockPool.MustGet()
683683
block.offset = readoffset
684-
block.data = make([]byte, bc.blockSize) // TODO: no need to allocate this buffer again as they are already pre allocated.
685684
// block.flags.Set(BlockFlagSynced)
686685
log.Debug("BlockCache::getBlock : Returning a null block %v for %v=>%s (read offset %v)", index, handle.ID, handle.Path, readoffset)
687686
return block, nil

go.mod

+8-8
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/Azure/azure-storage-fuse/v2
33
go 1.24.0
44

55
require (
6-
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0
6+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1
77
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2
88
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.1-beta.1
99
github.com/Azure/azure-sdk-for-go/sdk/storage/azdatalake v1.4.1-beta.1
@@ -28,8 +28,8 @@ require (
2828
)
2929

3030
require (
31-
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
32-
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.0 // indirect
31+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.0 // indirect
32+
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 // indirect
3333
github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect
3434
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
3535
github.com/golang-jwt/jwt/v5 v5.2.2 // indirect
@@ -38,21 +38,21 @@ require (
3838
github.com/inconshreveable/mousetrap v1.1.0 // indirect
3939
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
4040
github.com/kylelemons/godebug v1.1.0 // indirect
41-
github.com/magiconair/properties v1.8.9 // indirect
41+
github.com/magiconair/properties v1.8.7 // indirect
4242
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
4343
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
4444
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
4545
github.com/russross/blackfriday/v2 v2.1.0 // indirect
46-
github.com/sagikazarmark/locafero v0.7.0 // indirect
46+
github.com/sagikazarmark/locafero v0.9.0 // indirect
4747
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
4848
github.com/sourcegraph/conc v0.3.0 // indirect
49-
github.com/spf13/afero v1.12.0 // indirect
49+
github.com/spf13/afero v1.14.0 // indirect
5050
github.com/spf13/cast v1.7.1 // indirect
5151
github.com/subosito/gotenv v1.6.0 // indirect
5252
go.uber.org/multierr v1.11.0 // indirect
5353
golang.org/x/crypto v0.36.0 // indirect
54-
golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa // indirect
55-
golang.org/x/net v0.37.0 // indirect
54+
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
55+
golang.org/x/net v0.38.0 // indirect
5656
golang.org/x/sys v0.31.0 // indirect
5757
golang.org/x/text v0.23.0 // indirect
5858
)

go.sum

+18-18
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ=
2-
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ=
1+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 h1:DSDNVxqkoXJiko6x8a90zidoYqnYYa6c1MTzDKzKkTo=
2+
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1/go.mod h1:zGqV2R4Cr/k8Uye5w+dgQ06WJtEcbQG/8J7BB6hnCr4=
33
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys=
44
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2/go.mod h1:SqINnQ9lVVdRlyC8cd1lCI0SdX4n2paeABd2K8ggfnE=
55
github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY=
66
github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8=
7-
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY=
8-
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY=
7+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.0 h1:Bg8m3nq/X1DeePkAbCfb6ml6F3F0IunEhE8TMh+lY48=
8+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.0/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA=
99
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0 h1:PiSrjRPpkQNjrM8H0WwKMnZUdu1RGMtd/LdGKUrOo+c=
1010
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0/go.mod h1:oDrbWx4ewMylP7xHivfgixbfGBT6APAwsSoHRKotnIc=
1111
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.1-beta.1 h1:XFczdrb+crNIzbtZG7nXBMwNHCZjqHef9Wv12FWL/4A=
@@ -14,8 +14,8 @@ github.com/Azure/azure-sdk-for-go/sdk/storage/azdatalake v1.4.1-beta.1 h1:f6HhW/
1414
github.com/Azure/azure-sdk-for-go/sdk/storage/azdatalake v1.4.1-beta.1/go.mod h1:shQA+KL2PTK0BauYvJdEfkC/m5iurt3KyZ523NQn/PQ=
1515
github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM=
1616
github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE=
17-
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.0 h1:MUkXAnvvDHgvPItl0nBj0hgk0f7hnnQbGm0h0+YxbN4=
18-
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.0/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
17+
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 h1:oygO0locgZJe7PpYPXT5A29ZkwJaPqcva7BVeemZOZs=
18+
github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
1919
github.com/JeffreyRichter/enum v0.0.0-20180725232043-2567042f9cda h1:NOo6+gM9NNPJ3W56nxOKb4164LEw094U0C8zYQM8mQU=
2020
github.com/JeffreyRichter/enum v0.0.0-20180725232043-2567042f9cda/go.mod h1:2CaSFTh2ph9ymS6goiOKIBdfhwWUVsX4nQ5QjIYFHHs=
2121
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
@@ -38,8 +38,8 @@ github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeD
3838
github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
3939
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
4040
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
41-
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
42-
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
41+
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
42+
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
4343
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
4444
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
4545
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
@@ -57,8 +57,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
5757
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
5858
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
5959
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
60-
github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
61-
github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
60+
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
61+
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
6262
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
6363
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
6464
github.com/montanaflynn/stats v0.7.0 h1:r3y12KyNxj/Sb/iOE46ws+3mS1+MZca1wlHQFPsY/JU=
@@ -79,16 +79,16 @@ github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU
7979
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
8080
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
8181
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
82-
github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsFaodPcyo=
83-
github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k=
82+
github.com/sagikazarmark/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k=
83+
github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk=
8484
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
8585
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
8686
github.com/sevlyar/go-daemon v0.1.6 h1:EUh1MDjEM4BI109Jign0EaknA2izkOyi0LV3ro3QQGs=
8787
github.com/sevlyar/go-daemon v0.1.6/go.mod h1:6dJpPatBT9eUwM5VCw9Bt6CdX9Tk6UWvhW3MebLDRKE=
8888
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
8989
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
90-
github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs=
91-
github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4=
90+
github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA=
91+
github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo=
9292
github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
9393
github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
9494
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
@@ -113,14 +113,14 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
113113
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
114114
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
115115
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
116-
golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa h1:t2QcU6V556bFjYgu4L6C+6VrCPyJZ+eyRsABUPs1mz4=
117-
golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa/go.mod h1:BHOTPb3L19zxehTsLoJXVaTktb06DFgmdW6Wb9s8jqk=
116+
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
117+
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
118118
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
119119
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
120120
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
121121
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
122-
golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c=
123-
golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
122+
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
123+
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
124124
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
125125
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
126126
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=

0 commit comments

Comments
 (0)