X-Git-Url: https://git.openssl.org/gitweb/?a=blobdiff_plain;f=crypto%2Fasn1%2Fasn1_gen.c;h=25b270d6e63fcbaf88bedd5609e7c6f1710bdb3e;hb=b00f586a812c965a7a34938df00ff6eb2130754a;hp=4fc241908f6923b4f99e5e4e8d2ed0c1ba4a17bf;hpb=b599006751372b6fc94eb54b0dccade6e9753922;p=openssl.git diff --git a/crypto/asn1/asn1_gen.c b/crypto/asn1/asn1_gen.c index 4fc241908f..25b270d6e6 100644 --- a/crypto/asn1/asn1_gen.c +++ b/crypto/asn1/asn1_gen.c @@ -372,7 +372,7 @@ static int asn1_cb(const char *elem, int len, void *bitstr) arg->format = ASN1_GEN_FORMAT_BITLIST; else { - ASN1err(ASN1_F_ASN1_CB, ASN1_R_UNKOWN_FORMAT); + ASN1err(ASN1_F_ASN1_CB, ASN1_R_UNKNOWN_FORMAT); return -1; } break; @@ -852,3 +852,27 @@ static int bitstr_cb(const char *elem, int len, void *bitstr) return 1; } +static int mask_cb(const char *elem, int len, void *arg) + { + unsigned long *pmask = arg, tmpmask; + int tag; + if (len == 3 && !strncmp(elem, "DIR", 3)) + { + *pmask |= B_ASN1_DIRECTORYSTRING; + return 1; + } + tag = asn1_str2tag(elem, len); + if (!tag || (tag & ASN1_GEN_FLAG)) + return 0; + tmpmask = ASN1_tag2bit(tag); + if (!tmpmask) + return 0; + *pmask |= tmpmask; + return 1; + } + +int ASN1_str2mask(const char *str, unsigned long *pmask) + { + *pmask = 0; + return CONF_parse_list(str, '|', 1, mask_cb, pmask); + }