Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package etcd for openSUSE:Factory checked in 
at 2023-05-25 23:52:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/etcd (Old)
 and      /work/SRC/openSUSE:Factory/.etcd.new.1533 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "etcd"

Thu May 25 23:52:43 2023 rev:36 rq:1088994 version:3.5.9

Changes:
--------
--- /work/SRC/openSUSE:Factory/etcd/etcd.changes        2023-04-28 
16:25:12.830656552 +0200
+++ /work/SRC/openSUSE:Factory/.etcd.new.1533/etcd.changes      2023-05-25 
23:52:52.227728542 +0200
@@ -1,0 +2,12 @@
+Thu May 25 08:53:52 UTC 2023 - er...@mailbox.org
+
+- Update to version 3.5.9:
+  * version: bump up to 3.5.9
+  * Move go version to dedicated .go-version file
+  * tests: e2e and integration test for timetolive
+  * etcdserver: protect lease timetilive with auth
+  * Backport go update to latest patch release 1.19.9.
+  * Backport centralising go version for actions workflows.
+  * server: backport 15743, improved description of --initial-cluster-state 
flag
+
+-------------------------------------------------------------------

Old:
----
  etcd-3.5.8.tar.gz

New:
----
  etcd-3.5.9.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ etcd.spec ++++++
--- /var/tmp/diff_new_pack.A4R2Sz/_old  2023-05-25 23:52:53.115733755 +0200
+++ /var/tmp/diff_new_pack.A4R2Sz/_new  2023-05-25 23:52:53.119733779 +0200
@@ -22,7 +22,7 @@
   %define _fillupdir %{_localstatedir}/adm/fillup-templates
 %endif
 Name:           etcd
-Version:        3.5.8
+Version:        3.5.9
 Release:        0
 Summary:        Highly-available key value store for configuration and service 
discovery
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.A4R2Sz/_old  2023-05-25 23:52:53.171734084 +0200
+++ /var/tmp/diff_new_pack.A4R2Sz/_new  2023-05-25 23:52:53.171734084 +0200
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/etcd-io/etcd.git</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">v3.5.8</param>
+    <param name="revision">v3.5.9</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="changesgenerate">enable</param>
     <param name="versionrewrite-pattern">v(.*)</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.A4R2Sz/_old  2023-05-25 23:52:53.191734202 +0200
+++ /var/tmp/diff_new_pack.A4R2Sz/_new  2023-05-25 23:52:53.195734225 +0200
@@ -5,6 +5,6 @@
                 <param name="url">git://github.com/etcd-io/etcd.git</param>
               <param 
name="changesrevision">99018a77bea9a9d29962e5169876c64e02739c52</param></service><service
 name="tar_scm">
                 <param name="url">https://github.com/etcd-io/etcd.git</param>
-              <param 
name="changesrevision">217d183e5a2b2b7e826825f8218b8c4f53590a8f</param></service></servicedata>
+              <param 
name="changesrevision">bdbbde998b7ed434b23676530d10dbd601c4a7c0</param></service></servicedata>
 (No newline at EOF)
 

++++++ etcd-3.5.8.tar.gz -> etcd-3.5.9.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/.github/workflows/e2e.yaml 
new/etcd-3.5.9/.github/workflows/e2e.yaml
--- old/etcd-3.5.8/.github/workflows/e2e.yaml   2023-04-13 12:08:47.000000000 
+0200
+++ new/etcd-3.5.9/.github/workflows/e2e.yaml   2023-05-11 13:39:43.000000000 
+0200
@@ -1,8 +1,11 @@
 name: E2E
 on: [push, pull_request]
 jobs:
+  goversion:
+    uses: ./.github/workflows/go-version.yaml
   test:
     runs-on: ubuntu-latest
+    needs: goversion
     strategy:
       fail-fast: true
       matrix:
@@ -13,7 +16,7 @@
     - uses: actions/checkout@v2
     - uses: actions/setup-go@v2
       with:
