static int find_default_map(void) { struct passwd *p = getpwuid(getuid()); if (!p) return -1; if (read_default_map(subuidfile, ID_TYPE_UID, p->pw_name) < 0) return -1; if (read_default_map(subgidfile, ID_TYPE_GID, p->pw_name) < 0) return -1; return 0; }
static int find_default_map(void) { size_t bufsize; char *buf; struct passwd pwent; int ret = -1; struct passwd *pwentp = NULL; bufsize = sysconf(_SC_GETPW_R_SIZE_MAX); if (bufsize == -1) bufsize = 1024; buf = malloc(bufsize); if (!buf) return -1; ret = getpwuid_r(getuid(), &pwent, buf, bufsize, &pwentp); if (!pwentp) { if (ret == 0) CMD_SYSERROR("Failed to find matched password record"); CMD_SYSERROR("Failed to get password record for uid %d", getuid()); ret = -1; goto out; } ret = read_default_map(subuidfile, ID_TYPE_UID, pwent.pw_name); if (ret < 0) goto out; ret = read_default_map(subgidfile, ID_TYPE_GID, pwent.pw_name); if (ret < 0) goto out; ret = 0; out: free(buf); return ret; }