X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=netatalk.git;a=blobdiff_plain;f=libatalk%2Facl%2Fuuid.c;h=074d9deb8a76c1da0343292b6250d940ee09d5c2;hp=1ac47f8de4a9251dccc36eeeeae2dbc0faf0791e;hb=64c01c136e708085840814c92ff7cf829a794317;hpb=b4b8297678f13581932838509700b311daef0c07 diff --git a/libatalk/acl/uuid.c b/libatalk/acl/uuid.c index 1ac47f8d..074d9deb 100644 --- a/libatalk/acl/uuid.c +++ b/libatalk/acl/uuid.c @@ -39,6 +39,34 @@ char *uuidtype[] = {"NULL","USER", "GROUP", "LOCAL"}; * Public helper function ********************************************************/ +static unsigned char local_group_uuid[] = {0xab, 0xcd, 0xef, + 0xab, 0xcd, 0xef, + 0xab, 0xcd, 0xef, + 0xab, 0xcd, 0xef}; + +static unsigned char local_user_uuid[] = {0xff, 0xff, 0xee, 0xee, 0xdd, 0xdd, + 0xcc, 0xcc, 0xbb, 0xbb, 0xaa, 0xaa}; + +void localuuid_from_id(unsigned char *buf, uuidtype_t type, unsigned int id) +{ + uint32_t tmp; + + switch (type) { + case UUID_GROUP: + memcpy(buf, local_group_uuid, 12); + break; + case UUID_USER: + default: + memcpy(buf, local_user_uuid, 12); + break; + } + + tmp = htonl(id); + memcpy(buf + 12, &tmp, 4); + + return; +} + /* * convert ascii string that can include dashes to binary uuid. * caller must provide a buffer. @@ -99,14 +127,6 @@ const char *uuid_bin2string(unsigned char *uuid) { * Interface ********************************************************/ -static unsigned char local_group_uuid[] = {0xab, 0xcd, 0xef, - 0xab, 0xcd, 0xef, - 0xab, 0xcd, 0xef, - 0xab, 0xcd, 0xef}; - -static unsigned char local_user_uuid[] = {0xff, 0xff, 0xee, 0xee, 0xdd, 0xdd, - 0xcc, 0xcc, 0xbb, 0xbb, 0xaa, 0xaa}; - /* * name: give me his name * type: and type (UUID_USER or UUID_GROUP) @@ -138,27 +158,21 @@ int getuuidfromname( const char *name, uuidtype_t type, uuidp_t uuid) { if (ret != 0) { /* Build a local UUID */ if (type == UUID_USER) { - memcpy(uuid, local_user_uuid, 12); struct passwd *pwd; if ((pwd = getpwnam(name)) == NULL) { LOG(log_error, logtype_afpd, "getuuidfromname(\"%s\",t:%u): unknown user", name, uuidtype[type]); goto cleanup; } - uint32_t id = pwd->pw_uid; - id = htonl(id); - memcpy(uuid + 12, &id, 4); + localuuid_from_id(uuid, UUID_USER, pwd->pw_uid); } else { - memcpy(uuid, &local_group_uuid, 12); struct group *grp; if ((grp = getgrnam(name)) == NULL) { LOG(log_error, logtype_afpd, "getuuidfromname(\"%s\",t:%u): unknown user", name, uuidtype[type]); goto cleanup; } - uint32_t id = grp->gr_gid; - id = htonl(id); - memcpy(uuid + 12, &id, 4); + localuuid_from_id(uuid, UUID_GROUP, grp->gr_gid); } LOG(log_debug, logtype_afpd, "getuuidfromname{local}: name: %s, type: %s -> UUID: %s", name, uuidtype[type], uuid_bin2string(uuid)); @@ -204,6 +218,7 @@ int getnamefromuuid(const uuidp_t uuidp, char **name, uuidtype_t *type) { return 0; } +#ifdef HAVE_LDAP ret = ldap_getnamefromuuid(uuid_bin2string(uuidp), name, type); if (ret != 0) { LOG(log_warning, logtype_afpd, "getnamefromuuid(%s): no result from ldap_getnamefromuuid", @@ -213,6 +228,7 @@ int getnamefromuuid(const uuidp_t uuidp, char **name, uuidtype_t *type) { add_cachebyuuid( uuidp, *name, *type, 0); LOG(log_debug, logtype_afpd, "getnamefromuuid{LDAP}: UUID: %s -> name: %s, type:%s", uuid_bin2string(uuidp), *name, uuidtype[*type]); +#endif } cleanup: