Merged from silc_1_0_branch.
[silc.git] / apps / silcd / server_query.c
index a8bd816b4dd93ab0613eb785df7212bde95d792c..6475c57301b06b7dcde972704472061994bf0c7a 100644 (file)
@@ -407,6 +407,8 @@ void silc_server_query_parse(SilcServer server, SilcServerQuery query)
              for (i = 0; i < query->ids_count; i++)
                silc_free(query->ids[i].id);
              silc_free(query->ids);
+             query->ids = NULL;
+             query->ids_count = 0;
              silc_free(id);
              return;
            }
@@ -524,6 +526,8 @@ void silc_server_query_parse(SilcServer server, SilcServerQuery query)
                for (i = 0; i < query->ids_count; i++)
                  silc_free(query->ids[i].id);
                silc_free(query->ids);
+               query->ids = NULL;
+               query->ids_count = 0;
                silc_free(id);
                return;
              }
@@ -535,6 +539,8 @@ void silc_server_query_parse(SilcServer server, SilcServerQuery query)
            for (i = 0; i < query->ids_count; i++)
              silc_free(query->ids[i].id);
            silc_free(query->ids);
+           query->ids = NULL;
+           query->ids_count = 0;
            silc_free(id);
            return;
          }
@@ -1548,7 +1554,7 @@ SilcBuffer silc_server_query_reply_attrs(SilcServer server,
   SilcAttributeObjPk pk;
   SilcAttributeObjService service;
   unsigned char *tmp;
-  unsigned char sign[2048];
+  unsigned char sign[2048 + 1];
   SilcUInt32 sign_len;
 
   SILC_LOG_DEBUG(("Constructing Requested Attributes"));
@@ -1567,6 +1573,8 @@ SilcBuffer silc_server_query_reply_attrs(SilcServer server,
       silc_strncat(service.address, sizeof(service.address),
                   server->server_name, strlen(server->server_name));
       service.status = !(client_entry->mode & SILC_UMODE_DETACHED);
+      if (client_entry->connection)
+       service.idle = time(NULL) - client_entry->data.last_receive;
       buffer = silc_attribute_payload_encode(buffer, attribute,
                                             SILC_ATTRIBUTE_FLAG_VALID,
                                             &service, sizeof(service));