+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
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]);
}
#ifdef HAVE_REGEX_H
# include <regex.h>
#endif
+#include <pwd.h>
typedef struct {
int condition;
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);
}
/* 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);
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 */
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");
}
/* 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);
}
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;
}
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;
}
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;
}
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;
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;
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);
/* 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;
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;
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);
/* 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;
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;
*
* SYNOPSIS
*
- * bool silc_hmac_register(SilcHmacObject *hmac);
+ * bool silc_hmac_register(const SilcHmacObject *hmac);
*
* DESCRIPTION
*
* 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
*
/* 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;
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;
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);
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;
}
}
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;