]> arthur.barton.de Git - netatalk.git/commitdiff
Use function from 2-1 for local uuid generation
authorFrank Lahm <franklahm@googlemail.com>
Tue, 8 Feb 2011 19:27:33 +0000 (20:27 +0100)
committerFrank Lahm <franklahm@googlemail.com>
Tue, 8 Feb 2011 19:27:33 +0000 (20:27 +0100)
1  2 
NEWS
etc/afpd/acls.c
include/atalk/uuid.h
libatalk/acl/uuid.c

diff --cc NEWS
Simple merge
diff --cc etc/afpd/acls.c
Simple merge
index e3b2be118b19cb317694cad350e55c158809c8a5,3103c1d1a8f9380276666e73943423ea67008f15..a9432675af5dd2dac68dd0d5352676a6a0d9213e
@@@ -41,8 -42,9 +41,10 @@@ extern char *ldap_uid_attr
   ********************************************************/
  
  extern int getuuidfromname( const char *name, uuidtype_t type, uuidp_t uuid);
 -extern int getnamefromuuid( uuidp_t uuidp, char **name, uuidtype_t *type);
 +extern int getnamefromuuid( const uuidp_t uuidp, char **name, uuidtype_t *type);
++
+ extern void localuuid_from_id(unsigned char *buf, uuidtype_t type, unsigned int id);
 -extern int uuid_bin2string( uuidp_t uuidp, char **uuidstring);
 +extern const char *uuid_bin2string(unsigned char *uuid);
  extern void uuid_string2bin( const char *uuidstring, uuidp_t uuid);
  
  #endif /* AFP_UUID_H */
index 8993acc21f61fa38bc0c58dda11bd720eebc0cf4,8943fd82817bb2b862ed9b581ae67a977bcc6133..074d9deb8a76c1da0343292b6250d940ee09d5c2
@@@ -115,56 -143,27 +135,50 @@@ const char *uuid_bin2string(unsigned ch
   */  
  int getuuidfromname( const char *name, uuidtype_t type, uuidp_t uuid) {
      int ret = 0;
 +#ifdef HAVE_LDAP
      char *uuid_string = NULL;
 -
 +#endif
      ret = search_cachebyname( name, type, uuid);
 -    if (ret == 0) {     /* found in cache */
 -#ifdef DEBUG
 -        uuid_bin2string( uuid, &uuid_string);
 +    if (ret == 0) {
 +        /* found in cache */
          LOG(log_debug, logtype_afpd, "getuuidfromname{cache}: name: %s, type: %s -> UUID: %s",
 -            name, uuidtype[type], uuid_string);
 -#else
 -        LOG(log_debug, logtype_afpd, "getuuidfromname{cache}: name: %s, type: %s",
 -            name, uuidtype[type]);
 +            name, uuidtype[type], uuid_bin2string(uuid));
 +    } else  {
 +        /* if not found in cache */
 +#ifdef HAVE_LDAP
 +        if ((ret = ldap_getuuidfromname( name, type, &uuid_string)) == 0) {
 +            uuid_string2bin( uuid_string, uuid);
 +            LOG(log_debug, logtype_afpd, "getuuidfromname{local}: name: %s, type: %s -> UUID: %s",
 +                name, uuidtype[type], uuid_bin2string(uuid));
 +        } else {
 +            LOG(log_debug, logtype_afpd, "getuuidfromname(\"%s\",t:%u): no result from ldap search",
 +                name, type);
 +        }
  #endif
 -    } else  {                   /* if not found in cache */
 -        ret = ldap_getuuidfromname( name, type, &uuid_string);
          if (ret != 0) {
 -            LOG(log_info, logtype_afpd, "getuuidfromname: no result from ldap_getuuidfromname");
 -            goto cleanup;
 +            /* 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));
          }
 -        uuid_string2bin( uuid_string, uuid);
 +        ret = 0;
          add_cachebyname( name, uuid, type, 0);
 -        LOG(log_debug, logtype_afpd, "getuuidfromname{LDAP}: name: %s, type: %s -> UUID: %s",name, uuidtype[type], uuid_string);
      }
  
  cleanup: