X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Firssi%2Fsrc%2Fsilc%2Fcore%2Fsilc-queries.c;h=3da82845914b2b6947a61b4fd68561f34058483d;hb=c257b555225193e54d85daf541d29578b3c93882;hp=033cb182de600881a1ece524428a08d836c28bfb;hpb=7c8a302d3f6af3b4e522f589a0071f9aaa6df445;p=silc.git diff --git a/apps/irssi/src/silc/core/silc-queries.c b/apps/irssi/src/silc/core/silc-queries.c index 033cb182..3da82845 100644 --- a/apps/irssi/src/silc/core/silc-queries.c +++ b/apps/irssi/src/silc/core/silc-queries.c @@ -1,6 +1,6 @@ /* - silc-queries.c + silc-queries.c Author: Pekka Riikonen @@ -156,45 +156,45 @@ void command_attr(const char *data, SILC_SERVER_REC *server, if (!strcasecmp(argv[1], "-del")) { /* Delete attribute */ - if (!strcasecmp(argv[1], "vcard")) { + if (!strcasecmp(argv[2], "vcard")) { silc_client_attribute_del(silc_client, server->conn, SILC_ATTRIBUTE_USER_INFO, NULL); settings_set_str("attr_vcard", ""); - } else if (!strcasecmp(argv[1], "services")) { + } else if (!strcasecmp(argv[2], "services")) { silc_client_attribute_del(silc_client, server->conn, SILC_ATTRIBUTE_SERVICE, NULL); settings_set_str("attr_services", argv[2]); - } else if (!strcasecmp(argv[1], "status_mood")) { + } else if (!strcasecmp(argv[2], "status_mood")) { silc_client_attribute_del(silc_client, server->conn, SILC_ATTRIBUTE_STATUS_MOOD, NULL); settings_set_str("attr_status_mood", ""); - } else if (!strcasecmp(argv[1], "status_text")) { + } else if (!strcasecmp(argv[2], "status_text")) { silc_client_attribute_del(silc_client, server->conn, SILC_ATTRIBUTE_STATUS_FREETEXT, NULL); settings_set_str("attr_status_text", ""); - } else if (!strcasecmp(argv[1], "status_message")) { + } else if (!strcasecmp(argv[2], "status_message")) { silc_client_attribute_del(silc_client, server->conn, SILC_ATTRIBUTE_STATUS_MESSAGE, NULL); settings_set_str("attr_status_message", ""); - } else if (!strcasecmp(argv[1], "preferred_langauge")) { + } else if (!strcasecmp(argv[2], "preferred_language")) { silc_client_attribute_del(silc_client, server->conn, SILC_ATTRIBUTE_PREFERRED_LANGUAGE, NULL); settings_set_str("attr_preferred_language", ""); - } else if (!strcasecmp(argv[1], "preferred_contact")) { + } else if (!strcasecmp(argv[2], "preferred_contact")) { silc_client_attribute_del(silc_client, server->conn, SILC_ATTRIBUTE_PREFERRED_CONTACT, NULL); settings_set_str("attr_preferred_contact", ""); - } else if (!strcasecmp(argv[1], "timezone")) { + } else if (!strcasecmp(argv[2], "timezone")) { return; - } else if (!strcasecmp(argv[1], "geolocation")) { + } else if (!strcasecmp(argv[2], "geolocation")) { silc_client_attribute_del(silc_client, server->conn, SILC_ATTRIBUTE_GEOLOCATION, NULL); settings_set_str("attr_geolocation", ""); - } else if (!strcasecmp(argv[1], "device_info")) { + } else if (!strcasecmp(argv[2], "device_info")) { silc_client_attribute_del(silc_client, server->conn, SILC_ATTRIBUTE_DEVICE_INFO, NULL); settings_set_str("attr_device_info", ""); - } else if (!strcasecmp(argv[1], "public_keys")) { + } else if (!strcasecmp(argv[2], "public_keys")) { silc_client_attribute_del(silc_client, server->conn, SILC_ATTRIBUTE_USER_PUBLIC_KEY, NULL); settings_set_str("attr_public_keys", ""); @@ -218,7 +218,7 @@ void command_attr(const char *data, SILC_SERVER_REC *server, settings_set_str("attr_status_text", argv[2]); } else if (!strcasecmp(argv[1], "status_message")) { settings_set_str("attr_status_message", argv[2]); - } else if (!strcasecmp(argv[1], "preferred_langauge")) { + } else if (!strcasecmp(argv[1], "preferred_language")) { settings_set_str("attr_preferred_language", argv[2]); } else if (!strcasecmp(argv[1], "preferred_contact")) { settings_set_str("attr_preferred_contact", argv[2]); @@ -261,16 +261,46 @@ void silc_query_attributes_default(SilcClient client, memset(&pk, 0, sizeof(pk)); memset(&vcard, 0, sizeof(vcard)); + allowed = settings_get_bool("attr_allow"); + if (!allowed) { + silc_client_attribute_del(silc_client, conn, + SILC_ATTRIBUTE_USER_INFO, NULL); + silc_client_attribute_del(silc_client, conn, + SILC_ATTRIBUTE_SERVICE, NULL); + silc_client_attribute_del(silc_client, conn, + SILC_ATTRIBUTE_STATUS_MOOD, NULL); + silc_client_attribute_del(silc_client, conn, + SILC_ATTRIBUTE_STATUS_FREETEXT, NULL); + silc_client_attribute_del(silc_client, conn, + SILC_ATTRIBUTE_STATUS_MESSAGE, NULL); + silc_client_attribute_del(silc_client, conn, + SILC_ATTRIBUTE_PREFERRED_LANGUAGE, NULL); + silc_client_attribute_del(silc_client, conn, + SILC_ATTRIBUTE_PREFERRED_CONTACT, NULL); + silc_client_attribute_del(silc_client, conn, + SILC_ATTRIBUTE_TIMEZONE, NULL); + silc_client_attribute_del(silc_client, conn, + SILC_ATTRIBUTE_GEOLOCATION, NULL); + silc_client_attribute_del(silc_client, conn, + SILC_ATTRIBUTE_DEVICE_INFO, NULL); + silc_client_attribute_del(silc_client, conn, + SILC_ATTRIBUTE_USER_PUBLIC_KEY, NULL); + return; + } + sv = settings_get_str("attr_vcard"); if (sv && *sv) { /* Put USER_INFO */ silc_client_attribute_del(silc_client, conn, SILC_ATTRIBUTE_USER_INFO, NULL); tmp = silc_file_readfile(sv, &tmp_len); - if (tmp && silc_vcard_decode(tmp, tmp_len, &vcard)) - silc_client_attribute_add(silc_client, conn, - SILC_ATTRIBUTE_USER_INFO, (void *)&vcard, - sizeof(vcard)); + if (tmp) { + tmp[tmp_len] = 0; + if (silc_vcard_decode(tmp, tmp_len, &vcard)) + silc_client_attribute_add(silc_client, conn, + SILC_ATTRIBUTE_USER_INFO, (void *)&vcard, + sizeof(vcard)); + } silc_vcard_free(&vcard); silc_free(tmp); } @@ -287,11 +317,13 @@ void silc_query_attributes_default(SilcClient client, tmp = strchr(*entry, ':') + 1; if (!tmp || !(*tmp)) continue; + memset(&service, 0, sizeof(service)); service.port = atoi(tmp); *strchr(*entry, ':') = '\0'; silc_strncat(service.address, sizeof(service.address), *entry, strlen(*entry)); service.status = TRUE; + service.idle = 0; silc_client_attribute_add(silc_client, conn, SILC_ATTRIBUTE_SERVICE, &service, sizeof(service)); @@ -331,10 +363,10 @@ void silc_query_attributes_default(SilcClient client, mask |= SILC_ATTRIBUTE_MOOD_EXCITED; if (!strcasecmp(*entry, "ANXIOUS")) mask |= SILC_ATTRIBUTE_MOOD_ANXIOUS; - silc_client_attribute_add(silc_client, conn, - SILC_ATTRIBUTE_STATUS_MOOD, (void *)mask, - sizeof(SilcUInt32)); } + silc_client_attribute_add(silc_client, conn, + SILC_ATTRIBUTE_STATUS_MOOD, (void *)mask, + sizeof(SilcUInt32)); g_strfreev(list); } @@ -355,6 +387,7 @@ void silc_query_attributes_default(SilcClient client, SILC_ATTRIBUTE_STATUS_MESSAGE, NULL); tmp = silc_file_readfile(sv, &tmp_len); if (tmp) { + tmp[tmp_len] = 0; mime.mime = (const unsigned char *)tmp; mime.mime_len = tmp_len; silc_client_attribute_add(silc_client, conn, @@ -400,10 +433,12 @@ void silc_query_attributes_default(SilcClient client, mask |= SILC_ATTRIBUTE_CONTACT_MMS; if (!strcasecmp(*entry, "CHAT")) mask |= SILC_ATTRIBUTE_CONTACT_CHAT; - silc_client_attribute_add(silc_client, conn, - SILC_ATTRIBUTE_PREFERRED_CONTACT, (void *)mask, - sizeof(SilcUInt32)); + if (!strcasecmp(*entry, "VIDEO")) + mask |= SILC_ATTRIBUTE_CONTACT_VIDEO; } + silc_client_attribute_add(silc_client, conn, + SILC_ATTRIBUTE_PREFERRED_CONTACT, (void *)mask, + sizeof(SilcUInt32)); g_strfreev(list); } @@ -498,6 +533,7 @@ void silc_query_attributes_default(SilcClient client, if (!strncasecmp(*entry, "silc-rsa:", 8)) { tmp = silc_file_readfile((*entry) + 8, &tmp_len); if (tmp) { + tmp[tmp_len] = 0; pk.type = "silc-rsa"; pk.data = tmp; pk.data_len = tmp_len; @@ -522,6 +558,7 @@ typedef struct { SilcVCardStruct vcard; SilcAttributeObjMime message; SilcAttributeObjMime extension; + bool nopk; } *AttrVerify; void silc_query_attributes_print(SILC_SERVER_REC *server, @@ -571,12 +608,14 @@ void silc_query_attributes_print(SILC_SERVER_REC *server, case SILC_ATTRIBUTE_SERVICE: { SilcAttributeObjService service; + memset(&service, 0, sizeof(service)); if (!silc_attribute_get_object(attr, (void *)&service, sizeof(service))) continue; - snprintf(tmp, sizeof(tmp) - 1, "%s:%d (logged %s)", + snprintf(tmp, sizeof(tmp) - 1, "%s:%d (logged %s) idle %d seconds", service.address, (unsigned int)service.port, - service.status ? "in" : "out"); + service.status ? "in" : "out", + (unsigned int)service.idle); printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP, SILCTXT_ATTR_SERVICES, tmp); } @@ -665,6 +704,8 @@ void silc_query_attributes_print(SILC_SERVER_REC *server, silc_strncat(tmp, sizeof(tmp), "SMS ", strlen(" SMS")); if (mask & SILC_ATTRIBUTE_CONTACT_MMS) silc_strncat(tmp, sizeof(tmp), "MMS ", strlen(" MMS")); + if (mask & SILC_ATTRIBUTE_CONTACT_VIDEO) + silc_strncat(tmp, sizeof(tmp), "VIDEO ", strlen(" VIDEO")); printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP, SILCTXT_ATTR_PREFERRED_CONTACT, tmp); } @@ -837,14 +878,15 @@ void silc_query_attributes_print(SILC_SERVER_REC *server, } } - if (!verify->userpk.type || !usersign.data) - printformat_module("fe-common/silc", server, NULL, - MSGLEVEL_CRAP, SILCTXT_ATTR_FOOTER); - - silc_verify_public_key(client, conn, SILC_SOCKET_TYPE_CLIENT, - verify->userpk.data, verify->userpk.data_len, - SILC_SKE_PK_TYPE_SILC, - silc_query_attributes_print_final, verify); + if (verify->userpk.data) { + silc_verify_public_key(client, conn, SILC_SOCKET_TYPE_CLIENT, + verify->userpk.data, verify->userpk.data_len, + SILC_SKE_PK_TYPE_SILC, + silc_query_attributes_print_final, verify); + } else { + verify->nopk = TRUE; + silc_query_attributes_print_final(FALSE, verify); + } } static void silc_query_attributes_print_final(bool success, void *context) @@ -857,14 +899,16 @@ static void silc_query_attributes_print_final(bool success, void *context) struct stat st; int i; - if (success) { - printformat_module("fe-common/silc", NULL, NULL, - MSGLEVEL_CRAP, SILCTXT_PUBKEY_VERIFIED, "user", - verify->name); - } else { - printformat_module("fe-common/silc", NULL, NULL, - MSGLEVEL_CRAP, SILCTXT_PUBKEY_NOTVERIFIED, "user", - verify->name); + if (!verify->nopk) { + if (success) { + printformat_module("fe-common/silc", NULL, NULL, + MSGLEVEL_CRAP, SILCTXT_PUBKEY_VERIFIED, "user", + verify->name); + } else { + printformat_module("fe-common/silc", NULL, NULL, + MSGLEVEL_CRAP, SILCTXT_PUBKEY_NOTVERIFIED, "user", + verify->name); + } } printformat_module("fe-common/silc", server, NULL, @@ -877,10 +921,10 @@ static void silc_query_attributes_print_final(bool success, void *context) for (i = 0; i < strlen(fingerprint); i++) if (fingerprint[i] == ' ') fingerprint[i] = '_'; - + /* Filename for dir */ tmp = fingerprint + strlen(fingerprint) - 9; - snprintf(filename, sizeof(filename) - 1, "%s/friends/%s", + snprintf(filename, sizeof(filename) - 1, "%s/friends/%s", get_irssi_dir(), tmp); silc_free(fingerprint); @@ -928,7 +972,7 @@ static void silc_query_attributes_accept(const char *line, void *context) /* Filename for dir */ tmp = fingerprint + strlen(fingerprint) - 9; - snprintf(filename, sizeof(filename) - 1, "%s/friends/%s", + snprintf(filename, sizeof(filename) - 1, "%s/friends/%s", get_irssi_dir(), tmp); /* Create dir if it doesn't exist */ @@ -980,7 +1024,7 @@ static void silc_query_attributes_accept(const char *line, void *context) } /* Save MIME message data */ - if (verify->extension.mime) { + if (verify->message.mime) { memset(filename2, 0, sizeof(filename2)); snprintf(filename2, sizeof(filename2) - 1, "%s/status_message.mime", filename);