Compare commits
	
		
			40 Commits
		
	
	
		
			v2.0.4-k3s
			...
			td-v2.0.5
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 90d73c9e88 | |||
| 
						 | 
					a3c777afd1 | ||
| 
						 | 
					890953d3c6 | ||
| 
						 | 
					f660f4424f | ||
| 
						 | 
					ba6b205d0f | ||
| 
						 | 
					676ba43ad3 | ||
| 
						 | 
					b9ab7a3f49 | ||
| 
						 | 
					fb4c30d4ed | ||
| 
						 | 
					d60230c0a2 | ||
| 
						 | 
					5bcf0a95e3 | ||
| 
						 | 
					4838f33f7e | ||
| 
						 | 
					a8082cd60d | ||
| 
						 | 
					ab513cdec2 | ||
| 
						 | 
					58b715ad8d | ||
| 
						 | 
					b4a53e8264 | ||
| 
						 | 
					4bcf472de6 | ||
| 
						 | 
					ea7be04cb4 | ||
| 
						 | 
					ebd9a50325 | ||
| 
						 | 
					ff47757ae4 | ||
| 
						 | 
					b184a97d30 | ||
| 
						 | 
					8a638b71ae | ||
| 
						 | 
					84d9658c36 | ||
| 
						 | 
					9e97c2e626 | ||
| 
						 | 
					e04543db09 | ||
| 
						 | 
					a5b872b5c8 | ||
| 
						 | 
					9f46e7a449 | ||
| 
						 | 
					8a16a6a04a | ||
| 
						 | 
					a183b2d232 | ||
| 
						 | 
					c146996f3f | ||
| 
						 | 
					091143135b | ||
| 
						 | 
					148fbbb92f | ||
| 
						 | 
					c2372c072c | ||
| 
						 | 
					ceb33770d2 | ||
| 
						 | 
					c0d93d20be | ||
| 
						 | 
					e8506511b2 | ||
| 
						 | 
					4cfb89430c | ||
| 
						 | 
					2b9e6a29d7 | ||
| 
						 | 
					6df1ea0d9e | ||
| 
						 | 
					dcd661b138 | ||
| 
						 | 
					16f20abdff | 
