- LOG(log_debug9, logtype_afpd, "getnamefromuuid{cache}: UUID: %s -> name: %s, type:%s",
- uuid_bin2string(uuidp), *name, uuidtype[*type]);
- } else {
- /* not found in cache */
-
- /* Check if UUID is a client local one */
- if (memcmp(uuidp, local_user_uuid, 12) == 0
- || memcmp(uuidp, local_group_uuid, 12) == 0) {
- LOG(log_debug, logtype_afpd, "getnamefromuuid: local UUID: %" PRIu32 "",
- ntohl(*(uint32_t *)(uuidp + 12)));
- *type = UUID_LOCAL;
- *name = strdup("UUID_LOCAL");
- return 0;
+ LOG(log_debug, logtype_afpd,
+ "getnamefromuuid{cache}: UUID: %s -> name: %s, type%s: %s",
+ uuid_bin2string(uuidp),
+ *name,
+ (*type & UUID_ENOENT) == UUID_ENOENT ? "[negative]" : "",
+ uuidtype[(*type) & UUIDTYPESTR_MASK]);
+ if ((*type & UUID_ENOENT) == UUID_ENOENT)
+ return -1;
+ return 0;
+ }
+
+ /* not found in cache */
+
+ /* Check if UUID is a client local one */
+ if (memcmp(uuidp, local_user_uuid, 12) == 0) {
+ *type = UUID_USER;
+ uid = ntohl(*(uint32_t *)(uuidp + 12));
+ if ((pwd = getpwuid(uid)) == NULL) {
+ /* not found, add negative entry to cache */
+ add_cachebyuuid(uuidp, "UUID_ENOENT", UUID_ENOENT, 0);
+ ret = -1;
+ } else {
+ *name = strdup(pwd->pw_name);
+ add_cachebyuuid(uuidp, *name, *type, 0);
+ ret = 0;