при попытке отправить сообщение в оффлайн выходит ошибка 503 - service unavaliable, в логи ничего не пишет дополнительного
в конфиге
{access, max_user_offline_messages, [{5000, admin}, {100, all}]}.
...
{mod_offline_odbc, [{access_max_user_messages, max_user_offline_messages}]},
...
в базу ничего не пишет...даже при варианте
{mod_offline, [{access_max_user_messages, max_user_offline_messages}]},
та же ошибка
в чём может быть проблема? заранее спасибо!
Может быть, Вы снова
Может быть, Вы снова отключили какой-нибудь необходимый модуль? (Скажу сразу - в работе этого модуля подробно не разбирался. У меня просто работает.)
Вот мой работающий ejabberd.cfg:
override_global.
override_local.
override_acls.
{loglevel, 3}.
{hosts, ["pi.local"]}.
{listen,
[
{5222, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536}
]},
{5269, ejabberd_s2s_in, [
{shaper, s2s_shaper},
{max_stanza_size, 131072}
]},
{5280, ejabberd_http, [
http_bind,
http_poll,
web_admin
]}
]}.
{auth_method, ldap}.
{ldap_servers, ["dc1.pi.local", "dc2.pi.local"]}.
{ldap_port, 389}.
{ldap_rootdn, "cn=jabber,cn=Users,dc=pi,dc=local"}.
{ldap_password, "Secret"}.
{ldap_base, "ou=pi,dc=pi,dc=local"}.
{ldap_uids, [{"userPrincipalName", "%u@pi.local"}]}.
{ldap_filter, "(&(objectClass=user)(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))"}.
{shaper, normal, {maxrate, 1000}}.
{shaper, fast, {maxrate, 50000}}.
{max_fsm_queue, 1000}.
{acl, admin, {user, "admin1", "pi.local"}}.
{acl, admin, {user, "admin2", "pi.local"}}.
{acl, local, {user_regexp, ""}}.
{acl, announcer, {user, "И.Иванов", "pi.local"}}.
{acl, announcer, {user, "П.Петров", "pi.local"}}.
{acl, announcer, {user, "В.Пупкин", "pi.local"}}.
{access, max_user_sessions, [{10, all}]}.
{access, max_user_offline_messages, [{5000, admin}, {100, all}]}.
{access, local, [{allow, local}]}.
{access, c2s, [{deny, blocked},
{allow, all}]}.
{access, c2s_shaper, [{none, admin},
{normal, all}]}.
{access, s2s_shaper, [{fast, all}]}.
{access, announce, [{allow, admin},{allow, announcer}]}.
{access, configure, [{allow, admin}]}.
{access, muc_admin, [{allow, admin}]}.
{access, muc_create, [{allow, local}]}.
{access, muc, [{allow, all}]}.
{access, pubsub_createnode, [{allow, local}]}.
{access, register, [{allow, all}]}.
{language, "en"}.
{modules,
[
{mod_adhoc, []},
{mod_announce, [{access, announce}]},
{mod_caps, []},
{mod_configure,[]},
{mod_disco, []},
{mod_last, []},
{mod_offline, [{access_max_user_messages, max_user_offline_messages}]},
{mod_ping, []},
{mod_private, []},
{mod_roster, []},
{mod_shared_roster_ldap,[
{ldap_base, "dc=pi,dc=local"},
{ldap_rfilter, "(distinguishedName=CN=jabber_groups,CN=Users,DC=pi,DC=local)"},
{ldap_groupattr, "member"},
{ldap_group_is_dn, true},
{ldap_groupdesc, "cn"},
{ldap_memberattr, "member"},
{ldap_member_selection_mode, memberattr_dn},
{ldap_ufilter, "(&(objectClass=user)(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))"},
{ldap_userdesc, "displayName"},
{ldap_useruid, "userPrincipalName"},
{ldap_useruid_format, "%u@pi.local"}
]},
{mod_stats, []},
{mod_time, []},
{mod_vcard_ldap, [
{matches, infinity},
{ldap_vcard_map, [
{"NICKNAME", "%s", ["displayName"]},
{"GIVEN", "%s", ["givenName"]},
{"MIDDLE", "%s", ["initials"]},
{"FAMILY", "%s", ["sn"]},
{"FN", "%s", ["displayName"]},
{"EMAIL", "%s", ["mail"]},
{"ORGNAME", "%s", ["company"]},
{"ORGUNIT", "%s", ["department"]},
{"CTRY", "%s", ["c"]},
{"LOCALITY", "%s", ["l"]},
{"STREET", "%s", ["streetAddress"]},
{"REGION", "%s", ["st"]},
{"PCODE", "%s", ["postalCode"]},
{"TITLE", "%s", ["title"]},
{"DESC", "%s", ["description"]},
{"TEL", "%s", ["telephoneNumber"]},
{"BDAY", "%s", ["birthDate"]},
{"PHOTO", "%s", ["jpegPhoto"]}
]},
{ldap_search_fields, [
{"Name", "givenName"},
{"Family Name", "sn"},
{"Department", "department"}
]},
{ldap_search_reported, [
{"Full Name", "FN"},
{"Department", "ORGUNIT"},
{"Phone", "TEL"}
]}
]},
{mod_version, []}
]}.
Настройка mod_shared_roster_ldap нестандартная, поскольку я использую изменённый модуль. Всё остальное - из коробки. Кодировка UTF8 без BOM.
да всё вроде то же
да всё вроде то же самое
может ли это быть связано с тем, что используется скрипт external auth?
также есть предположение, что это как-то связано с тем, что
ejabberdctl stats registeredusers = 0
а
ejabberdctl stats onlineusers = 9, например...
как такое может быть? при этом, в mysql таблице таблица users пустая, хотя, например, в vcard хранятся данные, которые нормально показываются в клиентах
rosterusers и rostergroups пустые, хотя включён модуль mod_roster_odbc и в контакт листе, соответственно, показываются и группы и пользователи, как было настроено в mod_shared_roster_ldap
Это, получается, если
Это, получается, если пользователь в своём ростере переименует пользователя, или перенесёт его в какую-нибудь свою группу, он либо не переименуется/не перенесётся, либо эти изменения не сохранятся при логофе/логоне?
А если, например, с помощью ejabberdctl зарегистрировать пользователя с таким же jid, что-нибудь изменится?
Я никогда не использовал ext auth, просто мысли.
да, получается, именно так! -
да, получается, именно так! - как раз такая цель с самого начала, чтобы пользователи не могли друг-друга никуда перемещать, переименовывать, удалять и пр. - т.е. это можно сделать, и пользователь даже исчезнет из контакт листа, но при первом же логоф/логоне - всё опять будет по прежнему
если что-то регистрировать пользователя с помощью ejabberdctl, то происходит запрос к extauth скрипту сначала isuser, а потом tryregister - ну, соответственно, что пропишешь в скрипте на эти запросы - то и изменится (в моём скрипте эти запросы пока никак не обрабатываются))) )
просто если при такой конфигурации руками заполнить таблицы users, rosterusers и rostergroups - то это ничего не меняет...поэтому я и не придавал значения тому, что они пустые, однако, когда пользователь оффлайн система, видимо, должна как-то определить кому отправлять - но в эти таблицы она не смотрит (иначе бы что-то менялось бы если забить эти таблицы руками?)
кстати, ещё такой вопрос - в какой таблице в mysql еджабберд хранит оффлайн сообщения? вроде по смыслу подходит только private_storage? или в другое место?
Получилось короче, суть была
Получилось
короче, суть была в том, что из коробки, или это был какой-то копипаст из чужого конфига - сейчас уже сложно сказать, но в конфиге было у меня такое место
{mod_pubsub, [ % requires mod_caps
{access_createnode, pubsub_createnode},
{pep_sendlast_offline, false},
{last_item_cache, false},
%%{plugins, ["default", "pep"]}
{plugins, ["flat", "hometree", "pep"]} % pep requires mod_caps
]},
так вот, если изменить параметр pep_sendlast_offline на true, то сообщения отправляются!!! и, кстати, в базу MySQL никуда не пишутся
однако, сейчас такой вопрос: как сделать так, чтобы как только человек, которому было отправлено оффлайн сообщение, войдёт в сеть - чтобы ему пришло уведомление о новых сообщениях? а то так он только если сам посмотрит свою переписку с кем-то - то увидит, что тот ему отправил сообщение в оффлайн
Это не может быть причиной -
Это не может быть причиной - mod_pubsub вообще не нужен для оффлайновых сообщений. У меня он не подключён, и сообщения прекрасно приходят (и выскакивают при логоне)
по поводу выскакиваний при
по поводу выскакиваний при логоне - я сперва ошибся, всё выскакивает
сейчас попробовал сделать всегда isuser на True - видимо, это существенно было, т.к. теперь вне зависимости от содержания таблицы users всё работает
Ну и славненько :)
Ну и славненько :) Естественно, нужно это доработать, чтобы true было только на реальных пользователей.
1. Я не писал об удалении
1. Я не писал об удалении пользователей - обратите внимание: я говорил только о перемещении и переименовании.
2. Я не знал, как выглядит логика работа скрипта. Но судя по Вашим словам, скрипт имеет средства определения, имеется ли в природе некий юзер - а именно, isuser. Мне кажется, всё дело именно в этом - а что будет, если заставить этот запрос всегда возвращать истину?