From 784aff6ed52f9d4afa8242325901baef680e0da3 Mon Sep 17 00:00:00 2001 From: Dimitri Fontaine Date: Sun, 25 Feb 2018 00:08:02 +0100 Subject: [PATCH] Handle parsing errors in pgpass gracefully. Accept empty password lines in ~/.pgpass files, and when otherwise pgloader fails to parse or process the file log a warning and return a nil password. See #748. --- src/parsers/parse-pgpass.lisp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/parsers/parse-pgpass.lisp b/src/parsers/parse-pgpass.lisp index 50f4d0b..3eaaa7e 100644 --- a/src/parsers/parse-pgpass.lisp +++ b/src/parsers/parse-pgpass.lisp @@ -21,7 +21,7 @@ (defrule pgpass-line (and pgpass-entry #\: pgpass-entry #\: pgpass-entry #\: pgpass-entry #\: - pgpass-entry) + (? pgpass-entry)) (:lambda (pl) (make-pgpass :hostname (first pl) :port (third pl) @@ -87,6 +87,12 @@ (defun match-pgpass-file (hostname port database username) "Return matched password from ~/.pgpass or PGPASSFILE, or nil." - (let ((pgpass-entries (parse-pgpass-file))) - (when pgpass-entries - (match-pgpass-entries pgpass-entries hostname port database username)))) + (handler-case + (let ((pgpass-entries (parse-pgpass-file))) + (when pgpass-entries + (match-pgpass-entries pgpass-entries hostname port database username))) + (condition (e) + ;; if we had any problem (parsing error in pgpass or otherwise), just + ;; return a NIL password + (log-message :warning "Error reading pgass file: ~a" e) + nil)))