...

пятница, 20 сентября 2013 г.

[recovery mode] CentOC 5.x, 6.x и EJabberd v2.x + Win2008AD

Давно хотел сделать и на конец это получилось полноценно сделать связку EJabberd с учетными записями из Active Directory Win 2008. С формированием структуры ростера и формирование отображаемых псевдонимов пользователей на основании свойств пользовательских учетных записей, которые были созданы в AD. Т.к. до этого перечитав кучу материала, везде кусками и не рабочее.


Чтобы установить ejabberd из пакета, нужно подключить репозиторий EPEL, выполняем:


Для CentOS 5:


rpm -Uvh dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm


Для CentOS 6:


rpm -Uvh dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm


или


rpm -Uvh dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm


Теперь устанавливаем пакет ejabberd:


yum install ejabberd


Открываем на редактирование конфиг /etc/ejabberd/ejabberd.cfg


Назначаем права на удаленное управление пользователю admin. Находим секцию:


%%

%% Remove the Access Control Lists before new ones are added.

%%

%%override_acls.


И добавлем строку:


{acl, admin, {user, «admin», «server.int»}}.


Находим секцию SERVED HOSTNAMES и правим имя домена в строке:


{hosts, [«server.int»]}.


Попробуем запустить сервис ejabberd:


service ejabberd start


Если сервис нормально запустился, необходимо добавить первого пользователя, который сможет управлять всеми настройками сервиса, выполняем:


ejabberdctl register admin server.int 123456


Теперь идем в браузер:


Набираем server.int:5280/admin/ и вводим пользователя admin@server.int и пароль 123456. Появится админская панель управления сервисом ejabberd.


Добавляем сервис в автозапуск:


chkconfig ejabberd on


Первую и простую стадию выполнили, ejabberd работает, но пользователи в этой конфигурации нужно добавлять руками и они будут храниться в локальной базе ejabberd. Но так как было решено связать EJabberd и учетные записи Win2008AD, продолжаем настройку.


Открываем на редактирование конфиг /etc/ejabberd/ejabberd.cfg


Находим строку которую мы создавали для входа в админскую веб панель:


{acl, admin, {user, «admin», «server.int»}}.


После нее добавляем новую строку:


{acl, admin, {user, «userjabber», «server.int»}}.


Этот пользователь userjabber предварительно должен быть создан в AD, чтобы в дальнейшем иметь доступ к админской веб панели.


Внимание, после подключения к AD локальный пользователь admin, который имел доступ к админской веб панели, утратит силу и только пользователь userjabber сможет войти в админ панель.


Далее настройка подключения к AD.


Находим строку и приводим к виду (отключаем внутреннюю авторизацию):


%%{auth_method, internal}.


Находим строку и приводим к виду (подключаем авторизацию LDAP, AD):


{auth_method, ldap}.


Находим блок:


%%

%% Authentication using LDAP

%%


Добавляем настройки для подключения к серверу AD:


{ldap_servers, [«192.168.151.2»]}.

{ldap_port, 389}.


{ldap_uids, [{«sAMAccountName», "%u"}]}.

{ldap_filter, "(objectCategory=person)"}.


{ldap_base, «DC=developer,DC=com»}.

{ldap_rootdn, «userjabber@developer.com»}.

{ldap_password, «123456»}.


Теперь необходимо подключить модули, для формирования структуры ростера и формирования отображаемых псевдонимов пользователей на основании свойств пользовательских учетных записей, которые были созданы в AD. К примеру мы создали в AD пользователей ivanov.i, petrov.p. В свойствах пользователя, на закладке Главная, пользователь ivanov.i имеет записи Фамилия: Иванов, Имя: Иван, а на закладке Организация в поле Отдел: Разработчики. Пользователь petrov.p, так же имеет запись в поле Отдел: Разработчики.


Чтобы теперь в джаббер клиенте была красота и порядок подключаем модули

mod_shared_roster_ldap и mod_vcard_ldap.


Находим строку и приводим к виду:


%%{mod_shared_roster,[]},


