t2 can now parse all my openldap and mozilla requests and responses.
This commit is contained in:
3
Makefile
3
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
|
||||
|
||||
|
||||
3
ldap.h
3
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);
|
||||
|
||||
16
scan_ldapresult.c
Normal file
16
scan_ldapresult.c
Normal 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
31
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;
|
||||
|
||||
Reference in New Issue
Block a user