Add VisibleString parsing
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19539 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -32,6 +32,7 @@ typedef struct heim_universal_string {
|
||||
uint32_t *data;
|
||||
} heim_universal_string;
|
||||
|
||||
typedef char *heim_visible_string;
|
||||
|
||||
typedef struct heim_oid {
|
||||
size_t length;
|
||||
|
@@ -180,7 +180,9 @@ loop (unsigned char *buf, size_t len, int indent)
|
||||
break;
|
||||
}
|
||||
case UT_GeneralizedTime :
|
||||
case UT_GeneralString : {
|
||||
case UT_GeneralString :
|
||||
case UT_PrintableString :
|
||||
case UT_VisibleString : {
|
||||
heim_general_string str;
|
||||
|
||||
ret = der_get_general_string (buf, length, &str, NULL);
|
||||
|
@@ -88,6 +88,13 @@ der_copy_universal_string (const heim_universal_string *from,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
der_copy_visible_string (const heim_visible_string *from,
|
||||
heim_visible_string *to)
|
||||
{
|
||||
return der_copy_general_string(from, to);
|
||||
}
|
||||
|
||||
int
|
||||
der_copy_octet_string (const heim_octet_string *from, heim_octet_string *to)
|
||||
{
|
||||
|
@@ -79,6 +79,13 @@ der_free_universal_string (heim_universal_string *k)
|
||||
k->length = 0;
|
||||
}
|
||||
|
||||
void
|
||||
der_free_visible_string (heim_visible_string *str)
|
||||
{
|
||||
free(*str);
|
||||
*str = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
der_free_octet_string (heim_octet_string *k)
|
||||
{
|
||||
|
@@ -214,6 +214,13 @@ der_get_universal_string (const unsigned char *p, size_t len,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
der_get_visible_string (const unsigned char *p, size_t len,
|
||||
heim_visible_string *str, size_t *size)
|
||||
{
|
||||
return der_get_general_string(p, len, str, size);
|
||||
}
|
||||
|
||||
int
|
||||
der_get_octet_string (const unsigned char *p, size_t len,
|
||||
heim_octet_string *data, size_t *size)
|
||||
|
@@ -166,6 +166,12 @@ der_length_universal_string (const heim_universal_string *data)
|
||||
return data->length * 4;
|
||||
}
|
||||
|
||||
size_t
|
||||
der_length_visible_string (const heim_visible_string *data)
|
||||
{
|
||||
return strlen(*data);
|
||||
}
|
||||
|
||||
size_t
|
||||
der_length_octet_string (const heim_octet_string *k)
|
||||
{
|
||||
|
@@ -230,6 +230,13 @@ der_put_universal_string (unsigned char *p, size_t len,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
der_put_visible_string (unsigned char *p, size_t len,
|
||||
const heim_visible_string *str, size_t *size)
|
||||
{
|
||||
return der_put_general_string(p, len, str, size);
|
||||
}
|
||||
|
||||
int
|
||||
der_put_octet_string (unsigned char *p, size_t len,
|
||||
const heim_octet_string *data, size_t *size)
|
||||
|
@@ -135,6 +135,9 @@ init_generate (const char *filename, const char *base)
|
||||
" size_t length;\n"
|
||||
" uint32_t *data;\n"
|
||||
"} heim_universal_string;\n\n");
|
||||
fprintf (headerfile,
|
||||
"typedef char *heim_visible_string;\n\n"
|
||||
);
|
||||
fprintf (headerfile,
|
||||
"typedef struct heim_oid {\n"
|
||||
" size_t length;\n"
|
||||
@@ -504,6 +507,10 @@ define_asn1 (int level, Type *t)
|
||||
space(level);
|
||||
fprintf (headerfile, "UniversalString");
|
||||
break;
|
||||
case TVisibleString:
|
||||
space(level);
|
||||
fprintf (headerfile, "VisibleString");
|
||||
break;
|
||||
case TOID :
|
||||
space(level);
|
||||
fprintf(headerfile, "OBJECT IDENTIFIER");
|
||||
@@ -736,6 +743,10 @@ define_type (int level, const char *name, Type *t, int typedefp, int preservep)
|
||||
space(level);
|
||||
fprintf (headerfile, "heim_universal_string %s;\n", name);
|
||||
break;
|
||||
case TVisibleString:
|
||||
space(level);
|
||||
fprintf (headerfile, "heim_visible_string %s;\n", name);
|
||||
break;
|
||||
case TOID :
|
||||
space(level);
|
||||
fprintf (headerfile, "heim_oid %s;\n", name);
|
||||
|
@@ -202,6 +202,9 @@ copy_type (const char *from, const char *to, const Type *t, int preserve)
|
||||
case TUniversalString:
|
||||
copy_primitive ("universal_string", from, to);
|
||||
break;
|
||||
case TVisibleString:
|
||||
copy_primitive ("visible_string", from, to);
|
||||
break;
|
||||
case TTag:
|
||||
copy_type (from, to, t->subtype, preserve);
|
||||
break;
|
||||
|
@@ -74,6 +74,7 @@ is_primitive_type(int type)
|
||||
case TIA5String:
|
||||
case TBMPString:
|
||||
case TUniversalString:
|
||||
case TVisibleString:
|
||||
case TNull:
|
||||
return 1;
|
||||
default:
|
||||
@@ -191,6 +192,11 @@ find_tag (const Type *t,
|
||||
*ty = PRIM;
|
||||
*tag = UT_UniversalString;
|
||||
break;
|
||||
case TVisibleString:
|
||||
*cl = ASN1_C_UNIV;
|
||||
*ty = PRIM;
|
||||
*tag = UT_VisibleString;
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
@@ -580,6 +586,9 @@ decode_type (const char *name, const Type *t, int optional,
|
||||
case TUniversalString:
|
||||
decode_primitive ("universal_string", name, forwstr);
|
||||
break;
|
||||
case TVisibleString:
|
||||
decode_primitive ("visible_string", name, forwstr);
|
||||
break;
|
||||
case TNull:
|
||||
fprintf (codefile, "/* NULL */\n");
|
||||
break;
|
||||
@@ -620,6 +629,7 @@ generate_type_decode (const Symbol *s)
|
||||
case TIA5String:
|
||||
case TBMPString:
|
||||
case TUniversalString:
|
||||
case TVisibleString:
|
||||
case TUTCTime:
|
||||
case TNull:
|
||||
case TEnumerated:
|
||||
|
@@ -467,6 +467,10 @@ encode_type (const char *name, const Type *t, const char *tmpstr)
|
||||
encode_primitive ("universal_string", name);
|
||||
constructed = 0;
|
||||
break;
|
||||
case TVisibleString:
|
||||
encode_primitive ("visible_string", name);
|
||||
constructed = 0;
|
||||
break;
|
||||
case TNull:
|
||||
fprintf (codefile, "/* NULL */\n");
|
||||
constructed = 0;
|
||||
@@ -503,6 +507,7 @@ generate_type_encode (const Symbol *s)
|
||||
case TIA5String:
|
||||
case TBMPString:
|
||||
case TUniversalString:
|
||||
case TVisibleString:
|
||||
case TNull:
|
||||
case TBitString:
|
||||
case TEnumerated:
|
||||
|
@@ -160,6 +160,9 @@ free_type (const char *name, const Type *t, int preserve)
|
||||
case TUniversalString:
|
||||
free_primitive ("universal_string", name);
|
||||
break;
|
||||
case TVisibleString:
|
||||
free_primitive ("visible_string", name);
|
||||
break;
|
||||
case TTag:
|
||||
free_type (name, t->subtype, preserve);
|
||||
break;
|
||||
|
@@ -238,6 +238,9 @@ length_type (const char *name, const Type *t,
|
||||
case TUniversalString:
|
||||
length_primitive ("universal_string", name, variable);
|
||||
break;
|
||||
case TVisibleString:
|
||||
length_primitive ("visible_string", name, variable);
|
||||
break;
|
||||
case TNull:
|
||||
fprintf (codefile, "/* NULL */\n");
|
||||
break;
|
||||
|
@@ -659,6 +659,11 @@ RestrictedCharactedStringType: kw_GeneralString
|
||||
$$ = new_tag(ASN1_C_UNIV, UT_PrintableString,
|
||||
TE_EXPLICIT, new_type(TPrintableString));
|
||||
}
|
||||
| kw_VisibleString
|
||||
{
|
||||
$$ = new_tag(ASN1_C_UNIV, UT_VisibleString,
|
||||
TE_EXPLICIT, new_type(TVisibleString));
|
||||
}
|
||||
| kw_IA5String
|
||||
{
|
||||
$$ = new_tag(ASN1_C_UNIV, UT_IA5String,
|
||||
|
@@ -60,7 +60,8 @@ enum typetype {
|
||||
TUTCTime,
|
||||
TUTF8String,
|
||||
TBMPString,
|
||||
TUniversalString
|
||||
TUniversalString,
|
||||
TVisibleString
|
||||
};
|
||||
|
||||
typedef enum typetype Typetype;
|
||||
|
Reference in New Issue
Block a user