Обсуждение: [Bug / Question ] " authentication_timeout " is invalid.

Поиск
Список
Период
Сортировка

[Bug / Question ] " authentication_timeout " is invalid.

От
林俊彥
Дата:
Hi, sir,

the "postgresql.conf" 's "authentication_timeout"  is not active.

The Log:
-------------------------------------------------------------------------------------------------
[BEGIN] 2015/9/16  17:57:37
[postgres@pg95 ~]$ psql -V
psql (PostgreSQL) 9.5alpha2
[postgres@pg95 ~]$ time psql -c 'show authentication_timeout ;'
Password: 
 authentication_timeout 
------------------------
 1min
(1 row)
real 4m39.528s
user 0m0.003s
sys 0m0.002s

[END] 2015/9/16  18:03:10
---------------------------------------------------------------------------------------------------
The document is said :
From: 


authentication_timeout (integer)

Maximum time to complete client authentication, in seconds. If a would-be client has not completed the authentication protocol in this much time, the server closes the connection. This prevents hung clients from occupying a connection indefinitely. The default is one minute (1m). This parameter can only be set in the postgresql.conf file or on the server command line.


I can't find about this information or solution by goolge search or forum,
Please tell me how to verify it is active . or check it  running?


Best Regards,

James Lin


Re: [Bug / Question ] " authentication_timeout " is invalid.

От
Jeff Janes
Дата:
On Wed, Sep 16, 2015 at 3:27 AM, =E6=9E=97=E4=BF=8A=E5=BD=A5 <james.lin@cen=
oq.com> wrote:

> Hi, sir,
>
> the "postgresql.conf" 's "authentication_timeout"  is not active.
>
> The Log:
>
> -------------------------------------------------------------------------=
------------------------
> [BEGIN] 2015/9/16  17:57:37
> [postgres@pg95 ~]$ psql -V
> psql (PostgreSQL) 9.5alpha2
> [postgres@pg95 ~]$ time psql -c 'show authentication_timeout ;'
> Password:
>  authentication_timeout
> ------------------------
>  1min
> (1 row)
> real 4m39.528s
> user 0m0.003s
> sys 0m0.002s
>
> [END] 2015/9/16  18:03:10
>
> -------------------------------------------------------------------------=
--------------------------
> The document is said :
> From:
>
> http://www.postgresql.org/docs/9.4/static/runtime-config-connection.html
>
> authentication_timeout (integer)
>
> Maximum time to complete client authentication, in seconds. If a would-be
> client has not completed the authentication protocol in this much time, t=
he
> server closes the connection. This prevents hung clients from occupying a
> connection indefinitely. The default is one minute (1m). This parameter
> can only be set in the postgresql.conf file or on the server command line=
.
>
> I can't find about this information or solution by goolge search or forum=
,
> Please tell me how to verify it is active . or check it  running?
>

What happens behind the scenes is that psql first tries to connect without
a password.  It is told that it can't connect without a password.  It
closes the uncompleted connection.  Then psql asks you for a password,
waits until you enter one, and then starts a new connection using the
password. So during the wait time, there is no pending connection to the
database to be timed out.  It is the client program psql which is doing the
waiting, not the database server.

Cheers,

Jeff

Re: [Bug / Question ] " authentication_timeout " is invalid.

От
Jeff Janes
Дата:
On Wed, Sep 16, 2015 at 9:02 PM, =E6=9E=97=E4=BF=8A=E5=BD=A5 <james.lin@cen=
oq.com> wrote:

> Hi , Jeff,
>       Thank you for reply.  I used to use in the following ways but still
> could not be verified:
> -----------  Log start ---------------------
> [BEGIN] 2015/9/17 11:51:51
> [postgres@pg95 ~]$ cat test.sh
>
> #!/bin/bash
> ip a |grep eth0
> psql -h 100.200.100.211<<EOF
> show authentication_timeout;
> select now();
> \! sh net_test.sh
> select now();
> EOF
>


That isn't going to work because net_test.sh isn't called until after the
connection is authenticated.

It is difficult to interrupt the process during the brief instant between
when the connection was opened and when it is authenticated.

Start psql, and when it is waiting for the password, find the pid for psql
and start gdb against the psql process (gdb -p <pid>)

In gdb, do:

(gdb) b PQconnectStartParams
Breakpoint 1 at 0x7f5de60bdf70: file fe-connect.c, line 561.
(gdb) c

Then go back and complete the password in psql.  The gdb session will have
triggered the breakpoint.

Wait for less than the timeout, and hit 'c' and enter in the debugger.  The
connection will complete.

