/* This is a variant of gpgsm_print_name sending it output to an estream. */ void gpgsm_es_print_name2 (estream_t fp, const char *name, int translate) { const unsigned char *s = (const unsigned char *)name; int i; if (!s) { es_fputs (_("[Error - No name]"), fp); } else if (*s == '<') { const char *s2 = strchr ( (char*)s+1, '>'); if (s2) { if (translate) es_write_sanitized_utf8_buffer (fp, s + 1, s2 - (char*)s - 1, NULL, NULL); else es_write_sanitized (fp, s + 1, s2 - (char*)s - 1, NULL, NULL); } } else if (*s == '(') { pretty_es_print_sexp (fp, s, gcry_sexp_canon_len (s, 0, NULL, NULL)); } else if (!((*s >= '0' && *s < '9') || (*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z'))) es_fputs (_("[Error - invalid encoding]"), fp); else { struct dn_array_s *dn = parse_dn (s); if (!dn) es_fputs (_("[Error - invalid DN]"), fp); else { print_dn_parts (NULL, fp, dn, translate); for (i=0; dn[i].key; i++) { xfree (dn[i].key); xfree (dn[i].value); } xfree (dn); } } }
/* Format an RFC2253 encoded DN or GeneralName. Caller needs to release the return ed string. This function will never return NULL. */ char * gpa_format_dn (const char *name) { char *retval = NULL; if (!name) retval = g_strdup (_("[Error - No name]")); else if (*name == '<') { const char *s = strchr (name+1, '>'); if (s) retval = g_strndup (name+1, s - (name+1)); } else if (*name == '(') retval = g_strdup (_("[Error - Encoding not supported]")); else if (g_ascii_isalnum (*name)) { struct dn_array_s *dn; int i; dn = parse_dn (name); if (dn) { GString *output = g_string_sized_new (strlen (name)); print_dn_parts (output, dn); retval = g_string_free (output, FALSE); for (i=0; dn[i].key; i++) { g_free (dn[i].key); g_free (dn[i].value); } g_free (dn); } } if (!retval) retval = g_strdup (_("[Error - Invalid encoding]")); return retval; }
Kleo::DN::DN( const char * utf8DN ) { d = new Private(); d->ref(); if ( utf8DN ) d->attributes = parse_dn( (const unsigned char*)utf8DN ); }
Kleo::DN::DN( const QString & dn ) { d = new Private(); d->ref(); d->attributes = parse_dn( dn ); }
static QValueVector<Kleo::DN::Attribute> parse_dn( const QString & dn ) { return parse_dn( (const unsigned char*)dn.utf8().data() ); }