Skip to content

Commit e3e9359

Browse files
committed
CDRIVER-1928 "unknown command error" from auth
Auth errors have $err, not the standard errmsg - check for $err instead of setting the error message to "Unknown command error".
1 parent 06093a0 commit e3e9359

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

src/mongoc/mongoc-rpc.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,9 @@ _mongoc_populate_cmd_error (const bson_t *doc,
785785
if (bson_iter_init_find (&iter, doc, "errmsg") &&
786786
BSON_ITER_HOLDS_UTF8 (&iter)) {
787787
msg = bson_iter_utf8 (&iter, NULL);
788+
} else if (bson_iter_init_find (&iter, doc, "$err") &&
789+
BSON_ITER_HOLDS_UTF8 (&iter)) {
790+
msg = bson_iter_utf8 (&iter, NULL);
788791
}
789792

790793
bson_set_error (error, domain, code, "%s", msg);

tests/test-mongoc-client.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,6 +1080,41 @@ test_command_with_opts_modern (void)
10801080
}
10811081

10821082

1083+
static void
1084+
test_command_no_errmsg (void)
1085+
{
1086+
mock_server_t *server;
1087+
mongoc_client_t *client;
1088+
bson_t *cmd;
1089+
bson_error_t error;
1090+
future_t *future;
1091+
request_t *request;
1092+
1093+
server = mock_server_with_autoismaster (0);
1094+
mock_server_run (server);
1095+
client = mongoc_client_new_from_uri (mock_server_get_uri (server));
1096+
mongoc_client_set_error_api (client, 2);
1097+
1098+
cmd = tmp_bson ("{'command': 1}");
1099+
future = future_client_command_simple (client, "admin", cmd, NULL, NULL,
1100+
&error);
1101+
1102+
request = mock_server_receives_command (server, "admin",
1103+
MONGOC_QUERY_SLAVE_OK, NULL);
1104+
1105+
/* auth errors have $err, not errmsg. we'd raised "Unknown command error",
1106+
* see CDRIVER-1928 */
1107+
mock_server_replies_simple (request, "{'ok': 0, 'code': 7, '$err': 'bad!'}");
1108+
ASSERT (!future_get_bool (future));
1109+
ASSERT_ERROR_CONTAINS (error, MONGOC_ERROR_SERVER, 7, "bad!");
1110+
1111+
future_destroy (future);
1112+
request_destroy (request);
1113+
mongoc_client_destroy (client);
1114+
mock_server_destroy (server);
1115+
}
1116+
1117+
10831118
static void
10841119
test_unavailable_seeds (void)
10851120
{
@@ -2541,6 +2576,7 @@ test_client_install (TestSuite *suite)
25412576
TestSuite_AddLive (suite, "/Client/command_with_opts/read_prefs", test_command_with_opts_read_prefs);
25422577
TestSuite_AddLive (suite, "/Client/command_with_opts/legacy", test_command_with_opts_legacy);
25432578
TestSuite_AddLive (suite, "/Client/command_with_opts/modern", test_command_with_opts_modern);
2579+
TestSuite_AddLive (suite, "/Client/command/no_errmsg", test_command_no_errmsg);
25442580
TestSuite_Add (suite, "/Client/unavailable_seeds", test_unavailable_seeds);
25452581
TestSuite_Add (suite, "/Client/rs_seeds_no_connect/single", test_rs_seeds_no_connect_single);
25462582
TestSuite_Add (suite, "/Client/rs_seeds_no_connect/pooled", test_rs_seeds_no_connect_pooled);

0 commit comments

Comments
 (0)