From: | Boszormenyi Zoltan <zb(at)cybertec(dot)at> |
---|---|
To: | Magnus Hagander <magnus(at)hagander(dot)net> |
Cc: | Hari Babu <haribabu(dot)kommi(at)huawei(dot)com>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: pg_basebackup with -R option and start standby have problems with escaped password |
Date: | 2013-02-18 14:35:38 |
Message-ID: | 51223C3A.7020101@cybertec.at |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
2013-01-29 11:15 keltezéssel, Magnus Hagander írta:
> On Thu, Jan 24, 2013 at 7:04 AM, Hari Babu <haribabu(dot)kommi(at)huawei(dot)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(dot)kommi(at)huawei(dot)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 | Content-Type | Size |
---|---|---|
01-conninfo-fix-libpq.patch | text/x-patch | 466 bytes |
02-conninfo-fix-pg_basebackup.patch | text/x-patch | 1.6 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Kevin Grittner | 2013-02-18 14:49:14 | Re: Materialized views WIP patch |
Previous Message | Amit Kapila | 2013-02-18 13:08:27 | Re: [PATCH] Add PQconninfoParseParams and PQconninfodefaultsMerge to libpq |