updates.
authorPekka Riikonen <priikone@silcnet.org>
Thu, 3 May 2001 17:41:18 +0000 (17:41 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Thu, 3 May 2001 17:41:18 +0000 (17:41 +0000)
CHANGES
apps/silcd/protocol.c
apps/silcd/silcd.c
lib/silcclient/protocol.c
lib/silccrypt/silcpkcs.c

diff --git a/CHANGES b/CHANGES
index 9985c83197787843af7c53e5b4fd7719e4d29cde..896dfd00f422be12964e01df6db9b717c8a9accb 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -3,6 +3,13 @@ Thu May  3 21:23:50 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
        * Check minor version as well in the SKE.  Affected files are
          silcd/protocol.c and lib/silcclient/protocol.c.
 
+       * Added --identifier option to the server so that an identifier
+         can be when creating the public key for the server.  Affected
+         file is silcd/silcd.c.
+
+       * Fixed minor decoding bug in silc_pkcs_decode_identifier in
+         lib/silccrypt/silcpkcs.c.
+
 Wed May  2 20:50:49 EEST 2001  Pekka Riikonen <priikone@poseidon.pspt.fi>
 
        * Register default ciphers and stuff when using -C option with
index 19d521a38ee7e740a747625a908ff47076fa8bc8..6069caaf98db9b125c8cd712a9548cb557e892ab 100644 (file)
@@ -146,7 +146,7 @@ SilcSKEStatus silc_ske_check_version(SilcSKE ske, unsigned char *version,
 {
   SilcSKEStatus status = SILC_SKE_STATUS_OK;
   char *cp;
-  int maj = 0, min = 0, build = 0, maj2, min2, build2;
+  int maj = 0, min = 0, build = 0, maj2 = 0, min2 = 0, build2 = 0;
 
   SILC_LOG_INFO(("%s (%s) is version %s", ske->sock->hostname,
                 ske->sock->ip, version));
@@ -191,10 +191,8 @@ SilcSKEStatus silc_ske_check_version(SilcSKE ske, unsigned char *version,
 
   if (maj != maj2)
     status = SILC_SKE_STATUS_BAD_VERSION;
-#if 0
   if (min < min2)
     status = SILC_SKE_STATUS_BAD_VERSION;
-#endif
 
   return status;
 }
index 482df6b49e3e5ce36fa2cef06e9acdae0df42c8c..fad379c5ff3cb278f3d65b93cbe7095ca7840bac 100644 (file)
@@ -49,6 +49,7 @@ static struct option long_opts[] =
   { "create-key-pair", 1, NULL, 'C' },
   { "pkcs", 1, NULL, 10 },
   { "bits", 1, NULL, 11 },
+  { "identifier", 1, NULL, 12 },
 
   { NULL, 0, NULL, 0 }
 };
@@ -57,6 +58,7 @@ static struct option long_opts[] =
 static bool opt_create_keypair = FALSE;
 static char *opt_keypath = NULL;
 static char *opt_pkcs = "rsa";
+static char *opt_identifier = NULL;
 static int opt_bits = 1024;
 
 /* Prints out the usage of silc client */
@@ -76,6 +78,19 @@ Usage: silcd [options]\n\
   -C, --create-key-pair=PATH    Create new public key pair\n\
       --pkcs=PKCS               Set the PKCS of the public key pair\n\
       --bits=VALUE              Set length of the public key pair\n\
+      --identifier=IDENTIFIER   Public key identifier\n\
+\n\
+      The public key identifier may be of the following format:\n\
+\n\
+      UN=<username>, HN=<hostname or IP>, RN=<real name>, E=<email>,\n\
+      O=<organization>, C=<country>\n\
+\n\
+      The UN and HN must be provided, the others are optional.  If the\n\
+      --identifier option is not used an identifier will be created for\n\
+      the public key automatically.\n\
+\n\
+      Example identifier: \"UN=foobar, HN=foo.bar.com, RN=Foo T. Bar, \n\
+                           E=foo@bar.com, C=FI\"\n\
 \n");
   exit(0);
 }
@@ -128,6 +143,10 @@ int main(int argc, char **argv)
          if (optarg)
            opt_bits = atoi(optarg);
          break;
+       case 12:
+         if (optarg)
+           opt_identifier = strdup(optarg);
+         break;
 
        default:
          silc_usage();
@@ -143,7 +162,7 @@ int main(int argc, char **argv)
     silc_hash_register_default();
     silc_hmac_register_default();
     silc_server_create_key_pair(opt_pkcs, opt_bits, opt_keypath,
-                               NULL, NULL, NULL);
+                               opt_identifier, NULL, NULL);
     exit(0);
   }
 
index 988620d8aa61d431a0a32e4734ed4ed64b80b3c2..d4cfae976bb5c8a0f40b8d8ed8023d1824dd3463 100644 (file)
@@ -145,7 +145,7 @@ SilcSKEStatus silc_ske_check_version(SilcSKE ske, unsigned char *version,
   SilcClient client = (SilcClient)ske->user_data;
   SilcSKEStatus status = SILC_SKE_STATUS_OK;
   char *cp;
-  int maj = 0, min = 0, build = 0, maj2, min2, build2;
+  int maj = 0, min = 0, build = 0, maj2 = 0, min2 = 0, build2 = 0;
 
   /* Check for initial version string */
   if (!strstr(version, "SILC-1.0-"))
@@ -183,10 +183,8 @@ SilcSKEStatus silc_ske_check_version(SilcSKE ske, unsigned char *version,
 
   if (maj != maj2)
     status = SILC_SKE_STATUS_BAD_VERSION;
-#if 0
   if (min < min2)
     status = SILC_SKE_STATUS_BAD_VERSION;
-#endif
 
   if (status != SILC_SKE_STATUS_OK)
     client->ops->say(client, conn, 
index 43ee60f3fdeed2a7361ed15456dc998223664837..80ff59baa52c94921dc329846e1f2f6b023e7fab 100644 (file)
@@ -446,8 +446,12 @@ SilcPublicKeyIdentifier silc_pkcs_decode_identifier(char *identifier)
   while (cp) {
     len = strcspn(cp, ",");
     if (len - 1 >= 0 && cp[len - 1] == '\\') {
-      cp += len + 1;
-      continue;
+      while (cp) {
+       cp += len + 1;
+       len = strcspn(cp, ",") + len;
+       if (len - 1 >= 0 && cp[len - 1] != '\\')
+         break;
+      }
     }
 
     item = silc_calloc(len + 1, sizeof(char));