int php_mongo_io_authenticate_gssapi(mongo_con_manager *manager, mongo_connection *con, mongo_server_options *options, mongo_server_def *server_def, char **error_message) { int result; char *initpayload; int initpayload_len; sasl_conn_t *conn; int32_t conversation_id; result = sasl_client_new(options->gssapiServiceName, server_def->host, NULL, NULL, NULL, 0, &conn); if (result != SASL_OK) { sasl_dispose(&conn); sasl_client_done(); *error_message = strdup("Could not initialize a client exchange (SASL) to MongoDB"); return 0; } conn = php_mongo_saslstart(manager, con, options, server_def, conn, &initpayload, &initpayload_len, &conversation_id, error_message); if (!conn) { sasl_dispose(&conn); sasl_client_done(); /* error message populate by php_mongo_saslstart() */ return 0; } php_mongo_saslcontinue(manager, con, options, server_def, conn, initpayload, initpayload_len, conversation_id, error_message); free(initpayload); sasl_dispose(&conn); sasl_client_done(); return 1; }
int php_mongo_io_authenticate_gssapi(mongo_con_manager *manager, mongo_connection *con, mongo_server_options *options, mongo_server_def *server_def, char **error_message) { int result; char *initpayload; int initpayload_len; sasl_conn_t *conn; int32_t conversation_id; sasl_callback_t client_interact [] = { { SASL_CB_AUTHNAME, sasl_interact, server_def }, { SASL_CB_USER, sasl_interact, server_def }, { SASL_CB_PASS, sasl_interact, server_def }, { SASL_CB_LIST_END, NULL, NULL } }; result = sasl_client_new(options->gssapiServiceName, server_def->host, NULL, NULL, client_interact, 0, &conn); if (result != SASL_OK) { sasl_dispose(&conn); *error_message = strdup("Could not initialize a client exchange (SASL) to MongoDB"); return 0; } conn = php_mongo_saslstart(manager, con, options, server_def, conn, &initpayload, &initpayload_len, &conversation_id, error_message); if (!conn) { /* error message populate by php_mongo_saslstart() */ return 0; } if (!php_mongo_saslcontinue(manager, con, options, server_def, conn, initpayload, initpayload_len, conversation_id, error_message)) { return 0; } free(initpayload); sasl_dispose(&conn); return 1; }