now tinyldap can answer to ldapclient!

This commit is contained in:
leitner
2002-01-16 17:10:52 +00:00
parent 60ee9f82b1
commit 2b2afddcee
2 changed files with 35 additions and 13 deletions

View File

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

View File

@@ -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<len) {
byte_copy(buf,len-Len,buf+Len);
len-=Len;
}
} else len=0;
} else
exit(2);
}