From db65ec4674dbd3b58adaa0f11d96dcda98094153 Mon Sep 17 00:00:00 2001 From: Anis Elleuch Date: Thu, 23 Sep 2021 20:57:21 +0100 Subject: [PATCH] update: Add permission check before starting to update (#13291) --- cmd/admin-handlers.go | 10 +++++++--- cmd/update.go | 8 ++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/cmd/admin-handlers.go b/cmd/admin-handlers.go index 1d33d0bd3..02c3396f7 100644 --- a/cmd/admin-handlers.go +++ b/cmd/admin-handlers.go @@ -149,9 +149,13 @@ func (a adminAPIHandlers) ServerUpdateHandler(w http.ResponseWriter, r *http.Req for _, nerr := range globalNotificationSys.ServerUpdate(ctx, u, sha256Sum, lrTime, releaseInfo) { if nerr.Err != nil { + err := AdminError{ + Code: AdminUpdateApplyFailure, + Message: nerr.Err.Error(), + StatusCode: http.StatusInternalServerError, + } logger.GetReqInfo(ctx).SetTags("peerAddress", nerr.Host.String()) - logger.LogIf(ctx, nerr.Err) - err = fmt.Errorf("Server update failed, please do not restart the servers yet: failed with %w", nerr.Err) + logger.LogIf(ctx, fmt.Errorf("server update failed with %w", err)) writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) return } @@ -159,7 +163,7 @@ func (a adminAPIHandlers) ServerUpdateHandler(w http.ResponseWriter, r *http.Req updateStatus, err := updateServer(u, sha256Sum, lrTime, releaseInfo, mode) if err != nil { - err = fmt.Errorf("Server update failed, please do not restart the servers yet: failed with %w", err) + logger.LogIf(ctx, fmt.Errorf("server update failed with %w", err)) writeErrorResponseJSON(ctx, w, toAdminAPIErr(ctx, err), r.URL) return } diff --git a/cmd/update.go b/cmd/update.go index 8d196aa47..64c67bf10 100644 --- a/cmd/update.go +++ b/cmd/update.go @@ -537,6 +537,14 @@ func doUpdate(u *url.URL, lrTime time.Time, sha256Sum []byte, releaseInfo string Checksum: sha256Sum, } + if err := opts.CheckPermissions(); err != nil { + return AdminError{ + Code: AdminUpdateApplyFailure, + Message: fmt.Sprintf("server update failed with: %s, do not restart the servers yet", err), + StatusCode: http.StatusInternalServerError, + } + } + minisignPubkey := env.Get(envMinisignPubKey, "") if minisignPubkey != "" { v := selfupdate.NewVerifier()