今天对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
分享到:
相关推荐
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) // 如果服务器支持TLS,应设置为enabled .setUsernameAndPassword("username", "password") .build(); AbstractXMPPConnection connection = ...
8. **离线消息**:当用户离线时,ejabberd服务器应该能存储发送给他们的消息,并在他们上线时转发。通过模拟离线和上线,可以测试这一特性。 9. **推送通知**:对于移动设备,ejabberd可以通过第三方服务(如APNs或...
为了提高用户体验,通常会实现离线消息存储和推送通知。 开发过程中,需要注意的是iOS应用的后台运行限制。当应用进入后台时,XMPP连接可能会断开。为解决这个问题,可以使用苹果的VoIP推送服务,保持连接或在合适...
在本项目中,Ejabberd负责处理用户注册、登录、消息传输、群组聊天、离线消息存储等功能,为Android和PC客户端提供稳定的服务。 **asmck Android端使用的jar包** asmck是专门为Android平台设计的Ejabberd客户端库,...
ejabberd是一款开源的XMPP服务器,常用于构建实时通信系统,如即时消息(IM)、群聊等。XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放标准,用于实现即时通信和在线状态传输。在这个场景...
ejabberd是一款强大的即时通讯服务器,它基于Jabber/XMPP协议,这使得ejabberd能够支持丰富的交互式通信功能,如文本聊天、音视频通话、群聊、文件传输等。作为一款开源软件,ejabberd遵循GPLv2许可证,允许用户自由...
通过ejabberd,可以实现用户之间的实时消息传输。在SSM框架中,需要设置ejabberd的客户端库,如Smack,来发送和接收消息。 综上所述,这个"SSM框架Demo"是一个全面的实践项目,涵盖了SSM基础、二维码技术、文件上传...
该控制台提供了丰富的管理功能,包括用户管理、群组管理、消息管理等。 Ejabberd配置文件 Ejabberd的配置文件是用于配置Ejabberd服务的行为的文件。用户可以通过编辑配置文件来实现自定义的配置。 Ejabberd IM...
总的来说,ejabberd在Windows环境下的安装是一个重要的环节,它为开发者和企业提供了在Windows平台上搭建高效、安全的即时通讯服务器的能力。通过"ejabberd windows installer",你可以快速地将ejabberd部署到...
Ejabberd 模块在用户离线时发送帖子。 该模块基于 、 以及来自网络的大量代码和技巧,以适应与 Ejabber 14.12 一起使用。 安装 克隆这个存储库: git clone git@github.com:raelmax/mod_http_offline.git 更改...
我的基于Ejabberd HTTP的离线模块 概述 每当将消息发送给当前处于脱机状态的用户时,我们都会将消息转发到某个外部HTTP端点。 安装 ejabberdctl module_install ejabberd_offline_my 配置 如何启用 最简单的方法是在...
IM(ejabberd)服务器的客户端android开发的代码详解,该代码例子包含单聊、群聊、发送文字、发送及接收文件等功能。
ejabberd是一款开源的XMPP服务器,广泛应用于实时通讯系统,如即时消息、在线状态显示、多用户聊天室等功能的实现。它基于Erlang编程语言,这使得ejabberd具有高度可扩展性和高容错性。 ejabberd-15.07-osx-...
3. **会话管理**:管理在线状态,发送离线消息,查询用户在线状态。 4. **权限控制**:执行ACL(访问控制列表)操作,设置用户或资源的权限。 5. **模块控制**:启用、禁用ejabberd的内置模块,或者自定义模块。 6. ...
在ejabberd中,`mod_privacy_odbc.erl`是用于处理用户隐私列表模块的一部分,该模块与数据库(通常通过ODBC接口)交互来存储和管理用户的隐私设置。然而,题目指出`mod_privacy_odbc.erl`的实现并没有完全遵循XMPP...
ejabberd安装包,很好的工具!适合安装!一定会很好用的!
Ejabberd 是一个基于 XMPP 协议的 instant messaging 服务器,主要用于实时通信和即时消息传递。下面是 Ejabberd 安装配置的相关知识点: 一、Ejabberd 下载 Ejabberd 的安装需要从官方网站下载对应的安装包。下载...
在进行IT项目管理时,特别是涉及到服务器安装和客户端注册的场景,ejabberd是一个非常重要的开源即时通讯服务器,它基于XMPP(Extensible Messaging and Presence Protocol)协议,这个协议是国际开放标准用于即时...
ejabberd是一款高度可扩展且稳定可靠的XMPP聊天服务器,专为满足现代通信需求而设计。这款服务器在IT行业中广泛应用于构建实时通讯系统,尤其是针对手机端应用,如Android和iOS的聊天功能。ejabberd的强大在于其灵活...
Ejabberd是一款高度可扩展...总的来说,Ejabberd-2.1.10-mac是一个专为Mac用户设计的即时通讯服务器解决方案,提供了易于安装和使用的体验,同时具备强大的功能和灵活性,适用于个人、企业以及大型组织的即时通讯需求。