Добавляем формирование ростера (Формирование списка пользователей по группам, отображаемые у подключенных клиентов. Принадлежность к группе читается из свойств пользователя созданного в AD 2008, закладка Организация, поле Отдел.):


{mod_shared_roster_ldap,

[{ldap_groupattr,«department»},

{ldap_groupdesc,«department»},

{ldap_rfilter, "(objectCategory=person)"},

{ldap_memberattr,«sAMAccountName»},

{ldap_userdesc,«cn»}

]

},


Находим строку и приводим к виду:


%%{mod_vcard, []},


Добавляем формирование псевдонимов пользователей (Чтение VCard полей каждого пользователя из AD 2008, т.е. полей которые содержатся в свойствах пользователей. Имена, фамилии и т.д.):


{mod_vcard_ldap,

[{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»]},

{«URL», "%s", [«wWWHomePage»]},

{«DESC», "%s", [«description»]},

{«TEL», "%s", [«telephoneNumber»]}]},

{ldap_search_fields,

[{«User», "%u"},

{«Name», «givenName»},

{«Family Name», «sn»},

{«Email», «mail»},

{«Company», «company»},

{«Department», «department»},

{«Role», «title»},

{«Description», «description»},

{«Phone», «telephoneNumber»}]},

{ldap_search_reported,

[{«Full Name», «FN»},

{«Nickname», «NICKNAME»},

{«Email», «EMAIL»}]}

]

},


Перезапускаем сервис:


service ejabberd restart


Если прошло без ошибок, пробуем соединиться джаббер клиентом с нашим сервером.


Ошибки да и все остальные записи о работе сервиса можно посмотреть в логах в каталоге /var/log/ejabberd.


После соединения в клиенте джаббер имеем папку Разработчики и в ней два пользователя, Иванов Иван и Петров Петр.


Привожу 100% рабочий конфиг:


%%%

%%% ejabberd configuration file

%%%

%%%'


%%% The parameters used in this configuration file are explained in more detail

%%% in the ejabberd Installation and Operation Guide.

%%% Please consult the Guide in case of doubts, it is included with

%%% your copy of ejabberd, and is also available online at

%%% www.process-one.net/en/ejabberd/docs/


%%% This configuration file contains Erlang terms.

%%% In case you want to understand the syntax, here are the concepts:

%%%

%%% — The character to comment a line is %

%%%

%%% — Each term ends in a dot, for example:

%%% override_global.

%%%

%%% — A tuple has a fixed definition, its elements are

%%% enclosed in {}, and separated with commas:

%%% {loglevel, 4}.

%%%

%%% — A list can have as many elements as you want,

%%% and is enclosed in [], for example:

%%% [http_poll, web_admin, tls]

%%%

%%% — A keyword of ejabberd is a word in lowercase.

%%% Strings are enclosed in "" and can contain spaces, dots,…

%%% {language, «en»}.

%%% {ldap_rootdn, «dc=example,dc=com»}.

%%%

%%% — This term includes a tuple, a keyword, a list, and two strings:

%%% {hosts, [«jabber.example.net», «im.example.com»]}.

%%%


%%%. =======================

%%%' OVERRIDE STORED OPTIONS


%%

%% Override the old values stored in the database.

%%


%%

%% Override global options (shared by all ejabberd nodes in a cluster).

%%

%%override_global.


%%

%% Override local options (specific for this particular ejabberd node).

%%

%%override_local.


%%

%% Remove the Access Control Lists before new ones are added.

%%

%%override_acls.


{acl, admin, {user, «userjabber», «server.int»}}.


%%%. =========

%%%' DEBUGGING


%%

%% loglevel: Verbosity of log files generated by ejabberd.

%% 0: No ejabberd log at all (not recommended)

%% 1: Critical

%% 2: Error

%% 3: Warning

%% 4: Info

%% 5: Debug

%%

{loglevel, 4}.


%%

%% watchdog_admins: Only useful for developers: if an ejabberd process

%% consumes a lot of memory, send live notifications to these XMPP

%% accounts.

%%

%%{watchdog_admins, [«bob@example.com»]}.


%%%. ================

