Bi-directional eDirectory driver for IDM & Home Directories

Обсуждение технических вопросов по продуктам Novell

Bi-directional eDirectory driver for IDM & Home Directories

Сообщение Константин Ошмян » 23 дек 2014, 11:52

Привет всем!
Решил я попробовать новый (см. Subj.) драйвер для подключения к IDM-у дерева eDirectory. Первые впечатления: явно намного удобнее, чем прежняя идиотская(зачёркнуто) технология с двумя IDM-ами, каждый из которых выполняет половину работы в "своём" дереве.
Разобрался даже с багом(зачёркнуто) особенностью операции Move на канале Subscriber: при указании контейнера, куда перемещать, надо ссылаться на него не по DN (что логично, но не работает), а по ассоциации (что совершенно нелогично, особенно для flat-конфигурации хранения пользователей в Vault-е - там этих контейнеров вообще нет; зато работает).

Однако я так и не смог пока что организовать автоматическое создание домашних директорий при создании новых пользователей в удалённом дереве. Если кто-то смог это сделать - расскажите, пожалуйста, как вам это удалось!
А я пока расскажу, что я делал и что при этом получалось.
Аватара пользователя
Константин Ошмян
 
Сообщения: 991
Зарегистрирован: 13 авг 2002, 21:36
Откуда: Рига

Re: Bi-directional eDirectory driver for IDM & Home Director

Сообщение Константин Ошмян » 23 дек 2014, 12:13

Итак, для начала про Move.

Задача была простая: при перемещении пользователей между контейнерами в Active Directory соответствующим образом передвигать их также и в eDirectory. Небольшая проблема была в том, что и в AD, и в eDir структура древовидная (но при этом немного различающаяся), а в Vault-е - плоская (flat). Но это не беда: штатный драйвер AD со стандартными политиками при перемещении пользователя в AD соответствующим образом меняет ему в Vault-е атрибут DirXML-ADContext, изменения которого можно ловить на bidirectional-драйвере и преобразовывать в соответствующие операции Move.

Проблема в том, что стандартная операция, которая в дизайнере выглядит как
Код: Выделить всё
move destination object(dn(Local Variable("edir-container")))
на канале Subcriber не работает, вываливая такую вот ошибку:
Код: Выделить всё
     Message:  Code(-9010) An exception occurred: java.lang.NullPointerException
   at com.novell.nds.dirxml.util.XdsDN.parseDN(XdsDN.java:655)
   at com.novell.nds.dirxml.util.XdsDN.<init>(XdsDN.java:176)
   at com.novell.nds.dirxml.driver.edir.EDIRSubscriber.performMoveOperation(EDIRSubscriber.java:766)
   at com.novell.nds.dirxml.driver.edir.EDIRSubscriptionShim.execute(EDIRSubscriptionShim.java:213)
   at com.novell.nds.dirxml.engine.Subscriber.execute(Subscriber.java:450)
   at com.novell.nds.dirxml.engine.Subscriber.execute(Subscriber.java:284)
   at com.novell.nds.dirxml.engine.Subscriber$ModifyProcessor.process(Subscriber.java:1501)
   at com.novell.nds.dirxml.engine.Subscriber.processEvent(Subscriber.java:1104)
   at com.novell.nds.dirxml.engine.Subscriber.processEvents(Subscriber.java:948)
   at com.novell.nds.dirxml.engine.Driver.submitTransaction(Driver.java:629)
   at com.novell.nds.dirxml.engine.DriverEntry.submitTransaction(DriverEntry.java:1083)
   at com.novell.nds.dirxml.engine.DriverEntry.processCachedTransaction(DriverEntry.java:967)
   at com.novell.nds.dirxml.engine.DriverEntry.eventLoop(DriverEntry.java:789)
   at com.novell.nds.dirxml.engine.DriverEntry.run(DriverEntry.java:573)
   at java.lang.Thread.run(Unknown Source)

Решение: вместо исходной конструкции (где на destination container была ссылка по его DN) использовать примерно такую (со ссылкой по ассоциации, которую тут же сами вычисляем):
Код: Выделить всё
move destination object(association(Resolve(datastore="dest", dn(Local Variable("edir-container")))))
Чуть менее красиво, зато стабильно работает.
Аватара пользователя
Константин Ошмян
 
Сообщения: 991
Зарегистрирован: 13 авг 2002, 21:36
Откуда: Рига

Re: Bi-directional eDirectory driver for IDM & Home Director

Сообщение Константин Ошмян » 23 дек 2014, 12:52

Теперь про Home Directory.

Прежде всего, надо сказать что без них - всё остальное прекрасно работает: пользователи и группы синхронизируются в обе стороны, всё хорошо. Атрибут Home Directory при этом им не проставляется, сами домашние директории не создаются. Отдельное замечание - про документацию: единственное место, где вообще упомянуты домашние директории, это параметр конфигурации eDirectory Port Number для канала Subscriber, про который сказано буквально следующее:
eDirectory Port Number: Specify the port number of the connected eDirectory server. This port number is used for creating home directories. The default value is 524.
Как этим пользоваться на практике - ни слова.

С традиционным драйвером eDirectory (с двумя IDM-ами) это делалось при помощи операции set operation template DN, которая добавлялась в Placement Policy Set (работающий при создании нового пользователя). В дереве заводился объект "Template" со ссылками на нужное местоположение домашних директорий (том/путь), и далее там автоматически создавалась сама директория (с именем, как у пользователя, и всеми правами, кроме [S]upervisor и [A]ccessControl), а ссылка на неё прописывалась пользователю в атрибут Home Directory (не путать с атрибутом homeDirectory, который содержит домашнюю директорию для Unix/Linux-систем и имеет другой синтаксис).

Пробуем делать аналогично: в Placement Policy Set на канале Subscriber добавляем для пользователей операцию set operation template DN, которая ссылается на объект "Template" в удалённом дереве. Поскольку в этом bidirectional-драйвере канал Subscriber общается с удалённым деревом по протоколу LDAP (и везде используется только LDAP-овский формат адресации), то этот DN указываем в таком же формате:
Код: Выделить всё
set operation template DN(dn("cn=UserTemplate,O=Org"))
Не забываем убедиться, что такой объект мы создали, ссылку на том/путь в нём прописали, в реплике он присутствует и пользователь, от имени которого работает драйвер, имеет на него права всё читать. Результат, тем не менее, оказывается несколько неожиданным:
Код: Выделить всё
[12/16/14 23:14:12.924]:Bi-directional eDirectory ST:Submitting document to subscriber shim:
[12/16/14 23:14:12.925]:Bi-directional eDirectory ST:
<nds dtdversion="4.0" ndsversion="8.x">
  <source>
    <product edition="Standard" version="4.0.2.5">DirXML</product>
    <contact>Novell, Inc.</contact>
  </source>
  <input>
    <add cached-time="20141216211412.391Z" class-name="inetOrgPerson" dest-dn="CN=Adtest2,OU=Riga,OU=Users,O=Org" event-id="Active Directory Driver##14a54f37b50##0:18182cc7-c899-4e03-ae06-ad164f023035" qualified-src-dn="O=Vault\OU=Users\CN=Adtest2" src-dn="\IDM-TREE\Vault\Users\Adtest2" src-entry-id="33270" UserTemplate-dn="CN=UserTemplate,O=Org" timestamp="1418764452#63">
      <add-attr attr-name="cn">
        <value naming="true" timestamp="1418764452#27" type="string">Adtest2</value>
      </add-attr>
      <add-attr attr-name="fullName">
        <value timestamp="1418764452#5" type="string">Adtest2</value>
      </add-attr>
      <add-attr attr-name="givenname">
        <value timestamp="1418764452#6" type="string">Adtest2</value>
      </add-attr>
      <add-attr attr-name="loginDisabled">
        <value timestamp="1418764452#4" type="state">false</value>
      </add-attr>
      <add-attr attr-name="sn">
        <value timestamp="1418764452#7" type="string">bbb</value>
      </add-attr>
      <password><!-- content suppressed --></password>
      <operation-data attempt-to-match="true" unmatched-src-dn="CN=Adtest2">
        <password-subscribe-status>
          <association/>
        </password-subscribe-status>
      </operation-data>
    </add>
  </input>
