updates.
[silc.git] / apps / silcd / command.c
index 567a0f9228de8c0d11b75f8bd0bc32aeb0e4e286..25289ae679515fbabd94ae90693525fc1f179fe8 100644 (file)
@@ -122,6 +122,10 @@ static int silc_server_is_registered(SilcServer server,
                                     SilcCommand command)
 {
   SilcIDListData idata = (SilcIDListData)sock->user_data;
+
+  if (!idata)
+    return FALSE;
+
   if (idata->status & SILC_IDLIST_STATUS_REGISTERED)
     return TRUE;
 
@@ -1932,14 +1936,19 @@ SILC_SERVER_CMD_FUNC(identify)
 
 static int silc_server_command_bad_chars(char *nick)
 {
-  if (strchr(nick, '\\')) return TRUE;
-  if (strchr(nick, '\"')) return TRUE;
-  if (strchr(nick, 'ยด')) return TRUE;
-  if (strchr(nick, '`')) return TRUE;
-  if (strchr(nick, '\'')) return TRUE;
-  if (strchr(nick, '*')) return TRUE;
-  if (strchr(nick, '/')) return TRUE;
-  if (strchr(nick, '@')) return TRUE;
+  int i;
+
+  for (i = 0; i < strlen(nick); i++) {
+    if (!isalpha(nick[i]))
+      return TRUE;
+    if (nick[i] == ' ') return TRUE;
+    if (nick[i] == '\\') return TRUE;
+    if (nick[i] == '\"') return TRUE;
+    if (nick[i] == '*') return TRUE;
+    if (nick[i] == '?') return TRUE;
+    if (nick[i] == ',') return TRUE;
+    if (nick[i] == '@') return TRUE;
+  }
 
   return FALSE;
 }
@@ -5109,10 +5118,8 @@ SILC_SERVER_CMD_FUNC(getkey)
                                             client_id, TRUE, NULL);
     
     if ((!client && !cmd->pending && !server->standalone) ||
-       (client && !client->connection && !cmd->pending && 
-        !server->standalone) ||
-       (client && !client->data.public_key && !cmd->pending &&
-        !server->standalone)) {
+       (client && !client->connection && !cmd->pending) ||
+       (client && !client->data.public_key && !cmd->pending)) {
       SilcBuffer tmpbuf;
       uint16 old_ident;
       SilcSocketConnection dest_sock;