Gaim 用于 Gtalk 时必须保存密码的解决办法

Gaim 2.0.0beta1 连接 Gtalk 时必须要在帐号文件 accounts.xml 中存储密码,不然就用空密码去登陆,自然失败。虽然 Unix 的文件权限机制不错,但像我这样在 NIS 域里面简直就形同虚设,别人可以从 root 切换到我的帐号,访问我的 HOME,虽然是非法,但总算得上是没有控制的。

看了 Gaim 主页上 关于password 问题的 FAQ ,它说 Gaim 现在不对 accounts.xml 里面存储的密码进行加密,将来的版本中应该也不会这么做,原因是多方面的……,我看了半天,不知道是不是理解错误,总觉得他的解释很牵强。

那只好不要在文件中保存密码了。登陆 MSN 时,会先弹出窗口输入密码,偏偏登陆 Gtalk 时就很白痴的直接用空密码去登陆。看了一会源码加上 gdb,终于找到问题。从源码看,Jabber 协议中密码是可选的,因此没设密码时照样登陆。解决的办法就简单了,从
src/protocols/jabber/jabber.c 中去掉这个选项:

  1425  static GaimPluginProtocolInfo prpl_info =
1426 {
1427 OPT_PROTO_CHAT_TOPIC | OPT_PROTO_UNIQUE_CHATNAME | 1428 OPT_PROTO_PASSWORD_OPTIONAL,

如果之前已经 make install 过,只要重新编译后把 src/protocols/jabber/jabber/.libs/ 下的 libjabber.la 和 libjabber.so 覆盖到放 plugin 的目录($prefix/lib/gaim/)下就好了。这样就能像登陆 MSN 一样,弹出窗口来输入密码。调试时发现该目录下所有的插件都会装载,移走不需要的插件显然能增加启动速度和减少占用资源。

开源就是好啊。

Update: 2.0.0beta2 出来了,fix 正是和我的一样 ;-)

Gaim 2.0.0beta1

gaim 2.0.0beta1 多账号同一窗口,cool! Gaim 2.0.0beta1上个月就发布了,试了一下,开始在 Solaris 上用 gcc 编译都不过,看了错误信息,说没有定义 SIOCGIFCONF,找了一下系统头文件,是文件包含的问题,临时在 src/stun.c 前面加上 #define BSD_COMP 就可以解决了。用起来感觉还是不错的,因为是 beta1,有一些明显的 bug 都还没解决,例如登陆 GTalk 非得保存密码才能登陆成功,主要变化:

  • 聊天时文字是平滑滚动,这个见仁见智吧
  • 中英文混合输入时不会再一个回车就发送了
  • 主面板下方在线状态的几个大按钮,看不懂为什么放在那
  • Jabber 加了个图标,登陆 Gtalk 好看一些了
  • 据说 Audio 功能不错了,可惜 Solaris 上没有编出库来,将来应该能支持 GTalk 的语音
 1

Tags

Blogroll

Fairy World | STUPiD | 阅微草堂 | ShelleX | 流浪五天