Show realname and email from public key during GETKEY verification.
authorPekka Riikonen <priikone@silcnet.org>
Thu, 17 May 2007 09:38:47 +0000 (09:38 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Thu, 17 May 2007 09:38:47 +0000 (09:38 +0000)
CHANGES
apps/irssi/src/fe-common/silc/module-formats.c
apps/irssi/src/fe-common/silc/module-formats.h
apps/irssi/src/silc/core/client_ops.c

diff --git a/CHANGES b/CHANGES
index c1bdcd6796f28ca98df04bcf6ca70f55b14d5213..55fb3e5da77ab0796b8568619fd4d906813a31ab 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,10 @@
+Thu May 17 11:57:40 EEST 2007  Pekka Riikonen <priikone@silcnet.org>
+
+       * Show realname and email address from public key when verifying
+         cached public keys with GETKEY.  Affected files are
+         apps/irssi/src/fe-common/module-formats.[ch] and
+         apps/irssi/src/silc/core/client_ops.c.
+
 Wed May 16 20:41:04 CEST 2007  Jochen Eisinger <coffee@silcnet.org>
 
        * Include SILC Plugin theme.  Affected file is apps/irssi/plugin.theme
index 4bfe1d270ff727f8a7011ab20d17a8a3b6e5c581..40c7d7894dd2a0ae4954de90786d79c4ea495908 100644 (file)
@@ -148,6 +148,7 @@ FORMAT_REC fecommon_silc_formats[] = {
        { "key_agreement_started", "Key agreement is already started with {nick $0}", 1, { 0 } },
        { "key_agreement_denied", "Key agreement cannot be started with yourself", 0 },
        { "pubkey_received", "Received {hilight $0} public key", 1, { 0 } },
+       { "pubkey_received_client", "Client {hilight $0} ($1 $2)", 3, { 0, 0, 0 } },
        { "pubkey_fingerprint", "Fingerprint and babbleprint for the {hilight $0} key are %: $1", 2, { 0, 0 } },
        { "pubkey_babbleprint", " $0", 1, { 0 } },
        { "pubkey_unsupported", "We don't support {hilight $0} public key type {hilight $1}", 2, { 0, 0 } },
@@ -160,7 +161,8 @@ FORMAT_REC fecommon_silc_formats[] = {
        { "pubkey_maybe_expired", "It is possible that the key has expired or changed", 0 },
        { "pubkey_mitm_attack", "It is also possible that someone is performing a man-in-the-middle attack", 0 },
        { "pubkey_notkey", "Server did not return any public key", 0 },
-       { "pubkey_verified", "Verified successfully $0 {hilight $1}'s cached public key", 2, { 0, 0 } },
+       { "pubkey_verified", "Verified successfully server {hilight $0} cached public key", 1, { 0 } },
+       { "pubkey_verified_client", "Verified successfully user {hilight $0}'s ($1 $2) cached public key", 3, { 0, 0, 0 } },
        { "pubkey_notverified", "Could not verify $0 {hilight $1}'s public key", 2, { 0, 0 } },
 
        /* Misc messages */
index 8f174be1e7a0a6fdec6f64a9aa6369b2e1fdaa97..4fdae389e710e4b78671e6fb16cffad9a0915f91 100644 (file)
@@ -142,6 +142,7 @@ enum {
   SILCTXT_KEY_AGREEMENT_ALREADY_STARTED,
   SILCTXT_KEY_AGREEMENT_SELF_DENIED,
   SILCTXT_PUBKEY_RECEIVED,
+  SILCTXT_PUBKEY_RECEIVED_CLIENT,
   SILCTXT_PUBKEY_FINGERPRINT,
   SILCTXT_PUBKEY_BABBLEPRINT,
   SILCTXT_PUBKEY_UNSUPPORTED,
@@ -155,6 +156,7 @@ enum {
   SILCTXT_PUBKEY_MITM_ATTACK,
   SILCTXT_PUBKEY_NOKEY,
   SILCTXT_PUBKEY_VERIFIED,
+  SILCTXT_PUBKEY_VERIFIED_CLIENT,
   SILCTXT_PUBKEY_NOTVERIFIED,
 
   SILCTXT_FILL_4,
index 8ce4d2b18a9471af7c6391cb7aeae1d94ee85406..5dc0fb5c2390582116ebc243576558ea774166e0 100644 (file)
@@ -1360,10 +1360,26 @@ void silc_getkey_cb(bool success, void *context)
   char *name = (getkey->id_type == SILC_ID_CLIENT ?
                ((SilcClientEntry)getkey->entry)->nickname :
                ((SilcServerEntry)getkey->entry)->server_name);
+  SilcPublicKey public_key = (getkey->id_type == SILC_ID_CLIENT ?
+                             ((SilcClientEntry)getkey->entry)->public_key :
+                             ((SilcServerEntry)getkey->entry)->public_key);
+  SilcSILCPublicKey silc_pubkey;
+
+  silc_pubkey = silc_pkcs_get_context(SILC_PKCS_SILC, public_key);
 
   if (success) {
-    printformat_module("fe-common/silc", NULL, NULL,
-                      MSGLEVEL_CRAP, SILCTXT_PUBKEY_VERIFIED, entity, name);
+    if (getkey->id_type == SILC_ID_CLIENT)
+      printformat_module("fe-common/silc", NULL, NULL,
+                        MSGLEVEL_CRAP, SILCTXT_PUBKEY_VERIFIED_CLIENT,
+                        name,
+                        silc_pubkey->identifier.realname ?
+                        silc_pubkey->identifier.realname : "",
+                        silc_pubkey->identifier.email ?
+                        silc_pubkey->identifier.email : "");
+    else
+      printformat_module("fe-common/silc", NULL, NULL,
+                        MSGLEVEL_CRAP, SILCTXT_PUBKEY_VERIFIED,
+                        entity, name);
   } else {
     printformat_module("fe-common/silc", NULL, NULL,
                       MSGLEVEL_CRAP, SILCTXT_PUBKEY_NOTVERIFIED,
@@ -2329,6 +2345,7 @@ silc_verify_public_key_internal(SilcClient client, SilcClientConnection conn,
   char file[256], filename[256], filename2[256], *ipf, *hostf = NULL;
   char *fingerprint, *babbleprint, *format;
   SilcPublicKey local_pubkey;
+  SilcSILCPublicKey silc_pubkey;
   SilcUInt16 port;
   const char *hostname, *ip;
   unsigned char *pk;
@@ -2357,6 +2374,8 @@ silc_verify_public_key_internal(SilcClient client, SilcClientConnection conn,
     return;
   }
 
+  silc_pubkey = silc_pkcs_get_context(SILC_PKCS_SILC, public_key);
+
   pw = getpwuid(getuid());
   if (!pw) {
     if (completion)
@@ -2433,6 +2452,13 @@ silc_verify_public_key_internal(SilcClient client, SilcClientConnection conn,
     printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
                       SILCTXT_PUBKEY_RECEIVED,verify->entity_name ?
                       verify->entity_name : entity);
+    if (conn_type == SILC_CONN_CLIENT && name &&
+       silc_pubkey->identifier.realname)
+      printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+                        SILCTXT_PUBKEY_RECEIVED_CLIENT, name,
+                        silc_pubkey->identifier.realname,
+                        silc_pubkey->identifier.email ?
+                        silc_pubkey->identifier.email : "");
     printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
                       SILCTXT_PUBKEY_FINGERPRINT, entity, fingerprint);
     printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
@@ -2457,6 +2483,13 @@ silc_verify_public_key_internal(SilcClient client, SilcClientConnection conn,
       printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
                         SILCTXT_PUBKEY_RECEIVED,verify->entity_name ?
                         verify->entity_name : entity);
+      if (conn_type == SILC_CONN_CLIENT && name &&
+         silc_pubkey->identifier.realname)
+       printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+                          SILCTXT_PUBKEY_RECEIVED_CLIENT, name,
+                          silc_pubkey->identifier.realname,
+                          silc_pubkey->identifier.email ?
+                          silc_pubkey->identifier.email : "");
       printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
                         SILCTXT_PUBKEY_FINGERPRINT, entity, fingerprint);
       printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
@@ -2480,6 +2513,13 @@ silc_verify_public_key_internal(SilcClient client, SilcClientConnection conn,
       printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
                         SILCTXT_PUBKEY_RECEIVED,verify->entity_name ?
                         verify->entity_name : entity);
+      if (conn_type == SILC_CONN_CLIENT && name &&
+         silc_pubkey->identifier.realname)
+       printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+                          SILCTXT_PUBKEY_RECEIVED_CLIENT, name,
+                          silc_pubkey->identifier.realname,
+                          silc_pubkey->identifier.email ?
+                          silc_pubkey->identifier.email : "");
       printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
                         SILCTXT_PUBKEY_FINGERPRINT, entity, fingerprint);
       printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
@@ -2503,6 +2543,13 @@ silc_verify_public_key_internal(SilcClient client, SilcClientConnection conn,
       printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
                         SILCTXT_PUBKEY_RECEIVED,verify->entity_name ?
                         verify->entity_name : entity);
+      if (conn_type == SILC_CONN_CLIENT && name &&
+         silc_pubkey->identifier.realname)
+       printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+                          SILCTXT_PUBKEY_RECEIVED_CLIENT, name,
+                          silc_pubkey->identifier.realname,
+                          silc_pubkey->identifier.email ?
+                          silc_pubkey->identifier.email : "");
       printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
                         SILCTXT_PUBKEY_FINGERPRINT, entity, fingerprint);
       printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,