-        go-version: "1.19.8"
+        go-version: ${{ needs.goversion.outputs.goversion }}
     - run: date
     - env:
         TARGET: ${{ matrix.target }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/.github/workflows/functional.yaml 
new/etcd-3.5.9/.github/workflows/functional.yaml
--- old/etcd-3.5.8/.github/workflows/functional.yaml    2023-04-13 
12:08:47.000000000 +0200
+++ new/etcd-3.5.9/.github/workflows/functional.yaml    2023-05-11 
13:39:43.000000000 +0200
@@ -1,8 +1,11 @@
 name: functional-tests
 on: [push, pull_request]
 jobs:
+  goversion:
+    uses: ./.github/workflows/go-version.yaml
   test:
     runs-on: ubuntu-latest
+    needs: goversion
     strategy:
       fail-fast: true
       matrix:
@@ -12,7 +15,7 @@
     - uses: actions/checkout@v2
     - uses: actions/setup-go@v2
       with:
-        go-version: "1.19.8"
+        go-version: ${{ needs.goversion.outputs.goversion }}
     - run: date
     - env:
         TARGET: ${{ matrix.target }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/.github/workflows/go-version.yaml 
new/etcd-3.5.9/.github/workflows/go-version.yaml
--- old/etcd-3.5.8/.github/workflows/go-version.yaml    1970-01-01 
01:00:00.000000000 +0100
+++ new/etcd-3.5.9/.github/workflows/go-version.yaml    2023-05-11 
13:39:43.000000000 +0200
@@ -0,0 +1,21 @@
+name: Go version setup
+
+on:
+  workflow_call:
+    outputs:
+      goversion:
+        value: ${{ jobs.version.outputs.goversion }}
+
+jobs:
+  version:
+    name: Set Go version variable for all the workflows
+    runs-on: ubuntu-latest
+    outputs:
+      goversion: ${{ steps.goversion.outputs.goversion }}
+    steps:
+      - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # 
v3.5.2
+      - id: goversion
+        run: |
+          GO_VERSION=$(cat .go-version)
+          echo "Go Version: $GO_VERSION"
+          echo "goversion=$GO_VERSION" >> $GITHUB_OUTPUT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/.github/workflows/grpcproxy.yaml 
new/etcd-3.5.9/.github/workflows/grpcproxy.yaml
--- old/etcd-3.5.8/.github/workflows/grpcproxy.yaml     2023-04-13 
12:08:47.000000000 +0200
+++ new/etcd-3.5.9/.github/workflows/grpcproxy.yaml     2023-05-11 
13:39:43.000000000 +0200
@@ -1,8 +1,11 @@
 name: grpcProxy-tests
 on: [push, pull_request]
 jobs:
+  goversion:
+    uses: ./.github/workflows/go-version.yaml
   test:
     runs-on: ubuntu-latest
+    needs: goversion
     strategy:
       fail-fast: true
       matrix:
@@ -12,7 +15,7 @@
     - uses: actions/checkout@v2
     - uses: actions/setup-go@v2
       with:
-        go-version: "1.19.8"
+        go-version: ${{ needs.goversion.outputs.goversion }}
     - run: date
     - env:
         TARGET: ${{ matrix.target }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/.github/workflows/release.yaml 
new/etcd-3.5.9/.github/workflows/release.yaml
--- old/etcd-3.5.8/.github/workflows/release.yaml       2023-04-13 
12:08:47.000000000 +0200
+++ new/etcd-3.5.9/.github/workflows/release.yaml       2023-05-11 
13:39:43.000000000 +0200
@@ -1,13 +1,16 @@
 name: Release
 on: [push, pull_request]
 jobs:
+  goversion:
+    uses: ./.github/workflows/go-version.yaml
   main:
     runs-on: ubuntu-latest
+    needs: goversion
     steps:
     - uses: actions/checkout@v2
     - uses: actions/setup-go@v2
       with:
-        go-version: "1.19.8"
+        go-version: ${{ needs.goversion.outputs.goversion }}
     - name: release
       run: |
         set -euo pipefail
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/.github/workflows/tests.yaml 
new/etcd-3.5.9/.github/workflows/tests.yaml
--- old/etcd-3.5.8/.github/workflows/tests.yaml 2023-04-13 12:08:47.000000000 
+0200
+++ new/etcd-3.5.9/.github/workflows/tests.yaml 2023-05-11 13:39:43.000000000 
+0200
@@ -1,8 +1,11 @@
 name: Tests
 on: [push, pull_request]
 jobs:
+  goversion:
+    uses: ./.github/workflows/go-version.yaml
   test:
     runs-on: ubuntu-latest
+    needs: goversion
     strategy:
       fail-fast: false
       matrix:
@@ -18,7 +21,7 @@
     - uses: actions/checkout@v2
     - uses: actions/setup-go@v2
       with:
-        go-version: "1.19.8"
+        go-version: ${{ needs.goversion.outputs.goversion }}
     - run: date
     - env:
         TARGET: ${{ matrix.target }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/.go-version new/etcd-3.5.9/.go-version
--- old/etcd-3.5.8/.go-version  1970-01-01 01:00:00.000000000 +0100
+++ new/etcd-3.5.9/.go-version  2023-05-11 13:39:43.000000000 +0200
@@ -0,0 +1 @@
+1.19.9
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/Makefile new/etcd-3.5.9/Makefile
--- old/etcd-3.5.8/Makefile     2023-04-13 12:08:47.000000000 +0200
+++ new/etcd-3.5.9/Makefile     2023-05-11 13:39:43.000000000 +0200
@@ -55,7 +55,7 @@
 
 
 
-GO_VERSION ?= 1.19.8
+GO_VERSION ?= 1.19.9
 ETCD_VERSION ?= $(shell git rev-parse --short HEAD || echo "GitNotFound")
 
 TEST_SUFFIX = $(shell date +%s | base64 | head -c 15)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/api/version/version.go 
new/etcd-3.5.9/api/version/version.go
--- old/etcd-3.5.8/api/version/version.go       2023-04-13 12:08:47.000000000 
+0200
+++ new/etcd-3.5.9/api/version/version.go       2023-05-11 13:39:43.000000000 
+0200
@@ -26,7 +26,7 @@
 var (
        // MinClusterVersion is the min cluster version this etcd binary is 
compatible with.
        MinClusterVersion = "3.0.0"
-       Version           = "3.5.8"
+       Version           = "3.5.9"
        APIVersion        = "unknown"
 
        // Git SHA Value will be set during build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/client/v2/go.mod 
new/etcd-3.5.9/client/v2/go.mod
--- old/etcd-3.5.8/client/v2/go.mod     2023-04-13 12:08:47.000000000 +0200
+++ new/etcd-3.5.9/client/v2/go.mod     2023-05-11 13:39:43.000000000 +0200
@@ -5,8 +5,8 @@
 require (
        github.com/json-iterator/go v1.1.11
        github.com/modern-go/reflect2 v1.0.1
-       go.etcd.io/etcd/api/v3 v3.5.8
-       go.etcd.io/etcd/client/pkg/v3 v3.5.8
+       go.etcd.io/etcd/api/v3 v3.5.9
+       go.etcd.io/etcd/client/pkg/v3 v3.5.9
 )
 
 require (
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/client/v3/go.mod 
new/etcd-3.5.9/client/v3/go.mod
--- old/etcd-3.5.8/client/v3/go.mod     2023-04-13 12:08:47.000000000 +0200
+++ new/etcd-3.5.9/client/v3/go.mod     2023-05-11 13:39:43.000000000 +0200
@@ -6,8 +6,8 @@
        github.com/dustin/go-humanize v1.0.0
        github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
        github.com/prometheus/client_golang v1.11.1
-       go.etcd.io/etcd/api/v3 v3.5.8
-       go.etcd.io/etcd/client/pkg/v3 v3.5.8
+       go.etcd.io/etcd/api/v3 v3.5.9
+       go.etcd.io/etcd/client/pkg/v3 v3.5.9
        go.uber.org/zap v1.17.0
        google.golang.org/grpc v1.41.0
        sigs.k8s.io/yaml v1.2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/etcdctl/go.mod 
new/etcd-3.5.9/etcdctl/go.mod
--- old/etcd-3.5.8/etcdctl/go.mod       2023-04-13 12:08:47.000000000 +0200
+++ new/etcd-3.5.9/etcdctl/go.mod       2023-05-11 13:39:43.000000000 +0200
@@ -9,12 +9,12 @@
        github.com/spf13/cobra v1.1.3
        github.com/spf13/pflag v1.0.5
        github.com/urfave/cli v1.22.4
-       go.etcd.io/etcd/api/v3 v3.5.8
-       go.etcd.io/etcd/client/pkg/v3 v3.5.8
-       go.etcd.io/etcd/client/v2 v2.305.8
-       go.etcd.io/etcd/client/v3 v3.5.8
-       go.etcd.io/etcd/etcdutl/v3 v3.5.8
-       go.etcd.io/etcd/pkg/v3 v3.5.8
+       go.etcd.io/etcd/api/v3 v3.5.9
+       go.etcd.io/etcd/client/pkg/v3 v3.5.9
+       go.etcd.io/etcd/client/v2 v2.305.9
+       go.etcd.io/etcd/client/v3 v3.5.9
+       go.etcd.io/etcd/etcdutl/v3 v3.5.9
+       go.etcd.io/etcd/pkg/v3 v3.5.9
        go.uber.org/zap v1.17.0
        golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba
        google.golang.org/grpc v1.41.0
@@ -46,8 +46,8 @@
        github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
        github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // 
indirect
        go.etcd.io/bbolt v1.3.7 // indirect
-       go.etcd.io/etcd/raft/v3 v3.5.8 // indirect
-       go.etcd.io/etcd/server/v3 v3.5.8 // indirect
+       go.etcd.io/etcd/raft/v3 v3.5.9 // indirect
+       go.etcd.io/etcd/server/v3 v3.5.9 // indirect
        
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.25.0 // indirect
        go.opentelemetry.io/otel v1.0.1 // indirect
        go.opentelemetry.io/otel/trace v1.0.1 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/etcdutl/go.mod 
new/etcd-3.5.9/etcdutl/go.mod
--- old/etcd-3.5.8/etcdutl/go.mod       2023-04-13 12:08:47.000000000 +0200
+++ new/etcd-3.5.9/etcdutl/go.mod       2023-05-11 13:39:43.000000000 +0200
@@ -25,12 +25,12 @@
        github.com/olekukonko/tablewriter v0.0.5
        github.com/spf13/cobra v1.1.3
        go.etcd.io/bbolt v1.3.7
-       go.etcd.io/etcd/api/v3 v3.5.8
-       go.etcd.io/etcd/client/pkg/v3 v3.5.8
-       go.etcd.io/etcd/client/v3 v3.5.8
-       go.etcd.io/etcd/pkg/v3 v3.5.8
-       go.etcd.io/etcd/raft/v3 v3.5.8
-       go.etcd.io/etcd/server/v3 v3.5.8
+       go.etcd.io/etcd/api/v3 v3.5.9
+       go.etcd.io/etcd/client/pkg/v3 v3.5.9
+       go.etcd.io/etcd/client/v3 v3.5.9
+       go.etcd.io/etcd/pkg/v3 v3.5.9
+       go.etcd.io/etcd/raft/v3 v3.5.9
+       go.etcd.io/etcd/server/v3 v3.5.9
        go.uber.org/zap v1.17.0
 )
 
@@ -56,7 +56,7 @@
        github.com/prometheus/procfs v0.6.0 // indirect
        github.com/spf13/pflag v1.0.5 // indirect
        github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // 
indirect
-       go.etcd.io/etcd/client/v2 v2.305.8 // indirect
+       go.etcd.io/etcd/client/v2 v2.305.9 // indirect
        
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.25.0 // indirect
        go.opentelemetry.io/otel v1.0.1 // indirect
        go.opentelemetry.io/otel/trace v1.0.1 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/go.mod new/etcd-3.5.9/go.mod
--- old/etcd-3.5.8/go.mod       2023-04-13 12:08:47.000000000 +0200
+++ new/etcd-3.5.9/go.mod       2023-05-11 13:39:43.000000000 +0200
@@ -20,16 +20,16 @@
        github.com/dustin/go-humanize v1.0.0
        github.com/spf13/cobra v1.1.3
        go.etcd.io/bbolt v1.3.7
-       go.etcd.io/etcd/api/v3 v3.5.8
-       go.etcd.io/etcd/client/pkg/v3 v3.5.8
-       go.etcd.io/etcd/client/v2 v2.305.8
-       go.etcd.io/etcd/client/v3 v3.5.8
-       go.etcd.io/etcd/etcdctl/v3 v3.5.8
-       go.etcd.io/etcd/etcdutl/v3 v3.5.8
-       go.etcd.io/etcd/pkg/v3 v3.5.8
-       go.etcd.io/etcd/raft/v3 v3.5.8
-       go.etcd.io/etcd/server/v3 v3.5.8
-       go.etcd.io/etcd/tests/v3 v3.5.8
+       go.etcd.io/etcd/api/v3 v3.5.9
+       go.etcd.io/etcd/client/pkg/v3 v3.5.9
+       go.etcd.io/etcd/client/v2 v2.305.9
+       go.etcd.io/etcd/client/v3 v3.5.9
+       go.etcd.io/etcd/etcdctl/v3 v3.5.9
+       go.etcd.io/etcd/etcdutl/v3 v3.5.9
+       go.etcd.io/etcd/pkg/v3 v3.5.9
+       go.etcd.io/etcd/raft/v3 v3.5.9
+       go.etcd.io/etcd/server/v3 v3.5.9
+       go.etcd.io/etcd/tests/v3 v3.5.9
        go.uber.org/zap v1.17.0
        golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba
        google.golang.org/grpc v1.41.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/pkg/go.mod new/etcd-3.5.9/pkg/go.mod
--- old/etcd-3.5.8/pkg/go.mod   2023-04-13 12:08:47.000000000 +0200
+++ new/etcd-3.5.9/pkg/go.mod   2023-05-11 13:39:43.000000000 +0200
@@ -8,7 +8,7 @@
        github.com/spf13/cobra v1.1.3
        github.com/spf13/pflag v1.0.5
        github.com/stretchr/testify v1.8.1
-       go.etcd.io/etcd/client/pkg/v3 v3.5.8
+       go.etcd.io/etcd/client/pkg/v3 v3.5.9
        go.uber.org/zap v1.17.0
        google.golang.org/grpc v1.41.0
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/raft/go.mod new/etcd-3.5.9/raft/go.mod
--- old/etcd-3.5.8/raft/go.mod  2023-04-13 12:08:47.000000000 +0200
+++ new/etcd-3.5.9/raft/go.mod  2023-05-11 13:39:43.000000000 +0200
@@ -6,7 +6,7 @@
        github.com/cockroachdb/datadriven v1.0.2
        github.com/gogo/protobuf v1.3.2
        github.com/golang/protobuf v1.5.2
-       go.etcd.io/etcd/client/pkg/v3 v3.5.8
+       go.etcd.io/etcd/client/pkg/v3 v3.5.9
 )
 
 require (
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/scripts/release 
new/etcd-3.5.9/scripts/release
--- old/etcd-3.5.8/scripts/release      2023-04-13 12:08:47.000000000 +0200
+++ new/etcd-3.5.9/scripts/release      2023-05-11 13:39:43.000000000 +0200
@@ -112,10 +112,10 @@
   # Check go version.
   log_callout "Check go version"
   local go_version current_go_version
-  go_version="go$(grep go-version .github/workflows/tests.yaml | awk '{print 
$2}' | tr -d '"')"
+  go_version="go$(cat .go-version)"
   current_go_version=$(go version | awk '{ print $3 }')
   if [[ "${current_go_version}" != "${go_version}" ]]; then
-    log_error "Current go version is ${current_go_version}, but etcd 
${RELEASE_VERSION} requires ${go_version} (see .travis.yml)."
+    log_error "Current go version is ${current_go_version}, but etcd 
${RELEASE_VERSION} requires ${go_version} (see .go-version)."
     exit 1
   fi
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/server/etcdmain/config.go 
new/etcd-3.5.9/server/etcdmain/config.go
--- old/etcd-3.5.8/server/etcdmain/config.go    2023-04-13 12:08:47.000000000 
+0200
+++ new/etcd-3.5.9/server/etcdmain/config.go    2023-05-11 13:39:43.000000000 
+0200
@@ -201,7 +201,7 @@
        fs.StringVar(&cfg.ec.DNSClusterServiceName, "discovery-srv-name", 
cfg.ec.DNSClusterServiceName, "Service name to query when using DNS discovery.")
        fs.StringVar(&cfg.ec.InitialCluster, "initial-cluster", 
cfg.ec.InitialCluster, "Initial cluster configuration for bootstrapping.")
        fs.StringVar(&cfg.ec.InitialClusterToken, "initial-cluster-token", 
cfg.ec.InitialClusterToken, "Initial cluster token for the etcd cluster during 
bootstrap.")
-       fs.Var(cfg.cf.clusterState, "initial-cluster-state", "Initial cluster 
state ('new' or 'existing').")
+       fs.Var(cfg.cf.clusterState, "initial-cluster-state", "Initial cluster 
state ('new' when bootstrapping a new cluster or 'existing' when adding new 
members to an existing cluster). After successful initialization (bootstrapping 
or adding), flag is ignored on restarts.")
 
        fs.BoolVar(&cfg.ec.StrictReconfigCheck, "strict-reconfig-check", 
cfg.ec.StrictReconfigCheck, "Reject reconfiguration requests that would cause 
quorum loss.")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/server/etcdmain/help.go 
new/etcd-3.5.9/server/etcdmain/help.go
--- old/etcd-3.5.8/server/etcdmain/help.go      2023-04-13 12:08:47.000000000 
+0200
+++ new/etcd-3.5.9/server/etcdmain/help.go      2023-05-11 13:39:43.000000000 
+0200
@@ -101,7 +101,8 @@
   --initial-cluster 'default=http://localhost:2380'
     Initial cluster configuration for bootstrapping.
   --initial-cluster-state 'new'
-    Initial cluster state ('new' or 'existing').
+    Initial cluster state ('new' when bootstrapping a new cluster or 
'existing' when adding new members to an existing cluster).
+    After successful initialization (bootstrapping or adding), flag is ignored 
on restarts.
   --initial-cluster-token 'etcd-cluster'
     Initial cluster token for the etcd cluster during bootstrap.
     Specifying this can protect you from unintended cross-cluster interaction 
when running multiple clusters.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/server/etcdserver/v3_server.go 
new/etcd-3.5.9/server/etcdserver/v3_server.go
--- old/etcd-3.5.8/server/etcdserver/v3_server.go       2023-04-13 
12:08:47.000000000 +0200
+++ new/etcd-3.5.9/server/etcdserver/v3_server.go       2023-05-11 
13:39:43.000000000 +0200
@@ -336,7 +336,32 @@
        return -1, ErrCanceled
 }
 
-func (s *EtcdServer) LeaseTimeToLive(ctx context.Context, r 
*pb.LeaseTimeToLiveRequest) (*pb.LeaseTimeToLiveResponse, error) {
+func (s *EtcdServer) checkLeaseTimeToLive(ctx context.Context, leaseID 
lease.LeaseID) (uint64, error) {
+       rev := s.AuthStore().Revision()
+       if !s.AuthStore().IsAuthEnabled() {
+               return rev, nil
+       }
+       authInfo, err := s.AuthInfoFromCtx(ctx)
+       if err != nil {
+               return rev, err
+       }
+       if authInfo == nil {
+               return rev, auth.ErrUserEmpty
+       }
+
+       l := s.lessor.Lookup(leaseID)
+       if l != nil {
+               for _, key := range l.Keys() {
+                       if err := s.AuthStore().IsRangePermitted(authInfo, 
[]byte(key), []byte{}); err != nil {
+                               return 0, err
+                       }
+               }
+       }
+
+       return rev, nil
+}
+
+func (s *EtcdServer) leaseTimeToLive(ctx context.Context, r 
*pb.LeaseTimeToLiveRequest) (*pb.LeaseTimeToLiveResponse, error) {
        if s.isLeader() {
                if err := s.waitAppliedIndex(); err != nil {
                        return nil, err
@@ -386,6 +411,31 @@
        return nil, ErrCanceled
 }
 
+func (s *EtcdServer) LeaseTimeToLive(ctx context.Context, r 
*pb.LeaseTimeToLiveRequest) (*pb.LeaseTimeToLiveResponse, error) {
+       var rev uint64
+       var err error
+       if r.Keys {
+               // check RBAC permission only if Keys is true
+               rev, err = s.checkLeaseTimeToLive(ctx, lease.LeaseID(r.ID))
+               if err != nil {
+                       return nil, err
+               }
+       }
+
+       resp, err := s.leaseTimeToLive(ctx, r)
+       if err != nil {
+               return nil, err
+       }
+
+       if r.Keys {
+               if s.AuthStore().IsAuthEnabled() && rev != 
s.AuthStore().Revision() {
+                       return nil, auth.ErrAuthOldRevision
+               }
+       }
+       return resp, nil
+}
+
+// LeaseLeases is really ListLeases !???
 func (s *EtcdServer) LeaseLeases(ctx context.Context, r 
*pb.LeaseLeasesRequest) (*pb.LeaseLeasesResponse, error) {
        ls := s.lessor.Leases()
        lss := make([]*pb.LeaseStatus, len(ls))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/server/go.mod new/etcd-3.5.9/server/go.mod
--- old/etcd-3.5.8/server/go.mod        2023-04-13 12:08:47.000000000 +0200
+++ new/etcd-3.5.9/server/go.mod        2023-05-11 13:39:43.000000000 +0200
@@ -23,12 +23,12 @@
        github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802
        github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2
        go.etcd.io/bbolt v1.3.7
-       go.etcd.io/etcd/api/v3 v3.5.8
-       go.etcd.io/etcd/client/pkg/v3 v3.5.8
-       go.etcd.io/etcd/client/v2 v2.305.8
-       go.etcd.io/etcd/client/v3 v3.5.8
-       go.etcd.io/etcd/pkg/v3 v3.5.8
-       go.etcd.io/etcd/raft/v3 v3.5.8
+       go.etcd.io/etcd/api/v3 v3.5.9
+       go.etcd.io/etcd/client/pkg/v3 v3.5.9
+       go.etcd.io/etcd/client/v2 v2.305.9
+       go.etcd.io/etcd/client/v3 v3.5.9
+       go.etcd.io/etcd/pkg/v3 v3.5.9
+       go.etcd.io/etcd/raft/v3 v3.5.9
        
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.25.0
        go.opentelemetry.io/otel v1.0.1
        go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.0.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/tests/e2e/ctl_v3_auth_test.go 
new/etcd-3.5.9/tests/e2e/ctl_v3_auth_test.go
--- old/etcd-3.5.8/tests/e2e/ctl_v3_auth_test.go        2023-04-13 
12:08:47.000000000 +0200
+++ new/etcd-3.5.9/tests/e2e/ctl_v3_auth_test.go        2023-05-11 
13:39:43.000000000 +0200
@@ -76,6 +76,7 @@
 func TestCtlV3AuthJWTExpire(t *testing.T)           { testCtl(t, 
authTestJWTExpire, withCfg(*newConfigJWT())) }
 func TestCtlV3AuthRevisionConsistency(t *testing.T) { testCtl(t, 
authTestRevisionConsistency) }
 func TestCtlV3AuthTestCacheReload(t *testing.T)     { testCtl(t, 
authTestCacheReload) }
+func TestCtlV3AuthLeaseTimeToLive(t *testing.T)     { testCtl(t, 
authTestLeaseTimeToLive) }
 
 func TestCtlV3AuthRecoverFromSnapshot(t *testing.T) {
        testCtl(t, authTestRecoverSnapshot, withCfg(*newConfigNoTLS()), 
withQuorum(), withSnapshotCount(5))
@@ -1509,3 +1510,51 @@
        }
        return retHashKVs, nil
 }
+
+func authTestLeaseTimeToLive(cx ctlCtx) {
+       if err := authEnable(cx); err != nil {
+               cx.t.Fatal(err)
+       }
+       cx.user, cx.pass = "root", "root"
+
+       authSetupTestUser(cx)
+
+       cx.user = "test-user"
+       cx.pass = "pass"
+
+       leaseID, err := ctlV3LeaseGrant(cx, 10)
+       if err != nil {
+               cx.t.Fatal(err)
+       }
+
+       err = ctlV3Put(cx, "foo", "val", leaseID)
+       if err != nil {
+               cx.t.Fatal(err)
+       }
+
+       err = ctlV3LeaseTimeToLive(cx, leaseID, true)
+       if err != nil {
+               cx.t.Fatal(err)
+       }
+
+       cx.user = "root"
+       cx.pass = "root"
+       err = ctlV3Put(cx, "bar", "val", leaseID)
+       if err != nil {
+               cx.t.Fatal(err)
+       }
+
+       cx.user = "test-user"
+       cx.pass = "pass"
+       // the lease is attached to bar, which test-user cannot access
+       err = ctlV3LeaseTimeToLive(cx, leaseID, true)
+       if err == nil {
+               cx.t.Fatal("test-user must not be able to access to the lease, 
because it's attached to the key bar")
+       }
+
+       // without --keys, access should be allowed
+       err = ctlV3LeaseTimeToLive(cx, leaseID, false)
+       if err != nil {
+               cx.t.Fatal(err)
+       }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/tests/e2e/ctl_v3_lease_test.go 
new/etcd-3.5.9/tests/e2e/ctl_v3_lease_test.go
--- old/etcd-3.5.8/tests/e2e/ctl_v3_lease_test.go       2023-04-13 
12:08:47.000000000 +0200
+++ new/etcd-3.5.9/tests/e2e/ctl_v3_lease_test.go       2023-05-11 
13:39:43.000000000 +0200
@@ -300,3 +300,11 @@
        cmdArgs := append(cx.PrefixArgs(), "lease", "revoke", leaseID)
        return spawnWithExpectWithEnv(cmdArgs, cx.envMap, fmt.Sprintf("lease %s 
revoked", leaseID))
 }
+
+func ctlV3LeaseTimeToLive(cx ctlCtx, leaseID string, withKeys bool) error {
+       cmdArgs := append(cx.PrefixArgs(), "lease", "timetolive", leaseID)
+       if withKeys {
+               cmdArgs = append(cmdArgs, "--keys")
+       }
+       return spawnWithExpectWithEnv(cmdArgs, cx.envMap, fmt.Sprintf("lease %s 
granted with", leaseID))
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/tests/go.mod new/etcd-3.5.9/tests/go.mod
--- old/etcd-3.5.8/tests/go.mod 2023-04-13 12:08:47.000000000 +0200
+++ new/etcd-3.5.9/tests/go.mod 2023-05-11 13:39:43.000000000 +0200
@@ -28,14 +28,14 @@
        github.com/spf13/cobra v1.1.3
        github.com/spf13/pflag v1.0.5
        github.com/stretchr/testify v1.8.1
-       go.etcd.io/etcd/api/v3 v3.5.8
-       go.etcd.io/etcd/client/pkg/v3 v3.5.8
-       go.etcd.io/etcd/client/v2 v2.305.8
-       go.etcd.io/etcd/client/v3 v3.5.8
-       go.etcd.io/etcd/etcdutl/v3 v3.5.8
-       go.etcd.io/etcd/pkg/v3 v3.5.8
-       go.etcd.io/etcd/raft/v3 v3.5.8
-       go.etcd.io/etcd/server/v3 v3.5.8
+       go.etcd.io/etcd/api/v3 v3.5.9
+       go.etcd.io/etcd/client/pkg/v3 v3.5.9
+       go.etcd.io/etcd/client/v2 v2.305.9
+       go.etcd.io/etcd/client/v3 v3.5.9
+       go.etcd.io/etcd/etcdutl/v3 v3.5.9
+       go.etcd.io/etcd/pkg/v3 v3.5.9
+       go.etcd.io/etcd/raft/v3 v3.5.9
+       go.etcd.io/etcd/server/v3 v3.5.9
        go.uber.org/zap v1.17.0
        golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4
        golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/etcd-3.5.8/tests/integration/v3_auth_test.go 
new/etcd-3.5.9/tests/integration/v3_auth_test.go
--- old/etcd-3.5.8/tests/integration/v3_auth_test.go    2023-04-13 
12:08:47.000000000 +0200
+++ new/etcd-3.5.9/tests/integration/v3_auth_test.go    2023-05-11 
13:39:43.000000000 +0200
@@ -177,12 +177,10 @@
        // wait for lease expire
        time.Sleep(3 * time.Second)
 
-       tresp, terr := api.Lease.LeaseTimeToLive(
+       tresp, terr := rootc.TimeToLive(
                context.TODO(),
-               &pb.LeaseTimeToLiveRequest{
-                       ID:   int64(leaseID),
-                       Keys: true,
-               },
+               leaseID,
+               clientv3.WithAttachedKeys(),
        )
        if terr != nil {
                t.Error(terr)
@@ -553,3 +551,86 @@
 
        <-watchEndCh
 }
+
+func TestV3AuthWithLeaseTimeToLive(t *testing.T) {
+       BeforeTest(t)
+       clus := NewClusterV3(t, &ClusterConfig{Size: 1})
+       defer clus.Terminate(t)
+
+       users := []user{
+               {
+                       name:     "user1",
+                       password: "user1-123",
+                       role:     "role1",
+                       key:      "k1",
+                       end:      "k3",
+               },
+               {
+                       name:     "user2",
+                       password: "user2-123",
+                       role:     "role2",
+                       key:      "k2",
+                       end:      "k4",
+               },
+       }
+       authSetupUsers(t, toGRPC(clus.Client(0)).Auth, users)
+
+       authSetupRoot(t, toGRPC(clus.Client(0)).Auth)
+
+       user1c, cerr := NewClient(t, clientv3.Config{Endpoints: 
clus.Client(0).Endpoints(), Username: "user1", Password: "user1-123"})
+       if cerr != nil {
+               t.Fatal(cerr)
+       }
+       defer user1c.Close()
+
+       user2c, cerr := NewClient(t, clientv3.Config{Endpoints: 
clus.Client(0).Endpoints(), Username: "user2", Password: "user2-123"})
+       if cerr != nil {
+               t.Fatal(cerr)
+       }
+       defer user2c.Close()
+
+       leaseResp, err := user1c.Grant(context.TODO(), 90)
+       if err != nil {
+               t.Fatal(err)
+       }
+       leaseID := leaseResp.ID
+       _, err = user1c.Put(context.TODO(), "k1", "val", 
clientv3.WithLease(leaseID))
+       if err != nil {
+               t.Fatal(err)
+       }
+       // k2 can be accessed from both user1 and user2
+       _, err = user1c.Put(context.TODO(), "k2", "val", 
clientv3.WithLease(leaseID))
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       _, err = user1c.TimeToLive(context.TODO(), leaseID)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       _, err = user2c.TimeToLive(context.TODO(), leaseID)
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       _, err = user2c.TimeToLive(context.TODO(), leaseID, 
clientv3.WithAttachedKeys())
+       if err == nil {
+               t.Fatal("timetolive from user2 should be failed with permission 
denied")
+       }
+
+       rootc, cerr := NewClient(t, clientv3.Config{Endpoints: 
clus.Client(0).Endpoints(), Username: "root", Password: "123"})
+       if cerr != nil {
+               t.Fatal(cerr)
+       }
+       defer rootc.Close()
+
+       if _, err := rootc.RoleRevokePermission(context.TODO(), "role1", "k1", 
"k3"); err != nil {
+               t.Fatal(err)
+       }
+
+       _, err = user1c.TimeToLive(context.TODO(), leaseID, 
clientv3.WithAttachedKeys())
+       if err == nil {
+               t.Fatal("timetolive from user2 should be failed with permission 
denied")
+       }
+}

++++++ vendor.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/etcdctl/vendor/go.etcd.io/etcd/api/v3/version/version.go 
new/vendor/etcdctl/vendor/go.etcd.io/etcd/api/v3/version/version.go
--- old/vendor/etcdctl/vendor/go.etcd.io/etcd/api/v3/version/version.go 
2023-04-26 10:54:45.793320654 +0200
+++ new/vendor/etcdctl/vendor/go.etcd.io/etcd/api/v3/version/version.go 
2023-05-25 10:54:34.635492323 +0200
@@ -26,7 +26,7 @@
 var (
        // MinClusterVersion is the min cluster version this etcd binary is 
compatible with.
        MinClusterVersion = "3.0.0"
-       Version           = "3.5.8"
+       Version           = "3.5.9"
        APIVersion        = "unknown"
 
        // Git SHA Value will be set during build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/etcdctl/vendor/go.etcd.io/etcd/server/v3/etcdserver/v3_server.go 
new/vendor/etcdctl/vendor/go.etcd.io/etcd/server/v3/etcdserver/v3_server.go
--- old/vendor/etcdctl/vendor/go.etcd.io/etcd/server/v3/etcdserver/v3_server.go 
2023-04-26 10:54:45.813321168 +0200
+++ new/vendor/etcdctl/vendor/go.etcd.io/etcd/server/v3/etcdserver/v3_server.go 
2023-05-25 10:54:34.651492018 +0200
@@ -336,7 +336,32 @@
        return -1, ErrCanceled
 }
 
-func (s *EtcdServer) LeaseTimeToLive(ctx context.Context, r 
*pb.LeaseTimeToLiveRequest) (*pb.LeaseTimeToLiveResponse, error) {
+func (s *EtcdServer) checkLeaseTimeToLive(ctx context.Context, leaseID 
lease.LeaseID) (uint64, error) {
+       rev := s.AuthStore().Revision()
+       if !s.AuthStore().IsAuthEnabled() {
+               return rev, nil
+       }
+       authInfo, err := s.AuthInfoFromCtx(ctx)
+       if err != nil {
+               return rev, err
+       }
+       if authInfo == nil {
+               return rev, auth.ErrUserEmpty
+       }
+
+       l := s.lessor.Lookup(leaseID)
+       if l != nil {
+               for _, key := range l.Keys() {
+                       if err := s.AuthStore().IsRangePermitted(authInfo, 
[]byte(key), []byte{}); err != nil {
+                               return 0, err
+                       }
+               }
+       }
+
+       return rev, nil
+}
+
+func (s *EtcdServer) leaseTimeToLive(ctx context.Context, r 
*pb.LeaseTimeToLiveRequest) (*pb.LeaseTimeToLiveResponse, error) {
        if s.isLeader() {
                if err := s.waitAppliedIndex(); err != nil {
                        return nil, err
@@ -386,6 +411,31 @@
        return nil, ErrCanceled
 }
 
+func (s *EtcdServer) LeaseTimeToLive(ctx context.Context, r 
*pb.LeaseTimeToLiveRequest) (*pb.LeaseTimeToLiveResponse, error) {
+       var rev uint64
+       var err error
+       if r.Keys {
+               // check RBAC permission only if Keys is true
+               rev, err = s.checkLeaseTimeToLive(ctx, lease.LeaseID(r.ID))
+               if err != nil {
+                       return nil, err
+               }
+       }
+
+       resp, err := s.leaseTimeToLive(ctx, r)
+       if err != nil {
+               return nil, err
+       }
+
+       if r.Keys {
+               if s.AuthStore().IsAuthEnabled() && rev != 
s.AuthStore().Revision() {
+                       return nil, auth.ErrAuthOldRevision
+               }
+       }
+       return resp, nil
+}
+
+// LeaseLeases is really ListLeases !???
 func (s *EtcdServer) LeaseLeases(ctx context.Context, r 
*pb.LeaseLeasesRequest) (*pb.LeaseLeasesResponse, error) {
        ls := s.lessor.Leases()
        lss := make([]*pb.LeaseStatus, len(ls))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/etcdctl/vendor/modules.txt 
new/vendor/etcdctl/vendor/modules.txt
--- old/vendor/etcdctl/vendor/modules.txt       2023-04-26 10:54:45.909323632 
+0200
+++ new/vendor/etcdctl/vendor/modules.txt       2023-05-25 10:54:34.551493926 
+0200
@@ -99,7 +99,7 @@
 # go.etcd.io/bbolt v1.3.7
 ## explicit; go 1.17
 go.etcd.io/bbolt
-# go.etcd.io/etcd/api/v3 v3.5.8 => ../api
+# go.etcd.io/etcd/api/v3 v3.5.9 => ../api
 ## explicit; go 1.19
 go.etcd.io/etcd/api/v3/authpb
 go.etcd.io/etcd/api/v3/etcdserverpb
@@ -107,7 +107,7 @@
 go.etcd.io/etcd/api/v3/mvccpb
 go.etcd.io/etcd/api/v3/v3rpc/rpctypes
 go.etcd.io/etcd/api/v3/version
-# go.etcd.io/etcd/client/pkg/v3 v3.5.8 => ../client/pkg
+# go.etcd.io/etcd/client/pkg/v3 v3.5.9 => ../client/pkg
 ## explicit; go 1.19
 go.etcd.io/etcd/client/pkg/v3/fileutil
 go.etcd.io/etcd/client/pkg/v3/logutil
@@ -117,10 +117,10 @@
 go.etcd.io/etcd/client/pkg/v3/tlsutil
 go.etcd.io/etcd/client/pkg/v3/transport
 go.etcd.io/etcd/client/pkg/v3/types
-# go.etcd.io/etcd/client/v2 v2.305.8 => ../client/v2
+# go.etcd.io/etcd/client/v2 v2.305.9 => ../client/v2
 ## explicit; go 1.19
 go.etcd.io/etcd/client/v2
-# go.etcd.io/etcd/client/v3 v3.5.8 => ../client/v3
+# go.etcd.io/etcd/client/v3 v3.5.9 => ../client/v3
 ## explicit; go 1.19
 go.etcd.io/etcd/client/v3
 go.etcd.io/etcd/client/v3/concurrency
@@ -129,11 +129,11 @@
 go.etcd.io/etcd/client/v3/internal/resolver
 go.etcd.io/etcd/client/v3/mirror
 go.etcd.io/etcd/client/v3/snapshot
-# go.etcd.io/etcd/etcdutl/v3 v3.5.8 => ../etcdutl
+# go.etcd.io/etcd/etcdutl/v3 v3.5.9 => ../etcdutl
 ## explicit; go 1.19
 go.etcd.io/etcd/etcdutl/v3/etcdutl
 go.etcd.io/etcd/etcdutl/v3/snapshot
-# go.etcd.io/etcd/pkg/v3 v3.5.8 => ../pkg
+# go.etcd.io/etcd/pkg/v3 v3.5.9 => ../pkg
 ## explicit; go 1.19
 go.etcd.io/etcd/pkg/v3/adt
 go.etcd.io/etcd/pkg/v3/cobrautl
@@ -151,14 +151,14 @@
 go.etcd.io/etcd/pkg/v3/schedule
 go.etcd.io/etcd/pkg/v3/traceutil
 go.etcd.io/etcd/pkg/v3/wait
-# go.etcd.io/etcd/raft/v3 v3.5.8 => ../raft
+# go.etcd.io/etcd/raft/v3 v3.5.9 => ../raft
 ## explicit; go 1.19
 go.etcd.io/etcd/raft/v3
 go.etcd.io/etcd/raft/v3/confchange
 go.etcd.io/etcd/raft/v3/quorum
 go.etcd.io/etcd/raft/v3/raftpb
 go.etcd.io/etcd/raft/v3/tracker
-# go.etcd.io/etcd/server/v3 v3.5.8 => ../server
+# go.etcd.io/etcd/server/v3 v3.5.9 => ../server
 ## explicit; go 1.19
 go.etcd.io/etcd/server/v3/auth
 go.etcd.io/etcd/server/v3/config
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/etcdutl/vendor/go.etcd.io/etcd/api/v3/version/version.go 
new/vendor/etcdutl/vendor/go.etcd.io/etcd/api/v3/version/version.go
--- old/vendor/etcdutl/vendor/go.etcd.io/etcd/api/v3/version/version.go 
2023-04-26 10:54:45.793320654 +0200
+++ new/vendor/etcdutl/vendor/go.etcd.io/etcd/api/v3/version/version.go 
2023-05-25 10:54:34.635492323 +0200
@@ -26,7 +26,7 @@
 var (
        // MinClusterVersion is the min cluster version this etcd binary is 
compatible with.
        MinClusterVersion = "3.0.0"
-       Version           = "3.5.8"
+       Version           = "3.5.9"
        APIVersion        = "unknown"
 
        // Git SHA Value will be set during build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/etcdutl/vendor/go.etcd.io/etcd/server/v3/etcdserver/v3_server.go 
new/vendor/etcdutl/vendor/go.etcd.io/etcd/server/v3/etcdserver/v3_server.go
--- old/vendor/etcdutl/vendor/go.etcd.io/etcd/server/v3/etcdserver/v3_server.go 
2023-04-26 10:54:45.813321168 +0200
+++ new/vendor/etcdutl/vendor/go.etcd.io/etcd/server/v3/etcdserver/v3_server.go 
2023-05-25 10:54:34.651492018 +0200
@@ -336,7 +336,32 @@
        return -1, ErrCanceled
 }
 
-func (s *EtcdServer) LeaseTimeToLive(ctx context.Context, r 
*pb.LeaseTimeToLiveRequest) (*pb.LeaseTimeToLiveResponse, error) {
+func (s *EtcdServer) checkLeaseTimeToLive(ctx context.Context, leaseID 
lease.LeaseID) (uint64, error) {
+       rev := s.AuthStore().Revision()
+       if !s.AuthStore().IsAuthEnabled() {
+               return rev, nil
+       }
+       authInfo, err := s.AuthInfoFromCtx(ctx)
+       if err != nil {
+               return rev, err
+       }
+       if authInfo == nil {
+               return rev, auth.ErrUserEmpty
+       }
+
+       l := s.lessor.Lookup(leaseID)
+       if l != nil {
+               for _, key := range l.Keys() {
+                       if err := s.AuthStore().IsRangePermitted(authInfo, 
[]byte(key), []byte{}); err != nil {
+                               return 0, err
+                       }
+               }
+       }
+
+       return rev, nil
+}
+
+func (s *EtcdServer) leaseTimeToLive(ctx context.Context, r 
*pb.LeaseTimeToLiveRequest) (*pb.LeaseTimeToLiveResponse, error) {
        if s.isLeader() {
                if err := s.waitAppliedIndex(); err != nil {
                        return nil, err
@@ -386,6 +411,31 @@
        return nil, ErrCanceled
 }
 
+func (s *EtcdServer) LeaseTimeToLive(ctx context.Context, r 
*pb.LeaseTimeToLiveRequest) (*pb.LeaseTimeToLiveResponse, error) {
+       var rev uint64
+       var err error
+       if r.Keys {
+               // check RBAC permission only if Keys is true
+               rev, err = s.checkLeaseTimeToLive(ctx, lease.LeaseID(r.ID))
+               if err != nil {
+                       return nil, err
+               }
+       }
+
+       resp, err := s.leaseTimeToLive(ctx, r)
+       if err != nil {
+               return nil, err
+       }
+
+       if r.Keys {
+               if s.AuthStore().IsAuthEnabled() && rev != 
s.AuthStore().Revision() {
+                       return nil, auth.ErrAuthOldRevision
+               }
+       }
+       return resp, nil
+}
+
+// LeaseLeases is really ListLeases !???
 func (s *EtcdServer) LeaseLeases(ctx context.Context, r 
*pb.LeaseLeasesRequest) (*pb.LeaseLeasesResponse, error) {
        ls := s.lessor.Leases()
        lss := make([]*pb.LeaseStatus, len(ls))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/etcdutl/vendor/modules.txt 
new/vendor/etcdutl/vendor/modules.txt
--- old/vendor/etcdutl/vendor/modules.txt       2023-04-26 10:54:46.137329489 
+0200
+++ new/vendor/etcdutl/vendor/modules.txt       2023-05-25 10:54:34.747490186 
+0200
@@ -84,7 +84,7 @@
 # go.etcd.io/bbolt v1.3.7
 ## explicit; go 1.17
 go.etcd.io/bbolt
-# go.etcd.io/etcd/api/v3 v3.5.8 => ../api
+# go.etcd.io/etcd/api/v3 v3.5.9 => ../api
 ## explicit; go 1.19
 go.etcd.io/etcd/api/v3/authpb
 go.etcd.io/etcd/api/v3/etcdserverpb
@@ -92,7 +92,7 @@
 go.etcd.io/etcd/api/v3/mvccpb
 go.etcd.io/etcd/api/v3/v3rpc/rpctypes
 go.etcd.io/etcd/api/v3/version
-# go.etcd.io/etcd/client/pkg/v3 v3.5.8 => ../client/pkg
+# go.etcd.io/etcd/client/pkg/v3 v3.5.9 => ../client/pkg
 ## explicit; go 1.19
 go.etcd.io/etcd/client/pkg/v3/fileutil
 go.etcd.io/etcd/client/pkg/v3/logutil
@@ -102,17 +102,17 @@
 go.etcd.io/etcd/client/pkg/v3/tlsutil
 go.etcd.io/etcd/client/pkg/v3/transport
 go.etcd.io/etcd/client/pkg/v3/types
-# go.etcd.io/etcd/client/v2 v2.305.8 => ../client/v2
+# go.etcd.io/etcd/client/v2 v2.305.9 => ../client/v2
 ## explicit; go 1.19
 go.etcd.io/etcd/client/v2
-# go.etcd.io/etcd/client/v3 v3.5.8 => ../client/v3
+# go.etcd.io/etcd/client/v3 v3.5.9 => ../client/v3
 ## explicit; go 1.19
 go.etcd.io/etcd/client/v3
 go.etcd.io/etcd/client/v3/credentials
 go.etcd.io/etcd/client/v3/internal/endpoint
 go.etcd.io/etcd/client/v3/internal/resolver
 go.etcd.io/etcd/client/v3/snapshot
-# go.etcd.io/etcd/pkg/v3 v3.5.8 => ../pkg
+# go.etcd.io/etcd/pkg/v3 v3.5.9 => ../pkg
 ## explicit; go 1.19
 go.etcd.io/etcd/pkg/v3/adt
 go.etcd.io/etcd/pkg/v3/cobrautl
@@ -128,14 +128,14 @@
 go.etcd.io/etcd/pkg/v3/schedule
 go.etcd.io/etcd/pkg/v3/traceutil
 go.etcd.io/etcd/pkg/v3/wait
-# go.etcd.io/etcd/raft/v3 v3.5.8 => ../raft
+# go.etcd.io/etcd/raft/v3 v3.5.9 => ../raft
 ## explicit; go 1.19
 go.etcd.io/etcd/raft/v3
 go.etcd.io/etcd/raft/v3/confchange
 go.etcd.io/etcd/raft/v3/quorum
 go.etcd.io/etcd/raft/v3/raftpb
 go.etcd.io/etcd/raft/v3/tracker
-# go.etcd.io/etcd/server/v3 v3.5.8 => ../server
+# go.etcd.io/etcd/server/v3 v3.5.9 => ../server
 ## explicit; go 1.19
 go.etcd.io/etcd/server/v3/auth
 go.etcd.io/etcd/server/v3/config
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vendor/server/vendor/go.etcd.io/etcd/api/v3/version/version.go 
new/vendor/server/vendor/go.etcd.io/etcd/api/v3/version/version.go
--- old/vendor/server/vendor/go.etcd.io/etcd/api/v3/version/version.go  
2023-04-26 10:54:45.793320654 +0200
+++ new/vendor/server/vendor/go.etcd.io/etcd/api/v3/version/version.go  
2023-05-25 10:54:34.635492323 +0200
@@ -26,7 +26,7 @@
 var (
        // MinClusterVersion is the min cluster version this etcd binary is 
compatible with.
        MinClusterVersion = "3.0.0"
-       Version           = "3.5.8"
+       Version           = "3.5.9"
        APIVersion        = "unknown"
 
        // Git SHA Value will be set during build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/server/vendor/modules.txt 
new/vendor/server/vendor/modules.txt
--- old/vendor/server/vendor/modules.txt        2023-04-26 10:54:45.701318293 
+0200
+++ new/vendor/server/vendor/modules.txt        2023-05-25 10:54:34.351497742 
+0200
@@ -125,7 +125,7 @@
 # go.etcd.io/bbolt v1.3.7
 ## explicit; go 1.17
 go.etcd.io/bbolt
-# go.etcd.io/etcd/api/v3 v3.5.8 => ../api
+# go.etcd.io/etcd/api/v3 v3.5.9 => ../api
 ## explicit; go 1.19
 go.etcd.io/etcd/api/v3/authpb
 go.etcd.io/etcd/api/v3/etcdserverpb
@@ -134,7 +134,7 @@
 go.etcd.io/etcd/api/v3/mvccpb
 go.etcd.io/etcd/api/v3/v3rpc/rpctypes
 go.etcd.io/etcd/api/v3/version
-# go.etcd.io/etcd/client/pkg/v3 v3.5.8 => ../client/pkg
+# go.etcd.io/etcd/client/pkg/v3 v3.5.9 => ../client/pkg
 ## explicit; go 1.19
 go.etcd.io/etcd/client/pkg/v3/fileutil
 go.etcd.io/etcd/client/pkg/v3/logutil
@@ -145,10 +145,10 @@
 go.etcd.io/etcd/client/pkg/v3/tlsutil
 go.etcd.io/etcd/client/pkg/v3/transport
 go.etcd.io/etcd/client/pkg/v3/types
-# go.etcd.io/etcd/client/v2 v2.305.8 => ../client/v2
+# go.etcd.io/etcd/client/v2 v2.305.9 => ../client/v2
 ## explicit; go 1.19
 go.etcd.io/etcd/client/v2
-# go.etcd.io/etcd/client/v3 v3.5.8 => ../client/v3
+# go.etcd.io/etcd/client/v3 v3.5.9 => ../client/v3
 ## explicit; go 1.19
 go.etcd.io/etcd/client/v3
 go.etcd.io/etcd/client/v3/concurrency
@@ -160,7 +160,7 @@
 go.etcd.io/etcd/client/v3/naming/endpoints
 go.etcd.io/etcd/client/v3/naming/endpoints/internal
 go.etcd.io/etcd/client/v3/ordering
-# go.etcd.io/etcd/pkg/v3 v3.5.8 => ../pkg
+# go.etcd.io/etcd/pkg/v3 v3.5.9 => ../pkg
 ## explicit; go 1.19
 go.etcd.io/etcd/pkg/v3/adt
 go.etcd.io/etcd/pkg/v3/contention
@@ -178,7 +178,7 @@
 go.etcd.io/etcd/pkg/v3/schedule
 go.etcd.io/etcd/pkg/v3/traceutil
 go.etcd.io/etcd/pkg/v3/wait
-# go.etcd.io/etcd/raft/v3 v3.5.8 => ../raft
+# go.etcd.io/etcd/raft/v3 v3.5.9 => ../raft
 ## explicit; go 1.19
 go.etcd.io/etcd/raft/v3
 go.etcd.io/etcd/raft/v3/confchange

Reply via email to