1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-09 08:58:35 +03:00

s4/drsuapi: ber_read_partial_OID_String() implementation

This commit is contained in:
Kamen Mazdrashki 2009-09-25 17:29:05 +03:00 committed by Matthias Dieter Wallnöfer
parent 55dfc116f4
commit 540759ec4d
2 changed files with 37 additions and 0 deletions

View File

@ -656,6 +656,42 @@ nomem:
return false;
}
/**
* Deserialize partial OID string.
* Partial OIDs are in the form:
* 1:2.5.6:0x81
* 1:2.5.6:0x8182
*/
bool ber_read_partial_OID_String(TALLOC_CTX *mem_ctx, DATA_BLOB blob, const char **partial_oid)
{
size_t bytes_left;
size_t bytes_eaten;
char *identifier = NULL;
char *tmp_oid = NULL;
if (!_ber_read_OID_String_impl(mem_ctx, blob, (const char **)&tmp_oid, &bytes_eaten))
return false;
if (bytes_eaten < blob.length) {
bytes_left = blob.length - bytes_eaten;
identifier = hex_encode_talloc(mem_ctx, &blob.data[bytes_eaten], bytes_left);
if (!identifier) goto nomem;
*partial_oid = talloc_asprintf_append_buffer(tmp_oid, ":0x%s", identifier);
if (!*partial_oid) goto nomem;
TALLOC_FREE(identifier);
} else {
*partial_oid = tmp_oid;
}
return true;
nomem:
TALLOC_FREE(identifier);
TALLOC_FREE(tmp_oid);
return false;
}
/* read an object ID from a ASN1 buffer */
bool asn1_read_OID(struct asn1_data *data, TALLOC_CTX *mem_ctx, const char **OID)
{

View File

@ -84,6 +84,7 @@ bool asn1_start_tag(struct asn1_data *data, uint8_t tag);
bool asn1_end_tag(struct asn1_data *data);
int asn1_tag_remaining(struct asn1_data *data);
bool ber_read_OID_String(TALLOC_CTX *mem_ctx, DATA_BLOB blob, const char **OID);
bool ber_read_partial_OID_String(TALLOC_CTX *mem_ctx, DATA_BLOB blob, const char **partial_oid);
bool asn1_read_OID(struct asn1_data *data, TALLOC_CTX *mem_ctx, const char **OID);
bool asn1_check_OID(struct asn1_data *data, const char *OID);
bool asn1_read_LDAPString(struct asn1_data *data, TALLOC_CTX *mem_ctx, char **s);