</nds>
[12/16/14 23:14:12.930]:Bi-directional eDirectory ST:Password synchronization command detected.
[12/16/14 23:14:12.930]:Bi-directional eDirectory ST:Stripping operation data from input document
[12/16/14 23:14:12.931]:Bi-directional eDirectory ST:Bi-directional eDirectory: EDIRSub.performAddOperation() Calling getAllSups(inetOrgPerson)
[12/16/14 23:14:12.932]:Bi-directional eDirectory ST:Bi-directional eDirectory: LDAP Add:
dn: CN=Adtest2,OU=Riga,OU=Users,O=Org
userpassword: <content suppressed>
fullName: Adtest2
givenname: Adtest2
sn: bbb
loginDisabled: false
cn: Adtest2
objectclass: inetOrgPerson
objectclass: organizationalPerson
objectclass: Person
objectclass: ndsLoginProperties
objectclass: Top

[12/16/14 23:14:12.950]:Bi-directional eDirectory ST:Bi-directional eDirectory: Querying for the GUID of the newly added object.
[12/16/14 23:14:12.951]:Bi-directional eDirectory ST:Bi-directional eDirectory: LDAP Search
  base=cn=adtest2,ou=riga,OU=Users,O=Org
  scope=0
  filter=null
  attrs=[GUID]
  attrsOnly=false
[12/16/14 23:14:12.952]:Bi-directional eDirectory ST:Bi-directional eDirectory: Querying for the GUID : GUID is C23792733107664FECA5C23792733107
[12/16/14 23:14:12.953]:Bi-directional eDirectory ST:Bi-directional eDirectory: Setting home directory for user:CN=Adtest2,OU=Riga,OU=Users,O=Org
[12/16/14 23:14:12.981]:Bi-directional eDirectory ST:Bi-directional eDirectory: Reading UserTemplate values: CN=UserTemplate,O=Org
[12/16/14 23:14:12.981]:Bi-directional eDirectory ST:Bi-directional eDirectory: Reading values from UserTemplate :\REMOTETREE\CN=UserTemplate,O=Org
[12/16/14 23:14:12.982]:Bi-directional eDirectory ST:Bi-directional eDirectory: Could not read UserTemplate nameToID: -610
[12/16/14 23:14:12.983]:Bi-directional eDirectory ST:Bi-directional eDirectory: Adding home directory attribute for \REMOTETREE\Org\Users\Riga\Adtest2
[12/16/14 23:14:12.988]:Bi-directional eDirectory ST:Bi-directional eDirectory: resolve: -601
[12/16/14 23:14:12.988]:Bi-directional eDirectory ST:Password synchronization command status detected.
[12/16/14 23:14:12.989]:Bi-directional eDirectory ST:Restoring operation data to output document
[12/16/14 23:14:12.989]:Bi-directional eDirectory ST:SubscriptionShim.execute() returned:
[12/16/14 23:14:12.989]:Bi-directional eDirectory ST:
<nds dtdversion="2.0" ndsversion="8.x">
  <source>
    <product build="20140422_0454" instance="Bi-directional eDirectory" version="4.0.1.1">Identity Manager Bi-directional Driver for eDirectory</product>
    <contact>Novell, Inc.</contact>
  </source>
  <output>
    <add-association dest-dn="\IDM-TREE\Vault\Users\Adtest2" dest-entry-id="33270" event-id="Active Directory Driver##14a54f37b50##0:18182cc7-c899-4e03-ae06-ad164f023035">C23792733107664FECA5C23792733107<operation-data attempt-to-match="true" unmatched-src-dn="CN=Adtest2">
        <password-subscribe-status>
          <association/>
        </password-subscribe-status>
      </operation-data>
    </add-association>
    <status event-id="Active Directory Driver##14a54f37b50##0:18182cc7-c899-4e03-ae06-ad164f023035" level="success">
      <operation-data attempt-to-match="true" unmatched-src-dn="CN=Adtest2">
        <password-subscribe-status>
          <association/>
        </password-subscribe-status>
      </operation-data>
    </status>
  </output>
</nds>
[12/16/14 23:14:12.993]:Bi-directional eDirectory ST:Applying input transformation policies.
Последний раз редактировалось Константин Ошмян 23 дек 2014, 13:35, всего редактировалось 2 раз(а).
Аватара пользователя
Константин Ошмян
 
Сообщения: 991
Зарегистрирован: 13 авг 2002, 21:36
Откуда: Рига

Re: Bi-directional eDirectory driver for IDM & Home Director

Сообщение Константин Ошмян » 23 дек 2014, 13:20

(продолжение)

