• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Вложить Аттачмент В Notesrichtext На Сервере

  • Автор темы Автор темы proteam
  • Дата начала Дата начала
P

proteam

Всем привет.

Недавно выявил такую проблему. Писал тут на форуме про обновление программное, было много глюков с лотусом, вот выявил еще одно узкое место.

Есть такой вот код:
Код:
If copyPath = "" Then Error 1, "Не указан путь выгрузки"

copyPath = copyPath + doc.Universalid +"old.ntf"

If Dir$(copyPath, 0) = "" Then
Set tempDB = db.Createcopy("", copyPath)
Else
Error 1, "Невозможно снять старый шаблон так как по пути "+copyPath+" уже существует файл"
End If

Set rtitem = New NotesRichTextItem( doc , FIELD_OLDTEMPLATE )
Set object = rtitem.EmbedObject ( EMBED_ATTACHMENT, "", copyPath)
call doc.Save(true, false)
Суть данного куска кода - Снять шаблон с БД db и вложить в поле NotesRichText.
Запускаю локально - ОК
Запускаю на сервере - документ сохраняется, вложение есть. НО. Открывает это самое вложение и тут бах ошибка.

То:

---------------------------
IBM Lotus Notes
---------------------------
The attachment may be corrupted. Would you like to continue with the available data?
---------------------------
Да Нет
---------------------------


То:
---------------------------
IBM Lotus Notes
---------------------------
File truncated - file may have been damaged
---------------------------
ОК
---------------------------


Заметил такую штуку. В документах, в которых вложения открываются нормально в свойствах вложеного файла написано так:

codeBy1.PNG

в которых не открывается так

codeBy2.PNG

Может кто знает как это исправить
 
ограничение на репликацию не установлено случаем (по размеру аттача)?
 
ограничение на репликацию не установлено случаем (по размеру аттача)?
Тестовый сервер, однозначно отвечать что нет не буду, но скорее всего ограничений нет. Проблема именно в процессе вложения аттачмента в поле. Нарушается compression type (на скринах видно)
 
DamirUrazov
Это с 6-той версии так, на клиенте LZ1, на сервере Хафман:
If the LZ1 compression option is set on a Domino 6 database, a Notes 5 client will be unable to read the compression. The Lotus Domino 6 server converts LZ1 to Huffman compression for the Notes 5 client. This affects server performance. Implement LZ1 compression in an exclusively Lotus Notes/Domino 6 environment.
link removed

Добавлено: И еще одно
 
savl это не отвечает на вопрос - почему оно аттач считает битым
у мя такое было когда на БД установлены настройки репликации - частично
правда не с аттачем
 
lmike
Это верно.
Я не силен в механизмах "сжатия", но есть подозрение что клиент пытается прочитать хафмана, как lz1.
Выяснилось что LZ1 работает на клиенте в версии 8+ через
Код:
Call rtitem.EmbedObject ( EMBED_ATTACHMENT, "", copyPath)
Всегда, даже если в базе отключено "Use LZ1 compression...", а на сервере надо включать принудительно.
 
Как я понял, все решения лишь исправляют то, что уже повреждено. А мне надо чтобы новые вложения ложились нормально и затем открывались как надо.
 
DamirUrazov
настройки сервера попробуй поставить (LZ1 Notes и LZ1 Mime) из моего поста и перезагрузить сервер.
Потом посмотреть результаты прикрепления.
 
Вопрос - скопированный шаблон ГДЕ находится? Если в папке Data, то, вообще говоря, Лотус его может/должен юзать в момент прикрепления - отсюда и ошибки. Вариант решения - dbcache flush + копирование файла шаблона во временную папку + прикрепление файла уже из нее.
 
Вопрос - скопированный шаблон ГДЕ находится? Если в папке Data, то, вообще говоря, Лотус его может/должен юзать в момент прикрепления - отсюда и ошибки. Вариант решения - dbcache flush + копирование файла шаблона во временную папку + прикрепление файла уже из нее.
Ну можно сказать что и в папке Data, правда в одной из ее дочерних папок, путь типо такого Data/Attachments/

А будет ли права на создание(перемещение) шаблона в какую то временную папку на сервере?

Насчет прописывания параметров, пока не проверил, но думаю до конца рабочего дня проверю и отпишусь.
 
Проверил вчера, добавил эти две переменные в нотес ини, перезагрузился. Такая же ерунда. Снова хафман. Снова вложение повреждено
 
Тогда надо попробовать сделать копию в другую папку, как предложил Мыш
Возможно, что после создания базы она(копия) подхватывается задачей, которая обновляет каталог.
А будет ли права на создание(перемещение) шаблона в какую то временную папку на сервере?
Во временную директорию ОС или Notes доступ есть всегда, главное его получить или прописать жестко.
 
