static LmHandlerResult sasl_features_cb (LmMessageHandler *handler, LmConnection *connection, LmMessage *message, gpointer user_data) { LmMessageNode *mechanisms; LmSASL *sasl; g_log (LM_LOG_DOMAIN, LM_LOG_LEVEL_SASL, "Stream features received\n"); mechanisms = lm_message_node_find_child (message->node, "mechanisms"); if (!mechanisms) { return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; } sasl = (LmSASL *) user_data; sasl->features_received = TRUE; sasl_set_auth_type (sasl, mechanisms); if (sasl->start_auth) { sasl_authenticate (sasl); } return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; }
void perl_mongo_connect(SV *client, mongo_link* link) { #ifdef MONGO_SSL if(link->ssl){ ssl_connect(link, client); link->sender = ssl_send; link->receiver = ssl_recv; return; } #endif non_ssl_connect(link); link->sender = non_ssl_send; link->receiver = non_ssl_recv; SV* sasl_flag = perl_mongo_call_method( client, "sasl", 0, 0 ); if ( SvIV(sasl_flag) == 1 ) { #ifdef MONGO_SASL sasl_authenticate( client, link ); #else croak( "MongoDB: sasl => 1 specified, but this driver was not compiled with SASL support\n" ); #endif } SvREFCNT_dec(sasl_flag); }
void lm_sasl_authenticate (LmSASL *sasl, const gchar *username, const gchar *password, const gchar *server, LmSASLResultHandler handler) { sasl->username = g_strdup (username); sasl->password = g_strdup (password); sasl->server = g_strdup (server); sasl->handler = handler; sasl->challenge_cb = lm_message_handler_new (sasl_challenge_cb, sasl, NULL); lm_connection_register_message_handler (sasl->connection, sasl->challenge_cb, LM_MESSAGE_TYPE_CHALLENGE, LM_HANDLER_PRIORITY_FIRST); sasl->success_cb = lm_message_handler_new (sasl_success_cb, sasl, NULL); lm_connection_register_message_handler (sasl->connection, sasl->success_cb, LM_MESSAGE_TYPE_SUCCESS, LM_HANDLER_PRIORITY_FIRST); sasl->failure_cb = lm_message_handler_new (sasl_failure_cb, sasl, NULL); lm_connection_register_message_handler (sasl->connection, sasl->failure_cb, LM_MESSAGE_TYPE_FAILURE, LM_HANDLER_PRIORITY_FIRST); if (sasl->features_received) { sasl_authenticate (sasl); } else { sasl->start_auth = TRUE; } }