now tinyldap can answer to ldapclient!
This commit is contained in:
16
ldapclient.c
16
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;
|
||||
|
||||
32
tinyldap.c
32
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<len) {
|
||||
byte_copy(buf,len-Len,buf+Len);
|
||||
len-=Len;
|
||||
}
|
||||
} else len=0;
|
||||
} else
|
||||
exit(2);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user