enhance t2, and scan_ldapbindrequest doesn't count the method tag.
This commit is contained in:
5
Makefile
5
Makefile
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
51
t2.c
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user