1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-26 12:56:37 +02:00

Merge branch 'secured-data'

This commit is contained in:
Sebastien Helleu
2013-08-02 19:19:25 +02:00
26 changed files with 1956 additions and 106 deletions
+8 -4
View File
@@ -1620,7 +1620,8 @@ irc_config_server_new_option (struct t_config_file *config_file,
new_option = weechat_config_new_option (
config_file, section,
option_name, "string",
N_("username for SASL authentication"),
N_("username for SASL authentication "
"(note: content is evaluated, see /help eval)"),
NULL, 0, 0,
default_value, value,
null_value_allowed,
@@ -1632,7 +1633,8 @@ irc_config_server_new_option (struct t_config_file *config_file,
new_option = weechat_config_new_option (
config_file, section,
option_name, "string",
N_("password for SASL authentication"),
N_("password for SASL authentication "
"(note: content is evaluated, see /help eval)"),
NULL, 0, 0,
default_value, value,
null_value_allowed,
@@ -1745,7 +1747,8 @@ irc_config_server_new_option (struct t_config_file *config_file,
N_("command(s) to run when connected to server (many commands "
"should be separated by \";\", use \"\\;\" for a semicolon, "
"special variables $nick, $channel and $server are replaced "
"by their value)"),
"by their value) "
"(note: content is evaluated, see /help eval)"),
NULL, 0, 0,
default_value, value,
null_value_allowed,
@@ -1771,7 +1774,8 @@ irc_config_server_new_option (struct t_config_file *config_file,
config_file, section,
option_name, "string",
N_("comma separated list of channels to join when connected to server "
"(example: \"#chan1,#chan2,#chan3 key1,key2\")"),
"(example: \"#chan1,#chan2,#chan3 key1,key2\") "
"(note: content is evaluated, see /help eval)"),
NULL, 0, 0,
default_value, value,
null_value_allowed,
+24 -16
View File
@@ -149,8 +149,7 @@ irc_protocol_tags (const char *command, const char *tags, const char *nick)
IRC_PROTOCOL_CALLBACK(authenticate)
{
int sasl_mechanism;
const char *sasl_username, *sasl_password;
char *answer;
char *sasl_username, *sasl_password, *answer;
IRC_PROTOCOL_MIN_ARGS(2);
@@ -158,10 +157,12 @@ IRC_PROTOCOL_CALLBACK(authenticate)
{
sasl_mechanism = IRC_SERVER_OPTION_INTEGER(server,
IRC_SERVER_OPTION_SASL_MECHANISM);
sasl_username = IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_SASL_USERNAME);
sasl_password = IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_SASL_PASSWORD);
sasl_username = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_SASL_USERNAME),
NULL, NULL);
sasl_password = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_SASL_PASSWORD),
NULL, NULL);
answer = NULL;
switch (sasl_mechanism)
{
@@ -198,6 +199,10 @@ IRC_PROTOCOL_CALLBACK(authenticate)
irc_sasl_mechanism_string[IRC_SERVER_OPTION_INTEGER(server, IRC_SERVER_OPTION_SASL_MECHANISM)]);
irc_server_sendf (server, 0, NULL, "CAP END");
}
if (sasl_username)
free (sasl_username);
if (sasl_password)
free (sasl_password);
}
return WEECHAT_RC_OK;
@@ -2076,9 +2081,7 @@ IRC_PROTOCOL_CALLBACK(wallops)
IRC_PROTOCOL_CALLBACK(001)
{
char **commands, **ptr_cmd, *vars_replaced;
char *away_msg;
const char *ptr_command;
char *server_command, **commands, **ptr_command, *vars_replaced, *away_msg;
IRC_PROTOCOL_MIN_ARGS(3);
@@ -2117,19 +2120,21 @@ IRC_PROTOCOL_CALLBACK(001)
WEECHAT_HOOK_SIGNAL_STRING, server->name);
/* execute command when connected */
ptr_command = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_COMMAND);
if (ptr_command && ptr_command[0])
server_command = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_COMMAND),
NULL, NULL);
if (server_command && server_command[0])
{
/* splitting command on ';' which can be escaped with '\;' */
commands = weechat_string_split_command (ptr_command, ';');
/* split command on ';' which can be escaped with '\;' */
commands = weechat_string_split_command (server_command, ';');
if (commands)
{
for (ptr_cmd = commands; *ptr_cmd; ptr_cmd++)
for (ptr_command = commands; *ptr_command; ptr_command++)
{
vars_replaced = irc_message_replace_vars (server, NULL,
*ptr_cmd);
*ptr_command);
weechat_command (server->buffer,
(vars_replaced) ? vars_replaced : *ptr_cmd);
(vars_replaced) ? vars_replaced : *ptr_command);
if (vars_replaced)
free (vars_replaced);
}
@@ -2144,6 +2149,9 @@ IRC_PROTOCOL_CALLBACK(001)
else
irc_server_autojoin_channels (server);
if (server_command)
free (server_command);
return WEECHAT_RC_OK;
}
+34 -14
View File
@@ -317,23 +317,32 @@ irc_server_strncasecmp (struct t_irc_server *server,
int
irc_server_sasl_enabled (struct t_irc_server *server)
{
int sasl_mechanism;
const char *sasl_username, *sasl_password;
int sasl_mechanism, rc;
char *sasl_username, *sasl_password;
sasl_mechanism = IRC_SERVER_OPTION_INTEGER(server,
IRC_SERVER_OPTION_SASL_MECHANISM);
sasl_username = IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_SASL_USERNAME);
sasl_password = IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_SASL_PASSWORD);
sasl_username = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_SASL_USERNAME),
NULL, NULL);
sasl_password = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_SASL_PASSWORD),
NULL, NULL);
/*
* SASL is enabled if using mechanism "external"
* or if both username AND password are set
*/
return ((sasl_mechanism == IRC_SASL_MECHANISM_EXTERNAL)
|| (sasl_username && sasl_username[0]
&& sasl_password && sasl_password[0])) ? 1 : 0;
rc = ((sasl_mechanism == IRC_SASL_MECHANISM_EXTERNAL)
|| (sasl_username && sasl_username[0]
&& sasl_password && sasl_password[0])) ? 1 : 0;
if (sasl_username)
free (sasl_username);
if (sasl_password)
free (sasl_password);
return rc;
}
/*
@@ -1176,9 +1185,11 @@ irc_server_alloc_with_url (const char *irc_url)
}
}
if (pos_password && pos_password[0])
{
weechat_config_option_set (ptr_server->options[IRC_SERVER_OPTION_PASSWORD],
pos_password,
1);
}
weechat_config_option_set (ptr_server->options[IRC_SERVER_OPTION_AUTOCONNECT],
"on",
1);
@@ -3039,10 +3050,12 @@ irc_server_reconnect_schedule (struct t_irc_server *server)
void
irc_server_login (struct t_irc_server *server)
{
const char *password, *username, *realname, *capabilities;
char *username2;
const char *username, *realname, *capabilities;
char *password, *username2;
password = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_PASSWORD);
password = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_PASSWORD),
NULL, NULL);
username = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_USERNAME);
realname = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_REALNAME);
capabilities = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_CAPABILITIES);
@@ -3050,6 +3063,9 @@ irc_server_login (struct t_irc_server *server)
if (password && password[0])
irc_server_sendf (server, 0, NULL, "PASS %s", password);
if (password)
free (password);
if (!server->nick)
{
irc_server_set_nick (server,
@@ -4104,7 +4120,7 @@ void
irc_server_autojoin_channels (struct t_irc_server *server)
{
struct t_irc_channel *ptr_channel;
const char *autojoin;
char *autojoin;
/* auto-join after disconnection (only rejoins opened channels) */
if (!server->disable_autojoin && server->reconnect_join && server->channels)
@@ -4136,9 +4152,13 @@ irc_server_autojoin_channels (struct t_irc_server *server)
else
{
/* auto-join when connecting to server for first time */
autojoin = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_AUTOJOIN);
autojoin = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_AUTOJOIN),
NULL, NULL);
if (!server->disable_autojoin && autojoin && autojoin[0])
irc_command_join_server (server, autojoin, 0, 0);
if (autojoin)
free (autojoin);
}
server->disable_autojoin = 0;
+3
View File
@@ -54,6 +54,9 @@ char *rmodifier_config_default_list[][4] =
{ "set_pass", "history_add",
"^(/set +\\S*password\\S* +)(.*)", "1,2*"
},
{ "secure", "history_add,input_text_display",
"^(/secure +(passphrase|decrypt|set \\S+) +)(.*)", "1,3*"
},
{ NULL, NULL, NULL, NULL },
};