23
23
#include "mongoc-error.h"
24
24
#include "mongoc-sasl-private.h"
25
25
#include "mongoc-util-private.h"
26
+ #include "mongoc-trace-private.h"
26
27
27
28
28
29
#ifndef SASL_CALLBACK_FN
@@ -70,6 +71,23 @@ _mongoc_sasl_set_pass (mongoc_sasl_t *sasl, const char *pass)
70
71
}
71
72
72
73
74
+ static int
75
+ _mongoc_sasl_canon_user (sasl_conn_t * conn ,
76
+ void * context ,
77
+ const char * in ,
78
+ unsigned inlen ,
79
+ unsigned flags ,
80
+ const char * user_realm ,
81
+ char * out ,
82
+ unsigned out_max ,
83
+ unsigned * out_len )
84
+ {
85
+ TRACE ("Canonicalizing %s (%" PRIu32 ")\n" , in , inlen );
86
+ strcpy (out , in );
87
+ * out_len = inlen ;
88
+ return SASL_OK ;
89
+ }
90
+
73
91
static int
74
92
_mongoc_sasl_get_user (mongoc_sasl_t * sasl ,
75
93
int param_id ,
@@ -185,6 +203,7 @@ _mongoc_sasl_init (mongoc_sasl_t *sasl)
185
203
{SASL_CB_AUTHNAME , SASL_CALLBACK_FN (_mongoc_sasl_get_user ), sasl },
186
204
{SASL_CB_USER , SASL_CALLBACK_FN (_mongoc_sasl_get_user ), sasl },
187
205
{SASL_CB_PASS , SASL_CALLBACK_FN (_mongoc_sasl_get_pass ), sasl },
206
+ {SASL_CB_CANON_USER , SASL_CALLBACK_FN (_mongoc_sasl_canon_user ), sasl },
188
207
{SASL_CB_LIST_END }};
189
208
190
209
BSON_ASSERT (sasl );
@@ -352,6 +371,7 @@ _mongoc_sasl_step (mongoc_sasl_t *sasl,
352
371
BSON_ASSERT (outbuf );
353
372
BSON_ASSERT (outbuflen );
354
373
374
+ TRACE ("Running %d, inbuflen: %" PRIu32 , sasl -> step , inbuflen );
355
375
sasl -> step ++ ;
356
376
357
377
if (sasl -> step == 1 ) {
@@ -364,11 +384,13 @@ _mongoc_sasl_step (mongoc_sasl_t *sasl,
364
384
return false;
365
385
}
366
386
387
+ TRACE ("Running %d, inbuflen: %" PRIu32 , sasl -> step , inbuflen );
367
388
if (!inbuflen ) {
368
389
bson_set_error (error ,
369
390
MONGOC_ERROR_SASL ,
370
391
MONGOC_ERROR_CLIENT_AUTHENTICATE ,
371
- "SASL Failure: no payload provided from server." );
392
+ "SASL Failure: no payload provided from server: %s" ,
393
+ sasl_errdetail (sasl -> conn ));
372
394
return false;
373
395
}
374
396
0 commit comments