diff options
author | Simon Rettberg | 2017-04-21 16:31:06 +0200 |
---|---|---|
committer | Simon Rettberg | 2017-04-21 16:31:06 +0200 |
commit | b61176f17b59a94750dff1f959231dadc4e6078a (patch) | |
tree | 88ee419323ba332a1dd06c5aa801c87f59b36bb3 /fmt_asn1generic.c | |
parent | ldadp.h: Add missing SearchRequestReference opcode (diff) | |
download | ldadp-b61176f17b59a94750dff1f959231dadc4e6078a.tar.gz ldadp-b61176f17b59a94750dff1f959231dadc4e6078a.tar.xz ldadp-b61176f17b59a94750dff1f959231dadc4e6078a.zip |
Update ldap/asn1/... files with current tinyldap
Diffstat (limited to 'fmt_asn1generic.c')
-rw-r--r-- | fmt_asn1generic.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/fmt_asn1generic.c b/fmt_asn1generic.c index c97ee96..f864012 100644 --- a/fmt_asn1generic.c +++ b/fmt_asn1generic.c @@ -6,7 +6,6 @@ size_t fmt_asn1generic(char* dest,const char* fmt,...) { size_t containerstack[100]; size_t curinstack=0; va_list args; - va_start(args,fmt); unsigned long* application=0; struct string* s; struct oid* o; @@ -17,6 +16,7 @@ size_t fmt_asn1generic(char* dest,const char* fmt,...) { unsigned long desttag=0; unsigned long appstore; int stringtype; + va_start(args,fmt); while (*fmt) { char* realdest=dest?dest+cursor:NULL; switch (*fmt) { @@ -32,6 +32,20 @@ size_t fmt_asn1generic(char* dest,const char* fmt,...) { application=NULL; curlen+=fmt_asn1length(realdest?realdest+curlen:NULL,0); break; + case 'B': // send boolean + { + int i=va_arg(args,int); + if (i!=0 && i!=1) { + va_end(args); + return 0; + } + if (application) + curlen=fmt_asn1int(realdest,APPLICATION,PRIMITIVE,*application,i); + else + curlen=fmt_asn1int(realdest,UNIVERSAL,PRIMITIVE,BOOLEAN,i); + application=NULL; + break; + } case 'i': // send integer { unsigned long i=va_arg(args,unsigned long); @@ -50,7 +64,7 @@ size_t fmt_asn1generic(char* dest,const char* fmt,...) { curlen=fmt_asn1bitstring(realdest,UNIVERSAL,PRIMITIVE,BIT_STRING,s->s,s->l); application=NULL; break; - case 'B': + case 'I': stringtype=BIT_STRING; goto stringcopy; case 'A': @@ -122,7 +136,10 @@ stringcopy_alt: * sequence data backwards to make room to write the ASN.1 length */ { char* anfang; - if (!curinstack) return 0; + if (!curinstack) { + va_end(args); + return 0; + } anfang=dest+containerstack[--curinstack]; seqlen=dest+cursor-anfang; curlen=fmt_asn1length(NULL,seqlen); @@ -135,5 +152,6 @@ stringcopy_alt: cursor+=curlen; ++fmt; } + va_end(args); return cursor; } |