diff --git a/fmt_ldapsearchfilter.c b/fmt_ldapsearchfilter.c index a5cd87c..181805d 100644 --- a/fmt_ldapsearchfilter.c +++ b/fmt_ldapsearchfilter.c @@ -28,7 +28,9 @@ int fmt_ldapsubstring(char* dest,struct Substring* s) { } int fmt_ldapsearchfilter(char* dest,struct Filter* f) { - long sum,tmp,tmp2=0; + long sum=0,l=0,tmp; + if (!f) + return 0; switch (f->type) { case AND: case OR: case NOT: sum=fmt_ldapsearchfilter(dest,f->x); break; @@ -41,22 +43,28 @@ int fmt_ldapsearchfilter(char* dest,struct Filter* f) { tmp=fmt_ldapsubstring(0,f->substrings); l=fmt_ldapstring(nd,&f->ava.desc); - l+=fmt_asn1SEQUENCE(nd+l,tmp); - l+=fmt_ldapsubstring(nd+l,f->substrings); - sum=l; + sum+=l; if (nd) nd+=l; + l=fmt_asn1SEQUENCE(nd,tmp); + sum+=l; if (nd) nd+=l; + l=fmt_ldapsubstring(nd,f->substrings); + sum+=l; } break; case PRESENT: -// sum=fmt_ldapstring(dest,&f->ava.desc); return fmt_asn1string(dest,PRIVATE,PRIMITIVE,f->type,f->ava.desc.s,f->ava.desc.l); break; default: return 0; } + + if(f->next) { + if (dest) sum+=fmt_ldapsearchfilter(dest+sum,f->next); + else sum+=fmt_ldapsearchfilter(dest,f->next); + } + tmp=fmt_asn1length(0,sum); if (!dest) return sum+tmp+1; if (dest) byte_copyr(dest+tmp+1,sum,dest); fmt_asn1tag(dest,PRIVATE,CONSTRUCTED,f->type); fmt_asn1length(dest+1,sum); - if (f->next) tmp2=fmt_ldapsearchfilter(dest+sum+tmp+1,f->next); - return sum+tmp+tmp2+1; + return sum+tmp+1; } diff --git a/tinyldap.c b/tinyldap.c index dc2f7b3..8882344 100644 --- a/tinyldap.c +++ b/tinyldap.c @@ -784,6 +784,8 @@ found: x=x->next; } while (x); } + /* TODO: do something with the modify request ;-) */ + free_ldapmodifyrequest(&mr); } else { buffer_putsflush(buffer_2,"couldn't parse modify request!\n"); exit(1); @@ -795,39 +797,41 @@ found: break; case AddRequest: { - struct AddRequest ar; + struct AddRequest ar; // buffer_putsflush(buffer_2,"AddRequest!\n"); if ((tmp=scan_ldapaddrequest(buf+res,buf+res+len,&ar))) { - } else { - buffer_putsflush(buffer_2,"couldn't parse add request!\n"); - exit(1); - } + /* TODO: do something with the add request ;-) */ + free_ldapaddrequest(&ar); + } else { + buffer_putsflush(buffer_2,"couldn't parse add request!\n"); + exit(1); + } - buffer_put(buffer_1,ar.entry.s,ar.entry.l); - buffer_putsflush(buffer_1,"\n"); - if (verbose) { /* iterate all attributes */ - struct Addition * x; - struct AttributeDescriptionList * y; - for (x = &ar.a;x;x=x->next) { - for (y = &x->vals;y;y=y->next) { - buffer_put(buffer_1,x->AttributeDescription.s,x->AttributeDescription.l); - buffer_puts(buffer_1,": "); - buffer_put(buffer_1,y->a.s,y->a.l); - buffer_putsflush(buffer_1,"\n"); - } - } - } + buffer_put(buffer_1,ar.entry.s,ar.entry.l); + buffer_putsflush(buffer_1,"\n"); + if (verbose) { /* iterate all attributes */ + struct Addition * x; + struct AttributeDescriptionList * y; + for (x = &ar.a;x;x=x->next) { + for (y = &x->vals;y;y=y->next) { + buffer_put(buffer_1,x->AttributeDescription.s,x->AttributeDescription.l); + buffer_puts(buffer_1,": "); + buffer_put(buffer_1,y->a.s,y->a.l); + buffer_putsflush(buffer_1,"\n"); + } + } + } - { - char outbuf[1024]; - int s=100; - int len=fmt_ldapbindresponse(outbuf+s,0,"","",""); - int hlen=fmt_ldapmessage(0,messageid,AddResponse,len); - fmt_ldapmessage(outbuf+s-hlen,messageid,AddResponse,len); - write(out,outbuf+s-hlen,len+hlen); - } - } - break; + { + char outbuf[1024]; + int s=100; + int len=fmt_ldapbindresponse(outbuf+s,0,"","",""); + int hlen=fmt_ldapmessage(0,messageid,AddResponse,len); + fmt_ldapmessage(outbuf+s-hlen,messageid,AddResponse,len); + write(out,outbuf+s-hlen,len+hlen); + } + } + break; default: buffer_puts(buffer_2,"unknown request type "); buffer_putulong(buffer_2,op);