72d793ebe02b6032ab7fc10a63864e0ffc989bd6

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

fix(server): check allow-keyless when using git protocol

Diff

 1diff --git a/server/backend/sqlite/user.go b/server/backend/sqlite/user.go
 2index 0e3c609caf9b9f4ed131dc181124d49ed9e2d50a..86d36ac1e84d443910e7a5dfe0714f57f416777d 100644
 3--- a/server/backend/sqlite/user.go
 4+++ b/server/backend/sqlite/user.go
 5@@ -101,7 +101,6 @@ func (d *SqliteBackend) AccessLevel(repo string, username string) backend.Access
 6 		return backend.ReadOnlyAccess
 7 	}
 8 
 9-	// If the repository doesn't exist, the user has read/write access.
10 	if user != nil {
11 		// If the repository doesn't exist, the user has read/write access.
12 		if anon > backend.ReadWriteAccess {
13diff --git a/server/daemon.go b/server/daemon.go
14index 007e3c68e3f19930471ca9afe06964e93cf90642..79b94d88418307fedd16858afa6c13842067b4f9 100644
15--- a/server/daemon.go
16+++ b/server/daemon.go
17@@ -221,6 +221,11 @@ func (d *GitDaemon) handleClient(conn net.Conn) {
18 			return
19 		}
20 
21+		if !d.cfg.Backend.AllowKeyless() {
22+			fatal(c, ErrNotAuthed)
23+			return
24+		}
25+
26 		name := utils.SanitizeRepo(string(opts[0]))
27 		logger.Debugf("git: connect %s %s %s", c.RemoteAddr(), cmd, name)
28 		defer logger.Debugf("git: disconnect %s %s %s", c.RemoteAddr(), cmd, name)
29diff --git a/server/ssh.go b/server/ssh.go
30index 30ea8e498c24245a116733f7d6ca21280a30c6dd..c99e41bf11b923a218d0ad43daf2a21ebc0e40a1 100644
31--- a/server/ssh.go
32+++ b/server/ssh.go
33@@ -137,10 +137,15 @@ func (s *SSHServer) Shutdown(ctx context.Context) error {
34 
35 // PublicKeyAuthHandler handles public key authentication.
36 func (s *SSHServer) PublicKeyHandler(ctx ssh.Context, pk ssh.PublicKey) (allowed bool) {
37+	if pk == nil {
38+		return s.cfg.Backend.AllowKeyless()
39+	}
40+
41 	ak := backend.MarshalAuthorizedKey(pk)
42 	defer func() {
43 		publicKeyCounter.WithLabelValues(ak, ctx.User(), strconv.FormatBool(allowed)).Inc()
44 	}()
45+
46 	for _, k := range s.cfg.InitialAdminKeys {
47 		if k == ak {
48 			allowed = true
49@@ -156,7 +161,7 @@ func (s *SSHServer) PublicKeyHandler(ctx ssh.Context, pk ssh.PublicKey) (allowed
50 
51 // KeyboardInteractiveHandler handles keyboard interactive authentication.
52 func (s *SSHServer) KeyboardInteractiveHandler(ctx ssh.Context, _ gossh.KeyboardInteractiveChallenge) bool {
53-	ac := s.cfg.Backend.AllowKeyless() && s.PublicKeyHandler(ctx, nil)
54+	ac := s.cfg.Backend.AllowKeyless()
55 	keyboardInteractiveCounter.WithLabelValues(ctx.User(), strconv.FormatBool(ac)).Inc()
56 	return ac
57 }