@@ -12,7 +12,7 @@
 | 
				
			|||||||
	"features": {
 | 
						"features": {
 | 
				
			||||||
		"ghcr.io/devcontainers/features/docker-in-docker:2": {},
 | 
							"ghcr.io/devcontainers/features/docker-in-docker:2": {},
 | 
				
			||||||
		"ghcr.io/devcontainers/features/go:1": {
 | 
							"ghcr.io/devcontainers/features/go:1": {
 | 
				
			||||||
			"version": "1.23.7"
 | 
								"version": "1.23.8"
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/actions/install-go/action.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/actions/install-go/action.yml
									
									
									
									
										vendored
									
									
								
							@@ -3,7 +3,7 @@ description: "Reusable action to install Go, so there is one place to bump Go ve
 | 
				
			|||||||
inputs:
 | 
					inputs:
 | 
				
			||||||
  go-version:
 | 
					  go-version:
 | 
				
			||||||
    required: true
 | 
					    required: true
 | 
				
			||||||
    default: "1.23.7"
 | 
					    default: "1.23.8"
 | 
				
			||||||
    description: "Go version to install"
 | 
					    description: "Go version to install"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
runs:
 | 
					runs:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/api-release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/api-release.yml
									
									
									
									
										vendored
									
									
								
							@@ -6,7 +6,7 @@ on:
 | 
				
			|||||||
name: API Release
 | 
					name: API Release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
env:
 | 
					env:
 | 
				
			||||||
  GO_VERSION: "1.23.7"
 | 
					  GO_VERSION: "1.23.8"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
permissions: # added using https://github.com/step-security/secure-workflows
 | 
					permissions: # added using https://github.com/step-security/secure-workflows
 | 
				
			||||||
  contents: read
 | 
					  contents: read
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							@@ -189,7 +189,7 @@ jobs:
 | 
				
			|||||||
    strategy:
 | 
					    strategy:
 | 
				
			||||||
      matrix:
 | 
					      matrix:
 | 
				
			||||||
        os: [ubuntu-22.04, ubuntu-24.04, ubuntu-24.04-arm, macos-13, windows-2019, windows-2022]
 | 
					        os: [ubuntu-22.04, ubuntu-24.04, ubuntu-24.04-arm, macos-13, windows-2019, windows-2022]
 | 
				
			||||||
        go-version: ["1.24.1", "1.23.7"]
 | 
					        go-version: ["1.24.2", "1.23.8"]
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
					      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
 | 
				
			||||||
      - uses: ./.github/actions/install-go
 | 
					      - uses: ./.github/actions/install-go
 | 
				
			||||||
@@ -405,7 +405,9 @@ jobs:
 | 
				
			|||||||
          script/setup/install-critools
 | 
					          script/setup/install-critools
 | 
				
			||||||
          script/setup/install-failpoint-binaries
 | 
					          script/setup/install-failpoint-binaries
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Install criu
 | 
					      # Disable criu testing on arm64 until we can solve the consistent failures of restore testing
 | 
				
			||||||
 | 
					      - if: matrix.os != 'ubuntu-24.04-arm'
 | 
				
			||||||
 | 
					        name: Install criu
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          sudo add-apt-repository -y ppa:criu/ppa
 | 
					          sudo add-apt-repository -y ppa:criu/ppa
 | 
				
			||||||
          sudo apt-get update
 | 
					          sudo apt-get update
 | 
				
			||||||
@@ -486,8 +488,12 @@ jobs:
 | 
				
			|||||||
          TEST_RUNTIME: ${{ matrix.runtime }}
 | 
					          TEST_RUNTIME: ${{ matrix.runtime }}
 | 
				
			||||||
          CGROUP_DRIVER: ${{ matrix.cgroup_driver }}
 | 
					          CGROUP_DRIVER: ${{ matrix.cgroup_driver }}
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
 | 
					          # skipping the ipv6 test till https://github.com/actions/runner-images/issues/11985 is fixed
 | 
				
			||||||
 | 
					          if [[ ${{matrix.os}} == "ubuntu-22.04" ]]; then
 | 
				
			||||||
 | 
					            skip_test="runtime should support port mapping with host port and container port"
 | 
				
			||||||
 | 
					          fi
 | 
				
			||||||
          env
 | 
					          env
 | 
				
			||||||
          sudo -E PATH=$PATH ./script/critest.sh "${{github.workspace}}/report"
 | 
					          sudo -E PATH=$PATH SKIP_TEST="$skip_test" ./script/critest.sh "${{github.workspace}}/report"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Log the status of this VM to investigate issues like
 | 
					      # Log the status of this VM to investigate issues like
 | 
				
			||||||
      # https://github.com/containerd/containerd/issues/4969
 | 
					      # https://github.com/containerd/containerd/issues/4969
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							@@ -13,7 +13,7 @@ on:
 | 
				
			|||||||
name: Release
 | 
					name: Release
 | 
				
			||||||
 | 
					
 | 
				
			||||||
env:
 | 
					env:
 | 
				
			||||||
  GO_VERSION: "1.23.7"
 | 
					  GO_VERSION: "1.23.8"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
permissions: # added using https://github.com/step-security/secure-workflows
 | 
					permissions: # added using https://github.com/step-security/secure-workflows
 | 
				
			||||||
  contents: read
 | 
					  contents: read
 | 
				
			||||||
@@ -64,7 +64,7 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  build:
 | 
					  build:
 | 
				
			||||||
    name: Build Release Binaries
 | 
					    name: Build Release Binaries
 | 
				
			||||||
    runs-on: ubuntu-20.04
 | 
					    runs-on: ubuntu-24.04
 | 
				
			||||||
    timeout-minutes: 30
 | 
					    timeout-minutes: 30
 | 
				
			||||||
    strategy:
 | 
					    strategy:
 | 
				
			||||||
      matrix:
 | 
					      matrix:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								Vagrantfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								Vagrantfile
									
									
									
									
										vendored
									
									
								
							@@ -107,7 +107,7 @@ EOF
 | 
				
			|||||||
  config.vm.provision "install-golang", type: "shell", run: "once" do |sh|
 | 
					  config.vm.provision "install-golang", type: "shell", run: "once" do |sh|
 | 
				
			||||||
    sh.upload_path = "/tmp/vagrant-install-golang"
 | 
					    sh.upload_path = "/tmp/vagrant-install-golang"
 | 
				
			||||||
    sh.env = {
 | 
					    sh.env = {
 | 
				
			||||||
        'GO_VERSION': ENV['GO_VERSION'] || "1.23.7",
 | 
					        'GO_VERSION': ENV['GO_VERSION'] || "1.23.8",
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    sh.inline = <<~SHELL
 | 
					    sh.inline = <<~SHELL
 | 
				
			||||||
        #!/usr/bin/env bash
 | 
					        #!/usr/bin/env bash
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
module github.com/containerd/containerd/api
 | 
					module github.com/containerd/containerd/api
 | 
				
			||||||
 | 
					
 | 
				
			||||||
go 1.21
 | 
					go 1.23.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
	github.com/containerd/ttrpc v1.2.5
 | 
						github.com/containerd/ttrpc v1.2.5
 | 
				
			||||||
@@ -17,7 +17,7 @@ require (
 | 
				
			|||||||
	github.com/golang/protobuf v1.5.3 // indirect
 | 
						github.com/golang/protobuf v1.5.3 // indirect
 | 
				
			||||||
	github.com/opencontainers/go-digest v1.0.0 // indirect
 | 
						github.com/opencontainers/go-digest v1.0.0 // indirect
 | 
				
			||||||
	github.com/sirupsen/logrus v1.9.3 // indirect
 | 
						github.com/sirupsen/logrus v1.9.3 // indirect
 | 
				
			||||||
	golang.org/x/net v0.23.0 // indirect
 | 
						golang.org/x/net v0.37.0 // indirect
 | 
				
			||||||
	golang.org/x/sys v0.18.0 // indirect
 | 
						golang.org/x/sys v0.31.0 // indirect
 | 
				
			||||||
	golang.org/x/text v0.14.0 // indirect
 | 
						golang.org/x/text v0.23.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								api/go.sum
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								api/go.sum
									
									
									
									
									
								
							@@ -42,8 +42,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
 | 
				
			|||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
					golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
				
			||||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 | 
					golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 | 
				
			||||||
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
 | 
					golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c=
 | 
				
			||||||
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
 | 
					golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
@@ -51,12 +51,12 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h
 | 
				
			|||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
					golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			||||||
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
 | 
					golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
 | 
				
			||||||
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 | 
					golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
 | 
				
			||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
					golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
				
			||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
					golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
				
			||||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
 | 
					golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
 | 
				
			||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 | 
					golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
					golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
					golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 | 
					golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -280,6 +280,7 @@ func (c *container) NewTask(ctx context.Context, ioCreate cio.Creator, opts ...N
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	info := TaskInfo{
 | 
						info := TaskInfo{
 | 
				
			||||||
		runtime:        r.Runtime.Name,
 | 
							runtime:        r.Runtime.Name,
 | 
				
			||||||
 | 
							runtimeOptions: r.Runtime.Options,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for _, o := range opts {
 | 
						for _, o := range opts {
 | 
				
			||||||
		if err := o(ctx, c.client, &info); err != nil {
 | 
							if err := o(ctx, c.client, &info); err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -146,6 +146,11 @@ type TaskInfo struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// runtime is the runtime name for the container, and cannot be changed.
 | 
						// runtime is the runtime name for the container, and cannot be changed.
 | 
				
			||||||
	runtime string
 | 
						runtime string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// runtimeOptions is the runtime options for the container, and when task options are set,
 | 
				
			||||||
 | 
						// they will be based on the runtimeOptions.
 | 
				
			||||||
 | 
						// https://github.com/containerd/containerd/issues/11568
 | 
				
			||||||
 | 
						runtimeOptions typeurl.Any
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Runtime name for the container
 | 
					// Runtime name for the container
 | 
				
			||||||
@@ -153,6 +158,29 @@ func (i *TaskInfo) Runtime() string {
 | 
				
			|||||||
	return i.runtime
 | 
						return i.runtime
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// getRuncOptions returns a reference to the runtime options for use by the task.
 | 
				
			||||||
 | 
					// If the set of options is not set by the opts passed into the NewTask creation
 | 
				
			||||||
 | 
					// this function first attempts to initialize the runtime options with a copy of the runtimeOptions,
 | 
				
			||||||
 | 
					// otherwise an empty set of options is assigned and returned
 | 
				
			||||||
 | 
					func (i *TaskInfo) getRuncOptions() (*options.Options, error) {
 | 
				
			||||||
 | 
						if i.Options != nil {
 | 
				
			||||||
 | 
							opts, ok := i.Options.(*options.Options)
 | 
				
			||||||
 | 
							if !ok {
 | 
				
			||||||
 | 
								return nil, errors.New("invalid runtime v2 options format")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return opts, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						opts := &options.Options{}
 | 
				
			||||||
 | 
						if i.runtimeOptions != nil && i.runtimeOptions.GetValue() != nil {
 | 
				
			||||||
 | 
							if err := typeurl.UnmarshalTo(i.runtimeOptions, opts); err != nil {
 | 
				
			||||||
 | 
								return nil, fmt.Errorf("failed to get runtime v2 options: %w", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						i.Options = opts
 | 
				
			||||||
 | 
						return opts, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Task is the executable object within containerd
 | 
					// Task is the executable object within containerd
 | 
				
			||||||
type Task interface {
 | 
					type Task interface {
 | 
				
			||||||
	Process
 | 
						Process
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,12 +54,9 @@ func WithRuntimePath(absRuntimePath string) NewTaskOpts {
 | 
				
			|||||||
// usually it is served inside a sandbox, and we can get it from sandbox status.
 | 
					// usually it is served inside a sandbox, and we can get it from sandbox status.
 | 
				
			||||||
func WithTaskAPIEndpoint(address string, version uint32) NewTaskOpts {
 | 
					func WithTaskAPIEndpoint(address string, version uint32) NewTaskOpts {
 | 
				
			||||||
	return func(ctx context.Context, client *Client, info *TaskInfo) error {
 | 
						return func(ctx context.Context, client *Client, info *TaskInfo) error {
 | 
				
			||||||
		if info.Options == nil {
 | 
							opts, err := info.getRuncOptions()
 | 
				
			||||||
			info.Options = &options.Options{}
 | 
							if err != nil {
 | 
				
			||||||
		}
 | 
								return err
 | 
				
			||||||
		opts, ok := info.Options.(*options.Options)
 | 
					 | 
				
			||||||
		if !ok {
 | 
					 | 
				
			||||||
			return errors.New("invalid runtime v2 options format")
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		opts.TaskApiAddress = address
 | 
							opts.TaskApiAddress = address
 | 
				
			||||||
		opts.TaskApiVersion = version
 | 
							opts.TaskApiVersion = version
 | 
				
			||||||
@@ -119,12 +116,9 @@ func WithCheckpointImagePath(path string) CheckpointTaskOpts {
 | 
				
			|||||||
// WithRestoreImagePath sets image path for create option
 | 
					// WithRestoreImagePath sets image path for create option
 | 
				
			||||||
func WithRestoreImagePath(path string) NewTaskOpts {
 | 
					func WithRestoreImagePath(path string) NewTaskOpts {
 | 
				
			||||||
	return func(ctx context.Context, c *Client, ti *TaskInfo) error {
 | 
						return func(ctx context.Context, c *Client, ti *TaskInfo) error {
 | 
				
			||||||
		if ti.Options == nil {
 | 
							opts, err := ti.getRuncOptions()
 | 
				
			||||||
			ti.Options = &options.Options{}
 | 
							if err != nil {
 | 
				
			||||||
		}
 | 
								return err
 | 
				
			||||||
		opts, ok := ti.Options.(*options.Options)
 | 
					 | 
				
			||||||
		if !ok {
 | 
					 | 
				
			||||||
			return errors.New("invalid runtime v2 options format")
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		opts.CriuImagePath = path
 | 
							opts.CriuImagePath = path
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
@@ -134,12 +128,9 @@ func WithRestoreImagePath(path string) NewTaskOpts {
 | 
				
			|||||||
// WithRestoreWorkPath sets criu work path for create option
 | 
					// WithRestoreWorkPath sets criu work path for create option
 | 
				
			||||||
func WithRestoreWorkPath(path string) NewTaskOpts {
 | 
					func WithRestoreWorkPath(path string) NewTaskOpts {
 | 
				
			||||||
	return func(ctx context.Context, c *Client, ti *TaskInfo) error {
 | 
						return func(ctx context.Context, c *Client, ti *TaskInfo) error {
 | 
				
			||||||
		if ti.Options == nil {
 | 
							opts, err := ti.getRuncOptions()
 | 
				
			||||||
			ti.Options = &options.Options{}
 | 
							if err != nil {
 | 
				
			||||||
		}
 | 
								return err
 | 
				
			||||||
		opts, ok := ti.Options.(*options.Options)
 | 
					 | 
				
			||||||
		if !ok {
 | 
					 | 
				
			||||||
			return errors.New("invalid runtime v2 options format")
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		opts.CriuWorkPath = path
 | 
							opts.CriuWorkPath = path
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,20 +20,14 @@ package client
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"errors"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/containerd/containerd/api/types/runc/options"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// WithNoNewKeyring causes tasks not to be created with a new keyring for secret storage.
 | 
					// WithNoNewKeyring causes tasks not to be created with a new keyring for secret storage.
 | 
				
			||||||
// There is an upper limit on the number of keyrings in a linux system
 | 
					// There is an upper limit on the number of keyrings in a linux system
 | 
				
			||||||
func WithNoNewKeyring(ctx context.Context, c *Client, ti *TaskInfo) error {
 | 
					func WithNoNewKeyring(ctx context.Context, c *Client, ti *TaskInfo) error {
 | 
				
			||||||
	if ti.Options == nil {
 | 
						opts, err := ti.getRuncOptions()
 | 
				
			||||||
		ti.Options = &options.Options{}
 | 
						if err != nil {
 | 
				
			||||||
	}
 | 
							return err
 | 
				
			||||||
	opts, ok := ti.Options.(*options.Options)
 | 
					 | 
				
			||||||
	if !ok {
 | 
					 | 
				
			||||||
		return errors.New("invalid v2 shim create options format")
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	opts.NoNewKeyring = true
 | 
						opts.NoNewKeyring = true
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
@@ -41,12 +35,9 @@ func WithNoNewKeyring(ctx context.Context, c *Client, ti *TaskInfo) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// WithNoPivotRoot instructs the runtime not to you pivot_root
 | 
					// WithNoPivotRoot instructs the runtime not to you pivot_root
 | 
				
			||||||
func WithNoPivotRoot(_ context.Context, _ *Client, ti *TaskInfo) error {
 | 
					func WithNoPivotRoot(_ context.Context, _ *Client, ti *TaskInfo) error {
 | 
				
			||||||
	if ti.Options == nil {
 | 
						opts, err := ti.getRuncOptions()
 | 
				
			||||||
		ti.Options = &options.Options{}
 | 
						if err != nil {
 | 
				
			||||||
	}
 | 
							return err
 | 
				
			||||||
	opts, ok := ti.Options.(*options.Options)
 | 
					 | 
				
			||||||
	if !ok {
 | 
					 | 
				
			||||||
		return errors.New("invalid v2 shim create options format")
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	opts.NoPivotRoot = true
 | 
						opts.NoPivotRoot = true
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
@@ -55,12 +46,9 @@ func WithNoPivotRoot(_ context.Context, _ *Client, ti *TaskInfo) error {
 | 
				
			|||||||
// WithShimCgroup sets the existing cgroup for the shim
 | 
					// WithShimCgroup sets the existing cgroup for the shim
 | 
				
			||||||
func WithShimCgroup(path string) NewTaskOpts {
 | 
					func WithShimCgroup(path string) NewTaskOpts {
 | 
				
			||||||
	return func(ctx context.Context, c *Client, ti *TaskInfo) error {
 | 
						return func(ctx context.Context, c *Client, ti *TaskInfo) error {
 | 
				
			||||||
		if ti.Options == nil {
 | 
							opts, err := ti.getRuncOptions()
 | 
				
			||||||
			ti.Options = &options.Options{}
 | 
							if err != nil {
 | 
				
			||||||
		}
 | 
								return err
 | 
				
			||||||
		opts, ok := ti.Options.(*options.Options)
 | 
					 | 
				
			||||||
		if !ok {
 | 
					 | 
				
			||||||
			return errors.New("invalid v2 shim create options format")
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		opts.ShimCgroup = path
 | 
							opts.ShimCgroup = path
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
@@ -70,12 +58,9 @@ func WithShimCgroup(path string) NewTaskOpts {
 | 
				
			|||||||
// WithUIDOwner allows console I/O to work with the remapped UID in user namespace
 | 
					// WithUIDOwner allows console I/O to work with the remapped UID in user namespace
 | 
				
			||||||
func WithUIDOwner(uid uint32) NewTaskOpts {
 | 
					func WithUIDOwner(uid uint32) NewTaskOpts {
 | 
				
			||||||
	return func(ctx context.Context, c *Client, ti *TaskInfo) error {
 | 
						return func(ctx context.Context, c *Client, ti *TaskInfo) error {
 | 
				
			||||||
		if ti.Options == nil {
 | 
							opts, err := ti.getRuncOptions()
 | 
				
			||||||
			ti.Options = &options.Options{}
 | 
							if err != nil {
 | 
				
			||||||
		}
 | 
								return err
 | 
				
			||||||
		opts, ok := ti.Options.(*options.Options)
 | 
					 | 
				
			||||||
		if !ok {
 | 
					 | 
				
			||||||
			return errors.New("invalid v2 shim create options format")
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		opts.IoUid = uid
 | 
							opts.IoUid = uid
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
@@ -85,12 +70,9 @@ func WithUIDOwner(uid uint32) NewTaskOpts {
 | 
				
			|||||||
// WithGIDOwner allows console I/O to work with the remapped GID in user namespace
 | 
					// WithGIDOwner allows console I/O to work with the remapped GID in user namespace
 | 
				
			||||||
func WithGIDOwner(gid uint32) NewTaskOpts {
 | 
					func WithGIDOwner(gid uint32) NewTaskOpts {
 | 
				
			||||||
	return func(ctx context.Context, c *Client, ti *TaskInfo) error {
 | 
						return func(ctx context.Context, c *Client, ti *TaskInfo) error {
 | 
				
			||||||
		if ti.Options == nil {
 | 
							opts, err := ti.getRuncOptions()
 | 
				
			||||||
			ti.Options = &options.Options{}
 | 
							if err != nil {
 | 
				
			||||||
		}
 | 
								return err
 | 
				
			||||||
		opts, ok := ti.Options.(*options.Options)
 | 
					 | 
				
			||||||
		if !ok {
 | 
					 | 
				
			||||||
			return errors.New("invalid v2 shim create options format")
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		opts.IoGid = gid
 | 
							opts.IoGid = gid
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,7 +34,7 @@
 | 
				
			|||||||
#   docker run --privileged --group-add keep-groups -v ./critest_exit_code.txt:/tmp/critest_exit_code.txt containerd-test
 | 
					#   docker run --privileged --group-add keep-groups -v ./critest_exit_code.txt:/tmp/critest_exit_code.txt containerd-test
 | 
				
			||||||
# ------------------------------------------------------------------------------
 | 
					# ------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ARG GOLANG_VERSION=1.23.7
 | 
					ARG GOLANG_VERSION=1.23.8
 | 
				
			||||||
ARG GOLANG_IMAGE=golang
 | 
					ARG GOLANG_IMAGE=golang
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FROM ${GOLANG_IMAGE}:${GOLANG_VERSION} AS golang
 | 
					FROM ${GOLANG_IMAGE}:${GOLANG_VERSION} AS golang
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,11 +43,11 @@ go run main.go --target_dir $SRC/containerd/images
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
apt-get update && apt-get install -y wget
 | 
					apt-get update && apt-get install -y wget
 | 
				
			||||||
cd $SRC
 | 
					cd $SRC
 | 
				
			||||||
wget --quiet https://go.dev/dl/go1.23.7.linux-amd64.tar.gz
 | 
					wget --quiet https://go.dev/dl/go1.23.8.linux-amd64.tar.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mkdir temp-go
 | 
					mkdir temp-go
 | 
				
			||||||
rm -rf /root/.go/*
 | 
					rm -rf /root/.go/*
 | 
				
			||||||
tar -C temp-go/ -xzf go1.23.7.linux-amd64.tar.gz
 | 
					tar -C temp-go/ -xzf go1.23.8.linux-amd64.tar.gz
 | 
				
			||||||
mv temp-go/go/* /root/.go/
 | 
					mv temp-go/go/* /root/.go/
 | 
				
			||||||
cd $SRC/containerd
 | 
					cd $SRC/containerd
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -479,13 +479,15 @@ func (pw *pushWriter) Digest() digest.Digest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (pw *pushWriter) Commit(ctx context.Context, size int64, expected digest.Digest, opts ...content.Opt) error {
 | 
					func (pw *pushWriter) Commit(ctx context.Context, size int64, expected digest.Digest, opts ...content.Opt) error {
 | 
				
			||||||
	// Check whether read has already thrown an error
 | 
						// Check whether read has already thrown an error
 | 
				
			||||||
 | 
						if pw.pipe != nil {
 | 
				
			||||||
		if _, err := pw.pipe.Write([]byte{}); err != nil && !errors.Is(err, io.ErrClosedPipe) {
 | 
							if _, err := pw.pipe.Write([]byte{}); err != nil && !errors.Is(err, io.ErrClosedPipe) {
 | 
				
			||||||
			return fmt.Errorf("pipe error before commit: %w", err)
 | 
								return fmt.Errorf("pipe error before commit: %w", err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					 | 
				
			||||||
		if err := pw.pipe.Close(); err != nil {
 | 
							if err := pw.pipe.Close(); err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// TODO: timeout waiting for response
 | 
						// TODO: timeout waiting for response
 | 
				
			||||||
	var resp *http.Response
 | 
						var resp *http.Response
 | 
				
			||||||
	select {
 | 
						select {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -91,9 +91,9 @@ func loadShim(ctx context.Context, bundle *Bundle, onClose func()) (_ ShimInstan
 | 
				
			|||||||
		// To prevent flood of error messages, the expected error
 | 
							// To prevent flood of error messages, the expected error
 | 
				
			||||||
		// should be reset, like os.ErrClosed or os.ErrNotExist, which
 | 
							// should be reset, like os.ErrClosed or os.ErrNotExist, which
 | 
				
			||||||
		// depends on platform.
 | 
							// depends on platform.
 | 
				
			||||||
		err = checkCopyShimLogError(ctx, err)
 | 
							err = checkCopyShimLogError(shimCtx, err)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			log.G(ctx).WithError(err).Error("copy shim log after reload")
 | 
								log.G(shimCtx).WithError(err).Error("copy shim log after reload")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}()
 | 
						}()
 | 
				
			||||||
	onCloseWithShimLog := func() {
 | 
						onCloseWithShimLog := func() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -266,12 +266,12 @@ func (m *TaskManager) validateRuntimeFeatures(ctx context.Context, opts runtime.
 | 
				
			|||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ropts := opts.RuntimeOptions
 | 
						topts := opts.TaskOptions
 | 
				
			||||||
	if ropts == nil || ropts.GetValue() == nil {
 | 
						if topts == nil || topts.GetValue() == nil {
 | 
				
			||||||
		ropts = opts.TaskOptions
 | 
							topts = opts.RuntimeOptions
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pInfo, err := m.PluginInfo(ctx, &apitypes.RuntimeRequest{RuntimePath: opts.Runtime, Options: typeurl.MarshalProto(ropts)})
 | 
						pInfo, err := m.PluginInfo(ctx, &apitypes.RuntimeRequest{RuntimePath: opts.Runtime, Options: typeurl.MarshalProto(topts)})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return fmt.Errorf("runtime info: %w", err)
 | 
							return fmt.Errorf("runtime info: %w", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,4 +21,6 @@ const (
 | 
				
			|||||||
	// This will be based on the client compilation target, so take that into
 | 
						// This will be based on the client compilation target, so take that into
 | 
				
			||||||
	// account when choosing this value.
 | 
						// account when choosing this value.
 | 
				
			||||||
	DefaultSnapshotter = "overlayfs"
 | 
						DefaultSnapshotter = "overlayfs"
 | 
				
			||||||
 | 
						// DefaultDiffer will set the default differ for the platform.
 | 
				
			||||||
 | 
						DefaultDiffer = "walking"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,4 +23,6 @@ const (
 | 
				
			|||||||
	// This will be based on the client compilation target, so take that into
 | 
						// This will be based on the client compilation target, so take that into
 | 
				
			||||||
	// account when choosing this value.
 | 
						// account when choosing this value.
 | 
				
			||||||
	DefaultSnapshotter = "native"
 | 
						DefaultSnapshotter = "native"
 | 
				
			||||||
 | 
						// DefaultDiffer will set the default differ for the platform.
 | 
				
			||||||
 | 
						DefaultDiffer = "walking"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										22
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								go.mod
									
									
									
									
									
								
							@@ -1,6 +1,6 @@
 | 
				
			|||||||
module github.com/containerd/containerd/v2
 | 
					module github.com/containerd/containerd/v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
go 1.22.0
 | 
					go 1.23.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
	dario.cat/mergo v1.0.1
 | 
						dario.cat/mergo v1.0.1
 | 
				
			||||||
@@ -74,8 +74,8 @@ require (
 | 
				
			|||||||
	go.opentelemetry.io/otel/sdk v1.31.0
 | 
						go.opentelemetry.io/otel/sdk v1.31.0
 | 
				
			||||||
	go.opentelemetry.io/otel/trace v1.31.0
 | 
						go.opentelemetry.io/otel/trace v1.31.0
 | 
				
			||||||
	golang.org/x/mod v0.21.0
 | 
						golang.org/x/mod v0.21.0
 | 
				
			||||||
	golang.org/x/sync v0.10.0
 | 
						golang.org/x/sync v0.12.0
 | 
				
			||||||
	golang.org/x/sys v0.28.0
 | 
						golang.org/x/sys v0.31.0
 | 
				
			||||||
	google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38
 | 
						google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38
 | 
				
			||||||
	google.golang.org/grpc v1.68.1
 | 
						google.golang.org/grpc v1.68.1
 | 
				
			||||||
	google.golang.org/protobuf v1.35.2
 | 
						google.golang.org/protobuf v1.35.2
 | 
				
			||||||
@@ -86,7 +86,7 @@ require (
 | 
				
			|||||||
	k8s.io/klog/v2 v2.130.1
 | 
						k8s.io/klog/v2 v2.130.1
 | 
				
			||||||
	k8s.io/kubelet v0.31.2
 | 
						k8s.io/kubelet v0.31.2
 | 
				
			||||||
	k8s.io/utils v0.0.0-20240711033017-18e509b52bc8
 | 
						k8s.io/utils v0.0.0-20240711033017-18e509b52bc8
 | 
				
			||||||
	tags.cncf.io/container-device-interface v0.8.1
 | 
						tags.cncf.io/container-device-interface v1.0.0
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
@@ -102,7 +102,7 @@ require (
 | 
				
			|||||||
	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
 | 
						github.com/emicklei/go-restful/v3 v3.11.0 // indirect
 | 
				
			||||||
	github.com/felixge/httpsnoop v1.0.4 // indirect
 | 
						github.com/felixge/httpsnoop v1.0.4 // indirect
 | 
				
			||||||
	github.com/fxamacker/cbor/v2 v2.7.0 // indirect
 | 
						github.com/fxamacker/cbor/v2 v2.7.0 // indirect
 | 
				
			||||||
	github.com/go-jose/go-jose/v4 v4.0.4 // indirect
 | 
						github.com/go-jose/go-jose/v4 v4.0.5 // indirect
 | 
				
			||||||
	github.com/go-logr/logr v1.4.2 // indirect
 | 
						github.com/go-logr/logr v1.4.2 // indirect
 | 
				
			||||||
	github.com/go-logr/stdr v1.2.2 // indirect
 | 
						github.com/go-logr/stdr v1.2.2 // indirect
 | 
				
			||||||
	github.com/go-openapi/jsonpointer v0.19.6 // indirect
 | 
						github.com/go-openapi/jsonpointer v0.19.6 // indirect
 | 
				
			||||||
@@ -152,12 +152,12 @@ require (
 | 
				
			|||||||
	go.opencensus.io v0.24.0 // indirect
 | 
						go.opencensus.io v0.24.0 // indirect
 | 
				
			||||||
	go.opentelemetry.io/otel/metric v1.31.0 // indirect
 | 
						go.opentelemetry.io/otel/metric v1.31.0 // indirect
 | 
				
			||||||
	go.opentelemetry.io/proto/otlp v1.3.1 // indirect
 | 
						go.opentelemetry.io/proto/otlp v1.3.1 // indirect
 | 
				
			||||||
	golang.org/x/crypto v0.31.0 // indirect
 | 
						golang.org/x/crypto v0.36.0 // indirect
 | 
				
			||||||
	golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 // indirect
 | 
						golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 // indirect
 | 
				
			||||||
	golang.org/x/net v0.33.0 // indirect
 | 
						golang.org/x/net v0.37.0 // indirect
 | 
				
			||||||
	golang.org/x/oauth2 v0.23.0 // indirect
 | 
						golang.org/x/oauth2 v0.28.0 // indirect
 | 
				
			||||||
	golang.org/x/term v0.27.0 // indirect
 | 
						golang.org/x/term v0.30.0 // indirect
 | 
				
			||||||
	golang.org/x/text v0.21.0 // indirect
 | 
						golang.org/x/text v0.23.0 // indirect
 | 
				
			||||||
	golang.org/x/time v0.3.0 // indirect
 | 
						golang.org/x/time v0.3.0 // indirect
 | 
				
			||||||
	google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 // indirect
 | 
						google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 // indirect
 | 
				
			||||||
	gopkg.in/inf.v0 v0.9.1 // indirect
 | 
						gopkg.in/inf.v0 v0.9.1 // indirect
 | 
				
			||||||
@@ -169,7 +169,7 @@ require (
 | 
				
			|||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/yaml v1.4.0 // indirect
 | 
						sigs.k8s.io/yaml v1.4.0 // indirect
 | 
				
			||||||
	tags.cncf.io/container-device-interface/specs-go v0.8.0 // indirect
 | 
						tags.cncf.io/container-device-interface/specs-go v1.0.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exclude (
 | 
					exclude (
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										36
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								go.sum
									
									
									
									
									
								
							@@ -119,8 +119,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos
 | 
				
			|||||||
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
 | 
					github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
 | 
				
			||||||
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
 | 
					github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
 | 
				
			||||||
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
 | 
					github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
 | 
				
			||||||
github.com/go-jose/go-jose/v4 v4.0.4 h1:VsjPI33J0SB9vQM6PLmNjoHqMQNGPiZ0rHL7Ni7Q6/E=
 | 
					github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE=
 | 
				
			||||||
github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc=
 | 
					github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA=
 | 
				
			||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 | 
					github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 | 
				
			||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
 | 
					github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
 | 
				
			||||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
 | 
					github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
 | 
				
			||||||
@@ -407,8 +407,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY
 | 
				
			|||||||
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
 | 
					golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
 | 
				
			||||||
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
 | 
					golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
 | 
				
			||||||
golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
 | 
					golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
 | 
				
			||||||
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
 | 
					golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
 | 
				
			||||||
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
 | 
					golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
					golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 h1:qCEDpW1G+vcj3Y7Fy52pEM1AWm3abj8WimGYejI3SC4=
 | 
					golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 h1:qCEDpW1G+vcj3Y7Fy52pEM1AWm3abj8WimGYejI3SC4=
 | 
				
			||||||
golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
 | 
					golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
 | 
				
			||||||
@@ -442,11 +442,11 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
 | 
				
			|||||||
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
 | 
					golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
 | 
				
			||||||
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
 | 
					golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
 | 
				
			||||||
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
 | 
					golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
 | 
				
			||||||
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
 | 
					golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c=
 | 
				
			||||||
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
 | 
					golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
 | 
				
			||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
					golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 | 
				
			||||||
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
 | 
					golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc=
 | 
				
			||||||
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
 | 
					golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
					golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			||||||
@@ -458,8 +458,9 @@ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
				
			|||||||
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
 | 
					golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
 | 
				
			||||||
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 | 
					golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 | 
				
			||||||
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 | 
					golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 | 
				
			||||||
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
 | 
					 | 
				
			||||||
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 | 
					golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 | 
				
			||||||
 | 
					golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
 | 
				
			||||||
 | 
					golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
					golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
					golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
					golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
				
			||||||
@@ -482,8 +483,9 @@ golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			|||||||
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
					golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			||||||
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 | 
					golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 | 
				
			||||||
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 | 
					golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 | 
				
			||||||
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
 | 
					 | 
				
			||||||
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 | 
					golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
 | 
				
			||||||
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
 | 
					golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
 | 
				
			||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 | 
					golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 | 
				
			||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 | 
					golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 | 
				
			||||||
@@ -492,8 +494,9 @@ golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
 | 
				
			|||||||
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
 | 
					golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
 | 
				
			||||||
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
 | 
					golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
 | 
				
			||||||
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
 | 
					golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
 | 
				
			||||||
golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
 | 
					 | 
				
			||||||
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
 | 
					golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
 | 
				
			||||||
 | 
					golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
 | 
				
			||||||
 | 
					golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
 | 
				
			||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
					golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
				
			||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
					golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
				
			||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 | 
					golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 | 
				
			||||||
@@ -502,8 +505,9 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 | 
				
			|||||||
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 | 
					golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 | 
				
			||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 | 
					golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 | 
				
			||||||
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 | 
					golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 | 
				
			||||||
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
 | 
					 | 
				
			||||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
 | 
					golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
 | 
				
			||||||
 | 
					golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
 | 
				
			||||||
 | 
					golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
 | 
				
			||||||
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
 | 
					golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
 | 
				
			||||||
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
					golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
					golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
				
			||||||
@@ -594,7 +598,7 @@ sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+s
 | 
				
			|||||||
sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
 | 
					sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
 | 
				
			||||||
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
 | 
					sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
 | 
				
			||||||
tags.cncf.io/container-device-interface v0.8.1 h1:c0jN4Mt6781jD67NdPajmZlD1qrqQyov/Xfoab37lj0=
 | 
					tags.cncf.io/container-device-interface v1.0.0 h1:fbwPQiWZNpXUb9Os6t6JW52rsOppTFUbeJOpNtN1TmI=
 | 
				
			||||||
tags.cncf.io/container-device-interface v0.8.1/go.mod h1:Apb7N4VdILW0EVdEMRYXIDVRZfNJZ+kmEUss2kRRQ6Y=
 | 
					tags.cncf.io/container-device-interface v1.0.0/go.mod h1:mmi2aRGmOjK/6NR3TXjLpEIarOJ9qwgZjQ3nTIRwAaA=
 | 
				
			||||||
tags.cncf.io/container-device-interface/specs-go v0.8.0 h1:QYGFzGxvYK/ZLMrjhvY0RjpUavIn4KcmRmVP/JjdBTA=
 | 
					tags.cncf.io/container-device-interface/specs-go v1.0.0 h1:8gLw29hH1ZQP9K1YtAzpvkHCjjyIxHZYzBAvlQ+0vD8=
 | 
				
			||||||
tags.cncf.io/container-device-interface/specs-go v0.8.0/go.mod h1:BhJIkjjPh4qpys+qm4DAYtUyryaTDg9zris+AczXyws=
 | 
					tags.cncf.io/container-device-interface/specs-go v1.0.0/go.mod h1:u86hoFWqnh3hWz3esofRFKbI261bUlvUfLKGrDhJkgQ=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,12 +19,26 @@
 | 
				
			|||||||
package client
 | 
					package client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
						"sync"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/containerd/containerd/api/services/tasks/v1"
 | 
				
			||||||
 | 
						"github.com/containerd/containerd/api/types/runc/options"
 | 
				
			||||||
	. "github.com/containerd/containerd/v2/client"
 | 
						. "github.com/containerd/containerd/v2/client"
 | 
				
			||||||
	"github.com/containerd/containerd/v2/integration/images"
 | 
						"github.com/containerd/containerd/v2/integration/images"
 | 
				
			||||||
	"github.com/containerd/containerd/v2/pkg/deprecation"
 | 
						"github.com/containerd/containerd/v2/pkg/deprecation"
 | 
				
			||||||
 | 
						"github.com/containerd/containerd/v2/pkg/oci"
 | 
				
			||||||
 | 
						"github.com/containerd/containerd/v2/pkg/protobuf"
 | 
				
			||||||
 | 
						"github.com/containerd/containerd/v2/plugins"
 | 
				
			||||||
 | 
						"github.com/containerd/errdefs"
 | 
				
			||||||
 | 
						"github.com/containerd/errdefs/pkg/errgrpc"
 | 
				
			||||||
	"github.com/containerd/platforms"
 | 
						"github.com/containerd/platforms"
 | 
				
			||||||
 | 
						"github.com/containerd/typeurl/v2"
 | 
				
			||||||
 | 
						"github.com/google/go-cmp/cmp"
 | 
				
			||||||
 | 
						"github.com/stretchr/testify/require"
 | 
				
			||||||
 | 
						"google.golang.org/grpc"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
@@ -63,3 +77,118 @@ func TestImagePullSchema1WithEmptyLayers(t *testing.T) {
 | 
				
			|||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestNewTaskWithRuntimeOption(t *testing.T) {
 | 
				
			||||||
 | 
						t.Parallel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fakeTasks := &fakeTaskService{
 | 
				
			||||||
 | 
							TasksClient:    tasks.NewTasksClient(nil),
 | 
				
			||||||
 | 
							createRequests: map[string]*tasks.CreateTaskRequest{},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cli, err := newClient(t, address,
 | 
				
			||||||
 | 
							WithServices(WithTaskClient(fakeTasks)),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						require.NoError(t, err)
 | 
				
			||||||
 | 
						defer cli.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var (
 | 
				
			||||||
 | 
							image       Image
 | 
				
			||||||
 | 
							ctx, cancel = testContext(t)
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						defer cancel()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						image, err = cli.GetImage(ctx, testImage)
 | 
				
			||||||
 | 
						require.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, tc := range []struct {
 | 
				
			||||||
 | 
							name            string
 | 
				
			||||||
 | 
							runtimeOption   *options.Options
 | 
				
			||||||
 | 
							taskOpts        []NewTaskOpts
 | 
				
			||||||
 | 
							expectedOptions *options.Options
 | 
				
			||||||
 | 
						}{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "should be empty options",
 | 
				
			||||||
 | 
								runtimeOption: &options.Options{
 | 
				
			||||||
 | 
									BinaryName: "no-runc",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								expectedOptions: nil,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "should overwrite IOUid/ShimCgroup",
 | 
				
			||||||
 | 
								runtimeOption: &options.Options{
 | 
				
			||||||
 | 
									BinaryName:    "no-runc",
 | 
				
			||||||
 | 
									ShimCgroup:    "/abc",
 | 
				
			||||||
 | 
									IoUid:         1000,
 | 
				
			||||||
 | 
									SystemdCgroup: true,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								taskOpts: []NewTaskOpts{
 | 
				
			||||||
 | 
									WithUIDOwner(2000),
 | 
				
			||||||
 | 
									WithGIDOwner(3000),
 | 
				
			||||||
 | 
									WithShimCgroup("/def"),
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								expectedOptions: &options.Options{
 | 
				
			||||||
 | 
									BinaryName:    "no-runc",
 | 
				
			||||||
 | 
									ShimCgroup:    "/def",
 | 
				
			||||||
 | 
									IoUid:         2000,
 | 
				
			||||||
 | 
									IoGid:         3000,
 | 
				
			||||||
 | 
									SystemdCgroup: true,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						} {
 | 
				
			||||||
 | 
							t.Run(tc.name, func(t *testing.T) {
 | 
				
			||||||
 | 
								id := strings.Replace(t.Name(), "/", "_", -1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								container, err := cli.NewContainer(
 | 
				
			||||||
 | 
									ctx,
 | 
				
			||||||
 | 
									id,
 | 
				
			||||||
 | 
									WithNewSnapshotView(id, image),
 | 
				
			||||||
 | 
									WithNewSpec(oci.WithImageConfig(image), withExitStatus(7)),
 | 
				
			||||||
 | 
									WithRuntime(plugins.RuntimeRuncV2, tc.runtimeOption),
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
 | 
								require.NoError(t, err)
 | 
				
			||||||
 | 
								defer container.Delete(ctx, WithSnapshotCleanup)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								_, err = container.NewTask(ctx, empty(), tc.taskOpts...)
 | 
				
			||||||
 | 
								require.NoError(t, err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								fakeTasks.Lock()
 | 
				
			||||||
 | 
								req := fakeTasks.createRequests[id]
 | 
				
			||||||
 | 
								fakeTasks.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if tc.expectedOptions == nil {
 | 
				
			||||||
 | 
									require.Nil(t, req.Options)
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								gotOptions := &options.Options{}
 | 
				
			||||||
 | 
								require.NoError(t, typeurl.UnmarshalTo(req.Options, gotOptions))
 | 
				
			||||||
 | 
								require.True(t, cmp.Equal(tc.expectedOptions, gotOptions, protobuf.Compare))
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type fakeTaskService struct {
 | 
				
			||||||
 | 
						sync.Mutex
 | 
				
			||||||
 | 
						createRequests map[string]*tasks.CreateTaskRequest
 | 
				
			||||||
 | 
						tasks.TasksClient
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ts *fakeTaskService) Create(ctx context.Context, in *tasks.CreateTaskRequest, opts ...grpc.CallOption) (*tasks.CreateTaskResponse, error) {
 | 
				
			||||||
 | 
						ts.Lock()
 | 
				
			||||||
 | 
						defer ts.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ts.createRequests[in.ContainerID] = in
 | 
				
			||||||
 | 
						return &tasks.CreateTaskResponse{
 | 
				
			||||||
 | 
							ContainerID: in.ContainerID,
 | 
				
			||||||
 | 
							Pid:         1,
 | 
				
			||||||
 | 
						}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ts *fakeTaskService) Get(ctx context.Context, in *tasks.GetRequest, opts ...grpc.CallOption) (*tasks.GetResponse, error) {
 | 
				
			||||||
 | 
						return nil, errgrpc.ToGRPC(errdefs.ErrNotFound)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (ts *fakeTaskService) Delete(ctx context.Context, in *tasks.DeleteTaskRequest, opts ...grpc.CallOption) (*tasks.DeleteResponse, error) {
 | 
				
			||||||
 | 
						return nil, errgrpc.ToGRPC(errdefs.ErrNotFound)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1090,6 +1090,19 @@ func TestContainerRuntimeOptionsv2(t *testing.T) {
 | 
				
			|||||||
	if !strings.Contains(err.Error(), `"no-runc"`) {
 | 
						if !strings.Contains(err.Error(), `"no-runc"`) {
 | 
				
			||||||
		t.Errorf("task creation should have failed because of lack of executable. Instead failed with: %v", err.Error())
 | 
							t.Errorf("task creation should have failed because of lack of executable. Instead failed with: %v", err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// It doesn't matter what the NewTaskOpts function is. We are using an existing function in the client package,
 | 
				
			||||||
 | 
						// which will cause the TaskOptions in the new task request to be non-empty.
 | 
				
			||||||
 | 
						// https://github.com/containerd/containerd/issues/11568
 | 
				
			||||||
 | 
						task, err = container.NewTask(ctx, empty(), WithNoNewKeyring)
 | 
				
			||||||
 | 
						if err == nil {
 | 
				
			||||||
 | 
							t.Errorf("task creation should have failed")
 | 
				
			||||||
 | 
							task.Delete(ctx)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !strings.Contains(err.Error(), `"no-runc"`) {
 | 
				
			||||||
 | 
							t.Errorf("task creation should have failed because of lack of executable. Instead failed with: %v", err.Error())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestContainerKillInitPidHost(t *testing.T) {
 | 
					func TestContainerKillInitPidHost(t *testing.T) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,7 +43,7 @@ type podSandboxEventHandler struct {
 | 
				
			|||||||
func (p *podSandboxEventHandler) HandleEvent(any interface{}) error {
 | 
					func (p *podSandboxEventHandler) HandleEvent(any interface{}) error {
 | 
				
			||||||
	switch e := any.(type) {
 | 
						switch e := any.(type) {
 | 
				
			||||||
	case *eventtypes.TaskExit:
 | 
						case *eventtypes.TaskExit:
 | 
				
			||||||
		log.L.Infof("TaskExit event in podsandbox handler %+v", e)
 | 
							log.L.Debugf("TaskExit event in podsandbox handler %+v", e)
 | 
				
			||||||
		// Use ID instead of ContainerID to rule out TaskExit event for exec.
 | 
							// Use ID instead of ContainerID to rule out TaskExit event for exec.
 | 
				
			||||||
		sb := p.controller.store.Get(e.ID)
 | 
							sb := p.controller.store.Get(e.ID)
 | 
				
			||||||
		if sb == nil {
 | 
							if sb == nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -105,7 +105,6 @@ guest:x:100:guest
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for _, testCase := range testCases {
 | 
						for _, testCase := range testCases {
 | 
				
			||||||
		testCase := testCase
 | 
					 | 
				
			||||||
		t.Run(testCase.user, func(t *testing.T) {
 | 
							t.Run(testCase.user, func(t *testing.T) {
 | 
				
			||||||
			t.Parallel()
 | 
								t.Parallel()
 | 
				
			||||||
			s := Spec{
 | 
								s := Spec{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -73,13 +73,12 @@ func init() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			options := &images.CRIImageServiceOptions{
 | 
								options := &images.CRIImageServiceOptions{
 | 
				
			||||||
				Content:          mdb.ContentStore(),
 | 
									Content:          mdb.ContentStore(),
 | 
				
			||||||
				Images:           metadata.NewImageStore(mdb),
 | 
					 | 
				
			||||||
				RuntimePlatforms: map[string]images.ImagePlatform{},
 | 
									RuntimePlatforms: map[string]images.ImagePlatform{},
 | 
				
			||||||
				Snapshotters:     map[string]snapshots.Snapshotter{},
 | 
									Snapshotters:     map[string]snapshots.Snapshotter{},
 | 
				
			||||||
				ImageFSPaths:     map[string]string{},
 | 
									ImageFSPaths:     map[string]string{},
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			options.Client, err = containerd.New(
 | 
								ctrdCli, err := containerd.New(
 | 
				
			||||||
				"",
 | 
									"",
 | 
				
			||||||
				containerd.WithDefaultNamespace(constants.K8sContainerdNamespace),
 | 
									containerd.WithDefaultNamespace(constants.K8sContainerdNamespace),
 | 
				
			||||||
				containerd.WithDefaultPlatform(platforms.Default()),
 | 
									containerd.WithDefaultPlatform(platforms.Default()),
 | 
				
			||||||
@@ -88,6 +87,8 @@ func init() {
 | 
				
			|||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return nil, fmt.Errorf("unable to init client for cri image service: %w", err)
 | 
									return nil, fmt.Errorf("unable to init client for cri image service: %w", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								options.Images = ctrdCli.ImageService()
 | 
				
			||||||
 | 
								options.Client = ctrdCli
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			allSnapshotters := mdb.Snapshotters()
 | 
								allSnapshotters := mdb.Snapshotters()
 | 
				
			||||||
			defaultSnapshotter := config.Snapshotter
 | 
								defaultSnapshotter := config.Snapshotter
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,6 +28,7 @@ func defaultUnpackConfig() []unpackConfiguration {
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			Platform:    platforms.Format(platforms.DefaultSpec()),
 | 
								Platform:    platforms.Format(platforms.DefaultSpec()),
 | 
				
			||||||
			Snapshotter: defaults.DefaultSnapshotter,
 | 
								Snapshotter: defaults.DefaultSnapshotter,
 | 
				
			||||||
 | 
								Differ:      defaults.DefaultDiffer,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								releases/v2.0.5.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								releases/v2.0.5.toml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					# commit to be tagged for new release
 | 
				
			||||||
 | 
					commit = "HEAD"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					project_name = "containerd"
 | 
				
			||||||
 | 
					github_repo = "containerd/containerd"
 | 
				
			||||||
 | 
					match_deps = "^github.com/(containerd/[a-zA-Z0-9-]+)$"
 | 
				
			||||||
 | 
					ignore_deps = [ "github.com/containerd/containerd" ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# previous release
 | 
				
			||||||
 | 
					previous = "v2.0.4"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pre_release = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					preface = """\
 | 
				
			||||||
 | 
					The fifth patch release for containerd 2.0 includes various bug fixes and updates.
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					postface = """\
 | 
				
			||||||
 | 
					### Which file should I download?
 | 
				
			||||||
 | 
					* `containerd-<VERSION>-<OS>-<ARCH>.tar.gz`:         ✅Recommended. Dynamically linked with glibc 2.31 (Ubuntu 20.04).
 | 
				
			||||||
 | 
					* `containerd-static-<VERSION>-<OS>-<ARCH>.tar.gz`:  Statically linked. Expected to be used on non-glibc Linux distributions. Not position-independent.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In addition to containerd, typically you will have to install [runc](https://github.com/opencontainers/runc/releases)
 | 
				
			||||||
 | 
					and [CNI plugins](https://github.com/containernetworking/plugins/releases) from their official sites too.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See also the [Getting Started](https://github.com/containerd/containerd/blob/main/docs/getting-started.md) documentation.
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
@@ -70,6 +70,11 @@ if [ ! -z "$CGROUP_DRIVER" ] && [ "$CGROUP_DRIVER" = "systemd" ];then
 | 
				
			|||||||
EOF
 | 
					EOF
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GINKGO_SKIP_TEST=()
 | 
				
			||||||
 | 
					if [ ! -z "$SKIP_TEST" ]; then
 | 
				
			||||||
 | 
					  GINKGO_SKIP_TEST+=("--ginkgo.skip" "$SKIP_TEST")
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ls /etc/cni/net.d
 | 
					ls /etc/cni/net.d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/usr/local/bin/containerd \
 | 
					/usr/local/bin/containerd \
 | 
				
			||||||
@@ -85,4 +90,4 @@ do
 | 
				
			|||||||
    crictl --runtime-endpoint ${BDIR}/c.sock info && break || sleep 1
 | 
					    crictl --runtime-endpoint ${BDIR}/c.sock info && break || sleep 1
 | 
				
			||||||
done
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
critest --report-dir "$report_dir" --runtime-endpoint=unix:///${BDIR}/c.sock --parallel=8 "${EXTRA_CRITEST_OPTIONS:-""}"
 | 
					critest --report-dir "$report_dir" --runtime-endpoint=unix:///${BDIR}/c.sock --parallel=8 "${GINKGO_SKIP_TEST[@]}" "${EXTRA_CRITEST_OPTIONS:-""}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
# lived test environment.
 | 
					# lived test environment.
 | 
				
			||||||
Set-MpPreference -DisableRealtimeMonitoring:$true
 | 
					Set-MpPreference -DisableRealtimeMonitoring:$true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$PACKAGES= @{ mingw = "10.2.0"; git = ""; golang = "1.23.7"; make = ""; nssm = "" }
 | 
					$PACKAGES= @{ mingw = "10.2.0"; git = ""; golang = "1.23.8"; make = ""; nssm = "" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Write-Host "Downloading chocolatey package"
 | 
					Write-Host "Downloading chocolatey package"
 | 
				
			||||||
curl.exe -L "https://packages.chocolatey.org/chocolatey.0.10.15.nupkg" -o 'c:\choco.zip'
 | 
					curl.exe -L "https://packages.chocolatey.org/chocolatey.0.10.15.nupkg" -o 'c:\choco.zip'
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1 +1 @@
 | 
				
			|||||||
v1.2.5
 | 
					v1.2.6
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								vendor/github.com/go-jose/go-jose/v4/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/go-jose/go-jose/v4/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -7,9 +7,3 @@ When submitting code, please make every effort to follow existing conventions
 | 
				
			|||||||
and style in order to keep the code as readable as possible. Please also make
 | 
					and style in order to keep the code as readable as possible. Please also make
 | 
				
			||||||
sure all tests pass by running `go test`, and format your code with `go fmt`.
 | 
					sure all tests pass by running `go test`, and format your code with `go fmt`.
 | 
				
			||||||
We also recommend using `golint` and `errcheck`.
 | 
					We also recommend using `golint` and `errcheck`.
 | 
				
			||||||
 | 
					 | 
				
			||||||
Before your code can be accepted into the project you must also sign the
 | 
					 | 
				
			||||||
Individual Contributor License Agreement.  We use [cla-assistant.io][1] and you
 | 
					 | 
				
			||||||
will be prompted to sign once a pull request is opened.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[1]: https://cla-assistant.io/
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								vendor/github.com/go-jose/go-jose/v4/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/go-jose/go-jose/v4/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -9,14 +9,6 @@ Package jose aims to provide an implementation of the Javascript Object Signing
 | 
				
			|||||||
and Encryption set of standards. This includes support for JSON Web Encryption,
 | 
					and Encryption set of standards. This includes support for JSON Web Encryption,
 | 
				
			||||||
JSON Web Signature, and JSON Web Token standards.
 | 
					JSON Web Signature, and JSON Web Token standards.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Disclaimer**: This library contains encryption software that is subject to
 | 
					 | 
				
			||||||
the U.S. Export Administration Regulations. You may not export, re-export,
 | 
					 | 
				
			||||||
transfer or download this code or any part of it in violation of any United
 | 
					 | 
				
			||||||
States law, directive or regulation. In particular this software may not be
 | 
					 | 
				
			||||||
exported or re-exported in any form or on any media to Iran, North Sudan,
 | 
					 | 
				
			||||||
Syria, Cuba, or North Korea, or to denied persons or entities mentioned on any
 | 
					 | 
				
			||||||
US maintained blocked list.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Overview
 | 
					## Overview
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The implementation follows the
 | 
					The implementation follows the
 | 
				
			||||||
@@ -109,6 +101,6 @@ allows attaching a key id.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Examples can be found in the Godoc
 | 
					Examples can be found in the Godoc
 | 
				
			||||||
reference for this package. The
 | 
					reference for this package. The
 | 
				
			||||||
[`jose-util`](https://github.com/go-jose/go-jose/tree/v4/jose-util)
 | 
					[`jose-util`](https://github.com/go-jose/go-jose/tree/main/jose-util)
 | 
				
			||||||
subdirectory also contains a small command-line utility which might be useful
 | 
					subdirectory also contains a small command-line utility which might be useful
 | 
				
			||||||
as an example as well.
 | 
					as an example as well.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										5
									
								
								vendor/github.com/go-jose/go-jose/v4/jwe.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/go-jose/go-jose/v4/jwe.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -288,10 +288,11 @@ func ParseEncryptedCompact(
 | 
				
			|||||||
	keyAlgorithms []KeyAlgorithm,
 | 
						keyAlgorithms []KeyAlgorithm,
 | 
				
			||||||
	contentEncryption []ContentEncryption,
 | 
						contentEncryption []ContentEncryption,
 | 
				
			||||||
) (*JSONWebEncryption, error) {
 | 
					) (*JSONWebEncryption, error) {
 | 
				
			||||||
	parts := strings.Split(input, ".")
 | 
						// Five parts is four separators
 | 
				
			||||||
	if len(parts) != 5 {
 | 
						if strings.Count(input, ".") != 4 {
 | 
				
			||||||
		return nil, fmt.Errorf("go-jose/go-jose: compact JWE format must have five parts")
 | 
							return nil, fmt.Errorf("go-jose/go-jose: compact JWE format must have five parts")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						parts := strings.SplitN(input, ".", 5)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rawProtected, err := base64.RawURLEncoding.DecodeString(parts[0])
 | 
						rawProtected, err := base64.RawURLEncoding.DecodeString(parts[0])
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/github.com/go-jose/go-jose/v4/jwk.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/go-jose/go-jose/v4/jwk.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -239,10 +239,10 @@ func (k *JSONWebKey) UnmarshalJSON(data []byte) (err error) {
 | 
				
			|||||||
				keyPub = key
 | 
									keyPub = key
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			err = fmt.Errorf("go-jose/go-jose: unknown curve %s'", raw.Crv)
 | 
								return fmt.Errorf("go-jose/go-jose: unknown curve %s'", raw.Crv)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		err = fmt.Errorf("go-jose/go-jose: unknown json web key type '%s'", raw.Kty)
 | 
							return fmt.Errorf("go-jose/go-jose: unknown json web key type '%s'", raw.Kty)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										5
									
								
								vendor/github.com/go-jose/go-jose/v4/jws.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/go-jose/go-jose/v4/jws.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -327,10 +327,11 @@ func parseSignedCompact(
 | 
				
			|||||||
	payload []byte,
 | 
						payload []byte,
 | 
				
			||||||
	signatureAlgorithms []SignatureAlgorithm,
 | 
						signatureAlgorithms []SignatureAlgorithm,
 | 
				
			||||||
) (*JSONWebSignature, error) {
 | 
					) (*JSONWebSignature, error) {
 | 
				
			||||||
	parts := strings.Split(input, ".")
 | 
						// Three parts is two separators
 | 
				
			||||||
	if len(parts) != 3 {
 | 
						if strings.Count(input, ".") != 2 {
 | 
				
			||||||
		return nil, fmt.Errorf("go-jose/go-jose: compact JWS format must have three parts")
 | 
							return nil, fmt.Errorf("go-jose/go-jose: compact JWS format must have three parts")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						parts := strings.SplitN(input, ".", 3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if parts[1] != "" && payload != nil {
 | 
						if parts[1] != "" && payload != nil {
 | 
				
			||||||
		return nil, fmt.Errorf("go-jose/go-jose: payload is not detached")
 | 
							return nil, fmt.Errorf("go-jose/go-jose: payload is not detached")
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/net/http2/config.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/net/http2/config.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -60,7 +60,7 @@ func configFromServer(h1 *http.Server, h2 *Server) http2Config {
 | 
				
			|||||||
	return conf
 | 
						return conf
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// configFromServer merges configuration settings from h2 and h2.t1.HTTP2
 | 
					// configFromTransport merges configuration settings from h2 and h2.t1.HTTP2
 | 
				
			||||||
// (the net/http Transport).
 | 
					// (the net/http Transport).
 | 
				
			||||||
func configFromTransport(h2 *Transport) http2Config {
 | 
					func configFromTransport(h2 *Transport) http2Config {
 | 
				
			||||||
	conf := http2Config{
 | 
						conf := http2Config{
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/net/http2/config_go124.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/net/http2/config_go124.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -13,7 +13,7 @@ func fillNetHTTPServerConfig(conf *http2Config, srv *http.Server) {
 | 
				
			|||||||
	fillNetHTTPConfig(conf, srv.HTTP2)
 | 
						fillNetHTTPConfig(conf, srv.HTTP2)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// fillNetHTTPServerConfig sets fields in conf from tr.HTTP2.
 | 
					// fillNetHTTPTransportConfig sets fields in conf from tr.HTTP2.
 | 
				
			||||||
func fillNetHTTPTransportConfig(conf *http2Config, tr *http.Transport) {
 | 
					func fillNetHTTPTransportConfig(conf *http2Config, tr *http.Transport) {
 | 
				
			||||||
	fillNetHTTPConfig(conf, tr.HTTP2)
 | 
						fillNetHTTPConfig(conf, tr.HTTP2)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										31
									
								
								vendor/golang.org/x/net/http2/http2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								vendor/golang.org/x/net/http2/http2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -38,7 +38,15 @@ var (
 | 
				
			|||||||
	logFrameWrites bool
 | 
						logFrameWrites bool
 | 
				
			||||||
	logFrameReads  bool
 | 
						logFrameReads  bool
 | 
				
			||||||
	inTests        bool
 | 
						inTests        bool
 | 
				
			||||||
	disableExtendedConnectProtocol bool
 | 
					
 | 
				
			||||||
 | 
						// Enabling extended CONNECT by causes browsers to attempt to use
 | 
				
			||||||
 | 
						// WebSockets-over-HTTP/2. This results in problems when the server's websocket
 | 
				
			||||||
 | 
						// package doesn't support extended CONNECT.
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// Disable extended CONNECT by default for now.
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// Issue #71128.
 | 
				
			||||||
 | 
						disableExtendedConnectProtocol = true
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
@@ -51,8 +59,8 @@ func init() {
 | 
				
			|||||||
		logFrameWrites = true
 | 
							logFrameWrites = true
 | 
				
			||||||
		logFrameReads = true
 | 
							logFrameReads = true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if strings.Contains(e, "http2xconnect=0") {
 | 
						if strings.Contains(e, "http2xconnect=1") {
 | 
				
			||||||
		disableExtendedConnectProtocol = true
 | 
							disableExtendedConnectProtocol = false
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -407,23 +415,6 @@ func (s *sorter) SortStrings(ss []string) {
 | 
				
			|||||||
	s.v = save
 | 
						s.v = save
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// validPseudoPath reports whether v is a valid :path pseudo-header
 | 
					 | 
				
			||||||
// value. It must be either:
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//   - a non-empty string starting with '/'
 | 
					 | 
				
			||||||
//   - the string '*', for OPTIONS requests.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// For now this is only used a quick check for deciding when to clean
 | 
					 | 
				
			||||||
// up Opaque URLs before sending requests from the Transport.
 | 
					 | 
				
			||||||
// See golang.org/issue/16847
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// We used to enforce that the path also didn't start with "//", but
 | 
					 | 
				
			||||||
// Google's GFE accepts such paths and Chrome sends them, so ignore
 | 
					 | 
				
			||||||
// that part of the spec. See golang.org/issue/19103.
 | 
					 | 
				
			||||||
func validPseudoPath(v string) bool {
 | 
					 | 
				
			||||||
	return (len(v) > 0 && v[0] == '/') || v == "*"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// incomparable is a zero-width, non-comparable type. Adding it to a struct
 | 
					// incomparable is a zero-width, non-comparable type. Adding it to a struct
 | 
				
			||||||
// makes that struct also non-comparable, and generally doesn't add
 | 
					// makes that struct also non-comparable, and generally doesn't add
 | 
				
			||||||
// any size (as long as it's first).
 | 
					// any size (as long as it's first).
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										125
									
								
								vendor/golang.org/x/net/http2/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										125
									
								
								vendor/golang.org/x/net/http2/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -50,6 +50,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"golang.org/x/net/http/httpguts"
 | 
						"golang.org/x/net/http/httpguts"
 | 
				
			||||||
	"golang.org/x/net/http2/hpack"
 | 
						"golang.org/x/net/http2/hpack"
 | 
				
			||||||
 | 
						"golang.org/x/net/internal/httpcommon"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -812,8 +813,7 @@ const maxCachedCanonicalHeadersKeysSize = 2048
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (sc *serverConn) canonicalHeader(v string) string {
 | 
					func (sc *serverConn) canonicalHeader(v string) string {
 | 
				
			||||||
	sc.serveG.check()
 | 
						sc.serveG.check()
 | 
				
			||||||
	buildCommonHeaderMapsOnce()
 | 
						cv, ok := httpcommon.CachedCanonicalHeader(v)
 | 
				
			||||||
	cv, ok := commonCanonHeader[v]
 | 
					 | 
				
			||||||
	if ok {
 | 
						if ok {
 | 
				
			||||||
		return cv
 | 
							return cv
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -2233,25 +2233,25 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream
 | 
				
			|||||||
func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*responseWriter, *http.Request, error) {
 | 
					func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*responseWriter, *http.Request, error) {
 | 
				
			||||||
	sc.serveG.check()
 | 
						sc.serveG.check()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rp := requestParam{
 | 
						rp := httpcommon.ServerRequestParam{
 | 
				
			||||||
		method:    f.PseudoValue("method"),
 | 
							Method:    f.PseudoValue("method"),
 | 
				
			||||||
		scheme:    f.PseudoValue("scheme"),
 | 
							Scheme:    f.PseudoValue("scheme"),
 | 
				
			||||||
		authority: f.PseudoValue("authority"),
 | 
							Authority: f.PseudoValue("authority"),
 | 
				
			||||||
		path:      f.PseudoValue("path"),
 | 
							Path:      f.PseudoValue("path"),
 | 
				
			||||||
		protocol:  f.PseudoValue("protocol"),
 | 
							Protocol:  f.PseudoValue("protocol"),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// extended connect is disabled, so we should not see :protocol
 | 
						// extended connect is disabled, so we should not see :protocol
 | 
				
			||||||
	if disableExtendedConnectProtocol && rp.protocol != "" {
 | 
						if disableExtendedConnectProtocol && rp.Protocol != "" {
 | 
				
			||||||
		return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol))
 | 
							return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	isConnect := rp.method == "CONNECT"
 | 
						isConnect := rp.Method == "CONNECT"
 | 
				
			||||||
	if isConnect {
 | 
						if isConnect {
 | 
				
			||||||
		if rp.protocol == "" && (rp.path != "" || rp.scheme != "" || rp.authority == "") {
 | 
							if rp.Protocol == "" && (rp.Path != "" || rp.Scheme != "" || rp.Authority == "") {
 | 
				
			||||||
			return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol))
 | 
								return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else if rp.method == "" || rp.path == "" || (rp.scheme != "https" && rp.scheme != "http") {
 | 
						} else if rp.Method == "" || rp.Path == "" || (rp.Scheme != "https" && rp.Scheme != "http") {
 | 
				
			||||||
		// See 8.1.2.6 Malformed Requests and Responses:
 | 
							// See 8.1.2.6 Malformed Requests and Responses:
 | 
				
			||||||
		//
 | 
							//
 | 
				
			||||||
		// Malformed requests or responses that are detected
 | 
							// Malformed requests or responses that are detected
 | 
				
			||||||
@@ -2265,15 +2265,16 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res
 | 
				
			|||||||
		return nil, nil, sc.countError("bad_path_method", streamError(f.StreamID, ErrCodeProtocol))
 | 
							return nil, nil, sc.countError("bad_path_method", streamError(f.StreamID, ErrCodeProtocol))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rp.header = make(http.Header)
 | 
						header := make(http.Header)
 | 
				
			||||||
 | 
						rp.Header = header
 | 
				
			||||||
	for _, hf := range f.RegularFields() {
 | 
						for _, hf := range f.RegularFields() {
 | 
				
			||||||
		rp.header.Add(sc.canonicalHeader(hf.Name), hf.Value)
 | 
							header.Add(sc.canonicalHeader(hf.Name), hf.Value)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if rp.authority == "" {
 | 
						if rp.Authority == "" {
 | 
				
			||||||
		rp.authority = rp.header.Get("Host")
 | 
							rp.Authority = header.Get("Host")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if rp.protocol != "" {
 | 
						if rp.Protocol != "" {
 | 
				
			||||||
		rp.header.Set(":protocol", rp.protocol)
 | 
							header.Set(":protocol", rp.Protocol)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rw, req, err := sc.newWriterAndRequestNoBody(st, rp)
 | 
						rw, req, err := sc.newWriterAndRequestNoBody(st, rp)
 | 
				
			||||||
@@ -2282,7 +2283,7 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	bodyOpen := !f.StreamEnded()
 | 
						bodyOpen := !f.StreamEnded()
 | 
				
			||||||
	if bodyOpen {
 | 
						if bodyOpen {
 | 
				
			||||||
		if vv, ok := rp.header["Content-Length"]; ok {
 | 
							if vv, ok := rp.Header["Content-Length"]; ok {
 | 
				
			||||||
			if cl, err := strconv.ParseUint(vv[0], 10, 63); err == nil {
 | 
								if cl, err := strconv.ParseUint(vv[0], 10, 63); err == nil {
 | 
				
			||||||
				req.ContentLength = int64(cl)
 | 
									req.ContentLength = int64(cl)
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
@@ -2298,84 +2299,38 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res
 | 
				
			|||||||
	return rw, req, nil
 | 
						return rw, req, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type requestParam struct {
 | 
					func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp httpcommon.ServerRequestParam) (*responseWriter, *http.Request, error) {
 | 
				
			||||||
	method                  string
 | 
					 | 
				
			||||||
	scheme, authority, path string
 | 
					 | 
				
			||||||
	protocol                string
 | 
					 | 
				
			||||||
	header                  http.Header
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*responseWriter, *http.Request, error) {
 | 
					 | 
				
			||||||
	sc.serveG.check()
 | 
						sc.serveG.check()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var tlsState *tls.ConnectionState // nil if not scheme https
 | 
						var tlsState *tls.ConnectionState // nil if not scheme https
 | 
				
			||||||
	if rp.scheme == "https" {
 | 
						if rp.Scheme == "https" {
 | 
				
			||||||
		tlsState = sc.tlsState
 | 
							tlsState = sc.tlsState
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	needsContinue := httpguts.HeaderValuesContainsToken(rp.header["Expect"], "100-continue")
 | 
						res := httpcommon.NewServerRequest(rp)
 | 
				
			||||||
	if needsContinue {
 | 
						if res.InvalidReason != "" {
 | 
				
			||||||
		rp.header.Del("Expect")
 | 
							return nil, nil, sc.countError(res.InvalidReason, streamError(st.id, ErrCodeProtocol))
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// Merge Cookie headers into one "; "-delimited value.
 | 
					 | 
				
			||||||
	if cookies := rp.header["Cookie"]; len(cookies) > 1 {
 | 
					 | 
				
			||||||
		rp.header.Set("Cookie", strings.Join(cookies, "; "))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Setup Trailers
 | 
					 | 
				
			||||||
	var trailer http.Header
 | 
					 | 
				
			||||||
	for _, v := range rp.header["Trailer"] {
 | 
					 | 
				
			||||||
		for _, key := range strings.Split(v, ",") {
 | 
					 | 
				
			||||||
			key = http.CanonicalHeaderKey(textproto.TrimString(key))
 | 
					 | 
				
			||||||
			switch key {
 | 
					 | 
				
			||||||
			case "Transfer-Encoding", "Trailer", "Content-Length":
 | 
					 | 
				
			||||||
				// Bogus. (copy of http1 rules)
 | 
					 | 
				
			||||||
				// Ignore.
 | 
					 | 
				
			||||||
			default:
 | 
					 | 
				
			||||||
				if trailer == nil {
 | 
					 | 
				
			||||||
					trailer = make(http.Header)
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				trailer[key] = nil
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	delete(rp.header, "Trailer")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var url_ *url.URL
 | 
					 | 
				
			||||||
	var requestURI string
 | 
					 | 
				
			||||||
	if rp.method == "CONNECT" && rp.protocol == "" {
 | 
					 | 
				
			||||||
		url_ = &url.URL{Host: rp.authority}
 | 
					 | 
				
			||||||
		requestURI = rp.authority // mimic HTTP/1 server behavior
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		var err error
 | 
					 | 
				
			||||||
		url_, err = url.ParseRequestURI(rp.path)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return nil, nil, sc.countError("bad_path", streamError(st.id, ErrCodeProtocol))
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		requestURI = rp.path
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	body := &requestBody{
 | 
						body := &requestBody{
 | 
				
			||||||
		conn:          sc,
 | 
							conn:          sc,
 | 
				
			||||||
		stream:        st,
 | 
							stream:        st,
 | 
				
			||||||
		needsContinue: needsContinue,
 | 
							needsContinue: res.NeedsContinue,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	req := &http.Request{
 | 
						req := (&http.Request{
 | 
				
			||||||
		Method:     rp.method,
 | 
							Method:     rp.Method,
 | 
				
			||||||
		URL:        url_,
 | 
							URL:        res.URL,
 | 
				
			||||||
		RemoteAddr: sc.remoteAddrStr,
 | 
							RemoteAddr: sc.remoteAddrStr,
 | 
				
			||||||
		Header:     rp.header,
 | 
							Header:     rp.Header,
 | 
				
			||||||
		RequestURI: requestURI,
 | 
							RequestURI: res.RequestURI,
 | 
				
			||||||
		Proto:      "HTTP/2.0",
 | 
							Proto:      "HTTP/2.0",
 | 
				
			||||||
		ProtoMajor: 2,
 | 
							ProtoMajor: 2,
 | 
				
			||||||
		ProtoMinor: 0,
 | 
							ProtoMinor: 0,
 | 
				
			||||||
		TLS:        tlsState,
 | 
							TLS:        tlsState,
 | 
				
			||||||
		Host:       rp.authority,
 | 
							Host:       rp.Authority,
 | 
				
			||||||
		Body:       body,
 | 
							Body:       body,
 | 
				
			||||||
		Trailer:    trailer,
 | 
							Trailer:    res.Trailer,
 | 
				
			||||||
	}
 | 
						}).WithContext(st.ctx)
 | 
				
			||||||
	req = req.WithContext(st.ctx)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	rw := sc.newResponseWriter(st, req)
 | 
						rw := sc.newResponseWriter(st, req)
 | 
				
			||||||
	return rw, req, nil
 | 
						return rw, req, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -3270,12 +3225,12 @@ func (sc *serverConn) startPush(msg *startPushRequest) {
 | 
				
			|||||||
		// we start in "half closed (remote)" for simplicity.
 | 
							// we start in "half closed (remote)" for simplicity.
 | 
				
			||||||
		// See further comments at the definition of stateHalfClosedRemote.
 | 
							// See further comments at the definition of stateHalfClosedRemote.
 | 
				
			||||||
		promised := sc.newStream(promisedID, msg.parent.id, stateHalfClosedRemote)
 | 
							promised := sc.newStream(promisedID, msg.parent.id, stateHalfClosedRemote)
 | 
				
			||||||
		rw, req, err := sc.newWriterAndRequestNoBody(promised, requestParam{
 | 
							rw, req, err := sc.newWriterAndRequestNoBody(promised, httpcommon.ServerRequestParam{
 | 
				
			||||||
			method:    msg.method,
 | 
								Method:    msg.method,
 | 
				
			||||||
			scheme:    msg.url.Scheme,
 | 
								Scheme:    msg.url.Scheme,
 | 
				
			||||||
			authority: msg.url.Host,
 | 
								Authority: msg.url.Host,
 | 
				
			||||||
			path:      msg.url.RequestURI(),
 | 
								Path:      msg.url.RequestURI(),
 | 
				
			||||||
			header:    cloneHeader(msg.header), // clone since handler runs concurrently with writing the PUSH_PROMISE
 | 
								Header:    cloneHeader(msg.header), // clone since handler runs concurrently with writing the PUSH_PROMISE
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			// Should not happen, since we've already validated msg.url.
 | 
								// Should not happen, since we've already validated msg.url.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										347
									
								
								vendor/golang.org/x/net/http2/transport.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										347
									
								
								vendor/golang.org/x/net/http2/transport.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -25,7 +25,6 @@ import (
 | 
				
			|||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"net/http/httptrace"
 | 
						"net/http/httptrace"
 | 
				
			||||||
	"net/textproto"
 | 
						"net/textproto"
 | 
				
			||||||
	"sort"
 | 
					 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
@@ -35,6 +34,7 @@ import (
 | 
				
			|||||||
	"golang.org/x/net/http/httpguts"
 | 
						"golang.org/x/net/http/httpguts"
 | 
				
			||||||
	"golang.org/x/net/http2/hpack"
 | 
						"golang.org/x/net/http2/hpack"
 | 
				
			||||||
	"golang.org/x/net/idna"
 | 
						"golang.org/x/net/idna"
 | 
				
			||||||
 | 
						"golang.org/x/net/internal/httpcommon"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -375,6 +375,7 @@ type ClientConn struct {
 | 
				
			|||||||
	doNotReuse       bool       // whether conn is marked to not be reused for any future requests
 | 
						doNotReuse       bool       // whether conn is marked to not be reused for any future requests
 | 
				
			||||||
	closing          bool
 | 
						closing          bool
 | 
				
			||||||
	closed           bool
 | 
						closed           bool
 | 
				
			||||||
 | 
						closedOnIdle     bool                     // true if conn was closed for idleness
 | 
				
			||||||
	seenSettings     bool                     // true if we've seen a settings frame, false otherwise
 | 
						seenSettings     bool                     // true if we've seen a settings frame, false otherwise
 | 
				
			||||||
	seenSettingsChan chan struct{}            // closed when seenSettings is true or frame reading fails
 | 
						seenSettingsChan chan struct{}            // closed when seenSettings is true or frame reading fails
 | 
				
			||||||
	wantSettingsAck  bool                     // we sent a SETTINGS frame and haven't heard back
 | 
						wantSettingsAck  bool                     // we sent a SETTINGS frame and haven't heard back
 | 
				
			||||||
@@ -1089,10 +1090,12 @@ func (cc *ClientConn) idleStateLocked() (st clientConnIdleState) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// If this connection has never been used for a request and is closed,
 | 
						// If this connection has never been used for a request and is closed,
 | 
				
			||||||
	// then let it take a request (which will fail).
 | 
						// then let it take a request (which will fail).
 | 
				
			||||||
 | 
						// If the conn was closed for idleness, we're racing the idle timer;
 | 
				
			||||||
 | 
						// don't try to use the conn. (Issue #70515.)
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
	// This avoids a situation where an error early in a connection's lifetime
 | 
						// This avoids a situation where an error early in a connection's lifetime
 | 
				
			||||||
	// goes unreported.
 | 
						// goes unreported.
 | 
				
			||||||
	if cc.nextStreamID == 1 && cc.streamsReserved == 0 && cc.closed {
 | 
						if cc.nextStreamID == 1 && cc.streamsReserved == 0 && cc.closed && !cc.closedOnIdle {
 | 
				
			||||||
		st.canTakeNewRequest = true
 | 
							st.canTakeNewRequest = true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1155,6 +1158,7 @@ func (cc *ClientConn) closeIfIdle() {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	cc.closed = true
 | 
						cc.closed = true
 | 
				
			||||||
 | 
						cc.closedOnIdle = true
 | 
				
			||||||
	nextID := cc.nextStreamID
 | 
						nextID := cc.nextStreamID
 | 
				
			||||||
	// TODO: do clients send GOAWAY too? maybe? Just Close:
 | 
						// TODO: do clients send GOAWAY too? maybe? Just Close:
 | 
				
			||||||
	cc.mu.Unlock()
 | 
						cc.mu.Unlock()
 | 
				
			||||||
@@ -1271,23 +1275,6 @@ func (cc *ClientConn) closeForLostPing() {
 | 
				
			|||||||
// exported. At least they'll be DeepEqual for h1-vs-h2 comparisons tests.
 | 
					// exported. At least they'll be DeepEqual for h1-vs-h2 comparisons tests.
 | 
				
			||||||
var errRequestCanceled = errors.New("net/http: request canceled")
 | 
					var errRequestCanceled = errors.New("net/http: request canceled")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func commaSeparatedTrailers(req *http.Request) (string, error) {
 | 
					 | 
				
			||||||
	keys := make([]string, 0, len(req.Trailer))
 | 
					 | 
				
			||||||
	for k := range req.Trailer {
 | 
					 | 
				
			||||||
		k = canonicalHeader(k)
 | 
					 | 
				
			||||||
		switch k {
 | 
					 | 
				
			||||||
		case "Transfer-Encoding", "Trailer", "Content-Length":
 | 
					 | 
				
			||||||
			return "", fmt.Errorf("invalid Trailer key %q", k)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		keys = append(keys, k)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if len(keys) > 0 {
 | 
					 | 
				
			||||||
		sort.Strings(keys)
 | 
					 | 
				
			||||||
		return strings.Join(keys, ","), nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return "", nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (cc *ClientConn) responseHeaderTimeout() time.Duration {
 | 
					func (cc *ClientConn) responseHeaderTimeout() time.Duration {
 | 
				
			||||||
	if cc.t.t1 != nil {
 | 
						if cc.t.t1 != nil {
 | 
				
			||||||
		return cc.t.t1.ResponseHeaderTimeout
 | 
							return cc.t.t1.ResponseHeaderTimeout
 | 
				
			||||||
@@ -1299,22 +1286,6 @@ func (cc *ClientConn) responseHeaderTimeout() time.Duration {
 | 
				
			|||||||
	return 0
 | 
						return 0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// checkConnHeaders checks whether req has any invalid connection-level headers.
 | 
					 | 
				
			||||||
// per RFC 7540 section 8.1.2.2: Connection-Specific Header Fields.
 | 
					 | 
				
			||||||
// Certain headers are special-cased as okay but not transmitted later.
 | 
					 | 
				
			||||||
func checkConnHeaders(req *http.Request) error {
 | 
					 | 
				
			||||||
	if v := req.Header.Get("Upgrade"); v != "" {
 | 
					 | 
				
			||||||
		return fmt.Errorf("http2: invalid Upgrade request header: %q", req.Header["Upgrade"])
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if vv := req.Header["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") {
 | 
					 | 
				
			||||||
		return fmt.Errorf("http2: invalid Transfer-Encoding request header: %q", vv)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if vv := req.Header["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && !asciiEqualFold(vv[0], "close") && !asciiEqualFold(vv[0], "keep-alive")) {
 | 
					 | 
				
			||||||
		return fmt.Errorf("http2: invalid Connection request header: %q", vv)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// actualContentLength returns a sanitized version of
 | 
					// actualContentLength returns a sanitized version of
 | 
				
			||||||
// req.ContentLength, where 0 actually means zero (not unknown) and -1
 | 
					// req.ContentLength, where 0 actually means zero (not unknown) and -1
 | 
				
			||||||
// means unknown.
 | 
					// means unknown.
 | 
				
			||||||
@@ -1360,25 +1331,7 @@ func (cc *ClientConn) roundTrip(req *http.Request, streamf func(*clientStream))
 | 
				
			|||||||
		donec:                make(chan struct{}),
 | 
							donec:                make(chan struct{}),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere?
 | 
						cs.requestedGzip = httpcommon.IsRequestGzip(req.Method, req.Header, cc.t.disableCompression())
 | 
				
			||||||
	if !cc.t.disableCompression() &&
 | 
					 | 
				
			||||||
		req.Header.Get("Accept-Encoding") == "" &&
 | 
					 | 
				
			||||||
		req.Header.Get("Range") == "" &&
 | 
					 | 
				
			||||||
		!cs.isHead {
 | 
					 | 
				
			||||||
		// Request gzip only, not deflate. Deflate is ambiguous and
 | 
					 | 
				
			||||||
		// not as universally supported anyway.
 | 
					 | 
				
			||||||
		// See: https://zlib.net/zlib_faq.html#faq39
 | 
					 | 
				
			||||||
		//
 | 
					 | 
				
			||||||
		// Note that we don't request this for HEAD requests,
 | 
					 | 
				
			||||||
		// due to a bug in nginx:
 | 
					 | 
				
			||||||
		//   http://trac.nginx.org/nginx/ticket/358
 | 
					 | 
				
			||||||
		//   https://golang.org/issue/5522
 | 
					 | 
				
			||||||
		//
 | 
					 | 
				
			||||||
		// We don't request gzip if the request is for a range, since
 | 
					 | 
				
			||||||
		// auto-decoding a portion of a gzipped document will just fail
 | 
					 | 
				
			||||||
		// anyway. See https://golang.org/issue/8923
 | 
					 | 
				
			||||||
		cs.requestedGzip = true
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	go cs.doRequest(req, streamf)
 | 
						go cs.doRequest(req, streamf)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1492,10 +1445,6 @@ func (cs *clientStream) writeRequest(req *http.Request, streamf func(*clientStre
 | 
				
			|||||||
	cc := cs.cc
 | 
						cc := cs.cc
 | 
				
			||||||
	ctx := cs.ctx
 | 
						ctx := cs.ctx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := checkConnHeaders(req); err != nil {
 | 
					 | 
				
			||||||
		return err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// wait for setting frames to be received, a server can change this value later,
 | 
						// wait for setting frames to be received, a server can change this value later,
 | 
				
			||||||
	// but we just wait for the first settings frame
 | 
						// but we just wait for the first settings frame
 | 
				
			||||||
	var isExtendedConnect bool
 | 
						var isExtendedConnect bool
 | 
				
			||||||
@@ -1659,26 +1608,39 @@ func (cs *clientStream) encodeAndWriteHeaders(req *http.Request) error {
 | 
				
			|||||||
	// we send: HEADERS{1}, CONTINUATION{0,} + DATA{0,} (DATA is
 | 
						// we send: HEADERS{1}, CONTINUATION{0,} + DATA{0,} (DATA is
 | 
				
			||||||
	// sent by writeRequestBody below, along with any Trailers,
 | 
						// sent by writeRequestBody below, along with any Trailers,
 | 
				
			||||||
	// again in form HEADERS{1}, CONTINUATION{0,})
 | 
						// again in form HEADERS{1}, CONTINUATION{0,})
 | 
				
			||||||
	trailers, err := commaSeparatedTrailers(req)
 | 
						cc.hbuf.Reset()
 | 
				
			||||||
 | 
						res, err := encodeRequestHeaders(req, cs.requestedGzip, cc.peerMaxHeaderListSize, func(name, value string) {
 | 
				
			||||||
 | 
							cc.writeHeader(name, value)
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return fmt.Errorf("http2: %w", err)
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	hasTrailers := trailers != ""
 | 
					 | 
				
			||||||
	contentLen := actualContentLength(req)
 | 
					 | 
				
			||||||
	hasBody := contentLen != 0
 | 
					 | 
				
			||||||
	hdrs, err := cc.encodeHeaders(req, cs.requestedGzip, trailers, contentLen)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return err
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						hdrs := cc.hbuf.Bytes()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Write the request.
 | 
						// Write the request.
 | 
				
			||||||
	endStream := !hasBody && !hasTrailers
 | 
						endStream := !res.HasBody && !res.HasTrailers
 | 
				
			||||||
	cs.sentHeaders = true
 | 
						cs.sentHeaders = true
 | 
				
			||||||
	err = cc.writeHeaders(cs.ID, endStream, int(cc.maxFrameSize), hdrs)
 | 
						err = cc.writeHeaders(cs.ID, endStream, int(cc.maxFrameSize), hdrs)
 | 
				
			||||||
	traceWroteHeaders(cs.trace)
 | 
						traceWroteHeaders(cs.trace)
 | 
				
			||||||
	return err
 | 
						return err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func encodeRequestHeaders(req *http.Request, addGzipHeader bool, peerMaxHeaderListSize uint64, headerf func(name, value string)) (httpcommon.EncodeHeadersResult, error) {
 | 
				
			||||||
 | 
						return httpcommon.EncodeHeaders(req.Context(), httpcommon.EncodeHeadersParam{
 | 
				
			||||||
 | 
							Request: httpcommon.Request{
 | 
				
			||||||
 | 
								Header:              req.Header,
 | 
				
			||||||
 | 
								Trailer:             req.Trailer,
 | 
				
			||||||
 | 
								URL:                 req.URL,
 | 
				
			||||||
 | 
								Host:                req.Host,
 | 
				
			||||||
 | 
								Method:              req.Method,
 | 
				
			||||||
 | 
								ActualContentLength: actualContentLength(req),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							AddGzipHeader:         addGzipHeader,
 | 
				
			||||||
 | 
							PeerMaxHeaderListSize: peerMaxHeaderListSize,
 | 
				
			||||||
 | 
							DefaultUserAgent:      defaultUserAgent,
 | 
				
			||||||
 | 
						}, headerf)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// cleanupWriteRequest performs post-request tasks.
 | 
					// cleanupWriteRequest performs post-request tasks.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// If err (the result of writeRequest) is non-nil and the stream is not closed,
 | 
					// If err (the result of writeRequest) is non-nil and the stream is not closed,
 | 
				
			||||||
@@ -2066,218 +2028,6 @@ func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func validateHeaders(hdrs http.Header) string {
 | 
					 | 
				
			||||||
	for k, vv := range hdrs {
 | 
					 | 
				
			||||||
		if !httpguts.ValidHeaderFieldName(k) && k != ":protocol" {
 | 
					 | 
				
			||||||
			return fmt.Sprintf("name %q", k)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		for _, v := range vv {
 | 
					 | 
				
			||||||
			if !httpguts.ValidHeaderFieldValue(v) {
 | 
					 | 
				
			||||||
				// Don't include the value in the error,
 | 
					 | 
				
			||||||
				// because it may be sensitive.
 | 
					 | 
				
			||||||
				return fmt.Sprintf("value for header %q", k)
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return ""
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var errNilRequestURL = errors.New("http2: Request.URI is nil")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func isNormalConnect(req *http.Request) bool {
 | 
					 | 
				
			||||||
	return req.Method == "CONNECT" && req.Header.Get(":protocol") == ""
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// requires cc.wmu be held.
 | 
					 | 
				
			||||||
func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trailers string, contentLength int64) ([]byte, error) {
 | 
					 | 
				
			||||||
	cc.hbuf.Reset()
 | 
					 | 
				
			||||||
	if req.URL == nil {
 | 
					 | 
				
			||||||
		return nil, errNilRequestURL
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	host := req.Host
 | 
					 | 
				
			||||||
	if host == "" {
 | 
					 | 
				
			||||||
		host = req.URL.Host
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	host, err := httpguts.PunycodeHostPort(host)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if !httpguts.ValidHostHeader(host) {
 | 
					 | 
				
			||||||
		return nil, errors.New("http2: invalid Host header")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var path string
 | 
					 | 
				
			||||||
	if !isNormalConnect(req) {
 | 
					 | 
				
			||||||
		path = req.URL.RequestURI()
 | 
					 | 
				
			||||||
		if !validPseudoPath(path) {
 | 
					 | 
				
			||||||
			orig := path
 | 
					 | 
				
			||||||
			path = strings.TrimPrefix(path, req.URL.Scheme+"://"+host)
 | 
					 | 
				
			||||||
			if !validPseudoPath(path) {
 | 
					 | 
				
			||||||
				if req.URL.Opaque != "" {
 | 
					 | 
				
			||||||
					return nil, fmt.Errorf("invalid request :path %q from URL.Opaque = %q", orig, req.URL.Opaque)
 | 
					 | 
				
			||||||
				} else {
 | 
					 | 
				
			||||||
					return nil, fmt.Errorf("invalid request :path %q", orig)
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Check for any invalid headers+trailers and return an error before we
 | 
					 | 
				
			||||||
	// potentially pollute our hpack state. (We want to be able to
 | 
					 | 
				
			||||||
	// continue to reuse the hpack encoder for future requests)
 | 
					 | 
				
			||||||
	if err := validateHeaders(req.Header); err != "" {
 | 
					 | 
				
			||||||
		return nil, fmt.Errorf("invalid HTTP header %s", err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if err := validateHeaders(req.Trailer); err != "" {
 | 
					 | 
				
			||||||
		return nil, fmt.Errorf("invalid HTTP trailer %s", err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	enumerateHeaders := func(f func(name, value string)) {
 | 
					 | 
				
			||||||
		// 8.1.2.3 Request Pseudo-Header Fields
 | 
					 | 
				
			||||||
		// The :path pseudo-header field includes the path and query parts of the
 | 
					 | 
				
			||||||
		// target URI (the path-absolute production and optionally a '?' character
 | 
					 | 
				
			||||||
		// followed by the query production, see Sections 3.3 and 3.4 of
 | 
					 | 
				
			||||||
		// [RFC3986]).
 | 
					 | 
				
			||||||
		f(":authority", host)
 | 
					 | 
				
			||||||
		m := req.Method
 | 
					 | 
				
			||||||
		if m == "" {
 | 
					 | 
				
			||||||
			m = http.MethodGet
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		f(":method", m)
 | 
					 | 
				
			||||||
		if !isNormalConnect(req) {
 | 
					 | 
				
			||||||
			f(":path", path)
 | 
					 | 
				
			||||||
			f(":scheme", req.URL.Scheme)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if trailers != "" {
 | 
					 | 
				
			||||||
			f("trailer", trailers)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		var didUA bool
 | 
					 | 
				
			||||||
		for k, vv := range req.Header {
 | 
					 | 
				
			||||||
			if asciiEqualFold(k, "host") || asciiEqualFold(k, "content-length") {
 | 
					 | 
				
			||||||
				// Host is :authority, already sent.
 | 
					 | 
				
			||||||
				// Content-Length is automatic, set below.
 | 
					 | 
				
			||||||
				continue
 | 
					 | 
				
			||||||
			} else if asciiEqualFold(k, "connection") ||
 | 
					 | 
				
			||||||
				asciiEqualFold(k, "proxy-connection") ||
 | 
					 | 
				
			||||||
				asciiEqualFold(k, "transfer-encoding") ||
 | 
					 | 
				
			||||||
				asciiEqualFold(k, "upgrade") ||
 | 
					 | 
				
			||||||
				asciiEqualFold(k, "keep-alive") {
 | 
					 | 
				
			||||||
				// Per 8.1.2.2 Connection-Specific Header
 | 
					 | 
				
			||||||
				// Fields, don't send connection-specific
 | 
					 | 
				
			||||||
				// fields. We have already checked if any
 | 
					 | 
				
			||||||
				// are error-worthy so just ignore the rest.
 | 
					 | 
				
			||||||
				continue
 | 
					 | 
				
			||||||
			} else if asciiEqualFold(k, "user-agent") {
 | 
					 | 
				
			||||||
				// Match Go's http1 behavior: at most one
 | 
					 | 
				
			||||||
				// User-Agent. If set to nil or empty string,
 | 
					 | 
				
			||||||
				// then omit it. Otherwise if not mentioned,
 | 
					 | 
				
			||||||
				// include the default (below).
 | 
					 | 
				
			||||||
				didUA = true
 | 
					 | 
				
			||||||
				if len(vv) < 1 {
 | 
					 | 
				
			||||||
					continue
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				vv = vv[:1]
 | 
					 | 
				
			||||||
				if vv[0] == "" {
 | 
					 | 
				
			||||||
					continue
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			} else if asciiEqualFold(k, "cookie") {
 | 
					 | 
				
			||||||
				// Per 8.1.2.5 To allow for better compression efficiency, the
 | 
					 | 
				
			||||||
				// Cookie header field MAY be split into separate header fields,
 | 
					 | 
				
			||||||
				// each with one or more cookie-pairs.
 | 
					 | 
				
			||||||
				for _, v := range vv {
 | 
					 | 
				
			||||||
					for {
 | 
					 | 
				
			||||||
						p := strings.IndexByte(v, ';')
 | 
					 | 
				
			||||||
						if p < 0 {
 | 
					 | 
				
			||||||
							break
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
						f("cookie", v[:p])
 | 
					 | 
				
			||||||
						p++
 | 
					 | 
				
			||||||
						// strip space after semicolon if any.
 | 
					 | 
				
			||||||
						for p+1 <= len(v) && v[p] == ' ' {
 | 
					 | 
				
			||||||
							p++
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
						v = v[p:]
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
					if len(v) > 0 {
 | 
					 | 
				
			||||||
						f("cookie", v)
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				continue
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			for _, v := range vv {
 | 
					 | 
				
			||||||
				f(k, v)
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if shouldSendReqContentLength(req.Method, contentLength) {
 | 
					 | 
				
			||||||
			f("content-length", strconv.FormatInt(contentLength, 10))
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if addGzipHeader {
 | 
					 | 
				
			||||||
			f("accept-encoding", "gzip")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if !didUA {
 | 
					 | 
				
			||||||
			f("user-agent", defaultUserAgent)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Do a first pass over the headers counting bytes to ensure
 | 
					 | 
				
			||||||
	// we don't exceed cc.peerMaxHeaderListSize. This is done as a
 | 
					 | 
				
			||||||
	// separate pass before encoding the headers to prevent
 | 
					 | 
				
			||||||
	// modifying the hpack state.
 | 
					 | 
				
			||||||
	hlSize := uint64(0)
 | 
					 | 
				
			||||||
	enumerateHeaders(func(name, value string) {
 | 
					 | 
				
			||||||
		hf := hpack.HeaderField{Name: name, Value: value}
 | 
					 | 
				
			||||||
		hlSize += uint64(hf.Size())
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if hlSize > cc.peerMaxHeaderListSize {
 | 
					 | 
				
			||||||
		return nil, errRequestHeaderListSize
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	trace := httptrace.ContextClientTrace(req.Context())
 | 
					 | 
				
			||||||
	traceHeaders := traceHasWroteHeaderField(trace)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Header list size is ok. Write the headers.
 | 
					 | 
				
			||||||
	enumerateHeaders(func(name, value string) {
 | 
					 | 
				
			||||||
		name, ascii := lowerHeader(name)
 | 
					 | 
				
			||||||
		if !ascii {
 | 
					 | 
				
			||||||
			// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
 | 
					 | 
				
			||||||
			// field names have to be ASCII characters (just as in HTTP/1.x).
 | 
					 | 
				
			||||||
			return
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		cc.writeHeader(name, value)
 | 
					 | 
				
			||||||
		if traceHeaders {
 | 
					 | 
				
			||||||
			traceWroteHeaderField(trace, name, value)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return cc.hbuf.Bytes(), nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// shouldSendReqContentLength reports whether the http2.Transport should send
 | 
					 | 
				
			||||||
// a "content-length" request header. This logic is basically a copy of the net/http
 | 
					 | 
				
			||||||
// transferWriter.shouldSendContentLength.
 | 
					 | 
				
			||||||
// The contentLength is the corrected contentLength (so 0 means actually 0, not unknown).
 | 
					 | 
				
			||||||
// -1 means unknown.
 | 
					 | 
				
			||||||
func shouldSendReqContentLength(method string, contentLength int64) bool {
 | 
					 | 
				
			||||||
	if contentLength > 0 {
 | 
					 | 
				
			||||||
		return true
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if contentLength < 0 {
 | 
					 | 
				
			||||||
		return false
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// For zero bodies, whether we send a content-length depends on the method.
 | 
					 | 
				
			||||||
	// It also kinda doesn't matter for http2 either way, with END_STREAM.
 | 
					 | 
				
			||||||
	switch method {
 | 
					 | 
				
			||||||
	case "POST", "PUT", "PATCH":
 | 
					 | 
				
			||||||
		return true
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		return false
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// requires cc.wmu be held.
 | 
					// requires cc.wmu be held.
 | 
				
			||||||
func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) {
 | 
					func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) {
 | 
				
			||||||
	cc.hbuf.Reset()
 | 
						cc.hbuf.Reset()
 | 
				
			||||||
@@ -2294,7 +2044,7 @@ func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for k, vv := range trailer {
 | 
						for k, vv := range trailer {
 | 
				
			||||||
		lowKey, ascii := lowerHeader(k)
 | 
							lowKey, ascii := httpcommon.LowerHeader(k)
 | 
				
			||||||
		if !ascii {
 | 
							if !ascii {
 | 
				
			||||||
			// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
 | 
								// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
 | 
				
			||||||
			// field names have to be ASCII characters (just as in HTTP/1.x).
 | 
								// field names have to be ASCII characters (just as in HTTP/1.x).
 | 
				
			||||||
@@ -2434,9 +2184,12 @@ func (rl *clientConnReadLoop) cleanup() {
 | 
				
			|||||||
	// This avoids a situation where new connections are constantly created,
 | 
						// This avoids a situation where new connections are constantly created,
 | 
				
			||||||
	// added to the pool, fail, and are removed from the pool, without any error
 | 
						// added to the pool, fail, and are removed from the pool, without any error
 | 
				
			||||||
	// being surfaced to the user.
 | 
						// being surfaced to the user.
 | 
				
			||||||
	const unusedWaitTime = 5 * time.Second
 | 
						unusedWaitTime := 5 * time.Second
 | 
				
			||||||
 | 
						if cc.idleTimeout > 0 && unusedWaitTime > cc.idleTimeout {
 | 
				
			||||||
 | 
							unusedWaitTime = cc.idleTimeout
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	idleTime := cc.t.now().Sub(cc.lastActive)
 | 
						idleTime := cc.t.now().Sub(cc.lastActive)
 | 
				
			||||||
	if atomic.LoadUint32(&cc.atomicReused) == 0 && idleTime < unusedWaitTime {
 | 
						if atomic.LoadUint32(&cc.atomicReused) == 0 && idleTime < unusedWaitTime && !cc.closedOnIdle {
 | 
				
			||||||
		cc.idleTimer = cc.t.afterFunc(unusedWaitTime-idleTime, func() {
 | 
							cc.idleTimer = cc.t.afterFunc(unusedWaitTime-idleTime, func() {
 | 
				
			||||||
			cc.t.connPool().MarkDead(cc)
 | 
								cc.t.connPool().MarkDead(cc)
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
@@ -2457,6 +2210,13 @@ func (rl *clientConnReadLoop) cleanup() {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	cc.cond.Broadcast()
 | 
						cc.cond.Broadcast()
 | 
				
			||||||
	cc.mu.Unlock()
 | 
						cc.mu.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if !cc.seenSettings {
 | 
				
			||||||
 | 
							// If we have a pending request that wants extended CONNECT,
 | 
				
			||||||
 | 
							// let it continue and fail with the connection error.
 | 
				
			||||||
 | 
							cc.extendedConnectAllowed = true
 | 
				
			||||||
 | 
							close(cc.seenSettingsChan)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// countReadFrameError calls Transport.CountError with a string
 | 
					// countReadFrameError calls Transport.CountError with a string
 | 
				
			||||||
@@ -2549,9 +2309,6 @@ func (rl *clientConnReadLoop) run() error {
 | 
				
			|||||||
			if VerboseLogs {
 | 
								if VerboseLogs {
 | 
				
			||||||
				cc.vlogf("http2: Transport conn %p received error from processing frame %v: %v", cc, summarizeFrame(f), err)
 | 
									cc.vlogf("http2: Transport conn %p received error from processing frame %v: %v", cc, summarizeFrame(f), err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if !cc.seenSettings {
 | 
					 | 
				
			||||||
				close(cc.seenSettingsChan)
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -2646,7 +2403,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
 | 
				
			|||||||
		Status:     status + " " + http.StatusText(statusCode),
 | 
							Status:     status + " " + http.StatusText(statusCode),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for _, hf := range regularFields {
 | 
						for _, hf := range regularFields {
 | 
				
			||||||
		key := canonicalHeader(hf.Name)
 | 
							key := httpcommon.CanonicalHeader(hf.Name)
 | 
				
			||||||
		if key == "Trailer" {
 | 
							if key == "Trailer" {
 | 
				
			||||||
			t := res.Trailer
 | 
								t := res.Trailer
 | 
				
			||||||
			if t == nil {
 | 
								if t == nil {
 | 
				
			||||||
@@ -2654,7 +2411,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
 | 
				
			|||||||
				res.Trailer = t
 | 
									res.Trailer = t
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			foreachHeaderElement(hf.Value, func(v string) {
 | 
								foreachHeaderElement(hf.Value, func(v string) {
 | 
				
			||||||
				t[canonicalHeader(v)] = nil
 | 
									t[httpcommon.CanonicalHeader(v)] = nil
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			vv := header[key]
 | 
								vv := header[key]
 | 
				
			||||||
@@ -2778,7 +2535,7 @@ func (rl *clientConnReadLoop) processTrailers(cs *clientStream, f *MetaHeadersFr
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	trailer := make(http.Header)
 | 
						trailer := make(http.Header)
 | 
				
			||||||
	for _, hf := range f.RegularFields() {
 | 
						for _, hf := range f.RegularFields() {
 | 
				
			||||||
		key := canonicalHeader(hf.Name)
 | 
							key := httpcommon.CanonicalHeader(hf.Name)
 | 
				
			||||||
		trailer[key] = append(trailer[key], hf.Value)
 | 
							trailer[key] = append(trailer[key], hf.Value)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	cs.trailer = trailer
 | 
						cs.trailer = trailer
 | 
				
			||||||
@@ -3324,7 +3081,7 @@ func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, ping bool,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
	errResponseHeaderListSize = errors.New("http2: response header list larger than advertised limit")
 | 
						errResponseHeaderListSize = errors.New("http2: response header list larger than advertised limit")
 | 
				
			||||||
	errRequestHeaderListSize  = errors.New("http2: request header list larger than peer's advertised limit")
 | 
						errRequestHeaderListSize  = httpcommon.ErrRequestHeaderListSize
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (cc *ClientConn) logf(format string, args ...interface{}) {
 | 
					func (cc *ClientConn) logf(format string, args ...interface{}) {
 | 
				
			||||||
@@ -3508,16 +3265,6 @@ func traceFirstResponseByte(trace *httptrace.ClientTrace) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func traceHasWroteHeaderField(trace *httptrace.ClientTrace) bool {
 | 
					 | 
				
			||||||
	return trace != nil && trace.WroteHeaderField != nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func traceWroteHeaderField(trace *httptrace.ClientTrace, k, v string) {
 | 
					 | 
				
			||||||
	if trace != nil && trace.WroteHeaderField != nil {
 | 
					 | 
				
			||||||
		trace.WroteHeaderField(k, []string{v})
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func traceGot1xxResponseFunc(trace *httptrace.ClientTrace) func(int, textproto.MIMEHeader) error {
 | 
					func traceGot1xxResponseFunc(trace *httptrace.ClientTrace) func(int, textproto.MIMEHeader) error {
 | 
				
			||||||
	if trace != nil {
 | 
						if trace != nil {
 | 
				
			||||||
		return trace.Got1xxResponse
 | 
							return trace.Got1xxResponse
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/net/http2/write.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/net/http2/write.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -13,6 +13,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"golang.org/x/net/http/httpguts"
 | 
						"golang.org/x/net/http/httpguts"
 | 
				
			||||||
	"golang.org/x/net/http2/hpack"
 | 
						"golang.org/x/net/http2/hpack"
 | 
				
			||||||
 | 
						"golang.org/x/net/internal/httpcommon"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// writeFramer is implemented by any type that is used to write frames.
 | 
					// writeFramer is implemented by any type that is used to write frames.
 | 
				
			||||||
@@ -351,7 +352,7 @@ func encodeHeaders(enc *hpack.Encoder, h http.Header, keys []string) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	for _, k := range keys {
 | 
						for _, k := range keys {
 | 
				
			||||||
		vv := h[k]
 | 
							vv := h[k]
 | 
				
			||||||
		k, ascii := lowerHeader(k)
 | 
							k, ascii := httpcommon.LowerHeader(k)
 | 
				
			||||||
		if !ascii {
 | 
							if !ascii {
 | 
				
			||||||
			// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
 | 
								// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
 | 
				
			||||||
			// field names have to be ASCII characters (just as in HTTP/1.x).
 | 
								// field names have to be ASCII characters (just as in HTTP/1.x).
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										53
									
								
								vendor/golang.org/x/net/internal/httpcommon/ascii.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								vendor/golang.org/x/net/internal/httpcommon/ascii.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					// Copyright 2025 The Go Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package httpcommon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// The HTTP protocols are defined in terms of ASCII, not Unicode. This file
 | 
				
			||||||
 | 
					// contains helper functions which may use Unicode-aware functions which would
 | 
				
			||||||
 | 
					// otherwise be unsafe and could introduce vulnerabilities if used improperly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// asciiEqualFold is strings.EqualFold, ASCII only. It reports whether s and t
 | 
				
			||||||
 | 
					// are equal, ASCII-case-insensitively.
 | 
				
			||||||
 | 
					func asciiEqualFold(s, t string) bool {
 | 
				
			||||||
 | 
						if len(s) != len(t) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for i := 0; i < len(s); i++ {
 | 
				
			||||||
 | 
							if lower(s[i]) != lower(t[i]) {
 | 
				
			||||||
 | 
								return false
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// lower returns the ASCII lowercase version of b.
 | 
				
			||||||
 | 
					func lower(b byte) byte {
 | 
				
			||||||
 | 
						if 'A' <= b && b <= 'Z' {
 | 
				
			||||||
 | 
							return b + ('a' - 'A')
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return b
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// isASCIIPrint returns whether s is ASCII and printable according to
 | 
				
			||||||
 | 
					// https://tools.ietf.org/html/rfc20#section-4.2.
 | 
				
			||||||
 | 
					func isASCIIPrint(s string) bool {
 | 
				
			||||||
 | 
						for i := 0; i < len(s); i++ {
 | 
				
			||||||
 | 
							if s[i] < ' ' || s[i] > '~' {
 | 
				
			||||||
 | 
								return false
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// asciiToLower returns the lowercase version of s if s is ASCII and printable,
 | 
				
			||||||
 | 
					// and whether or not it was.
 | 
				
			||||||
 | 
					func asciiToLower(s string) (lower string, ok bool) {
 | 
				
			||||||
 | 
						if !isASCIIPrint(s) {
 | 
				
			||||||
 | 
							return "", false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return strings.ToLower(s), true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
// Copyright 2014 The Go Authors. All rights reserved.
 | 
					// Copyright 2025 The Go Authors. All rights reserved.
 | 
				
			||||||
// Use of this source code is governed by a BSD-style
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package http2
 | 
					package httpcommon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"net/http"
 | 
						"net/textproto"
 | 
				
			||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -82,13 +82,15 @@ func buildCommonHeaderMaps() {
 | 
				
			|||||||
	commonLowerHeader = make(map[string]string, len(common))
 | 
						commonLowerHeader = make(map[string]string, len(common))
 | 
				
			||||||
	commonCanonHeader = make(map[string]string, len(common))
 | 
						commonCanonHeader = make(map[string]string, len(common))
 | 
				
			||||||
	for _, v := range common {
 | 
						for _, v := range common {
 | 
				
			||||||
		chk := http.CanonicalHeaderKey(v)
 | 
							chk := textproto.CanonicalMIMEHeaderKey(v)
 | 
				
			||||||
		commonLowerHeader[chk] = v
 | 
							commonLowerHeader[chk] = v
 | 
				
			||||||
		commonCanonHeader[v] = chk
 | 
							commonCanonHeader[v] = chk
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func lowerHeader(v string) (lower string, ascii bool) {
 | 
					// LowerHeader returns the lowercase form of a header name,
 | 
				
			||||||
 | 
					// used on the wire for HTTP/2 and HTTP/3 requests.
 | 
				
			||||||
 | 
					func LowerHeader(v string) (lower string, ascii bool) {
 | 
				
			||||||
	buildCommonHeaderMapsOnce()
 | 
						buildCommonHeaderMapsOnce()
 | 
				
			||||||
	if s, ok := commonLowerHeader[v]; ok {
 | 
						if s, ok := commonLowerHeader[v]; ok {
 | 
				
			||||||
		return s, true
 | 
							return s, true
 | 
				
			||||||
@@ -96,10 +98,18 @@ func lowerHeader(v string) (lower string, ascii bool) {
 | 
				
			|||||||
	return asciiToLower(v)
 | 
						return asciiToLower(v)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func canonicalHeader(v string) string {
 | 
					// CanonicalHeader canonicalizes a header name. (For example, "host" becomes "Host".)
 | 
				
			||||||
 | 
					func CanonicalHeader(v string) string {
 | 
				
			||||||
	buildCommonHeaderMapsOnce()
 | 
						buildCommonHeaderMapsOnce()
 | 
				
			||||||
	if s, ok := commonCanonHeader[v]; ok {
 | 
						if s, ok := commonCanonHeader[v]; ok {
 | 
				
			||||||
		return s
 | 
							return s
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return http.CanonicalHeaderKey(v)
 | 
						return textproto.CanonicalMIMEHeaderKey(v)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// CachedCanonicalHeader returns the canonical form of a well-known header name.
 | 
				
			||||||
 | 
					func CachedCanonicalHeader(v string) (string, bool) {
 | 
				
			||||||
 | 
						buildCommonHeaderMapsOnce()
 | 
				
			||||||
 | 
						s, ok := commonCanonHeader[v]
 | 
				
			||||||
 | 
						return s, ok
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										467
									
								
								vendor/golang.org/x/net/internal/httpcommon/request.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										467
									
								
								vendor/golang.org/x/net/internal/httpcommon/request.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,467 @@
 | 
				
			|||||||
 | 
					// Copyright 2025 The Go Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package httpcommon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"net/http/httptrace"
 | 
				
			||||||
 | 
						"net/textproto"
 | 
				
			||||||
 | 
						"net/url"
 | 
				
			||||||
 | 
						"sort"
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"golang.org/x/net/http/httpguts"
 | 
				
			||||||
 | 
						"golang.org/x/net/http2/hpack"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						ErrRequestHeaderListSize = errors.New("request header list larger than peer's advertised limit")
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Request is a subset of http.Request.
 | 
				
			||||||
 | 
					// It'd be simpler to pass an *http.Request, of course, but we can't depend on net/http
 | 
				
			||||||
 | 
					// without creating a dependency cycle.
 | 
				
			||||||
 | 
					type Request struct {
 | 
				
			||||||
 | 
						URL                 *url.URL
 | 
				
			||||||
 | 
						Method              string
 | 
				
			||||||
 | 
						Host                string
 | 
				
			||||||
 | 
						Header              map[string][]string
 | 
				
			||||||
 | 
						Trailer             map[string][]string
 | 
				
			||||||
 | 
						ActualContentLength int64 // 0 means 0, -1 means unknown
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// EncodeHeadersParam is parameters to EncodeHeaders.
 | 
				
			||||||
 | 
					type EncodeHeadersParam struct {
 | 
				
			||||||
 | 
						Request Request
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// AddGzipHeader indicates that an "accept-encoding: gzip" header should be
 | 
				
			||||||
 | 
						// added to the request.
 | 
				
			||||||
 | 
						AddGzipHeader bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// PeerMaxHeaderListSize, when non-zero, is the peer's MAX_HEADER_LIST_SIZE setting.
 | 
				
			||||||
 | 
						PeerMaxHeaderListSize uint64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// DefaultUserAgent is the User-Agent header to send when the request
 | 
				
			||||||
 | 
						// neither contains a User-Agent nor disables it.
 | 
				
			||||||
 | 
						DefaultUserAgent string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// EncodeHeadersParam is the result of EncodeHeaders.
 | 
				
			||||||
 | 
					type EncodeHeadersResult struct {
 | 
				
			||||||
 | 
						HasBody     bool
 | 
				
			||||||
 | 
						HasTrailers bool
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// EncodeHeaders constructs request headers common to HTTP/2 and HTTP/3.
 | 
				
			||||||
 | 
					// It validates a request and calls headerf with each pseudo-header and header
 | 
				
			||||||
 | 
					// for the request.
 | 
				
			||||||
 | 
					// The headerf function is called with the validated, canonicalized header name.
 | 
				
			||||||
 | 
					func EncodeHeaders(ctx context.Context, param EncodeHeadersParam, headerf func(name, value string)) (res EncodeHeadersResult, _ error) {
 | 
				
			||||||
 | 
						req := param.Request
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Check for invalid connection-level headers.
 | 
				
			||||||
 | 
						if err := checkConnHeaders(req.Header); err != nil {
 | 
				
			||||||
 | 
							return res, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if req.URL == nil {
 | 
				
			||||||
 | 
							return res, errors.New("Request.URL is nil")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						host := req.Host
 | 
				
			||||||
 | 
						if host == "" {
 | 
				
			||||||
 | 
							host = req.URL.Host
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						host, err := httpguts.PunycodeHostPort(host)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return res, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !httpguts.ValidHostHeader(host) {
 | 
				
			||||||
 | 
							return res, errors.New("invalid Host header")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// isNormalConnect is true if this is a non-extended CONNECT request.
 | 
				
			||||||
 | 
						isNormalConnect := false
 | 
				
			||||||
 | 
						var protocol string
 | 
				
			||||||
 | 
						if vv := req.Header[":protocol"]; len(vv) > 0 {
 | 
				
			||||||
 | 
							protocol = vv[0]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if req.Method == "CONNECT" && protocol == "" {
 | 
				
			||||||
 | 
							isNormalConnect = true
 | 
				
			||||||
 | 
						} else if protocol != "" && req.Method != "CONNECT" {
 | 
				
			||||||
 | 
							return res, errors.New("invalid :protocol header in non-CONNECT request")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Validate the path, except for non-extended CONNECT requests which have no path.
 | 
				
			||||||
 | 
						var path string
 | 
				
			||||||
 | 
						if !isNormalConnect {
 | 
				
			||||||
 | 
							path = req.URL.RequestURI()
 | 
				
			||||||
 | 
							if !validPseudoPath(path) {
 | 
				
			||||||
 | 
								orig := path
 | 
				
			||||||
 | 
								path = strings.TrimPrefix(path, req.URL.Scheme+"://"+host)
 | 
				
			||||||
 | 
								if !validPseudoPath(path) {
 | 
				
			||||||
 | 
									if req.URL.Opaque != "" {
 | 
				
			||||||
 | 
										return res, fmt.Errorf("invalid request :path %q from URL.Opaque = %q", orig, req.URL.Opaque)
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										return res, fmt.Errorf("invalid request :path %q", orig)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Check for any invalid headers+trailers and return an error before we
 | 
				
			||||||
 | 
						// potentially pollute our hpack state. (We want to be able to
 | 
				
			||||||
 | 
						// continue to reuse the hpack encoder for future requests)
 | 
				
			||||||
 | 
						if err := validateHeaders(req.Header); err != "" {
 | 
				
			||||||
 | 
							return res, fmt.Errorf("invalid HTTP header %s", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := validateHeaders(req.Trailer); err != "" {
 | 
				
			||||||
 | 
							return res, fmt.Errorf("invalid HTTP trailer %s", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						trailers, err := commaSeparatedTrailers(req.Trailer)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return res, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						enumerateHeaders := func(f func(name, value string)) {
 | 
				
			||||||
 | 
							// 8.1.2.3 Request Pseudo-Header Fields
 | 
				
			||||||
 | 
							// The :path pseudo-header field includes the path and query parts of the
 | 
				
			||||||
 | 
							// target URI (the path-absolute production and optionally a '?' character
 | 
				
			||||||
 | 
							// followed by the query production, see Sections 3.3 and 3.4 of
 | 
				
			||||||
 | 
							// [RFC3986]).
 | 
				
			||||||
 | 
							f(":authority", host)
 | 
				
			||||||
 | 
							m := req.Method
 | 
				
			||||||
 | 
							if m == "" {
 | 
				
			||||||
 | 
								m = "GET"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							f(":method", m)
 | 
				
			||||||
 | 
							if !isNormalConnect {
 | 
				
			||||||
 | 
								f(":path", path)
 | 
				
			||||||
 | 
								f(":scheme", req.URL.Scheme)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if protocol != "" {
 | 
				
			||||||
 | 
								f(":protocol", protocol)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if trailers != "" {
 | 
				
			||||||
 | 
								f("trailer", trailers)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var didUA bool
 | 
				
			||||||
 | 
							for k, vv := range req.Header {
 | 
				
			||||||
 | 
								if asciiEqualFold(k, "host") || asciiEqualFold(k, "content-length") {
 | 
				
			||||||
 | 
									// Host is :authority, already sent.
 | 
				
			||||||
 | 
									// Content-Length is automatic, set below.
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								} else if asciiEqualFold(k, "connection") ||
 | 
				
			||||||
 | 
									asciiEqualFold(k, "proxy-connection") ||
 | 
				
			||||||
 | 
									asciiEqualFold(k, "transfer-encoding") ||
 | 
				
			||||||
 | 
									asciiEqualFold(k, "upgrade") ||
 | 
				
			||||||
 | 
									asciiEqualFold(k, "keep-alive") {
 | 
				
			||||||
 | 
									// Per 8.1.2.2 Connection-Specific Header
 | 
				
			||||||
 | 
									// Fields, don't send connection-specific
 | 
				
			||||||
 | 
									// fields. We have already checked if any
 | 
				
			||||||
 | 
									// are error-worthy so just ignore the rest.
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								} else if asciiEqualFold(k, "user-agent") {
 | 
				
			||||||
 | 
									// Match Go's http1 behavior: at most one
 | 
				
			||||||
 | 
									// User-Agent. If set to nil or empty string,
 | 
				
			||||||
 | 
									// then omit it. Otherwise if not mentioned,
 | 
				
			||||||
 | 
									// include the default (below).
 | 
				
			||||||
 | 
									didUA = true
 | 
				
			||||||
 | 
									if len(vv) < 1 {
 | 
				
			||||||
 | 
										continue
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									vv = vv[:1]
 | 
				
			||||||
 | 
									if vv[0] == "" {
 | 
				
			||||||
 | 
										continue
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								} else if asciiEqualFold(k, "cookie") {
 | 
				
			||||||
 | 
									// Per 8.1.2.5 To allow for better compression efficiency, the
 | 
				
			||||||
 | 
									// Cookie header field MAY be split into separate header fields,
 | 
				
			||||||
 | 
									// each with one or more cookie-pairs.
 | 
				
			||||||
 | 
									for _, v := range vv {
 | 
				
			||||||
 | 
										for {
 | 
				
			||||||
 | 
											p := strings.IndexByte(v, ';')
 | 
				
			||||||
 | 
											if p < 0 {
 | 
				
			||||||
 | 
												break
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
											f("cookie", v[:p])
 | 
				
			||||||
 | 
											p++
 | 
				
			||||||
 | 
											// strip space after semicolon if any.
 | 
				
			||||||
 | 
											for p+1 <= len(v) && v[p] == ' ' {
 | 
				
			||||||
 | 
												p++
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
											v = v[p:]
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										if len(v) > 0 {
 | 
				
			||||||
 | 
											f("cookie", v)
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								} else if k == ":protocol" {
 | 
				
			||||||
 | 
									// :protocol pseudo-header was already sent above.
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								for _, v := range vv {
 | 
				
			||||||
 | 
									f(k, v)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if shouldSendReqContentLength(req.Method, req.ActualContentLength) {
 | 
				
			||||||
 | 
								f("content-length", strconv.FormatInt(req.ActualContentLength, 10))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if param.AddGzipHeader {
 | 
				
			||||||
 | 
								f("accept-encoding", "gzip")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if !didUA {
 | 
				
			||||||
 | 
								f("user-agent", param.DefaultUserAgent)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Do a first pass over the headers counting bytes to ensure
 | 
				
			||||||
 | 
						// we don't exceed cc.peerMaxHeaderListSize. This is done as a
 | 
				
			||||||
 | 
						// separate pass before encoding the headers to prevent
 | 
				
			||||||
 | 
						// modifying the hpack state.
 | 
				
			||||||
 | 
						if param.PeerMaxHeaderListSize > 0 {
 | 
				
			||||||
 | 
							hlSize := uint64(0)
 | 
				
			||||||
 | 
							enumerateHeaders(func(name, value string) {
 | 
				
			||||||
 | 
								hf := hpack.HeaderField{Name: name, Value: value}
 | 
				
			||||||
 | 
								hlSize += uint64(hf.Size())
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if hlSize > param.PeerMaxHeaderListSize {
 | 
				
			||||||
 | 
								return res, ErrRequestHeaderListSize
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						trace := httptrace.ContextClientTrace(ctx)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Header list size is ok. Write the headers.
 | 
				
			||||||
 | 
						enumerateHeaders(func(name, value string) {
 | 
				
			||||||
 | 
							name, ascii := LowerHeader(name)
 | 
				
			||||||
 | 
							if !ascii {
 | 
				
			||||||
 | 
								// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header
 | 
				
			||||||
 | 
								// field names have to be ASCII characters (just as in HTTP/1.x).
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							headerf(name, value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if trace != nil && trace.WroteHeaderField != nil {
 | 
				
			||||||
 | 
								trace.WroteHeaderField(name, []string{value})
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						res.HasBody = req.ActualContentLength != 0
 | 
				
			||||||
 | 
						res.HasTrailers = trailers != ""
 | 
				
			||||||
 | 
						return res, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsRequestGzip reports whether we should add an Accept-Encoding: gzip header
 | 
				
			||||||
 | 
					// for a request.
 | 
				
			||||||
 | 
					func IsRequestGzip(method string, header map[string][]string, disableCompression bool) bool {
 | 
				
			||||||
 | 
						// TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere?
 | 
				
			||||||
 | 
						if !disableCompression &&
 | 
				
			||||||
 | 
							len(header["Accept-Encoding"]) == 0 &&
 | 
				
			||||||
 | 
							len(header["Range"]) == 0 &&
 | 
				
			||||||
 | 
							method != "HEAD" {
 | 
				
			||||||
 | 
							// Request gzip only, not deflate. Deflate is ambiguous and
 | 
				
			||||||
 | 
							// not as universally supported anyway.
 | 
				
			||||||
 | 
							// See: https://zlib.net/zlib_faq.html#faq39
 | 
				
			||||||
 | 
							//
 | 
				
			||||||
 | 
							// Note that we don't request this for HEAD requests,
 | 
				
			||||||
 | 
							// due to a bug in nginx:
 | 
				
			||||||
 | 
							//   http://trac.nginx.org/nginx/ticket/358
 | 
				
			||||||
 | 
							//   https://golang.org/issue/5522
 | 
				
			||||||
 | 
							//
 | 
				
			||||||
 | 
							// We don't request gzip if the request is for a range, since
 | 
				
			||||||
 | 
							// auto-decoding a portion of a gzipped document will just fail
 | 
				
			||||||
 | 
							// anyway. See https://golang.org/issue/8923
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return false
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// checkConnHeaders checks whether req has any invalid connection-level headers.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// https://www.rfc-editor.org/rfc/rfc9114.html#section-4.2-3
 | 
				
			||||||
 | 
					// https://www.rfc-editor.org/rfc/rfc9113.html#section-8.2.2-1
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Certain headers are special-cased as okay but not transmitted later.
 | 
				
			||||||
 | 
					// For example, we allow "Transfer-Encoding: chunked", but drop the header when encoding.
 | 
				
			||||||
 | 
					func checkConnHeaders(h map[string][]string) error {
 | 
				
			||||||
 | 
						if vv := h["Upgrade"]; len(vv) > 0 && (vv[0] != "" && vv[0] != "chunked") {
 | 
				
			||||||
 | 
							return fmt.Errorf("invalid Upgrade request header: %q", vv)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if vv := h["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") {
 | 
				
			||||||
 | 
							return fmt.Errorf("invalid Transfer-Encoding request header: %q", vv)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if vv := h["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && !asciiEqualFold(vv[0], "close") && !asciiEqualFold(vv[0], "keep-alive")) {
 | 
				
			||||||
 | 
							return fmt.Errorf("invalid Connection request header: %q", vv)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func commaSeparatedTrailers(trailer map[string][]string) (string, error) {
 | 
				
			||||||
 | 
						keys := make([]string, 0, len(trailer))
 | 
				
			||||||
 | 
						for k := range trailer {
 | 
				
			||||||
 | 
							k = CanonicalHeader(k)
 | 
				
			||||||
 | 
							switch k {
 | 
				
			||||||
 | 
							case "Transfer-Encoding", "Trailer", "Content-Length":
 | 
				
			||||||
 | 
								return "", fmt.Errorf("invalid Trailer key %q", k)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							keys = append(keys, k)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if len(keys) > 0 {
 | 
				
			||||||
 | 
							sort.Strings(keys)
 | 
				
			||||||
 | 
							return strings.Join(keys, ","), nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return "", nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// validPseudoPath reports whether v is a valid :path pseudo-header
 | 
				
			||||||
 | 
					// value. It must be either:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//   - a non-empty string starting with '/'
 | 
				
			||||||
 | 
					//   - the string '*', for OPTIONS requests.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// For now this is only used a quick check for deciding when to clean
 | 
				
			||||||
 | 
					// up Opaque URLs before sending requests from the Transport.
 | 
				
			||||||
 | 
					// See golang.org/issue/16847
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// We used to enforce that the path also didn't start with "//", but
 | 
				
			||||||
 | 
					// Google's GFE accepts such paths and Chrome sends them, so ignore
 | 
				
			||||||
 | 
					// that part of the spec. See golang.org/issue/19103.
 | 
				
			||||||
 | 
					func validPseudoPath(v string) bool {
 | 
				
			||||||
 | 
						return (len(v) > 0 && v[0] == '/') || v == "*"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func validateHeaders(hdrs map[string][]string) string {
 | 
				
			||||||
 | 
						for k, vv := range hdrs {
 | 
				
			||||||
 | 
							if !httpguts.ValidHeaderFieldName(k) && k != ":protocol" {
 | 
				
			||||||
 | 
								return fmt.Sprintf("name %q", k)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							for _, v := range vv {
 | 
				
			||||||
 | 
								if !httpguts.ValidHeaderFieldValue(v) {
 | 
				
			||||||
 | 
									// Don't include the value in the error,
 | 
				
			||||||
 | 
									// because it may be sensitive.
 | 
				
			||||||
 | 
									return fmt.Sprintf("value for header %q", k)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return ""
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// shouldSendReqContentLength reports whether we should send
 | 
				
			||||||
 | 
					// a "content-length" request header. This logic is basically a copy of the net/http
 | 
				
			||||||
 | 
					// transferWriter.shouldSendContentLength.
 | 
				
			||||||
 | 
					// The contentLength is the corrected contentLength (so 0 means actually 0, not unknown).
 | 
				
			||||||
 | 
					// -1 means unknown.
 | 
				
			||||||
 | 
					func shouldSendReqContentLength(method string, contentLength int64) bool {
 | 
				
			||||||
 | 
						if contentLength > 0 {
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if contentLength < 0 {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// For zero bodies, whether we send a content-length depends on the method.
 | 
				
			||||||
 | 
						// It also kinda doesn't matter for http2 either way, with END_STREAM.
 | 
				
			||||||
 | 
						switch method {
 | 
				
			||||||
 | 
						case "POST", "PUT", "PATCH":
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ServerRequestParam is parameters to NewServerRequest.
 | 
				
			||||||
 | 
					type ServerRequestParam struct {
 | 
				
			||||||
 | 
						Method                  string
 | 
				
			||||||
 | 
						Scheme, Authority, Path string
 | 
				
			||||||
 | 
						Protocol                string
 | 
				
			||||||
 | 
						Header                  map[string][]string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ServerRequestResult is the result of NewServerRequest.
 | 
				
			||||||
 | 
					type ServerRequestResult struct {
 | 
				
			||||||
 | 
						// Various http.Request fields.
 | 
				
			||||||
 | 
						URL        *url.URL
 | 
				
			||||||
 | 
						RequestURI string
 | 
				
			||||||
 | 
						Trailer    map[string][]string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						NeedsContinue bool // client provided an "Expect: 100-continue" header
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// If the request should be rejected, this is a short string suitable for passing
 | 
				
			||||||
 | 
						// to the http2 package's CountError function.
 | 
				
			||||||
 | 
						// It might be a bit odd to return errors this way rather than returing an error,
 | 
				
			||||||
 | 
						// but this ensures we don't forget to include a CountError reason.
 | 
				
			||||||
 | 
						InvalidReason string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewServerRequest(rp ServerRequestParam) ServerRequestResult {
 | 
				
			||||||
 | 
						needsContinue := httpguts.HeaderValuesContainsToken(rp.Header["Expect"], "100-continue")
 | 
				
			||||||
 | 
						if needsContinue {
 | 
				
			||||||
 | 
							delete(rp.Header, "Expect")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// Merge Cookie headers into one "; "-delimited value.
 | 
				
			||||||
 | 
						if cookies := rp.Header["Cookie"]; len(cookies) > 1 {
 | 
				
			||||||
 | 
							rp.Header["Cookie"] = []string{strings.Join(cookies, "; ")}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Setup Trailers
 | 
				
			||||||
 | 
						var trailer map[string][]string
 | 
				
			||||||
 | 
						for _, v := range rp.Header["Trailer"] {
 | 
				
			||||||
 | 
							for _, key := range strings.Split(v, ",") {
 | 
				
			||||||
 | 
								key = textproto.CanonicalMIMEHeaderKey(textproto.TrimString(key))
 | 
				
			||||||
 | 
								switch key {
 | 
				
			||||||
 | 
								case "Transfer-Encoding", "Trailer", "Content-Length":
 | 
				
			||||||
 | 
									// Bogus. (copy of http1 rules)
 | 
				
			||||||
 | 
									// Ignore.
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									if trailer == nil {
 | 
				
			||||||
 | 
										trailer = make(map[string][]string)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									trailer[key] = nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						delete(rp.Header, "Trailer")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// "':authority' MUST NOT include the deprecated userinfo subcomponent
 | 
				
			||||||
 | 
						// for "http" or "https" schemed URIs."
 | 
				
			||||||
 | 
						// https://www.rfc-editor.org/rfc/rfc9113.html#section-8.3.1-2.3.8
 | 
				
			||||||
 | 
						if strings.IndexByte(rp.Authority, '@') != -1 && (rp.Scheme == "http" || rp.Scheme == "https") {
 | 
				
			||||||
 | 
							return ServerRequestResult{
 | 
				
			||||||
 | 
								InvalidReason: "userinfo_in_authority",
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var url_ *url.URL
 | 
				
			||||||
 | 
						var requestURI string
 | 
				
			||||||
 | 
						if rp.Method == "CONNECT" && rp.Protocol == "" {
 | 
				
			||||||
 | 
							url_ = &url.URL{Host: rp.Authority}
 | 
				
			||||||
 | 
							requestURI = rp.Authority // mimic HTTP/1 server behavior
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							var err error
 | 
				
			||||||
 | 
							url_, err = url.ParseRequestURI(rp.Path)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return ServerRequestResult{
 | 
				
			||||||
 | 
									InvalidReason: "bad_path",
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							requestURI = rp.Path
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return ServerRequestResult{
 | 
				
			||||||
 | 
							URL:           url_,
 | 
				
			||||||
 | 
							NeedsContinue: needsContinue,
 | 
				
			||||||
 | 
							RequestURI:    requestURI,
 | 
				
			||||||
 | 
							Trailer:       trailer,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										8
									
								
								vendor/golang.org/x/net/proxy/per_host.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/golang.org/x/net/proxy/per_host.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -7,6 +7,7 @@ package proxy
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"net"
 | 
						"net"
 | 
				
			||||||
 | 
						"net/netip"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -57,7 +58,8 @@ func (p *PerHost) DialContext(ctx context.Context, network, addr string) (c net.
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (p *PerHost) dialerForRequest(host string) Dialer {
 | 
					func (p *PerHost) dialerForRequest(host string) Dialer {
 | 
				
			||||||
	if ip := net.ParseIP(host); ip != nil {
 | 
						if nip, err := netip.ParseAddr(host); err == nil {
 | 
				
			||||||
 | 
							ip := net.IP(nip.AsSlice())
 | 
				
			||||||
		for _, net := range p.bypassNetworks {
 | 
							for _, net := range p.bypassNetworks {
 | 
				
			||||||
			if net.Contains(ip) {
 | 
								if net.Contains(ip) {
 | 
				
			||||||
				return p.bypass
 | 
									return p.bypass
 | 
				
			||||||
@@ -108,8 +110,8 @@ func (p *PerHost) AddFromString(s string) {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if ip := net.ParseIP(host); ip != nil {
 | 
							if nip, err := netip.ParseAddr(host); err == nil {
 | 
				
			||||||
			p.AddIP(ip)
 | 
								p.AddIP(net.IP(nip.AsSlice()))
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if strings.HasPrefix(host, "*.") {
 | 
							if strings.HasPrefix(host, "*.") {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										15
									
								
								vendor/golang.org/x/oauth2/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/golang.org/x/oauth2/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -5,15 +5,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
oauth2 package contains a client implementation for OAuth 2.0 spec.
 | 
					oauth2 package contains a client implementation for OAuth 2.0 spec.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Installation
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
~~~~
 | 
					 | 
				
			||||||
go get golang.org/x/oauth2
 | 
					 | 
				
			||||||
~~~~
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Or you can manually git clone the repository to
 | 
					 | 
				
			||||||
`$(go env GOPATH)/src/golang.org/x/oauth2`.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
See pkg.go.dev for further documentation and examples.
 | 
					See pkg.go.dev for further documentation and examples.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* [pkg.go.dev/golang.org/x/oauth2](https://pkg.go.dev/golang.org/x/oauth2)
 | 
					* [pkg.go.dev/golang.org/x/oauth2](https://pkg.go.dev/golang.org/x/oauth2)
 | 
				
			||||||
@@ -33,7 +24,11 @@ The main issue tracker for the oauth2 repository is located at
 | 
				
			|||||||
https://github.com/golang/oauth2/issues.
 | 
					https://github.com/golang/oauth2/issues.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This repository uses Gerrit for code changes. To learn how to submit changes to
 | 
					This repository uses Gerrit for code changes. To learn how to submit changes to
 | 
				
			||||||
this repository, see https://golang.org/doc/contribute.html. In particular:
 | 
					this repository, see https://go.dev/doc/contribute.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The git repository is https://go.googlesource.com/oauth2.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Excluding trivial changes, all contributions should be connected to an existing issue.
 | 
					* Excluding trivial changes, all contributions should be connected to an existing issue.
 | 
				
			||||||
* API changes must go through the [change proposal process](https://go.dev/s/proposal-process) before they can be accepted.
 | 
					* API changes must go through the [change proposal process](https://go.dev/s/proposal-process) before they can be accepted.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								vendor/golang.org/x/oauth2/oauth2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/golang.org/x/oauth2/oauth2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -56,7 +56,7 @@ type Config struct {
 | 
				
			|||||||
	// the OAuth flow, after the resource owner's URLs.
 | 
						// the OAuth flow, after the resource owner's URLs.
 | 
				
			||||||
	RedirectURL string
 | 
						RedirectURL string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Scope specifies optional requested permissions.
 | 
						// Scopes specifies optional requested permissions.
 | 
				
			||||||
	Scopes []string
 | 
						Scopes []string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// authStyleCache caches which auth style to use when Endpoint.AuthStyle is
 | 
						// authStyleCache caches which auth style to use when Endpoint.AuthStyle is
 | 
				
			||||||
@@ -288,7 +288,7 @@ func (tf *tokenRefresher) Token() (*Token, error) {
 | 
				
			|||||||
	if tf.refreshToken != tk.RefreshToken {
 | 
						if tf.refreshToken != tk.RefreshToken {
 | 
				
			||||||
		tf.refreshToken = tk.RefreshToken
 | 
							tf.refreshToken = tk.RefreshToken
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return tk, err
 | 
						return tk, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// reuseTokenSource is a TokenSource that holds a single token in memory
 | 
					// reuseTokenSource is a TokenSource that holds a single token in memory
 | 
				
			||||||
@@ -356,11 +356,15 @@ func NewClient(ctx context.Context, src TokenSource) *http.Client {
 | 
				
			|||||||
	if src == nil {
 | 
						if src == nil {
 | 
				
			||||||
		return internal.ContextClient(ctx)
 | 
							return internal.ContextClient(ctx)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						cc := internal.ContextClient(ctx)
 | 
				
			||||||
	return &http.Client{
 | 
						return &http.Client{
 | 
				
			||||||
		Transport: &Transport{
 | 
							Transport: &Transport{
 | 
				
			||||||
			Base:   internal.ContextClient(ctx).Transport,
 | 
								Base:   cc.Transport,
 | 
				
			||||||
			Source: ReuseTokenSource(nil, src),
 | 
								Source: ReuseTokenSource(nil, src),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							CheckRedirect: cc.CheckRedirect,
 | 
				
			||||||
 | 
							Jar:           cc.Jar,
 | 
				
			||||||
 | 
							Timeout:       cc.Timeout,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/oauth2/pkce.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/oauth2/pkce.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -21,7 +21,7 @@ const (
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
// A fresh verifier should be generated for each authorization.
 | 
					// A fresh verifier should be generated for each authorization.
 | 
				
			||||||
// S256ChallengeOption(verifier) should then be passed to Config.AuthCodeURL
 | 
					// S256ChallengeOption(verifier) should then be passed to Config.AuthCodeURL
 | 
				
			||||||
// (or Config.DeviceAccess) and VerifierOption(verifier) to Config.Exchange
 | 
					// (or Config.DeviceAuth) and VerifierOption(verifier) to Config.Exchange
 | 
				
			||||||
// (or Config.DeviceAccessToken).
 | 
					// (or Config.DeviceAccessToken).
 | 
				
			||||||
func GenerateVerifier() string {
 | 
					func GenerateVerifier() string {
 | 
				
			||||||
	// "RECOMMENDED that the output of a suitable random number generator be
 | 
						// "RECOMMENDED that the output of a suitable random number generator be
 | 
				
			||||||
@@ -51,7 +51,7 @@ func S256ChallengeFromVerifier(verifier string) string {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// S256ChallengeOption derives a PKCE code challenge derived from verifier with
 | 
					// S256ChallengeOption derives a PKCE code challenge derived from verifier with
 | 
				
			||||||
// method S256. It should be passed to Config.AuthCodeURL or Config.DeviceAccess
 | 
					// method S256. It should be passed to Config.AuthCodeURL or Config.DeviceAuth
 | 
				
			||||||
// only.
 | 
					// only.
 | 
				
			||||||
func S256ChallengeOption(verifier string) AuthCodeOption {
 | 
					func S256ChallengeOption(verifier string) AuthCodeOption {
 | 
				
			||||||
	return challengeOption{
 | 
						return challengeOption{
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sync/errgroup/errgroup.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sync/errgroup/errgroup.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -46,7 +46,7 @@ func (g *Group) done() {
 | 
				
			|||||||
// returns a non-nil error or the first time Wait returns, whichever occurs
 | 
					// returns a non-nil error or the first time Wait returns, whichever occurs
 | 
				
			||||||
// first.
 | 
					// first.
 | 
				
			||||||
func WithContext(ctx context.Context) (*Group, context.Context) {
 | 
					func WithContext(ctx context.Context) (*Group, context.Context) {
 | 
				
			||||||
	ctx, cancel := withCancelCause(ctx)
 | 
						ctx, cancel := context.WithCancelCause(ctx)
 | 
				
			||||||
	return &Group{cancel: cancel}, ctx
 | 
						return &Group{cancel: cancel}, ctx
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -118,6 +118,7 @@ func (g *Group) TryGo(f func() error) bool {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// SetLimit limits the number of active goroutines in this group to at most n.
 | 
					// SetLimit limits the number of active goroutines in this group to at most n.
 | 
				
			||||||
// A negative value indicates no limit.
 | 
					// A negative value indicates no limit.
 | 
				
			||||||
 | 
					// A limit of zero will prevent any new goroutines from being added.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Any subsequent call to the Go method will block until it can add an active
 | 
					// Any subsequent call to the Go method will block until it can add an active
 | 
				
			||||||
// goroutine without exceeding the configured limit.
 | 
					// goroutine without exceeding the configured limit.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/sync/errgroup/go120.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/sync/errgroup/go120.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,13 +0,0 @@
 | 
				
			|||||||
// Copyright 2023 The Go Authors. All rights reserved.
 | 
					 | 
				
			||||||
// Use of this source code is governed by a BSD-style
 | 
					 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//go:build go1.20
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package errgroup
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import "context"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func withCancelCause(parent context.Context) (context.Context, func(error)) {
 | 
					 | 
				
			||||||
	return context.WithCancelCause(parent)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										14
									
								
								vendor/golang.org/x/sync/errgroup/pre_go120.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/golang.org/x/sync/errgroup/pre_go120.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,14 +0,0 @@
 | 
				
			|||||||
// Copyright 2023 The Go Authors. All rights reserved.
 | 
					 | 
				
			||||||
// Use of this source code is governed by a BSD-style
 | 
					 | 
				
			||||||
// license that can be found in the LICENSE file.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//go:build !go1.20
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package errgroup
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import "context"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func withCancelCause(parent context.Context) (context.Context, func(error)) {
 | 
					 | 
				
			||||||
	ctx, cancel := context.WithCancel(parent)
 | 
					 | 
				
			||||||
	return ctx, func(error) { cancel() }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/cpu/cpu.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/cpu/cpu.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -72,6 +72,9 @@ var X86 struct {
 | 
				
			|||||||
	HasSSSE3            bool // Supplemental streaming SIMD extension 3
 | 
						HasSSSE3            bool // Supplemental streaming SIMD extension 3
 | 
				
			||||||
	HasSSE41            bool // Streaming SIMD extension 4 and 4.1
 | 
						HasSSE41            bool // Streaming SIMD extension 4 and 4.1
 | 
				
			||||||
	HasSSE42            bool // Streaming SIMD extension 4 and 4.2
 | 
						HasSSE42            bool // Streaming SIMD extension 4 and 4.2
 | 
				
			||||||
 | 
						HasAVXIFMA          bool // Advanced vector extension Integer Fused Multiply Add
 | 
				
			||||||
 | 
						HasAVXVNNI          bool // Advanced vector extension Vector Neural Network Instructions
 | 
				
			||||||
 | 
						HasAVXVNNIInt8      bool // Advanced vector extension Vector Neural Network Int8 instructions
 | 
				
			||||||
	_                   CacheLinePad
 | 
						_                   CacheLinePad
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										21
									
								
								vendor/golang.org/x/sys/cpu/cpu_x86.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/golang.org/x/sys/cpu/cpu_x86.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -53,6 +53,9 @@ func initOptions() {
 | 
				
			|||||||
		{Name: "sse41", Feature: &X86.HasSSE41},
 | 
							{Name: "sse41", Feature: &X86.HasSSE41},
 | 
				
			||||||
		{Name: "sse42", Feature: &X86.HasSSE42},
 | 
							{Name: "sse42", Feature: &X86.HasSSE42},
 | 
				
			||||||
		{Name: "ssse3", Feature: &X86.HasSSSE3},
 | 
							{Name: "ssse3", Feature: &X86.HasSSSE3},
 | 
				
			||||||
 | 
							{Name: "avxifma", Feature: &X86.HasAVXIFMA},
 | 
				
			||||||
 | 
							{Name: "avxvnni", Feature: &X86.HasAVXVNNI},
 | 
				
			||||||
 | 
							{Name: "avxvnniint8", Feature: &X86.HasAVXVNNIInt8},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// These capabilities should always be enabled on amd64:
 | 
							// These capabilities should always be enabled on amd64:
 | 
				
			||||||
		{Name: "sse2", Feature: &X86.HasSSE2, Required: runtime.GOARCH == "amd64"},
 | 
							{Name: "sse2", Feature: &X86.HasSSE2, Required: runtime.GOARCH == "amd64"},
 | 
				
			||||||
@@ -106,7 +109,7 @@ func archInit() {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, ebx7, ecx7, edx7 := cpuid(7, 0)
 | 
						eax7, ebx7, ecx7, edx7 := cpuid(7, 0)
 | 
				
			||||||
	X86.HasBMI1 = isSet(3, ebx7)
 | 
						X86.HasBMI1 = isSet(3, ebx7)
 | 
				
			||||||
	X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX
 | 
						X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX
 | 
				
			||||||
	X86.HasBMI2 = isSet(8, ebx7)
 | 
						X86.HasBMI2 = isSet(8, ebx7)
 | 
				
			||||||
@@ -134,14 +137,24 @@ func archInit() {
 | 
				
			|||||||
		X86.HasAVX512VAES = isSet(9, ecx7)
 | 
							X86.HasAVX512VAES = isSet(9, ecx7)
 | 
				
			||||||
		X86.HasAVX512VBMI2 = isSet(6, ecx7)
 | 
							X86.HasAVX512VBMI2 = isSet(6, ecx7)
 | 
				
			||||||
		X86.HasAVX512BITALG = isSet(12, ecx7)
 | 
							X86.HasAVX512BITALG = isSet(12, ecx7)
 | 
				
			||||||
 | 
					 | 
				
			||||||
		eax71, _, _, _ := cpuid(7, 1)
 | 
					 | 
				
			||||||
		X86.HasAVX512BF16 = isSet(5, eax71)
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	X86.HasAMXTile = isSet(24, edx7)
 | 
						X86.HasAMXTile = isSet(24, edx7)
 | 
				
			||||||
	X86.HasAMXInt8 = isSet(25, edx7)
 | 
						X86.HasAMXInt8 = isSet(25, edx7)
 | 
				
			||||||
	X86.HasAMXBF16 = isSet(22, edx7)
 | 
						X86.HasAMXBF16 = isSet(22, edx7)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// These features depend on the second level of extended features.
 | 
				
			||||||
 | 
						if eax7 >= 1 {
 | 
				
			||||||
 | 
							eax71, _, _, edx71 := cpuid(7, 1)
 | 
				
			||||||
 | 
							if X86.HasAVX512 {
 | 
				
			||||||
 | 
								X86.HasAVX512BF16 = isSet(5, eax71)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if X86.HasAVX {
 | 
				
			||||||
 | 
								X86.HasAVXIFMA = isSet(23, eax71)
 | 
				
			||||||
 | 
								X86.HasAVXVNNI = isSet(4, eax71)
 | 
				
			||||||
 | 
								X86.HasAVXVNNIInt8 = isSet(4, edx71)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func isSet(bitpos uint, value uint32) bool {
 | 
					func isSet(bitpos uint, value uint32) bool {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										36
									
								
								vendor/golang.org/x/sys/unix/auxv.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								vendor/golang.org/x/sys/unix/auxv.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					// Copyright 2025 The Go Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//go:build go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package unix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"syscall"
 | 
				
			||||||
 | 
						"unsafe"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//go:linkname runtime_getAuxv runtime.getAuxv
 | 
				
			||||||
 | 
					func runtime_getAuxv() []uintptr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Auxv returns the ELF auxiliary vector as a sequence of key/value pairs.
 | 
				
			||||||
 | 
					// The returned slice is always a fresh copy, owned by the caller.
 | 
				
			||||||
 | 
					// It returns an error on non-ELF platforms, or if the auxiliary vector cannot be accessed,
 | 
				
			||||||
 | 
					// which happens in some locked-down environments and build modes.
 | 
				
			||||||
 | 
					func Auxv() ([][2]uintptr, error) {
 | 
				
			||||||
 | 
						vec := runtime_getAuxv()
 | 
				
			||||||
 | 
						vecLen := len(vec)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if vecLen == 0 {
 | 
				
			||||||
 | 
							return nil, syscall.ENOENT
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if vecLen%2 != 0 {
 | 
				
			||||||
 | 
							return nil, syscall.EINVAL
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						result := make([]uintptr, vecLen)
 | 
				
			||||||
 | 
						copy(result, vec)
 | 
				
			||||||
 | 
						return unsafe.Slice((*[2]uintptr)(unsafe.Pointer(&result[0])), vecLen/2), nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/sys/unix/auxv_unsupported.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/sys/unix/auxv_unsupported.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					// Copyright 2025 The Go Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a BSD-style
 | 
				
			||||||
 | 
					// license that can be found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//go:build !go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package unix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "syscall"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Auxv() ([][2]uintptr, error) {
 | 
				
			||||||
 | 
						return nil, syscall.ENOTSUP
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										12
									
								
								vendor/golang.org/x/sys/unix/syscall_dragonfly.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/golang.org/x/sys/unix/syscall_dragonfly.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -246,6 +246,18 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
 | 
				
			|||||||
	return sendfile(outfd, infd, offset, count)
 | 
						return sendfile(outfd, infd, offset, count)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Dup3(oldfd, newfd, flags int) error {
 | 
				
			||||||
 | 
						if oldfd == newfd || flags&^O_CLOEXEC != 0 {
 | 
				
			||||||
 | 
							return EINVAL
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						how := F_DUP2FD
 | 
				
			||||||
 | 
						if flags&O_CLOEXEC != 0 {
 | 
				
			||||||
 | 
							how = F_DUP2FD_CLOEXEC
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						_, err := fcntl(oldfd, how, newfd)
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Exposed directly
 | 
					 * Exposed directly
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										87
									
								
								vendor/golang.org/x/sys/unix/syscall_solaris.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										87
									
								
								vendor/golang.org/x/sys/unix/syscall_solaris.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1102,3 +1102,90 @@ func (s *Strioctl) SetInt(i int) {
 | 
				
			|||||||
func IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) {
 | 
					func IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) {
 | 
				
			||||||
	return ioctlPtrRet(fd, req, unsafe.Pointer(s))
 | 
						return ioctlPtrRet(fd, req, unsafe.Pointer(s))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Ucred Helpers
 | 
				
			||||||
 | 
					// See ucred(3c) and getpeerucred(3c)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//sys	getpeerucred(fd uintptr, ucred *uintptr) (err error)
 | 
				
			||||||
 | 
					//sys	ucredFree(ucred uintptr) = ucred_free
 | 
				
			||||||
 | 
					//sys	ucredGet(pid int) (ucred uintptr, err error) = ucred_get
 | 
				
			||||||
 | 
					//sys	ucredGeteuid(ucred uintptr) (uid int) = ucred_geteuid
 | 
				
			||||||
 | 
					//sys	ucredGetegid(ucred uintptr) (gid int) = ucred_getegid
 | 
				
			||||||
 | 
					//sys	ucredGetruid(ucred uintptr) (uid int) = ucred_getruid
 | 
				
			||||||
 | 
					//sys	ucredGetrgid(ucred uintptr) (gid int) = ucred_getrgid
 | 
				
			||||||
 | 
					//sys	ucredGetsuid(ucred uintptr) (uid int) = ucred_getsuid
 | 
				
			||||||
 | 
					//sys	ucredGetsgid(ucred uintptr) (gid int) = ucred_getsgid
 | 
				
			||||||
 | 
					//sys	ucredGetpid(ucred uintptr) (pid int) = ucred_getpid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Ucred is an opaque struct that holds user credentials.
 | 
				
			||||||
 | 
					type Ucred struct {
 | 
				
			||||||
 | 
						ucred uintptr
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// We need to ensure that ucredFree is called on the underlying ucred
 | 
				
			||||||
 | 
					// when the Ucred is garbage collected.
 | 
				
			||||||
 | 
					func ucredFinalizer(u *Ucred) {
 | 
				
			||||||
 | 
						ucredFree(u.ucred)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func GetPeerUcred(fd uintptr) (*Ucred, error) {
 | 
				
			||||||
 | 
						var ucred uintptr
 | 
				
			||||||
 | 
						err := getpeerucred(fd, &ucred)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						result := &Ucred{
 | 
				
			||||||
 | 
							ucred: ucred,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// set the finalizer on the result so that the ucred will be freed
 | 
				
			||||||
 | 
						runtime.SetFinalizer(result, ucredFinalizer)
 | 
				
			||||||
 | 
						return result, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func UcredGet(pid int) (*Ucred, error) {
 | 
				
			||||||
 | 
						ucred, err := ucredGet(pid)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						result := &Ucred{
 | 
				
			||||||
 | 
							ucred: ucred,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// set the finalizer on the result so that the ucred will be freed
 | 
				
			||||||
 | 
						runtime.SetFinalizer(result, ucredFinalizer)
 | 
				
			||||||
 | 
						return result, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (u *Ucred) Geteuid() int {
 | 
				
			||||||
 | 
						defer runtime.KeepAlive(u)
 | 
				
			||||||
 | 
						return ucredGeteuid(u.ucred)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (u *Ucred) Getruid() int {
 | 
				
			||||||
 | 
						defer runtime.KeepAlive(u)
 | 
				
			||||||
 | 
						return ucredGetruid(u.ucred)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (u *Ucred) Getsuid() int {
 | 
				
			||||||
 | 
						defer runtime.KeepAlive(u)
 | 
				
			||||||
 | 
						return ucredGetsuid(u.ucred)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (u *Ucred) Getegid() int {
 | 
				
			||||||
 | 
						defer runtime.KeepAlive(u)
 | 
				
			||||||
 | 
						return ucredGetegid(u.ucred)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (u *Ucred) Getrgid() int {
 | 
				
			||||||
 | 
						defer runtime.KeepAlive(u)
 | 
				
			||||||
 | 
						return ucredGetrgid(u.ucred)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (u *Ucred) Getsgid() int {
 | 
				
			||||||
 | 
						defer runtime.KeepAlive(u)
 | 
				
			||||||
 | 
						return ucredGetsgid(u.ucred)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (u *Ucred) Getpid() int {
 | 
				
			||||||
 | 
						defer runtime.KeepAlive(u)
 | 
				
			||||||
 | 
						return ucredGetpid(u.ucred)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										20
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1245,6 +1245,7 @@ const (
 | 
				
			|||||||
	FAN_REPORT_DFID_NAME                        = 0xc00
 | 
						FAN_REPORT_DFID_NAME                        = 0xc00
 | 
				
			||||||
	FAN_REPORT_DFID_NAME_TARGET                 = 0x1e00
 | 
						FAN_REPORT_DFID_NAME_TARGET                 = 0x1e00
 | 
				
			||||||
	FAN_REPORT_DIR_FID                          = 0x400
 | 
						FAN_REPORT_DIR_FID                          = 0x400
 | 
				
			||||||
 | 
						FAN_REPORT_FD_ERROR                         = 0x2000
 | 
				
			||||||
	FAN_REPORT_FID                              = 0x200
 | 
						FAN_REPORT_FID                              = 0x200
 | 
				
			||||||
	FAN_REPORT_NAME                             = 0x800
 | 
						FAN_REPORT_NAME                             = 0x800
 | 
				
			||||||
	FAN_REPORT_PIDFD                            = 0x80
 | 
						FAN_REPORT_PIDFD                            = 0x80
 | 
				
			||||||
@@ -1330,8 +1331,10 @@ const (
 | 
				
			|||||||
	FUSE_SUPER_MAGIC                            = 0x65735546
 | 
						FUSE_SUPER_MAGIC                            = 0x65735546
 | 
				
			||||||
	FUTEXFS_SUPER_MAGIC                         = 0xbad1dea
 | 
						FUTEXFS_SUPER_MAGIC                         = 0xbad1dea
 | 
				
			||||||
	F_ADD_SEALS                                 = 0x409
 | 
						F_ADD_SEALS                                 = 0x409
 | 
				
			||||||
 | 
						F_CREATED_QUERY                             = 0x404
 | 
				
			||||||
	F_DUPFD                                     = 0x0
 | 
						F_DUPFD                                     = 0x0
 | 
				
			||||||
	F_DUPFD_CLOEXEC                             = 0x406
 | 
						F_DUPFD_CLOEXEC                             = 0x406
 | 
				
			||||||
 | 
						F_DUPFD_QUERY                               = 0x403
 | 
				
			||||||
	F_EXLCK                                     = 0x4
 | 
						F_EXLCK                                     = 0x4
 | 
				
			||||||
	F_GETFD                                     = 0x1
 | 
						F_GETFD                                     = 0x1
 | 
				
			||||||
	F_GETFL                                     = 0x3
 | 
						F_GETFL                                     = 0x3
 | 
				
			||||||
@@ -1551,6 +1554,7 @@ const (
 | 
				
			|||||||
	IPPROTO_ROUTING                             = 0x2b
 | 
						IPPROTO_ROUTING                             = 0x2b
 | 
				
			||||||
	IPPROTO_RSVP                                = 0x2e
 | 
						IPPROTO_RSVP                                = 0x2e
 | 
				
			||||||
	IPPROTO_SCTP                                = 0x84
 | 
						IPPROTO_SCTP                                = 0x84
 | 
				
			||||||
 | 
						IPPROTO_SMC                                 = 0x100
 | 
				
			||||||
	IPPROTO_TCP                                 = 0x6
 | 
						IPPROTO_TCP                                 = 0x6
 | 
				
			||||||
	IPPROTO_TP                                  = 0x1d
 | 
						IPPROTO_TP                                  = 0x1d
 | 
				
			||||||
	IPPROTO_UDP                                 = 0x11
 | 
						IPPROTO_UDP                                 = 0x11
 | 
				
			||||||
@@ -1623,6 +1627,8 @@ const (
 | 
				
			|||||||
	IPV6_UNICAST_IF                             = 0x4c
 | 
						IPV6_UNICAST_IF                             = 0x4c
 | 
				
			||||||
	IPV6_USER_FLOW                              = 0xe
 | 
						IPV6_USER_FLOW                              = 0xe
 | 
				
			||||||
	IPV6_V6ONLY                                 = 0x1a
 | 
						IPV6_V6ONLY                                 = 0x1a
 | 
				
			||||||
 | 
						IPV6_VERSION                                = 0x60
 | 
				
			||||||
 | 
						IPV6_VERSION_MASK                           = 0xf0
 | 
				
			||||||
	IPV6_XFRM_POLICY                            = 0x23
 | 
						IPV6_XFRM_POLICY                            = 0x23
 | 
				
			||||||
	IP_ADD_MEMBERSHIP                           = 0x23
 | 
						IP_ADD_MEMBERSHIP                           = 0x23
 | 
				
			||||||
	IP_ADD_SOURCE_MEMBERSHIP                    = 0x27
 | 
						IP_ADD_SOURCE_MEMBERSHIP                    = 0x27
 | 
				
			||||||
@@ -1867,6 +1873,7 @@ const (
 | 
				
			|||||||
	MADV_UNMERGEABLE                            = 0xd
 | 
						MADV_UNMERGEABLE                            = 0xd
 | 
				
			||||||
	MADV_WILLNEED                               = 0x3
 | 
						MADV_WILLNEED                               = 0x3
 | 
				
			||||||
	MADV_WIPEONFORK                             = 0x12
 | 
						MADV_WIPEONFORK                             = 0x12
 | 
				
			||||||
 | 
						MAP_DROPPABLE                               = 0x8
 | 
				
			||||||
	MAP_FILE                                    = 0x0
 | 
						MAP_FILE                                    = 0x0
 | 
				
			||||||
	MAP_FIXED                                   = 0x10
 | 
						MAP_FIXED                                   = 0x10
 | 
				
			||||||
	MAP_FIXED_NOREPLACE                         = 0x100000
 | 
						MAP_FIXED_NOREPLACE                         = 0x100000
 | 
				
			||||||
@@ -1967,6 +1974,7 @@ const (
 | 
				
			|||||||
	MSG_PEEK                                    = 0x2
 | 
						MSG_PEEK                                    = 0x2
 | 
				
			||||||
	MSG_PROXY                                   = 0x10
 | 
						MSG_PROXY                                   = 0x10
 | 
				
			||||||
	MSG_RST                                     = 0x1000
 | 
						MSG_RST                                     = 0x1000
 | 
				
			||||||
 | 
						MSG_SOCK_DEVMEM                             = 0x2000000
 | 
				
			||||||
	MSG_SYN                                     = 0x400
 | 
						MSG_SYN                                     = 0x400
 | 
				
			||||||
	MSG_TRUNC                                   = 0x20
 | 
						MSG_TRUNC                                   = 0x20
 | 
				
			||||||
	MSG_TRYHARD                                 = 0x4
 | 
						MSG_TRYHARD                                 = 0x4
 | 
				
			||||||
@@ -2083,6 +2091,7 @@ const (
 | 
				
			|||||||
	NFC_ATR_REQ_MAXSIZE                         = 0x40
 | 
						NFC_ATR_REQ_MAXSIZE                         = 0x40
 | 
				
			||||||
	NFC_ATR_RES_GB_MAXSIZE                      = 0x2f
 | 
						NFC_ATR_RES_GB_MAXSIZE                      = 0x2f
 | 
				
			||||||
	NFC_ATR_RES_MAXSIZE                         = 0x40
 | 
						NFC_ATR_RES_MAXSIZE                         = 0x40
 | 
				
			||||||
 | 
						NFC_ATS_MAXSIZE                             = 0x14
 | 
				
			||||||
	NFC_COMM_ACTIVE                             = 0x0
 | 
						NFC_COMM_ACTIVE                             = 0x0
 | 
				
			||||||
	NFC_COMM_PASSIVE                            = 0x1
 | 
						NFC_COMM_PASSIVE                            = 0x1
 | 
				
			||||||
	NFC_DEVICE_NAME_MAXSIZE                     = 0x8
 | 
						NFC_DEVICE_NAME_MAXSIZE                     = 0x8
 | 
				
			||||||
@@ -2163,6 +2172,7 @@ const (
 | 
				
			|||||||
	NFNL_SUBSYS_QUEUE                           = 0x3
 | 
						NFNL_SUBSYS_QUEUE                           = 0x3
 | 
				
			||||||
	NFNL_SUBSYS_ULOG                            = 0x4
 | 
						NFNL_SUBSYS_ULOG                            = 0x4
 | 
				
			||||||
	NFS_SUPER_MAGIC                             = 0x6969
 | 
						NFS_SUPER_MAGIC                             = 0x6969
 | 
				
			||||||
 | 
						NFT_BITWISE_BOOL                            = 0x0
 | 
				
			||||||
	NFT_CHAIN_FLAGS                             = 0x7
 | 
						NFT_CHAIN_FLAGS                             = 0x7
 | 
				
			||||||
	NFT_CHAIN_MAXNAMELEN                        = 0x100
 | 
						NFT_CHAIN_MAXNAMELEN                        = 0x100
 | 
				
			||||||
	NFT_CT_MAX                                  = 0x17
 | 
						NFT_CT_MAX                                  = 0x17
 | 
				
			||||||
@@ -2491,6 +2501,7 @@ const (
 | 
				
			|||||||
	PR_GET_PDEATHSIG                            = 0x2
 | 
						PR_GET_PDEATHSIG                            = 0x2
 | 
				
			||||||
	PR_GET_SECCOMP                              = 0x15
 | 
						PR_GET_SECCOMP                              = 0x15
 | 
				
			||||||
	PR_GET_SECUREBITS                           = 0x1b
 | 
						PR_GET_SECUREBITS                           = 0x1b
 | 
				
			||||||
 | 
						PR_GET_SHADOW_STACK_STATUS                  = 0x4a
 | 
				
			||||||
	PR_GET_SPECULATION_CTRL                     = 0x34
 | 
						PR_GET_SPECULATION_CTRL                     = 0x34
 | 
				
			||||||
	PR_GET_TAGGED_ADDR_CTRL                     = 0x38
 | 
						PR_GET_TAGGED_ADDR_CTRL                     = 0x38
 | 
				
			||||||
	PR_GET_THP_DISABLE                          = 0x2a
 | 
						PR_GET_THP_DISABLE                          = 0x2a
 | 
				
			||||||
@@ -2499,6 +2510,7 @@ const (
 | 
				
			|||||||
	PR_GET_TIMING                               = 0xd
 | 
						PR_GET_TIMING                               = 0xd
 | 
				
			||||||
	PR_GET_TSC                                  = 0x19
 | 
						PR_GET_TSC                                  = 0x19
 | 
				
			||||||
	PR_GET_UNALIGN                              = 0x5
 | 
						PR_GET_UNALIGN                              = 0x5
 | 
				
			||||||
 | 
						PR_LOCK_SHADOW_STACK_STATUS                 = 0x4c
 | 
				
			||||||
	PR_MCE_KILL                                 = 0x21
 | 
						PR_MCE_KILL                                 = 0x21
 | 
				
			||||||
	PR_MCE_KILL_CLEAR                           = 0x0
 | 
						PR_MCE_KILL_CLEAR                           = 0x0
 | 
				
			||||||
	PR_MCE_KILL_DEFAULT                         = 0x2
 | 
						PR_MCE_KILL_DEFAULT                         = 0x2
 | 
				
			||||||
@@ -2525,6 +2537,8 @@ const (
 | 
				
			|||||||
	PR_PAC_GET_ENABLED_KEYS                     = 0x3d
 | 
						PR_PAC_GET_ENABLED_KEYS                     = 0x3d
 | 
				
			||||||
	PR_PAC_RESET_KEYS                           = 0x36
 | 
						PR_PAC_RESET_KEYS                           = 0x36
 | 
				
			||||||
	PR_PAC_SET_ENABLED_KEYS                     = 0x3c
 | 
						PR_PAC_SET_ENABLED_KEYS                     = 0x3c
 | 
				
			||||||
 | 
						PR_PMLEN_MASK                               = 0x7f000000
 | 
				
			||||||
 | 
						PR_PMLEN_SHIFT                              = 0x18
 | 
				
			||||||
	PR_PPC_DEXCR_CTRL_CLEAR                     = 0x4
 | 
						PR_PPC_DEXCR_CTRL_CLEAR                     = 0x4
 | 
				
			||||||
	PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC              = 0x10
 | 
						PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC              = 0x10
 | 
				
			||||||
	PR_PPC_DEXCR_CTRL_EDITABLE                  = 0x1
 | 
						PR_PPC_DEXCR_CTRL_EDITABLE                  = 0x1
 | 
				
			||||||
@@ -2592,6 +2606,7 @@ const (
 | 
				
			|||||||
	PR_SET_PTRACER                              = 0x59616d61
 | 
						PR_SET_PTRACER                              = 0x59616d61
 | 
				
			||||||
	PR_SET_SECCOMP                              = 0x16
 | 
						PR_SET_SECCOMP                              = 0x16
 | 
				
			||||||
	PR_SET_SECUREBITS                           = 0x1c
 | 
						PR_SET_SECUREBITS                           = 0x1c
 | 
				
			||||||
 | 
						PR_SET_SHADOW_STACK_STATUS                  = 0x4b
 | 
				
			||||||
	PR_SET_SPECULATION_CTRL                     = 0x35
 | 
						PR_SET_SPECULATION_CTRL                     = 0x35
 | 
				
			||||||
	PR_SET_SYSCALL_USER_DISPATCH                = 0x3b
 | 
						PR_SET_SYSCALL_USER_DISPATCH                = 0x3b
 | 
				
			||||||
	PR_SET_TAGGED_ADDR_CTRL                     = 0x37
 | 
						PR_SET_TAGGED_ADDR_CTRL                     = 0x37
 | 
				
			||||||
@@ -2602,6 +2617,9 @@ const (
 | 
				
			|||||||
	PR_SET_UNALIGN                              = 0x6
 | 
						PR_SET_UNALIGN                              = 0x6
 | 
				
			||||||
	PR_SET_VMA                                  = 0x53564d41
 | 
						PR_SET_VMA                                  = 0x53564d41
 | 
				
			||||||
	PR_SET_VMA_ANON_NAME                        = 0x0
 | 
						PR_SET_VMA_ANON_NAME                        = 0x0
 | 
				
			||||||
 | 
						PR_SHADOW_STACK_ENABLE                      = 0x1
 | 
				
			||||||
 | 
						PR_SHADOW_STACK_PUSH                        = 0x4
 | 
				
			||||||
 | 
						PR_SHADOW_STACK_WRITE                       = 0x2
 | 
				
			||||||
	PR_SME_GET_VL                               = 0x40
 | 
						PR_SME_GET_VL                               = 0x40
 | 
				
			||||||
	PR_SME_SET_VL                               = 0x3f
 | 
						PR_SME_SET_VL                               = 0x3f
 | 
				
			||||||
	PR_SME_SET_VL_ONEXEC                        = 0x40000
 | 
						PR_SME_SET_VL_ONEXEC                        = 0x40000
 | 
				
			||||||
@@ -2911,7 +2929,6 @@ const (
 | 
				
			|||||||
	RTM_NEWNEXTHOP                              = 0x68
 | 
						RTM_NEWNEXTHOP                              = 0x68
 | 
				
			||||||
	RTM_NEWNEXTHOPBUCKET                        = 0x74
 | 
						RTM_NEWNEXTHOPBUCKET                        = 0x74
 | 
				
			||||||
	RTM_NEWNSID                                 = 0x58
 | 
						RTM_NEWNSID                                 = 0x58
 | 
				
			||||||
	RTM_NEWNVLAN                                = 0x70
 | 
					 | 
				
			||||||
	RTM_NEWPREFIX                               = 0x34
 | 
						RTM_NEWPREFIX                               = 0x34
 | 
				
			||||||
	RTM_NEWQDISC                                = 0x24
 | 
						RTM_NEWQDISC                                = 0x24
 | 
				
			||||||
	RTM_NEWROUTE                                = 0x18
 | 
						RTM_NEWROUTE                                = 0x18
 | 
				
			||||||
@@ -2920,6 +2937,7 @@ const (
 | 
				
			|||||||
	RTM_NEWTCLASS                               = 0x28
 | 
						RTM_NEWTCLASS                               = 0x28
 | 
				
			||||||
	RTM_NEWTFILTER                              = 0x2c
 | 
						RTM_NEWTFILTER                              = 0x2c
 | 
				
			||||||
	RTM_NEWTUNNEL                               = 0x78
 | 
						RTM_NEWTUNNEL                               = 0x78
 | 
				
			||||||
 | 
						RTM_NEWVLAN                                 = 0x70
 | 
				
			||||||
	RTM_NR_FAMILIES                             = 0x1b
 | 
						RTM_NR_FAMILIES                             = 0x1b
 | 
				
			||||||
	RTM_NR_MSGTYPES                             = 0x6c
 | 
						RTM_NR_MSGTYPES                             = 0x6c
 | 
				
			||||||
	RTM_SETDCB                                  = 0x4f
 | 
						RTM_SETDCB                                  = 0x4f
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_386.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_386.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -116,6 +116,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x80000
 | 
						IN_CLOEXEC                       = 0x80000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x800
 | 
						IN_NONBLOCK                      = 0x800
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xffffff0f
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xffff0f00
 | 
				
			||||||
	ISIG                             = 0x1
 | 
						ISIG                             = 0x1
 | 
				
			||||||
	IUCLC                            = 0x200
 | 
						IUCLC                            = 0x200
 | 
				
			||||||
	IXOFF                            = 0x1000
 | 
						IXOFF                            = 0x1000
 | 
				
			||||||
@@ -304,6 +306,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x23
 | 
						SCM_TIMESTAMPNS                  = 0x23
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x51
 | 
				
			||||||
	SCM_TXTIME                       = 0x3d
 | 
						SCM_TXTIME                       = 0x3d
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x29
 | 
						SCM_WIFI_STATUS                  = 0x29
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -116,6 +116,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x80000
 | 
						IN_CLOEXEC                       = 0x80000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x800
 | 
						IN_NONBLOCK                      = 0x800
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xffffff0f
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xffff0f00
 | 
				
			||||||
	ISIG                             = 0x1
 | 
						ISIG                             = 0x1
 | 
				
			||||||
	IUCLC                            = 0x200
 | 
						IUCLC                            = 0x200
 | 
				
			||||||
	IXOFF                            = 0x1000
 | 
						IXOFF                            = 0x1000
 | 
				
			||||||
@@ -305,6 +307,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x23
 | 
						SCM_TIMESTAMPNS                  = 0x23
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x51
 | 
				
			||||||
	SCM_TXTIME                       = 0x3d
 | 
						SCM_TXTIME                       = 0x3d
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x29
 | 
						SCM_WIFI_STATUS                  = 0x29
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -115,6 +115,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x80000
 | 
						IN_CLOEXEC                       = 0x80000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x800
 | 
						IN_NONBLOCK                      = 0x800
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xffffff0f
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xffff0f00
 | 
				
			||||||
	ISIG                             = 0x1
 | 
						ISIG                             = 0x1
 | 
				
			||||||
	IUCLC                            = 0x200
 | 
						IUCLC                            = 0x200
 | 
				
			||||||
	IXOFF                            = 0x1000
 | 
						IXOFF                            = 0x1000
 | 
				
			||||||
@@ -310,6 +312,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x23
 | 
						SCM_TIMESTAMPNS                  = 0x23
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x51
 | 
				
			||||||
	SCM_TXTIME                       = 0x3d
 | 
						SCM_TXTIME                       = 0x3d
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x29
 | 
						SCM_WIFI_STATUS                  = 0x29
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -109,6 +109,7 @@ const (
 | 
				
			|||||||
	F_SETOWN                         = 0x8
 | 
						F_SETOWN                         = 0x8
 | 
				
			||||||
	F_UNLCK                          = 0x2
 | 
						F_UNLCK                          = 0x2
 | 
				
			||||||
	F_WRLCK                          = 0x1
 | 
						F_WRLCK                          = 0x1
 | 
				
			||||||
 | 
						GCS_MAGIC                        = 0x47435300
 | 
				
			||||||
	HIDIOCGRAWINFO                   = 0x80084803
 | 
						HIDIOCGRAWINFO                   = 0x80084803
 | 
				
			||||||
	HIDIOCGRDESC                     = 0x90044802
 | 
						HIDIOCGRDESC                     = 0x90044802
 | 
				
			||||||
	HIDIOCGRDESCSIZE                 = 0x80044801
 | 
						HIDIOCGRDESCSIZE                 = 0x80044801
 | 
				
			||||||
@@ -119,6 +120,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x80000
 | 
						IN_CLOEXEC                       = 0x80000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x800
 | 
						IN_NONBLOCK                      = 0x800
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xffffff0f
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xffff0f00
 | 
				
			||||||
	ISIG                             = 0x1
 | 
						ISIG                             = 0x1
 | 
				
			||||||
	IUCLC                            = 0x200
 | 
						IUCLC                            = 0x200
 | 
				
			||||||
	IXOFF                            = 0x1000
 | 
						IXOFF                            = 0x1000
 | 
				
			||||||
@@ -302,6 +305,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x23
 | 
						SCM_TIMESTAMPNS                  = 0x23
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x51
 | 
				
			||||||
	SCM_TXTIME                       = 0x3d
 | 
						SCM_TXTIME                       = 0x3d
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x29
 | 
						SCM_WIFI_STATUS                  = 0x29
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -116,6 +116,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x80000
 | 
						IN_CLOEXEC                       = 0x80000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x800
 | 
						IN_NONBLOCK                      = 0x800
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xffffff0f
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xffff0f00
 | 
				
			||||||
	ISIG                             = 0x1
 | 
						ISIG                             = 0x1
 | 
				
			||||||
	IUCLC                            = 0x200
 | 
						IUCLC                            = 0x200
 | 
				
			||||||
	IXOFF                            = 0x1000
 | 
						IXOFF                            = 0x1000
 | 
				
			||||||
@@ -297,6 +299,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x23
 | 
						SCM_TIMESTAMPNS                  = 0x23
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x51
 | 
				
			||||||
	SCM_TXTIME                       = 0x3d
 | 
						SCM_TXTIME                       = 0x3d
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x29
 | 
						SCM_WIFI_STATUS                  = 0x29
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -115,6 +115,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x80000
 | 
						IN_CLOEXEC                       = 0x80000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x80
 | 
						IN_NONBLOCK                      = 0x80
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xfffffff
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xfffff
 | 
				
			||||||
	ISIG                             = 0x1
 | 
						ISIG                             = 0x1
 | 
				
			||||||
	IUCLC                            = 0x200
 | 
						IUCLC                            = 0x200
 | 
				
			||||||
	IXOFF                            = 0x1000
 | 
						IXOFF                            = 0x1000
 | 
				
			||||||
@@ -303,6 +305,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x23
 | 
						SCM_TIMESTAMPNS                  = 0x23
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x51
 | 
				
			||||||
	SCM_TXTIME                       = 0x3d
 | 
						SCM_TXTIME                       = 0x3d
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x29
 | 
						SCM_WIFI_STATUS                  = 0x29
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -115,6 +115,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x80000
 | 
						IN_CLOEXEC                       = 0x80000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x80
 | 
						IN_NONBLOCK                      = 0x80
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xfffffff
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xfffff
 | 
				
			||||||
	ISIG                             = 0x1
 | 
						ISIG                             = 0x1
 | 
				
			||||||
	IUCLC                            = 0x200
 | 
						IUCLC                            = 0x200
 | 
				
			||||||
	IXOFF                            = 0x1000
 | 
						IXOFF                            = 0x1000
 | 
				
			||||||
@@ -303,6 +305,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x23
 | 
						SCM_TIMESTAMPNS                  = 0x23
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x51
 | 
				
			||||||
	SCM_TXTIME                       = 0x3d
 | 
						SCM_TXTIME                       = 0x3d
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x29
 | 
						SCM_WIFI_STATUS                  = 0x29
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -115,6 +115,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x80000
 | 
						IN_CLOEXEC                       = 0x80000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x80
 | 
						IN_NONBLOCK                      = 0x80
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xffffff0f
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xffff0f00
 | 
				
			||||||
	ISIG                             = 0x1
 | 
						ISIG                             = 0x1
 | 
				
			||||||
	IUCLC                            = 0x200
 | 
						IUCLC                            = 0x200
 | 
				
			||||||
	IXOFF                            = 0x1000
 | 
						IXOFF                            = 0x1000
 | 
				
			||||||
@@ -303,6 +305,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x23
 | 
						SCM_TIMESTAMPNS                  = 0x23
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x51
 | 
				
			||||||
	SCM_TXTIME                       = 0x3d
 | 
						SCM_TXTIME                       = 0x3d
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x29
 | 
						SCM_WIFI_STATUS                  = 0x29
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -115,6 +115,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x80000
 | 
						IN_CLOEXEC                       = 0x80000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x80
 | 
						IN_NONBLOCK                      = 0x80
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xffffff0f
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xffff0f00
 | 
				
			||||||
	ISIG                             = 0x1
 | 
						ISIG                             = 0x1
 | 
				
			||||||
	IUCLC                            = 0x200
 | 
						IUCLC                            = 0x200
 | 
				
			||||||
	IXOFF                            = 0x1000
 | 
						IXOFF                            = 0x1000
 | 
				
			||||||
@@ -303,6 +305,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x23
 | 
						SCM_TIMESTAMPNS                  = 0x23
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x51
 | 
				
			||||||
	SCM_TXTIME                       = 0x3d
 | 
						SCM_TXTIME                       = 0x3d
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x29
 | 
						SCM_WIFI_STATUS                  = 0x29
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -115,6 +115,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x80000
 | 
						IN_CLOEXEC                       = 0x80000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x800
 | 
						IN_NONBLOCK                      = 0x800
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xfffffff
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xfffff
 | 
				
			||||||
	ISIG                             = 0x80
 | 
						ISIG                             = 0x80
 | 
				
			||||||
	IUCLC                            = 0x1000
 | 
						IUCLC                            = 0x1000
 | 
				
			||||||
	IXOFF                            = 0x400
 | 
						IXOFF                            = 0x400
 | 
				
			||||||
@@ -358,6 +360,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x23
 | 
						SCM_TIMESTAMPNS                  = 0x23
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x51
 | 
				
			||||||
	SCM_TXTIME                       = 0x3d
 | 
						SCM_TXTIME                       = 0x3d
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x29
 | 
						SCM_WIFI_STATUS                  = 0x29
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -115,6 +115,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x80000
 | 
						IN_CLOEXEC                       = 0x80000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x800
 | 
						IN_NONBLOCK                      = 0x800
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xfffffff
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xfffff
 | 
				
			||||||
	ISIG                             = 0x80
 | 
						ISIG                             = 0x80
 | 
				
			||||||
	IUCLC                            = 0x1000
 | 
						IUCLC                            = 0x1000
 | 
				
			||||||
	IXOFF                            = 0x400
 | 
						IXOFF                            = 0x400
 | 
				
			||||||
@@ -362,6 +364,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x23
 | 
						SCM_TIMESTAMPNS                  = 0x23
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x51
 | 
				
			||||||
	SCM_TXTIME                       = 0x3d
 | 
						SCM_TXTIME                       = 0x3d
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x29
 | 
						SCM_WIFI_STATUS                  = 0x29
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -115,6 +115,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x80000
 | 
						IN_CLOEXEC                       = 0x80000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x800
 | 
						IN_NONBLOCK                      = 0x800
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xffffff0f
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xffff0f00
 | 
				
			||||||
	ISIG                             = 0x80
 | 
						ISIG                             = 0x80
 | 
				
			||||||
	IUCLC                            = 0x1000
 | 
						IUCLC                            = 0x1000
 | 
				
			||||||
	IXOFF                            = 0x400
 | 
						IXOFF                            = 0x400
 | 
				
			||||||
@@ -362,6 +364,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x23
 | 
						SCM_TIMESTAMPNS                  = 0x23
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x51
 | 
				
			||||||
	SCM_TXTIME                       = 0x3d
 | 
						SCM_TXTIME                       = 0x3d
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x29
 | 
						SCM_WIFI_STATUS                  = 0x29
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -115,6 +115,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x80000
 | 
						IN_CLOEXEC                       = 0x80000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x800
 | 
						IN_NONBLOCK                      = 0x800
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xffffff0f
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xffff0f00
 | 
				
			||||||
	ISIG                             = 0x1
 | 
						ISIG                             = 0x1
 | 
				
			||||||
	IUCLC                            = 0x200
 | 
						IUCLC                            = 0x200
 | 
				
			||||||
	IXOFF                            = 0x1000
 | 
						IXOFF                            = 0x1000
 | 
				
			||||||
@@ -294,6 +296,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x23
 | 
						SCM_TIMESTAMPNS                  = 0x23
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x51
 | 
				
			||||||
	SCM_TXTIME                       = 0x3d
 | 
						SCM_TXTIME                       = 0x3d
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x29
 | 
						SCM_WIFI_STATUS                  = 0x29
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -115,6 +115,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x80000
 | 
						IN_CLOEXEC                       = 0x80000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x800
 | 
						IN_NONBLOCK                      = 0x800
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xfffffff
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xfffff
 | 
				
			||||||
	ISIG                             = 0x1
 | 
						ISIG                             = 0x1
 | 
				
			||||||
	IUCLC                            = 0x200
 | 
						IUCLC                            = 0x200
 | 
				
			||||||
	IXOFF                            = 0x1000
 | 
						IXOFF                            = 0x1000
 | 
				
			||||||
@@ -366,6 +368,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x36
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3a
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x23
 | 
						SCM_TIMESTAMPNS                  = 0x23
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x51
 | 
				
			||||||
	SCM_TXTIME                       = 0x3d
 | 
						SCM_TXTIME                       = 0x3d
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x29
 | 
						SCM_WIFI_STATUS                  = 0x29
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -119,6 +119,8 @@ const (
 | 
				
			|||||||
	IN_CLOEXEC                       = 0x400000
 | 
						IN_CLOEXEC                       = 0x400000
 | 
				
			||||||
	IN_NONBLOCK                      = 0x4000
 | 
						IN_NONBLOCK                      = 0x4000
 | 
				
			||||||
	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
						IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9
 | 
				
			||||||
 | 
						IPV6_FLOWINFO_MASK               = 0xfffffff
 | 
				
			||||||
 | 
						IPV6_FLOWLABEL_MASK              = 0xfffff
 | 
				
			||||||
	ISIG                             = 0x1
 | 
						ISIG                             = 0x1
 | 
				
			||||||
	IUCLC                            = 0x200
 | 
						IUCLC                            = 0x200
 | 
				
			||||||
	IXOFF                            = 0x1000
 | 
						IXOFF                            = 0x1000
 | 
				
			||||||
@@ -357,6 +359,7 @@ const (
 | 
				
			|||||||
	SCM_TIMESTAMPING_OPT_STATS       = 0x38
 | 
						SCM_TIMESTAMPING_OPT_STATS       = 0x38
 | 
				
			||||||
	SCM_TIMESTAMPING_PKTINFO         = 0x3c
 | 
						SCM_TIMESTAMPING_PKTINFO         = 0x3c
 | 
				
			||||||
	SCM_TIMESTAMPNS                  = 0x21
 | 
						SCM_TIMESTAMPNS                  = 0x21
 | 
				
			||||||
 | 
						SCM_TS_OPT_ID                    = 0x5a
 | 
				
			||||||
	SCM_TXTIME                       = 0x3f
 | 
						SCM_TXTIME                       = 0x3f
 | 
				
			||||||
	SCM_WIFI_STATUS                  = 0x25
 | 
						SCM_WIFI_STATUS                  = 0x25
 | 
				
			||||||
	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
						SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										114
									
								
								vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										114
									
								
								vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -141,6 +141,16 @@ import (
 | 
				
			|||||||
//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so"
 | 
					//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so"
 | 
				
			||||||
//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
 | 
					//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
 | 
				
			||||||
//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so"
 | 
					//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so"
 | 
				
			||||||
 | 
					//go:cgo_import_dynamic libc_getpeerucred getpeerucred "libc.so"
 | 
				
			||||||
 | 
					//go:cgo_import_dynamic libc_ucred_get ucred_get "libc.so"
 | 
				
			||||||
 | 
					//go:cgo_import_dynamic libc_ucred_geteuid ucred_geteuid "libc.so"
 | 
				
			||||||
 | 
					//go:cgo_import_dynamic libc_ucred_getegid ucred_getegid "libc.so"
 | 
				
			||||||
 | 
					//go:cgo_import_dynamic libc_ucred_getruid ucred_getruid "libc.so"
 | 
				
			||||||
 | 
					//go:cgo_import_dynamic libc_ucred_getrgid ucred_getrgid "libc.so"
 | 
				
			||||||
 | 
					//go:cgo_import_dynamic libc_ucred_getsuid ucred_getsuid "libc.so"
 | 
				
			||||||
 | 
					//go:cgo_import_dynamic libc_ucred_getsgid ucred_getsgid "libc.so"
 | 
				
			||||||
 | 
					//go:cgo_import_dynamic libc_ucred_getpid ucred_getpid "libc.so"
 | 
				
			||||||
 | 
					//go:cgo_import_dynamic libc_ucred_free ucred_free "libc.so"
 | 
				
			||||||
//go:cgo_import_dynamic libc_port_create port_create "libc.so"
 | 
					//go:cgo_import_dynamic libc_port_create port_create "libc.so"
 | 
				
			||||||
//go:cgo_import_dynamic libc_port_associate port_associate "libc.so"
 | 
					//go:cgo_import_dynamic libc_port_associate port_associate "libc.so"
 | 
				
			||||||
//go:cgo_import_dynamic libc_port_dissociate port_dissociate "libc.so"
 | 
					//go:cgo_import_dynamic libc_port_dissociate port_dissociate "libc.so"
 | 
				
			||||||
@@ -280,6 +290,16 @@ import (
 | 
				
			|||||||
//go:linkname procgetpeername libc_getpeername
 | 
					//go:linkname procgetpeername libc_getpeername
 | 
				
			||||||
//go:linkname procsetsockopt libc_setsockopt
 | 
					//go:linkname procsetsockopt libc_setsockopt
 | 
				
			||||||
//go:linkname procrecvfrom libc_recvfrom
 | 
					//go:linkname procrecvfrom libc_recvfrom
 | 
				
			||||||
 | 
					//go:linkname procgetpeerucred libc_getpeerucred
 | 
				
			||||||
 | 
					//go:linkname procucred_get libc_ucred_get
 | 
				
			||||||
 | 
					//go:linkname procucred_geteuid libc_ucred_geteuid
 | 
				
			||||||
 | 
					//go:linkname procucred_getegid libc_ucred_getegid
 | 
				
			||||||
 | 
					//go:linkname procucred_getruid libc_ucred_getruid
 | 
				
			||||||
 | 
					//go:linkname procucred_getrgid libc_ucred_getrgid
 | 
				
			||||||
 | 
					//go:linkname procucred_getsuid libc_ucred_getsuid
 | 
				
			||||||
 | 
					//go:linkname procucred_getsgid libc_ucred_getsgid
 | 
				
			||||||
 | 
					//go:linkname procucred_getpid libc_ucred_getpid
 | 
				
			||||||
 | 
					//go:linkname procucred_free libc_ucred_free
 | 
				
			||||||
//go:linkname procport_create libc_port_create
 | 
					//go:linkname procport_create libc_port_create
 | 
				
			||||||
//go:linkname procport_associate libc_port_associate
 | 
					//go:linkname procport_associate libc_port_associate
 | 
				
			||||||
//go:linkname procport_dissociate libc_port_dissociate
 | 
					//go:linkname procport_dissociate libc_port_dissociate
 | 
				
			||||||
@@ -420,6 +440,16 @@ var (
 | 
				
			|||||||
	procgetpeername,
 | 
						procgetpeername,
 | 
				
			||||||
	procsetsockopt,
 | 
						procsetsockopt,
 | 
				
			||||||
	procrecvfrom,
 | 
						procrecvfrom,
 | 
				
			||||||
 | 
						procgetpeerucred,
 | 
				
			||||||
 | 
						procucred_get,
 | 
				
			||||||
 | 
						procucred_geteuid,
 | 
				
			||||||
 | 
						procucred_getegid,
 | 
				
			||||||
 | 
						procucred_getruid,
 | 
				
			||||||
 | 
						procucred_getrgid,
 | 
				
			||||||
 | 
						procucred_getsuid,
 | 
				
			||||||
 | 
						procucred_getsgid,
 | 
				
			||||||
 | 
						procucred_getpid,
 | 
				
			||||||
 | 
						procucred_free,
 | 
				
			||||||
	procport_create,
 | 
						procport_create,
 | 
				
			||||||
	procport_associate,
 | 
						procport_associate,
 | 
				
			||||||
	procport_dissociate,
 | 
						procport_dissociate,
 | 
				
			||||||
@@ -2029,6 +2059,90 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 | 
					// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func getpeerucred(fd uintptr, ucred *uintptr) (err error) {
 | 
				
			||||||
 | 
						_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetpeerucred)), 2, uintptr(fd), uintptr(unsafe.Pointer(ucred)), 0, 0, 0, 0)
 | 
				
			||||||
 | 
						if e1 != 0 {
 | 
				
			||||||
 | 
							err = errnoErr(e1)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ucredGet(pid int) (ucred uintptr, err error) {
 | 
				
			||||||
 | 
						r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procucred_get)), 1, uintptr(pid), 0, 0, 0, 0, 0)
 | 
				
			||||||
 | 
						ucred = uintptr(r0)
 | 
				
			||||||
 | 
						if e1 != 0 {
 | 
				
			||||||
 | 
							err = errnoErr(e1)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ucredGeteuid(ucred uintptr) (uid int) {
 | 
				
			||||||
 | 
						r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_geteuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
 | 
				
			||||||
 | 
						uid = int(r0)
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ucredGetegid(ucred uintptr) (gid int) {
 | 
				
			||||||
 | 
						r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getegid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
 | 
				
			||||||
 | 
						gid = int(r0)
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ucredGetruid(ucred uintptr) (uid int) {
 | 
				
			||||||
 | 
						r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getruid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
 | 
				
			||||||
 | 
						uid = int(r0)
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ucredGetrgid(ucred uintptr) (gid int) {
 | 
				
			||||||
 | 
						r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getrgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
 | 
				
			||||||
 | 
						gid = int(r0)
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ucredGetsuid(ucred uintptr) (uid int) {
 | 
				
			||||||
 | 
						r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
 | 
				
			||||||
 | 
						uid = int(r0)
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ucredGetsgid(ucred uintptr) (gid int) {
 | 
				
			||||||
 | 
						r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
 | 
				
			||||||
 | 
						gid = int(r0)
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ucredGetpid(ucred uintptr) (pid int) {
 | 
				
			||||||
 | 
						r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getpid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
 | 
				
			||||||
 | 
						pid = int(r0)
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func ucredFree(ucred uintptr) {
 | 
				
			||||||
 | 
						sysvicall6(uintptr(unsafe.Pointer(&procucred_free)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func port_create() (n int, err error) {
 | 
					func port_create() (n int, err error) {
 | 
				
			||||||
	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0)
 | 
						r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0)
 | 
				
			||||||
	n = int(r0)
 | 
						n = int(r0)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -458,4 +458,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR            = 460
 | 
						SYS_LSM_SET_SELF_ATTR            = 460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES             = 461
 | 
						SYS_LSM_LIST_MODULES             = 461
 | 
				
			||||||
	SYS_MSEAL                        = 462
 | 
						SYS_MSEAL                        = 462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT                   = 463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT                   = 464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT                  = 465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT                = 466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -381,4 +381,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR       = 460
 | 
						SYS_LSM_SET_SELF_ATTR       = 460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES        = 461
 | 
						SYS_LSM_LIST_MODULES        = 461
 | 
				
			||||||
	SYS_MSEAL                   = 462
 | 
						SYS_MSEAL                   = 462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT              = 463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT              = 464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT             = 465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT           = 466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -422,4 +422,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR            = 460
 | 
						SYS_LSM_SET_SELF_ATTR            = 460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES             = 461
 | 
						SYS_LSM_LIST_MODULES             = 461
 | 
				
			||||||
	SYS_MSEAL                        = 462
 | 
						SYS_MSEAL                        = 462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT                   = 463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT                   = 464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT                  = 465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT                = 466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -325,4 +325,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR       = 460
 | 
						SYS_LSM_SET_SELF_ATTR       = 460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES        = 461
 | 
						SYS_LSM_LIST_MODULES        = 461
 | 
				
			||||||
	SYS_MSEAL                   = 462
 | 
						SYS_MSEAL                   = 462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT              = 463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT              = 464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT             = 465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT           = 466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -321,4 +321,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR       = 460
 | 
						SYS_LSM_SET_SELF_ATTR       = 460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES        = 461
 | 
						SYS_LSM_LIST_MODULES        = 461
 | 
				
			||||||
	SYS_MSEAL                   = 462
 | 
						SYS_MSEAL                   = 462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT              = 463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT              = 464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT             = 465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT           = 466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -442,4 +442,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR            = 4460
 | 
						SYS_LSM_SET_SELF_ATTR            = 4460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES             = 4461
 | 
						SYS_LSM_LIST_MODULES             = 4461
 | 
				
			||||||
	SYS_MSEAL                        = 4462
 | 
						SYS_MSEAL                        = 4462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT                   = 4463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT                   = 4464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT                  = 4465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT                = 4466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -372,4 +372,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR       = 5460
 | 
						SYS_LSM_SET_SELF_ATTR       = 5460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES        = 5461
 | 
						SYS_LSM_LIST_MODULES        = 5461
 | 
				
			||||||
	SYS_MSEAL                   = 5462
 | 
						SYS_MSEAL                   = 5462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT              = 5463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT              = 5464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT             = 5465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT           = 5466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -372,4 +372,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR       = 5460
 | 
						SYS_LSM_SET_SELF_ATTR       = 5460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES        = 5461
 | 
						SYS_LSM_LIST_MODULES        = 5461
 | 
				
			||||||
	SYS_MSEAL                   = 5462
 | 
						SYS_MSEAL                   = 5462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT              = 5463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT              = 5464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT             = 5465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT           = 5466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -442,4 +442,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR            = 4460
 | 
						SYS_LSM_SET_SELF_ATTR            = 4460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES             = 4461
 | 
						SYS_LSM_LIST_MODULES             = 4461
 | 
				
			||||||
	SYS_MSEAL                        = 4462
 | 
						SYS_MSEAL                        = 4462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT                   = 4463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT                   = 4464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT                  = 4465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT                = 4466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -449,4 +449,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR            = 460
 | 
						SYS_LSM_SET_SELF_ATTR            = 460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES             = 461
 | 
						SYS_LSM_LIST_MODULES             = 461
 | 
				
			||||||
	SYS_MSEAL                        = 462
 | 
						SYS_MSEAL                        = 462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT                   = 463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT                   = 464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT                  = 465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT                = 466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -421,4 +421,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR       = 460
 | 
						SYS_LSM_SET_SELF_ATTR       = 460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES        = 461
 | 
						SYS_LSM_LIST_MODULES        = 461
 | 
				
			||||||
	SYS_MSEAL                   = 462
 | 
						SYS_MSEAL                   = 462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT              = 463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT              = 464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT             = 465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT           = 466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -421,4 +421,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR       = 460
 | 
						SYS_LSM_SET_SELF_ATTR       = 460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES        = 461
 | 
						SYS_LSM_LIST_MODULES        = 461
 | 
				
			||||||
	SYS_MSEAL                   = 462
 | 
						SYS_MSEAL                   = 462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT              = 463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT              = 464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT             = 465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT           = 466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -326,4 +326,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR       = 460
 | 
						SYS_LSM_SET_SELF_ATTR       = 460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES        = 461
 | 
						SYS_LSM_LIST_MODULES        = 461
 | 
				
			||||||
	SYS_MSEAL                   = 462
 | 
						SYS_MSEAL                   = 462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT              = 463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT              = 464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT             = 465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT           = 466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -387,4 +387,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR       = 460
 | 
						SYS_LSM_SET_SELF_ATTR       = 460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES        = 461
 | 
						SYS_LSM_LIST_MODULES        = 461
 | 
				
			||||||
	SYS_MSEAL                   = 462
 | 
						SYS_MSEAL                   = 462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT              = 463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT              = 464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT             = 465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT           = 466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -400,4 +400,8 @@ const (
 | 
				
			|||||||
	SYS_LSM_SET_SELF_ATTR       = 460
 | 
						SYS_LSM_SET_SELF_ATTR       = 460
 | 
				
			||||||
	SYS_LSM_LIST_MODULES        = 461
 | 
						SYS_LSM_LIST_MODULES        = 461
 | 
				
			||||||
	SYS_MSEAL                   = 462
 | 
						SYS_MSEAL                   = 462
 | 
				
			||||||
 | 
						SYS_SETXATTRAT              = 463
 | 
				
			||||||
 | 
						SYS_GETXATTRAT              = 464
 | 
				
			||||||
 | 
						SYS_LISTXATTRAT             = 465
 | 
				
			||||||
 | 
						SYS_REMOVEXATTRAT           = 466
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								vendor/golang.org/x/sys/unix/ztypes_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/golang.org/x/sys/unix/ztypes_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -4747,7 +4747,7 @@ const (
 | 
				
			|||||||
	NL80211_ATTR_MAC_HINT                                   = 0xc8
 | 
						NL80211_ATTR_MAC_HINT                                   = 0xc8
 | 
				
			||||||
	NL80211_ATTR_MAC_MASK                                   = 0xd7
 | 
						NL80211_ATTR_MAC_MASK                                   = 0xd7
 | 
				
			||||||
	NL80211_ATTR_MAX_AP_ASSOC_STA                           = 0xca
 | 
						NL80211_ATTR_MAX_AP_ASSOC_STA                           = 0xca
 | 
				
			||||||
	NL80211_ATTR_MAX                                        = 0x14c
 | 
						NL80211_ATTR_MAX                                        = 0x14d
 | 
				
			||||||
	NL80211_ATTR_MAX_CRIT_PROT_DURATION                     = 0xb4
 | 
						NL80211_ATTR_MAX_CRIT_PROT_DURATION                     = 0xb4
 | 
				
			||||||
	NL80211_ATTR_MAX_CSA_COUNTERS                           = 0xce
 | 
						NL80211_ATTR_MAX_CSA_COUNTERS                           = 0xce
 | 
				
			||||||
	NL80211_ATTR_MAX_MATCH_SETS                             = 0x85
 | 
						NL80211_ATTR_MAX_MATCH_SETS                             = 0x85
 | 
				
			||||||
@@ -5519,7 +5519,7 @@ const (
 | 
				
			|||||||
	NL80211_MNTR_FLAG_CONTROL                               = 0x3
 | 
						NL80211_MNTR_FLAG_CONTROL                               = 0x3
 | 
				
			||||||
	NL80211_MNTR_FLAG_COOK_FRAMES                           = 0x5
 | 
						NL80211_MNTR_FLAG_COOK_FRAMES                           = 0x5
 | 
				
			||||||
	NL80211_MNTR_FLAG_FCSFAIL                               = 0x1
 | 
						NL80211_MNTR_FLAG_FCSFAIL                               = 0x1
 | 
				
			||||||
	NL80211_MNTR_FLAG_MAX                                   = 0x6
 | 
						NL80211_MNTR_FLAG_MAX                                   = 0x7
 | 
				
			||||||
	NL80211_MNTR_FLAG_OTHER_BSS                             = 0x4
 | 
						NL80211_MNTR_FLAG_OTHER_BSS                             = 0x4
 | 
				
			||||||
	NL80211_MNTR_FLAG_PLCPFAIL                              = 0x2
 | 
						NL80211_MNTR_FLAG_PLCPFAIL                              = 0x2
 | 
				
			||||||
	NL80211_MPATH_FLAG_ACTIVE                               = 0x1
 | 
						NL80211_MPATH_FLAG_ACTIVE                               = 0x1
 | 
				
			||||||
@@ -6174,3 +6174,5 @@ type SockDiagReq struct {
 | 
				
			|||||||
	Family   uint8
 | 
						Family   uint8
 | 
				
			||||||
	Protocol uint8
 | 
						Protocol uint8
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const RTM_NEWNVLAN = 0x70
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										11
									
								
								vendor/golang.org/x/sys/windows/dll_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/golang.org/x/sys/windows/dll_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -43,8 +43,8 @@ type DLL struct {
 | 
				
			|||||||
// LoadDLL loads DLL file into memory.
 | 
					// LoadDLL loads DLL file into memory.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Warning: using LoadDLL without an absolute path name is subject to
 | 
					// Warning: using LoadDLL without an absolute path name is subject to
 | 
				
			||||||
// DLL preloading attacks. To safely load a system DLL, use LazyDLL
 | 
					// DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL],
 | 
				
			||||||
// with System set to true, or use LoadLibraryEx directly.
 | 
					// or use [LoadLibraryEx] directly.
 | 
				
			||||||
func LoadDLL(name string) (dll *DLL, err error) {
 | 
					func LoadDLL(name string) (dll *DLL, err error) {
 | 
				
			||||||
	namep, err := UTF16PtrFromString(name)
 | 
						namep, err := UTF16PtrFromString(name)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -271,6 +271,9 @@ func (d *LazyDLL) NewProc(name string) *LazyProc {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewLazyDLL creates new LazyDLL associated with DLL file.
 | 
					// NewLazyDLL creates new LazyDLL associated with DLL file.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Warning: using NewLazyDLL without an absolute path name is subject to
 | 
				
			||||||
 | 
					// DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL].
 | 
				
			||||||
func NewLazyDLL(name string) *LazyDLL {
 | 
					func NewLazyDLL(name string) *LazyDLL {
 | 
				
			||||||
	return &LazyDLL{Name: name}
 | 
						return &LazyDLL{Name: name}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -410,7 +413,3 @@ func loadLibraryEx(name string, system bool) (*DLL, error) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return &DLL{Name: name, Handle: h}, nil
 | 
						return &DLL{Name: name, Handle: h}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
type errString string
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (s errString) Error() string { return string(s) }
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										35
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							@@ -318,7 +318,7 @@ github.com/fsnotify/fsnotify
 | 
				
			|||||||
# github.com/fxamacker/cbor/v2 v2.7.0
 | 
					# github.com/fxamacker/cbor/v2 v2.7.0
 | 
				
			||||||
## explicit; go 1.17
 | 
					## explicit; go 1.17
 | 
				
			||||||
github.com/fxamacker/cbor/v2
 | 
					github.com/fxamacker/cbor/v2
 | 
				
			||||||
# github.com/go-jose/go-jose/v4 v4.0.4
 | 
					# github.com/go-jose/go-jose/v4 v4.0.5
 | 
				
			||||||
## explicit; go 1.21
 | 
					## explicit; go 1.21
 | 
				
			||||||
github.com/go-jose/go-jose/v4
 | 
					github.com/go-jose/go-jose/v4
 | 
				
			||||||
github.com/go-jose/go-jose/v4/cipher
 | 
					github.com/go-jose/go-jose/v4/cipher
 | 
				
			||||||
@@ -675,8 +675,8 @@ go.opentelemetry.io/proto/otlp/collector/trace/v1
 | 
				
			|||||||
go.opentelemetry.io/proto/otlp/common/v1
 | 
					go.opentelemetry.io/proto/otlp/common/v1
 | 
				
			||||||
go.opentelemetry.io/proto/otlp/resource/v1
 | 
					go.opentelemetry.io/proto/otlp/resource/v1
 | 
				
			||||||
go.opentelemetry.io/proto/otlp/trace/v1
 | 
					go.opentelemetry.io/proto/otlp/trace/v1
 | 
				
			||||||
# golang.org/x/crypto v0.31.0
 | 
					# golang.org/x/crypto v0.36.0
 | 
				
			||||||
## explicit; go 1.20
 | 
					## explicit; go 1.23.0
 | 
				
			||||||
golang.org/x/crypto/cast5
 | 
					golang.org/x/crypto/cast5
 | 
				
			||||||
golang.org/x/crypto/cryptobyte
 | 
					golang.org/x/crypto/cryptobyte
 | 
				
			||||||
golang.org/x/crypto/cryptobyte/asn1
 | 
					golang.org/x/crypto/cryptobyte/asn1
 | 
				
			||||||
@@ -695,8 +695,8 @@ golang.org/x/exp/slices
 | 
				
			|||||||
# golang.org/x/mod v0.21.0
 | 
					# golang.org/x/mod v0.21.0
 | 
				
			||||||
## explicit; go 1.22.0
 | 
					## explicit; go 1.22.0
 | 
				
			||||||
golang.org/x/mod/semver
 | 
					golang.org/x/mod/semver
 | 
				
			||||||
# golang.org/x/net v0.33.0
 | 
					# golang.org/x/net v0.37.0
 | 
				
			||||||
## explicit; go 1.18
 | 
					## explicit; go 1.23.0
 | 
				
			||||||
golang.org/x/net/bpf
 | 
					golang.org/x/net/bpf
 | 
				
			||||||
golang.org/x/net/html
 | 
					golang.org/x/net/html
 | 
				
			||||||
golang.org/x/net/html/atom
 | 
					golang.org/x/net/html/atom
 | 
				
			||||||
@@ -704,22 +704,23 @@ golang.org/x/net/http/httpguts
 | 
				
			|||||||
golang.org/x/net/http2
 | 
					golang.org/x/net/http2
 | 
				
			||||||
golang.org/x/net/http2/hpack
 | 
					golang.org/x/net/http2/hpack
 | 
				
			||||||
golang.org/x/net/idna
 | 
					golang.org/x/net/idna
 | 
				
			||||||
 | 
					golang.org/x/net/internal/httpcommon
 | 
				
			||||||
golang.org/x/net/internal/socks
 | 
					golang.org/x/net/internal/socks
 | 
				
			||||||
golang.org/x/net/internal/timeseries
 | 
					golang.org/x/net/internal/timeseries
 | 
				
			||||||
golang.org/x/net/proxy
 | 
					golang.org/x/net/proxy
 | 
				
			||||||
golang.org/x/net/trace
 | 
					golang.org/x/net/trace
 | 
				
			||||||
golang.org/x/net/websocket
 | 
					golang.org/x/net/websocket
 | 
				
			||||||
# golang.org/x/oauth2 v0.23.0
 | 
					# golang.org/x/oauth2 v0.28.0
 | 
				
			||||||
## explicit; go 1.18
 | 
					## explicit; go 1.23.0
 | 
				
			||||||
golang.org/x/oauth2
 | 
					golang.org/x/oauth2
 | 
				
			||||||
golang.org/x/oauth2/internal
 | 
					golang.org/x/oauth2/internal
 | 
				
			||||||
# golang.org/x/sync v0.10.0
 | 
					# golang.org/x/sync v0.12.0
 | 
				
			||||||
## explicit; go 1.18
 | 
					## explicit; go 1.23.0
 | 
				
			||||||
golang.org/x/sync/errgroup
 | 
					golang.org/x/sync/errgroup
 | 
				
			||||||
golang.org/x/sync/semaphore
 | 
					golang.org/x/sync/semaphore
 | 
				
			||||||
golang.org/x/sync/singleflight
 | 
					golang.org/x/sync/singleflight
 | 
				
			||||||
# golang.org/x/sys v0.28.0
 | 
					# golang.org/x/sys v0.31.0
 | 
				
			||||||
## explicit; go 1.18
 | 
					## explicit; go 1.23.0
 | 
				
			||||||
golang.org/x/sys/cpu
 | 
					golang.org/x/sys/cpu
 | 
				
			||||||
golang.org/x/sys/execabs
 | 
					golang.org/x/sys/execabs
 | 
				
			||||||
golang.org/x/sys/plan9
 | 
					golang.org/x/sys/plan9
 | 
				
			||||||
@@ -729,11 +730,11 @@ golang.org/x/sys/windows/registry
 | 
				
			|||||||
golang.org/x/sys/windows/svc
 | 
					golang.org/x/sys/windows/svc
 | 
				
			||||||
golang.org/x/sys/windows/svc/debug
 | 
					golang.org/x/sys/windows/svc/debug
 | 
				
			||||||
golang.org/x/sys/windows/svc/mgr
 | 
					golang.org/x/sys/windows/svc/mgr
 | 
				
			||||||
# golang.org/x/term v0.27.0
 | 
					# golang.org/x/term v0.30.0
 | 
				
			||||||
## explicit; go 1.18
 | 
					## explicit; go 1.23.0
 | 
				
			||||||
golang.org/x/term
 | 
					golang.org/x/term
 | 
				
			||||||
# golang.org/x/text v0.21.0
 | 
					# golang.org/x/text v0.23.0
 | 
				
			||||||
## explicit; go 1.18
 | 
					## explicit; go 1.23.0
 | 
				
			||||||
golang.org/x/text/secure/bidirule
 | 
					golang.org/x/text/secure/bidirule
 | 
				
			||||||
golang.org/x/text/transform
 | 
					golang.org/x/text/transform
 | 
				
			||||||
golang.org/x/text/unicode/bidi
 | 
					golang.org/x/text/unicode/bidi
 | 
				
			||||||
@@ -1183,12 +1184,12 @@ sigs.k8s.io/structured-merge-diff/v4/value
 | 
				
			|||||||
## explicit; go 1.12
 | 
					## explicit; go 1.12
 | 
				
			||||||
sigs.k8s.io/yaml
 | 
					sigs.k8s.io/yaml
 | 
				
			||||||
sigs.k8s.io/yaml/goyaml.v2
 | 
					sigs.k8s.io/yaml/goyaml.v2
 | 
				
			||||||
# tags.cncf.io/container-device-interface v0.8.1
 | 
					# tags.cncf.io/container-device-interface v1.0.0
 | 
				
			||||||
## explicit; go 1.20
 | 
					## explicit; go 1.20
 | 
				
			||||||
tags.cncf.io/container-device-interface/internal/validation
 | 
					tags.cncf.io/container-device-interface/internal/validation
 | 
				
			||||||
tags.cncf.io/container-device-interface/internal/validation/k8s
 | 
					tags.cncf.io/container-device-interface/internal/validation/k8s
 | 
				
			||||||
tags.cncf.io/container-device-interface/pkg/cdi
 | 
					tags.cncf.io/container-device-interface/pkg/cdi
 | 
				
			||||||
tags.cncf.io/container-device-interface/pkg/parser
 | 
					tags.cncf.io/container-device-interface/pkg/parser
 | 
				
			||||||
# tags.cncf.io/container-device-interface/specs-go v0.8.0
 | 
					# tags.cncf.io/container-device-interface/specs-go v1.0.0
 | 
				
			||||||
## explicit; go 1.19
 | 
					## explicit; go 1.19
 | 
				
			||||||
tags.cncf.io/container-device-interface/specs-go
 | 
					tags.cncf.io/container-device-interface/specs-go
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/annotations.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/annotations.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -71,7 +71,7 @@ func ParseAnnotations(annotations map[string]string) ([]string, []string, error)
 | 
				
			|||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		for _, d := range strings.Split(value, ",") {
 | 
							for _, d := range strings.Split(value, ",") {
 | 
				
			||||||
			if !IsQualifiedName(d) {
 | 
								if !parser.IsQualifiedName(d) {
 | 
				
			||||||
				return nil, nil, fmt.Errorf("invalid CDI device name %q", d)
 | 
									return nil, nil, fmt.Errorf("invalid CDI device name %q", d)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			devices = append(devices, d)
 | 
								devices = append(devices, d)
 | 
				
			||||||
@@ -130,7 +130,7 @@ func AnnotationKey(pluginName, deviceID string) (string, error) {
 | 
				
			|||||||
func AnnotationValue(devices []string) (string, error) {
 | 
					func AnnotationValue(devices []string) (string, error) {
 | 
				
			||||||
	value, sep := "", ""
 | 
						value, sep := "", ""
 | 
				
			||||||
	for _, d := range devices {
 | 
						for _, d := range devices {
 | 
				
			||||||
		if _, _, _, err := ParseQualifiedName(d); err != nil {
 | 
							if _, _, _, err := parser.ParseQualifiedName(d); err != nil {
 | 
				
			||||||
			return "", err
 | 
								return "", err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		value += sep + d
 | 
							value += sep + d
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										47
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/cache.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										47
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/cache.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -22,6 +22,7 @@ import (
 | 
				
			|||||||
	"io/fs"
 | 
						"io/fs"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
 | 
						"runtime"
 | 
				
			||||||
	"sort"
 | 
						"sort"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
@@ -116,7 +117,7 @@ func (c *Cache) configure(options ...Option) {
 | 
				
			|||||||
		c.watch.setup(c.specDirs, c.dirErrors)
 | 
							c.watch.setup(c.specDirs, c.dirErrors)
 | 
				
			||||||
		c.watch.start(&c.Mutex, c.refresh, c.dirErrors)
 | 
							c.watch.start(&c.Mutex, c.refresh, c.dirErrors)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	c.refresh()
 | 
						_ = c.refresh() // we record but ignore errors
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Refresh rescans the CDI Spec directories and refreshes the Cache.
 | 
					// Refresh rescans the CDI Spec directories and refreshes the Cache.
 | 
				
			||||||
@@ -222,7 +223,8 @@ func (c *Cache) refreshIfRequired(force bool) (bool, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// InjectDevices injects the given qualified devices to an OCI Spec. It
 | 
					// InjectDevices injects the given qualified devices to an OCI Spec. It
 | 
				
			||||||
// returns any unresolvable devices and an error if injection fails for
 | 
					// returns any unresolvable devices and an error if injection fails for
 | 
				
			||||||
// any of the devices.
 | 
					// any of the devices. Might trigger a cache refresh, in which case any
 | 
				
			||||||
 | 
					// errors encountered can be obtained using GetErrors().
 | 
				
			||||||
func (c *Cache) InjectDevices(ociSpec *oci.Spec, devices ...string) ([]string, error) {
 | 
					func (c *Cache) InjectDevices(ociSpec *oci.Spec, devices ...string) ([]string, error) {
 | 
				
			||||||
	var unresolved []string
 | 
						var unresolved []string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -233,7 +235,7 @@ func (c *Cache) InjectDevices(ociSpec *oci.Spec, devices ...string) ([]string, e
 | 
				
			|||||||
	c.Lock()
 | 
						c.Lock()
 | 
				
			||||||
	defer c.Unlock()
 | 
						defer c.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c.refreshIfRequired(false)
 | 
						_, _ = c.refreshIfRequired(false) // we record but ignore errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	edits := &ContainerEdits{}
 | 
						edits := &ContainerEdits{}
 | 
				
			||||||
	specs := map[*Spec]struct{}{}
 | 
						specs := map[*Spec]struct{}{}
 | 
				
			||||||
@@ -335,24 +337,27 @@ func (c *Cache) RemoveSpec(name string) error {
 | 
				
			|||||||
	return err
 | 
						return err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetDevice returns the cached device for the given qualified name.
 | 
					// GetDevice returns the cached device for the given qualified name. Might trigger
 | 
				
			||||||
 | 
					// a cache refresh, in which case any errors encountered can be obtained using
 | 
				
			||||||
 | 
					// GetErrors().
 | 
				
			||||||
func (c *Cache) GetDevice(device string) *Device {
 | 
					func (c *Cache) GetDevice(device string) *Device {
 | 
				
			||||||
	c.Lock()
 | 
						c.Lock()
 | 
				
			||||||
	defer c.Unlock()
 | 
						defer c.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c.refreshIfRequired(false)
 | 
						_, _ = c.refreshIfRequired(false) // we record but ignore errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return c.devices[device]
 | 
						return c.devices[device]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ListDevices lists all cached devices by qualified name.
 | 
					// ListDevices lists all cached devices by qualified name. Might trigger a cache
 | 
				
			||||||
 | 
					// refresh, in which case any errors encountered can be obtained using GetErrors().
 | 
				
			||||||
func (c *Cache) ListDevices() []string {
 | 
					func (c *Cache) ListDevices() []string {
 | 
				
			||||||
	var devices []string
 | 
						var devices []string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c.Lock()
 | 
						c.Lock()
 | 
				
			||||||
	defer c.Unlock()
 | 
						defer c.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c.refreshIfRequired(false)
 | 
						_, _ = c.refreshIfRequired(false) // we record but ignore errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for name := range c.devices {
 | 
						for name := range c.devices {
 | 
				
			||||||
		devices = append(devices, name)
 | 
							devices = append(devices, name)
 | 
				
			||||||
@@ -362,14 +367,15 @@ func (c *Cache) ListDevices() []string {
 | 
				
			|||||||
	return devices
 | 
						return devices
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ListVendors lists all vendors known to the cache.
 | 
					// ListVendors lists all vendors known to the cache. Might trigger a cache refresh,
 | 
				
			||||||
 | 
					// in which case any errors encountered can be obtained using GetErrors().
 | 
				
			||||||
func (c *Cache) ListVendors() []string {
 | 
					func (c *Cache) ListVendors() []string {
 | 
				
			||||||
	var vendors []string
 | 
						var vendors []string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c.Lock()
 | 
						c.Lock()
 | 
				
			||||||
	defer c.Unlock()
 | 
						defer c.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c.refreshIfRequired(false)
 | 
						_, _ = c.refreshIfRequired(false) // we record but ignore errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for vendor := range c.specs {
 | 
						for vendor := range c.specs {
 | 
				
			||||||
		vendors = append(vendors, vendor)
 | 
							vendors = append(vendors, vendor)
 | 
				
			||||||
@@ -379,7 +385,8 @@ func (c *Cache) ListVendors() []string {
 | 
				
			|||||||
	return vendors
 | 
						return vendors
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ListClasses lists all device classes known to the cache.
 | 
					// ListClasses lists all device classes known to the cache. Might trigger a cache
 | 
				
			||||||
 | 
					// refresh, in which case any errors encountered can be obtained using GetErrors().
 | 
				
			||||||
func (c *Cache) ListClasses() []string {
 | 
					func (c *Cache) ListClasses() []string {
 | 
				
			||||||
	var (
 | 
						var (
 | 
				
			||||||
		cmap    = map[string]struct{}{}
 | 
							cmap    = map[string]struct{}{}
 | 
				
			||||||
@@ -389,7 +396,7 @@ func (c *Cache) ListClasses() []string {
 | 
				
			|||||||
	c.Lock()
 | 
						c.Lock()
 | 
				
			||||||
	defer c.Unlock()
 | 
						defer c.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c.refreshIfRequired(false)
 | 
						_, _ = c.refreshIfRequired(false) // we record but ignore errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, specs := range c.specs {
 | 
						for _, specs := range c.specs {
 | 
				
			||||||
		for _, spec := range specs {
 | 
							for _, spec := range specs {
 | 
				
			||||||
@@ -404,12 +411,13 @@ func (c *Cache) ListClasses() []string {
 | 
				
			|||||||
	return classes
 | 
						return classes
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetVendorSpecs returns all specs for the given vendor.
 | 
					// GetVendorSpecs returns all specs for the given vendor. Might trigger a cache
 | 
				
			||||||
 | 
					// refresh, in which case any errors encountered can be obtained using GetErrors().
 | 
				
			||||||
func (c *Cache) GetVendorSpecs(vendor string) []*Spec {
 | 
					func (c *Cache) GetVendorSpecs(vendor string) []*Spec {
 | 
				
			||||||
	c.Lock()
 | 
						c.Lock()
 | 
				
			||||||
	defer c.Unlock()
 | 
						defer c.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c.refreshIfRequired(false)
 | 
						_, _ = c.refreshIfRequired(false) // we record but ignore errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return c.specs[vendor]
 | 
						return c.specs[vendor]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -522,6 +530,13 @@ func (w *watch) watch(fsw *fsnotify.Watcher, m *sync.Mutex, refresh func() error
 | 
				
			|||||||
	if watch == nil {
 | 
						if watch == nil {
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						eventMask := fsnotify.Rename | fsnotify.Remove | fsnotify.Write
 | 
				
			||||||
 | 
						// On macOS, we also need to watch for Create events.
 | 
				
			||||||
 | 
						if runtime.GOOS == "darwin" {
 | 
				
			||||||
 | 
							eventMask |= fsnotify.Create
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for {
 | 
						for {
 | 
				
			||||||
		select {
 | 
							select {
 | 
				
			||||||
		case event, ok := <-watch.Events:
 | 
							case event, ok := <-watch.Events:
 | 
				
			||||||
@@ -529,10 +544,10 @@ func (w *watch) watch(fsw *fsnotify.Watcher, m *sync.Mutex, refresh func() error
 | 
				
			|||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (event.Op & (fsnotify.Rename | fsnotify.Remove | fsnotify.Write)) == 0 {
 | 
								if (event.Op & eventMask) == 0 {
 | 
				
			||||||
				continue
 | 
									continue
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if event.Op == fsnotify.Write {
 | 
								if event.Op == fsnotify.Write || event.Op == fsnotify.Create {
 | 
				
			||||||
				if ext := filepath.Ext(event.Name); ext != ".json" && ext != ".yaml" {
 | 
									if ext := filepath.Ext(event.Name); ext != ".json" && ext != ".yaml" {
 | 
				
			||||||
					continue
 | 
										continue
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
@@ -544,7 +559,7 @@ func (w *watch) watch(fsw *fsnotify.Watcher, m *sync.Mutex, refresh func() error
 | 
				
			|||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				w.update(dirErrors)
 | 
									w.update(dirErrors)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			refresh()
 | 
								_ = refresh()
 | 
				
			||||||
			m.Unlock()
 | 
								m.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		case _, ok := <-watch.Errors:
 | 
							case _, ok := <-watch.Errors:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										26
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/cache_test_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/cache_test_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					//go:build darwin
 | 
				
			||||||
 | 
					// +build darwin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					   Copyright © 2021 The CDI Authors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					   you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					   You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					   distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					   See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					   limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package cdi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "syscall"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func osSync() {
 | 
				
			||||||
 | 
						_ = syscall.Sync()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										4
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/cache_test_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/cache_test_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
//go:build !windows
 | 
					//go:build !windows && !darwin
 | 
				
			||||||
// +build !windows
 | 
					// +build !windows,!darwin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
   Copyright © 2021 The CDI Authors
 | 
					   Copyright © 2021 The CDI Authors
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/container-edits.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/container-edits.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -26,7 +26,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	oci "github.com/opencontainers/runtime-spec/specs-go"
 | 
						oci "github.com/opencontainers/runtime-spec/specs-go"
 | 
				
			||||||
	ocigen "github.com/opencontainers/runtime-tools/generate"
 | 
						ocigen "github.com/opencontainers/runtime-tools/generate"
 | 
				
			||||||
	"tags.cncf.io/container-device-interface/specs-go"
 | 
						cdi "tags.cncf.io/container-device-interface/specs-go"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -64,7 +64,7 @@ var (
 | 
				
			|||||||
// to all OCI Specs where at least one devices from the CDI Spec
 | 
					// to all OCI Specs where at least one devices from the CDI Spec
 | 
				
			||||||
// is injected.
 | 
					// is injected.
 | 
				
			||||||
type ContainerEdits struct {
 | 
					type ContainerEdits struct {
 | 
				
			||||||
	*specs.ContainerEdits
 | 
						*cdi.ContainerEdits
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Apply edits to the given OCI Spec. Updates the OCI Spec in place.
 | 
					// Apply edits to the given OCI Spec. Updates the OCI Spec in place.
 | 
				
			||||||
@@ -205,7 +205,7 @@ func (e *ContainerEdits) Append(o *ContainerEdits) *ContainerEdits {
 | 
				
			|||||||
		e = &ContainerEdits{}
 | 
							e = &ContainerEdits{}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if e.ContainerEdits == nil {
 | 
						if e.ContainerEdits == nil {
 | 
				
			||||||
		e.ContainerEdits = &specs.ContainerEdits{}
 | 
							e.ContainerEdits = &cdi.ContainerEdits{}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	e.Env = append(e.Env, o.Env...)
 | 
						e.Env = append(e.Env, o.Env...)
 | 
				
			||||||
@@ -259,7 +259,7 @@ func ValidateEnv(env []string) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// DeviceNode is a CDI Spec DeviceNode wrapper, used for validating DeviceNodes.
 | 
					// DeviceNode is a CDI Spec DeviceNode wrapper, used for validating DeviceNodes.
 | 
				
			||||||
type DeviceNode struct {
 | 
					type DeviceNode struct {
 | 
				
			||||||
	*specs.DeviceNode
 | 
						*cdi.DeviceNode
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Validate a CDI Spec DeviceNode.
 | 
					// Validate a CDI Spec DeviceNode.
 | 
				
			||||||
@@ -289,7 +289,7 @@ func (d *DeviceNode) Validate() error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Hook is a CDI Spec Hook wrapper, used for validating hooks.
 | 
					// Hook is a CDI Spec Hook wrapper, used for validating hooks.
 | 
				
			||||||
type Hook struct {
 | 
					type Hook struct {
 | 
				
			||||||
	*specs.Hook
 | 
						*cdi.Hook
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Validate a hook.
 | 
					// Validate a hook.
 | 
				
			||||||
@@ -308,7 +308,7 @@ func (h *Hook) Validate() error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Mount is a CDI Mount wrapper, used for validating mounts.
 | 
					// Mount is a CDI Mount wrapper, used for validating mounts.
 | 
				
			||||||
type Mount struct {
 | 
					type Mount struct {
 | 
				
			||||||
	*specs.Mount
 | 
						*cdi.Mount
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Validate a mount.
 | 
					// Validate a mount.
 | 
				
			||||||
@@ -325,13 +325,13 @@ func (m *Mount) Validate() error {
 | 
				
			|||||||
// IntelRdt is a CDI IntelRdt wrapper.
 | 
					// IntelRdt is a CDI IntelRdt wrapper.
 | 
				
			||||||
// This is used for validation and conversion to OCI specifications.
 | 
					// This is used for validation and conversion to OCI specifications.
 | 
				
			||||||
type IntelRdt struct {
 | 
					type IntelRdt struct {
 | 
				
			||||||
	*specs.IntelRdt
 | 
						*cdi.IntelRdt
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ValidateIntelRdt validates the IntelRdt configuration.
 | 
					// ValidateIntelRdt validates the IntelRdt configuration.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Deprecated: ValidateIntelRdt is deprecated use IntelRdt.Validate() instead.
 | 
					// Deprecated: ValidateIntelRdt is deprecated use IntelRdt.Validate() instead.
 | 
				
			||||||
func ValidateIntelRdt(i *specs.IntelRdt) error {
 | 
					func ValidateIntelRdt(i *cdi.IntelRdt) error {
 | 
				
			||||||
	return (&IntelRdt{i}).Validate()
 | 
						return (&IntelRdt{i}).Validate()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -355,7 +355,7 @@ func ensureOCIHooks(spec *oci.Spec) {
 | 
				
			|||||||
func sortMounts(specgen *ocigen.Generator) {
 | 
					func sortMounts(specgen *ocigen.Generator) {
 | 
				
			||||||
	mounts := specgen.Mounts()
 | 
						mounts := specgen.Mounts()
 | 
				
			||||||
	specgen.ClearMounts()
 | 
						specgen.ClearMounts()
 | 
				
			||||||
	sort.Sort(orderedMounts(mounts))
 | 
						sort.Stable(orderedMounts(mounts))
 | 
				
			||||||
	specgen.Config.Mounts = mounts
 | 
						specgen.Config.Mounts = mounts
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -375,14 +375,7 @@ func (m orderedMounts) Len() int {
 | 
				
			|||||||
// mount indexed by parameter 1 is less than that of the mount indexed by
 | 
					// mount indexed by parameter 1 is less than that of the mount indexed by
 | 
				
			||||||
// parameter 2. Used in sorting.
 | 
					// parameter 2. Used in sorting.
 | 
				
			||||||
func (m orderedMounts) Less(i, j int) bool {
 | 
					func (m orderedMounts) Less(i, j int) bool {
 | 
				
			||||||
	ip, jp := m.parts(i), m.parts(j)
 | 
						return m.parts(i) < m.parts(j)
 | 
				
			||||||
	if ip < jp {
 | 
					 | 
				
			||||||
		return true
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if jp < ip {
 | 
					 | 
				
			||||||
		return false
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return m[i].Destination < m[j].Destination
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Swap swaps two items in an array of mounts. Used in sorting
 | 
					// Swap swaps two items in an array of mounts. Used in sorting
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/device.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/device.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -67,7 +67,7 @@ func (d *Device) edits() *ContainerEdits {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Validate the device.
 | 
					// Validate the device.
 | 
				
			||||||
func (d *Device) validate() error {
 | 
					func (d *Device) validate() error {
 | 
				
			||||||
	if err := ValidateDeviceName(d.Name); err != nil {
 | 
						if err := parser.ValidateDeviceName(d.Name); err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	name := d.Name
 | 
						name := d.Name
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										51
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -35,25 +35,11 @@
 | 
				
			|||||||
// available and instantiated the first time it is referenced directly
 | 
					// available and instantiated the first time it is referenced directly
 | 
				
			||||||
// or indirectly. The most frequently used cache functions are available
 | 
					// or indirectly. The most frequently used cache functions are available
 | 
				
			||||||
// as identically named package level functions which operate on the
 | 
					// as identically named package level functions which operate on the
 | 
				
			||||||
// default cache instance. Moreover, the registry also operates on the
 | 
					// default cache instance.
 | 
				
			||||||
// same default cache. We plan to deprecate the registry and eventually
 | 
					 | 
				
			||||||
// remove it in a future release.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// # CDI Registry
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Note: the Registry and its related interfaces are deprecated and will
 | 
					 | 
				
			||||||
// be removed in a future version. Please use the default cache and its
 | 
					 | 
				
			||||||
// related package-level function instead.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// The primary interface to interact with CDI devices is the Registry. It
 | 
					 | 
				
			||||||
// is essentially a cache of all Specs and devices discovered in standard
 | 
					 | 
				
			||||||
// CDI directories on the host. The registry has two main functionality,
 | 
					 | 
				
			||||||
// injecting devices into an OCI Spec and refreshing the cache of CDI
 | 
					 | 
				
			||||||
// Specs and devices.
 | 
					 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// # Device Injection
 | 
					// # Device Injection
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Using the Registry one can inject CDI devices into a container with code
 | 
					// Using the Cache one can inject CDI devices into a container with code
 | 
				
			||||||
// similar to the following snippet:
 | 
					// similar to the following snippet:
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//	import (
 | 
					//	import (
 | 
				
			||||||
@@ -63,13 +49,14 @@
 | 
				
			|||||||
//	    log "github.com/sirupsen/logrus"
 | 
					//	    log "github.com/sirupsen/logrus"
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//	    "tags.cncf.io/container-device-interface/pkg/cdi"
 | 
					//	    "tags.cncf.io/container-device-interface/pkg/cdi"
 | 
				
			||||||
//	    oci "github.com/opencontainers/runtime-spec/specs-go"
 | 
					//	    "github.com/opencontainers/runtime-spec/specs-go"
 | 
				
			||||||
//	)
 | 
					//	)
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//	func injectCDIDevices(spec *oci.Spec, devices []string) error {
 | 
					//	func injectCDIDevices(spec *specs.Spec, devices []string) error {
 | 
				
			||||||
//	    log.Debug("pristine OCI Spec: %s", dumpSpec(spec))
 | 
					//	    log.Debug("pristine OCI Spec: %s", dumpSpec(spec))
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//	    unresolved, err := cdi.GetRegistry().InjectDevices(spec, devices)
 | 
					//	    cache := cdi.GetDefaultCache()
 | 
				
			||||||
 | 
					//	    unresolved, err := cache.InjectDevices(spec, devices)
 | 
				
			||||||
//	    if err != nil {
 | 
					//	    if err != nil {
 | 
				
			||||||
//	        return fmt.Errorf("CDI device injection failed: %w", err)
 | 
					//	        return fmt.Errorf("CDI device injection failed: %w", err)
 | 
				
			||||||
//	    }
 | 
					//	    }
 | 
				
			||||||
@@ -106,17 +93,17 @@
 | 
				
			|||||||
//	    log "github.com/sirupsen/logrus"
 | 
					//	    log "github.com/sirupsen/logrus"
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//	    "tags.cncf.io/container-device-interface/pkg/cdi"
 | 
					//	    "tags.cncf.io/container-device-interface/pkg/cdi"
 | 
				
			||||||
//	    oci "github.com/opencontainers/runtime-spec/specs-go"
 | 
					//	    "github.com/opencontainers/runtime-spec/specs-go"
 | 
				
			||||||
//	)
 | 
					//	)
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//	func injectCDIDevices(spec *oci.Spec, devices []string) error {
 | 
					//	func injectCDIDevices(spec *specs.Spec, devices []string) error {
 | 
				
			||||||
//	    registry := cdi.GetRegistry()
 | 
					//	    cache := cdi.GetDefaultCache()
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//	    if err := registry.Refresh(); err != nil {
 | 
					//	    if err := cache.Refresh(); err != nil {
 | 
				
			||||||
//	        // Note:
 | 
					//	        // Note:
 | 
				
			||||||
//	        //   It is up to the implementation to decide whether
 | 
					//	        //   It is up to the implementation to decide whether
 | 
				
			||||||
//	        //   to abort injection on errors. A failed Refresh()
 | 
					//	        //   to abort injection on errors. A failed Refresh()
 | 
				
			||||||
//	        //   does not necessarily render the registry unusable.
 | 
					//	        //   does not necessarily render the cache unusable.
 | 
				
			||||||
//	        //   For instance, a parse error in a Spec file for
 | 
					//	        //   For instance, a parse error in a Spec file for
 | 
				
			||||||
//	        //   vendor A does not have any effect on devices of
 | 
					//	        //   vendor A does not have any effect on devices of
 | 
				
			||||||
//	        //   vendor B...
 | 
					//	        //   vendor B...
 | 
				
			||||||
@@ -125,7 +112,7 @@
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
//	    log.Debug("pristine OCI Spec: %s", dumpSpec(spec))
 | 
					//	    log.Debug("pristine OCI Spec: %s", dumpSpec(spec))
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//	    unresolved, err := registry.InjectDevices(spec, devices)
 | 
					//	    unresolved, err := cache.InjectDevices(spec, devices)
 | 
				
			||||||
//	    if err != nil {
 | 
					//	    if err != nil {
 | 
				
			||||||
//	        return fmt.Errorf("CDI device injection failed: %w", err)
 | 
					//	        return fmt.Errorf("CDI device injection failed: %w", err)
 | 
				
			||||||
//	    }
 | 
					//	    }
 | 
				
			||||||
@@ -192,7 +179,7 @@
 | 
				
			|||||||
// )
 | 
					// )
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//	func generateDeviceSpecs() error {
 | 
					//	func generateDeviceSpecs() error {
 | 
				
			||||||
//	    registry := cdi.GetRegistry()
 | 
					//	    cache := specs.GetDefaultCache()
 | 
				
			||||||
//	    spec := &specs.Spec{
 | 
					//	    spec := &specs.Spec{
 | 
				
			||||||
//	        Version: specs.CurrentVersion,
 | 
					//	        Version: specs.CurrentVersion,
 | 
				
			||||||
//	        Kind:    vendor+"/"+class,
 | 
					//	        Kind:    vendor+"/"+class,
 | 
				
			||||||
@@ -210,7 +197,7 @@
 | 
				
			|||||||
//	        return fmt.Errorf("failed to generate Spec name: %w", err)
 | 
					//	        return fmt.Errorf("failed to generate Spec name: %w", err)
 | 
				
			||||||
//	    }
 | 
					//	    }
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//	    return registry.SpecDB().WriteSpec(spec, specName)
 | 
					//	    return cache.WriteSpec(spec, specName)
 | 
				
			||||||
//	}
 | 
					//	}
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Similarly, generating and later cleaning up transient Spec files can be
 | 
					// Similarly, generating and later cleaning up transient Spec files can be
 | 
				
			||||||
@@ -229,7 +216,7 @@
 | 
				
			|||||||
// )
 | 
					// )
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//	func generateTransientSpec(ctr Container) error {
 | 
					//	func generateTransientSpec(ctr Container) error {
 | 
				
			||||||
//	    registry := cdi.GetRegistry()
 | 
					//	    cache := specs.GetDefaultCache()
 | 
				
			||||||
//	    devices := getContainerDevs(ctr, vendor, class)
 | 
					//	    devices := getContainerDevs(ctr, vendor, class)
 | 
				
			||||||
//	    spec := &specs.Spec{
 | 
					//	    spec := &specs.Spec{
 | 
				
			||||||
//	        Version: specs.CurrentVersion,
 | 
					//	        Version: specs.CurrentVersion,
 | 
				
			||||||
@@ -257,21 +244,21 @@
 | 
				
			|||||||
//	        return fmt.Errorf("failed to generate Spec name: %w", err)
 | 
					//	        return fmt.Errorf("failed to generate Spec name: %w", err)
 | 
				
			||||||
//	    }
 | 
					//	    }
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//	    return registry.SpecDB().WriteSpec(spec, specName)
 | 
					//	    return cache.WriteSpec(spec, specName)
 | 
				
			||||||
//	}
 | 
					//	}
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//	func removeTransientSpec(ctr Container) error {
 | 
					//	func removeTransientSpec(ctr Container) error {
 | 
				
			||||||
//	    registry := cdi.GetRegistry()
 | 
					//	    cache := specs.GetDefaultCache()
 | 
				
			||||||
//	    transientID := getSomeSufficientlyUniqueIDForContainer(ctr)
 | 
					//	    transientID := getSomeSufficientlyUniqueIDForContainer(ctr)
 | 
				
			||||||
//	    specName := cdi.GenerateNameForTransientSpec(vendor, class, transientID)
 | 
					//	    specName := cdi.GenerateNameForTransientSpec(vendor, class, transientID)
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//	    return registry.SpecDB().RemoveSpec(specName)
 | 
					//	    return cache.RemoveSpec(specName)
 | 
				
			||||||
//	}
 | 
					//	}
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// # CDI Spec Validation
 | 
					// # CDI Spec Validation
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// This package performs both syntactic and semantic validation of CDI
 | 
					// This package performs both syntactic and semantic validation of CDI
 | 
				
			||||||
// Spec file data when a Spec file is loaded via the registry or using
 | 
					// Spec file data when a Spec file is loaded via the cache or using
 | 
				
			||||||
// the ReadSpec API function. As part of the semantic verification, the
 | 
					// the ReadSpec API function. As part of the semantic verification, the
 | 
				
			||||||
// Spec file is verified against the CDI Spec JSON validation schema.
 | 
					// Spec file is verified against the CDI Spec JSON validation schema.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user