projects
/
silc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
updates.
[silc.git]
/
lib
/
silcclient
/
command.c
diff --git
a/lib/silcclient/command.c
b/lib/silcclient/command.c
index 6a8335fe7ab5da1cf710c3b6d45e37d33f0c03ff..b449b1150ed9da09d1d1eccd113d1f948bf63754 100644
(file)
--- a/
lib/silcclient/command.c
+++ b/
lib/silcclient/command.c
@@
-320,8
+320,6
@@
SILC_CLIENT_CMD_FUNC(identify)
}
if (cmd->argc < 2 || cmd->argc > 3) {
}
if (cmd->argc < 2 || cmd->argc > 3) {
- cmd->client->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /IDENTIFY <nickname>[@<server>] [<count>]");
COMMAND_ERROR;
goto out;
}
COMMAND_ERROR;
goto out;
}
@@
-551,8
+549,8
@@
SILC_CLIENT_CMD_FUNC(invite)
SilcClientEntry client_entry = NULL;
SilcChannelEntry channel;
SilcBuffer buffer, clidp, chidp;
SilcClientEntry client_entry = NULL;
SilcChannelEntry channel;
SilcBuffer buffer, clidp, chidp;
- uint32
num = 0,
type = 0;
- char *nickname = NULL, *
server = NULL, *
name;
+ uint32 type = 0;
+ char *nickname = NULL, *name;
char *invite = NULL;
if (!cmd->conn) {
char *invite = NULL;
if (!cmd->conn) {
@@
-593,21
+591,16
@@
SILC_CLIENT_CMD_FUNC(invite)
/* Parse the typed nickname. */
if (cmd->argc == 3) {
if (cmd->argv[2][0] != '+' && cmd->argv[2][0] != '-') {
/* Parse the typed nickname. */
if (cmd->argc == 3) {
if (cmd->argv[2][0] != '+' && cmd->argv[2][0] != '-') {
- if (!silc_parse_nickname(cmd->argv[2], &nickname, &server, &num)) {
- cmd->client->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Bad nickname");
- COMMAND_ERROR;
- goto out;
- }
-
+ if (client->params->nickname_parse)
+ client->params->nickname_parse(cmd->argv[2], &nickname);
+ else
+ nickname = strdup(cmd->argv[2]);
+
/* Find client entry */
client_entry = silc_idlist_get_client(client, conn, nickname,
/* Find client entry */
client_entry = silc_idlist_get_client(client, conn, nickname,
-
server, num
, TRUE);
+
cmd->argv[2]
, TRUE);
if (!client_entry) {
if (!client_entry) {
- if (nickname)
- silc_free(nickname);
- if (server)
- silc_free(server);
+ silc_free(nickname);
if (cmd->pending) {
COMMAND_ERROR;
if (cmd->pending) {
COMMAND_ERROR;
@@
-662,10
+655,7
@@
SILC_CLIENT_CMD_FUNC(invite)
COMMAND;
out:
COMMAND;
out:
- if (nickname)
- silc_free(nickname);
- if (server)
- silc_free(server);
+ silc_free(nickname);
silc_client_command_free(cmd);
}
silc_client_command_free(cmd);
}
@@
-733,11
+723,11
@@
SILC_CLIENT_CMD_FUNC(quit)
SILC_CLIENT_CMD_FUNC(kill)
{
SilcClientCommandContext cmd = (SilcClientCommandContext)context;
SILC_CLIENT_CMD_FUNC(kill)
{
SilcClientCommandContext cmd = (SilcClientCommandContext)context;
+ SilcClient client = cmd->client;
SilcClientConnection conn = cmd->conn;
SilcBuffer buffer, idp;
SilcClientEntry target;
SilcClientConnection conn = cmd->conn;
SilcBuffer buffer, idp;
SilcClientEntry target;
- uint32 num = 0;
- char *nickname = NULL, *server = NULL;
+ char *nickname = NULL;
if (!cmd->conn) {
SILC_NOT_CONNECTED(cmd->client, cmd->conn);
if (!cmd->conn) {
SILC_NOT_CONNECTED(cmd->client, cmd->conn);
@@
-753,20
+743,16
@@
SILC_CLIENT_CMD_FUNC(kill)
}
/* Parse the typed nickname. */
}
/* Parse the typed nickname. */
- if (!silc_parse_nickname(cmd->argv[1], &nickname, &server, &num)) {
- cmd->client->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Bad nickname");
- COMMAND_ERROR;
- goto out;
- }
+ if (client->params->nickname_parse)
+ client->params->nickname_parse(cmd->argv[1], &nickname);
+ else
+ nickname = strdup(cmd->argv[1]);
/* Get the target client */
target = silc_idlist_get_client(cmd->client, conn, nickname,
/* Get the target client */
target = silc_idlist_get_client(cmd->client, conn, nickname,
-
server, num
, TRUE);
+
cmd->argv[1]
, TRUE);
if (!target) {
silc_free(nickname);
if (!target) {
silc_free(nickname);
- if (server)
- silc_free(server);
if (cmd->pending) {
COMMAND_ERROR;
if (cmd->pending) {
COMMAND_ERROR;
@@
-803,10
+789,7
@@
SILC_CLIENT_CMD_FUNC(kill)
COMMAND;
out:
COMMAND;
out:
- if (nickname)
- silc_free(nickname);
- if (server)
- silc_free(server);
+ silc_free(nickname);
silc_client_command_free(cmd);
}
silc_client_command_free(cmd);
}
@@
-1332,6
+1315,7
@@
SILC_CLIENT_CMD_FUNC(cmode)
SILC_CLIENT_CMD_FUNC(cumode)
{
SilcClientCommandContext cmd = (SilcClientCommandContext)context;
SILC_CLIENT_CMD_FUNC(cumode)
{
SilcClientCommandContext cmd = (SilcClientCommandContext)context;
+ SilcClient client = cmd->client;
SilcClientConnection conn = cmd->conn;
SilcChannelEntry channel;
SilcChannelUser chu;
SilcClientConnection conn = cmd->conn;
SilcChannelEntry channel;
SilcChannelUser chu;
@@
-1339,8
+1323,7
@@
SILC_CLIENT_CMD_FUNC(cumode)
SilcBuffer buffer, clidp, chidp, auth = NULL;
unsigned char *name, *cp, modebuf[4];
uint32 mode = 0, add, len;
SilcBuffer buffer, clidp, chidp, auth = NULL;
unsigned char *name, *cp, modebuf[4];
uint32 mode = 0, add, len;
- char *nickname = NULL, *server = NULL;
- uint32 num = 0;
+ char *nickname = NULL;
int i;
if (!cmd->conn) {
int i;
if (!cmd->conn) {
@@
-1378,16
+1361,17
@@
SILC_CLIENT_CMD_FUNC(cumode)
}
/* Parse the typed nickname. */
}
/* Parse the typed nickname. */
- if (!silc_parse_nickname(cmd->argv[3], &nickname, &server, &num)) {
- cmd->client->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO, "Bad nickname");
- COMMAND_ERROR;
- goto out;
- }
+ if (client->params->nickname_parse)
+ client->params->nickname_parse(cmd->argv[3], &nickname);
+ else
+ nickname = strdup(cmd->argv[3]);
/* Find client entry */
/* Find client entry */
- client_entry = silc_idlist_get_client(cmd->client, conn,
-
nickname, server, num
, TRUE);
+ client_entry = silc_idlist_get_client(cmd->client, conn,
nickname,
+
cmd->argv[3]
, TRUE);
if (!client_entry) {
if (!client_entry) {
+ silc_free(nickname);
+
if (cmd->pending) {
COMMAND_ERROR;
goto out;
if (cmd->pending) {
COMMAND_ERROR;
goto out;
@@
-1488,10
+1472,7
@@
SILC_CLIENT_CMD_FUNC(cumode)
COMMAND;
out:
COMMAND;
out:
- if (nickname)
- silc_free(nickname);
- if (server)
- silc_free(server);
+ silc_free(nickname);
silc_client_command_free(cmd);
}
silc_client_command_free(cmd);
}
@@
-1500,14
+1481,14
@@
SILC_CLIENT_CMD_FUNC(cumode)
SILC_CLIENT_CMD_FUNC(kick)
{
SilcClientCommandContext cmd = (SilcClientCommandContext)context;
SILC_CLIENT_CMD_FUNC(kick)
{
SilcClientCommandContext cmd = (SilcClientCommandContext)context;
+ SilcClient client = cmd->client;
SilcClientConnection conn = cmd->conn;
SilcIDCacheEntry id_cache = NULL;
SilcChannelEntry channel;
SilcBuffer buffer, idp, idp2;
SilcClientEntry target;
char *name;
SilcClientConnection conn = cmd->conn;
SilcIDCacheEntry id_cache = NULL;
SilcChannelEntry channel;
SilcBuffer buffer, idp, idp2;
SilcClientEntry target;
char *name;
- uint32 num = 0;
- char *nickname = NULL, *server = NULL;
+ char *nickname = NULL;
if (!cmd->conn) {
SILC_NOT_CONNECTED(cmd->client, cmd->conn);
if (!cmd->conn) {
SILC_NOT_CONNECTED(cmd->client, cmd->conn);
@@
-1552,16
+1533,14
@@
SILC_CLIENT_CMD_FUNC(kick)
channel = (SilcChannelEntry)id_cache->context;
/* Parse the typed nickname. */
channel = (SilcChannelEntry)id_cache->context;
/* Parse the typed nickname. */
- if (!silc_parse_nickname(cmd->argv[2], &nickname, &server, &num)) {
- cmd->client->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Bad nickname");
- COMMAND_ERROR;
- goto out;
- }
+ if (client->params->nickname_parse)
+ client->params->nickname_parse(cmd->argv[2], &nickname);
+ else
+ nickname = strdup(cmd->argv[2]);
/* Get the target client */
target = silc_idlist_get_client(cmd->client, conn, nickname,
/* Get the target client */
target = silc_idlist_get_client(cmd->client, conn, nickname,
-
server, num
, FALSE);
+
cmd->argv[2]
, FALSE);
if (!target) {
cmd->client->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
"No such client: %s",
if (!target) {
cmd->client->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
"No such client: %s",
@@
-1593,10
+1572,7
@@
SILC_CLIENT_CMD_FUNC(kick)
COMMAND;
out:
COMMAND;
out:
- if (nickname)
- silc_free(nickname);
- if (server)
- silc_free(server);
+ silc_free(nickname);
silc_client_command_free(cmd);
}
silc_client_command_free(cmd);
}
@@
-1607,11
+1583,15
@@
static void silc_client_command_oper_send(unsigned char *data,
SilcClientConnection conn = cmd->conn;
SilcBuffer buffer, auth;
SilcClientConnection conn = cmd->conn;
SilcBuffer buffer, auth;
- if (cmd->argc == 3) {
- /* Pulic key auth XXX TODO */
- auth = NULL;
+ if (cmd->argc >= 3) {
+ /* Encode the public key authentication payload */
+ auth = silc_auth_public_key_auth_generate(cmd->client->public_key,
+ cmd->client->private_key,
+ conn->hash,
+ conn->local_id,
+ SILC_ID_CLIENT);
} else {
} else {
- /* Encode the authentication payload */
+ /* Encode the
password
authentication payload */
auth = silc_auth_payload_encode(SILC_AUTH_PASSWORD, NULL, 0,
data, data_len);
}
auth = silc_auth_payload_encode(SILC_AUTH_PASSWORD, NULL, 0,
data, data_len);
}
@@
-1636,8
+1616,6
@@
SILC_CLIENT_CMD_FUNC(oper)
{
SilcClientCommandContext cmd = (SilcClientCommandContext)context;
SilcClientConnection conn = cmd->conn;
{
SilcClientCommandContext cmd = (SilcClientCommandContext)context;
SilcClientConnection conn = cmd->conn;
- unsigned char *auth_data;
- uint32 auth_data_len = 0;
if (!cmd->conn) {
SILC_NOT_CONNECTED(cmd->client, cmd->conn);
if (!cmd->conn) {
SILC_NOT_CONNECTED(cmd->client, cmd->conn);
@@
-1647,17
+1625,12
@@
SILC_CLIENT_CMD_FUNC(oper)
if (cmd->argc < 2) {
cmd->client->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
if (cmd->argc < 2) {
cmd->client->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /OPER <username> [
<public key>
]");
+ "Usage: /OPER <username> [
-pubkey
]");
COMMAND_ERROR;
goto out;
}
COMMAND_ERROR;
goto out;
}
- if (cmd->argc == 3) {
- /* XXX Get public key */
- auth_data = NULL;
- COMMAND_ERROR;
- goto out;
- } else {
+ if (cmd->argc < 3) {
/* Get passphrase */
cmd->client->ops->ask_passphrase(cmd->client, conn,
silc_client_command_oper_send,
/* Get passphrase */
cmd->client->ops->ask_passphrase(cmd->client, conn,
silc_client_command_oper_send,
@@
-1665,13
+1638,7
@@
SILC_CLIENT_CMD_FUNC(oper)
return;
}
return;
}
- silc_client_command_oper_send(auth_data, auth_data_len, context);
-
- memset(auth_data, 0, auth_data_len);
- silc_free(auth_data);
-
- /* Notify application */
- COMMAND;
+ silc_client_command_oper_send(NULL, 0, context);
out:
silc_client_command_free(cmd);
out:
silc_client_command_free(cmd);
@@
-1684,11
+1651,15
@@
static void silc_client_command_silcoper_send(unsigned char *data,
SilcClientConnection conn = cmd->conn;
SilcBuffer buffer, auth;
SilcClientConnection conn = cmd->conn;
SilcBuffer buffer, auth;
- if (cmd->argc == 3) {
- /* Pulic key auth XXX TODO */
- auth = NULL;
+ if (cmd->argc >= 3) {
+ /* Encode the public key authentication payload */
+ auth = silc_auth_public_key_auth_generate(cmd->client->public_key,
+ cmd->client->private_key,
+ conn->hash,
+ conn->local_id,
+ SILC_ID_CLIENT);
} else {
} else {
- /* Encode the authentication payload */
+ /* Encode the
password
authentication payload */
auth = silc_auth_payload_encode(SILC_AUTH_PASSWORD, NULL, 0,
data, data_len);
}
auth = silc_auth_payload_encode(SILC_AUTH_PASSWORD, NULL, 0,
data, data_len);
}
@@
-1713,8
+1684,6
@@
SILC_CLIENT_CMD_FUNC(silcoper)
{
SilcClientCommandContext cmd = (SilcClientCommandContext)context;
SilcClientConnection conn = cmd->conn;
{
SilcClientCommandContext cmd = (SilcClientCommandContext)context;
SilcClientConnection conn = cmd->conn;
- unsigned char *auth_data;
- uint32 auth_data_len = 0;
if (!cmd->conn) {
SILC_NOT_CONNECTED(cmd->client, cmd->conn);
if (!cmd->conn) {
SILC_NOT_CONNECTED(cmd->client, cmd->conn);
@@
-1724,17
+1693,12
@@
SILC_CLIENT_CMD_FUNC(silcoper)
if (cmd->argc < 2) {
cmd->client->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
if (cmd->argc < 2) {
cmd->client->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,
- "Usage: /SILCOPER <username> [
<public key>
]");
+ "Usage: /SILCOPER <username> [
-pubkey
]");
COMMAND_ERROR;
goto out;
}
COMMAND_ERROR;
goto out;
}
- if (cmd->argc == 3) {
- /* XXX Get public key */
- auth_data = NULL;
- COMMAND_ERROR;
- goto out;
- } else {
+ if (cmd->argc < 3) {
/* Get passphrase */
cmd->client->ops->ask_passphrase(cmd->client, conn,
silc_client_command_silcoper_send,
/* Get passphrase */
cmd->client->ops->ask_passphrase(cmd->client, conn,
silc_client_command_silcoper_send,
@@
-1742,13
+1706,7
@@
SILC_CLIENT_CMD_FUNC(silcoper)
return;
}
return;
}
- silc_client_command_silcoper_send(auth_data, auth_data_len, context);
-
- memset(auth_data, 0, auth_data_len);
- silc_free(auth_data);
-
- /* Notify application */
- COMMAND;
+ silc_client_command_silcoper_send(NULL, 0, context);
out:
silc_client_command_free(cmd);
out:
silc_client_command_free(cmd);
@@
-2079,8
+2037,7
@@
SILC_CLIENT_CMD_FUNC(getkey)
SilcClient client = cmd->client;
SilcClientEntry client_entry = NULL;
SilcServerEntry server_entry = NULL;
SilcClient client = cmd->client;
SilcClientEntry client_entry = NULL;
SilcServerEntry server_entry = NULL;
- uint32 num = 0;
- char *nickname = NULL, *server = NULL;
+ char *nickname = NULL;
SilcBuffer idp, buffer;
if (!cmd->conn) {
SilcBuffer idp, buffer;
if (!cmd->conn) {
@@
-2097,18
+2054,17
@@
SILC_CLIENT_CMD_FUNC(getkey)
}
/* Parse the typed nickname. */
}
/* Parse the typed nickname. */
- if (!silc_parse_nickname(cmd->argv[1], &nickname, &server, &num)) {
- client->ops->say(client, conn, SILC_CLIENT_MESSAGE_INFO, "Bad nickname");
- COMMAND_ERROR;
- goto out;
- }
+ if (client->params->nickname_parse)
+ client->params->nickname_parse(cmd->argv[1], &nickname);
+ else
+ nickname = strdup(cmd->argv[1]);
/* Find client entry */
/* Find client entry */
- client_entry = silc_idlist_get_client(client, conn, nickname,
server, num
,
+ client_entry = silc_idlist_get_client(client, conn, nickname,
cmd->argv[1]
,
FALSE);
if (!client_entry) {
/* Check whether user requested server actually */
FALSE);
if (!client_entry) {
/* Check whether user requested server actually */
- server_entry = silc_client_get_server(client, conn,
nickname
);
+ server_entry = silc_client_get_server(client, conn,
cmd->argv[1]
);
if (!server_entry) {
/* No. what ever user wants we don't have it, so resolve it. We
if (!server_entry) {
/* No. what ever user wants we don't have it, so resolve it. We
@@
-2116,7
+2072,7
@@
SILC_CLIENT_CMD_FUNC(getkey)
bound to be wrong. */
/* This will send the IDENTIFY command */
bound to be wrong. */
/* This will send the IDENTIFY command */
- silc_idlist_get_client(client, conn, nickname,
server, num
, TRUE);
+ silc_idlist_get_client(client, conn, nickname,
cmd->argv[1]
, TRUE);
silc_client_command_pending(conn, SILC_COMMAND_IDENTIFY,
conn->cmd_ident,
silc_client_command_destructor,
silc_client_command_pending(conn, SILC_COMMAND_IDENTIFY,
conn->cmd_ident,
silc_client_command_destructor,
@@
-2126,7
+2082,7
@@
SILC_CLIENT_CMD_FUNC(getkey)
/* This sends the INFO command to resolve the server. */
silc_client_send_command(client, conn, SILC_COMMAND_INFO,
++conn->cmd_ident, 1,
/* This sends the INFO command to resolve the server. */
silc_client_send_command(client, conn, SILC_COMMAND_INFO,
++conn->cmd_ident, 1,
- 1,
nickname, strlen(nickname)
);
+ 1,
cmd->argv[1], cmd->argv_lens[1]
);
silc_client_command_pending(conn, SILC_COMMAND_IDENTIFY,
conn->cmd_ident,
silc_client_command_destructor,
silc_client_command_pending(conn, SILC_COMMAND_IDENTIFY,
conn->cmd_ident,
silc_client_command_destructor,
@@
-2134,6
+2090,7
@@
SILC_CLIENT_CMD_FUNC(getkey)
silc_client_command_dup(cmd));
cmd->pending = 1;
silc_client_command_dup(cmd));
cmd->pending = 1;
+ silc_free(nickname);
return;
}
return;
}
@@
-2153,5
+2110,6
@@
SILC_CLIENT_CMD_FUNC(getkey)
COMMAND;
out:
COMMAND;
out:
+ silc_free(nickname);
silc_client_command_free(cmd);
}
silc_client_command_free(cmd);
}