• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

domino JNA

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
предполагается рассказывать все что касается этого проекта
кратко - доступ к CAPI через java (вместо стандартного из Notes.jar) с автоматической сборкой мусора и прочими плюшками
Есть сорсы на гитхабе, собрать вменяемый набор библиотек мне самому не удалось ;) (через мавен), но я не стал настаивать...
- скачиваем бинарник с зависимостями
для хэпагесов - вкладка релизов на ГХ
установка для хэпагов по стандартной схеме - через updateSite, мне удалось увидеть на сервере
te http osgi ss mindoo > 23.08.2019 14:27:26 osgi> "Framework is launched." 23.08.2019 14:27:26 id State Bundle 23.08.2019 14:27:26 19 RESOLVED com.mindoo.domino.jna.xsp_0.9.20.201810111309 23.08.2019 14:27:26 25 RESOLVED com.mindoo.domino.jna.xsp.source_0.9.20.201810111309код пока не писал
в дизигнере тоже зацепил
1566560030271.png
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
еще раз, где то уже спрашивал: для серверных агентов я могу использовать это?
не xpage, не сервлеты, а обычный java агент, запущенный через консоль сервера/runonserver.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
еще раз, где то уже спрашивал: для серверных агентов я могу использовать это?
не xpage, не сервлеты, а обычный java агент, запущенный через консоль сервера/runonserver.
я не проверял, скорее-всего надо будет либы дублировать (в jvm/lb/ext)
и будет вопрос наследования от рапера
 
Последнее редактирование:

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
в эклипсе запустил (но неполностью) примерчик, запускал с серверными бинарниками (10ФП2), на убунте 64бит. Не получилось итерировать энтрисы - их просто 0, учитывая что names.nsf не пустая ;)
-Djava.library.path=/opt/ibm/domino/notes/latest/linux
-Duser.dir=/local/notesdata
Initializing Domino JNA with mode Direct
0E:AA (0 MB): 100%
18.09.2019 19:40:48 0E:A8
18.09.2019 19:40:48 03:3E
18.09.2019 19:40:48 03:3E
Db server:
Context User: CN=dom2/O=CRUINTERNET
Entries count:0
10020167
запускал при выключеном сервере, ибо при включенном были странности: то пропадал в сети, то падал, то завершал работу.
Пример с гитхаба не стал работать - не находил ID, разработчик подсказал другой способ инициализации, указать notes.ini не получилось, но хватило каких-то умолчаний (как я понимаю) указание рабочего каталога не влияет (user.dir).
В коде ниже закоменчены варианты обращения к серверу, в т.ч. к удаленному, Context user "работает" только для "локального" сервера, соединения с удаленным устанавливает (смотрел в консоли).
Что из себя представляет Context user - я не разобрался, при обращении к удаленному серверу дает ошибку, к локальному - он даже не пытается его валидировать.
Строки ключей в выхлопе теста - задавал в параметрах запуска кода (jvm) и
1568887442636.png

Сама jvm - от домины, потому и нужно указывать пути к бинарникам (иначе ошибка будет)
Java:
import com.mindoo.domino.jna.*;
import com.mindoo.domino.jna.NotesCollection.EntriesAsListCallback;
import com.mindoo.domino.jna.constants.Navigate;
import com.mindoo.domino.jna.constants.OpenNote;
import com.mindoo.domino.jna.constants.ReadMask;
import com.mindoo.domino.jna.gc.NotesGC;
import lotus.domino.NotesException;
import lotus.domino.NotesFactory;
import lotus.domino.NotesThread;
import lotus.domino.Session;

import java.util.EnumSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.concurrent.Callable;

public class DominoApi{

    public static void main(String[] args) throws NotesException {
        System.out.println("-Djava.library.path="+System.getProperty("java.library.path"));
        System.out.println("-Duser.dir=" +
                System.getProperty("user.dir"));
        try {
            //initialize domino instance
            com.mindoo.domino.jna.utils.NotesInitUtils.notesInitExtended(new String[]{});                 
            NotesGC.runWithAutoGC(new Callable<Object>() {

                @Override
                public Object call() throws Exception {
                    StopWatch stopWatch = new StopWatch();
                    //NotesThread.sinitThread();//not necessary
                    //Session session = NotesFactory.createSession();//not necessary
                    stopWatch.start();
                    //NotesDatabase dbData = new NotesDatabase(session, "", "names.nsf");//not necessary
                    //NotesDatabase dbData = new NotesDatabase("CN=mail1/O=CRUINTERNET", "names.nsf", "CN=mail1/O=CRUINTERNET");
                    //NotesDatabase dbData = new NotesDatabase("CN=mail1/O=CRUINTERNET", "names.nsf", "");
                    //NotesDatabase dbData = new NotesDatabase("", "names.nsf", "CN=admin/O=CRUINTERNET");
                    NotesDatabase dbData = new NotesDatabase("", "names.nsf", "");
                    System.out.println("Db server: "+dbData.getServer());
                    System.out.println("Context User: "+dbData.getContextUser());
                    NotesCollection colFromDbData = dbData.openCollectionByName("People");

                    boolean includeCategoryIds = false;
                    LinkedHashSet<Integer> allIds = colFromDbData.getAllIds(Navigate.ALL_DESCENDANTS);
                    NotesIDTable selectedList = colFromDbData.getSelectedList();
                    selectedList.clear();
                    selectedList.addNotes(allIds);
                    String startPos = "0";
                    int entriesToSkip = 1;
                    int entriesToReturn = Integer.MAX_VALUE;
                    EnumSet returnNavigator = EnumSet.of(Navigate.NEXT_SELECTED);
                    int bufferSize = Integer.MAX_VALUE;
                    EnumSet returnData = EnumSet.of(ReadMask.NOTEID, ReadMask.SUMMARY);

                    List<NotesViewEntryData> selectedEntries = colFromDbData.getAllEntries(startPos, entriesToSkip,
                            returnNavigator, bufferSize, returnData, new EntriesAsListCallback(entriesToReturn));
                    System.out.println("Entries count:" + selectedEntries.size());
                    for (NotesViewEntryData currEntry : selectedEntries) {
                        NotesNote note = dbData.openNoteById(currEntry.getNoteId(), EnumSet.noneOf(OpenNote.class));

                        System.out.println(
                                note.getItemValueString("lastname") + ", " + note.getItemValueString("firstname"));
                        note.recycle();
                    }
                    stopWatch.stop();
                    System.out.println(stopWatch.getElapsedTimeSecs());
                    return null;
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //NotesThread.stermThread();//not necessary
            //terminate domino instance
            com.mindoo.domino.jna.utils.NotesInitUtils.notesTerm();
        }

    }

}
 
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!