loopdb: postgres password with URL-reserved characters breaks the connection
I maintainer di solito rispondono entro 7 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
Direzione di ricerca
Inizia da PostgresConfig.DSN e verifica come viene assemblato e registrato l’attuale DSN. Aggiungi la copertura richiesta basata su tabella per le password contenenti caratteri riservati dagli URL, incluso il parsing del risultato con net/url, ed esegui i test Go pertinenti. Il lavoro è completato quando l’utente, la password, l’host e il database analizzati rimangono invariati, inclusa la gestione degli host IPv6.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Title: loopdb: postgres password with URL-reserved characters breaks the connection
Background
PostgresConfig.DSN builds the connection string with fmt.Sprintf, putting the user and password into the URL without escaping them:
dsnTemplate = "postgres://%v:%v@%v:%d/%v?sslmode=%v"
pgx parses this string with net/url, so any URL-reserved character in the password changes how the URL is parsed. For example, / ends the authority section early, so with --postgres.password=ab/cd the string becomes:
postgres://loop:ab/cd@localhost:5432/loop?sslmode=disable
This parses as host loop:ab and path /cd@localhost:5432/loop, so loopd fails to connect. #, ? and % cause similar failures.
Passwords made with common tools such as openssl rand -base64 often contain /. #1088 adds a way to read the password from a file, which encourages exactly this kind of generated password, so this is likely to come up more often.
Proposed fix
Build the DSN with net/url so each part is escaped correctly:
dsn := url.URL{
Scheme: "postgres",
User: url.UserPassword(s.User, password),
Host: net.JoinHostPort(s.Host, strconv.Itoa(s.Port)),
Path: s.DBName,
RawQuery: url.Values{"sslmode": {sslMode}}.Encode(),
}
net.JoinHostPort also brackets IPv6 host literals correctly, which the current template doesn't do. The hidePassword placeholder used when logging stays as it is.
Add a table-driven test for DSN that runs passwords containing /, @, :, #, ?, % and spaces through url.Parse and checks that the user, password, host and database come back unchanged.
- Lingua principale
- Go
- Stelle
- 593
- Fork
- 138
- Merge medio
- 4g 9h
- PR unite (30g)
- 14
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di lightninglabs/loop
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 50/100
lightninglabs/loop#1208 · 1 commento ·
I maintainer di solito rispondono entro 7 giorni
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
lightninglabs/loop#1196 ·
I maintainer di solito rispondono entro 7 giorni
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 42/100
lightninglabs/loop#1172 ·
I maintainer di solito rispondono entro 7 giorni
-
Track armed static address HTLCs after aborted swapsForse di nuovo libera @hieblmi l’ha presa 104 giorni fa e non c’è nessuna pull request aperta. Aperta
lightninglabs/loop#1171 · 1 assegnatario ·
I maintainer di solito rispondono entro 7 giorni
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
lightninglabs/loop#1170 ·
I maintainer di solito rispondono entro 7 giorni
Tutte le issue di lightninglabs/loop
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 69/100
aws/amazon-ecs-agent#5177 ·
I maintainer di solito rispondono entro 2 giorni
-
release-followup
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
kind/bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
apache/rocketmq-dashboard#7292 ·
I maintainer di solito rispondono entro 3 giorni
-
[Bug]: Deleting an MCP proxy leaves its API keys in the gateway's memory and in the policy engineApertaAspect/API Aspect/Other Severity/Minor Type/Bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
wso2/api-platform#3852 ·
I maintainer di solito rispondono entro 1 giorno