@@ -13,7 +13,6 @@ import (
13
13
14
14
"github.com/docker/docker-credential-helpers/credentials"
15
15
"github.com/jsipprell/keyctl"
16
- "github.com/pkg/errors"
17
16
)
18
17
19
18
// Keyctl based credential helper looks for a default keyring inside
@@ -36,11 +35,11 @@ func (k Keyctl) createDefaultPersistentKeyring() (string, error) {
36
35
cmd .Stdout = & out
37
36
err := cmd .Run ()
38
37
if err != nil {
39
- return "" , errors . Wrapf ( err , "cannot run keyctl command to create persistent keyring %+v : %s " , err , errout .String ())
38
+ return "" , fmt . Errorf ( "cannot run keyctl command to create persistent keyring: %s : %w " , errout .String (), err )
40
39
}
41
40
persistentKeyringID := out .String ()
42
41
if err != nil {
43
- return "" , errors . Wrapf ( err , "cannot create or read persistent keyring %+v " , err )
42
+ return "" , fmt . Errorf ( "cannot create or read persistent keyring: %w " , err )
44
43
}
45
44
return persistentKeyringID , nil
46
45
}
@@ -49,12 +48,12 @@ func (k Keyctl) getDefaultCredsStoreFromPersistent() (keyctl.NamedKeyring, error
49
48
var out , errout bytes.Buffer
50
49
persistentKeyringID , err := k .createDefaultPersistentKeyring ()
51
50
if err != nil {
52
- return nil , errors . Wrap ( err , "default persistent keyring cannot be created" )
51
+ return nil , fmt . Errorf ( "default persistent keyring cannot be created: %w" , err )
53
52
}
54
53
55
54
defaultSessionKeyring , err := keyctl .SessionKeyring ()
56
55
if err != nil {
57
- return nil , errors . New ("errors getting session keyring" )
56
+ return nil , fmt . Errorf ("errors getting session keyring: %w" , err )
58
57
}
59
58
60
59
defaultKeyring , err := keyctl .OpenKeyring (defaultSessionKeyring , defaultKeyringName )
@@ -65,13 +64,13 @@ func (k Keyctl) getDefaultCredsStoreFromPersistent() (keyctl.NamedKeyring, error
65
64
cmd .Stderr = & errout
66
65
err := cmd .Run ()
67
66
if err != nil {
68
- return nil , errors . Wrapf ( err , "cannot run keyctl command to created credstore keyring %s %s %s" , cmd .String (), errout .String (), out .String ())
67
+ return nil , fmt . Errorf ( "cannot run keyctl command to created credstore keyring (%s): %s %s: %w " , cmd .String (), errout .String (), out .String (), err )
69
68
}
70
69
}
71
70
/* Search for it again and return the default keyring*/
72
71
defaultKeyring , err = keyctl .OpenKeyring (defaultSessionKeyring , defaultKeyringName )
73
72
if err != nil {
74
- return nil , errors . Wrap ( err , "failed to lookup default session keyring" )
73
+ return nil , fmt . Errorf ( "failed to lookup default session keyring: %w" , err )
75
74
}
76
75
77
76
return defaultKeyring , nil
@@ -80,25 +79,32 @@ func (k Keyctl) getDefaultCredsStoreFromPersistent() (keyctl.NamedKeyring, error
80
79
// getDefaultCredsStore is a helper function to get the default credsStore keyring
81
80
func (k Keyctl ) getDefaultCredsStore () (keyctl.NamedKeyring , error ) {
82
81
if persistent == 1 {
83
- return k .getDefaultCredsStoreFromPersistent ()
82
+ cs , err := k .getDefaultCredsStoreFromPersistent ()
83
+ if err != nil {
84
+ return nil , err
85
+ }
86
+ if cs == nil {
87
+ return nil , fmt .Errorf ("nil credstore" )
88
+ }
89
+ return cs , err
84
90
}
85
91
defaultSessionKeyring , err := keyctl .SessionKeyring ()
86
92
if err != nil {
87
- return nil , errors . Wrap ( err , "error getting session keyring" )
93
+ return nil , fmt . Errorf ( "error getting session keyring: %w" , err )
88
94
}
89
95
90
96
defaultKeyring , err := keyctl .OpenKeyring (defaultSessionKeyring , defaultKeyringName )
91
97
if err != nil || defaultKeyring == nil {
92
98
if defaultKeyring == nil {
93
99
defaultKeyring , err = keyctl .CreateKeyring (defaultSessionKeyring , defaultKeyringName )
94
100
if err != nil {
95
- return nil , errors . Wrap ( err , "failed to create default credsStore keyring" )
101
+ return nil , fmt . Errorf ( "failed to create default credsStore keyring: %w" , err )
96
102
}
97
103
}
98
104
}
99
105
100
106
if defaultKeyring == nil {
101
- return nil , errors . Wrap ( errors . New ( "" ), " nil credstore" )
107
+ return nil , fmt . Errorf ( " nil credstore" )
102
108
}
103
109
104
110
return defaultKeyring , nil
@@ -107,29 +113,29 @@ func (k Keyctl) getDefaultCredsStore() (keyctl.NamedKeyring, error) {
107
113
// Add adds new credentials to the keychain.
108
114
func (k Keyctl ) Add (creds * credentials.Credentials ) error {
109
115
defaultKeyring , err := k .getDefaultCredsStore ()
110
- if err != nil || defaultKeyring == nil {
111
- return errors . Wrapf ( err , "failed to create credsStore entry for %s" , creds .ServerURL )
116
+ if err != nil {
117
+ return fmt . Errorf ( "failed to create credsStore entry for %s: %w " , creds .ServerURL , err )
112
118
}
113
119
114
120
// create a child keyring under default for given url
115
121
encoded := base64 .URLEncoding .EncodeToString ([]byte (strings .TrimSuffix (creds .ServerURL , "\n " )))
116
122
urlKeyring , err := keyctl .CreateKeyring (defaultKeyring , encoded )
117
123
if err != nil {
118
- return errors . Wrapf ( err , "failed to create keyring for %s" , creds .ServerURL )
124
+ return fmt . Errorf ( "failed to create keyring for %s: %w " , creds .ServerURL , err )
119
125
}
120
126
121
127
_ , err = urlKeyring .Add (creds .Username , []byte (creds .Secret ))
122
128
if err != nil {
123
- return errors . Wrapf ( err , "failed to add creds to keryring for %s with error : %+v " , creds .ServerURL , err )
129
+ return fmt . Errorf ( "failed to add creds to keryring for %s: %w " , creds .ServerURL , err )
124
130
}
125
131
return err
126
132
}
127
133
128
134
// searchHelper function searches for an url inside the default keyring.
129
135
func (k Keyctl ) searchHelper (serverURL string ) (keyctl.NamedKeyring , string , error ) {
130
136
defaultKeyring , err := k .getDefaultCredsStore ()
131
- if err != nil || defaultKeyring == nil {
132
- return nil , "" , fmt .Errorf ("searchHelper failed: cannot read defaultCredsStore" )
137
+ if err != nil {
138
+ return nil , "" , fmt .Errorf ("searchHelper failed: cannot read defaultCredsStore: %w" , err )
133
139
}
134
140
135
141
encoded := base64 .URLEncoding .EncodeToString ([]byte (strings .TrimSuffix (serverURL , "\n " )))
@@ -166,21 +172,21 @@ func (k Keyctl) searchHelper(serverURL string) (keyctl.NamedKeyring, string, err
166
172
// Get returns the username and secret to use for a given registry server URL.
167
173
func (k Keyctl ) Get (serverURL string ) (string , string , error ) {
168
174
if serverURL == "" {
169
- return "" , "" , errors . New ("missing server url" )
175
+ return "" , "" , fmt . Errorf ("missing server url" )
170
176
}
171
177
172
178
serverURL = strings .TrimSuffix (serverURL , "\n " )
173
179
urlKeyring , searchData , err := k .searchHelper (serverURL )
174
180
if err != nil {
175
- return "" , "" , errors . Wrapf ( err , "url not found by searchHelper: %s err: %v " , serverURL , err )
181
+ return "" , "" , fmt . Errorf ( "url (%s) not found by searchHelper: %w " , serverURL , err )
176
182
}
177
183
key , err := urlKeyring .Search (searchData )
178
184
if err != nil {
179
- return "" , "" , errors . Wrapf ( err , "url not found in %+v" , urlKeyring )
185
+ return "" , "" , fmt . Errorf ( "url (%s) not found in %+v: %w " , serverURL , urlKeyring , err )
180
186
}
181
187
secret , err := key .Get ()
182
188
if err != nil {
183
- return "" , "" , errors . Wrapf ( err , "failed to read credentials for %s:%s " , serverURL , searchData )
189
+ return "" , "" , fmt . Errorf ( "failed to read credentials for url (%s): %s: %w " , serverURL , searchData , err )
184
190
}
185
191
186
192
return searchData , string (secret ), nil
@@ -191,7 +197,7 @@ func (k Keyctl) Delete(serverURL string) error {
191
197
serverURL = strings .TrimSuffix (serverURL , "\n " )
192
198
urlKeyring , searchData , err := k .searchHelper (serverURL )
193
199
if err != nil {
194
- return errors . Wrapf ( err , "cannot find server url %s " , serverURL )
200
+ return fmt . Errorf ( "cannot find server url (%s): %w " , serverURL , err )
195
201
}
196
202
197
203
key , err := urlKeyring .Search (searchData )
@@ -209,9 +215,9 @@ func (k Keyctl) Delete(serverURL string) error {
209
215
fmt .Printf ("cannot list keyring %s" , urlKeyring .Name ())
210
216
}
211
217
if len (refs ) == 0 {
212
- keyctl .UnlinkKeyring (urlKeyring )
218
+ _ = keyctl .UnlinkKeyring (urlKeyring )
213
219
} else {
214
- return errors . Wrapf ( err , "Canot remove keyring as its not empty %s" , urlKeyring .Name ())
220
+ return fmt . Errorf ( "canot remove keyring as its not empty %s" , urlKeyring .Name ())
215
221
}
216
222
217
223
return err
@@ -220,8 +226,8 @@ func (k Keyctl) Delete(serverURL string) error {
220
226
// List returns the stored URLs and corresponding usernames for a given credentials label
221
227
func (k Keyctl ) List () (map [string ]string , error ) {
222
228
defaultKeyring , err := k .getDefaultCredsStore ()
223
- if err != nil || defaultKeyring == nil {
224
- return nil , errors . Wrap ( err , "List() failed: cannot read default credStore" )
229
+ if err != nil {
230
+ return nil , fmt . Errorf ( " failed to list credentials : cannot read default credStore: %w" , err )
225
231
}
226
232
227
233
resp := map [string ]string {}
0 commit comments