Re: libpq host/hostaddr/conninfo inconsistencies - Mailing list pgsql-hackers

From Arthur Zakirov
Subject Re: libpq host/hostaddr/conninfo inconsistencies
Date
Msg-id 47e695e9-7bb5-1204-914e-50c3139baae8@postgrespro.ru
Whole thread Raw
In response to Re: libpq host/hostaddr/conninfo inconsistencies  (Fabien COELHO <coelho@cri.ensmp.fr>)
Responses Re: libpq host/hostaddr/conninfo inconsistencies
List pgsql-hackers
Sorry for late answer.

On 9/30/18 10:21 AM, Fabien COELHO wrote:
>>> sh> psql "host=127.0.0.2 hostaddr=127.0.0.1"
>>
>> I'm not sure that is is the issue. User defined the host name and psql
>> show it.
> 
> The issue is that "host" is an ip, "\conninfo" will inform wrongly that 
> you are connected to "127.0.0.2", but the actual connection is really to 
> "127.0.0.1", this is plain misleading, and I consider this level of 
> unhelpfullness more a bug than a feature.

I didn't think that this is an issue, because I determined "host" as 
just a host's display name when "hostaddr" is defined. So user may 
determine 127.0.0.1 (hostaddr) as "happy_host", for example. It 
shouldn't be a real host.

I searched for another use cases of PQhost(). In PostgreSQL source code 
I found that it is used in pg_dump and psql to connect to some instance.

There is the next issue with PQhost() and psql (pg_dump could have it 
too, see CloneArchive() in pg_backup_archiver.c and _connectDB() in 
pg_backup_db.c):

$ psql "host=host_1,host_2 hostaddr=127.0.0.1,127.0.0.3 dbname=postgres"
=# \conninfo
You are connected to database "postgres" as user "artur" on host 
"host_1" at port "5432".
=# \connect test
could not translate host name "host_1" to address: Неизвестное имя или 
служба
Previous connection kept

So in the example above you cannot reuse connection string with 
\connect. What do you think?

>> I cannot agree with you. When I've learned libpq before I found
>> host/hostaddr rules description useful. And I disagree that it is good
>> to remove it (as the patch does).
>> Of course it is only my point of view and others may have another 
>> opinion.
> 
> I'm not sure I understand your concern.
> 
> Do you mean that you would prefer the document to keep describing that 
> host/hostaddr/port accepts one value, and then have in some other place 
> or at the end of the option documentation a line that say, "by the way, 
> we really accept lists, and they must be somehow consistent between 
> host/hostaddr/port"?

I wrote about the following part of the documentation:

> -        Using <literal>hostaddr</literal> instead of <literal>host</literal> allows the
> -        application to avoid a host name look-up, which might be important
> -        in applications with time constraints. However, a host name is
> -        required for GSSAPI or SSPI authentication
> -        methods, as well as for <literal>verify-full</literal> SSL
> -        certificate verification.  The following rules are used:
> -        <itemizedlist>
 > ...

So I think description of these rules is useful here and shouldn't be 
removed. Your patch removes it and maybe it shouldn't do that. But now I 
realised that the patch breaks this behavior and backward compatibility 
is broken.

>> Patch gives me an error if I specified only hostaddr:
>>
>> psql -d "hostaddr=127.0.0.1"
>> psql: host "/tmp" cannot have an hostaddr "127.0.0.1"
> 
> This is the expected modified behavior: hostaddr can only be specified 
> on a host when it is a name, which is not the case here.

See the comment above about backward compatibility. psql without the 
patch can connect to an instance if I specify only hostaddr.

-- 
Arthur Zakirov
Postgres Professional: http://www.postgrespro.com
Russian Postgres Company


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Performance improvements for src/port/snprintf.c
Next
From: Andres Freund
Date:
Subject: Re: Performance improvements for src/port/snprintf.c