%%%' SERVED HOSTNAMES


%%

%% hosts: Domains served by ejabberd.

%% You can define one or several, for example:

%% {hosts, [«example.net», «example.com», «example.org»]}.

%%

{hosts, [«server.int»]}.


%%

%% route_subdomains: Delegate subdomains to other XMPP servers.

%% For example, if this ejabberd serves example.org and you want

%% to allow communication with an XMPP server called im.example.org.

%%

%%{route_subdomains, s2s}.


%%%. ===============

%%%' LISTENING PORTS


%%

%% listen: The ports ejabberd will listen on, which service each is handled

%% by and what options to start it with.

%%

{listen,

[


{5222, ejabberd_c2s, [


%%

%% If TLS is compiled in and you installed a SSL

%% certificate, specify the full path to the

%% file and uncomment this line:

%%

{certfile, "/etc/ejabberd/ejabberd.pem"}, starttls,


{access, c2s},

{shaper, c2s_shaper},

{max_stanza_size, 65536}

]},


%%

%% To enable the old SSL connection method on port 5223:

%%

%%{5223, ejabberd_c2s, [

%% {access, c2s},

%% {shaper, c2s_shaper},

%% {certfile, "/etc/ejabberd/ejabberd.pem"}, tls,

%% {max_stanza_size, 65536}

%% ]},


{5269, ejabberd_s2s_in, [

{shaper, s2s_shaper},

{max_stanza_size, 131072}

]},


%%

%% ejabberd_service: Interact with external components (transports, ...)

%%

%%{8888, ejabberd_service, [

%% {access, all},

%% {shaper_rule, fast},

%% {ip, {127, 0, 0, 1}},

%% {hosts, [«icq.example.org», «sms.example.org»],

%% [{password, «secret»}]

%% }

%% ]},


%%

%% ejabberd_stun: Handles STUN Binding requests

%%

%%{{3478, udp}, ejabberd_stun, []},


{5280, ejabberd_http, [

%%{request_handlers,

%% [

%% {[«pub», «archive»], mod_http_fileserver}

%% ]},

captcha,

http_bind,

http_poll,

%%register,

web_admin

]}


]}.


%%

%% s2s_use_starttls: Enable STARTTLS + Dialback for S2S connections.

%% Allowed values are: false optional required required_trusted

%% You must specify a certificate file.

%%

%%{s2s_use_starttls, optional}.


%%

%% s2s_certfile: Specify a certificate file.

%%

%%{s2s_certfile, "/etc/ejabberd/ejabberd.pem"}.


%%

%% domain_certfile: Specify a different certificate for each served hostname.

%%

%%{domain_certfile, «example.org», "/path/to/example_org.pem"}.

%%{domain_certfile, «example.com», "/path/to/example_com.pem"}.


%%

%% S2S whitelist or blacklist

%%

%% Default s2s policy for undefined hosts.

%%

%%{s2s_default_policy, allow}.


%%

%% Allow or deny communication with specific servers.

%%

%%{{s2s_host, «goodhost.org»}, allow}.

%%{{s2s_host, «badhost.org»}, deny}.


%%

%% Outgoing S2S options

%%

%% Preferred address families (which to try first) and connect timeout

%% in milliseconds.

%%

%%{outgoing_s2s_options, [ipv4, ipv6], 10000}.


%%%. ==============

%%%' AUTHENTICATION


%%

%% auth_method: Method used to authenticate the users.

%% The default method is the internal.

%% If you want to use a different method,

%% comment this line and enable the correct ones.

%%

%%{auth_method, internal}.

%%

%% Store the plain passwords or hashed for SCRAM:

%%{auth_password_format, plain}.

%%{auth_password_format, scram}.

%%

%% Define the FQDN if ejabberd doesn't detect it:

%%{fqdn, «server3.example.com»}.


%%

%% Authentication using external script

%% Make sure the script is executable by ejabberd.

%%

%%{auth_method, external}.

%%{extauth_program, "/path/to/authentication/script"}.


%%

%% Authentication using ODBC

%% Remember to setup a database in the next section.

