mirror of
https://github.com/gravitational/teleport.git
synced 2026-10-31 20:39:37 +08:00
Update metalinter, fix a few lint warnings and replace deprecated linters. `deadcode`, `structcheck` and `varcheck` are abandoned and now replaced by [`unused`][1]. Since 1.19, `go fmt` reformats godocs according to https://go.dev/doc/comment. I've done a bulk-reformatting of the codebase to keep the linter happy. Backporting is mostly harmless (the exception being `lib/services/role_test.go`, that for some reason breaks the _old_ linter using the new format). [1]: https://golangci-lint.run/usage/linters/ * Bump golangci-lint version * Replace abandoned linters * Fix bodyclose on lib/auth/github.com * Fix bodyclose on lib/kube/proxy/streamproto/proto_test.go * Fix bodyclose on lib/srv/alpnproxy/proxy_test.go * Fix bodyclose on lib/web/conn_upgrade_test.go * Silence staticcheck on lib/kube/proxy/forwarder_test.go * Silence staticcheck on lib/utils/certs_test.go * Address BuildNameToCertificate deprecation warnings * Run `go fmt ./...` * Run `go fmt ./...` on api/ * Ignore formatting in role_test.go * Remove redundant initializers in lib/srv/uacc/ * Update e/
79 lines
3.4 KiB
Go
79 lines
3.4 KiB
Go
/*
|
|
Copyright 2020 Gravitational, Inc.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
// Package postgres implements components of the database access subsystem
|
|
// that proxy connections between Postgres clients (like, psql or pgAdmin)
|
|
// and Postgres database servers with full protocol awareness.
|
|
//
|
|
// It understands Postgres wire protocol version 3 which is supported by
|
|
// Postgres 7.4 and later:
|
|
//
|
|
// https://www.postgresql.org/docs/13/protocol-flow.html
|
|
// https://www.postgresql.org/docs/13/protocol-message-formats.html
|
|
//
|
|
// The package provides the following main types:
|
|
//
|
|
// - Proxy. Runs inside Teleport proxy and proxies connections from Postgres
|
|
// clients to appropriate database servers over reverse tunnel.
|
|
//
|
|
// - Engine. Runs inside Teleport database service, accepts connections
|
|
// coming from proxy over reversetunnel and proxies them to databases.
|
|
//
|
|
// - TestServer. Fake Postgres server that implements a small part of its
|
|
// wire protocol, used in functional tests.
|
|
//
|
|
// Protocol
|
|
// --------
|
|
//
|
|
// When connecting to a database server (or a Teleport proxy in our case),
|
|
// Postgres clients start on a plain connection to check whether the server
|
|
// supports TLS and then upgrade the connection.
|
|
//
|
|
// Because of that, the proxy implements a part of the startup protocol that
|
|
// indicates TLS support to the client to get it to send a client certificate
|
|
// and extracts the identity/routing information from it.
|
|
//
|
|
// After that proxy hands off the connection to an appropriate database server
|
|
// based on the extracted routing info over reverse tunnel.
|
|
//
|
|
// The database server in turn connects to the database and starts relaying
|
|
// messages between the database and the client.
|
|
//
|
|
// The sequence diagram roughly looks like this:
|
|
//
|
|
// psql proxy
|
|
//
|
|
// | |
|
|
// | ---- SSLRequest ----> |
|
|
// | |
|
|
// | <------ 'S' -------- |
|
|
// | |
|
|
// | -- StartupMessage --> | engine
|
|
// | | |
|
|
// | | -- StartupMessage --> | Postgres
|
|
// | | | |
|
|
// | | | ----- connect ----> |
|
|
// | | | |
|
|
// | <-------------- ReadyForQuery --------------- | |
|
|
// | | | |
|
|
// | ------------------------------ Query -----------------------------> |
|
|
// | <---------------------------- DataRow ----------------------------- |
|
|
// | <------------------------- ReadyForQuery -------------------------- |
|
|
// | | | |
|
|
// | ----------------------------- Terminate --------------------------> |
|
|
// | | | |
|
|
package postgres
|