From b166396c5efe2b601a7d7d17d45c7f4365540c25 Mon Sep 17 00:00:00 2001 From: leitner Date: Tue, 15 Jan 2002 00:24:41 +0000 Subject: [PATCH] t2 can now parse all my openldap and mozilla requests and responses. --- Makefile | 3 ++- ldap.h | 3 +++ scan_ldapresult.c | 16 ++++++++++++++++ t2.c | 31 +++++++++++++------------------ 4 files changed, 34 insertions(+), 19 deletions(-) create mode 100644 scan_ldapresult.c diff --git a/Makefile b/Makefile index eacf71b..64f48b8 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/ldap.h b/ldap.h index 930afd4..abbd689 100644 --- a/ldap.h +++ b/ldap.h @@ -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); diff --git a/scan_ldapresult.c b/scan_ldapresult.c new file mode 100644 index 0000000..0872ef4 --- /dev/null +++ b/scan_ldapresult.c @@ -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; +} diff --git a/t2.c b/t2.c index 6353296..1b31bb0 100644 --- a/t2.c +++ b/t2.c @@ -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;