t2 can now parse all my openldap and mozilla requests and responses.

This commit is contained in:
leitner
2002-01-15 00:24:41 +00:00
parent 23f9605293
commit b166396c5e
4 changed files with 34 additions and 19 deletions

View File

@@ -12,7 +12,8 @@ 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_ldapsearchrequest.o \
freefilter.o freeava.o scan_ldapava.o fmt_ldapsearchresultentry.o \
fmt_ldapstring.o freepal.o scan_ldapsearchresultentry.o
fmt_ldapstring.o freepal.o scan_ldapsearchresultentry.o \
scan_ldapresult.o
ldif.a: ldif_parse.o

3
ldap.h
View File

@@ -87,6 +87,9 @@ int scan_ldapava(const char* src,const char* max,struct AttributeValueAssertion*
int scan_ldapsearchfilter(const char* src,const char* max,struct Filter** f);
int scan_ldapsearchrequest(const char* src,const char* max,struct SearchRequest* s);
int scan_ldapsearchresultentry(const char* src,const char* max,struct SearchResultEntry* sre);
int scan_ldapresult(const char* src,const char* max,long* result,
struct string* matcheddn,struct string* errormessage,
struct string* referral);
int fmt_ldapstring(char* dest,struct string* s);
int fmt_ldapmessage(char* dest,long messageid,long op,long len);

16
scan_ldapresult.c Normal file
View File

@@ -0,0 +1,16 @@
#include "asn1.h"
#include "ldap.h"
int scan_ldapresult(const char* src,const char* max,long* result,
struct string* matcheddn,struct string* errormessage,
struct string* referral) {
int res,tmp;
if (!(res=scan_asn1ENUMERATED(src,max,result))) return 0;
if (!(tmp=scan_ldapstring(src+res,max,matcheddn))) return 0;
res+=tmp;
if (!(tmp=scan_ldapstring(src+res,max,errormessage))) return 0;
res+=tmp;
if (src+res==max) { referral->l=0; referral->s=0; return res; }
if (!(tmp=scan_ldapstring(src+res,max,referral))) return 0;
return res+tmp;
}

31
t2.c
View File

@@ -145,10 +145,8 @@ int main(int argc,char* argv[]) {
{
struct SearchResultEntry sre;
int tmp;
int first=1;
if ((tmp=scan_ldapsearchresultentry(ldapsequence+done+res,ldapsequence+done+res+len,&sre))) {
struct PartialAttributeList* pal=sre.attributes;
ausgeben:
printf("objectName \"%.*s\"\n",(int)sre.objectName.l,sre.objectName.s);
while (pal) {
struct AttributeDescriptionList* adl=pal->values;
@@ -161,28 +159,25 @@ ausgeben:
printf("\n");
pal=pal->next;
}
if (!first) exit(0); first=0;
{
char *buf=alloca(len+1000);
int mylen;
printf("fmt_ldapsearchresultentry: %d vs %ld\n",
mylen=fmt_ldapsearchresultentry(buf,&sre),len);
memset(&sre,0,sizeof(sre));
if (tmp=scan_ldapsearchresultentry(buf,buf+mylen,&sre)) {
pal=sre.attributes;
goto ausgeben;
}
}
exit(0);
} else
puts("punt!");
}
break;
case SearchResultDone:
puts(" >> SearchResultDone <<");
puts("to be done");
break;
{
long result;
struct string matcheddn,errormessage,referral;
int tmp;
printf("scan_ldapresult: %d\n",
tmp=scan_ldapresult(ldapsequence+done+res,ldapsequence+done+res+len,
&result,&matcheddn,&errormessage,&referral));
printf("result %lu, matcheddn \"%.*s\", errormessage \"%.*s\", referral \"%.*s\"\n",
result,(int)matcheddn.l,matcheddn.s,
(int)errormessage.l,errormessage.s,
(int)referral.l,referral.s);
break;
}
case UnbindRequest:
puts(" >> UnbindRequest <<");
break;