/pidgin/main: 89bda8c0750d: Copy changes from datallah's 2948449...

Mark Doliner <[email protected]>
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: 89bda8c0750d380f69aa838284ae04983fa02809
Author:	 Mark Doliner <[email protected]>
Date:	 2014-07-07 23:45 -0700
Branch:	 default
URL: https://hg.pidgin.im/pidgin/main/rev/89bda8c0750d

Description:

Copy changes from datallah's 2948449ffd12 from the
release-2.x.y branch to default.

I dropped these changes when I merged that branch into default because
the code had moved and it didn't seem appropriate to re-do the change
in the merge commit.

The only remaining change from that commit is to add a "View Issuer
Certificate" button to the accept dialog. I think it's a good idea to
give users a way to view info about the cert chain, but I'm not going
to spend the time to figure out how to do it in default. If anyone else
wants to, feel free.

If anyone is keeping a list of starter tasks for aspiring patch writers,
this is a great one.

Also, why the hell is the x509_display_string() function in the
library-specific code? The function is duplicated and almost 100% identical
in ssl-gnutls.c and ssl-nss.c. Ugh.

Refs #7034
https://developer.pidgin.im/ticket/7034

diffstat:

 libpurple/plugins/ssl/ssl-gnutls.c |  10 +++++++++-
 libpurple/plugins/ssl/ssl-nss.c    |  11 ++++++++++-
 2 files changed, 19 insertions(+), 2 deletions(-)

diffs (106 lines):

diff --git a/libpurple/plugins/ssl/ssl-gnutls.c b/libpurple/plugins/ssl/ssl-gnutls.c
--- a/libpurple/plugins/ssl/ssl-gnutls.c
+++ b/libpurple/plugins/ssl/ssl-gnutls.c
@@ -1232,9 +1232,10 @@ x509_display_string(PurpleCertificate *c
 {
 	gchar *sha_asc;
 	GByteArray *sha_bin;
-	gchar *cn;
+	gchar *cn, *issuer_id;
 	gint64 activation, expiration;
 	gchar *activ_str, *expir_str;
+	gboolean self_signed;
 	gchar *text;
 #if GLIB_CHECK_VERSION(2,26,0)
 	GDateTime *act_dt, *exp_dt;
@@ -1249,6 +1250,8 @@ x509_display_string(PurpleCertificate *c
 	/* TODO: Will break on CA certs */
 	cn = x509_common_name(crt);
 
+	issuer_id = purple_certificate_get_issuer_unique_id(crt);
+
 	/* Get the certificate times */
 	/* TODO: Check the times against localtime */
 	/* TODO: errorcheck? */
@@ -1271,19 +1274,24 @@ x509_display_string(PurpleCertificate *c
 	expir_str = g_strdup(ctime(&expiration));
 #endif
 
+	self_signed = purple_certificate_signed_by(crt, crt);
+
 	/* Make messages */
 	text = g_strdup_printf(
 			_("Common name: %s\n\n"
+			  "Issued by: %s\n\n"
 			  "Fingerprint (SHA1): %s\n\n"
 			  "Activation date: %s\n"
 			  "Expiration date: %s\n"),
 			cn ? cn : "(null)",
+			self_signed ? _("(self-signed)") : (issuer_id ? issuer_id : "(null)"),
 			sha_asc ? sha_asc : "(null)",
 			activ_str ? activ_str : "(null)",
 			expir_str ? expir_str : "(null)");
 
 	/* Cleanup */
 	g_free(cn);
+	g_free(issuer_id);
 	g_free(sha_asc);
 	g_free(activ_str);
 	g_free(expir_str);
diff --git a/libpurple/plugins/ssl/ssl-nss.c b/libpurple/plugins/ssl/ssl-nss.c
--- a/libpurple/plugins/ssl/ssl-nss.c
+++ b/libpurple/plugins/ssl/ssl-nss.c
@@ -951,9 +951,10 @@ x509_display_string(PurpleCertificate *c
 {
 	gchar *sha_asc;
 	GByteArray *sha_bin;
-	gchar *cn;
+	gchar *cn, *issuer_id;
 	gint64 activation, expiration;
 	gchar *activ_str, *expir_str;
+	gboolean self_signed;
 	gchar *text;
 #if GLIB_CHECK_VERSION(2,26,0)
 	GDateTime *act_dt, *exp_dt;
@@ -967,6 +968,8 @@ x509_display_string(PurpleCertificate *c
 	/* TODO: Will break on CA certs */
 	cn = x509_common_name(crt);
 
+	issuer_id = purple_certificate_get_issuer_unique_id(crt);
+
 	/* Get the certificate times */
 	/* TODO: Check the times against localtime */
 	/* TODO: errorcheck? */
@@ -975,6 +978,7 @@ x509_display_string(PurpleCertificate *c
 				   "Failed to get certificate times!\n");
 		activation = expiration = 0;
 	}
+
 #if GLIB_CHECK_VERSION(2,26,0)
 	act_dt = g_date_time_new_from_unix_local(activation);
 	activ_str = g_date_time_format(act_dt, "%c");
@@ -988,19 +992,24 @@ x509_display_string(PurpleCertificate *c
 	expir_str = g_strdup(ctime(&expiration));
 #endif
 
+	self_signed = purple_certificate_signed_by(crt, crt);
+
 	/* Make messages */
 	text = g_strdup_printf(
 			_("Common name: %s\n\n"
+			  "Issued by: %s\n\n"
 			  "Fingerprint (SHA1): %s\n\n"
 			  "Activation date: %s\n"
 			  "Expiration date: %s\n"),
 			cn ? cn : "(null)",
+			self_signed ? _("(self-signed)") : (issuer_id ? issuer_id : "(null)"),
 			sha_asc ? sha_asc : "(null)",
 			activ_str ? activ_str : "(null)",
 			expir_str ? expir_str : "(null)");
 
 	/* Cleanup */
 	g_free(cn);
+	g_free(issuer_id);
 	g_free(sha_asc);
 	g_free(activ_str);
 	g_free(expir_str);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.