#include <atalk/logger.h>
#include <atalk/afp.h>
#include <atalk/uuid.h>
+#include <atalk/ldapconfig.h>
#include <atalk/util.h>
#include "aclldap.h"
int nibble = 1;
int i = 0;
unsigned char c, val = 0;
-
- while (*uuidstring) {
+
+ while (*uuidstring && i < UUID_BINSIZE) {
c = *uuidstring;
if (c == '-') {
uuidstring++;
/*!
* Convert 16 byte binary uuid to neat ascii represantation including dashes.
- *
+ * Use defined or default ascii mask for dash placement
* Returns pointer to static buffer.
*/
const char *uuid_bin2string(const unsigned char *uuid) {
- static char uuidstring[UUID_STRINGSIZE + 1];
-
+ static char uuidstring[64];
+ const char *uuidmask;
int i = 0;
unsigned char c;
- while (i < UUID_STRINGSIZE) {
+#ifdef HAVE_LDAP
+ if (ldap_uuid_string)
+ uuidmask = ldap_uuid_string;
+ else
+#endif
+ uuidmask = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
+
+ LOG(log_debug, logtype_afpd, "uuid_bin2string{uuid}: mask: %s", uuidmask);
+
+ while (i < strlen(uuidmask)) {
c = *uuid;
uuid++;
sprintf(uuidstring + i, "%02X", c);
i += 2;
- if (i==8 || i==13 || i==18 || i==23)
+ if (uuidmask[i] == '-')
uuidstring[i++] = '-';
}
uuidstring[i] = 0;
add_cachebyname(name, uuid, mytype, 0);
}
-cleanup:
#ifdef HAVE_LDAP
if (uuid_string) free(uuid_string);
#endif
int ret;
uid_t uid;
gid_t gid;
+ uint32_t tmp;
struct passwd *pwd;
struct group *grp;
/* 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 {
}
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);