updates.
authorPekka Riikonen <priikone@silcnet.org>
Sat, 30 Mar 2002 17:05:17 +0000 (17:05 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Sat, 30 Mar 2002 17:05:17 +0000 (17:05 +0000)
14 files changed:
CHANGES
apps/irssi/src/core/core.c
apps/irssi/src/core/misc.c
apps/irssi/src/core/misc.h
apps/irssi/src/silc/core/silc-core.c
lib/silccrypt/silccipher.c
lib/silccrypt/silccipher.h
lib/silccrypt/silchash.c
lib/silccrypt/silchash.h
lib/silccrypt/silchmac.c
lib/silccrypt/silchmac.h
lib/silccrypt/silcpkcs.c
lib/silccrypt/silcpkcs.h
lib/silcutil/unix/silcunixutil.c

diff --git a/CHANGES b/CHANGES
index a668b8109ca39f888602ed2de4be81c68a43c6ff..b38d57e34f9cbc24072a76f19a0a6b8cbce89776 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,23 @@
+Sat Mar 30 18:15:55 EET 2002  Pekka Riikonen <priikone@silcnet.org>
+
+       * Changed the object argument for silc_cipher_register,
+         silc_hash_register, silc_hmac_register and silc_pkcs_register
+         to const.  Affected files are lib/silccrypt/silccipher.[ch],
+         silchash.[ch], silchmac.[ch] and silcpkcs.[ch].
+
+       * Changed the silc_get_username and silc_get_real_name to
+         never fail.  Affected file lib/silcutil/unix/silcunixutil.c.
+
+       * Fixed the Irssi SILC Client to use the silc_get_username and
+         silc_get_real_name insted of glib routines since the glib
+         routines only corrupt stack.  Fixes the Irssi SILC to work in
+         Cygwin.  Affected file irssi/src/silc/core/silc-core.c.
+
+       * Fixed the Irssi to not use g_get_home_dir since it crashes
+         or returns garbage on cygwin and corrupts stack.  Added function
+         get_home_dir to Irssi routines.  Affected files are
+         irssi/src/core/misc.[ch] and irssi/src/core/core.c.
+
 Fri Mar 29 21:55:41 EET 2002  Pekka Riikonen <priikone@silcnet.org>
 
        * Made some structure optimizations.  SFTP memory FS MemFSEntry
index b11064cb6b9c7b1dcd5f718ad492de665cfc1c2e..0deb5090f6b8ce73eec8947bd138f8768becc7ac 100644 (file)
@@ -192,9 +192,10 @@ void core_init_paths(int argc, char *argv[])
        args_register(options);
 
         if (irssi_dir == NULL)
-               irssi_dir = g_strdup_printf(IRSSI_DIR_FULL, g_get_home_dir());
+               irssi_dir = g_strdup_printf(IRSSI_DIR_FULL, get_home_dir());
        if (irssi_config_file == NULL)
-               irssi_config_file = g_strdup_printf("%s/"IRSSI_HOME_CONFIG, irssi_dir);
+               irssi_config_file = g_strdup_printf("%s/"IRSSI_HOME_CONFIG, 
+                                                   irssi_dir);
 
        session_set_binary(argv[0]);
 }
index 6bf871779a7a6b061f5d9d304db47cf9326c6972..93612d6bb5ab7704f786fa2dc51fd21e5ee4fbf7 100644 (file)
@@ -26,6 +26,7 @@
 #ifdef HAVE_REGEX_H
 #  include <regex.h>
 #endif
+#include <pwd.h>
 
 typedef struct {
        int condition;
@@ -448,11 +449,24 @@ int mkpath(const char *path, int mode)
        return 0;
 }
 
+/* Get home directory */
+const char *get_home_dir(void)
+{
+       struct passwd *pw = getpwuid(getuid());
+       if (!pw) {
+        if (g_getenv("HOME"))
+          return g_getenv("HOME");
+        else
+          return ".";
+       }
+       return pw->pw_dir;
+}
+
 /* convert ~/ to $HOME */
 char *convert_home(const char *path)
 {
        return *path == '~' && (*(path+1) == '/' || *(path+1) == '\0') ?
-               g_strconcat(g_get_home_dir(), path+1, NULL) :
+               g_strconcat((char *)get_home_dir, path+1, NULL) :
                g_strdup(path);
 }
 
index 804cffc2a9c2a63dbb422cb6f978dac5cc697887..a321bdfca8187c515e9164e1e9fb8bd4ec3e097f 100644 (file)
@@ -61,6 +61,10 @@ int regexp_match(const char *str, const char *regexp);
 
 /* Create the directory and all it's parent directories */
 int mkpath(const char *path, int mode);
+
+/* Get home directory */
+const char *get_home_dir(void);
+
 /* convert ~/ to $HOME */
 char *convert_home(const char *path);
 
index a58a1ec3a2d9e92b8ec75899bcd7a7de2459887b..114f03af65d3a9e3e65e958c586f1901e3a0ffb1 100644 (file)
@@ -100,7 +100,7 @@ static void silc_init_userinfo(void)
     if (!str)
       str = g_getenv("IRCNAME");
     settings_set_str("real_name",
-                    str != NULL ? str : g_get_real_name());
+                    str != NULL ? str : silc_get_real_name());
   }
  
   /* username */
@@ -110,8 +110,8 @@ static void silc_init_userinfo(void)
     if (!str)
       str = g_getenv("IRCUSER");
     settings_set_str("user_name",
-                    str != NULL ? str : g_get_user_name());
-    
+                    str != NULL ? str : silc_get_username());
+
     user_name = settings_get_str("user_name");
   }
 
@@ -129,12 +129,7 @@ static void silc_init_userinfo(void)
   /* alternate nick */
   set = settings_get_str("alternate_nick");
   if (set == NULL || *set == '\0') {
-    if (strlen(nick) < 9)
-      str = g_strconcat(nick, "_", NULL);
-    else { 
-      str = g_strdup(nick);
-      str[strlen(str)-1] = '_';
-    }
+    str = g_strconcat(nick, "_", NULL);
     settings_set_str("alternate_nick", str);
     g_free(str);
   }
@@ -171,7 +166,7 @@ static void silc_register_cipher(SilcClient client, const char *cipher)
   if (cipher) {
     for (i = 0; silc_default_ciphers[i].name; i++)
       if (!strcmp(silc_default_ciphers[i].name, cipher)) {
-       silc_cipher_register((SilcCipherObject *)&silc_default_ciphers[i]);
+       silc_cipher_register(&(silc_default_ciphers[i]));
        break;
       }
     
@@ -192,7 +187,7 @@ static void silc_register_hash(SilcClient client, const char *hash)
   if (hash) {
     for (i = 0; silc_default_hash[i].name; i++)
       if (!strcmp(silc_default_hash[i].name, hash)) {
-       silc_hash_register((SilcHashObject *)&silc_default_hash[i]);
+       silc_hash_register(&(silc_default_hash[i]));
        break;
       }
     
@@ -213,7 +208,7 @@ static void silc_register_hmac(SilcClient client, const char *hmac)
   if (hmac) {
     for (i = 0; silc_default_hmacs[i].name; i++)
       if (!strcmp(silc_default_hmacs[i].name, hmac)) {
-       silc_hmac_register((SilcHmacObject *)&silc_default_hmacs[i]);
+       silc_hmac_register(&(silc_default_hmacs[i]));
        break;
       }
     
index 27e63395a30f9e27efc0d410235e2984b89b73ff..ba13a02234d91ca6f72f96b958f4562e68247e0c 100644 (file)
@@ -90,7 +90,7 @@ const SilcCipherObject silc_default_ciphers[] =
    registered. Therefore, if memory has been allocated for the object sent
    as argument it has to be free'd after this function returns succesfully. */
 
-bool silc_cipher_register(SilcCipherObject *cipher)
+bool silc_cipher_register(const SilcCipherObject *cipher)
 {
 #ifndef SILC_EPOC
   SilcCipherObject *new;
@@ -168,7 +168,7 @@ bool silc_cipher_register_default(void)
   int i;
 
   for (i = 0; silc_default_ciphers[i].name; i++)
-    silc_cipher_register((SilcCipherObject *)&(silc_default_ciphers[i]));
+    silc_cipher_register(&(silc_default_ciphers[i]));
 
 #endif /* SILC_EPOC */
   return TRUE;
index 3c1d549aca3b2efe1034df22f5b42680b888c8ef..f33ef64f3f24cc9dad60bf391cdeb453dd1c428a 100644 (file)
@@ -117,7 +117,7 @@ bool silc_##cipher##_decrypt_cbc(void *context,                     \
 SilcUInt32 silc_##cipher##_context_len()
 
 /* Prototypes */
-bool silc_cipher_register(SilcCipherObject *cipher);
+bool silc_cipher_register(const SilcCipherObject *cipher);
 bool silc_cipher_unregister(SilcCipherObject *cipher);
 bool silc_cipher_register_default(void);
 bool silc_cipher_alloc(const unsigned char *name, SilcCipher *new_cipher);
index 4ec2a925d0f39ca68134695c7a61beb5b8e4157f..5e740df5c9baebe29d528b3997e38ee321dc05f9 100644 (file)
@@ -43,7 +43,7 @@ const SilcHashObject silc_default_hash[] =
 /* Registers a new hash function into the SILC. This function is used at
    the initialization of the SILC. */
 
-bool silc_hash_register(SilcHashObject *hash)
+bool silc_hash_register(const SilcHashObject *hash)
 {
 #ifndef SILC_EPOC
   SilcHashObject *new;
@@ -119,7 +119,7 @@ bool silc_hash_register_default(void)
   int i;
 
   for (i = 0; silc_default_hash[i].name; i++)
-    silc_hash_register((SilcHashObject *)&(silc_default_hash[i]));
+    silc_hash_register(&(silc_default_hash[i]));
 
 #endif /* SILC_EPOC */
   return TRUE;
index c5091240990ee53e4c978fb9f614d0a56d967446..cf4a6be4a7e4dd4c6c7a7216acaa5023ce6ff5f6 100644 (file)
@@ -84,7 +84,7 @@ void silc_##hash##_transform(SilcUInt32 *state,                       \
 SilcUInt32 silc_##hash##_context_len()
 
 /* Prototypes */
-bool silc_hash_register(SilcHashObject *hash);
+bool silc_hash_register(const SilcHashObject *hash);
 bool silc_hash_unregister(SilcHashObject *hash);
 bool silc_hash_register_default(void);
 bool silc_hash_alloc(const unsigned char *name, SilcHash *new_hash);
index 21bb1e5f94a73e29dfa252dfd3c93421f702a35d..dfde14da034cb6333c9da80c2863d9c6cf0759c5 100644 (file)
@@ -82,7 +82,7 @@ static void silc_hmac_init_internal(SilcHmac hmac, unsigned char *key,
 /* Registers a new HMAC into the SILC. This function is used at the
    initialization of the SILC. */
 
-bool silc_hmac_register(SilcHmacObject *hmac)
+bool silc_hmac_register(const SilcHmacObject *hmac)
 {
 #ifndef SILC_EPOC
   SilcHmacObject *new;
@@ -152,7 +152,7 @@ bool silc_hmac_register_default(void)
   int i;
 
   for (i = 0; silc_default_hmacs[i].name; i++)
-    silc_hmac_register((SilcHmacObject *)&(silc_default_hmacs[i]));
+    silc_hmac_register(&(silc_default_hmacs[i]));
 
 #endif /* SILC_EPOC */
   return TRUE;
index a64b5366f0b5693d6dacf55c75672b1ab0dd2bbd..ae9ab2e3d35b4cdfdc4c9b0e3e0833de6ecad17f 100644 (file)
@@ -84,7 +84,7 @@ extern DLLAPI const SilcHmacObject silc_default_hmacs[];
  *
  * SYNOPSIS
  *
- *    bool silc_hmac_register(SilcHmacObject *hmac);
+ *    bool silc_hmac_register(const SilcHmacObject *hmac);
  *
  * DESCRIPTION
  *
@@ -97,7 +97,7 @@ extern DLLAPI const SilcHmacObject silc_default_hmacs[];
  *    that are builtin the sources.  Returns FALSE on error.
  *
  ***/
-bool silc_hmac_register(SilcHmacObject *hmac);
+bool silc_hmac_register(const SilcHmacObject *hmac);
 
 /****f* silccrypt/SilcHMACAPI/silc_hmac_unregister
  *
index d61ed0c826db0ca0e7933954661cc7bd36acd35b..4e7cdcfe6e76a55c5b997415dc8d4a2361e93c97 100644 (file)
@@ -58,7 +58,7 @@ const SilcPKCSObject silc_default_pkcs[] =
 /* Register a new PKCS into SILC. This is used at the initialization of
    the SILC. */
 
-bool silc_pkcs_register(SilcPKCSObject *pkcs)
+bool silc_pkcs_register(const SilcPKCSObject *pkcs)
 {
 #ifndef SILC_EPOC
   SilcPKCSObject *new;
@@ -128,7 +128,7 @@ bool silc_pkcs_register_default(void)
   int i;
 
   for (i = 0; silc_default_pkcs[i].name; i++)
-    silc_pkcs_register((SilcPKCSObject *)&(silc_default_pkcs[i]));
+    silc_pkcs_register(&(silc_default_pkcs[i]));
 
 #endif /* SILC_EPOC */
   return TRUE;
index 15bb8b521d68d0e77bdc000ec1c3759df54b77ab..8e9ad2e1688a816575b6e33b422a7e30109a4d1c 100644 (file)
@@ -172,7 +172,7 @@ int silc_##pkcs##_verify(void *context, \
                         SilcUInt32 data_len)
 
 /* Prototypes */
-bool silc_pkcs_register(SilcPKCSObject *pkcs);
+bool silc_pkcs_register(const SilcPKCSObject *pkcs);
 bool silc_pkcs_unregister(SilcPKCSObject *pkcs);
 bool silc_pkcs_register_default(void);
 bool silc_pkcs_alloc(const unsigned char *name, SilcPKCS *new_pkcs);
index 8cb6a723f10db57e57b256888d35e5f8aa600ef1..42b6edace41826d5857a2355067cc547d682899e 100644 (file)
@@ -140,11 +140,9 @@ char *silc_get_username()
       struct passwd *pw;
 
       pw = getpwuid(getuid());
-      if (!pw) {
-       fprintf(stderr, "silc_get_username: %s\n", strerror(errno));
-       return NULL;
-      }
-      
+      if (!pw)
+       return strdup("foo");
+
       logname = pw->pw_name;
     }
   }
@@ -160,10 +158,8 @@ char *silc_get_real_name()
   struct passwd *pw;
     
   pw = getpwuid(getuid());
-  if (!pw) {
-    fprintf(stderr, "silc_get_username: %s\n", strerror(errno));
-    return NULL;
-  }
+  if (!pw)
+     return strdup("Foo T. Bar");
 
   if (strchr(pw->pw_gecos, ','))
     *strchr(pw->pw_gecos, ',') = 0;