При этом пользователь успешно создаётся, но является слегка "кривым": при попытке его открыть в ConsoleOne вываливается сообщение об ошибке и ничего, толком, не отображается. Причина в том, что ему прописывается некорректное значение атрибута Home Directory: первый компонент этого атрибута, который должен содержать ссылку на объект "том", пуст; а компонент, содержащий путь на этом томе, содержит только имя пользователя (игнорируя промежуточные пути из шаблона). Если поправить этот атрибут (используя LDAP Browser или старый NetWare Administrator), то и в ConsoleOne потом тоже всё отображается корректно. Сама директория в файловой системе при этом не создаётся.

Обращает на себя внимание, что в логе при обращении к шаблону (объекту Template) используется мешанина из slash- и LDAP-форматов, а при обращении к объекту User используется только slash-формат:
Reading UserTemplate values: CN=UserTemplate,O=Org
Reading values from UserTemplate :\REMOTETREE\CN=UserTemplate,O=Org
Could not read UserTemplate nameToID: -610
Adding home directory attribute for \REMOTETREE\Org\Users\Riga\Adtest2
resolve: -601

Вспоминаем, что в документации упоминалось про NCP-порт для создания домашней директории и догадываемся, что сам объект "пользователь" создаётся subscriber-каналом по LDAP, а вот после этого делается стандартное обращение по NCP для того, чтобы сделать ему домашнюю директорию. Логично, что при обращении по NCP используется не LDAP, а slash-нотация.

