Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarthik Nayak <knayak@gitlab.com>2022-09-29 12:15:15 +0300
committerJohn Cai <jcai@gitlab.com>2022-11-02 21:40:46 +0300
commitc838edd6a51181c8ed984251034f56ab4c8fa471 (patch)
treec71e499762e7175076a3f852c5a73ff59c43bff1
parent7769f643229158ffd83e2bd0a903d6b93ddac121 (diff)
repository: Use `GetURLAndResolveConfig()`
In `FetchRemote()` use `GetURLResolveConfig()` to get the configPair and modified URL to avoid DNS rebinding. Unfortunately, because of the structure of the code, the `git.Cmd` is not exposed on this level, which means the added code is not testable.
-rw-r--r--internal/gitaly/service/repository/fetch_remote.go23
1 files changed, 17 insertions, 6 deletions
diff --git a/internal/gitaly/service/repository/fetch_remote.go b/internal/gitaly/service/repository/fetch_remote.go
index 5f7ceda05..baa70c064 100644
--- a/internal/gitaly/service/repository/fetch_remote.go
+++ b/internal/gitaly/service/repository/fetch_remote.go
@@ -41,10 +41,7 @@ func (s *server) FetchRemote(ctx context.Context, req *gitalypb.FetchRemoteReque
repo := s.localrepo(req.GetRepository())
remoteName := "inmemory"
remoteURL := req.GetRemoteParams().GetUrl()
-
- config := []git.ConfigPair{
- {Key: "remote.inmemory.url", Value: remoteURL},
- }
+ var config []git.ConfigPair
for _, refspec := range s.getRefspecs(req.GetRemoteParams().GetMirrorRefmaps()) {
config = append(config, git.ConfigPair{
@@ -52,15 +49,29 @@ func (s *server) FetchRemote(ctx context.Context, req *gitalypb.FetchRemoteReque
})
}
+ if resolvedAddress := req.GetRemoteParams().GetResolvedAddress(); resolvedAddress != "" {
+ modifiedURL, resolveConfig, err := git.GetURLAndResolveConfig(remoteURL, resolvedAddress)
+ if err != nil {
+ return nil, fmt.Errorf("couldn't get curloptResolve config: %w", err)
+ }
+
+ remoteURL = modifiedURL
+ config = append(config, resolveConfig...)
+ }
+
+ config = append(config, git.ConfigPair{Key: "remote.inmemory.url", Value: remoteURL})
+
if authHeader := req.GetRemoteParams().GetHttpAuthorizationHeader(); authHeader != "" {
config = append(config, git.ConfigPair{
- Key: fmt.Sprintf("http.%s.extraHeader", remoteURL),
+ Key: fmt.Sprintf("http.%s.extraHeader", req.GetRemoteParams().GetUrl()),
Value: "Authorization: " + authHeader,
})
}
+
+ //nolint: staticcheck
if host := req.GetRemoteParams().GetHttpHost(); host != "" {
config = append(config, git.ConfigPair{
- Key: fmt.Sprintf("http.%s.extraHeader", remoteURL),
+ Key: fmt.Sprintf("http.%s.extraHeader", req.GetRemoteParams().GetUrl()),
Value: "Host: " + host,
})
}