Skip to content

Commit 42d1c02

Browse files
committed
registry: ensure default auth config has address
Signed-off-by: Samuel Karp <skarp@amazon.com>
1 parent bfcd17b commit 42d1c02

File tree

3 files changed

+27
-17
lines changed

3 files changed

+27
-17
lines changed

cli/command/registry.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,17 +63,14 @@ func RegistryAuthenticationPrivilegedFunc(cli Cli, index *registrytypes.IndexInf
6363
indexServer := registry.GetAuthConfigKey(index)
6464
isDefaultRegistry := indexServer == ElectAuthServer(context.Background(), cli)
6565
authConfig, err := GetDefaultAuthConfig(cli, true, indexServer, isDefaultRegistry)
66-
if authConfig == nil {
67-
authConfig = &types.AuthConfig{}
68-
}
6966
if err != nil {
7067
fmt.Fprintf(cli.Err(), "Unable to retrieve stored credentials for %s, error: %s.\n", indexServer, err)
7168
}
72-
err = ConfigureAuth(cli, "", "", authConfig, isDefaultRegistry)
69+
err = ConfigureAuth(cli, "", "", &authConfig, isDefaultRegistry)
7370
if err != nil {
7471
return "", err
7572
}
76-
return EncodeAuthToBase64(*authConfig)
73+
return EncodeAuthToBase64(authConfig)
7774
}
7875
}
7976

@@ -92,7 +89,7 @@ func ResolveAuthConfig(ctx context.Context, cli Cli, index *registrytypes.IndexI
9289

9390
// GetDefaultAuthConfig gets the default auth config given a serverAddress
9491
// If credentials for given serverAddress exists in the credential store, the configuration will be populated with values in it
95-
func GetDefaultAuthConfig(cli Cli, checkCredStore bool, serverAddress string, isDefaultRegistry bool) (*types.AuthConfig, error) {
92+
func GetDefaultAuthConfig(cli Cli, checkCredStore bool, serverAddress string, isDefaultRegistry bool) (types.AuthConfig, error) {
9693
if !isDefaultRegistry {
9794
serverAddress = registry.ConvertToHostname(serverAddress)
9895
}
@@ -101,13 +98,15 @@ func GetDefaultAuthConfig(cli Cli, checkCredStore bool, serverAddress string, is
10198
if checkCredStore {
10299
authconfig, err = cli.ConfigFile().GetAuthConfig(serverAddress)
103100
if err != nil {
104-
return nil, err
101+
return types.AuthConfig{
102+
ServerAddress: serverAddress,
103+
}, err
105104
}
106105
}
107106
authconfig.ServerAddress = serverAddress
108107
authconfig.IdentityToken = ""
109108
res := types.AuthConfig(authconfig)
110-
return &res, nil
109+
return res, nil
111110
}
112111

113112
// ConfigureAuth handles prompting of user's username and password if needed

cli/command/registry/login.go

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,22 +114,19 @@ func runLogin(dockerCli command.Cli, opts loginOptions) error { //nolint: gocycl
114114
var response registrytypes.AuthenticateOKBody
115115
isDefaultRegistry := serverAddress == authServer
116116
authConfig, err := command.GetDefaultAuthConfig(dockerCli, opts.user == "" && opts.password == "", serverAddress, isDefaultRegistry)
117-
if authConfig == nil {
118-
authConfig = &types.AuthConfig{}
119-
}
120117
if err == nil && authConfig.Username != "" && authConfig.Password != "" {
121-
response, err = loginWithCredStoreCreds(ctx, dockerCli, authConfig)
118+
response, err = loginWithCredStoreCreds(ctx, dockerCli, &authConfig)
122119
}
123120
if err != nil || authConfig.Username == "" || authConfig.Password == "" {
124-
err = command.ConfigureAuth(dockerCli, opts.user, opts.password, authConfig, isDefaultRegistry)
121+
err = command.ConfigureAuth(dockerCli, opts.user, opts.password, &authConfig, isDefaultRegistry)
125122
if err != nil {
126123
return err
127124
}
128125

129-
response, err = clnt.RegistryLogin(ctx, *authConfig)
126+
response, err = clnt.RegistryLogin(ctx, authConfig)
130127
if err != nil && client.IsErrConnectionFailed(err) {
131128
// If the server isn't responding (yet) attempt to login purely client side
132-
response, err = loginClientSide(ctx, *authConfig)
129+
response, err = loginClientSide(ctx, authConfig)
133130
}
134131
// If we (still) have an error, give up
135132
if err != nil {
@@ -152,7 +149,7 @@ func runLogin(dockerCli command.Cli, opts loginOptions) error { //nolint: gocycl
152149
}
153150
}
154151

155-
if err := creds.Store(configtypes.AuthConfig(*authConfig)); err != nil {
152+
if err := creds.Store(configtypes.AuthConfig(authConfig)); err != nil {
156153
return errors.Errorf("Error saving credentials: %v", err)
157154
}
158155

cli/command/registry_test.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,21 @@ func TestGetDefaultAuthConfig(t *testing.T) {
145145
assert.Check(t, is.Equal(tc.expectedErr, err.Error()))
146146
} else {
147147
assert.NilError(t, err)
148-
assert.Check(t, is.DeepEqual(tc.expectedAuthConfig, *authconfig))
148+
assert.Check(t, is.DeepEqual(tc.expectedAuthConfig, authconfig))
149149
}
150150
}
151151
}
152+
153+
func TestGetDefaultAuthConfig_HelperError(t *testing.T) {
154+
cli := test.NewFakeCli(&fakeClient{})
155+
errBuf := new(bytes.Buffer)
156+
cli.SetErr(errBuf)
157+
cli.ConfigFile().CredentialsStore = "fake-does-not-exist"
158+
serverAddress := "test-server-address"
159+
expectedAuthConfig := types.AuthConfig{
160+
ServerAddress: serverAddress,
161+
}
162+
authconfig, err := GetDefaultAuthConfig(cli, true, serverAddress, serverAddress == "https://index.docker.io/v1/")
163+
assert.Check(t, is.DeepEqual(expectedAuthConfig, authconfig))
164+
assert.Check(t, is.ErrorContains(err, "docker-credential-fake-does-not-exist"))
165+
}

0 commit comments

Comments
 (0)