Делаем попытку номер два: меняем ссылку на шаблон, делая её в слэш-формате:
Код: Выделить всё
set operation template DN(dn("Org\UserTemplate"))
Результат уже лучше (по крайней мере, ошибка "Could not read UserTemplate nameToID: -610" пропала. Однако, всё остальное по-прежнему без изменений: в файловой системе домашняя директория не создаётся, атрибут Home Directory пользователю прописывается кривой, никакие параметры из шаблона к нему не применяются (не только домашняя директория, но и, например, Default Server или добавление в группу). На этом пока что остановился (trace-лог чуть ниже).

В техсаппорте сначала сказали, что возможность создания домашних директорий в этом драйвере вообще не предусмотрена:
It could be possible to use for example a IDM Scripting or an Execution Driver but you will need to contact Novell/NetIQ Consulting as this falls outside of the scope of a Technical Services Support Request.
Однако, после того как я описал вышеизложенное и ткнул в документацию на строчку "...is used for creating home directories", то попросили тайм-аут не перепроверить.

Код: Выделить всё
[12/22/14 19:05:49.735]:Bi-directional eDirectory ST:Submitting document to subscriber shim:
[12/22/14 19:05:49.735]:Bi-directional eDirectory ST:
<nds dtdversion="4.0" ndsversion="8.x">
  <source>
    <product edition="Standard" version="4.0.2.5">DirXML</product>
    <contact>Novell, Inc.</contact>
  </source>
  <input>
    <add cached-time="20141222170549.311Z" class-name="inetOrgPerson" dest-dn="CN=test3riga,OU=Riga,OU=Users,O=Org" event-id="Active Directory Driver##14a72f6916f##0:e99438ca-795f-4ecf-9c98-087e829bc3af" qualified-src-dn="O=Vault\OU=Users\CN=test3riga" src-dn="\IDM-TREE\Vault\Users\test3riga" src-entry-id="33302" template-dn="Org\UserTemplate" timestamp="1419267949#63">
      <add-attr attr-name="cn">
        <value naming="true" timestamp="1419267949#27" type="string">test3riga</value>
      </add-attr>
      <add-attr attr-name="fullName">
        <value timestamp="1419267949#5" type="string">test3riga aaa</value>
      </add-attr>
      <add-attr attr-name="givenname">
        <value timestamp="1419267949#6" type="string">test3riga</value>
      </add-attr>
      <add-attr attr-name="loginDisabled">
        <value timestamp="1419267949#4" type="state">false</value>
      </add-attr>
      <add-attr attr-name="sn">
        <value timestamp="1419267949#7" type="string">aaa</value>
      </add-attr>
      <password><!-- content suppressed --></password>
      <operation-data attempt-to-match="true" unmatched-src-dn="CN=test3riga">
        <password-subscribe-status>
          <association/>
        </password-subscribe-status>
      </operation-data>
    </add>
  </input>
</nds>
[12/22/14 19:05:49.740]:Bi-directional eDirectory ST:Password synchronization command detected.
[12/22/14 19:05:49.740]:Bi-directional eDirectory ST:Stripping operation data from input document
[12/22/14 19:05:49.741]:Bi-directional eDirectory ST:Bi-directional eDirectory: EDIRSub.performAddOperation() Calling getAllSups(inetOrgPerson)
[12/22/14 19:05:49.741]:Bi-directional eDirectory ST:Bi-directional eDirectory: LDAP Add:
dn: CN=test3riga,OU=Riga,OU=Users,O=Org
userpassword: <content suppressed>
fullName: test3riga aaa
givenname: test3riga
sn: aaa
loginDisabled: false
cn: test3riga
objectclass: inetOrgPerson
objectclass: organizationalPerson
objectclass: Person
objectclass: ndsLoginProperties
objectclass: Top

[12/22/14 19:05:49.773]:Bi-directional eDirectory ST:Bi-directional eDirectory: Querying for the GUID of the newly added object.
[12/22/14 19:05:49.774]:Bi-directional eDirectory ST:Bi-directional eDirectory: LDAP Search
  base=cn=test3riga,ou=riga,OU=Users,O=Org
  scope=0
  filter=null
  attrs=[GUID]
  attrsOnly=false
[12/22/14 19:05:49.776]:Bi-directional eDirectory ST:Bi-directional eDirectory: Querying for the GUID : GUID is E32736E80FBD3E4AF8A8E32736E80FBD
[12/22/14 19:05:49.776]:Bi-directional eDirectory ST:Bi-directional eDirectory: Making the GUID Cache capcity as 10000.
[12/22/14 19:05:49.777]:Bi-directional eDirectory ST:Bi-directional eDirectory: Setting home directory for user:CN=test3riga,OU=Riga,OU=Users,O=Org
[12/22/14 19:05:49.854]:Bi-directional eDirectory ST:Bi-directional eDirectory: Reading template values: Org\UserTemplate
[12/22/14 19:05:49.855]:Bi-directional eDirectory ST:Bi-directional eDirectory: Reading values from template :\REMOTETREE\Org\UserTemplate
[12/22/14 19:05:49.865]:Bi-directional eDirectory ST:Bi-directional eDirectory: Adding home directory attribute for \REMOTETREE\Org\Users\Riga\test3riga
[12/22/14 19:05:49.873]:Bi-directional eDirectory ST:Bi-directional eDirectory: resolve: -601
[12/22/14 19:05:49.874]:Bi-directional eDirectory ST:Password synchronization command status detected.
[12/22/14 19:05:49.874]:Bi-directional eDirectory ST:Restoring operation data to output document
[12/22/14 19:05:49.874]:Bi-directional eDirectory ST:SubscriptionShim.execute() returned:
[12/22/14 19:05:49.874]:Bi-directional eDirectory ST:
<nds dtdversion="2.0" ndsversion="8.x">
  <source>
    <product build="20140422_0454" instance="Bi-directional eDirectory" version="4.0.1.1">Identity Manager Bi-directional Driver for eDirectory</product>
    <contact>Novell, Inc.</contact>
  </source>
  <output>
    <add-association dest-dn="\IDM-TREE\Vault\Users\test3riga" dest-entry-id="33302" event-id="Active Directory Driver##14a72f6916f##0:e99438ca-795f-4ecf-9c98-087e829bc3af">E32736E80FBD3E4AF8A8E32736E80FBD<operation-data attempt-to-match="true" unmatched-src-dn="CN=test3riga">
        <password-subscribe-status>
          <association/>
        </password-subscribe-status>
      </operation-data>
    </add-association>
    <status event-id="Active Directory Driver##14a72f6916f##0:e99438ca-795f-4ecf-9c98-087e829bc3af" level="success">
      <operation-data attempt-to-match="true" unmatched-src-dn="CN=test3riga">
        <password-subscribe-status>
          <association/>
        </password-subscribe-status>
      </operation-data>
    </status>
  </output>
</nds>
Аватара пользователя
Константин Ошмян
 
Сообщения: 991
Зарегистрирован: 13 авг 2002, 21:36
Откуда: Рига

Re: Bi-directional eDirectory driver for IDM & Home Director

Сообщение Константин Ошмян » 19 янв 2015, 12:25

Все молчат - неужели никто этим драйвером так и не пользовался?

А между тем, в техсаппорте, перепроверив мои аргументы, сказали, что это таки баг, и он сейчас исправляется.
Ждём-с.
Аватара пользователя
Константин Ошмян
 
Сообщения: 991
Зарегистрирован: 13 авг 2002, 21:36
Откуда: Рига

Re: Bi-directional eDirectory driver for IDM & Home Director

Сообщение Константин Ошмян » 28 янв 2015, 18:47

Вести с полей: прислали "на попробовать" обновлённую версию драйвера.
Стало явно лучше: с помощью шаблона домашняя директория создаётся успешно (причём - там, где надо).
Однако, её местоположения не прописывается в свойствах пользователя (атрибут Home Directory остаётся пустым).
Отправил обратно свой отзыв.
Видимо, скоро поправят.
Аватара пользователя
Константин Ошмян
 
Сообщения: 991
Зарегистрирован: 13 авг 2002, 21:36
Откуда: Рига

Re: Bi-directional eDirectory driver for IDM & Home Director

Сообщение Ковалев Артем » 28 янв 2015, 19:11

Есть ощущение, что вы первый В МИРЕ, кто этой штукой занимается. ;)
берем картину мироздания и тупо смотрим - что к чему...
Аватара пользователя
Ковалев Артем
 
