From: Frank Lahm Date: Mon, 5 Mar 2012 11:52:05 +0000 (+0100) Subject: ldap_uuid_string X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=netatalk.git;a=commitdiff_plain;h=22ccb29a67fa835ff86a9b9b635409abda636380 ldap_uuid_string --- diff --git a/include/atalk/ldapconfig.h b/include/atalk/ldapconfig.h index 5a5b6570..f170f036 100644 --- a/include/atalk/ldapconfig.h +++ b/include/atalk/ldapconfig.h @@ -14,6 +14,7 @@ extern char *ldap_auth_pw; extern char *ldap_userbase; extern char *ldap_groupbase; extern char *ldap_uuid_attr; +extern char *ldap_uuid_string; extern char *ldap_name_attr; extern char *ldap_group_attr; extern char *ldap_uid_attr; diff --git a/include/atalk/uuid.h b/include/atalk/uuid.h index 93bad6b3..024ac7a0 100644 --- a/include/atalk/uuid.h +++ b/include/atalk/uuid.h @@ -16,7 +16,6 @@ #define AFP_UUID_H #define UUID_BINSIZE 16 -#define UUID_STRINGSIZE 36 typedef unsigned char *uuidp_t; typedef unsigned char atalk_uuid_t[UUID_BINSIZE]; @@ -28,18 +27,6 @@ typedef enum {UUID_USER = 1, #define UUIDTYPESTR_MASK 3 extern char *uuidtype[]; -/* afp_options.c needs these. defined in libatalk/ldap.c */ -extern char *ldap_host; -extern int ldap_auth_method; -extern char *ldap_auth_dn; -extern char *ldap_auth_pw; -extern char *ldap_userbase; -extern char *ldap_groupbase; -extern char *ldap_uuid_attr; -extern char *ldap_name_attr; -extern char *ldap_group_attr; -extern char *ldap_uid_attr; - /******************************************************** * Interface ********************************************************/ diff --git a/libatalk/acl/ldap.c b/libatalk/acl/ldap.c index 724ac4d5..122abb5b 100644 --- a/libatalk/acl/ldap.c +++ b/libatalk/acl/ldap.c @@ -49,6 +49,7 @@ int ldap_userscope; char *ldap_groupbase; int ldap_groupscope; char *ldap_uuid_attr; +char *ldap_uuid_string; char *ldap_name_attr; char *ldap_group_attr; char *ldap_uid_attr; @@ -63,6 +64,7 @@ struct ldap_pref ldap_prefs[] = { {&ldap_groupbase, "ldap_groupbase", 0, 0, -1}, {&ldap_groupscope, "ldap_groupscope", 1 ,1, -1}, {&ldap_uuid_attr, "ldap_uuid_attr", 0, 0, -1}, + {&ldap_uuid_string,"ldap_uuid_string", 0, 0, 0}, {&ldap_name_attr, "ldap_name_attr", 0, 0, -1}, {&ldap_group_attr, "ldap_group_attr", 0, 0, -1}, {&ldap_uid_attr, "ldap_uid_attr", 0, 0, 0}, diff --git a/libatalk/acl/uuid.c b/libatalk/acl/uuid.c index 7c0cf12e..4d8a875d 100644 --- a/libatalk/acl/uuid.c +++ b/libatalk/acl/uuid.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include "aclldap.h" @@ -75,8 +76,8 @@ void uuid_string2bin( const char *uuidstring, uuidp_t uuid) { int nibble = 1; int i = 0; unsigned char c, val = 0; - - while (*uuidstring) { + + while (*uuidstring && i < UUID_BINSIZE) { c = *uuidstring; if (c == '-') { uuidstring++; @@ -102,21 +103,28 @@ void uuid_string2bin( const char *uuidstring, uuidp_t uuid) { /*! * 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(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) { + if (ldap_uuid_string) + uuidmask = ldap_uuid_string; + else + 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;