Sto provando a connettermi con una chiave client SSL utilizzando DBI
e DBD::Pg
.Come utilizzare gli spazi nei parametri per DBI-> connettere?
use strict;
use warnings 'all';
use DBI;
my $dsn = "dbi:Pg:db=mydb;sslmode=require;host=localhost;"
."sslcert=C:\\path with\\spaces.crt;"
."sslkey=C:\\path with\\spaces.key";
my $dbh = DBI->connect($dsn, 'username', '');
ottengo il seguente errore:
Can't connect to database: missing "=" after "with\spaces.crt" in connection info string!
Ho provato con virgolette singole o doppie attorno ai valori senza alcun risultato, e non riesco a trovare nulla nella documentazione.
Aggiornamento
Con virgolette singole come segue:
my $dsn = "dbi:Pg:db=mydb;sslmode=require;host=localhost;"
."sslcert='C:\\path with\\spaces.crt';"
."sslkey='C:\\path with\\spaces.key'";
ottengo il seguente errore:
failed: FATAL: connection requires a valid client certificate
So che questo funziona di configurazione, come funziona in Python.
Si scopre che questo funziona:
my $dsn = "dbi:Pg:db=mydb;sslmode=require;host=localhost;"
."sslcert='C:\\\\path with\\\\spaces.crt';"
."sslkey='C:\\\\path with\\\\spaces.key'";
Perché ho bisogno di rovesciare doppio sfuggiti?
@ikegami Uso rigoroso e avvisi, e infatti i valori provengono da un file di configurazione. Ho appena dimenticato di usare le doppie barre per l'esempio SO. Modificherò, grazie. – RazerM
Puoi modificare la tua domanda per mostrare il tuo tentativo con virgolette singole e il messaggio di errore esatto che hai ricevuto? C'è il codice in [dbdimp.c] (https://metacpan.org/source/TURNSTEP/DBD-Pg-3.5.3/dbdimp.c#L122) nella distribuzione DBD :: Pg che sembra debba gestire un singolo attributi correttamente citati, ma non ho modo di testare adesso. – ThisSuitIsBlackNot
@ThisSuitIsBlackNot: vuoi dire "sslcert = 'C: \\ percorso con \\ spaces.crt';" 'ecc.? Come sospetto che OP significhi ''sslcert = C: \ percorso con \ spaces.crt;'' – Borodin