Fix DN printing if last RDN has an empty value

This commit is contained in:
Tobias Brunner
2013-06-11 11:03:12 +02:00
parent 10584df24f
commit f00c350688
+32 -11
View File
@@ -276,6 +276,23 @@ METHOD(identification_t, create_part_enumerator, enumerator_t*,
} }
} }
/**
* Print a separator between two RDNs
*/
static inline bool print_separator(char **buf, size_t *len)
{
int written;
written = snprintf(*buf, *len, ", ");
if (written < 0 || written >= *len)
{
return FALSE;
}
*buf += written;
*len -= written;
return TRUE;
}
/** /**
* Print a DN with all its RDN in a buffer to present it to the user * Print a DN with all its RDN in a buffer to present it to the user
*/ */
@@ -292,8 +309,14 @@ static void dntoa(chunk_t dn, char *buf, size_t len)
{ {
empty = FALSE; empty = FALSE;
oid = asn1_known_oid(oid_data); /* previous RDN was empty but it wasn't the last one */
if (finished && !print_separator(&buf, &len))
{
break;
}
finished = FALSE;
oid = asn1_known_oid(oid_data);
if (oid == OID_UNKNOWN) if (oid == OID_UNKNOWN)
{ {
written = snprintf(buf, len, "%#B=", &oid_data); written = snprintf(buf, len, "%#B=", &oid_data);
@@ -319,21 +342,19 @@ static void dntoa(chunk_t dn, char *buf, size_t len)
buf += written; buf += written;
len -= written; len -= written;
if (data.ptr + data.len != dn.ptr + dn.len) if (!data.ptr)
{ { /* we can't calculate if we're finished, assume we are */
written = snprintf(buf, len, ", "); finished = TRUE;
if (written < 0 || written >= len)
{
break;
}
buf += written;
len -= written;
} }
else else if (data.ptr + data.len == dn.ptr + dn.len)
{ {
finished = TRUE; finished = TRUE;
break; break;
} }
else if (!print_separator(&buf, &len))
{
break;
}
} }
if (empty) if (empty)
{ {