Re: pg_basebackup with -R option and start standby have problems with escaped password - Mailing list pgsql-hackers

From Boszormenyi Zoltan
Subject Re: pg_basebackup with -R option and start standby have problems with escaped password
Date
Msg-id 51223C3A.7020101@cybertec.at
Whole thread Raw
In response to Re: pg_basebackup with -R option and start standby have problems with escaped password  (Magnus Hagander <magnus@hagander.net>)
Responses Re: pg_basebackup with -R option and start standby have problems with escaped password
Re: pg_basebackup with -R option and start standby have problems with escaped password
List pgsql-hackers
2013-01-29 11:15 keltezéssel, Magnus Hagander írta:
> On Thu, Jan 24, 2013 at 7:04 AM, Hari Babu <haribabu.kommi@huawei.com> wrote:
>> On Wed, Jan 23, 2013 11:48 PM, Magnus Hagander wrote:
>>> On Wed, Jan 23, 2013 at 10:18 AM, Hari Babu <haribabu.kommi@huawei.com>
>> wrote:
>>>> Test scenario to reproduce:
>>>>          1. Start the server
>>>>          2. create the user as follows
>>>>                  ./psql postgres -c "create user user1 superuser login
>>>> password 'use''1'"
>>>>
>>>>          3. Take the backup with -R option as follows.
>>>>                  ./pg_basebackup -D ../../data1 -R -U user1 -W
>>>>
>>>> The following errors are occurring when the new standby on the backup
>>>> database starts.
>>>>
>>>> FATAL:  could not connect to the primary server: missing "=" after "1'"
>> in
>>>> connection info string
>>> What does the resulting recovery.conf file look like?
>> The recovery.conf which is generated is as follows
>>
>> standby_mode = 'on'
>> primary_conninfo = 'user=''user1'' password=''use''1'' port=''5432'' '
>>
>>
>> I observed the problem is while reading primary_conninfo from the
>> recovery.conf file
>> the function "GUC_scanstr" removes the quotes of the string and also makes
>> the
>> continuos double quote('') as single quote(').
>>
>> By using the same connection string while connecting to primary server the
>> function "conninfo_parse" the escape quotes are not able to parse properly
>> and it is leading
>> to problem.
>>
>> please correct me if any thing wrong in my observation.
> Well, it's clearly broken at least :O
>
> Zoltan, do you have time to  look at it? I won't have time until at
> least after FOSDEM, unfortunately.

I looked at it shortly. What I tried first is adding another pair of single
quotes manually like this:

primary_conninfo = 'user=''user1'' password=''use''''1'' host=''192.168.1.2''
port=''5432'' sslmode=''disable'' sslcompression=''1'' '

But it doesn't solve the problem either, I got:

FATAL:  could not connect to the primary server: missing "=" after "'1'" in connection
info string

This worked though:

primary_conninfo = 'user=user1 password=use\'1 host=192.168.1.2 port=5432 sslmode=disable
sslcompression=1 '

When I added an elog() to print the conninfo string in libpqrcv_connect(),
I saw that the double quotes were properly eliminated by ParseConfigFp()
in the first case.

So, there is a bug in generating recovery.conf by not double-escaping
the values and another bug in parsing the connection string in libpq
when the parameter value starts with a single-quote character.

Attached are two patches to fix these two bugs, the libpq part can
be back-patched.

Best regards,
Zoltán Böszörményi

--
----------------------------------
Zoltán Böszörményi
Cybertec Schönig & Schönig GmbH
Gröhrmühlgasse 26
A-2700 Wiener Neustadt, Austria
Web: http://www.postgresql-support.de
      http://www.postgresql.at/


Attachment

pgsql-hackers by date:

Previous
From: Amit Kapila
Date:
Subject: Re: [PATCH] Add PQconninfoParseParams and PQconninfodefaultsMerge to libpq
Next
From: Kevin Grittner
Date:
Subject: Re: Materialized views WIP patch