diff --git a/ldapclient.c b/ldapclient.c index 55af04a..f3f6a45 100644 --- a/ldapclient.c +++ b/ldapclient.c @@ -29,7 +29,7 @@ int ldapbind(int sock) { res=scan_ldapmessage(outbuf,outbuf+len,&messageid,&op,&Len); if (!res) return 0; if (op!=BindResponse) return 0; - res=scan_ldapbindresponse(outbuf+res,outbuf+res+len,&result,&matcheddn,&errormessage,&referral); + res=scan_ldapbindresponse(outbuf+res,outbuf+res+Len,&result,&matcheddn,&errormessage,&referral); if (!res) return 0; if (result) return 0; return 1; @@ -86,11 +86,17 @@ usage: long slen,mid,op; tmp=read(sock,buf+len,sizeof(buf)-len); len+=tmp; - if ((tmp2=scan_ldapmessage(buf,buf+len,&mid,&op,&slen))) - if (op==SearchResultEntry) { - max=buf+slen+tmp2; - break; + if ((tmp2=scan_ldapmessage(buf,buf+len,&mid,&op,&slen))) { + max=buf+slen+tmp2; + if (op==SearchResultEntry) break; + if (op==SearchResultDone) { + buffer_putsflush(buffer_2,"no matches.\n"); + return 0; + } else { + buffer_putsflush(buffer_2,"unexpected response.\n"); + return 0; } + } } if ((tmp=scan_ldapsearchresultentry(buf+tmp2,max,&sre))) { struct PartialAttributeList* pal=sre.attributes; diff --git a/tinyldap.c b/tinyldap.c index ca4d4ee..ff29cde 100644 --- a/tinyldap.c +++ b/tinyldap.c @@ -11,6 +11,9 @@ int main() { char buf[BUFSIZE]; int len=0; ldif_parse("exp.ldif"); + if (!first) { + buffer_putsflush(buffer_2,"keine Datenbasis?!"); + } for (;;) { int tmp=read(0,buf+len,BUFSIZE-len); int res; @@ -60,7 +63,13 @@ int main() { int tmp; if ((tmp=scan_ldapsearchrequest(buf+res,buf+res+len,&sr))) { struct ldaprec* r=first; + buffer_puts(buffer_2,"baseObject: \""); + buffer_put(buffer_2,sr.baseObject.s,sr.baseObject.l); + buffer_putsflush(buffer_2,"\"\n"); while (r) { + buffer_puts(buffer_2,"ldap_match(\""); + buffer_puts(buffer_2,r->dn); + buffer_putsflush(buffer_2,"\"\n"); if (ldap_match(r,&sr)) { struct SearchResultEntry sre; struct PartialAttributeList** pal=&sre.attributes; @@ -132,27 +141,34 @@ nomem: } r=r->next; } - { - char buf[1000]; - long l=fmt_ldapsearchresultdone(buf+100,0,"","",""); - int hlen=fmt_ldapmessage(0,++messageid,SearchResultDone,l); - fmt_ldapmessage(buf+100-hlen,messageid,SearchResultDone,l); - write(1,buf+100-hlen,l+hlen); - } } else { buffer_putsflush(buffer_2,"couldn't parse search request!\n"); exit(1); } + { + char buf[1000]; + long l=fmt_ldapsearchresultdone(buf+100,0,"","",""); + int hlen=fmt_ldapmessage(0,++messageid,SearchResultDone,l); + fmt_ldapmessage(buf+100-hlen,messageid,SearchResultDone,l); + write(1,buf+100-hlen,l+hlen); + } } break; default: exit(1); } Len+=res; +#if 0 + buffer_puts(buffer_2,"byte_copy(buf,"); + buffer_putulong(buffer_2,len-Len); + buffer_puts(buffer_2,",buf+"); + buffer_putulong(buffer_2,Len); + buffer_putsflush(buffer_2,");\n"); +#endif if (Len