%%

%%{auth_method, odbc}.


%%

%% Authentication using PAM

%%

%%{auth_method, pam}.

%%{pam_service, «ejabberd»}.


%%

%% Authentication using LDAP

%%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Подключение к AD 2008. Для получения списка пользователей.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

{auth_method, ldap}.


{ldap_servers, [«192.168.151.2»]}.

{ldap_port, 389}.


{ldap_uids, [{«sAMAccountName», "%u"}]}.

{ldap_filter, "(objectCategory=person)"}.


{ldap_base, «DC=developer,DC=com»}.

{ldap_rootdn, «userjabber@developer.com»}.

{ldap_password, «123456»}.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%

%% List of LDAP servers:

%%{ldap_servers, [«localhost»]}.

%%

%% Encryption of connection to LDAP servers:

%%{ldap_encrypt, none}.

%%{ldap_encrypt, tls}.

%%

%% Port to connect to on LDAP servers:

%%{ldap_port, 389}.

%%{ldap_port, 636}.

%%

%% LDAP manager:

%%{ldap_rootdn, «dc=example,dc=com»}.

%%

%% Password of LDAP manager:

%%{ldap_password, "******"}.

%%

%% Search base of LDAP directory:

%%{ldap_base, «dc=example,dc=com»}.

%%

%% LDAP attribute that holds user ID:

%%{ldap_uids, [{«mail», "%u@mail.example.org"}]}.

%%

%% LDAP filter:

%%{ldap_filter, "(objectClass=shadowAccount)"}.


%%

%% Anonymous login support:

%% auth_method: anonymous

%% anonymous_protocol: sasl_anon | login_anon | both

%% allow_multiple_connections: true | false

%%

%%{host_config, «public.example.org», [{auth_method, anonymous},

%% {allow_multiple_connections, false},

%% {anonymous_protocol, sasl_anon}]}.

%%

%% To use both anonymous and internal authentication:

%%

%%{host_config, «public.example.org», [{auth_method, [internal, anonymous]}]}.


%%%. ==============

%%%' DATABASE SETUP


%% ejabberd by default uses the internal Mnesia database,

%% so you do not necessarily need this section.

%% This section provides configuration examples in case

%% you want to use other database backends.

%% Please consult the ejabberd Guide for details on database creation.


%%

%% MySQL server:

%%

%%{odbc_server, {mysql, «server», «database», «username», «password»}}.

%%

%% If you want to specify the port:

%%{odbc_server, {mysql, «server», 1234, «database», «username», «password»}}.


%%

%% PostgreSQL server:

%%

%%{odbc_server, {pgsql, «server», «database», «username», «password»}}.

%%

%% If you want to specify the port:

%%{odbc_server, {pgsql, «server», 1234, «database», «username», «password»}}.

%%

%% If you use PostgreSQL, have a large database, and need a

%% faster but inexact replacement for «select count(*) from users»

%%

%%{pgsql_users_number_estimate, true}.


%%

%% ODBC compatible or MSSQL server:

%%

%%{odbc_server, «DSN=ejabberd;UID=ejabberd;PWD=ejabberd»}.


%%

%% Number of connections to open to the database for each virtual host

%%

%%{odbc_pool_size, 10}.


%%

%% Interval to make a dummy SQL request to keep the connections to the

%% database alive. Specify in seconds: for example 28800 means 8 hours

%%

%%{odbc_keepalive_interval, undefined}.


%%%. ===============

%%%' TRAFFIC SHAPERS


%%

%% The «normal» shaper limits traffic speed to 1000 B/s

%%

{shaper, normal, {maxrate, 1000}}.


%%

%% The «fast» shaper limits traffic speed to 50000 B/s

%%

{shaper, fast, {maxrate, 50000}}.


%%

%% This option specifies the maximum number of elements in the queue

%% of the FSM. Refer to the documentation for details.

%%

{max_fsm_queue, 1000}.


%%%. ====================

%%%' ACCESS CONTROL LISTS


%%

%% The 'admin' ACL grants administrative privileges to XMPP accounts.

