diff --git a/src/box/schema.cc b/src/box/schema.cc index 9767207e099be2fbf884b370d11fec68775a7f9d..fab7544f248dd61d95523308a267ccbd1368cf9a 100644 --- a/src/box/schema.cc +++ b/src/box/schema.cc @@ -311,9 +311,8 @@ schema_find_id(uint32_t system_space_id, uint32_t index_id, const char *name, uint32_t len, uint32_t *object_id) { if (len > BOX_NAME_MAX) { - diag_set(SystemError, - "name length %d is greater than BOX_NAME_MAX", len); - return -1; + *object_id = BOX_ID_NIL; + return 0; } struct space *space = space_cache_find(system_space_id); if (space == NULL) diff --git a/src/box/user.cc b/src/box/user.cc index 6b4a5565e7c73c8c4f205b027879068a10f44bd9..c8991b15a868d4d8c0938e81442a217cc9cafbab 100644 --- a/src/box/user.cc +++ b/src/box/user.cc @@ -524,12 +524,14 @@ user_find_by_name(const char *name, uint32_t len) uint32_t uid; if (schema_find_id(BOX_USER_ID, 2, name, len, &uid) != 0) return NULL; - struct user *user = user_by_id(uid); - if (user == NULL || user->def->type != SC_USER) { - diag_set(ClientError, ER_NO_SUCH_USER, tt_cstr(name, len)); - return NULL; + if (uid != BOX_ID_NIL) { + struct user *user = user_by_id(uid); + if (user != NULL && user->def->type == SC_USER) + return user; } - return user; + diag_set(ClientError, ER_NO_SUCH_USER, + tt_cstr(name, MIN(BOX_INVALID_NAME_MAX, len))); + return NULL; } void diff --git a/test/box/access.result b/test/box/access.result index 01126a94b6b6d84f06c1e2124311bee885bf07fb..9554991add79703b955f1a756410d89ea7fe3f87 100644 --- a/test/box/access.result +++ b/test/box/access.result @@ -248,7 +248,8 @@ session.su('does not exist') -- allowed name. session.su(string.rep('a', 66000)) --- -- error: name length 66000 is greater than BOX_NAME_MAX +- error: User 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' is + not found ... -------------------------------------------------------------------------------- -- Check if identifiers obey the common constraints