Files
mars-tinyldap/fmt_ldapsearchresultentry.c
2002-01-15 00:15:27 +00:00

55 lines
1.2 KiB
C

#include "asn1.h"
#include "ldap.h"
int fmt_ldapadl(char* dest,struct AttributeDescriptionList* adl) {
struct AttributeDescriptionList* x=adl;
long sum=0;
int tmp;
while (x) {
sum+=fmt_asn1OCTETSTRING(0,0,x->a.l);
x=x->next;
}
tmp=fmt_asn1SET(dest,sum);
sum+=tmp;
if (dest) {
dest+=tmp;
x=adl;
while (x) {
dest+=fmt_ldapstring(dest,&x->a);
x=x->next;
}
}
return sum;
}
int fmt_ldappal(char* dest,struct PartialAttributeList* pal) {
// int l,l2,sum;
long sum,l,l2;
if (!pal) return 0;
sum=fmt_ldapstring(0,&pal->type);
/* look how much space the adl needs */
l=fmt_ldapadl(0,pal->values);
/* write sequence header */
l2=fmt_asn1SEQUENCE(dest,l+sum);
if (dest) {
fmt_ldapstring(dest+l2,&pal->type);
dest+=sum+l2;
}
sum+=l+l2;
if (dest) {
fmt_ldapadl(dest,pal->values);
dest+=l;
}
return sum+fmt_ldappal(dest,pal->next);
}
int fmt_ldapsearchresultentry(char* dest,struct SearchResultEntry* sre) {
int l,sum=0;
sum=fmt_ldapstring(dest,&sre->objectName);
if (dest) dest+=sum;
l=fmt_asn1SEQUENCE(dest,fmt_ldappal(0,sre->attributes));
sum+=l; if (dest) dest+=l;
l=fmt_ldappal(dest,sre->attributes);
return sum+l;
}