`
langzhe
  • 浏览: 286103 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ejabberd 存储离线消息 判断用户密码是否为空

阅读更多

今天对ejabberd服务器做了一个小小的测试,发现后台抛出

 

=ERROR REPORT==== 2011-03-29 16:53:30 ===

E(<0.18276.0>:ejabberd_auth:256) : The authentication module ejabberd_auth_odbc returned an error

when checking user "server_test_user_65475" in server "servertest.igrslabdns.com"

Error message: {noproc,

                   {p1_fsm,sync_send_event,

                       [<0.12307.1>,

                        {sql_cmd,

                            {sql_query,

                                ["select password from users where username='",

                                 "server_test_user_65475","';"]},

                            {1301,383421,845044}},

                        60000]}}



提示,我一开始不明白server_test_user_65475 我没有登录此用户,但为什么查询此用户密码了?
惯性思维害惨我了,以为查询密码 只有会在用户登录和权限判断的时候才会用。

原因:我在tsung测试脚本中添加了发现chat  offline消息。 因为离线消息是需要存储的,顺着代码看了一下,在存储离线消息调用hooks时会判断用户存在不存在, 判断条件是查询密码 是否为空。
ejabberd_sm 代码片段
 case ejabberd_auth:is_user_exists(LUser, LServer) of
                        true ->
                            is_privacy_allow(From, To, Packet) andalso
                                ejabberd_hooks:run(offline_message_hook,
                                                   LServer,
                                                   [From, To, Packet]);
                        _ ->
                            Err = jlib:make_error_reply(
                                    Packet, ?ERR_SERVICE_UNAVAILABLE),
                            ejabberd_router:route(To, From, Err)
                    end
 
ejabberd_auth 代码片段
%% Returns true if the user exists in the DB or if an anonymous user is logged
%% under the given name
is_user_exists(User, Server) ->
    lists:any(
      fun(M) ->
              case M:is_user_exists(User, Server) of
                  {error, Error} ->
                      ?ERROR_MSG("The authentication module ~p returned an "
                                 "error~nwhen checking user ~p in server ~p~n"
                                 "Error message: ~p",
                                 [M, User, Server, Error]),
                      false;
                  Else ->
                      Else
              end
      end, auth_modules(Server)).

ejabberd_auth_odbc 代码片段
%% @spec (User, Server) -> true | false | {error, Error}
is_user_exists(User, Server) ->
    case jlib:nodeprep(User) of
        error ->
            false;
        LUser ->
            Username = ejabberd_odbc:escape(LUser),
            LServer = jlib:nameprep(Server),
            try odbc_queries:get_password(LServer, Username) of
                {selected, ["password"], [{_Password}]} ->
                    true; %% Account exists
                {selected, ["password"], []} ->
                    false; %% Account does not exist
                {error, Error} ->
                    {error, Error} %% Typical error is that table doesn't exist
            catch
                _:B ->
                    {error, B} %% Typical error is database not accessible
            end
    end. 
  

D

0
0
分享到:
评论

相关推荐

    Android使用smack连接ejabberd服务器注册、收发消息

    .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) // 如果服务器支持TLS,应设置为enabled .setUsernameAndPassword("username", "password") .build(); AbstractXMPPConnection connection = ...

    ejabberd 服务器测试客户端spark

    8. **离线消息**:当用户离线时,ejabberd服务器应该能存储发送给他们的消息,并在他们上线时转发。通过模拟离线和上线,可以测试这一特性。 9. **推送通知**:对于移动设备,ejabberd可以通过第三方服务(如APNs或...

    iOS xmpp ejabberd服务器

    为了提高用户体验,通常会实现离线消息存储和推送通知。 开发过程中,需要注意的是iOS应用的后台运行限制。当应用进入后台时,XMPP连接可能会断开。为解决这个问题,可以使用苹果的VoIP推送服务,保持连接或在合适...

    Android IM开发 Ejabberd+asmck+spack

    在本项目中,Ejabberd负责处理用户注册、登录、消息传输、群组聊天、离线消息存储等功能,为Android和PC客户端提供稳定的服务。 **asmck Android端使用的jar包** asmck是专门为Android平台设计的Ejabberd客户端库,...

    ejabberd 群聊 strophe.js 实现

    ejabberd是一款开源的XMPP服务器,常用于构建实时通信系统,如即时消息(IM)、群聊等。XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放标准,用于实现即时通信和在线状态传输。在这个场景...

    ejabberd源码

    ejabberd是一款强大的即时通讯服务器,它基于Jabber/XMPP协议,这使得ejabberd能够支持丰富的交互式通信功能,如文本聊天、音视频通话、群聊、文件传输等。作为一款开源软件,ejabberd遵循GPLv2许可证,允许用户自由...

    SSM框架Demo并包含扫码上传,ejabberd消息推送

    通过ejabberd,可以实现用户之间的实时消息传输。在SSM框架中,需要设置ejabberd的客户端库,如Smack,来发送和接收消息。 综上所述,这个"SSM框架Demo"是一个全面的实践项目,涵盖了SSM基础、二维码技术、文件上传...

    ejabberd安装配置[归纳].pdf

    该控制台提供了丰富的管理功能,包括用户管理、群组管理、消息管理等。 Ejabberd配置文件 Ejabberd的配置文件是用于配置Ejabberd服务的行为的文件。用户可以通过编辑配置文件来实现自定义的配置。 Ejabberd IM...

    ejabberd windows installer

    总的来说,ejabberd在Windows环境下的安装是一个重要的环节,它为开发者和企业提供了在Windows平台上搭建高效、安全的即时通讯服务器的能力。通过"ejabberd windows installer",你可以快速地将ejabberd部署到...

    mod_http_offline:ejabberd 模块在用户离线时发送帖子

    Ejabberd 模块在用户离线时发送帖子。 该模块基于 、 以及来自网络的大量代码和技巧,以适应与 Ejabber 14.12 一起使用。 安装 克隆这个存储库: git clone git@github.com:raelmax/mod_http_offline.git 更改...

    mod_offline_my:将Ejabberd脱机消息通知转发到外部HTTP端点

    我的基于Ejabberd HTTP的离线模块 概述 每当将消息发送给当前处于脱机状态的用户时,我们都会将消息转发到某个外部HTTP端点。 安装 ejabberdctl module_install ejabberd_offline_my 配置 如何启用 最简单的方法是在...

    android+ejabberd

    IM(ejabberd)服务器的客户端android开发的代码详解,该代码例子包含单聊、群聊、发送文字、发送及接收文件等功能。

    ejabberd-15.07-osx-installer.app.zip

    ejabberd是一款开源的XMPP服务器,广泛应用于实时通讯系统,如即时消息、在线状态显示、多用户聊天室等功能的实现。它基于Erlang编程语言,这使得ejabberd具有高度可扩展性和高容错性。 ejabberd-15.07-osx-...

    ejabberd_rest_client:面向ejabberd的REST客户端

    3. **会话管理**:管理在线状态,发送离线消息,查询用户在线状态。 4. **权限控制**:执行ACL(访问控制列表)操作,设置用户或资源的权限。 5. **模块控制**:启用、禁用ejabberd的内置模块,或者自定义模块。 6. ...

    ejabberd中mod_privacy_odbc.erl实现没有完全遵循xmpp协议

    在ejabberd中,`mod_privacy_odbc.erl`是用于处理用户隐私列表模块的一部分,该模块与数据库(通常通过ODBC接口)交互来存储和管理用户的隐私设置。然而,题目指出`mod_privacy_odbc.erl`的实现并没有完全遵循XMPP...

    ejabberd的安装包

    ejabberd安装包,很好的工具!适合安装!一定会很好用的!

    ejabberd安装配置.docx

    Ejabberd 是一个基于 XMPP 协议的 instant messaging 服务器,主要用于实时通信和即时消息传递。下面是 Ejabberd 安装配置的相关知识点: 一、Ejabberd 下载 Ejabberd 的安装需要从官方网站下载对应的安装包。下载...

    ejabberd服务器安装及客户端注册文档

    在进行IT项目管理时,特别是涉及到服务器安装和客户端注册的场景,ejabberd是一个非常重要的开源即时通讯服务器,它基于XMPP(Extensible Messaging and Presence Protocol)协议,这个协议是国际开放标准用于即时...

    ejabberd-14.07聊天服务器

    ejabberd是一款高度可扩展且稳定可靠的XMPP聊天服务器,专为满足现代通信需求而设计。这款服务器在IT行业中广泛应用于构建实时通讯系统,尤其是针对手机端应用,如Android和iOS的聊天功能。ejabberd的强大在于其灵活...

    Ejabberd-2.1.10-mac

    Ejabberd是一款高度可扩展...总的来说,Ejabberd-2.1.10-mac是一个专为Mac用户设计的即时通讯服务器解决方案,提供了易于安装和使用的体验,同时具备强大的功能和灵活性,适用于个人、企业以及大型组织的即时通讯需求。

Global site tag (gtag.js) - Google Analytics