Add helpers for converting (arrays of) LDAPMod structures into
different encodings.
This commit is contained in:
parent
6b1670c7cb
commit
009485b4b8
@ -108,6 +108,24 @@ typedef struct ldap
|
|||||||
ULONG ld_options;
|
ULONG ld_options;
|
||||||
} WLDAP32_LDAP, *WLDAP32_PLDAP;
|
} WLDAP32_LDAP, *WLDAP32_PLDAP;
|
||||||
|
|
||||||
|
typedef struct ldapmodA {
|
||||||
|
ULONG mod_op;
|
||||||
|
PCHAR mod_type;
|
||||||
|
union {
|
||||||
|
PCHAR *modv_strvals;
|
||||||
|
struct berval **modv_bvals;
|
||||||
|
} mod_vals;
|
||||||
|
} LDAPModA, *PLDAPModA;
|
||||||
|
|
||||||
|
typedef struct ldapmodW {
|
||||||
|
ULONG mod_op;
|
||||||
|
PWCHAR mod_type;
|
||||||
|
union {
|
||||||
|
PWCHAR *modv_strvals;
|
||||||
|
struct berval **modv_bvals;
|
||||||
|
} mod_vals;
|
||||||
|
} LDAPModW, *PLDAPModW;
|
||||||
|
|
||||||
typedef struct l_timeval
|
typedef struct l_timeval
|
||||||
{
|
{
|
||||||
LONG tv_sec;
|
LONG tv_sec;
|
||||||
@ -134,6 +152,16 @@ typedef struct ldapmsg
|
|||||||
BOOLEAN ConnectionReferenced;
|
BOOLEAN ConnectionReferenced;
|
||||||
} WLDAP32_LDAPMessage, *WLDAP32_PLDAPMessage;
|
} WLDAP32_LDAPMessage, *WLDAP32_PLDAPMessage;
|
||||||
|
|
||||||
|
#define LAPI_MAJOR_VER1 1
|
||||||
|
#define LAPI_MINOR_VER1 1
|
||||||
|
|
||||||
|
typedef struct ldap_version_info
|
||||||
|
{
|
||||||
|
ULONG lv_size;
|
||||||
|
ULONG lv_major;
|
||||||
|
ULONG lv_minor;
|
||||||
|
} LDAP_VERSION_INFO, *PLDAP_VERSION_INFO;
|
||||||
|
|
||||||
typedef struct WLDAP32_berval
|
typedef struct WLDAP32_berval
|
||||||
{
|
{
|
||||||
ULONG bv_len;
|
ULONG bv_len;
|
||||||
@ -154,6 +182,8 @@ typedef struct ldapcontrolW
|
|||||||
BOOLEAN ldctl_iscritical;
|
BOOLEAN ldctl_iscritical;
|
||||||
} LDAPControlW, *PLDAPControlW;
|
} LDAPControlW, *PLDAPControlW;
|
||||||
|
|
||||||
|
typedef struct ldapsearch LDAPSearch, *PLDAPSearch;
|
||||||
|
|
||||||
typedef struct ldapsortkeyA
|
typedef struct ldapsortkeyA
|
||||||
{
|
{
|
||||||
PCHAR sk_attrtype;
|
PCHAR sk_attrtype;
|
||||||
@ -202,6 +232,14 @@ typedef struct ldap_apifeature_infoW
|
|||||||
int ldapaif_version;
|
int ldapaif_version;
|
||||||
} LDAPAPIFeatureInfoW;
|
} LDAPAPIFeatureInfoW;
|
||||||
|
|
||||||
|
ULONG ldap_addA(WLDAP32_LDAP*,PCHAR,LDAPModA*[]);
|
||||||
|
ULONG ldap_addW(WLDAP32_LDAP*,PWCHAR,LDAPModW*[]);
|
||||||
|
ULONG ldap_add_extA(WLDAP32_LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*,ULONG*);
|
||||||
|
ULONG ldap_add_extW(WLDAP32_LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*,ULONG*);
|
||||||
|
ULONG ldap_add_ext_sA(WLDAP32_LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*);
|
||||||
|
ULONG ldap_add_ext_sW(WLDAP32_LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*);
|
||||||
|
ULONG ldap_add_sA(WLDAP32_LDAP*,PCHAR,LDAPModA*[]);
|
||||||
|
ULONG ldap_add_sW(WLDAP32_LDAP*,PWCHAR,LDAPModW*[]);
|
||||||
ULONG ldap_bindA(WLDAP32_LDAP*,PCHAR,PCHAR,ULONG);
|
ULONG ldap_bindA(WLDAP32_LDAP*,PCHAR,PCHAR,ULONG);
|
||||||
ULONG ldap_bindW(WLDAP32_LDAP*,PWCHAR,PWCHAR,ULONG);
|
ULONG ldap_bindW(WLDAP32_LDAP*,PWCHAR,PWCHAR,ULONG);
|
||||||
ULONG ldap_bind_sA(WLDAP32_LDAP*,PCHAR,PCHAR,ULONG);
|
ULONG ldap_bind_sA(WLDAP32_LDAP*,PCHAR,PCHAR,ULONG);
|
||||||
|
@ -226,6 +226,134 @@ static inline void strarrayfreeU( char **strarray )
|
|||||||
|
|
||||||
#ifdef HAVE_LDAP
|
#ifdef HAVE_LDAP
|
||||||
|
|
||||||
|
static inline LDAPModW *modAtoW( LDAPModA *mod )
|
||||||
|
{
|
||||||
|
LDAPModW *modW;
|
||||||
|
|
||||||
|
modW = HeapAlloc( GetProcessHeap(), 0, sizeof(LDAPModW) );
|
||||||
|
if (modW)
|
||||||
|
{
|
||||||
|
modW->mod_op = mod->mod_op;
|
||||||
|
modW->mod_type = strAtoW( mod->mod_type );
|
||||||
|
|
||||||
|
if (mod->mod_op & LDAP_MOD_BVALUES)
|
||||||
|
modW->mod_vals.modv_bvals = mod->mod_vals.modv_bvals;
|
||||||
|
else
|
||||||
|
modW->mod_vals.modv_strvals = strarrayAtoW( mod->mod_vals.modv_strvals );
|
||||||
|
}
|
||||||
|
return modW;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline LDAPMod *modWtoU( LDAPModW *mod )
|
||||||
|
{
|
||||||
|
LDAPMod *modU;
|
||||||
|
|
||||||
|
modU = HeapAlloc( GetProcessHeap(), 0, sizeof(LDAPMod) );
|
||||||
|
if (modU)
|
||||||
|
{
|
||||||
|
modU->mod_op = mod->mod_op;
|
||||||
|
modU->mod_type = strWtoU( mod->mod_type );
|
||||||
|
|
||||||
|
if (mod->mod_op & LDAP_MOD_BVALUES)
|
||||||
|
modU->mod_vals.modv_bvals = mod->mod_vals.modv_bvals;
|
||||||
|
else
|
||||||
|
modU->mod_vals.modv_strvals = strarrayWtoU( mod->mod_vals.modv_strvals );
|
||||||
|
}
|
||||||
|
return modU;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void modfreeW( LDAPModW *mod )
|
||||||
|
{
|
||||||
|
if (!(mod->mod_op & LDAP_MOD_BVALUES))
|
||||||
|
strarrayfreeW( mod->mod_vals.modv_strvals );
|
||||||
|
HeapFree( GetProcessHeap(), 0, mod );
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void modfreeU( LDAPMod *mod )
|
||||||
|
{
|
||||||
|
if (!(mod->mod_op & LDAP_MOD_BVALUES))
|
||||||
|
strarrayfreeU( mod->mod_vals.modv_strvals );
|
||||||
|
HeapFree( GetProcessHeap(), 0, mod );
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline DWORD modarraylenA( LDAPModA **modarray )
|
||||||
|
{
|
||||||
|
LDAPModA **p = modarray;
|
||||||
|
while (*p) p++;
|
||||||
|
return p - modarray;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline DWORD modarraylenW( LDAPModW **modarray )
|
||||||
|
{
|
||||||
|
LDAPModW **p = modarray;
|
||||||
|
while (*p) p++;
|
||||||
|
return p - modarray;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline LDAPModW **modarrayAtoW( LDAPModA **modarray )
|
||||||
|
{
|
||||||
|
LDAPModW **modarrayW = NULL;
|
||||||
|
DWORD size;
|
||||||
|
|
||||||
|
if (modarray)
|
||||||
|
{
|
||||||
|
size = sizeof(LDAPModW*) * (modarraylenA( modarray ) + 1);
|
||||||
|
modarrayW = HeapAlloc( GetProcessHeap(), 0, size );
|
||||||
|
|
||||||
|
if (modarrayW)
|
||||||
|
{
|
||||||
|
LDAPModA **p = modarray;
|
||||||
|
LDAPModW **q = modarrayW;
|
||||||
|
|
||||||
|
while (*p) *q++ = modAtoW( *p++ );
|
||||||
|
*q = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return modarrayW;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline LDAPMod **modarrayWtoU( LDAPModW **modarray )
|
||||||
|
{
|
||||||
|
LDAPMod **modarrayU = NULL;
|
||||||
|
DWORD size;
|
||||||
|
|
||||||
|
if (modarray)
|
||||||
|
{
|
||||||
|
size = sizeof(LDAPMod*) * (modarraylenW( modarray ) + 1);
|
||||||
|
modarrayU = HeapAlloc( GetProcessHeap(), 0, size );
|
||||||
|
|
||||||
|
if (modarrayU)
|
||||||
|
{
|
||||||
|
LDAPModW **p = modarray;
|
||||||
|
LDAPMod **q = modarrayU;
|
||||||
|
|
||||||
|
while (*p) *q++ = modWtoU( *p++ );
|
||||||
|
*q = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return modarrayU;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void modarrayfreeW( LDAPModW **modarray )
|
||||||
|
{
|
||||||
|
if (modarray)
|
||||||
|
{
|
||||||
|
LDAPModW **p = modarray;
|
||||||
|
while (*p) modfreeW( *p++ );
|
||||||
|
HeapFree( GetProcessHeap(), 0, modarray );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void modarrayfreeU( LDAPMod **modarray )
|
||||||
|
{
|
||||||
|
if (modarray)
|
||||||
|
{
|
||||||
|
LDAPMod **p = modarray;
|
||||||
|
while (*p) modfreeU( *p++ );
|
||||||
|
HeapFree( GetProcessHeap(), 0, modarray );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static inline LDAPControlW *controlAtoW( LDAPControlA *control )
|
static inline LDAPControlW *controlAtoW( LDAPControlA *control )
|
||||||
{
|
{
|
||||||
LDAPControlW *controlW;
|
LDAPControlW *controlW;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user