mirror of
https://github.com/weechat/weechat.git
synced 2026-07-04 08:43:13 +02:00
irc: do not allow the creation of two servers with same name but different case (fix error when writing file irc.conf) (bug #35840)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
WeeChat ChangeLog
|
||||
=================
|
||||
Sébastien Helleu <flashcode@flashtux.org>
|
||||
v0.3.8-dev, 2012-03-15
|
||||
v0.3.8-dev, 2012-03-17
|
||||
|
||||
|
||||
Version 0.3.8 (under dev!)
|
||||
@@ -15,6 +15,8 @@ Version 0.3.8 (under dev!)
|
||||
(task #11316)
|
||||
* core: fix display of wide chars on last column of chat area (patch #7733)
|
||||
* api: add list "gui_buffer_last_displayed" in hdata "buffer"
|
||||
* irc: do not allow the creation of two servers with same name but different
|
||||
case (fix error when writing file irc.conf) (bug #35840)
|
||||
* irc: update away flag for nicks on manual /who
|
||||
* irc: display privmsg messages to "@#channel" and "+#channel" in channel buffer
|
||||
(bug #35331)
|
||||
|
||||
@@ -3809,13 +3809,14 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc,
|
||||
{
|
||||
IRC_COMMAND_TOO_FEW_ARGUMENTS(NULL, "server add");
|
||||
}
|
||||
if (irc_server_search (argv[2]))
|
||||
ptr_server2 = irc_server_casesearch (argv[2]);
|
||||
if (ptr_server2)
|
||||
{
|
||||
weechat_printf (NULL,
|
||||
_("%s%s: server \"%s\" already exists, "
|
||||
"can't create it!"),
|
||||
weechat_prefix ("error"), IRC_PLUGIN_NAME,
|
||||
argv[2]);
|
||||
ptr_server2->name);
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
if (argv[2][0] == '#')
|
||||
@@ -3875,13 +3876,14 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc,
|
||||
}
|
||||
|
||||
/* check if target name already exists */
|
||||
if (irc_server_search (argv[3]))
|
||||
ptr_server2 = irc_server_casesearch (argv[3]);
|
||||
if (ptr_server2)
|
||||
{
|
||||
weechat_printf (NULL,
|
||||
_("%s%s: server \"%s\" already exists for "
|
||||
"\"%s\" command"),
|
||||
weechat_prefix ("error"), IRC_PLUGIN_NAME,
|
||||
argv[3], "server copy");
|
||||
ptr_server2->name, "server copy");
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
@@ -3925,13 +3927,14 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc,
|
||||
}
|
||||
|
||||
/* check if target name already exists */
|
||||
if (irc_server_search (argv[3]))
|
||||
ptr_server2 = irc_server_casesearch (argv[3]);
|
||||
if (ptr_server2)
|
||||
{
|
||||
weechat_printf (NULL,
|
||||
_("%s%s: server \"%s\" already exists for "
|
||||
"\"%s\" command"),
|
||||
weechat_prefix ("error"), IRC_PLUGIN_NAME,
|
||||
argv[3], "server rename");
|
||||
ptr_server2->name, "server rename");
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -136,6 +136,53 @@ irc_server_valid (struct t_irc_server *server)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_server_search: return pointer on a server with a name
|
||||
*/
|
||||
|
||||
struct t_irc_server *
|
||||
irc_server_search (const char *server_name)
|
||||
{
|
||||
struct t_irc_server *ptr_server;
|
||||
|
||||
if (!server_name)
|
||||
return NULL;
|
||||
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if (strcmp (ptr_server->name, server_name) == 0)
|
||||
return ptr_server;
|
||||
}
|
||||
|
||||
/* server not found */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_server_casesearch: return pointer on a server with a name
|
||||
* (case insensitive search)
|
||||
*/
|
||||
|
||||
struct t_irc_server *
|
||||
irc_server_casesearch (const char *server_name)
|
||||
{
|
||||
struct t_irc_server *ptr_server;
|
||||
|
||||
if (!server_name)
|
||||
return NULL;
|
||||
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if (weechat_strcasecmp (ptr_server->name, server_name) == 0)
|
||||
return ptr_server;
|
||||
}
|
||||
|
||||
/* server not found */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_server_search_option: search a server option name
|
||||
* return index of option in array
|
||||
@@ -674,7 +721,7 @@ irc_server_alloc (const char *name)
|
||||
int i, length;
|
||||
char *option_name;
|
||||
|
||||
if (irc_server_search (name))
|
||||
if (irc_server_casesearch (name))
|
||||
return NULL;
|
||||
|
||||
/* alloc memory for new server */
|
||||
@@ -1278,7 +1325,7 @@ irc_server_copy (struct t_irc_server *server, const char *new_name)
|
||||
int length, index_option;
|
||||
|
||||
/* check if another server exists with this name */
|
||||
if (irc_server_search (new_name))
|
||||
if (irc_server_casesearch (new_name))
|
||||
return NULL;
|
||||
|
||||
new_server = irc_server_alloc (new_name);
|
||||
@@ -1336,7 +1383,7 @@ irc_server_rename (struct t_irc_server *server, const char *new_server_name)
|
||||
struct t_irc_channel *ptr_channel;
|
||||
|
||||
/* check if another server exists with this name */
|
||||
if (irc_server_search (new_server_name))
|
||||
if (irc_server_casesearch (new_server_name))
|
||||
return 0;
|
||||
|
||||
/* rename options */
|
||||
@@ -3812,29 +3859,6 @@ irc_server_autojoin_channels (struct t_irc_server *server)
|
||||
server->disable_autojoin = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_server_search: return pointer on a server with a name
|
||||
*/
|
||||
|
||||
struct t_irc_server *
|
||||
irc_server_search (const char *server_name)
|
||||
{
|
||||
struct t_irc_server *ptr_server;
|
||||
|
||||
if (!server_name)
|
||||
return NULL;
|
||||
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if (strcmp (ptr_server->name, server_name) == 0)
|
||||
return ptr_server;
|
||||
}
|
||||
|
||||
/* server not found */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_server_get_number_connected: returns number of connected server
|
||||
*/
|
||||
|
||||
@@ -220,6 +220,8 @@ extern char *irc_server_option_string[];
|
||||
extern char *irc_server_option_default[];
|
||||
|
||||
extern int irc_server_valid (struct t_irc_server *server);
|
||||
extern struct t_irc_server *irc_server_search (const char *server_name);
|
||||
extern struct t_irc_server *irc_server_casesearch (const char *server_name);
|
||||
extern int irc_server_search_option (const char *option_name);
|
||||
extern int irc_server_search_casemapping (const char *casemapping);
|
||||
extern int irc_server_strcasecmp (struct t_irc_server *server,
|
||||
@@ -265,7 +267,6 @@ extern struct t_hashtable *irc_server_sendf (struct t_irc_server *server,
|
||||
int flags,
|
||||
const char *tags,
|
||||
const char *format, ...);
|
||||
extern struct t_irc_server *irc_server_search (const char *server_name);
|
||||
extern void irc_server_set_buffer_title (struct t_irc_server *server);
|
||||
extern struct t_gui_buffer *irc_server_create_buffer (struct t_irc_server *server);
|
||||
extern int irc_server_connect (struct t_irc_server *server);
|
||||
|
||||
Reference in New Issue
Block a user