Сообщения: 924
Зарегистрирован: 29 мар 2004, 11:44
Откуда: Москва

Re: Bi-directional eDirectory driver for IDM & Home Director

Сообщение Константин Ошмян » 28 янв 2015, 19:27

Честно говоря, сам удивляюсь.
Но впечатления (не считая описанных глюков) - очень положительные.
Наконец-то драйвер с другим деревом eDirectory выглядит так же, как и все остальные драйверы, без этих идиотских особенностей "ставим два IDM-а каждый в своё дерево, и настраиваем каждый из них так, что через полгода уже и не вспомнишь, какие настройки в каком дереве были".
Аватара пользователя
Константин Ошмян
 
Сообщения: 991
Зарегистрирован: 13 авг 2002, 21:36
Откуда: Рига

Re: Bi-directional eDirectory driver for IDM & Home Director

Сообщение Антон Фридрих » 29 янв 2015, 15:52

Не уверен насчет первого в мире, но в данной конфигурации точно. Доводилось создавать домашние директории в куче систем, но не в eDirectory, и потому не пользовал эту функцию? а в других драйверах ее нет и риходится или scripting драйвером или еще как.

По сабжу - прописывание директории в свойствах пользователя можно обычным правилом поправить как временное решение. А вообще конечно хорошее дело делаете.
Аватара пользователя
Антон Фридрих
 
Сообщения: 606
Зарегистрирован: 09 фев 2006, 07:55
Откуда: Красноярск

Re: Bi-directional eDirectory driver for IDM & Home Director

Сообщение Константин Ошмян » 30 янв 2015, 14:30

Антон, спасибо на добром слове! :-)
Антон Фридрих писал(а):По сабжу - прописывание директории в свойствах пользователя можно обычным правилом поправить как временное решение.
К сожалению, это тоже не так просто, как кажется на первый взгляд. Ну, то есть, это относительно несложно в случае, если местоположение домашних директорий - константа. Но, например, в нашем случае - в зависимости от расположения пользователя домашняя директория для него должна создаваться на соответствующем сервере (физически расположенном на другой площадке), поэтому сначала выбирается правильный Template для создания пользователя.

И если делать "по правильному", то надо извлечь из темплейта атрибут Home Directory (который содержит путь до места, где будет создана домашняя директория) и прописать его пользователю, удлинив на имя самой директории (совпадающей с именем пользователя). А с учётом того, что: а) этот атрибут - составной (состоит из трёх компонентов: DN - ссылка на объект Volume, Integer - задаёт namespace, String - собственно путь на томе); б) относится к объектам в другом дереве (в том числе упомянутый DN тома), то изменить его - придётся повозиться.

Пускай уж лучше разработчики сами исправят ;-)
Аватара пользователя
Константин Ошмян
 
Сообщения: 991
Зарегистрирован: 13 авг 2002, 21:36
Откуда: Рига


Вернуться в Novell

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 172

cron