LINUX.ORG.RU

Сообщения ricie

 

Как лучше передать данные доступные только root'у в Java-процесс?

Есть сервис написанный на Java. Работать он должен без прав root’а. Как этот сервис может получить данные доступ к которым есть только у root’а? Допустим что эти данные в процессе работы сервиса не меняются.

Например, можно было бы запускать сервис с правами root’а, а по завершению инициализации переключиться на нужного пользователя, но судя по всему в Java нет стандартных средств для переключения пользователя. Можно написать скрипт который будет запускать Java-сервис и передавать ему данные в каком-нибудь формате, например, на stdin. Есть еще варианты?

 ,

ricie
()

Что за опция -u для make?

Достался мне в работу один старый компонент. В билд-скриптах есть такая строчка:

/usr/bin/make -u -f custom.mk build
На какой системе это запускалось ранее я не знаю, но GNU make опции -u не знает. Может кто-нибудь знает у какой реализации make есть такая опция и что она зн-т?

 

ricie
()

Найти процесс отправляющий бинарные пакеты на UDP порт

Анализируя трафик, заметил что какой-то процесс регулярно пытается отправлять бинарные пакеты на закрытый UDP порт localhost'а. Как найти этот процесс?

 ,

ricie
()

Сокет не отправляет данные на сервер

Если запустить нижеследующий код на perl'е, то в консоли выводится «rc=12», но строка «Hello World» на сервер не приходит.

my $client = IO::Socket::INET->new("localhost:8080");
my $rc = $client->send("Hello World!");
print "rc=$rc\n";

Сниффер показывает что соединение устанавливается, но передачи данных нет. Пробовал явно выставлять autoflush, но не помогло (да и в документации сказано что autoflush уже выставлен по умолчанию). А вот если отсылаемую строку завершить переводом строки, то данные отправляются. Что нужно поправить в коде чтобы работало без перевода строки?

 ,

ricie
()

Вопрос по использованию pthread_once()

В качестве примера использования pthread_once() обычно приводится код наподобие следующего:

static pthread_once_t once = PTHREAD_ONCE_INIT;

void do()
{
  pthread_once(&once, &init);

  // do something
  ...
}

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

void do()
{
  static pthread_once_t once = PTHREAD_ONCE_INIT;
  pthread_once(&once, &init);

  // do something
  ...
}

И закрались у меня подозрения что второй вариант не всегда гарантирует вызова init() только один раз в многопоточной программе т.к. в нем не исключены гонки при инициализации once. Развейте или подтвердите мои сомнения.

 , ,

ricie
()

Как ходит трафик между клиентом и сервером работающими на одной машине?

Допустим клиент и сервер работают на одной и той же linux машине и общаются по IP адресу интерфейса eth0. Если я хочу собрать трафик между ними с помощью wireshark/tshark, то собирать надо на интерфейсе lo, а не eth0. Почему? Оптимизация на уровне ядра? В общем киньте кто-нибудь ссылок, разъясняющих это момент в деталях?

 ,

ricie
()

Странный segfault

Пытаюсь найти причину сегфолта в приложении (linux, x86). gdb показывает что падает внутри wstringstream::operator<<(). Грубо говоря, соответствующий фрагмент функции выглядит так:

  char* buff = new char[size];
  // заполняем buff и за его границы точно нигде не выходим
  ...
  std::wstringstream wss;
  wss << buff;
При len > ~500000 падает всегда. Первая мысль что где-то повреждается память, но анализ кода ничего не дал.

Затем попробовал запустить под valgrind'ом и получил «Invalid write of size 4» внутри wstringstream::operator<<() и дальше мол адрес принадлежит стеку треда X.

После этого решил проанализировать стек в gdb после сегфолта и вот здесь обнаружил что при вызове wstringstream::operator<<() регистр esp уменьшился на ~2000000, а в этом стековом фрейме лежит wchar_t-представление buff. Иначе говоря выглядит будто wstringstream::operator<<() преобразовал buff из char[] в wchar_t[] прямо на стеке и тем самым вышел за его пределы. Как-то мне совсем не верится что std::wstringstream выполняет преобразование на стеке, а не в динамической памяти. Может у кого какие соображения есть по этому поводу?

PS: я понимаю что следующим шагом должен быть анализ wstringstream::operator<<(), но для этого нужно иметь либо его исходники которых на данный момент у меня нет (известно что конечное приложение собирали gcc, а вот какой именно версией пока выяснить не удалось) либо ковыряться с ассемблерным кодом на что у меня желания нет

 , ,

ricie
()

Библиотека для получения информации из аудиофайла

Подскажите Java библиотеку для получения информации (кодек, длительность и т.п.) из аудиофайлов.

PS: javax.sound не подходит т.к. мало с какими форматами и кодеками умеет работать

 ,

ricie
()

SSLv2Hello vs TLSv1

Есть веб-приложение работающее на Tomcat 6 & Java 6. Это веб-приложение общается со сторонним веб-приложением через https и для этого используется Commons HttpClient 3.1. При этом запрос ClientHello стороннему веб-приложению посылается с использованием TLSv1, но если эту же логику общения запустить из консоли, то уже используется SSLv2Hello.

Вопрос: В каком направлении смотреть чтобы понять почему из под Tomcat'а используется TLSv1, а не SSLv2Hello?

 , ,

ricie
()

Скопировать и переименовать ресурс

Есть множество ресурсных файлов вида:

  • resource_en_US
  • resource_de_DE
  • resource_ru_RU
  • ...

Требуется во время сборки проекта создать копию одного из этих файлов (конфигурируется в pom.xml) с именем resource. Какой плагин может решить эту задачу? (Вариант с вызовом shell-команд не предлагать)

 

ricie
()

RSS подписка на новые темы