Skip to content

Commit 2caee1c

Browse files
add support for spaces around '=' with x509 name print
1 parent ff76264 commit 2caee1c

3 files changed

Lines changed: 31 additions & 6 deletions

File tree

src/x509.c

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13051,13 +13051,16 @@ static int wolfSSL_EscapeString_RFC2253(char* in, word32 inSz,
1305113051
* RFC22523 currently implemented.
1305213052
* XN_FLAG_DN_REV - print name reversed. Automatically done by
1305313053
* XN_FLAG_RFC2253.
13054+
* XN_FLAG_SPC_EQ - spaces before and after '=' character
1305413055
*
1305513056
* Returns WOLFSSL_SUCCESS (1) on success, WOLFSSL_FAILURE (0) on failure.
1305613057
*/
1305713058
int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509_NAME* name,
1305813059
int indent, unsigned long flags)
1305913060
{
1306013061
int i, count = 0, nameStrSz = 0, escapeSz = 0;
13062+
int eqSpace = 0;
13063+
char eqStr[4];
1306113064
char* tmp = NULL;
1306213065
char* nameStr = NULL;
1306313066
const char *buf = NULL;
@@ -13070,6 +13073,15 @@ int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509_NAME* name,
1307013073
if ((name == NULL) || (name->sz == 0) || (bio == NULL))
1307113074
return WOLFSSL_FAILURE;
1307213075

13076+
XMEMSET(eqStr, 0, sizeof(eqStr));
13077+
if (flags & XN_FLAG_SPC_EQ) {
13078+
eqSpace = 2;
13079+
XSTRNCPY(eqStr, " = ", 4);
13080+
}
13081+
else {
13082+
XSTRNCPY(eqStr, "=", 4);
13083+
}
13084+
1307313085
for (i = 0; i < indent; i++) {
1307413086
if (wolfSSL_BIO_write(bio, " ", 1) != 1)
1307513087
return WOLFSSL_FAILURE;
@@ -13114,32 +13126,33 @@ int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509_NAME* name,
1311413126
if (len == 0 || buf == NULL)
1311513127
return WOLFSSL_FAILURE;
1311613128

13117-
tmpSz = nameStrSz + len + 4; /* + 4 for '=', comma space and '\0'*/
13129+
/* + 4 for '=', comma space and '\0'*/
13130+
tmpSz = nameStrSz + len + 4 + eqSpace;
1311813131
tmp = (char*)XMALLOC(tmpSz, NULL, DYNAMIC_TYPE_TMP_BUFFER);
1311913132
if (tmp == NULL) {
1312013133
return WOLFSSL_FAILURE;
1312113134
}
1312213135

1312313136
if (i < count - 1) {
13124-
if (XSNPRINTF(tmp, (size_t)tmpSz, "%s=%s, ", buf, nameStr)
13137+
if (XSNPRINTF(tmp, (size_t)tmpSz, "%s%s%s, ", buf, eqStr, nameStr)
1312513138
>= tmpSz)
1312613139
{
1312713140
WOLFSSL_MSG("buffer overrun");
1312813141
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
1312913142
return WOLFSSL_FAILURE;
1313013143
}
1313113144

13132-
tmpSz = len + nameStrSz + 3; /* 3 for '=', comma space */
13145+
tmpSz = len + nameStrSz + 3 + eqSpace; /* 3 for '=', comma space */
1313313146
}
1313413147
else {
13135-
if (XSNPRINTF(tmp, (size_t)tmpSz, "%s=%s", buf, nameStr)
13148+
if (XSNPRINTF(tmp, (size_t)tmpSz, "%s%s%s", buf, eqStr, nameStr)
1313613149
>= tmpSz)
1313713150
{
1313813151
WOLFSSL_MSG("buffer overrun");
1313913152
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
1314013153
return WOLFSSL_FAILURE;
1314113154
}
13142-
tmpSz = len + nameStrSz + 1; /* 1 for '=' */
13155+
tmpSz = len + nameStrSz + 1 + eqSpace; /* 1 for '=' */
1314313156
if (bio->type != WOLFSSL_BIO_FILE && bio->type != WOLFSSL_BIO_MEMORY)
1314413157
++tmpSz; /* include the terminating null when not writing to a
1314513158
* file.

tests/api.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33467,6 +33467,7 @@ static int test_wolfSSL_X509_NAME_print_ex(void)
3346733467
X509_NAME* name = NULL;
3346833468

3346933469
const char* expNormal = "C=US, CN=wolfssl.com";
33470+
const char* expEqSpace = "C = US, CN = wolfssl.com";
3347033471
const char* expReverse = "CN=wolfssl.com, C=US";
3347133472

3347233473
const char* expNotEscaped = "C= US,+\"\\ , CN=#wolfssl.com<>;";
@@ -33524,6 +33525,17 @@ static int test_wolfSSL_X509_NAME_print_ex(void)
3352433525
BIO_free(membio);
3352533526
membio = NULL;
3352633527

33528+
/* Test with XN_FLAG_ONELINE which should enable XN_FLAG_SPC_EQ for
33529+
spaces aroun '=' */
33530+
ExpectNotNull(membio = BIO_new(BIO_s_mem()));
33531+
ExpectIntEQ(X509_NAME_print_ex(membio, name, 0, XN_FLAG_ONELINE),
33532+
WOLFSSL_SUCCESS);
33533+
ExpectIntGE((memSz = BIO_get_mem_data(membio, &mem)), 0);
33534+
ExpectIntEQ(memSz, XSTRLEN(expEqSpace));
33535+
ExpectIntEQ(XSTRNCMP((char*)mem, expEqSpace, XSTRLEN(expEqSpace)), 0);
33536+
BIO_free(membio);
33537+
membio = NULL;
33538+
3352733539
/* Test flags: XN_FLAG_RFC2253 - should be reversed */
3352833540
ExpectNotNull(membio = BIO_new(BIO_s_mem()));
3352933541
ExpectIntEQ(X509_NAME_print_ex(membio, name, 0,

wolfssl/openssl/x509.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
#define X509_FLAG_NO_IDS (1UL << 12)
5151

5252
#define XN_FLAG_FN_SN 0
53-
#define XN_FLAG_ONELINE 0
5453
#define XN_FLAG_COMPAT 0
5554
#define XN_FLAG_RFC2253 1
5655
#define XN_FLAG_SEP_COMMA_PLUS (1 << 16)
@@ -68,6 +67,7 @@
6867
#define XN_FLAG_FN_ALIGN (1 << 25)
6968

7069
#define XN_FLAG_MULTILINE 0xFFFF
70+
#define XN_FLAG_ONELINE (XN_FLAG_SEP_CPLUS_SPC | XN_FLAG_SPC_EQ | XN_FLAG_FN_SN)
7171

7272
/*
7373
* All of these aren't actually used in wolfSSL. Some are included to

0 commit comments

Comments
 (0)