|
|
@@ -276,6 +276,42 @@ func TestCtlV2Backup(t *testing.T) { // For https://github.com/coreos/etcd/issue
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func TestCtlV2AuthWithCommonName(t *testing.T) {
|
|
|
+ defer testutil.AfterTest(t)
|
|
|
+
|
|
|
+ copiedCfg := configClientTLS
|
|
|
+ copiedCfg.clientCertAuthEnabled = true
|
|
|
+
|
|
|
+ epc := setupEtcdctlTest(t, &copiedCfg, false)
|
|
|
+ defer func() {
|
|
|
+ if err := epc.Close(); err != nil {
|
|
|
+ t.Fatalf("error closing etcd processes (%v)", err)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ if err := etcdctlRoleAdd(epc, "testrole"); err != nil {
|
|
|
+ t.Fatalf("failed to add role (%v)", err)
|
|
|
+ }
|
|
|
+ if err := etcdctlRoleGrant(epc, "testrole", "--rw", "--path=/foo"); err != nil {
|
|
|
+ t.Fatalf("failed to grant role (%v)", err)
|
|
|
+ }
|
|
|
+ if err := etcdctlUserAdd(epc, "root", "123"); err != nil {
|
|
|
+ t.Fatalf("failed to add user (%v)", err)
|
|
|
+ }
|
|
|
+ if err := etcdctlUserAdd(epc, "Autogenerated CA", "123"); err != nil {
|
|
|
+ t.Fatalf("failed to add user (%v)", err)
|
|
|
+ }
|
|
|
+ if err := etcdctlUserGrant(epc, "Autogenerated CA", "testrole"); err != nil {
|
|
|
+ t.Fatalf("failed to grant role (%v)", err)
|
|
|
+ }
|
|
|
+ if err := etcdctlAuthEnable(epc); err != nil {
|
|
|
+ t.Fatalf("failed to enable auth (%v)", err)
|
|
|
+ }
|
|
|
+ if err := etcdctlSet(epc, "foo", "bar"); err != nil {
|
|
|
+ t.Fatalf("failed to write (%v)", err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func etcdctlPrefixArgs(clus *etcdProcessCluster) []string {
|
|
|
endpoints := ""
|
|
|
if proxies := clus.proxies(); len(proxies) != 0 {
|
|
|
@@ -348,6 +384,13 @@ func etcdctlRoleAdd(clus *etcdProcessCluster, role string) error {
|
|
|
return spawnWithExpect(cmdArgs, role)
|
|
|
}
|
|
|
|
|
|
+func etcdctlRoleGrant(clus *etcdProcessCluster, role string, perms ...string) error {
|
|
|
+ cmdArgs := append(etcdctlPrefixArgs(clus), "role", "grant")
|
|
|
+ cmdArgs = append(cmdArgs, perms...)
|
|
|
+ cmdArgs = append(cmdArgs, role)
|
|
|
+ return spawnWithExpect(cmdArgs, role)
|
|
|
+}
|
|
|
+
|
|
|
func etcdctlRoleList(clus *etcdProcessCluster, expectedRole string) error {
|
|
|
cmdArgs := append(etcdctlPrefixArgs(clus), "role", "list")
|
|
|
return spawnWithExpect(cmdArgs, expectedRole)
|