From 0c2180d1de95a69ed34ca142365d3b294996308e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Thu, 2 Aug 2007 22:20:25 +0000 Subject: [PATCH] (_hx509_Name_to_string): make printableString handle space (0x20) diffrences as required by rfc3280. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21797 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/hx509/name.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/hx509/name.c b/lib/hx509/name.c index 5456bd620..7e472c30d 100644 --- a/lib/hx509/name.c +++ b/lib/hx509/name.c @@ -252,6 +252,13 @@ _hx509_Name_to_string(const Name *n, char **str) * bytes. */ +static void +prune_space(const unsigned char **s) +{ + while (**s == ' ') + (*s)++; +} + int _hx509_name_ds_cmp(const DirectoryString *ds1, const DirectoryString *ds2) { @@ -269,9 +276,22 @@ _hx509_name_ds_cmp(const DirectoryString *ds1, const DirectoryString *ds2) c = der_heim_octet_string_cmp(&ds1->u.teletexString, &ds2->u.teletexString); break; - case choice_DirectoryString_printableString: - c = strcasecmp(ds1->u.printableString, ds2->u.printableString); + case choice_DirectoryString_printableString: { + const unsigned char *s1 = (unsigned char*)ds1->u.printableString; + const unsigned char *s2 = (unsigned char*)ds2->u.printableString; + prune_space(&s1); prune_space(&s2); + while (*s1 && *s2) { + if (toupper(*s1) != toupper(*s2)) { + c = toupper(*s1) - toupper(*s2); + break; + } + if (*s1 == ' ') { prune_space(&s1); prune_space(&s2); } + else { s1++; s2++; } + } + prune_space(&s1); prune_space(&s2); + c = *s1 - *s2; break; + } case choice_DirectoryString_utf8String: c = strcmp(ds1->u.utf8String, ds2->u.utf8String); break;