enhance t2, and scan_ldapbindrequest doesn't count the method tag.

This commit is contained in:
leitner
2002-01-14 18:46:30 +00:00
parent c236dd6ccb
commit aa61444f10
4 changed files with 35 additions and 24 deletions

View File

@@ -1,4 +1,4 @@
#DEBUG=1
DEBUG=1
all: t t1 t2 bindrequest tinyldap ldapclient
@@ -10,7 +10,8 @@ scan_asn1BOOLEAN.o
ldap.a: scan_ldapmessage.o fmt_ldapmessage.o fmt_ldapbindrequest.o \
scan_ldapbindrequest.o fmt_ldapbindresponse.o scan_ldapbindresponse.o \
scan_ldapstring.o scan_ldapsearchfilter.o
scan_ldapstring.o scan_ldapsearchfilter.o scan_ldapsearchrequest.o \
freefilter.o
DIET=diet -Os
CC=gcc

View File

@@ -13,7 +13,6 @@ int scan_ldapbindrequest(const char* src,const char* max,
long method;
if (!(tmp=scan_asn1tag(src+res,max,&tc,&tt,&method))) return 0;
if (tc!=PRIVATE || tt!=PRIMITIVE) return 0;
res+=tmp;
}
return res;
}

View File

@@ -5,7 +5,7 @@ int scan_ldapsearchrequest(const char* src,const char* max,
struct SearchRequest* s) {
int res,tmp;
unsigned long etmp;
if (!(res=scan_ldapstring(src,max,s->LDAPDN))) goto error;
if (!(res=scan_ldapstring(src,max,&s->LDAPDN))) goto error;
if (!(tmp=scan_asn1ENUMERATED(src+res,max,&etmp))) goto error;
if (etmp>2) goto error; s->scope=etmp; res+=tmp;
if (!(tmp=scan_asn1ENUMERATED(src+res,max,&etmp))) goto error;

51
t2.c
View File

@@ -5,31 +5,42 @@
#include "ldap.h"
int main(int argc,char* argv[]) {
#if 0
#if 1
unsigned long size;
// char* ldapsequence=mmap_read("req",&size);
char* ldapsequence=mmap_read(argc>1?argv[1]:"capture/127.000.000.001.32779-127.000.000.001.00389",&size);
long messageid, op, len;
int res;
printf("%d\n",res=scan_ldapmessage(ldapsequence,ldapsequence+size,&messageid,&op,&len));
printf("message id %lu, op %lu, len %lu\n",messageid,op,len);
if (op==0) {
long version,namelen,method;
const char* name;
printf("%d\n",res=scan_ldapbindrequest(ldapsequence+res,ldapsequence+size,&version,&name,&namelen,&method));
printf("version %lu, name \"%*s\", method %lu\n",version,namelen,name,method);
if (method==0) {
printf("%d\n",scan_asn1STRING(ldapsequence+res,ldapsequence+size,&name,&namelen));
printf("simple \"%*s\"\n",namelen,name);
int res,done=0;
while (done<size) {
printf("scan_ldapmessage: %d\n",res=scan_ldapmessage(ldapsequence+done,ldapsequence+size,&messageid,&op,&len));
if (!res) { puts("punt!"); break; }
printf("message id %lu, op %lu, len %lu\n",messageid,op,len);
switch (op) {
case BindRequest:
{
long version,method;
struct string name;
int tmp;
printf("scan_ldapbindrequest: %d\n",tmp=scan_ldapbindrequest(ldapsequence+done+res,ldapsequence+done+res+len,&version,&name,&method));
printf("version %lu, name \"%.*s\", method %lu\n",version,(int)name.l,name.s,method);
if (method==0) {
if (scan_ldapstring(ldapsequence+done+res+tmp,ldapsequence+size,&name))
printf("simple \"%.*s\"\n",(int)name.l,name.s);
else
puts("method 0 but couldn't parse simple");
} else
puts("unknown method!");
break;
}
case SearchRequest:
{
struct SearchRequest br;
printf("scan_ldapsearchrequest %d\n",res=scan_ldapsearchrequest(ldapsequence+done+res,ldapsequence+size,&br));
break;
}
}
done+=len+res;
}
#else
char buf[1024];
int s=100;
int len=fmt_ldapbindrequest(buf+s,3,"","");
int hlen=fmt_ldapmessage(0,1,0,len);
fmt_ldapmessage(buf+s-hlen,1,0,len);
write(1,buf+s-hlen,len+hlen);
#endif
#if 0
char buf[1024];
@@ -43,7 +54,7 @@ int main(int argc,char* argv[]) {
printf("got %lx\n",len);
printf("%d\n",res=fmt_asn1string(buf,UNIVERSAL,PRIMITIVE,OCTET_STRING,"fnord",5));
printf("%d\n",scan_asn1string(buf,buf+res,&tc,&tt,&tag,&c,&len));
printf("got %*s\n",(int)len,c);
printf("got %.*s\n",(int)len,c);
#endif
return 0;
}