8
8
*
9
9
*
10
10
* IDENTIFICATION
11
- * $PostgreSQL: pgsql/src/backend/libpq/auth.c,v 1.149 2007/07/10 13:14:20 mha Exp $
11
+ * $PostgreSQL: pgsql/src/backend/libpq/auth.c,v 1.150 2007/07/11 08:27:33 mha Exp $
12
12
*
13
13
*-------------------------------------------------------------------------
14
14
*/
@@ -317,18 +317,18 @@ static GSS_DLLIMP gss_OID GSS_C_NT_USER_NAME = &GSS_C_NT_USER_NAME_desc;
317
317
318
318
319
319
static void
320
- pg_GSS_error (int severity , char * text , OM_uint32 maj_stat , OM_uint32 min_stat )
320
+ pg_GSS_error (int severity , char * errmsg , OM_uint32 maj_stat , OM_uint32 min_stat )
321
321
{
322
322
gss_buffer_desc gmsg ;
323
323
OM_uint32 lmaj_s , lmin_s , msg_ctx ;
324
- char localmsg1 [128 ],
325
- localmsg2 [128 ];
324
+ char msg_major [128 ],
325
+ msg_minor [128 ];
326
326
327
327
/* Fetch major status message */
328
328
msg_ctx = 0 ;
329
329
lmaj_s = gss_display_status (& lmin_s , maj_stat , GSS_C_GSS_CODE ,
330
330
GSS_C_NO_OID , & msg_ctx , & gmsg );
331
- strlcpy (localmsg1 , gmsg .value , sizeof (localmsg1 ));
331
+ strlcpy (msg_major , gmsg .value , sizeof (msg_major ));
332
332
gss_release_buffer (& lmin_s , & gmsg );
333
333
334
334
if (msg_ctx )
@@ -343,7 +343,7 @@ pg_GSS_error(int severity, char *text, OM_uint32 maj_stat, OM_uint32 min_stat)
343
343
msg_ctx = 0 ;
344
344
lmaj_s = gss_display_status (& lmin_s , min_stat , GSS_C_MECH_CODE ,
345
345
GSS_C_NO_OID , & msg_ctx , & gmsg );
346
- strlcpy (localmsg2 , gmsg .value , sizeof (localmsg2 ));
346
+ strlcpy (msg_minor , gmsg .value , sizeof (msg_minor ));
347
347
gss_release_buffer (& lmin_s , & gmsg );
348
348
349
349
if (msg_ctx )
@@ -353,7 +353,8 @@ pg_GSS_error(int severity, char *text, OM_uint32 maj_stat, OM_uint32 min_stat)
353
353
/* errmsg_internal, since translation of the first part must be
354
354
* done before calling this function anyway. */
355
355
ereport (severity ,
356
- (errmsg_internal ("%s:%s\n%s" , text , localmsg1 , localmsg2 )));
356
+ (errmsg_internal ("%s" , errmsg ),
357
+ errdetail ("%s: %s" , msg_major , msg_minor )));
357
358
}
358
359
359
360
static int
@@ -430,9 +431,8 @@ pg_GSS_recvauth(Port *port)
430
431
gbuf .length = buf .len ;
431
432
gbuf .value = buf .data ;
432
433
433
- ereport (DEBUG4 ,
434
- (errmsg_internal ("Processing received GSS token of length: %u" ,
435
- gbuf .length )));
434
+ elog (DEBUG4 , "Processing received GSS token of length %u" ,
435
+ gbuf .length );
436
436
437
437
maj_stat = gss_accept_sec_context (
438
438
& min_stat ,
@@ -450,20 +450,19 @@ pg_GSS_recvauth(Port *port)
450
450
/* gbuf no longer used */
451
451
pfree (buf .data );
452
452
453
- ereport (DEBUG5 ,
454
- (errmsg_internal ("gss_accept_sec_context major: %i, "
455
- "minor: %i, outlen: %u, outflags: %x" ,
456
- maj_stat , min_stat ,
457
- port -> gss -> outbuf .length , gflags )));
453
+ elog (DEBUG5 , "gss_accept_sec_context major: %i, "
454
+ "minor: %i, outlen: %u, outflags: %x" ,
455
+ maj_stat , min_stat ,
456
+ port -> gss -> outbuf .length , gflags );
458
457
459
458
if (port -> gss -> outbuf .length != 0 )
460
459
{
461
460
/*
462
461
* Negotiation generated data to be sent to the client.
463
462
*/
464
- ereport (DEBUG4 ,
465
- ( errmsg_internal ( "sending GSS response token of length %u" ,
466
- port -> gss -> outbuf . length )));
463
+ elog (DEBUG4 , "sending GSS response token of length %u" ,
464
+ port -> gss -> outbuf . length );
465
+
467
466
sendAuthRequest (port , AUTH_REQ_GSS_CONT );
468
467
}
469
468
@@ -477,8 +476,7 @@ pg_GSS_recvauth(Port *port)
477
476
}
478
477
479
478
if (maj_stat == GSS_S_CONTINUE_NEEDED )
480
- ereport (DEBUG4 ,
481
- (errmsg_internal ("GSS continue needed" )));
479
+ elog (DEBUG4 , "GSS continue needed" );
482
480
483
481
} while (maj_stat == GSS_S_CONTINUE_NEEDED );
484
482
@@ -497,8 +495,10 @@ pg_GSS_recvauth(Port *port)
497
495
* pg username that was specified for the connection.
498
496
*/
499
497
maj_stat = gss_display_name (& min_stat , port -> gss -> name , & gbuf , NULL );
500
- ereport (DEBUG1 ,
501
- (errmsg ("GSSAPI authenticated name: %s" , (char * )gbuf .value )));
498
+ if (maj_stat != GSS_S_COMPLETE )
499
+ pg_GSS_error (ERROR ,
500
+ gettext_noop ("retreiving GSS user name failed" ),
501
+ maj_stat , min_stat );
502
502
503
503
/*
504
504
* Compare the part of the username that comes before the @
@@ -517,12 +517,15 @@ pg_GSS_recvauth(Port *port)
517
517
ret = strcmp (port -> user_name , gbuf .value );
518
518
519
519
if (ret )
520
+ {
520
521
/* GSS name and PGUSER are not equivalent */
521
- ereport (ERROR ,
522
- (errcode (ERRCODE_INVALID_AUTHORIZATION_SPECIFICATION ),
523
- errmsg ("provided username and GSSAPI username don't match" ),
524
- errdetail ("provided: %s, GSSAPI: %s" ,
525
- port -> user_name , (char * )gbuf .value )));
522
+ elog (DEBUG2 ,
523
+ "provided username (%s) and GSSAPI username (%s) don't match" ,
524
+ port -> user_name , (char * )gbuf .value );
525
+
526
+ gss_release_buffer (& lmin_s , & gbuf );
527
+ return STATUS_ERROR ;
528
+ }
526
529
527
530
gss_release_buffer (& lmin_s , & gbuf );
528
531
@@ -780,9 +783,9 @@ sendAuthRequest(Port *port, AuthRequest areq)
780
783
{
781
784
OM_uint32 lmin_s ;
782
785
783
- ereport (DEBUG4 ,
784
- ( errmsg_internal ( "sending GSS token of length %u" ,
785
- port -> gss -> outbuf . length )));
786
+ elog (DEBUG4 , "sending GSS token of length %u" ,
787
+ port -> gss -> outbuf . length );
788
+
786
789
pq_sendbytes (& buf , port -> gss -> outbuf .value , port -> gss -> outbuf .length );
787
790
gss_release_buffer (& lmin_s , & port -> gss -> outbuf );
788
791
}
0 commit comments