X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Firssi%2Fsrc%2Fsilc%2Fcore%2Fsilc-core.c;h=430748b28d00cc89dff747c37e973bc729a52b2c;hb=6ce316e741339532a2d150b7a5e24f4e1686c9ff;hp=db56d68c28ca4da2423e02466946e7790e813de3;hpb=7c574a294504ec55bbd7e7686186832c0f4095ae;p=crypto.git diff --git a/apps/irssi/src/silc/core/silc-core.c b/apps/irssi/src/silc/core/silc-core.c index db56d68c..430748b2 100644 --- a/apps/irssi/src/silc/core/silc-core.c +++ b/apps/irssi/src/silc/core/silc-core.c @@ -51,11 +51,14 @@ SilcClient silc_client = NULL; extern SilcClientOperations ops; /* Our keypair */ -SilcPublicKey irssi_pubkey; -SilcPrivateKey irssi_privkey; +SilcPublicKey irssi_pubkey = NULL; +SilcPrivateKey irssi_privkey = NULL; + +char *opt_nickname = NULL; +char *opt_hostname = NULL; /* Default hash function */ -SilcHash sha1hash; +SilcHash sha1hash = NULL; void silc_expandos_init(void); void silc_expandos_deinit(void); @@ -112,6 +115,18 @@ static void silc_init_userinfo(void) str != NULL ? str : silc_get_real_name()); } + /* Check that real name is UTF-8 encoded */ + set = settings_get_str("real_name"); + if (!silc_utf8_valid(set, strlen(set))) { + int len = silc_utf8_encoded_len(set, strlen(set), SILC_STRING_LOCALE); + tmp = silc_calloc(len, sizeof(*tmp)); + if (tmp) { + silc_utf8_encode(set, strlen(set), SILC_STRING_LOCALE, tmp, len); + settings_set_str("real_name", tmp); + silc_free(tmp); + } + } + /* username */ user_name = settings_get_str("user_name"); if (user_name == NULL || *user_name == '\0') { @@ -193,6 +208,14 @@ static bool silc_log_misc(SilcLogType type, char *message, void *context) return TRUE; } +static bool silc_log_stderr(SilcLogType type, char *message, void *context) +{ + fprintf(stderr, "%s: %s\n", + (type == SILC_LOG_INFO ? "[Info]" : + type == SILC_LOG_WARNING ? "[Warning]" : "[Error]"), message); + return TRUE; +} + static void silc_nickname_format_parse(const char *nickname, char **ret_nickname) { @@ -271,17 +294,15 @@ void silc_opt_callback(poptContext con, const struct poptOption *opt, const char *arg, void *data) { -#if 0 if (strcmp(opt->longName, "nick") == 0) { - g_free(silc_client->nickname); - silc_client->nickname = g_strdup(arg); + g_free(opt_nickname); + opt_nickname = g_strdup(arg); } if (strcmp(opt->longName, "hostname") == 0) { - silc_free(silc_client->hostname); - silc_client->hostname = g_strdup(arg); + g_free(opt_hostname); + opt_hostname = g_strdup(arg); } -#endif /* 0 */ if (strcmp(opt->longName, "list-ciphers") == 0) { silc_cipher_register_default(); @@ -354,17 +375,34 @@ void silc_opt_callback(poptContext con, static void sig_init_finished(void) { /* Check ~/.silc directory and public and private keys */ - if (!silc_client_check_silc_dir()) - exit(1); + if (!silc_client_check_silc_dir()) { + sleep(1); + signal_emit("gui exit", 0); + return; + } /* Load public and private key */ - if (!silc_client_load_keys(silc_client)) - exit(1); + if (!silc_client_load_keys(silc_client)) { + sleep(1); + signal_emit("gui exit", 0); + return; + } /* Initialize the SILC client */ if (!silc_client_init(silc_client, settings_get_str("user_name"), - silc_net_localhost(), settings_get_str("real_name"))) - exit(1); + opt_hostname ? opt_hostname : silc_net_localhost(), + settings_get_str("real_name"))) { + sleep(1); + signal_emit("gui exit", 0); + return; + } + + silc_log_set_callback(SILC_LOG_INFO, silc_log_misc, NULL); + silc_log_set_callback(SILC_LOG_WARNING, silc_log_misc, NULL); + silc_log_set_callback(SILC_LOG_ERROR, silc_log_misc, NULL); + silc_log_set_callback(SILC_LOG_FATAL, silc_log_misc, NULL); + + silc_hash_alloc("sha1", &sha1hash); /* register SILC scheduler */ idletag = g_timeout_add(5, (GSourceFunc) my_silc_scheduler, NULL); @@ -419,10 +457,13 @@ void silc_core_init(void) settings_add_str("server", "crypto_default_hmac", SILC_DEFAULT_HMAC); settings_add_int("server", "key_exchange_timeout_secs", 120); settings_add_int("server", "key_exchange_rekey_secs", 3600); + settings_add_bool("server", "key_exchange_rekey_pfs", FALSE); settings_add_int("server", "connauth_request_secs", 2); settings_add_int("server", "heartbeat", 300); settings_add_bool("server", "ignore_message_signatures", FALSE); settings_add_str("server", "session_filename", "session.$chatnet"); + settings_add_bool("server", "sign_channel_messages", FALSE); + settings_add_bool("server", "sign_private_messages", FALSE); /* Requested Attributes settings */ settings_add_bool("silc", "attr_allow", TRUE); @@ -448,11 +489,15 @@ void silc_core_init(void) silc_init_userinfo(); + silc_log_set_callback(SILC_LOG_INFO, silc_log_stderr, NULL); + silc_log_set_callback(SILC_LOG_WARNING, silc_log_stderr, NULL); + silc_log_set_callback(SILC_LOG_ERROR, silc_log_stderr, NULL); + silc_log_set_callback(SILC_LOG_FATAL, silc_log_stderr, NULL); + /* Initialize client parameters */ memset(¶ms, 0, sizeof(params)); strcat(params.nickname_format, "%n@%h%a"); params.nickname_parse = silc_nickname_format_parse; - params.rekey_secs = settings_get_int("key_exchange_rekey_secs"); params.connauth_request_secs = settings_get_int("connauth_request_secs"); /* Allocate SILC client */ @@ -467,11 +512,6 @@ void silc_core_init(void) silc_register_hmac(silc_client, def_hmac); silc_pkcs_register_default(); - silc_log_set_callback(SILC_LOG_INFO, silc_log_misc, NULL); - silc_log_set_callback(SILC_LOG_WARNING, silc_log_misc, NULL); - silc_log_set_callback(SILC_LOG_ERROR, silc_log_misc, NULL); - silc_log_set_callback(SILC_LOG_FATAL, silc_log_misc, NULL); - /* Register SILC to the irssi */ rec = g_new0(CHAT_PROTOCOL_REC, 1); rec->name = "SILC";