static void test_mongoc_client_authenticate (void) { mongoc_collection_t *collection; mongoc_database_t *database; mongoc_client_t *client; mongoc_cursor_t *cursor; const bson_t *doc; bson_error_t error; char *username; char *uri; bool r; bson_t q; username = gen_test_user (); uri = gen_good_uri (username); /* * Add a user to the test database. */ client = mongoc_client_new(gTestUri); database = mongoc_client_get_database(client, "test"); mongoc_database_remove_user (database, username, &error); r = mongoc_database_add_user(database, username, "testpass", NULL, NULL, &error); ASSERT_CMPINT(r, ==, 1); mongoc_database_destroy(database); mongoc_client_destroy(client); /* * Try authenticating with that user. */ bson_init(&q); client = mongoc_client_new(uri); collection = mongoc_client_get_collection(client, "test", "test"); cursor = mongoc_collection_find(collection, MONGOC_QUERY_NONE, 0, 1, 0, &q, NULL, NULL); r = mongoc_cursor_next(cursor, &doc); if (!r) { r = mongoc_cursor_error(cursor, &error); if (r) { MONGOC_ERROR("Authentication failure: \"%s\"", error.message); } assert(!r); } mongoc_cursor_destroy(cursor); /* * Remove all test users. */ database = mongoc_client_get_database (client, "test"); r = mongoc_database_remove_all_users (database, &error); assert (r); mongoc_database_destroy (database); mongoc_collection_destroy(collection); mongoc_client_destroy(client); bson_free (username); bson_free (uri); }
static void test_mongoc_client_authenticate (void) { mongoc_collection_t *collection; mongoc_database_t *database; mongoc_client_t *client; mongoc_cursor_t *cursor; const bson_t *doc; bson_error_t error; bool r; bson_t q; /* * Add a user to the test database. */ client = mongoc_client_new(gTestUri); database = mongoc_client_get_database(client, "test"); mongoc_database_remove_user (database, "testuser", &error); r = mongoc_database_add_user(database, "testuser", "testpass", NULL, NULL, &error); ASSERT_CMPINT(r, ==, 1); mongoc_database_destroy(database); mongoc_client_destroy(client); /* * Try authenticating with that user. */ bson_init(&q); client = mongoc_client_new(gTestUriWithPassword); collection = mongoc_client_get_collection(client, "test", "test"); cursor = mongoc_collection_find(collection, MONGOC_QUERY_NONE, 0, 1, 0, &q, NULL, NULL); r = mongoc_cursor_next(cursor, &doc); if (!r) { r = mongoc_cursor_error(cursor, &error); if (r) MONGOC_ERROR("%s", error.message); assert(!r); } mongoc_cursor_destroy(cursor); mongoc_collection_destroy(collection); mongoc_client_destroy(client); }
int main (int argc, char *argv[]) { mongoc_client_t *client = NULL; mongoc_database_t *database = NULL; mongoc_collection_t *collection = NULL; mongoc_cursor_t *cursor = NULL; bson_error_t error; const char *uristr = "mongodb://127.0.0.1/"; const char *authuristr; bson_t roles; bson_t query; const bson_t *doc; if (argc != 2) { printf ("%s - [implicit|scram]\n", argv[0]); return 1; } if (strcmp (argv[1], "implicit") == 0) { authuristr = "mongodb://user,=:[email protected]/test?appname=scram-example"; } else if (strcmp (argv[1], "scram") == 0) { authuristr = "mongodb://user,=:[email protected]/" "test?appname=scram-example&authMechanism=SCRAM-SHA-1"; } else { printf ("%s - [implicit|scram]\n", argv[0]); return 1; } mongoc_init (); client = mongoc_client_new (uristr); if (!client) { fprintf (stderr, "Failed to parse URI.\n"); return EXIT_FAILURE; } mongoc_client_set_error_api (client, 2); database = mongoc_client_get_database (client, "test"); bson_init (&roles); bson_init (&query); BCON_APPEND (&roles, "0", "{", "role", "root", "db", "admin", "}"); mongoc_database_add_user (database, "user,=", "pass", &roles, NULL, &error); mongoc_database_destroy (database); mongoc_client_destroy (client); client = mongoc_client_new (authuristr); if (!client) { fprintf (stderr, "failed to parse SCRAM uri\n"); goto CLEANUP; } mongoc_client_set_error_api (client, 2); collection = mongoc_client_get_collection (client, "test", "test"); cursor = mongoc_collection_find_with_opts (collection, &query, NULL, NULL); mongoc_cursor_next (cursor, &doc); if (mongoc_cursor_error (cursor, &error)) { fprintf (stderr, "Auth error: %s\n", error.message); goto CLEANUP; } CLEANUP: bson_destroy (&roles); bson_destroy (&query); if (collection) { mongoc_collection_destroy (collection); } if (client) { mongoc_client_destroy (client); } if (cursor) { mongoc_cursor_destroy (cursor); } mongoc_cleanup (); return EXIT_SUCCESS; }