From d6f4b0f66c2f9b67637bc1437adb4f3fe39ecd36 Mon Sep 17 00:00:00 2001 From: leitner Date: Sat, 1 Sep 2018 18:30:37 +0000 Subject: [PATCH] add fmt_ldapaddrequest --- Makefile | 2 +- fmt_ldapaddrequest.c | 34 ++++++++++++++++++++++++++++++++++ ldap.h | 1 + 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 fmt_ldapaddrequest.c diff --git a/Makefile b/Makefile index 1ebcc7e..b9bc581 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,7 @@ bstrstart.o free_ldapadl.o free_ldappal.o free_ldapsearchfilter.o \ scan_ldapsearchfilterstring.o free_ldapsearchresultentry.o \ fmt_ldapsearchfilterstring.o ldap_match_sre.o \ fmt_ldapdeleterequest.o scan_ldapdeleterequest.o normalize_dn.o \ -fmt_ldapmodifyrequest.o +fmt_ldapmodifyrequest.o fmt_ldapaddrequest.o ldif.a: ldif_parse.o ldap_match_mapped.o diff --git a/fmt_ldapaddrequest.c b/fmt_ldapaddrequest.c new file mode 100644 index 0000000..bb4a31b --- /dev/null +++ b/fmt_ldapaddrequest.c @@ -0,0 +1,34 @@ +#include "ldap.h" +#include +#include + +#include + +size_t fmt_ldapaddrequest(char* dest,const struct AddRequest* a) { + size_t i,n,l,sum; + const struct Addition* x; + size_t* ls; // lengths of the segments + char* orig=dest; + for (x=&a->a, l=0; x; x=x->next, ++l); // how many additions? + if (l>1000) return 0; + // now for each addition, calculate size of sequence + ls = (size_t*)alloca(l*sizeof(size_t)); + for (x=&a->a, sum=i=0; x; x=x->next, ++i) { + ls[i] = fmt_ldapstring(NULL, &x->AttributeDescription) + + fmt_ldapavl(NULL, &x->vals); + sum += ls[i] + fmt_asn1SEQUENCE(NULL, ls[i]);; + } + n=fmt_ldapstring(dest,&a->entry); + if (!dest) + return n + fmt_asn1SEQUENCE(NULL, sum) + sum; + dest += n; + dest += fmt_asn1SEQUENCE(dest, sum); + for (x=&a->a, i=0; x; x=x->next, ++i) { + dest += fmt_asn1SEQUENCE(dest, ls[i]); + dest += fmt_ldapstring(dest, &x->AttributeDescription); + dest += fmt_ldapavl(dest, &x->vals); + } + assert(n + fmt_asn1SEQUENCE(NULL, sum) + sum == (size_t)(dest-orig)); + return dest-orig; +} + diff --git a/ldap.h b/ldap.h index e121904..17c3852 100644 --- a/ldap.h +++ b/ldap.h @@ -194,6 +194,7 @@ size_t fmt_ldapava(char* dest,const struct AttributeValueAssertion* a); size_t fmt_ldapadl(char* dest,const struct AttributeDescriptionList* adl); size_t fmt_ldapavl(char* dest,const struct AttributeDescriptionList* adl); size_t fmt_ldapmodifyrequest(char* dest,const struct ModifyRequest* m); +size_t fmt_ldapaddrequest(char* dest,const struct AddRequest* m); size_t fmt_ldapsearchfilterstring(char* dest,const struct Filter* f); size_t fmt_ldapdeleterequest(char* dest,const struct string* s); size_t fmt_ldapmodifydnrequest(char* dest,const struct ModifyDNRequest* mdr);