Skip to content

Commit 71cee2f

Browse files
committed
solver: fix reading secrets from any session
The current logic was incorrect in some places so that if first session randomly chosen by `Any()` returned NotFound then other sessions were not attempted. For the main use case of mounting secrets as files the logic was correct, but it was incorrect for example for the case of adding secrets as environment variables. Signed-off-by: Tonis Tiigi <[email protected]>
1 parent 3da6d96 commit 71cee2f

File tree

4 files changed

+16
-20
lines changed

4 files changed

+16
-20
lines changed

frontend/gateway/container/container.go

+1-4
Original file line numberDiff line numberDiff line change
@@ -389,14 +389,11 @@ func (gwCtr *gatewayContainer) loadSecretEnv(ctx context.Context, secretEnv []*p
389389
err = gwCtr.sm.Any(ctx, gwCtr.group, func(ctx context.Context, _ string, caller session.Caller) error {
390390
dt, err = secrets.GetSecret(ctx, caller, id)
391391
if err != nil {
392-
if errors.Is(err, secrets.ErrNotFound) && sopt.Optional {
393-
return nil
394-
}
395392
return err
396393
}
397394
return nil
398395
})
399-
if err != nil {
396+
if err != nil && !(errors.Is(err, secrets.ErrNotFound) && sopt.Optional) {
400397
return nil, err
401398
}
402399
out = append(out, fmt.Sprintf("%s=%s", sopt.Name, string(dt)))

solver/llbsolver/ops/exec.go

+1-4
Original file line numberDiff line numberDiff line change
@@ -559,14 +559,11 @@ func (e *ExecOp) loadSecretEnv(ctx context.Context, g session.Group) ([]string,
559559
err = e.sm.Any(ctx, g, func(ctx context.Context, _ string, caller session.Caller) error {
560560
dt, err = secrets.GetSecret(ctx, caller, id)
561561
if err != nil {
562-
if errors.Is(err, secrets.ErrNotFound) && sopt.Optional {
563-
return nil
564-
}
565562
return err
566563
}
567564
return nil
568565
})
569-
if err != nil {
566+
if err != nil && !(errors.Is(err, secrets.ErrNotFound) && sopt.Optional) {
570567
return nil, err
571568
}
572569
out = append(out, fmt.Sprintf("%s=%s", sopt.Name, string(dt)))

source/git/source.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -256,9 +256,11 @@ func (gs *gitSourceHandler) getAuthToken(ctx context.Context, g session.Group) e
256256
if err != nil {
257257
return err
258258
}
259-
return gs.sm.Any(ctx, g, func(ctx context.Context, _ string, caller session.Caller) error {
259+
err = gs.sm.Any(ctx, g, func(ctx context.Context, _ string, caller session.Caller) error {
260+
var err error
260261
for _, s := range sec {
261-
dt, err := secrets.GetSecret(ctx, caller, s.name)
262+
var dt []byte
263+
dt, err = secrets.GetSecret(ctx, caller, s.name)
262264
if err != nil {
263265
if errors.Is(err, secrets.ErrNotFound) {
264266
continue
@@ -271,8 +273,12 @@ func (gs *gitSourceHandler) getAuthToken(ctx context.Context, g session.Group) e
271273
gs.authArgs = []string{"-c", "http." + tokenScope(gs.src.Remote) + ".extraheader=Authorization: " + string(dt)}
272274
break
273275
}
274-
return nil
276+
return err
275277
})
278+
if errors.Is(err, secrets.ErrNotFound) {
279+
err = nil
280+
}
281+
return err
276282
}
277283

278284
func (gs *gitSourceHandler) mountSSHAuthSock(ctx context.Context, sshID string, g session.Group) (string, func() error, error) {

source/http/source.go

+5-9
Original file line numberDiff line numberDiff line change
@@ -513,20 +513,16 @@ func (hs *httpSourceHandler) newHTTPRequest(ctx context.Context, g session.Group
513513
}
514514

515515
if hs.src.AuthHeaderSecret != "" {
516+
var dt []byte
516517
err := hs.sm.Any(ctx, g, func(ctx context.Context, _ string, caller session.Caller) error {
517-
dt, err := secrets.GetSecret(ctx, caller, hs.src.AuthHeaderSecret)
518-
if err != nil {
519-
return err
520-
}
521-
522-
req.Header.Set("Authorization", string(dt))
523-
524-
return nil
518+
var err error
519+
dt, err = secrets.GetSecret(ctx, caller, hs.src.AuthHeaderSecret)
520+
return err
525521
})
526-
527522
if err != nil {
528523
return nil, errors.Wrapf(err, "failed to retrieve HTTP auth secret %s", hs.src.AuthHeaderSecret)
529524
}
525+
req.Header.Set("Authorization", string(dt))
530526
}
531527

532528
return req.WithContext(ctx), nil

0 commit comments

Comments
 (0)