Mercurial > pidgin.yaz
changeset 10038:eb8ccdd6f5f2
[gaim-migrate @ 10997]
" Fix Philip Mucci's bug (reported to gaim-devel on the
16th), where malformed (visibility) strings, caused
users to be unmessageable and hidden, by normalizing
them, and using sane defaults.
Fixes CraigD's bug IRC reported on IRC (non-kerberized
zephyr users always have the realm "local-realm"), by
adding a user-specified "Realm" option string.
Also added two new preferences (import from .anyone and
import from .zephyr.subs) to go with (export to .anyone
and "export to .zephyr.subs"). Since one can now use
multiple accounts, most people wouldn't want to use the
same buddy lists and chat room lists for both accounts.
Added a /topic command to make zephyr use the same
command name as the other protocols which have topics." --Arun A Tharuvai
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Sat, 18 Sep 2004 22:25:12 +0000 |
parents | e6e68b9db19b |
children | cf02e7104706 |
files | src/protocols/zephyr/ZGetSender.c src/protocols/zephyr/zephyr.c |
diffstat | 2 files changed, 92 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/src/protocols/zephyr/ZGetSender.c Sat Sep 18 22:14:47 2004 +0000 +++ b/src/protocols/zephyr/ZGetSender.c Sat Sep 18 22:25:12 2004 +0000 @@ -4,7 +4,7 @@ * Created by: Robert French * * $Source$ - * $Author: chipx86 $ + * $Author: lschiere $ * * Copyright (c) 1987, 1991 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file @@ -16,7 +16,7 @@ #ifndef lint static const char rcsid_ZGetSender_c[] = - "$Id: ZGetSender.c 9554 2004-04-24 09:02:28Z chipx86 $"; + "$Id: ZGetSender.c 10997 2004-09-18 22:25:12Z lschiere $"; #endif #include <pwd.h> @@ -32,8 +32,10 @@ #endif /* Return it if already cached */ - if (*sender) + + /* if (*sender) return (sender); + */ #ifdef ZEPHYR_USES_KERBEROS if (krb_get_tf_fullname((char *)TKT_FILE, pname, pinst, prealm) == KSUCCESS)
--- a/src/protocols/zephyr/zephyr.c Sat Sep 18 22:14:47 2004 +0000 +++ b/src/protocols/zephyr/zephyr.c Sat Sep 18 22:25:12 2004 +0000 @@ -56,7 +56,7 @@ extern Code_t ZSetLocation(char *); extern Code_t ZUnsetLocation(); extern Code_t ZGetSubscriptions(ZSubscription_t *, int*); - +extern char __Zephyr_realm[]; typedef struct _zframe zframe; typedef struct _zephyr_triple zephyr_triple; typedef struct _zephyr_account zephyr_account; @@ -722,11 +722,11 @@ str->str, NULL, NULL); g_string_free(str, TRUE); } else { - if (nlocs>0) - gaim_prpl_got_user_status(gc->account,b->name,"online",NULL); - else - gaim_prpl_got_user_status(gc->account,b->name,"offline",NULL); - } + if (nlocs>0) + gaim_prpl_got_user_status(gc->account,b->name,"online",NULL); + else + gaim_prpl_got_user_status(gc->account,b->name,"offline",NULL); + } g_free(user); } @@ -1137,10 +1137,10 @@ str->str, NULL, NULL); g_string_free(str, TRUE); } else { - if (nlocs>0) - gaim_prpl_got_user_status(gc->account,b->name,"online",NULL); - else - gaim_prpl_got_user_status(gc->account,b->name,"offline",NULL); + if (nlocs>0) + gaim_prpl_got_user_status(gc->account,b->name,"online",NULL); + else + gaim_prpl_got_user_status(gc->account,b->name,"offline",NULL); } } else if (!g_ascii_strncasecmp(spewtype,"subscribed",10)) { @@ -1236,10 +1236,10 @@ int i; for(i=0;i<numlocs;i++) { ZGetLocations(&locations,&one); - if (nlocs>0) - gaim_prpl_got_user_status(gc->account,b->name,"online",NULL); - else - gaim_prpl_got_user_status(gc->account,b->name,"offline",NULL); + if (nlocs>0) + gaim_prpl_got_user_status(gc->account,b->name,"online",NULL); + else + gaim_prpl_got_user_status(gc->account,b->name,"offline",NULL); } } #else @@ -1443,16 +1443,44 @@ g_free(filename); } +static char* normalize_zephyr_exposure(const char* exposure) { + char *exp2 = g_strstrip(g_ascii_strup(exposure,-1)); + + if (!exp2) + return EXPOSE_REALMVIS; + if (!g_ascii_strcasecmp(exp2, EXPOSE_NONE)) + return EXPOSE_NONE; + if (!g_ascii_strcasecmp(exp2, EXPOSE_OPSTAFF)) + return EXPOSE_OPSTAFF; + if (!g_ascii_strcasecmp(exp2, EXPOSE_REALMANN)) + return EXPOSE_REALMANN; + if (!g_ascii_strcasecmp(exp2, EXPOSE_NETVIS)) + return EXPOSE_NETVIS; + if (!g_ascii_strcasecmp(exp2, EXPOSE_NETANN)) + return EXPOSE_NETANN; + return EXPOSE_REALMVIS; +} + static void zephyr_login(GaimAccount * account) { GaimConnection *gc; zephyr_account *zephyr; + gboolean read_anyone; + gboolean read_zsubs; + gchar *exposure; gc = gaim_account_get_connection(account); + read_anyone = gaim_account_get_bool(gc->account,"read_anyone",TRUE); + read_zsubs = gaim_account_get_bool(gc->account,"read_zsubs",TRUE); + exposure = (gchar *)gaim_account_get_string(gc->account, "exposure_level", EXPOSE_REALMVIS); + gc->flags |= GAIM_CONNECTION_HTML | GAIM_CONNECTION_NO_BGCOLOR | GAIM_CONNECTION_NO_URLDESC; gc->proto_data = zephyr=g_new0(zephyr_account,1); + zephyr->account = account; - zephyr->exposure = g_strdup(gaim_account_get_string(gc->account, "exposure_level", EXPOSE_REALMVIS)); + + /* Make sure that the exposure (visibility) is set to a sane value */ + zephyr->exposure=g_strdup(normalize_zephyr_exposure(exposure)); if (gaim_account_get_bool(gc->account,"use_tzc",0)) { zephyr->connection_type = GAIM_ZEPHYR_TZC; @@ -1648,8 +1676,17 @@ zephyr->username = g_strdup_printf("%s",username); if ((realm = strchr(username,'@'))) zephyr->realm = g_strdup_printf("%s",realm+1); - else - zephyr->realm = g_strdup("local-realm"); + else { + realm = (gchar *)gaim_account_get_string(gc->account,"realm",""); + if (!g_strcasecmp(realm,"")) { + realm = "local-realm"; + } + zephyr->realm = g_strdup(realm); + g_strlcpy(__Zephyr_realm, (const char*)zephyr->realm, REALM_SZ-1); + } + /* else { + zephyr->realm = g_strdup("local-realm"); + }*/ g_free(username); } else { @@ -1671,12 +1708,20 @@ } } else if ( use_zeph02(zephyr)) { + gchar* realm; z_call_s(ZInitialize(), "Couldn't initialize zephyr"); z_call_s(ZOpenPort(&(zephyr->port)), "Couldn't open port"); z_call_s(ZSetLocation((char *)zephyr->exposure), "Couldn't set location"); - + + realm = (gchar *)gaim_account_get_string(gc->account,"realm",""); + if (!g_strcasecmp(realm,"")) { + realm = ZGetRealm(); + } + zephyr->realm = g_strdup(realm); + g_strlcpy(__Zephyr_realm, (const char*)zephyr->realm, REALM_SZ-1); zephyr->username = g_strdup(ZGetSender()); - zephyr->realm = g_strdup(ZGetRealm()); + + /* zephyr->realm = g_strdup(ZGetRealm()); */ gaim_debug_info("zephyr","realm: %s\n",zephyr->realm); } else { @@ -1700,8 +1745,12 @@ } gaim_connection_set_state(gc, GAIM_CONNECTED); - process_anyone(gc); - process_zsubs(zephyr); + + if (read_anyone) + process_anyone(gc); + if (read_zsubs) + process_zsubs(zephyr); + serv_finish_login(gc); if (use_zeph02(zephyr)) { @@ -2126,7 +2175,7 @@ } else if (!strcmp(status_id,"online")) { if (use_zeph02(zephyr)) { - ZSetLocation(get_exposure_level()); + ZSetLocation(zephyr->exposure); } else { char *zexpstr = g_strdup_printf("((tzcfodder . set-location) (hostname . \"%s\") (exposure . \"%s\"))\n",zephyr->ourhost,zephyr->exposure); @@ -2530,6 +2579,11 @@ "prpl-zephyr", zephyr_gaim_cmd_instance, _("inst <instance>: Set the instance to be used on this class"), NULL); + gaim_cmd_register("topic","s", GAIM_CMD_P_PRPL, + GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_PRPL_ONLY, + "prpl-zephyr", + zephyr_gaim_cmd_instance, _("topic <instance>: Set the instance to be used on this class"), NULL); + gaim_cmd_register("sub", "www", GAIM_CMD_P_PRPL, GAIM_CMD_FLAG_IM | GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_PRPL_ONLY, "prpl-zephyr", @@ -2774,7 +2828,7 @@ { GaimAccountOption *option; char *tmp = get_exposure_level(); - + option = gaim_account_option_bool_new("Use tzc", "use_tzc", FALSE); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); @@ -2787,7 +2841,16 @@ option = gaim_account_option_bool_new(_("Export to .zephyr.subs"), "write_zsubs", FALSE); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); - option = gaim_account_option_string_new(_("Exposure"), "exposure_level", tmp ? tmp : EXPOSE_REALMVIS); + option = gaim_account_option_bool_new(_("Import from .anyone"), "read_anyone", TRUE); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + option = gaim_account_option_bool_new(_("Import from .zephyr.subs"), "read_zsubs", TRUE); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + option = gaim_account_option_string_new(_("Realm"), "realm", ""); + prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); + + option = gaim_account_option_string_new(_("Exposure"), "exposure_level", tmp?tmp: EXPOSE_REALMVIS); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); option = gaim_account_option_string_new(_("Encoding"), "encoding", ZEPHYR_FALLBACK_CHARSET);