Merged silc_1_0_branch to trunk.
[silc.git] / lib / silcutil / silcutil.c
index 2f75dcc324961963730c60418b39544a262a5800..f665344eee27d456d5e019a8044e12fe92704213 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 1997 - 2002 Pekka Riikonen
+  Copyright (C) 1997 - 2003 Pekka Riikonen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -652,20 +652,33 @@ char *silc_client_chmode(SilcUInt32 mode, const char *cipher, const char *hmac)
   if (mode & SILC_CHANNEL_MODE_FOUNDER_AUTH)
     strncat(string, "f", 1);
 
+  if (mode & SILC_CHANNEL_MODE_CHANNEL_AUTH)
+    strncat(string, "C", 1);
+
   if (mode & SILC_CHANNEL_MODE_SILENCE_USERS)
     strncat(string, "m", 1);
 
   if (mode & SILC_CHANNEL_MODE_SILENCE_OPERS)
     strncat(string, "M", 1);
 
+  if (mode & SILC_CHANNEL_MODE_CIPHER)
+    strncat(string, "c", 1);
+
+  if (mode & SILC_CHANNEL_MODE_HMAC)
+    strncat(string, "h", 1);
+
   if (mode & SILC_CHANNEL_MODE_CIPHER) {
-    if (strlen(cipher) + strlen(string) < sizeof(string))
+    if (strlen(cipher) + strlen(string) + 1< sizeof(string)) {
+      strncat(string, " ", 1);
       strncat(string, cipher, strlen(cipher));
+    }
   }
 
   if (mode & SILC_CHANNEL_MODE_HMAC) {
-    if (strlen(hmac) + strlen(string) < sizeof(string))
+    if (strlen(hmac) + strlen(string) + 1< sizeof(string)) {
+      strncat(string, " ", 1);
       strncat(string, hmac, strlen(hmac));
+    }
   }
 
   /* Rest of mode is ignored */
@@ -921,8 +934,7 @@ char *silc_get_input(const char *prompt, bool echo_off)
     tcsetattr(fd, TCSANOW, &to_old);
     signal(SIGINT, SIG_DFL);
 
-    ret = silc_calloc(strlen(input), sizeof(char));
-    memcpy(ret, input, strlen(input));
+    ret = silc_memdup(input, strlen(input));
     memset(input, 0, sizeof(input));
 #endif /* HAVE_TERMIOS_H */
     return ret;
@@ -1032,6 +1044,8 @@ static const SilcStatusMessage silc_status_messages[] = {
   { STAT(KEY_EXCHANGE_FAILED), "Key exchange failed" },
   { STAT(BAD_VERSION), "Bad version" },
   { STAT(TIMEDOUT), "Service timed out" },
+  { STAT(UNSUPPORTED_PUBLIC_KEY), "Unsupported public key type" },
+  { STAT(OPERATION_ALLOWED), "Operation is not allowed" },
 
   { 0, NULL }
 };
@@ -1144,7 +1158,7 @@ const char *silc_get_command_name(unsigned char command)
 
 /* Return TRUE if `smaller' is smaller than `bigger'. */
 
-bool silc_compare_timeval(struct timeval *smaller, 
+bool silc_compare_timeval(struct timeval *smaller,
                          struct timeval *bigger)
 {
   if ((smaller->tv_sec < bigger->tv_sec) ||