mirror of https://github.com/wolfSSL/wolfssl.git
add support for spaces around '=' with x509 name print
parent
ff7626419e
commit
2caee1c7c5
23
src/x509.c
23
src/x509.c
|
@ -13051,6 +13051,7 @@ static int wolfSSL_EscapeString_RFC2253(char* in, word32 inSz,
|
|||
* RFC22523 currently implemented.
|
||||
* XN_FLAG_DN_REV - print name reversed. Automatically done by
|
||||
* XN_FLAG_RFC2253.
|
||||
* XN_FLAG_SPC_EQ - spaces before and after '=' character
|
||||
*
|
||||
* Returns WOLFSSL_SUCCESS (1) on success, WOLFSSL_FAILURE (0) on failure.
|
||||
*/
|
||||
|
@ -13058,6 +13059,8 @@ int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509_NAME* name,
|
|||
int indent, unsigned long flags)
|
||||
{
|
||||
int i, count = 0, nameStrSz = 0, escapeSz = 0;
|
||||
int eqSpace = 0;
|
||||
char eqStr[4];
|
||||
char* tmp = NULL;
|
||||
char* nameStr = NULL;
|
||||
const char *buf = NULL;
|
||||
|
@ -13070,6 +13073,15 @@ int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509_NAME* name,
|
|||
if ((name == NULL) || (name->sz == 0) || (bio == NULL))
|
||||
return WOLFSSL_FAILURE;
|
||||
|
||||
XMEMSET(eqStr, 0, sizeof(eqStr));
|
||||
if (flags & XN_FLAG_SPC_EQ) {
|
||||
eqSpace = 2;
|
||||
XSTRNCPY(eqStr, " = ", 4);
|
||||
}
|
||||
else {
|
||||
XSTRNCPY(eqStr, "=", 4);
|
||||
}
|
||||
|
||||
for (i = 0; i < indent; i++) {
|
||||
if (wolfSSL_BIO_write(bio, " ", 1) != 1)
|
||||
return WOLFSSL_FAILURE;
|
||||
|
@ -13114,14 +13126,15 @@ int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509_NAME* name,
|
|||
if (len == 0 || buf == NULL)
|
||||
return WOLFSSL_FAILURE;
|
||||
|
||||
tmpSz = nameStrSz + len + 4; /* + 4 for '=', comma space and '\0'*/
|
||||
/* + 4 for '=', comma space and '\0'*/
|
||||
tmpSz = nameStrSz + len + 4 + eqSpace;
|
||||
tmp = (char*)XMALLOC(tmpSz, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
if (tmp == NULL) {
|
||||
return WOLFSSL_FAILURE;
|
||||
}
|
||||
|
||||
if (i < count - 1) {
|
||||
if (XSNPRINTF(tmp, (size_t)tmpSz, "%s=%s, ", buf, nameStr)
|
||||
if (XSNPRINTF(tmp, (size_t)tmpSz, "%s%s%s, ", buf, eqStr, nameStr)
|
||||
>= tmpSz)
|
||||
{
|
||||
WOLFSSL_MSG("buffer overrun");
|
||||
|
@ -13129,17 +13142,17 @@ int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509_NAME* name,
|
|||
return WOLFSSL_FAILURE;
|
||||
}
|
||||
|
||||
tmpSz = len + nameStrSz + 3; /* 3 for '=', comma space */
|
||||
tmpSz = len + nameStrSz + 3 + eqSpace; /* 3 for '=', comma space */
|
||||
}
|
||||
else {
|
||||
if (XSNPRINTF(tmp, (size_t)tmpSz, "%s=%s", buf, nameStr)
|
||||
if (XSNPRINTF(tmp, (size_t)tmpSz, "%s%s%s", buf, eqStr, nameStr)
|
||||
>= tmpSz)
|
||||
{
|
||||
WOLFSSL_MSG("buffer overrun");
|
||||
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
return WOLFSSL_FAILURE;
|
||||
}
|
||||
tmpSz = len + nameStrSz + 1; /* 1 for '=' */
|
||||
tmpSz = len + nameStrSz + 1 + eqSpace; /* 1 for '=' */
|
||||
if (bio->type != WOLFSSL_BIO_FILE && bio->type != WOLFSSL_BIO_MEMORY)
|
||||
++tmpSz; /* include the terminating null when not writing to a
|
||||
* file.
|
||||
|
|
12
tests/api.c
12
tests/api.c
|
@ -33467,6 +33467,7 @@ static int test_wolfSSL_X509_NAME_print_ex(void)
|
|||
X509_NAME* name = NULL;
|
||||
|
||||
const char* expNormal = "C=US, CN=wolfssl.com";
|
||||
const char* expEqSpace = "C = US, CN = wolfssl.com";
|
||||
const char* expReverse = "CN=wolfssl.com, C=US";
|
||||
|
||||
const char* expNotEscaped = "C= US,+\"\\ , CN=#wolfssl.com<>;";
|
||||
|
@ -33524,6 +33525,17 @@ static int test_wolfSSL_X509_NAME_print_ex(void)
|
|||
BIO_free(membio);
|
||||
membio = NULL;
|
||||
|
||||
/* Test with XN_FLAG_ONELINE which should enable XN_FLAG_SPC_EQ for
|
||||
spaces aroun '=' */
|
||||
ExpectNotNull(membio = BIO_new(BIO_s_mem()));
|
||||
ExpectIntEQ(X509_NAME_print_ex(membio, name, 0, XN_FLAG_ONELINE),
|
||||
WOLFSSL_SUCCESS);
|
||||
ExpectIntGE((memSz = BIO_get_mem_data(membio, &mem)), 0);
|
||||
ExpectIntEQ(memSz, XSTRLEN(expEqSpace));
|
||||
ExpectIntEQ(XSTRNCMP((char*)mem, expEqSpace, XSTRLEN(expEqSpace)), 0);
|
||||
BIO_free(membio);
|
||||
membio = NULL;
|
||||
|
||||
/* Test flags: XN_FLAG_RFC2253 - should be reversed */
|
||||
ExpectNotNull(membio = BIO_new(BIO_s_mem()));
|
||||
ExpectIntEQ(X509_NAME_print_ex(membio, name, 0,
|
||||
|
|
|
@ -50,7 +50,6 @@
|
|||
#define X509_FLAG_NO_IDS (1UL << 12)
|
||||
|
||||
#define XN_FLAG_FN_SN 0
|
||||
#define XN_FLAG_ONELINE 0
|
||||
#define XN_FLAG_COMPAT 0
|
||||
#define XN_FLAG_RFC2253 1
|
||||
#define XN_FLAG_SEP_COMMA_PLUS (1 << 16)
|
||||
|
@ -68,6 +67,7 @@
|
|||
#define XN_FLAG_FN_ALIGN (1 << 25)
|
||||
|
||||
#define XN_FLAG_MULTILINE 0xFFFF
|
||||
#define XN_FLAG_ONELINE (XN_FLAG_SEP_CPLUS_SPC | XN_FLAG_SPC_EQ | XN_FLAG_FN_SN)
|
||||
|
||||
/*
|
||||
* All of these aren't actually used in wolfSSL. Some are included to
|
||||
|
|
Loading…
Reference in New Issue