X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libatalk%2Facl%2Fuuid.c;h=ff58c3dd2202f562f3b757bca7053a85cbfdf4ca;hb=refs%2Fheads%2Fv3.1.6-alex;hp=7d6e7d620cf6ad0aaf554c814c9b0774e0ccc3d4;hpb=321a0107c48da7b3fbf895a2b32244174c1ff39c;p=netatalk.git diff --git a/libatalk/acl/uuid.c b/libatalk/acl/uuid.c index 7d6e7d62..ff58c3dd 100644 --- a/libatalk/acl/uuid.c +++ b/libatalk/acl/uuid.c @@ -209,7 +209,6 @@ int getuuidfromname( const char *name, uuidtype_t type, unsigned char *uuid) { add_cachebyname(name, uuid, mytype, 0); } -cleanup: #ifdef HAVE_LDAP if (uuid_string) free(uuid_string); #endif @@ -229,6 +228,7 @@ int getnamefromuuid(const uuidp_t uuidp, char **name, uuidtype_t *type) { int ret; uid_t uid; gid_t gid; + uint32_t tmp; struct passwd *pwd; struct group *grp; @@ -250,9 +250,11 @@ int getnamefromuuid(const uuidp_t uuidp, char **name, uuidtype_t *type) { /* 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)); + memcpy(&tmp, uuidp + 12, sizeof(uint32_t)); + uid = ntohl(tmp); if ((pwd = getpwuid(uid)) == NULL) { /* not found, add negative entry to cache */ + *name = NULL; add_cachebyuuid(uuidp, "UUID_ENOENT", UUID_ENOENT, 0); ret = -1; } else { @@ -262,11 +264,12 @@ int getnamefromuuid(const uuidp_t uuidp, char **name, uuidtype_t *type) { } LOG(log_debug, logtype_afpd, "getnamefromuuid{local}: UUID: %s -> name: %s, type:%s", - uuid_bin2string(uuidp), *name, uuidtype[(*type) & UUIDTYPESTR_MASK]); + uuid_bin2string(uuidp), *name ? *name : "-", uuidtype[(*type) & UUIDTYPESTR_MASK]); return ret; } else if (memcmp(uuidp, local_group_uuid, 12) == 0) { *type = UUID_GROUP; - gid = ntohl(*(uint32_t *)(uuidp + 12)); + memcpy(&tmp, uuidp + 12, sizeof(uint32_t)); + gid = ntohl(tmp); if ((grp = getgrgid(gid)) == NULL) { /* not found, add negative entry to cache */ add_cachebyuuid(uuidp, "UUID_ENOENT", UUID_ENOENT, 0);