%% You can put here as many accounts as you want.

%%

%%{acl, admin, {user, «aleksey», «localhost»}}.

%%{acl, admin, {user, «ermine», «example.org»}}.


%%

%% Blocked users

%%

%%{acl, blocked, {user, «baduser», «example.org»}}.

%%{acl, blocked, {user, «test»}}.


%%

%% Local users: don't modify this line.

%%

{acl, local, {user_regexp, ""}}.


%%

%% More examples of ACLs

%%

%%{acl, jabberorg, {server, «jabber.org»}}.

%%{acl, aleksey, {user, «aleksey», «jabber.ru»}}.

%%{acl, test, {user_regexp, "^test"}}.

%%{acl, test, {user_glob, «test*»}}.


%%

%% Define specific ACLs in a virtual host.

%%

%%{host_config, «localhost»,

%% [

%% {acl, admin, {user, «bob-local», «localhost»}}

%% ]

%%}.


%%%. ============

%%%' ACCESS RULES


%% Maximum number of simultaneous sessions allowed for a single user:

{access, max_user_sessions, [{10, all}]}.


%% Maximum number of offline messages that users can have:

{access, max_user_offline_messages, [{5000, admin}, {100, all}]}.


%% This rule allows access only for local users:

{access, local, [{allow, local}]}.


%% Only non-blocked users can use c2s connections:

{access, c2s, [{deny, blocked},

{allow, all}]}.


%% For C2S connections, all users except admins use the «normal» shaper

{access, c2s_shaper, [{none, admin},

{normal, all}]}.


%% All S2S connections use the «fast» shaper

{access, s2s_shaper, [{fast, all}]}.


%% Only admins can send announcement messages:

{access, announce, [{allow, admin}]}.


%% Only admins can use the configuration interface:

{access, configure, [{allow, admin}]}.


%% Admins of this server are also admins of the MUC service:

{access, muc_admin, [{allow, admin}]}.


%% Only accounts of the local ejabberd server can create rooms:

{access, muc_create, [{allow, local}]}.


%% All users are allowed to use the MUC service:

{access, muc, [{allow, all}]}.


%% Only accounts on the local ejabberd server can create Pubsub nodes:

{access, pubsub_createnode, [{allow, local}]}.


%% In-band registration allows registration of any possible username.

%% To disable in-band registration, replace 'allow' with 'deny'.

{access, register, [{allow, all}]}.


%% By default the frequency of account registrations from the same IP

%% is limited to 1 account every 10 minutes. To disable, specify: infinity

%%{registration_timeout, 600}.


%%

%% Define specific Access Rules in a virtual host.

%%

%%{host_config, «localhost»,

%% [

%% {access, c2s, [{allow, admin}, {deny, all}]},

%% {access, register, [{deny, all}]}

%% ]

%%}.


%%%. ================

%%%' DEFAULT LANGUAGE


%%

%% language: Default language used for server messages.

%%

{language, «ru»}.


%%

%% Set a different default language in a virtual host.

%%

%%{host_config, «localhost»,

%% [{language, «ru»}]

%%}.


%%%. =======

%%%' CAPTCHA


%%

%% Full path to a script that generates the image.

%%

%%{captcha_cmd, "/usr/lib64/ejabberd/priv/bin/captcha.sh"}.


%%

%% Host for the URL and port where ejabberd listens for CAPTCHA requests.

%%

%%{captcha_host, «example.org:5280»}.


%%

%% Limit CAPTCHA calls per minute for JID/IP to avoid DoS.

%%

%%{captcha_limit, 5}.


%%%. =======

%%%' MODULES


%%

%% Modules enabled in all ejabberd virtual hosts.

%%

