Looks good to me, save that I would change the API of getHostaddr() to
this:

/* ----------
 * getHostaddr -
 * Fills 'host_addr' with the string representation of the currently connected
 * socket in 'conn'.
 * ----------
 */
static void
getHostaddr(PGconn *conn, char *host_addr, int host_addr_len)

(Trying to pass arrays as such to C functions is a lost cause -- just a
documentation aid at best, and a source of confusion and crashes at
worst.)

I tried to see about overflowing the NI_MAXHOST length with a long
socket dir, but that doesn't actually work, though the first line of
error here is a bit surprising:

LC_ALL=C psql "host="\'"`pwd`"\'""
could not identify current directory: Numerical result out of range
psql: Unix-domain socket path "/tmp/En un lugar de la Mancha_ de cuyo nombre no 
quiero acordarme_ no ha mucho tiempo que vivía un hidalgo de los de lanza en 
astillero_ adarga antigua_ rocín flaco y galgo corredor./Una olla de algo más 
vaca que carnero_ salpicón las más noches_ duelos y quebrantos los sábados_ 
lentejas los viernes_ algún palomino de añadidura los domingos_ consumían las 
tres partes de su hacienda./El resto della concluían sayo de velarte_ calzas de 
velludo para las fiestas con sus pantuflos de lo mismo_ los días de entre 
semana se honraba con su vellori de lo más fino./Tenía en su casa una ama que 
pasaba de los cuarenta_ y una sobrina que no llegaba a los veinte_ y un mozo de 
campo y plaza_ que así ensillaba el rocín como tomaba la podadera./Frisaba la 
edad de nuestro hidalgo con los cincuenta años_ era de complexión recia_ seco 
de carnes_ enjuto de rostro; gran madrugador y amigo de la caza./Quieren decir 
que tenía el sobrenombre de Quijada o Quesada (que en esto hay alguna 
diferencia en los autores que " is too long (maximum 107 bytes)


This is after I replaced all the , to _, because the original was even
more fun:

LC_ALL=C psql "host="\'"`pwd`"\'""
could not identify current directory: Numerical result out of range
psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/En un lugar de la 
Mancha/.s.PGSQL.55432"?
could not translate host name " de cuyo nombre no quiero acordarme" to address: 
Name or service not known
could not translate host name " no ha mucho tiempo que vivía un hidalgo de los 
de lanza en astillero" to address: Name or service not known
could not translate host name " adarga antigua" to address: Name or service not 
known
could not translate host name " rocín flaco y galgo corredor./Una olla de algo 
más vaca que carnero" to address: Name or service not known
could not translate host name " salpicón las más noches" to address: Name or 
service not known
could not translate host name " duelos y quebrantos los sábados" to address: 
Name or service not known
could not translate host name " lentejas los viernes" to address: Name or 
service not known
could not translate host name " algún palomino de añadidura los domingos" to 
address: Name or service not known
could not translate host name " consumían las tres partes de su hacienda./El 
resto della concluían sayo de velarte" to address: Name or service not known
could not translate host name " calzas de velludo para las fiestas con sus 
pantuflos de lo mismo" to address: Name or service not known
could not translate host name " los días de entre semana se honraba con su 
vellori de lo más fino./Tenía en su casa una ama que pasaba de los cuarenta" to 
address: Name or service not known
could not translate host name " y una sobrina que no llegaba a los veinte" to 
address: Name or service not known
could not translate host name " y un mozo de campo y plaza" to address: Name or 
service not known
could not translate host name " que así ensillaba el rocín como tomaba la 
podadera./Frisaba la edad de nuestro hidalgo con los cincuenta años" to 
address: Name or service not known
could not translate host name " era de complexión recia" to address: Name or 
service not known
could not translate host name " seco de carnes" to address: Name or service not 
known
could not translate host name " enjuto de rostro; gran madrugador y amigo de la 
caza./Quieren decir que tenía el sobrenombre de Quijada o Quesada (que en esto 
hay alguna diferencia en los autores que deste caso escriben)" to address: Name 
or service not known
could not translate host name " aunque por conjeturas verosímiles se deja 
entender que se llama Quijana;/pero esto importa poco a nuestro cuento; basta 
que en la narración dél no se salga un punto de la verdad." to address: Name or 
service not known


Funky test cases aside, I verified that giving hostaddr behaves better
with the patch.  This is unpatched:

$ LC_ALL=C psql "host="\'"`pwd`"\'" hostaddr=::1"
psql (12devel, server 11.1)
Type "help" for help.

55442 12devel 879890=# \conninfo
You are connected to database "alvherre" as user "alvherre" via socket in 
"/tmp/En un lugar de la Mancha_ de cuyo nombre no quiero acordarme_ no ha mucho 
tiempo" at port "55442".

and this is patched:

$ LC_ALL=C psql "host="\'"`pwd`"\'" hostaddr=::1"
psql (12devel, server 11.1)
Type "help" for help.

55442 12devel 881754=# \conninfo
You are connected to database "alvherre" as user "alvherre" on address "::1" at 
port "55442".

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Reply via email to