MCPcopy Create free account
hub / github.com/documentdb/documentdb / ParseCreateUserSpec

Function ParseCreateUserSpec

pg_documentdb/src/commands/users.c:304–477  ·  view source on GitHub ↗

* ParseCreateUserSpec parses the wire * protocol message createUser() which creates a user */

Source from the content-addressed store, hash-verified

302 * protocol message createUser() which creates a user
303 */
304static void
305ParseCreateUserSpec(pgbson *createSpec, CreateUserSpec *spec)
306{
307 bson_iter_t createIter;
308 PgbsonInitIterator(createSpec, &createIter);
309
310 bool userFound = false;
311 bool passwordFound = false;
312 bool rolesFound = false;
313 bool dbFound = false;
314 while (bson_iter_next(&createIter))
315 {
316 const char *key = bson_iter_key(&createIter);
317 if (strcmp(key, "createUser") == 0)
318 {
319 EnsureTopLevelFieldType(key, &createIter, BSON_TYPE_UTF8);
320 uint32_t strLength = 0;
321 spec->createUser = bson_iter_utf8(&createIter, &strLength);
322 if (strLength == 0)
323 {
324 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
325 errmsg(
326 "'createUser' is a required field.")));
327 }
328
329 if (ContainsReservedPgRoleNamePrefix(spec->createUser) ||
330 IsReservedInternalRoleName(spec->createUser))
331 {
332 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
333 errmsg(
334 "Username is reserved, use a different username.")));
335 }
336
337 if (EnableUsernamePasswordConstraints &&
338 !IsUsernameValid(spec->createUser))
339 {
340 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
341 errmsg("Invalid username, use a different username.")));
342 }
343
344 userFound = true;
345 }
346 else if (strcmp(key, "pwd") == 0)
347 {
348 EnsureTopLevelFieldType(key, &createIter, BSON_TYPE_UTF8);
349 uint32_t strLength = 0;
350 spec->pwd = bson_iter_utf8(&createIter, &strLength);
351 if (strLength == 0)
352 {
353 ereport(ERROR, (errcode(ERRCODE_DOCUMENTDB_BADVALUE),
354 errmsg(
355 "The password field must not be left empty.")));
356 }
357
358 passwordFound = true;
359 }
360 else if (strcmp(key, "roles") == 0)
361 {

Callers 1

Calls 10

PgbsonInitIteratorFunction · 0.85
EnsureTopLevelFieldTypeFunction · 0.85
IsUsernameValidFunction · 0.85
IsBsonValueEmptyDocumentFunction · 0.85
BsonValueInitIteratorFunction · 0.85
IsCommonSpecIgnoredFieldFunction · 0.85
IsPasswordValidFunction · 0.85

Tested by

no test coverage detected