Or, wait for more than the timeout and hit 'c' and enter in the debugger.
The connection will error out, as the server side hung up on it.

Cheers,

Jeff

Re: [Bug / Question ] " authentication_timeout " is invalid.

От
林俊彥
Дата:
Hi , Jeff,
      Thank you for reply.  I used to use in the following ways but still could not be verified:
-----------  Log start ---------------------
[BEGIN] 2015/9/17 11:51:51
[postgres@pg95 ~]$ cat test.sh 

#!/bin/bash
ip a |grep eth0
psql -h 100.200.100.211<<EOF
show authentication_timeout;
select now();
\! sh net_test.sh
select now();
EOF

[postgres@pg95 ~]$ cat net_test.sh 

#!/bin/bash
sudo ifdown eth0
sleep 90
sudo ifup eth0

[postgres@pg95 ~]$ ./test.sh 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfif
o_fast state UP qlen 1000
    inet 100.200.100.211/8 brd 100.255.255.255 scope global eth0
 authentication_timeout 
------------------------
 1min
(1 row)
              now              
-------------------------------
 2015-09-17 11:52:43.842508+08
(1 row)
              now              
-------------------------------
 2015-09-17 11:54:18.161079+08
(1 row)

[END] 2015/9/17  11:54:35

-----------  Log end  ----------------------


Could you give me an example to verify it? Let me verify it is active or not. thank you !!


best regards,

James



2015-09-16 23:52 GMT+08:00 Jeff Janes <jeff.janes@gmail.com>:
On Wed, Sep 16, 2015 at 3:27 AM, 林俊彥 <james.lin@cenoq.com> wrote:
Hi, sir,

the "postgresql.conf" 's "authentication_timeout"  is not active.

The Log:
-------------------------------------------------------------------------------------------------
[BEGIN] 2015/9/16  17:57:37
[postgres@pg95 ~]$ psql -V
psql (PostgreSQL) 9.5alpha2
[postgres@pg95 ~]$ time psql -c 'show authentication_timeout ;'
Password: 
 authentication_timeout 
------------------------
 1min
(1 row)
real 4m39.528s
user 0m0.003s
sys 0m0.002s

[END] 2015/9/16  18:03:10
---------------------------------------------------------------------------------------------------
The document is said :
From: 


authentication_timeout (integer)

Maximum time to complete client authentication, in seconds. If a would-be client has not completed the authentication protocol in this much time, the server closes the connection. This prevents hung clients from occupying a connection indefinitely. The default is one minute (1m). This parameter can only be set in the postgresql.conf file or on the server command line.


I can't find about this information or solution by goolge search or forum,
Please tell me how to verify it is active . or check it  running?

What happens behind the scenes is that psql first tries to connect without a password.  It is told that it can't connect without a password.  It closes the uncompleted connection.  Then psql asks you for a password, waits until you enter one, and then starts a new connection using the password. So during the wait time, there is no pending connection to the database to be timed out.  It is the client program psql which is doing the waiting, not the database server.

Cheers,

Jeff


Re: [Bug / Question ] " authentication_timeout " is invalid.

От
林俊彥
Дата:
Thank you for all your assistance.  


Best Regard,
James


2015-09-18 1:03 GMT+08:00 Jeff Janes <jeff.janes@gmail.com>:
On Wed, Sep 16, 2015 at 9:02 PM, 林俊彥 <james.lin@cenoq.com> wrote:
Hi , Jeff,
      Thank you for reply.  I used to use in the following ways but still could not be verified:
-----------  Log start ---------------------
[BEGIN] 2015/9/17 11:51:51
[postgres@pg95 ~]$ cat test.sh 

#!/bin/bash
ip a |grep eth0
psql -h 100.200.100.211<<EOF
show authentication_timeout;
select now();
\! sh net_test.sh
select now();
EOF


That isn't going to work because net_test.sh isn't called until after the connection is authenticated.

It is difficult to interrupt the process during the brief instant between when the connection was opened and when it is authenticated.

Start psql, and when it is waiting for the password, find the pid for psql and start gdb against the psql process (gdb -p <pid>)

In gdb, do:

(gdb) b PQconnectStartParams
Breakpoint 1 at 0x7f5de60bdf70: file fe-connect.c, line 561.
(gdb) c

Then go back and complete the password in psql.  The gdb session will have triggered the breakpoint.  

Wait for less than the timeout, and hit 'c' and enter in the debugger.  The connection will complete.

Or, wait for more than the timeout and hit 'c' and enter in the debugger.  The connection will error out, as the server side hung up on it.
 
Cheers,

Jeff