| 477 } |
477 } |
| 478 |
478 |
| 479 static gchar * |
479 static gchar * |
| 480 x509_common_name (PurpleCertificate *crt) |
480 x509_common_name (PurpleCertificate *crt) |
| 481 { |
481 { |
| 482 return NULL; |
482 CERTCertificate *crt_dat; |
| |
483 char *nss_cn; |
| |
484 gchar *ret_cn; |
| |
485 |
| |
486 g_return_val_if_fail(crt, NULL); |
| |
487 g_return_val_if_fail(crt->scheme == &x509_nss, NULL); |
| |
488 |
| |
489 crt_dat = X509_NSS_DATA(crt); |
| |
490 g_return_val_if_fail(crt_dat, NULL); |
| |
491 |
| |
492 /* Q: |
| |
493 Why get a newly allocated string out of NSS, strdup it, and then |
| |
494 return the new copy? |
| |
495 |
| |
496 A: |
| |
497 The NSS LXR docs state that I should use the NSPR free functions on |
| |
498 the strings that the NSS cert functions return. Since the libpurple |
| |
499 API expects a g_free()-able string, we make our own copy and return |
| |
500 that. |
| |
501 |
| |
502 NSPR is something of a prima donna. */ |
| |
503 |
| |
504 nss_cn = CERT_GetCommonName( &(crt_dat->subject) ); |
| |
505 ret_cn = g_strdup(nss_cn); |
| |
506 PORT_Free(nss_cn); |
| |
507 |
| |
508 return ret_cn; |
| 483 } |
509 } |
| 484 |
510 |
| 485 static gboolean |
511 static gboolean |
| 486 x509_check_name (PurpleCertificate *crt, const gchar *name) |
512 x509_check_name (PurpleCertificate *crt, const gchar *name) |
| 487 { |
513 { |