fix bug in fmt_ldapsearchfilter

free memory for requests we can't handle yet
This commit is contained in:
leitner
2004-08-03 22:34:38 +00:00
parent dee7f4c9c1
commit 4f2bfc0074
2 changed files with 48 additions and 36 deletions

View File

@@ -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;
}

View File

@@ -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);