{modules,

[

{mod_adhoc, []},

{mod_announce, [{access, announce}]}, % recommends mod_adhoc

{mod_blocking,[]}, % requires mod_privacy

{mod_caps, []},

{mod_configure,[]}, % requires mod_adhoc

{mod_disco, []},

%%{mod_echo, [{host, «echo.localhost»}]},

{mod_irc, []},

{mod_http_bind, []},

%%{mod_http_fileserver, [

%% {docroot, "/var/www"},

%% {accesslog, "/var/log/ejabberd/access.log"}

%% ]},

{mod_last, []},

{mod_muc, [

%%{host, «conference.HOST@»},

{access, muc},

{access_create, muc_create},

{access_persistent, muc_create},

{access_admin, muc_admin}

]},

%%{mod_muc_log,[]},

{mod_offline, [{access_max_user_messages, max_user_offline_messages}]},

{mod_ping, []},

%%{mod_pres_counter,[{count, 5}, {interval, 60}]},

{mod_privacy, []},

{mod_private, []},

%%{mod_proxy65,[]},

{mod_pubsub, [

{access_createnode, pubsub_createnode},

{ignore_pep_from_offline, true}, % reduces resource comsumption, but XEP incompliant

%%{ignore_pep_from_offline, false}, % XEP compliant, but increases resource comsumption

{last_item_cache, false},

{plugins, [«flat», «hometree», «pep»]} % pep requires mod_caps

]},

{mod_register, [

%%

%% Protect In-Band account registrations with CAPTCHA.

%%

%%{captcha_protected, true},


%%

%% Set the minimum informational entropy for passwords.

%%

%%{password_strength, 32},


%%

%% After successful registration, the user receives

%% a message with this subject and body.

%%

{welcome_message, {«Welcome!»,

«Hi.\nWelcome to this XMPP server.»}},


%%

%% When a user registers, send a notification to

%% these XMPP accounts.

%%

%%{registration_watchers, [«admin1@example.org»]},


%%

%% Only clients in the server machine can register accounts

%%

{ip_access, [{allow, «127.0.0.0/8»},

{deny, «0.0.0.0/0»}]},


%%

%% Local c2s or remote s2s users cannot register accounts

%%

%%{access_from, deny},


{access, register}

]},

%%{mod_register_web, [

%%

%% When a user registers, send a notification to

%% these XMPP accounts.

%%

%%{registration_watchers, [«admin1@example.org»]}

%% ]},

{mod_roster, []},

%%{mod_service_log,[]},

%%{mod_shared_roster,[]},


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Ростер из AD 2008.

%% Формирование списка пользователей по группам отображаемые у подключенных

%% клиентов. Принадлежность к группе читается из свойств Пользователя созданного

%% в AD 2008, закладка Организация, поле Отдел.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

{mod_shared_roster_ldap,

[{ldap_groupattr,«department»},

{ldap_groupdesc,«department»},

{ldap_rfilter, "(objectCategory=person)"},

{ldap_memberattr,«sAMAccountName»},

{ldap_userdesc,«cn»}

]

},

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


{mod_stats, []},

{mod_time, []},

%%{mod_vcard, []},


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Чтение VCard полей каждого пользователя из AD 2008, т.е. полей которые

%% содержатся в свойствах пользователей. Фамили, имена, и т.д.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


{mod_vcard_ldap,

[{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»]},

{«URL», "%s", [«wWWHomePage»]},

{«DESC», "%s", [«description»]},

{«TEL», "%s", [«telephoneNumber»]}]},

{ldap_search_fields,

[{«User», "%u"},

{«Name», «givenName»},

{«Family Name», «sn»},

{«Email», «mail»},

{«Company», «company»},

{«Department», «department»},

{«Role», «title»},

{«Description», «description»},

{«Phone», «telephoneNumber»}]},

{ldap_search_reported,

[{«Full Name», «FN»},

{«Nickname», «NICKNAME»},

{«Email», «EMAIL»}]}

]

},

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


{mod_version, []}

]}.


%%

%% Enable modules with custom options in a specific virtual host

%%

%%{host_config, «localhost»,

%% [{{add, modules},

%% [

%% {mod_echo, [{host, «mirror.localhost»}]}

%% ]

%% }

%% ]}.


%%%.

%%%'


%%% $Id$


%%% Local Variables:

%%% mode: erlang

%%% End:

%%% vim: set filetype=erlang tabstop=8 foldmarker=%%%',%%%. foldmethod=marker:


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий