{ "notice", "{notice $0}", 1, { 0 } },
{ "ownaction", "{ownaction $0}", 1, { 0 } },
{ "ownnotice", "{ownnotice $0}", 1, { 0 } },
+ { "invite_list", "channel {channel $0} invite list: $1", 2, { 0, 0 } },
+ { "no_invite_list", "channel {channel $0} invite list not set", 1, { 0 } },
+ { "ban_list", "channel {channel $0} ban list: $1", 2, { 0, 0 } },
+ { "no_ban_list", "channel {channel $0} ban list not set", 1, { 0 } },
/* WHOIS, WHOWAS and USERS (alias WHO) messages */
{ NULL, "Who Queries", 0 },
{ "channel_private_key_nomode", "Private key mode is not set on channel {channel $0}", 1, { 0 } },
{ "channel_private_key_error", "Could not add private key to channel {channel $0}", 1, { 0 } },
{ "channel_private_key_list", "Channel {channel $0} private keys%: Cipher Hmac Key", 1, { 0 } },
- { "private_key_list", "Private message keys%: Client Cipher Key", 0, { 0 } },
+ { "private_key_list", "Private message keys%: Client Cipher Key", 0 },
{ "private_key_list_nick", "Private message keys with {nick $0}%: Client Cipher Key", 1, { 0 } },
{ "key_agreement", "Requesting key agreement with {nick $0}", 1, { 0 } },
{ "key_agreement_request", "{nick $0} wants to perform key agreement", 1, { 0 } },
{ "key_agreement_error", "Error occurred during key agreement with {nick $0}", 1, { 0 } },
{ "key_agreement_failure", "Key agreement failed with {nick $0}", 1, { 0 } },
{ "key_agreement_timeout", "Timeout during key agreement. The key agreement was not performed with {nick $0}", 1, { 0 } },
+ { "pubkey_received", "Received {hilight $0} public key", 1, { 0 } },
+ { "pubkey_fingerprint", "Fingerprint for the {hilight $0} key is %: $1", 2, { 0, 0 } },
+ { "pubkey_unsupported", "We don't support {hilight $0} public key type {hilight $1}", 2, { 0, 0 } },
+ { "pubkey_discard", "Will not accept the {hilight $0} key", 1, { 0 } },
+ { "pubkey_accept", "Would you like to accept the key (y/n)? ", 0 },
+ { "pubkey_accept_anyway", "Would you like to accept the key anyway (y/n)? ", 0 },
+ { "pubkey_could_not_load", "Could not load your local copy of the {hilight $0} key", 1, { 0 } },
+ { "pubkey_malformed", "Your local copy of the {hilight $0} key is malformed", 1, { 0 } },
+ { "pubkey_no_match", "{hilight $0} key does not match with your local copy", 1, { 0 } },
+ { "pubkey_maybe_expired", "It is possible that the key has expired or changed", 0 },
+ { "pubkey_mitm_attach", "It is also possible that someone is performing man-in-the-middle attack", 0 },
/* Key management and key agreement */
{ NULL, "Misc", 0 },
- { "server_oper", "You are now {hilight server operator}", 0, { 0 } },
- { "router_oper", "You are now {hilight SILC operator}", 0, { 0 } },
- { "list_header", " Channel Users Topic", 0, { 0 } },
+ { "server_oper", "You are now {hilight server operator}", 0 },
+ { "router_oper", "You are now {hilight SILC operator}", 0 },
+ { "list_header", " Channel Users Topic", 0 },
{ "list", " %|{channelhilight $[36]0} {hilight $[7]1} $2", 3, { 0, 0, 0 } },
+ { "bad_nick", "Bad nickname {hilight $0}", 1, { 0 } },
+ { "unknown_notify", "Unknown notify type {hilight $0}", 1, { 0 } },
+ { "ke_bad_version", "You are running incompatible client version (it may be too old or too new) ", 0 },
+ { "ke_unsupported_public_key", "Server does not support your public key type", 0 },
+ { "ke_unknown_group", "Server does not support one of your proposed KE group", 0 },
+ { "ke_unknown_cipher", "Server does not support one of your proposed cipher", 0 },
+ { "ke_unknown_pkcs", "Server does not support one of your proposed PKCS", 0 },
+ { "ke_unknown_hash_function", "Server does not support one of your proposed hash function", 0 },
+ { "ke_unknown_hmac", "Server does not support one of your proposed HMAC", 0 },
+ { "ke_incorrect_signature", "Incorrect signature", 0 },
+ { "auth_failed", "Authentication failed", 0 },
{ NULL, NULL, 0 }
};
/* Message for a channel. The `sender' is the nickname of the sender
received in the packet. The `channel_name' is the name of the channel. */
-void
-silc_channel_message(SilcClient client, SilcClientConnection conn,
- SilcClientEntry sender, SilcChannelEntry channel,
- SilcMessageFlags flags, char *msg)
+void silc_channel_message(SilcClient client, SilcClientConnection conn,
+ SilcClientEntry sender, SilcChannelEntry channel,
+ SilcMessageFlags flags, char *msg)
{
SILC_SERVER_REC *server;
SILC_NICK_REC *nick;
/* Private message to the client. The `sender' is the nickname of the
sender received in the packet. */
-void
-silc_private_message(SilcClient client, SilcClientConnection conn,
- SilcClientEntry sender, SilcMessageFlags flags,
+void silc_private_message(SilcClient client, SilcClientConnection conn,
+ SilcClientEntry sender, SilcMessageFlags flags,
char *msg)
{
SILC_SERVER_REC *server;
};
void silc_notify(SilcClient client, SilcClientConnection conn,
- SilcNotifyType type, ...)
+ SilcNotifyType type, ...)
{
SILC_SERVER_REC *server;
va_list va;
signal_emit(signal, 2, server, va);
} else {
/* Unknown notify */
- printtext(server, NULL, MSGLEVEL_CRAP, "Unknown notify type %d", type);
+ printformat_module("fe-common/silc", server, NULL,
+ MSGLEVEL_CRAP, SILCTXT_UNKNOWN_NOTIFY, type);
}
va_end(va);
or connecting failed. This is also the first time application receives
the SilcClientConnection objecet which it should save somewhere. */
-void
-silc_connect(SilcClient client, SilcClientConnection conn, int success)
+void silc_connect(SilcClient client, SilcClientConnection conn, int success)
{
SILC_SERVER_REC *server = conn->context;
/* Called to indicate that connection was disconnected to the server. */
-void
-silc_disconnect(SilcClient client, SilcClientConnection conn)
+void silc_disconnect(SilcClient client, SilcClientConnection conn)
{
SILC_SERVER_REC *server = conn->context;
after application has called the command. Just to tell application
that the command really was processed. */
-void
-silc_command(SilcClient client, SilcClientConnection conn,
- SilcClientCommandContext cmd_context, int success,
- SilcCommand command)
+void silc_command(SilcClient client, SilcClientConnection conn,
+ SilcClientCommandContext cmd_context, int success,
+ SilcCommand command)
{
}
/* Client info resolving callback when JOIN command reply is received.
This will cache all users on the channel. */
-void silc_client_join_get_users(SilcClient client,
- SilcClientConnection conn,
- SilcClientEntry *clients,
- uint32 clients_count,
- void *context)
+static void silc_client_join_get_users(SilcClient client,
+ SilcClientConnection conn,
+ SilcClientEntry *clients,
+ uint32 clients_count,
+ void *context)
{
SilcChannelEntry channel = (SilcChannelEntry)context;
SilcChannelUser chu;
if (!success)
return;
- /* XXX should use irssi routines */
-
channel = va_arg(vp, SilcChannelEntry);
invite_list = va_arg(vp, char *);
if (invite_list)
- silc_say(client, conn, "%s invite list: %s", channel->channel_name,
- invite_list);
+ printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP,
+ SILCTXT_CHANNEL_INVITE_LIST, channel->channel_name,
+ invite_list);
else
- silc_say(client, conn, "%s invite list not set",
- channel->channel_name);
+ printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP,
+ SILCTXT_CHANNEL_NO_INVITE_LIST,
+ channel->channel_name);
}
break;
mode = va_arg(vp, uint32);
- /* XXX todo */
+ if (mode & SILC_UMODE_SERVER_OPERATOR)
+ printformat_module("fe-common/silc", server, NULL,
+ MSGLEVEL_CRAP, SILCTXT_SERVER_OPER);
+
+ if (mode & SILC_UMODE_ROUTER_OPERATOR)
+ printformat_module("fe-common/silc", server, NULL,
+ MSGLEVEL_CRAP, SILCTXT_ROUTER_OPER);
}
break;
if (!success)
return;
- /* XXX should use irssi routines */
-
channel = va_arg(vp, SilcChannelEntry);
ban_list = va_arg(vp, char *);
if (ban_list)
- silc_say(client, conn, "%s ban list: %s", channel->channel_name,
- ban_list);
+ printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP,
+ SILCTXT_CHANNEL_BAN_LIST, channel->channel_name,
+ ban_list);
else
- silc_say(client, conn, "%s ban list not set", channel->channel_name);
+ printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP,
+ SILCTXT_CHANNEL_NO_BAN_LIST,
+ channel->channel_name);
}
break;
pk = silc_pkcs_public_key_encode(public_key, &pk_len);
- if (id_type == SILC_ID_CLIENT) {
+ if (id_type == SILC_ID_CLIENT)
silc_verify_public_key_internal(client, conn, SILC_SOCKET_TYPE_CLIENT,
pk, pk_len, SILC_SKE_PK_TYPE_SILC,
NULL, NULL);
- }
-
silc_free(pk);
}
if (verify->completion)
verify->completion(FALSE, verify->context);
- silc_say(verify->client,
- verify->conn, "Will not accept the %s key", verify->entity);
+ printformat_module("fe-common/silc", NULL, NULL,
+ MSGLEVEL_CRAP, SILCTXT_PUBKEY_DISCARD, verify->entity);
}
silc_free(verify->filename);
silc_free(verify->entity);
+ silc_free(verify->pk);
silc_free(verify);
}
SilcVerifyPublicKey completion, void *context)
{
int i;
- char file[256], filename[256], *fingerprint;
+ char file[256], filename[256], *fingerprint, *format;
struct passwd *pw;
struct stat st;
char *entity = ((conn_type == SILC_SOCKET_TYPE_SERVER ||
PublicKeyVerify verify;
if (pk_type != SILC_SKE_PK_TYPE_SILC) {
- silc_say(client, conn, "We don't support %s public key type %d",
- entity, pk_type);
+ printformat_module("fe-common/silc", NULL, NULL,
+ MSGLEVEL_CRAP, SILCTXT_PUBKEY_UNSUPPORTED,
+ entity, pk_type);
if (completion)
completion(FALSE, context);
return;
verify->conn = conn;
verify->filename = strdup(filename);
verify->entity = strdup(entity);
- verify->pk = pk;
+ verify->pk = silc_calloc(pk_len, sizeof(*verify->pk));
+ memcpy(verify->pk, pk, pk_len);
verify->pk_len = pk_len;
verify->pk_type = pk_type;
verify->completion = completion;
if (stat(filename, &st) < 0) {
/* Key does not exist, ask user to verify the key and save it */
- silc_say(client, conn, "Received %s public key", entity);
- silc_say(client, conn, "Fingerprint for the %s key is", entity);
- silc_say(client, conn, "%s", fingerprint);
-
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_PUBKEY_RECEIVED, entity);
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_PUBKEY_FINGERPRINT, entity, fingerprint);
+ format = format_get_text("fe-common/silc", NULL, NULL, NULL,
+ SILCTXT_PUBKEY_ACCEPT);
keyboard_entry_redirect((SIGNAL_FUNC)verify_public_key_completion,
- "Would you like to accept the key (y/n)? ", 0,
- verify);
+ format, 0, verify);
+ g_free(format);
silc_free(fingerprint);
return;
} else {
SILC_PKCS_FILE_PEM))
if (!silc_pkcs_load_public_key(filename, &public_key,
SILC_PKCS_FILE_BIN)) {
- silc_say(client, conn, "Received %s public key", entity);
- silc_say(client, conn, "Fingerprint for the %s key is", entity);
- silc_say(client, conn, "%s", fingerprint);
- silc_say(client, conn, "Could not load your local copy of the %s key",
- entity);
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_PUBKEY_RECEIVED, entity);
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_PUBKEY_FINGERPRINT, entity, fingerprint);
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_PUBKEY_COULD_NOT_LOAD, entity);
+ format = format_get_text("fe-common/silc", NULL, NULL, NULL,
+ SILCTXT_PUBKEY_ACCEPT_ANYWAY);
keyboard_entry_redirect((SIGNAL_FUNC)verify_public_key_completion,
- "Would you like to accept the key "
- "anyway (y/n)? ", 0,
- verify);
+ format, 0, verify);
+ g_free(format);
silc_free(fingerprint);
return;
}
/* Encode the key data */
encpk = silc_pkcs_public_key_encode(public_key, &encpk_len);
if (!encpk) {
- silc_say(client, conn, "Received %s public key", entity);
- silc_say(client, conn, "Fingerprint for the %s key is", entity);
- silc_say(client, conn, "%s", fingerprint);
- silc_say(client, conn, "Your local copy of the %s key is malformed",
- entity);
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_PUBKEY_RECEIVED, entity);
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_PUBKEY_FINGERPRINT, entity, fingerprint);
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_PUBKEY_MALFORMED, entity);
+ format = format_get_text("fe-common/silc", NULL, NULL, NULL,
+ SILCTXT_PUBKEY_ACCEPT_ANYWAY);
keyboard_entry_redirect((SIGNAL_FUNC)verify_public_key_completion,
- "Would you like to accept the key "
- "anyway (y/n)? ", 0,
- verify);
+ format, 0, verify);
+ g_free(format);
silc_free(fingerprint);
return;
}
/* Compare the keys */
if (memcmp(encpk, pk, encpk_len)) {
- silc_say(client, conn, "Received %s public key", entity);
- silc_say(client, conn, "Fingerprint for the %s key is", entity);
- silc_say(client, conn, "%s", fingerprint);
- silc_say(client, conn, "%s key does not match with your local copy",
- entity);
- silc_say(client, conn,
- "It is possible that the key has expired or changed");
- silc_say(client, conn, "It is also possible that some one is performing "
- "man-in-the-middle attack");
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_PUBKEY_RECEIVED, entity);
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_PUBKEY_FINGERPRINT, entity, fingerprint);
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_PUBKEY_NO_MATCH, entity);
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_PUBKEY_MAYBE_EXPIRED, entity);
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_PUBKEY_MITM_ATTACK, entity);
/* Ask user to verify the key and save it */
+ format = format_get_text("fe-common/silc", NULL, NULL, NULL,
+ SILCTXT_PUBKEY_ACCEPT_ANYWAY);
keyboard_entry_redirect((SIGNAL_FUNC)verify_public_key_completion,
- "Would you like to accept the key "
- "anyway (y/n)? ", 0,
- verify);
+ format, 0, verify);
+ g_free(format);
silc_free(fingerprint);
return;
}
must explicitly cast it to correct type. Usually `failure' is 32 bit
failure type (see protocol specs for all protocol failure types). */
-void
-silc_failure(SilcClient client, SilcClientConnection conn,
- SilcProtocol protocol, void *failure)
+void silc_failure(SilcClient client, SilcClientConnection conn,
+ SilcProtocol protocol, void *failure)
{
if (protocol->protocol->type == SILC_PROTOCOL_CLIENT_KEY_EXCHANGE) {
SilcSKEStatus status = (SilcSKEStatus)failure;
if (status == SILC_SKE_STATUS_BAD_VERSION)
- silc_say_error("You are running incompatible client version (it may be "
- "too old or too new)");
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_KE_BAD_VERSION);
if (status == SILC_SKE_STATUS_UNSUPPORTED_PUBLIC_KEY)
- silc_say_error("Server does not support your public key type");
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_KE_UNSUPPORTED_PUBLIC_KEY);
if (status == SILC_SKE_STATUS_UNKNOWN_GROUP)
- silc_say_error("Server does not support one of your proposed KE group");
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_KE_UNKNOWN_GROUP);
if (status == SILC_SKE_STATUS_UNKNOWN_CIPHER)
- silc_say_error("Server does not support one of your proposed cipher");
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_KE_UNKNOWN_CIPHER);
if (status == SILC_SKE_STATUS_UNKNOWN_PKCS)
- silc_say_error("Server does not support one of your proposed PKCS");
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_KE_UNKNOWN_PKCS);
if (status == SILC_SKE_STATUS_UNKNOWN_HASH_FUNCTION)
- silc_say_error("Server does not support one of your proposed "
- "hash function");
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_KE_UNKNOWN_HASH_FUNCTION);
if (status == SILC_SKE_STATUS_UNKNOWN_HMAC)
- silc_say_error("Server does not support one of your proposed HMAC");
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_KE_UNKNOWN_HMAC);
if (status == SILC_SKE_STATUS_INCORRECT_SIGNATURE)
- silc_say_error("Incorrect signature");
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_KE_INCORRECT_SIGNATURE);
}
if (protocol->protocol->type == SILC_PROTOCOL_CLIENT_CONNECTION_AUTH) {
uint32 err = (uint32)failure;
if (err == SILC_AUTH_FAILED)
- silc_say(client, conn, "Authentication failed");
+ printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+ SILCTXT_AUTH_FAILED);
}
}