55 lines
1.2 KiB
C
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;
|
|
}
|