Вот-вот, сие не есть гут. Более того - даже если, скажем, реплицировать базу с сервера локально в папку вне DATA (скажем, в системный TEMP), то Лотус все равно эту базу "держит" (было где-то обсуждение этой темы). Попробуйте пересмотреть саму задачу.
ЗЫ. Аттачи (т.е., простые файлы, лежащие на дисках) на серверах Domino прикрепляются нормально - вот ни разу не сталкивался с проблемами. Поэтому и грешу на Ваш механизм. Попробуйте простой файл прикрепить. Так же надо элиминировать влияние злобных антивирусов :-) И прочих систем защиты.
 
Вот-вот, сие не есть гут. Более того - даже если, скажем, реплицировать базу с сервера локально в папку вне DATA (скажем, в системный TEMP), то Лотус все равно эту базу "держит" (было где-то обсуждение этой темы). Попробуйте пересмотреть саму задачу.
ЗЫ. Аттачи (т.е., простые файлы, лежащие на дисках) на серверах Domino прикрепляются нормально - вот ни разу не сталкивался с проблемами. Поэтому и грешу на Ваш механизм. Попробуйте простой файл прикрепить. Так же надо элиминировать влияние злобных антивирусов :-) И прочих систем защиты.
В общем путем тестирования выявилось следующее, действительно при выгрузке шаблона Домино с ним как то еще работает, и когда заливаю как вложение происходит ошибка. Пытался подменить расширение, все равно не помогло. хотя по началу была какая то надежда, так как выгрузив шаблон с расширением .doc на сервер и залив его во вложение, оно было не поврежденным, но когда скачал его локально и сменил расширение на ntf и открыл, лотус ругнулся что оно повреждено. Вне папки дата выгрузить не могу. Права не всегда есть на то, чтобы выгрузить куда то еще (тестировал на AIX). Теперь вот такой вопрос, может кто знает, сколько по времени сервер работает с этой копией базы данных?
 
Про права интересно... Темповая директория всегда доступна.
Код:
Declare Function linux_OSGetSystemTempDirectory Lib "libnotes.so" Alias "OSGetSystemTempDirectory" ( ByVal S As String) As Integer
Function GetNotesTemp() As String
Dim tmppth As string
Dim d As String*256
Dim s As Integer

s = linux_OSGetSystemTempDirectory(d)
tmppth = Left(d,s) & {/}
End Function
Еще можно попробовать прервать сессию, создать новую и переполучить выгруженную базу.

А вариант на Java не рассматривается?
 
В общем путем тестирования выявилось следующее, действительно при выгрузке шаблона Домино с ним как то еще работает, и когда заливаю как вложение происходит ошибка. Пытался подменить расширение, все равно не помогло. хотя по началу была какая то надежда, так как выгрузив шаблон с расширением .doc на сервер и залив его во вложение, оно было не поврежденным, но когда скачал его локально и сменил расширение на ntf и открыл, лотус ругнулся что оно повреждено. Вне папки дата выгрузить не могу. Права не всегда есть на то, чтобы выгрузить куда то еще (тестировал на AIX). Теперь вот такой вопрос, может кто знает, сколько по времени сервер работает с этой копией базы данных?

если выгрузить в папку data - то тут же накинуться всякие amgr,update и т.д - сколько сервер будет колбасить эту базу - неизвестно.
Есть вариант выгрузки вне дата через API, там есть явное закрытие хендла или экспорт элементов дизайна в DXL.
 
Права не всегда есть на то, чтобы выгрузить куда то еще
нотусевый темп д.б. доступен ему по записи
хотя выше директорий берётся для линуха, есть такойже АПИ и для АИХ
вопрос наверное больше в том - как потом планируется использовать эту копию, т.е. - зачем она в виде аттача?
может просто делать ДХЛ как и предложил rinsk
если это - способ реплицировать (копировать) шаблон на др. сервер - следовало бы присмотреться к стандартным механизмам
 
Мыш drop All еще надо перед сбросом кэша
 
Попробовал как вы сказали, выгрузить в темповую папку

Код:
Declare Function linux_OSGetSystemTempDirectory Lib "libnotes.so" Alias "OSGetSystemTempDirectory" ( ByVal S As String) As Integer
Declare Function AIX_OSGetSystemTempDirectory Lib "libnotes_r.a" Alias "OSGetSystemTempDirectory" (ByVal S As String) As Integer
Declare Function w32_OSGetSystemTempDirectory Lib "nnotes.dll" Alias "OSGetSystemTempDirectory" ( ByVal S As String) As Integer

Вызов функции в таком виде (чтобы проверить на аиксе)

Код:
	If session.Platform = "AIX/64" Then
s = aix_OSGetSystemTempDirectory(d)
Print CStr(s)
Else
s = w32_OSGetSystemTempDirectory(d)
End If
tmppth = Left(d,s) & {/}

На AIX значение s было равно 0 и темповая директория не определилась

На виндовой машине все сработало ок.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab