Thread: "could not accept SSPI security context"

"could not accept SSPI security context"

From
Reto Schöning
Date:
Hi,

I've set up 8.3 to use SSPI for authentication (clients and server on windows XP). I can successfully connect from clients using psql and another db client using SSPI authentication. However when trying to connect with Npgsql (2.0.11) as the same user, the following error occurs:

   "could not accept SSPI security context"

The same type of connection succeeds when connecting locally from the db server. The problem only affects connection attempts on client machines, and (currently) only when connecting from a .Net application using Npgsql. However the same error also showed up when connecting with psql initially. Now that works, and I'm not sure what change made that error disappear.

Can anyone help me understand that error? What circumstances can lead to this? 

Thanks,
Reto

Re: "could not accept SSPI security context"

From
Magnus Hagander
Date:
On Mon, Nov 22, 2010 at 10:21, Reto Schöning <reto.schoening@gmail.com> wrote:
> Hi,
>
> I've set up 8.3 to use SSPI for authentication (clients and server on
> windows XP). I can successfully connect from clients using psql and another
> db client using SSPI authentication. However when trying to connect with
> Npgsql (2.0.11) as the same user, the following error occurs:
>
>    "could not accept SSPI security context"
>
> The same type of connection succeeds when connecting locally from the db
> server. The problem only affects connection attempts on client machines, and
> (currently) only when connecting from a .Net application using
> Npgsql. However the same error also showed up when connecting with psql
> initially. Now that works, and I'm not sure what change made that error
> disappear.
> Can anyone help me understand that error? What circumstances can lead to
> this?

There should be a details row associated with that message that should
give you some further hints on what actually went wrong.

You should probably post this to the npgsql list as well, since it
does seem to be an npgsql problem - as you say, it works from psql
which means it works from libpq.

--
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/

Re: "could not accept SSPI security context"

From
Magnus Hagander
Date:
Plase don't drop the mailinglist from the thread.


On Mon, Nov 22, 2010 at 11:57, Reto Schöning <reto.schoening@gmail.com> wrote:
> Thanks for the hint. The full error message from npgsql including that
> detail row is
> Npgsql.NpgsqlException was unhandled
>   Message="FATAL: XX000: could not accept SSPI security context"
>   Source="Npgsql"
>   ErrorCode=-2147467259
>   BaseMessage="could not accept SSPI security context"
>   Code="XX000"
>   Detail="The logon attempt failed\r\n (8009030c)"
>   ErrorSql=""
>   File=".\\src\\backend\\libpq\\auth.c"
>   Hint=""
>   Line="648"
>   Position=""
>   Routine="pg_SSPI_error"
>   Severity="FATAL"
>   Where=""
>   StackTrace:
>        at Npgsql.NpgsqlState.<ProcessBackendResponses_Ver_3>d__a.MoveNext()
> in C:\projects\Npgsql2\src\Npgsql\NpgsqlState.cs:line 686
>        at Npgsql.NpgsqlState.IterateThroughAllResponses(IEnumerable`1 ienum)
> in C:\projects\Npgsql2\src\Npgsql\NpgsqlState.cs:line 319
>        at Npgsql.NpgsqlState.ProcessBackendResponses(NpgsqlConnector
> context) in C:\projects\Npgsql2\src\Npgsql\NpgsqlState.cs:line 314
>        at Npgsql.NpgsqlConnectedState.Startup(NpgsqlConnector context) in
> C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectedState.cs:line 52
>        at Npgsql.NpgsqlConnector.Open() in
> C:\projects\Npgsql2\src\Npgsql\NpgsqlConnector.cs:line 656
>        at Npgsql.NpgsqlConnectorPool.GetPooledConnector(NpgsqlConnection
> Connection) in C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectorPool.cs:line
> 423
>        at
> Npgsql.NpgsqlConnectorPool.RequestPooledConnectorInternal(NpgsqlConnection
> Connection) in C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectorPool.cs:line
> 226
>        at Npgsql.NpgsqlConnectorPool.RequestPooledConnector(NpgsqlConnection
> Connection) in C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectorPool.cs:line
> 178
>        at Npgsql.NpgsqlConnectorPool.RequestConnector(NpgsqlConnection
> Connection) in C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectorPool.cs:line
> 158
>        at Npgsql.NpgsqlConnection.Open() in
> C:\projects\Npgsql2\src\Npgsql\NpgsqlConnection.cs:line 543
>        at NpgsqlTest.Program.Main(String[] args) in C:\Documents and
> Settings\rsc\My Documents\Visual Studio
> 2005\Projects\NpgsqlTest\NpgsqlTest\Program.cs:line 17
> I found a way to reproduce the same message in psql: when creating a local
> user with the same name as a domain user, the connection attempt when logged
> in as that user fails with the same message (rightly so, of course).
> I've posted that in the npgsql forum also, no response yet.

The details row you're looking for is in the *server* side log.

--
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/

Re: "could not accept SSPI security context"

From
Reto Schöning
Date:
Here's the log output for a failed connection:

2010-11-22 13:25:54 CET FATAL:  could not accept SSPI security context
2010-11-22 13:25:54 CET DETAIL:  The logon attempt failed
(8009030c)


2010/11/22 Magnus Hagander <magnus@hagander.net>
Plase don't drop the mailinglist from the thread.


On Mon, Nov 22, 2010 at 11:57, Reto Schöning <reto.schoening@gmail.com> wrote:
> Thanks for the hint. The full error message from npgsql including that
> detail row is
> Npgsql.NpgsqlException was unhandled
>   Message="FATAL: XX000: could not accept SSPI security context"
>   Source="Npgsql"
>   ErrorCode=-2147467259
>   BaseMessage="could not accept SSPI security context"
>   Code="XX000"
>   Detail="The logon attempt failed\r\n (8009030c)"
>   ErrorSql=""
>   File=".\\src\\backend\\libpq\\auth.c"
>   Hint=""
>   Line="648"
>   Position=""
>   Routine="pg_SSPI_error"
>   Severity="FATAL"
>   Where=""
>   StackTrace:
>        at Npgsql.NpgsqlState.<ProcessBackendResponses_Ver_3>d__a.MoveNext()
> in C:\projects\Npgsql2\src\Npgsql\NpgsqlState.cs:line 686
>        at Npgsql.NpgsqlState.IterateThroughAllResponses(IEnumerable`1 ienum)
> in C:\projects\Npgsql2\src\Npgsql\NpgsqlState.cs:line 319
>        at Npgsql.NpgsqlState.ProcessBackendResponses(NpgsqlConnector
> context) in C:\projects\Npgsql2\src\Npgsql\NpgsqlState.cs:line 314
>        at Npgsql.NpgsqlConnectedState.Startup(NpgsqlConnector context) in
> C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectedState.cs:line 52
>        at Npgsql.NpgsqlConnector.Open() in
> C:\projects\Npgsql2\src\Npgsql\NpgsqlConnector.cs:line 656
>        at Npgsql.NpgsqlConnectorPool.GetPooledConnector(NpgsqlConnection
> Connection) in C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectorPool.cs:line
> 423
>        at
> Npgsql.NpgsqlConnectorPool.RequestPooledConnectorInternal(NpgsqlConnection
> Connection) in C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectorPool.cs:line
> 226
>        at Npgsql.NpgsqlConnectorPool.RequestPooledConnector(NpgsqlConnection
> Connection) in C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectorPool.cs:line
> 178
>        at Npgsql.NpgsqlConnectorPool.RequestConnector(NpgsqlConnection
> Connection) in C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectorPool.cs:line
> 158
>        at Npgsql.NpgsqlConnection.Open() in
> C:\projects\Npgsql2\src\Npgsql\NpgsqlConnection.cs:line 543
>        at NpgsqlTest.Program.Main(String[] args) in C:\Documents and
> Settings\rsc\My Documents\Visual Studio
> 2005\Projects\NpgsqlTest\NpgsqlTest\Program.cs:line 17
> I found a way to reproduce the same message in psql: when creating a local
> user with the same name as a domain user, the connection attempt when logged
> in as that user fails with the same message (rightly so, of course).
> I've posted that in the npgsql forum also, no response yet.

The details row you're looking for is in the *server* side log.

--

Re: "could not accept SSPI security context"

From
Magnus Hagander
Date:
Hmm. That's a simple SEC_E_LOGON_DENIED. Simply meaning
usedname/password is incorrect. The security eventlog on the server
(or domain controller) might have more information around it. If not,
I'm not sure what's wrong there - if it happens only in npgsql it must
be related to that. Or perhaps - based on your reproduction - the .net
app is running with a different user than you think?

//Magnus

On Mon, Nov 22, 2010 at 13:31, Reto Schöning <reto.schoening@gmail.com> wrote:
> Here's the log output for a failed connection:
> 2010-11-22 13:25:54 CET FATAL:  could not accept SSPI security context
> 2010-11-22 13:25:54 CET DETAIL:  The logon attempt failed
> (8009030c)
>
> 2010/11/22 Magnus Hagander <magnus@hagander.net>
>>
>> Plase don't drop the mailinglist from the thread.
>>
>>
>> On Mon, Nov 22, 2010 at 11:57, Reto Schöning <reto.schoening@gmail.com>
>> wrote:
>> > Thanks for the hint. The full error message from npgsql including that
>> > detail row is
>> > Npgsql.NpgsqlException was unhandled
>> >   Message="FATAL: XX000: could not accept SSPI security context"
>> >   Source="Npgsql"
>> >   ErrorCode=-2147467259
>> >   BaseMessage="could not accept SSPI security context"
>> >   Code="XX000"
>> >   Detail="The logon attempt failed\r\n (8009030c)"
>> >   ErrorSql=""
>> >   File=".\\src\\backend\\libpq\\auth.c"
>> >   Hint=""
>> >   Line="648"
>> >   Position=""
>> >   Routine="pg_SSPI_error"
>> >   Severity="FATAL"
>> >   Where=""
>> >   StackTrace:
>> >        at
>> > Npgsql.NpgsqlState.<ProcessBackendResponses_Ver_3>d__a.MoveNext()
>> > in C:\projects\Npgsql2\src\Npgsql\NpgsqlState.cs:line 686
>> >        at Npgsql.NpgsqlState.IterateThroughAllResponses(IEnumerable`1
>> > ienum)
>> > in C:\projects\Npgsql2\src\Npgsql\NpgsqlState.cs:line 319
>> >        at Npgsql.NpgsqlState.ProcessBackendResponses(NpgsqlConnector
>> > context) in C:\projects\Npgsql2\src\Npgsql\NpgsqlState.cs:line 314
>> >        at Npgsql.NpgsqlConnectedState.Startup(NpgsqlConnector context)
>> > in
>> > C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectedState.cs:line 52
>> >        at Npgsql.NpgsqlConnector.Open() in
>> > C:\projects\Npgsql2\src\Npgsql\NpgsqlConnector.cs:line 656
>> >        at Npgsql.NpgsqlConnectorPool.GetPooledConnector(NpgsqlConnection
>> > Connection) in
>> > C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectorPool.cs:line
>> > 423
>> >        at
>> >
>> > Npgsql.NpgsqlConnectorPool.RequestPooledConnectorInternal(NpgsqlConnection
>> > Connection) in
>> > C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectorPool.cs:line
>> > 226
>> >        at
>> > Npgsql.NpgsqlConnectorPool.RequestPooledConnector(NpgsqlConnection
>> > Connection) in
>> > C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectorPool.cs:line
>> > 178
>> >        at Npgsql.NpgsqlConnectorPool.RequestConnector(NpgsqlConnection
>> > Connection) in
>> > C:\projects\Npgsql2\src\Npgsql\NpgsqlConnectorPool.cs:line
>> > 158
>> >        at Npgsql.NpgsqlConnection.Open() in
>> > C:\projects\Npgsql2\src\Npgsql\NpgsqlConnection.cs:line 543
>> >        at NpgsqlTest.Program.Main(String[] args) in C:\Documents and
>> > Settings\rsc\My Documents\Visual Studio
>> > 2005\Projects\NpgsqlTest\NpgsqlTest\Program.cs:line 17
>> > I found a way to reproduce the same message in psql: when creating a
>> > local
>> > user with the same name as a domain user, the connection attempt when
>> > logged
>> > in as that user fails with the same message (rightly so, of course).
>> > I've posted that in the npgsql forum also, no response yet.
>>
>> The details row you're looking for is in the *server* side log.
>>
>> --
>>  Magnus Hagander
>>  Me: http://www.hagander.net/
>>  Work: http://www.redpill-linpro.com/
>
>



--
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/

Re: "could not accept SSPI security context"

From
Brar Piening
Date:
On Mon, 22 Nov 2010 13:43:14 +0100, Magnus Hagander
<magnus@hagander.net> wrote:
> Hmm. That's a simple SEC_E_LOGON_DENIED. Simply meaning
> usedname/password is incorrect. The security eventlog on the server
> (or domain controller) might have more information around it. If not,
> I'm not sure what's wrong there - if it happens only in npgsql it must
> be related to that. Or perhaps - based on your reproduction - the .net
> app is running with a different user than you think?
>

If you've got access to the sources of your client app that uses Npgsql
you might want to put :

             NpgsqlEventLog.Level = LogLevel.Debug;
             NpgsqlEventLog.LogName = @"C:\somePath\NpgsqlEventLog.txt";

in the code before the first call of NpgsqlConnection.Open() to find out
details about the user name that's actually connecting.


Just look for

Entering PGUtil.WriteString()
String written: user.
Entering PGUtil.WriteString()
String written: YOURCONNECTINGUSERNAME.

after

Entering NpgsqlStartupPacket.NpgsqlStartupPacket()
Entering NpgsqlStartupPacket.WriteToStream()
Entering NpgsqlStartupPacket.WriteToStream_Ver_3()

Regards,

Brar

Re: "could not accept SSPI security context"

From
Reto Schöning
Date:
thanks a lot for the hints.
 
client side logging: the user name corresponds to the expected user, without the domain prefix ("rsc"). See the full log output below.
 
security event log: I should get that shortly from our IT.
Regards, Reto
 
29.11.2010 10:37:17 4412 Debug Entering NpgsqlConnection.NpgsqlConnection(NpgsqlConnection())
29.11.2010 10:37:18 4412 Debug ConnectionString Option: HOST = <ip>
29.11.2010 10:37:18 4412 Debug ConnectionString Option: PORT = 5432
29.11.2010 10:37:18 4412 Debug ConnectionString Option: PROTOCOL = 3
29.11.2010 10:37:18 4412 Debug ConnectionString Option: DATABASE = some_db
29.11.2010 10:37:18 4412 Debug ConnectionString Option: USER ID =
29.11.2010 10:37:18 4412 Debug ConnectionString Option: PASSWORD =
29.11.2010 10:37:18 4412 Debug ConnectionString Option: SSL = False
29.11.2010 10:37:18 4412 Debug ConnectionString Option: SSLMODE = Disable
29.11.2010 10:37:18 4412 Debug ConnectionString Option: TIMEOUT = 15
29.11.2010 10:37:18 4412 Debug ConnectionString Option: SEARCHPATH =
29.11.2010 10:37:18 4412 Debug ConnectionString Option: POOLING = True
29.11.2010 10:37:18 4412 Debug ConnectionString Option: CONNECTIONLIFETIME = 15
29.11.2010 10:37:18 4412 Debug ConnectionString Option: MINPOOLSIZE = 1
29.11.2010 10:37:18 4412 Debug ConnectionString Option: MAXPOOLSIZE = 20
29.11.2010 10:37:18 4412 Debug ConnectionString Option: SYNCNOTIFICATION = False
29.11.2010 10:37:18 4412 Debug ConnectionString Option: COMMANDTIMEOUT = 20
29.11.2010 10:37:18 4412 Debug ConnectionString Option: ENLIST = False
29.11.2010 10:37:18 4412 Debug ConnectionString Option: PRELOADREADER = False
29.11.2010 10:37:18 4412 Debug ConnectionString Option: USEEXTENDEDTYPES = False
29.11.2010 10:37:18 4412 Debug ConnectionString Option: INTEGRATED SECURITY = true
29.11.2010 10:37:18 4412 Debug ConnectionString Option: COMPATIBLE = 2.0.11.0
29.11.2010 10:37:18 4412 Debug Entering NpgsqlConnection.Open()
29.11.2010 10:37:18 4412 Debug Get NpgsqlClosedState.Instance
29.11.2010 10:37:18 4412 Debug Get NpgsqlClosedState.Instance
29.11.2010 10:37:18 4412 Debug Entering NpgsqlClosedState.Open()
29.11.2010 10:37:19 4412 Debug Attempt to connect to '<ip>'.
29.11.2010 10:37:19 4412 Normal Connected to: <ip>:5432.
29.11.2010 10:37:19 4412 Debug Entering NpgsqlStartupPacket.NpgsqlStartupPacket()
29.11.2010 10:37:19 4412 Debug Entering NpgsqlStartupPacket.WriteToStream()
29.11.2010 10:37:19 4412 Debug Entering NpgsqlStartupPacket.WriteToStream_Ver_3()
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: user.
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: rsc.
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: database.
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: some_db.
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: DateStyle.
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: ISO.
29.11.2010 10:37:19 4412 Debug Entering NpgsqlState.ProcessBackendResponses()
29.11.2010 10:37:19 4412 Debug AuthenticationRequest message received from server.
29.11.2010 10:37:19 4412 Debug Entering NpgsqlStartupState.Authenticate()
29.11.2010 10:37:19 4412 Debug Entering NpgsqlPasswordPacket.NpgsqlPasswordPacket()
29.11.2010 10:37:19 4412 Debug Entering NpgsqlPasswordPacket.WriteToStream()
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: NTLMSSP    ??                (
   .
29.11.2010 10:37:19 4412 Debug AuthenticationRequest message received from server.
29.11.2010 10:37:19 4412 Debug Entering NpgsqlStartupState.Authenticate()
29.11.2010 10:37:19 4412 Debug Entering NpgsqlPasswordPacket.NpgsqlPasswordPacket()
29.11.2010 10:37:19 4412 Debug Entering NpgsqlPasswordPacket.WriteToStream()
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: NTLMSSP      t     ?     H     `     f       ?   ?"(
   T E S T . X Y Z - D E r s c T R I D E N T ????J?#0                ?n^V?1d1m?5???7O+???? .
29.11.2010 10:37:21 4412 Debug Entering PGUtil.ReadString()
29.11.2010 10:37:21 4412 Debug Get NpgsqlEventLog.LogLevel
29.11.2010 10:37:21 4412 Debug String read: FATAL.
29.11.2010 10:37:21 4412 Debug Entering PGUtil.ReadString()
29.11.2010 10:37:21 4412 Debug Get NpgsqlEventLog.LogLevel
29.11.2010 10:37:21 4412 Debug String read: XX000.
29.11.2010 10:37:21 4412 Debug Entering PGUtil.ReadString()
29.11.2010 10:37:21 4412 Debug Get NpgsqlEventLog.LogLevel
29.11.2010 10:37:21 4412 Debug String read: could not accept SSPI security context.
29.11.2010 10:37:21 4412 Debug Entering PGUtil.ReadString()
29.11.2010 10:37:21 4412 Debug Get NpgsqlEventLog.LogLevel
29.11.2010 10:37:21 4412 Debug String read: The logon attempt failed
 (8009030c).
29.11.2010 10:37:21 4412 Debug Entering PGUtil.ReadString()
29.11.2010 10:37:21 4412 Debug Get NpgsqlEventLog.LogLevel
29.11.2010 10:37:21 4412 Debug String read: .\src\backend\libpq\auth.c.
29.11.2010 10:37:21 4412 Debug Entering PGUtil.ReadString()
29.11.2010 10:37:21 4412 Debug Get NpgsqlEventLog.LogLevel
29.11.2010 10:37:21 4412 Debug String read: 621.
29.11.2010 10:37:21 4412 Debug Entering PGUtil.ReadString()
29.11.2010 10:37:21 4412 Debug Get NpgsqlEventLog.LogLevel
29.11.2010 10:37:21 4412 Debug String read: pg_SSPI_error.
29.11.2010 10:37:21 4412 Debug ErrorResponse message from Server: could not accept SSPI security context.
29.11.2010 10:37:21 4412 Normal An NpgsqlException occured: FATAL: XX000: could not accept SSPI security context.

 
2010/11/23 Brar Piening <brar@gmx.de>
On Mon, 22 Nov 2010 13:43:14 +0100, Magnus Hagander <magnus@hagander.net> wrote:
Hmm. That's a simple SEC_E_LOGON_DENIED. Simply meaning
usedname/password is incorrect. The security eventlog on the server
(or domain controller) might have more information around it. If not,
I'm not sure what's wrong there - if it happens only in npgsql it must
be related to that. Or perhaps - based on your reproduction - the .net
app is running with a different user than you think?


If you've got access to the sources of your client app that uses Npgsql you might want to put :

           NpgsqlEventLog.Level = LogLevel.Debug;
           NpgsqlEventLog.LogName = @"C:\somePath\NpgsqlEventLog.txt";

in the code before the first call of NpgsqlConnection.Open() to find out details about the user name that's actually connecting.


Just look for

Entering PGUtil.WriteString()
String written: user.
Entering PGUtil.WriteString()
String written: YOURCONNECTINGUSERNAME.

after

Entering NpgsqlStartupPacket.NpgsqlStartupPacket()
Entering NpgsqlStartupPacket.WriteToStream()
Entering NpgsqlStartupPacket.WriteToStream_Ver_3()

Regards,

Brar

Re: "could not accept SSPI security context"

From
Reto Schöning
Date:
I just heard back from our IT. There's nothing in the logs for this connection attempt, but they noted in the Npgsql log that the authentication was attempted using NTLM. However our domain controller no longer supports NTLM, but only LDAP(s) and kerberos (it's a Windows 2008 server). From the docs I understand that with SSPI, pg should try kerberos first and fall back to NTLM. This works when connecting from psql. Maybe Npgsql goes straight for NTLM, at least when using it the way I do? 

2010/11/29 Reto Schöning <reto.schoening@gmail.com>
thanks a lot for the hints.
 
client side logging: the user name corresponds to the expected user, without the domain prefix ("rsc"). See the full log output below.
 
security event log: I should get that shortly from our IT.
Regards, Reto
 
29.11.2010 10:37:17 4412 Debug Entering NpgsqlConnection.NpgsqlConnection(NpgsqlConnection())
29.11.2010 10:37:18 4412 Debug ConnectionString Option: HOST = <ip>
29.11.2010 10:37:18 4412 Debug ConnectionString Option: PORT = 5432
29.11.2010 10:37:18 4412 Debug ConnectionString Option: PROTOCOL = 3
29.11.2010 10:37:18 4412 Debug ConnectionString Option: DATABASE = some_db
29.11.2010 10:37:18 4412 Debug ConnectionString Option: USER ID =
29.11.2010 10:37:18 4412 Debug ConnectionString Option: PASSWORD =
29.11.2010 10:37:18 4412 Debug ConnectionString Option: SSL = False
29.11.2010 10:37:18 4412 Debug ConnectionString Option: SSLMODE = Disable
29.11.2010 10:37:18 4412 Debug ConnectionString Option: TIMEOUT = 15
29.11.2010 10:37:18 4412 Debug ConnectionString Option: SEARCHPATH =
29.11.2010 10:37:18 4412 Debug ConnectionString Option: POOLING = True
29.11.2010 10:37:18 4412 Debug ConnectionString Option: CONNECTIONLIFETIME = 15
29.11.2010 10:37:18 4412 Debug ConnectionString Option: MINPOOLSIZE = 1
29.11.2010 10:37:18 4412 Debug ConnectionString Option: MAXPOOLSIZE = 20
29.11.2010 10:37:18 4412 Debug ConnectionString Option: SYNCNOTIFICATION = False
29.11.2010 10:37:18 4412 Debug ConnectionString Option: COMMANDTIMEOUT = 20
29.11.2010 10:37:18 4412 Debug ConnectionString Option: ENLIST = False
29.11.2010 10:37:18 4412 Debug ConnectionString Option: PRELOADREADER = False
29.11.2010 10:37:18 4412 Debug ConnectionString Option: USEEXTENDEDTYPES = False
29.11.2010 10:37:18 4412 Debug ConnectionString Option: INTEGRATED SECURITY = true
29.11.2010 10:37:18 4412 Debug ConnectionString Option: COMPATIBLE = 2.0.11.0
29.11.2010 10:37:18 4412 Debug Entering NpgsqlConnection.Open()
29.11.2010 10:37:18 4412 Debug Get NpgsqlClosedState.Instance
29.11.2010 10:37:18 4412 Debug Get NpgsqlClosedState.Instance
29.11.2010 10:37:18 4412 Debug Entering NpgsqlClosedState.Open()
29.11.2010 10:37:19 4412 Debug Attempt to connect to '<ip>'.
29.11.2010 10:37:19 4412 Normal Connected to: <ip>:5432.
29.11.2010 10:37:19 4412 Debug Entering NpgsqlStartupPacket.NpgsqlStartupPacket()
29.11.2010 10:37:19 4412 Debug Entering NpgsqlStartupPacket.WriteToStream()
29.11.2010 10:37:19 4412 Debug Entering NpgsqlStartupPacket.WriteToStream_Ver_3()
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: user.
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: rsc.
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: database.
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: some_db.
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: DateStyle.
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: ISO.
29.11.2010 10:37:19 4412 Debug Entering NpgsqlState.ProcessBackendResponses()
29.11.2010 10:37:19 4412 Debug AuthenticationRequest message received from server.
29.11.2010 10:37:19 4412 Debug Entering NpgsqlStartupState.Authenticate()
29.11.2010 10:37:19 4412 Debug Entering NpgsqlPasswordPacket.NpgsqlPasswordPacket()
29.11.2010 10:37:19 4412 Debug Entering NpgsqlPasswordPacket.WriteToStream()
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: NTLMSSP    ? ?                (
   .
29.11.2010 10:37:19 4412 Debug AuthenticationRequest message received from server.
29.11.2010 10:37:19 4412 Debug Entering NpgsqlStartupState.Authenticate()
29.11.2010 10:37:19 4412 Debug Entering NpgsqlPasswordPacket.NpgsqlPasswordPacket()
29.11.2010 10:37:19 4412 Debug Entering NpgsqlPasswordPacket.WriteToStream()
29.11.2010 10:37:19 4412 Debug Entering PGUtil.WriteString()
29.11.2010 10:37:19 4412 Debug String written: NTLMSSP    t   ?   H   `   f       ?   ?" (
   T E S T . X Y Z - D E r s c T R I D E N T ????J?#0                ?n^ V?1d1m?5???7O+???? .
29.11.2010 10:37:21 4412 Debug Entering PGUtil.ReadString()
29.11.2010 10:37:21 4412 Debug Get NpgsqlEventLog.LogLevel
29.11.2010 10:37:21 4412 Debug String read: FATAL.
29.11.2010 10:37:21 4412 Debug Entering PGUtil.ReadString()
29.11.2010 10:37:21 4412 Debug Get NpgsqlEventLog.LogLevel
29.11.2010 10:37:21 4412 Debug String read: XX000.
29.11.2010 10:37:21 4412 Debug Entering PGUtil.ReadString()
29.11.2010 10:37:21 4412 Debug Get NpgsqlEventLog.LogLevel
29.11.2010 10:37:21 4412 Debug String read: could not accept SSPI security context.
29.11.2010 10:37:21 4412 Debug Entering PGUtil.ReadString()
29.11.2010 10:37:21 4412 Debug Get NpgsqlEventLog.LogLevel
29.11.2010 10:37:21 4412 Debug String read: The logon attempt failed
 (8009030c).
29.11.2010 10:37:21 4412 Debug Entering PGUtil.ReadString()
29.11.2010 10:37:21 4412 Debug Get NpgsqlEventLog.LogLevel
29.11.2010 10:37:21 4412 Debug String read: .\src\backend\libpq\auth.c.
29.11.2010 10:37:21 4412 Debug Entering PGUtil.ReadString()
29.11.2010 10:37:21 4412 Debug Get NpgsqlEventLog.LogLevel
29.11.2010 10:37:21 4412 Debug String read: 621.
29.11.2010 10:37:21 4412 Debug Entering PGUtil.ReadString()
29.11.2010 10:37:21 4412 Debug Get NpgsqlEventLog.LogLevel
29.11.2010 10:37:21 4412 Debug String read: pg_SSPI_error.
29.11.2010 10:37:21 4412 Debug ErrorResponse message from Server: could not accept SSPI security context.
29.11.2010 10:37:21 4412 Normal An NpgsqlException occured: FATAL: XX000: could not accept SSPI security context.

 
2010/11/23 Brar Piening <brar@gmx.de>

On Mon, 22 Nov 2010 13:43:14 +0100, Magnus Hagander <magnus@hagander.net> wrote:
Hmm. That's a simple SEC_E_LOGON_DENIED. Simply meaning
usedname/password is incorrect. The security eventlog on the server
(or domain controller) might have more information around it. If not,
I'm not sure what's wrong there - if it happens only in npgsql it must
be related to that. Or perhaps - based on your reproduction - the .net
app is running with a different user than you think?


If you've got access to the sources of your client app that uses Npgsql you might want to put :

           NpgsqlEventLog.Level = LogLevel.Debug;
           NpgsqlEventLog.LogName = @"C:\somePath\NpgsqlEventLog.txt";

in the code before the first call of NpgsqlConnection.Open() to find out details about the user name that's actually connecting.


Just look for

Entering PGUtil.WriteString()
String written: user.
Entering PGUtil.WriteString()
String written: YOURCONNECTINGUSERNAME.

after

Entering NpgsqlStartupPacket.NpgsqlStartupPacket()
Entering NpgsqlStartupPacket.WriteToStream()
Entering NpgsqlStartupPacket.WriteToStream_Ver_3()

Regards,

Brar


Re: "could not accept SSPI security context"

From
Brar Piening
Date:
On Mon, 29 Nov 2010 15:27:35 +0100, Reto Schöning
<reto.schoening@gmail.com> wrote:
> I just heard back from our IT. There's nothing in the logs for this
> connection attempt, but they noted in the Npgsql log that the
> authentication was attempted using NTLM. However our domain controller
> no longer supports NTLM, but only LDAP(s) and kerberos (it's a Windows
> 2008 server). From the docs I understand that with SSPI, pg should try
> kerberos first and fall back to NTLM. This works when connecting from
> psql. Maybe Npgsql goes straight for NTLM, at least when using it the
> way I do?

Both are using the Negotiate SSP authentication package

http://msdn.microsoft.com/en-us/library/aa378748%28v=VS.85%29.aspx

Npgsql (SSPIHandler.cs):
int status = AcquireCredentialsHandle(
     "",
     "negotiate",
     SECPKG_CRED_OUTBOUND,
     IntPtr.Zero,
     IntPtr.Zero,
     IntPtr.Zero,
     IntPtr.Zero,
     ref sspicred,
     out expire
);

libpq (fe-auth.c):
/*
  * Send initial SSPI authentication token.
  * If use_negotiate is 0, use kerberos authentication package which is
  * compatible with Unix. If use_negotiate is 1, use the negotiate package
  * which supports both kerberos and NTLM, but is not compatible with Unix.
  */
r = AcquireCredentialsHandle(NULL,
     use_negotiate ? "negotiate" : "kerberos",
     SECPKG_CRED_OUTBOUND,
     NULL,
     NULL,
     NULL,
     NULL,
     conn->sspicred,
&expire);

It should be a one line patch to force Npgsql into using kerberos but I
can't see any reason why negotiate should act differently between Npgsql
and libpq.

Regards,

Brar

Re: "could not accept SSPI security context"

From
Brar Piening
Date:
Passing null instead of empty string for the principal shouldn't make any difference as an empty CLR-String should be marshalled to an empty (null terminated) C-String.

The problem could also be in InitializeSecurityContext which happens in respnse to
AuthenticationGSSContinue.

If you happen to find out what the problem is - please let me know or wrap a patch for the Npgsql development team so that we can fix it.

I'm sorry that I can't be very helpful in tracking down this issue, but I don't have a Windows 2008 Server, or even any other Kerberos-Setup available to test it.

Actually the SSPI-Patch was something I once put out knowing that I'll be "bogged down by other stuff" immediatley afterwards, and it didn't see much maintainace since then.
There are some oversights like

// TODO: correct exception
throw new Exception();

in NpgsqlState.cs and the fact that the Continue method (in SSPIHandler.cs) returns the (opaque) secbuffer as ASCII-String (encoded by System.Text.Encoding.ASCII.GetString(Byte[])) should even be considered as a bug (even though to my knowledge it didn't cause any problems until now).

In other words - I'd be willing to overhaul the wohle thing if I find a good reason to do so (and some time).

Regards,

Brar


On Fri, 3 Dec 2010 06:32:17 +0100, Reto Schöning <reto.schoening@gmail.com> wrote:
thanks, and sorry for my slow responses, I'm bogged down by other stuff. I plan to get the source and try some things like
- force kerberos to see if the reason that NTLM is used is that kerberos fails and hope for some hints at the cause of the failure
- pass null instead of empty string for the principal
- check out the principal on the calling thread etc.
and post the results to the list. Could take I week or so until a get to that though.
Regards, Reto

2010/11/29 Brar Piening <brar@gmx.de>
On Mon, 29 Nov 2010 15:27:35 +0100, Reto Schöning <reto.schoening@gmail.com> wrote:
I just heard back from our IT. There's nothing in the logs for this connection attempt, but they noted in the Npgsql log that the authentication was attempted using NTLM. However our domain controller no longer supports NTLM, but only LDAP(s) and kerberos (it's a Windows 2008 server). From the docs I understand that with SSPI, pg should try kerberos first and fall back to NTLM. This works when connecting from psql. Maybe Npgsql goes straight for NTLM, at least when using it the way I do?

Both are using the Negotiate SSP authentication package

http://msdn.microsoft.com/en-us/library/aa378748%28v=VS.85%29.aspx

Npgsql (SSPIHandler.cs):
int status = AcquireCredentialsHandle(
   "",
   "negotiate",
   SECPKG_CRED_OUTBOUND,
   IntPtr.Zero,
   IntPtr.Zero,
   IntPtr.Zero,
   IntPtr.Zero,
   ref sspicred,
   out expire
);

libpq (fe-auth.c):
/*
 * Send initial SSPI authentication token.
 * If use_negotiate is 0, use kerberos authentication package which is
 * compatible with Unix. If use_negotiate is 1, use the negotiate package
 * which supports both kerberos and NTLM, but is not compatible with Unix.
 */
r = AcquireCredentialsHandle(NULL,
   use_negotiate ? "negotiate" : "kerberos",
   SECPKG_CRED_OUTBOUND,
   NULL,
   NULL,
   NULL,
   NULL,
   conn->sspicred,
&expire);

It should be a one line patch to force Npgsql into using kerberos but I  can't see any reason why negotiate should act differently between Npgsql and libpq.

Regards,

Brar



Re: "could not accept SSPI security context"

From
Reto Schöning
Date:
ok we moved to VS08 and I can at last experiment with the npgsql code. I tried forcing "kerberos" instead of "negotiate" in the call to AcquireCredentialsHandle in SSPIHandler.cs. The exception message I then get in the first call to InitializeSecurityContext() is
 
"The security database on the server does not have a computer account for this workstation trust relationship"
 
googling that yields AD configuration issues as a possible cause (eg http://social.technet.microsoft.com/Forums/en-US/itprovistasp/thread/31905c1a-5c25-4426-ac8d-677004c21f5d). I will check that with our IT. However since from the same machines, psql and other pg clients can successfully connect using kerberos, an AD issue seems unlikely to be the (sole) cause.
 
I also speculated that the CurrentPrincipal on the thread might matter and made sure that it was the kerberos-authenticated WindowsPrincipal, instead of the default GenericPrincipal. But that made no difference.
 
Is there anything else in the code that I could check or try?
Regards,
Reto

 
2010/12/3 Brar Piening <brar@gmx.de>
Passing null instead of empty string for the principal shouldn't make any difference as an empty CLR-String should be marshalled to an empty (null terminated) C-String.

The problem could also be in InitializeSecurityContext which happens in respnse to
AuthenticationGSSContinue.

If you happen to find out what the problem is - please let me know or wrap a patch for the Npgsql development team so that we can fix it.

I'm sorry that I can't be very helpful in tracking down this issue, but I don't have a Windows 2008 Server, or even any other Kerberos-Setup available to test it.

Actually the SSPI-Patch was something I once put out knowing that I'll be "bogged down by other stuff" immediatley afterwards, and it didn't see much maintainace since then.
There are some oversights like

// TODO: correct exception
throw new Exception();

in NpgsqlState.cs and the fact that the Continue method (in SSPIHandler.cs) returns the (opaque) secbuffer as ASCII-String (encoded by System.Text.Encoding.ASCII.GetString(Byte[])) should even be considered as a bug (even though to my knowledge it didn't cause any problems until now).

In other words - I'd be willing to overhaul the wohle thing if I find a good reason to do so (and some time).

Regards,

Brar


On Fri, 3 Dec 2010 06:32:17 +0100, Reto Schöning <reto.schoening@gmail.com> wrote:
thanks, and sorry for my slow responses, I'm bogged down by other stuff. I plan to get the source and try some things like
- force kerberos to see if the reason that NTLM is used is that kerberos fails and hope for some hints at the cause of the failure
- pass null instead of empty string for the principal
- check out the principal on the calling thread etc.
and post the results to the list. Could take I week or so until a get to that though.
Regards, Reto

2010/11/29 Brar Piening <brar@gmx.de>
On Mon, 29 Nov 2010 15:27:35 +0100, Reto Schöning <reto.schoening@gmail.com> wrote:
I just heard back from our IT. There's nothing in the logs for this connection attempt, but they noted in the Npgsql log that the authentication was attempted using NTLM. However our domain controller no longer supports NTLM, but only LDAP(s) and kerberos (it's a Windows 2008 server). From the docs I understand that with SSPI, pg should try kerberos first and fall back to NTLM. This works when connecting from psql. Maybe Npgsql goes straight for NTLM, at least when using it the way I do?

Both are using the Negotiate SSP authentication package

http://msdn.microsoft.com/en-us/library/aa378748%28v=VS.85%29.aspx

Npgsql (SSPIHandler.cs):
int status = AcquireCredentialsHandle(
   "",
   "negotiate",
   SECPKG_CRED_OUTBOUND,
   IntPtr.Zero,
   IntPtr.Zero,
   IntPtr.Zero,
   IntPtr.Zero,
   ref sspicred,
   out expire
);

libpq (fe-auth.c):
/*
 * Send initial SSPI authentication token.
 * If use_negotiate is 0, use kerberos authentication package which is
 * compatible with Unix. If use_negotiate is 1, use the negotiate package
 * which supports both kerberos and NTLM, but is not compatible with Unix.
 */
r = AcquireCredentialsHandle(NULL,
   use_negotiate ? "negotiate" : "kerberos",
   SECPKG_CRED_OUTBOUND,
   NULL,
   NULL,
   NULL,
   NULL,
   conn->sspicred,
&expire);

It should be a one line patch to force Npgsql into using kerberos but I  can't see any reason why negotiate should act differently between Npgsql and libpq.

Regards,

Brar




Re: "could not accept SSPI security context"

From
Brar Piening
Date:
-------- Original Message  --------
Subject: Re: [GENERAL] "could not accept SSPI security context"
From: Reto Schöning <reto.schoening@gmail.com>
To: Brar Piening <brar@gmx.de>
Date: 22.12.2010 17:08

 
"The security database on the server does not have a computer account for this workstation trust relationship"
 
[...]
 
Is there anything else in the code that I could check or try?


Did you make sure that all connection parameters are the same between libpq clients (psql, PgAdmin, ...) and Npgsql?

Also on my computer PgAdmin fails to connect if I try to connect to "localhost" instead of "127.0.0.1" via SSPI while connecting (some test app) via Npgsql will work (by internally using the ip addresses in Socket.RemoteEndPoint.Address instead of the host name).
This could lead to the fact that a Npgsql program uses a different Kerberos service principal than you might think as it uses the first working ip address from Dns.GetHostAddresses as hostname part.
What bothers me about this is that if http://www.postgresql.org/docs/current/static/auth-methods.html#KERBEROS-AUTH is correct by stating that "The name of the service principal is servicename/hostname@realm. " and "hostname is the fully qualified host name of the server machine." connecting via host name should work in principle while it doesn't on my machine (actually using NTLM).

One other thing that comes to mind is the fact that Npgsql is currently hardcoded to use "POSTGRES" as Kerberos service name while in libpq this can be changed as a compile time option, a server configuration parameter and a connection parameter setting.
Still this is an unlikely cause if you didn't fiddle around with this in psql as the PostgreSQL docs state: " In most environments, this parameter never needs to be changed. However, it is necessary when supporting multiple PostgreSQL installations on the same host. Some Kerberos implementations might also require a different service name, such as Microsoft Active Directory which requires the service name to be in upper case (POSTGRES). "

Sorry for those pretty random amateurish guesses but I've got zero Kerberos experience and not even a kerberos setup to test with.

Best Regards,

Brar

Re: "could not accept SSPI security context"

From
Reto Schöning
Date:
thanks a lot for the hints. 

All connections I tried used the IP address of the pg server. Also the service name should be the default one.

I tried setting the sspitarget in SSPIHandler.cs to all sorts of variations, including fully qualified names. The error remains exactly the same, even when I set sspitarget to nonsensical values. 
I'll discuss this with our IT in january. Maybe there IS some inconsistency in those AD accounts, only that the authentication from libpq can cope with that. From afar it seems that the calls to AcquireCredentialsHandle() and InitializeSecurityContext() in npgsql and libpq do the same thing though. 

Regards, Reto

2010/12/22 Brar Piening <brar@gmx.de>
-------- Original Message  --------
Subject: Re: [GENERAL] "could not accept SSPI security context"
From: Reto Schöning <reto.schoening@gmail.com>
To: Brar Piening <brar@gmx.de>
Date: 22.12.2010 17:08

 
"The security database on the server does not have a computer account for this workstation trust relationship"
 
[...]
 
Is there anything else in the code that I could check or try?


Did you make sure that all connection parameters are the same between libpq clients (psql, PgAdmin, ...) and Npgsql?

Also on my computer PgAdmin fails to connect if I try to connect to "localhost" instead of "127.0.0.1" via SSPI while connecting (some test app) via Npgsql will work (by internally using the ip addresses in Socket.RemoteEndPoint.Address instead of the host name).
This could lead to the fact that a Npgsql program uses a different Kerberos service principal than you might think as it uses the first working ip address from Dns.GetHostAddresses as hostname part.
What bothers me about this is that if http://www.postgresql.org/docs/current/static/auth-methods.html#KERBEROS-AUTH is correct by stating that "The name of the service principal is servicename/hostname@realm. " and "hostname is the fully qualified host name of the server machine." connecting via host name should work in principle while it doesn't on my machine (actually using NTLM).

One other thing that comes to mind is the fact that Npgsql is currently hardcoded to use "POSTGRES" as Kerberos service name while in libpq this can be changed as a compile time option, a server configuration parameter and a connection parameter setting.
Still this is an unlikely cause if you didn't fiddle around with this in psql as the PostgreSQL docs state: " In most environments, this parameter never needs to be changed. However, it is necessary when supporting multiple PostgreSQL installations on the same host. Some Kerberos implementations might also require a different service name, such as Microsoft Active Directory which requires the service name to be in upper case (POSTGRES). "

Sorry for those pretty random amateurish guesses but I've got zero Kerberos experience and not even a kerberos setup to test with.

Best Regards,

Brar

Re: "could not accept SSPI security context"

From
Ahmed
Date:
The issue has been addressed and patch has been submitted. Refer to Npgsql
mailing thread
http://lists.pgfoundry.org/pipermail/npgsql-devel/2011-February/001116.html
http://lists.pgfoundry.org/pipermail/npgsql-devel/2011-February/001116.html
.

--
View this message in context:
http://postgresql.1045698.n5.nabble.com/could-not-accept-SSPI-security-context-tp3275102p3367884.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.

Re: "could not accept SSPI security context"

From
"Francisco Figueiredo Jr."
Date:
Thank you very much for your patch!

I'm going to review and apply it.

As soon as it is done, I'll let you know.


On Wed, Feb 2, 2011 at 12:52, Ahmed <ahmed.shinwari@gmail.com> wrote:
>
> The issue has been addressed and patch has been submitted. Refer to Npgsql
> mailing thread
> http://lists.pgfoundry.org/pipermail/npgsql-devel/2011-February/001116.html
> http://lists.pgfoundry.org/pipermail/npgsql-devel/2011-February/001116.html
> .
>
> --
> View this message in context:
http://postgresql.1045698.n5.nabble.com/could-not-accept-SSPI-security-context-tp3275102p3367884.html
> Sent from the PostgreSQL - general mailing list archive at Nabble.com.
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>



--
Regards,

Francisco Figueiredo Jr.
Npgsql Lead Developer
http://www.npgsql.org
http://fxjr.blogspot.com
http://twitter.com/franciscojunior

Re: "could not accept SSPI security context"

From
"Francisco Figueiredo Jr."
Date:
Hi, Ahmed!

Thanks for checking this problem.

It is really a bug in Npgsql to convert the bytes value with ASCII encoder.

If we change that line to use the UTF-8 encoder, wouldn't it suffice
to fix this problem?

Also, wouldn't change the AuthenticationSSPI case to use context.Host
instead of Brar's code wouldn't break cases like the one he said in
his last email?

Thanks for feedback.


On Wed, Feb 2, 2011 at 14:11, Francisco Figueiredo Jr.
<francisco@npgsql.org> wrote:
> Thank you very much for your patch!
>
> I'm going to review and apply it.
>
> As soon as it is done, I'll let you know.
>
>
> On Wed, Feb 2, 2011 at 12:52, Ahmed <ahmed.shinwari@gmail.com> wrote:
>>
>> The issue has been addressed and patch has been submitted. Refer to Npgsql
>> mailing thread
>> http://lists.pgfoundry.org/pipermail/npgsql-devel/2011-February/001116.html
>> http://lists.pgfoundry.org/pipermail/npgsql-devel/2011-February/001116.html
>> .
>>
>> --
>> View this message in context:
http://postgresql.1045698.n5.nabble.com/could-not-accept-SSPI-security-context-tp3275102p3367884.html
>> Sent from the PostgreSQL - general mailing list archive at Nabble.com.
>>
>> --
>> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
>> To make changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-general
>>
>
>
>
> --
> Regards,
>
> Francisco Figueiredo Jr.
> Npgsql Lead Developer
> http://www.npgsql.org
> http://fxjr.blogspot.com
> http://twitter.com/franciscojunior
>



--
Regards,

Francisco Figueiredo Jr.
Npgsql Lead Developer
http://www.npgsql.org
http://fxjr.blogspot.com
http://twitter.com/franciscojunior

Re: "could not accept SSPI security context"

From
Ahmed
Date:
Hi Francisco,

I tried changing that one line to use UTF-8 encoder, but the password packet
didn't get fixed. It works smoothly if kept in byte array instead of string.

I think changing the AuthenticationSSPI case to use context.Host may break
the cases Brar's mentioned.


--
View this message in context:
http://postgresql.1045698.n5.nabble.com/could-not-accept-SSPI-security-context-tp3275102p3389684.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.

Re: "could not accept SSPI security context"

From
Brar Piening
Date:
On Thu, 17 Feb 2011 07:58:46 -0800 (PST), Ahmed
<ahmed.shinwari@gmail.com> wrote:
> I tried changing that one line to use UTF-8 encoder, but the password packet
> didn't get fixed. It works smoothly if kept in byte array instead of string.
Yes, as SSPI uses binary bytes we have to avoid to convert them to
characters and back to bytes during message generation.

While "char *buffer" in C can serve as both a string and a buffer of
binary bytes, we have "byte[]" as binary buffer and "string" as string
in c#.
This is the reason why we need to use byte[] in all places where libpq
uses char* without really caring whether there is a string inside or
some opaque bytes.

> I think changing the AuthenticationSSPI case to use context.Host may break
> the cases Brar's mentioned.
If this isn't necessary to fix the problem we should probably get some
more instight to what really happens here before fixing one end and
breaking the other.

Regards,

Brar

Re: "could not accept SSPI security context"

From
Ahmed Shinwari
Date:


On Sat, Feb 19, 2011 at 11:31 PM, Brar Piening <brar@gmx.de> wrote:
On Thu, 17 Feb 2011 07:58:46 -0800 (PST), Ahmed <ahmed.shinwari@gmail.com> wrote:
I tried changing that one line to use UTF-8 encoder, but the password packet
didn't get fixed. It works smoothly if kept in byte array instead of string.
Yes, as SSPI uses binary bytes we have to avoid to convert them to characters and back to bytes during message generation.

While "char *buffer" in C can serve as both a string and a buffer of binary bytes, we have "byte[]" as binary buffer and "string" as string in c#.
This is the reason why we need to use byte[] in all places where libpq uses char* without really caring whether there is a string inside or some opaque bytes.


I think changing the AuthenticationSSPI case to use context.Host may break
the cases Brar's mentioned.
If this isn't necessary to fix the problem we should probably get some more instight to what really happens here before fixing one end and breaking the other.
I agree.


For now, Francisco may check in that part which fixes the bug due to encoding. And, address the later issue after further investigation.

 

Regards,

Brar

Re: "could not accept SSPI security context"

From
Ahmed Shinwari
Date:
Hi Fransisco,

I tested the latest Npgsql driver (2.0.12.0), the issue has been fixed. I was able to connect Npgsql test application from my Windows XP client machine with the PostgreSQL server running on Windows 2003 Server.

Thank you for applying the patch.


On Thu, Feb 24, 2011 at 3:37 PM, Ahmed Shinwari <ahmed.shinwari@gmail.com> wrote:


On Sat, Feb 19, 2011 at 11:31 PM, Brar Piening <brar@gmx.de> wrote:
On Thu, 17 Feb 2011 07:58:46 -0800 (PST), Ahmed <ahmed.shinwari@gmail.com> wrote:
I tried changing that one line to use UTF-8 encoder, but the password packet
didn't get fixed. It works smoothly if kept in byte array instead of string.
Yes, as SSPI uses binary bytes we have to avoid to convert them to characters and back to bytes during message generation.

While "char *buffer" in C can serve as both a string and a buffer of binary bytes, we have "byte[]" as binary buffer and "string" as string in c#.
This is the reason why we need to use byte[] in all places where libpq uses char* without really caring whether there is a string inside or some opaque bytes.


I think changing the AuthenticationSSPI case to use context.Host may break
the cases Brar's mentioned.
If this isn't necessary to fix the problem we should probably get some more instight to what really happens here before fixing one end and breaking the other.
I agree.


For now, Francisco may check in that part which fixes the bug due to encoding. And, address the later issue after further investigation.

 

Regards,

Brar


Re: "could not accept SSPI security context"

From
"Francisco Figueiredo Jr."
Date:


That's great!

I'm glad to hear it.

Thank you very much for providing patches for this issue.

--
Sent from my Android phone

Francisco Figueiredo Jr.
Npgsql lead developer
fxjr.blogspot.com
twitter.com/franciscojunior

Em 10/03/2011 09:01, "Ahmed Shinwari" <ahmed.shinwari@gmail.com> escreveu:
> Hi Fransisco,
>
> I tested the latest Npgsql driver (2.0.12.0), the issue has been fixed. I
> was able to connect Npgsql test application from my Windows XP client
> machine with the PostgreSQL server running on Windows 2003 Server.
>
> Thank you for applying the patch.
>
>
> On Thu, Feb 24, 2011 at 3:37 PM, Ahmed Shinwari <ahmed.shinwari@gmail.com>wrote:
>
>>
>>
>> On Sat, Feb 19, 2011 at 11:31 PM, Brar Piening <brar@gmx.de> wrote:
>>
>>> On Thu, 17 Feb 2011 07:58:46 -0800 (PST), Ahmed <ahmed.shinwari@gmail.com>
>>> wrote:
>>>
>>>> I tried changing that one line to use UTF-8 encoder, but the password
>>>> packet
>>>> didn't get fixed. It works smoothly if kept in byte array instead of
>>>> string.
>>>>
>>> Yes, as SSPI uses binary bytes we have to avoid to convert them to
>>> characters and back to bytes during message generation.
>>>
>>> While "char *buffer" in C can serve as both a string and a buffer of
>>> binary bytes, we have "byte[]" as binary buffer and "string" as string in
>>> c#.
>>> This is the reason why we need to use byte[] in all places where libpq
>>> uses char* without really caring whether there is a string inside or some
>>> opaque bytes.
>>>
>>>
>>> I think changing the AuthenticationSSPI case to use context.Host may
>>>> break
>>>> the cases Brar's mentioned.
>>>>
>>> If this isn't necessary to fix the problem we should probably get some
>>> more instight to what really happens here before fixing one end and breaking
>>> the other.
>>>
>> I agree.
>>
>>
>> For now, Francisco may check in that part which fixes the bug due to
>> encoding. And, address the later issue after further investigation.
>>
>>
>>
>>>
>>> Regards,
>>>
>>> Brar
>>>
>>
>>

Re: "could not accept SSPI security context"

From
G_Hosa_Phat
Date:
Ahmed wrote
>
> I tested the latest Npgsql driver (2.0.12.0), the issue has been fixed. I
> was able to connect Npgsql test application from my Windows XP client
> machine with the PostgreSQL server running on Windows 2003 Server.
>
> Thank you for applying the patch.
>
I've been trying to develop a new application in VB.NET (VS2008) against a
PostgreSQL 9.1.1 database server running on Windows Server 2008 using SSPI
authentication, and I'm running into this same error.  I've tried both
specifying the username and not specifying it in my
NpgsqlConnectionStringBuilder object, as well as trying to set or not set
the IntegratedSecurity property of the object (not setting it results in a
different error).  I was even looking for a property I could set to define
the user credentials (that's actually a whole different topic of discussion,
so we'll leave that alone for now).

I checked my version of Npgsql, and it's showing to be 2.0.11.0.  I tried
looking at the pgFoundry Web site and am unable to find a version 2.0.12.0
available.  Is this something that is still waiting for release, or am I
missing something?  If you require any additional details about this issue,
please let me know.

--
View this message in context:
http://postgresql.1045698.n5.nabble.com/could-not-accept-SSPI-security-context-tp3275102p5161800.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.

Re: "could not accept SSPI security context"

From
Brar Piening
Date:
G_Hosa_Phat wrote:
> I've been trying to develop a new application in VB.NET (VS2008) against a
> PostgreSQL 9.1.1 database server running on Windows Server 2008 using SSPI
> authentication, and I'm running into this same error.  I've tried both
> specifying the username and not specifying it in my
> NpgsqlConnectionStringBuilder object, as well as trying to set or not set
> the IntegratedSecurity property of the object (not setting it results in a
> different error).  I was even looking for a property I could set to define
> the user credentials (that's actually a whole different topic of discussion,
> so we'll leave that alone for now).
>
> I checked my version of Npgsql, and it's showing to be 2.0.11.0.  I tried
> looking at the pgFoundry Web site and am unable to find a version 2.0.12.0
> available.  Is this something that is still waiting for release, or am I
> missing something?  If you require any additional details about this issue,
> please let me know.

Just a guess: You don't have something like "host all all 127.0.0.1/32
sspi" in your pg_hba.conf do you?

Regards,

Brar


Re: "could not accept SSPI security context"

From
G_Hosa_Phat
Date:
Brar Piening wrote
>
> Just a guess: You don't have something like "host all all 127.0.0.1/32
> sspi" in your pg_hba.conf do you?
>
> Regards,
>
> Brar
>
I don't have that set.  Here's a sample from my pg_hba (slightly redacted to
obfuscate our internal network address scheme).

# TYPE    DATABASE    USER        CIDR-ADDRESS    METHOD
# ---------------------------------------------------------------------
#                        IPv4 LOCAL CONNECTIONS
# ---------------------------------------------------------------------
# Connections made from the server computer itself are only allowed if
# the user is a member of the Developers group, or a Super User.
# ---------------------------------------------------------------------
host    all        pgsuper        127.0.0.1/32    md5
host    all        +"ITDept"    127.0.0.1/32    sspi
host    all        all        127.0.0.1/32    reject
# ---------------------------------------------------------------------
#                       IPv4 INTRANET CONNECTIONS
# ---------------------------------------------------------------------
# If the IP address from which the request comes indicates that the
# user is on the Courtesy network and is physically located in one of
# our offices (Oklahoma City or Tulsa), use sspi authentication to
# validate the users credentials against Courtesy’s Active Directory.
# ---------------------------------------------------------------------
# Internal Network
# ---------------------------------------------------------------------
host    all                 pgsuper        172.16.10.0/24    md5
host    all                 +"Laptop"    172.16.10.50/32    ldap
ldapserver=ADSERVERNAME ldapprefix="MYDOMAIN\"
host    all                 +"ITDept"    172.16.10.0/24    sspi
host    appdb        +"Users"        172.16.10.0/24    sspi
# ---------------------------------------------------------------------
# Deny connection attempts from any source not explicitly identified
# in the rules above.
# ---------------------------------------------------------------------
host    all                 all        0.0.0.0/0        reject


# IPv6 local connections:
host    all        pgsuper        ::1/128        md5
host    all        +"ITDept"    ::1/128        sspi
host    all        all        ::1/128        reject

There are some specific requirements addressed in the configuration file,
and I'd love to ask some more questions about how to implement some of them,
but those aren't in the scope of this thread.  On this topic, however, this
configuratoin correctly uses the SSPI authentication when I try to connect
to the database through PGAdmin (I'm a member of the "ITDept" group), but
not when I'm testing my VB.NET application, it fails on the authentication
with the error from the thread title.

--
View this message in context:
http://postgresql.1045698.n5.nabble.com/could-not-accept-SSPI-security-context-tp3275102p5162113.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.

Re: "could not accept SSPI security context"

From
Ahmed Shinwari
Date:
Hi,

In my email, I mistakenly assumed that the next version would be 2.0.12.0, which was not. My bad.

I checked the source and confirmed that the 2.0.11.0 has the bug, and the immediate next version (2.0.11.91) has the fix. You can use the version 2.0.11.92, which is the latest stable release.


-Ahmed


On Sat, Jan 21, 2012 at 7:31 AM, G_Hosa_Phat [via PostgreSQL] <[hidden email]> wrote:
Brar Piening wrote
Just a guess: You don't have something like "host all all 127.0.0.1/32
sspi" in your pg_hba.conf do you?

Regards,

Brar
I don't have that set.  Here's a sample from my pg_hba (slightly redacted to obfuscate our internal network address scheme).

# TYPE DATABASE USER CIDR-ADDRESS METHOD
# ---------------------------------------------------------------------
#                        IPv4 LOCAL CONNECTIONS                        
# ---------------------------------------------------------------------
# Connections made from the server computer itself are only allowed if
# the user is a member of the Developers group, or a Super User.
# ---------------------------------------------------------------------
host all pgsuper 127.0.0.1/32 md5
host all +"ITDept" 127.0.0.1/32 sspi
host all all 127.0.0.1/32 reject
# ---------------------------------------------------------------------
#                       IPv4 INTRANET CONNECTIONS                      
# ---------------------------------------------------------------------
# If the IP address from which the request comes indicates that the
# user is on the Courtesy network and is physically located in one of
# our offices (Oklahoma City or Tulsa), use sspi authentication to
# validate the users credentials against Courtesy’s Active Directory.
# ---------------------------------------------------------------------
# Internal Network
# ---------------------------------------------------------------------
host    all             pgsuper 172.16.10.0/24 md5
host    all             +"Laptop" 172.16.10.50/32 ldap ldapserver=ADSERVERNAME ldapprefix="MYDOMAIN\"
host    all             +"ITDept" 172.16.10.0/24 sspi
host    appdb +"Users" 172.16.10.0/24 sspi
# ---------------------------------------------------------------------
# Deny connection attempts from any source not explicitly identified
# in the rules above.
# ---------------------------------------------------------------------
host all             all 0.0.0.0/0 reject


# IPv6 local connections:
host all pgsuper ::1/128 md5
host all +"ITDept" ::1/128 sspi
host all all ::1/128 reject

There are some specific requirements addressed in the configuration file, and I'd love to ask some more questions about how to implement some of them, but those aren't in the scope of this thread.  On this topic, however, this configuratoin correctly uses the SSPI authentication when I try to connect to the database through PGAdmin (I'm a member of the "ITDept" group), but not when I'm testing my VB.NET application, it fails on the authentication with the error from the thread title.


If you reply to this email, your message will be added to the discussion below:
http://postgresql.1045698.n5.nabble.com/could-not-accept-SSPI-security-context-tp3275102p5162113.html
To unsubscribe from "could not accept SSPI security context", click here.
NAML



View this message in context: Re: "could not accept SSPI security context"
Sent from the PostgreSQL - general mailing list archive at Nabble.com.

Re: "could not accept SSPI security context"

From
Ahmed
Date:
Hi,

In my email, I mistakenly assumed that the next version would be 2.0.12.0, which was not. My bad.

I checked the source and confirmed that the 2.0.11.0 has the bug, and the immediate next version (2.0.11.91) has the fix. You can use the version 2.0.11.92, which is the latest stable release.


-Ahmed


On Sat, Jan 21, 2012 at 7:31 AM, G_Hosa_Phat [via PostgreSQL] <[hidden email]> wrote:
Brar Piening wrote
Just a guess: You don't have something like "host all all 127.0.0.1/32
sspi" in your pg_hba.conf do you?

Regards,

Brar
I don't have that set.  Here's a sample from my pg_hba (slightly redacted to obfuscate our internal network address scheme).

# TYPE DATABASE USER CIDR-ADDRESS METHOD
# ---------------------------------------------------------------------
#                        IPv4 LOCAL CONNECTIONS                        
# ---------------------------------------------------------------------
# Connections made from the server computer itself are only allowed if
# the user is a member of the Developers group, or a Super User.
# ---------------------------------------------------------------------
host all pgsuper 127.0.0.1/32 md5
host all +"ITDept" 127.0.0.1/32 sspi
host all all 127.0.0.1/32 reject
# ---------------------------------------------------------------------
#                       IPv4 INTRANET CONNECTIONS                      
# ---------------------------------------------------------------------
# If the IP address from which the request comes indicates that the
# user is on the Courtesy network and is physically located in one of
# our offices (Oklahoma City or Tulsa), use sspi authentication to
# validate the users credentials against Courtesy’s Active Directory.
# ---------------------------------------------------------------------
# Internal Network
# ---------------------------------------------------------------------
host    all             pgsuper 172.16.10.0/24 md5
host    all             +"Laptop" 172.16.10.50/32 ldap ldapserver=ADSERVERNAME ldapprefix="MYDOMAIN\"
host    all             +"ITDept" 172.16.10.0/24 sspi
host    appdb +"Users" 172.16.10.0/24 sspi
# ---------------------------------------------------------------------
# Deny connection attempts from any source not explicitly identified
# in the rules above.
# ---------------------------------------------------------------------
host all             all 0.0.0.0/0 reject


# IPv6 local connections:
host all pgsuper ::1/128 md5
host all +"ITDept" ::1/128 sspi
host all all ::1/128 reject

There are some specific requirements addressed in the configuration file, and I'd love to ask some more questions about how to implement some of them, but those aren't in the scope of this thread.  On this topic, however, this configuratoin correctly uses the SSPI authentication when I try to connect to the database through PGAdmin (I'm a member of the "ITDept" group), but not when I'm testing my VB.NET application, it fails on the authentication with the error from the thread title.


If you reply to this email, your message will be added to the discussion below:
http://postgresql.1045698.n5.nabble.com/could-not-accept-SSPI-security-context-tp3275102p5162113.html
To unsubscribe from "could not accept SSPI security context", click here.
NAML



View this message in context: Re: "could not accept SSPI security context"
Sent from the PostgreSQL - general mailing list archive at Nabble.com.

Re: "could not accept SSPI security context"

From
G_Hosa_Phat
Date:
Ahmed wrote
>
> Hi,
>
> In my email, I mistakenly assumed that the next version would be 2.0.12.0,
> which was not. My bad.
>
> I checked the source and confirmed that the 2.0.11.0 has the bug, and the
> immediate next version (2.0.11.91) has the fix. You can use the version
> 2.0.11.92
> <http://pgfoundry.org/frs/?group_id=1000140&release_id=1889>,
> which is the latest stable release.
>
>
> -Ahmed
>
*@Ahmed -* Thank you so much.  I just ran a quick test and everything looks
like it's going to work great.  I was really going to have to start pulling
my hair out over that one if it didn't work.

--
View this message in context:
http://postgresql.1045698.n5.nabble.com/could-not-accept-SSPI-security-context-tp3275102p5166312.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.