edwardcapriolo commented on code in PR #8177: URL: https://github.com/apache/hadoop/pull/8177#discussion_r2932654215
########## hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/native/container-executor/impl/container-executor.c: ########## @@ -915,26 +934,47 @@ static int create_container_directories(const char* user, const char *app_id, /** * Load the user information for a given user name. + * See <a href="https://linux.die.net/man/3/getpwnam_r">getpwname_r</a> + * Note: for user not found and some error conditions NULL is returned */ -static struct passwd* get_user_info(const char* user) { - size_t string_size = sysconf(_SC_GETPW_R_SIZE_MAX); +static struct serialized_passwd* get_user_info(const char* user) { + struct passwd pwd; struct passwd *result = NULL; - if(string_size < 1024) { - string_size = 1024; - } - struct passwd* buffer = malloc(sizeof(struct passwd) + string_size); - if (NULL == buffer) { - fprintf(LOGFILE, "Failed malloc in get_user_info\n"); - return NULL; - } - if (getpwnam_r(user, buffer, ((char*)buffer) + sizeof(struct passwd), - string_size, &result) != 0) { - free(buffer); - fprintf(LOGFILE, "Can't get user information %s - %s\n", user, - strerror(errno)); + struct serialized_passwd *serialized_result; + char *buf; + size_t bufsize; + int s; + bufsize = sysconf(_SC_GETPW_R_SIZE_MAX); + if (bufsize == -1){ + bufsize = 1024; + } + buf = malloc(bufsize); + if (buf == NULL) { + exit(EXIT_FAILURE); + } + while ((s = getpwnam_r(user, &pwd, buf, bufsize, &result)) == ERANGE){ + bufsize = 2 * bufsize; + char *newbuffer = realloc(buf, bufsize); Review Comment: @cnauroth The same is true here, there is no recovery outside of death. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
