【发布时间】:2021-03-20 22:50:50
【问题描述】:
在mod_muc 配置中,我可以看到有一个选项max_user_conferences,其默认值为100。就我而言,我希望一个特定的用户来主持应用程序中的所有会话,所以这个帐户将不得不连接到例如 500 个会议。我可以将max_user_conferences 设置为 1000,但是是否可以通过离开会议或以某种方式为该用户清除它来降低这个数字?
谢谢!
【问题讨论】:
在mod_muc 配置中,我可以看到有一个选项max_user_conferences,其默认值为100。就我而言,我希望一个特定的用户来主持应用程序中的所有会话,所以这个帐户将不得不连接到例如 500 个会议。我可以将max_user_conferences 设置为 1000,但是是否可以通过离开会议或以某种方式为该用户清除它来降低这个数字?
谢谢!
【问题讨论】:
我可以想到三种方法来实现这一点:
A) 告诉该用户离开不需要管理任务的房间,这样该帐户就不会达到 500 个会议的限制。
B) 将限制增加到高于该帐户所需的限制。但当然,其他账户也可以加入这么多房间。如果您是一家没有垃圾邮件发送者或坏人的企业,也许这不是您的服务器的问题。
C) 将这个小补丁应用到 ejabberd 源代码:
diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl
index 9e633a604..e3d7c93e1 100644
--- a/src/mod_muc_room.erl
+++ b/src/mod_muc_room.erl
@@ -2049,11 +2049,11 @@ add_new_user(From, Nick, Packet, StateData) ->
mod_muc_opt:max_user_conferences(StateData#state.server_host),
Collision = nick_collision(From, Nick, StateData),
IsSubscribeRequest = not is_record(Packet, presence),
- case {(ServiceAffiliation == owner orelse
- ((Affiliation == admin orelse Affiliation == owner)
+ case {ServiceAffiliation == owner orelse
+ ((((Affiliation == admin orelse Affiliation == owner)
andalso NUsers < MaxAdminUsers)
orelse NUsers < MaxUsers)
- andalso NConferences < MaxConferences,
+ andalso NConferences < MaxConferences),
Collision,
mod_muc:can_use_nick(StateData#state.server_host,
StateData#state.host, From, Nick),
并授予该帐户(例如 tomrules@example.com)在 MUC 服务中的管理员权限:
acl:
muc_admin:
user:
- tomrules@example.com
modules:
mod_muc:
access_admin:
- allow: admin
- allow: muc_admin
现在,该用户可以加入无限房间,其他帐户照常受到限制。
【讨论】: