@@ -249,8 +249,12 @@ def _parse_tls_version(tls_version):
249
249
)
250
250
251
251
252
- def _dot_postgresql_path (filename ) -> pathlib .Path :
253
- return (pathlib .Path .home () / '.postgresql' / filename ).resolve ()
252
+ def _dot_postgresql_path (filename ) -> typing .Optional [pathlib .Path ]:
253
+ homedir = compat .get_pg_home_directory ()
254
+ if homedir is None :
255
+ return None
256
+
257
+ return (homedir / '.postgresql' / filename ).resolve ()
254
258
255
259
256
260
def _parse_connect_dsn_and_args (* , dsn , host , port , user ,
@@ -501,11 +505,14 @@ def _parse_connect_dsn_and_args(*, dsn, host, port, user,
501
505
ssl .load_verify_locations (cafile = sslrootcert )
502
506
ssl .verify_mode = ssl_module .CERT_REQUIRED
503
507
else :
504
- sslrootcert = _dot_postgresql_path ('root.crt' )
505
508
try :
509
+ sslrootcert = _dot_postgresql_path ('root.crt' )
510
+ assert sslrootcert is not None
506
511
ssl .load_verify_locations (cafile = sslrootcert )
507
- except FileNotFoundError :
512
+ except ( AssertionError , FileNotFoundError ) :
508
513
if sslmode > SSLMode .require :
514
+ if sslrootcert is None :
515
+ raise RuntimeError ('Cannot determine home directory' )
509
516
raise ValueError (
510
517
f'root certificate file "{ sslrootcert } " does '
511
518
f'not exist\n Either provide the file or '
@@ -526,18 +533,19 @@ def _parse_connect_dsn_and_args(*, dsn, host, port, user,
526
533
ssl .verify_flags |= ssl_module .VERIFY_CRL_CHECK_CHAIN
527
534
else :
528
535
sslcrl = _dot_postgresql_path ('root.crl' )
529
- try :
530
- ssl .load_verify_locations (cafile = sslcrl )
531
- except FileNotFoundError :
532
- pass
533
- else :
534
- ssl .verify_flags |= ssl_module .VERIFY_CRL_CHECK_CHAIN
536
+ if sslcrl is not None :
537
+ try :
538
+ ssl .load_verify_locations (cafile = sslcrl )
539
+ except FileNotFoundError :
540
+ pass
541
+ else :
542
+ ssl .verify_flags |= ssl_module .VERIFY_CRL_CHECK_CHAIN
535
543
536
544
if sslkey is None :
537
545
sslkey = os .getenv ('PGSSLKEY' )
538
546
if not sslkey :
539
547
sslkey = _dot_postgresql_path ('postgresql.key' )
540
- if not sslkey .exists ():
548
+ if sslkey is not None and not sslkey .exists ():
541
549
sslkey = None
542
550
if not sslpassword :
543
551
sslpassword = ''
@@ -549,12 +557,13 @@ def _parse_connect_dsn_and_args(*, dsn, host, port, user,
549
557
)
550
558
else :
551
559
sslcert = _dot_postgresql_path ('postgresql.crt' )
552
- try :
553
- ssl .load_cert_chain (
554
- sslcert , keyfile = sslkey , password = lambda : sslpassword
555
- )
556
- except FileNotFoundError :
557
- pass
560
+ if sslcert is not None :
561
+ try :
562
+ ssl .load_cert_chain (
563
+ sslcert , keyfile = sslkey , password = lambda : sslpassword
564
+ )
565
+ except FileNotFoundError :
566
+ pass
558
567
559
568
# OpenSSL 1.1.1 keylog file, copied from create_default_context()
560
569
if hasattr (ssl , 'keylog_filename' ):
0 commit comments