Есть сервис написанный на Java. Работать он должен без прав root’а. Как этот сервис может получить данные доступ к которым есть только у root’а? Допустим что эти данные в процессе работы сервиса не меняются.
Например, можно было бы запускать сервис с правами root’а, а по завершению инициализации переключиться на нужного пользователя, но судя по всему в Java нет стандартных средств для переключения пользователя. Можно написать скрипт который будет запускать Java-сервис и передавать ему данные в каком-нибудь формате, например, на stdin. Есть еще варианты?
Достался мне в работу один старый компонент. В билд-скриптах есть такая строчка:
/usr/bin/make -u -f custom.mk build
На какой системе это запускалось ранее я не знаю, но GNU make опции -u не знает. Может кто-нибудь знает у какой реализации make есть такая опция и что она зн-т?
Анализируя трафик, заметил что какой-то процесс регулярно пытается отправлять бинарные пакеты на закрытый UDP порт localhost'а. Как найти этот процесс?
Если запустить нижеследующий код на 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 уже выставлен по умолчанию). А вот если отсылаемую строку завершить переводом строки, то данные отправляются. Что нужно поправить в коде чтобы работало без перевода строки?
В качестве примера использования 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. Развейте или подтвердите мои сомнения.
Допустим клиент и сервер работают на одной и той же linux машине и общаются по IP адресу интерфейса eth0. Если я хочу собрать трафик между ними с помощью wireshark/tshark, то собирать надо на интерфейсе lo, а не eth0. Почему? Оптимизация на уровне ядра? В общем киньте кто-нибудь ссылок, разъясняющих это момент в деталях?
Пытаюсь найти причину сегфолта в приложении (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, а вот какой именно версией пока выяснить не удалось) либо ковыряться с ассемблерным кодом на что у меня желания нет
Есть веб-приложение работающее на Tomcat 6 & Java 6. Это веб-приложение общается со сторонним веб-приложением через https и для этого используется Commons HttpClient 3.1. При этом запрос ClientHello стороннему веб-приложению посылается с использованием TLSv1, но если эту же логику общения запустить из консоли, то уже используется SSLv2Hello.
Вопрос: В каком направлении смотреть чтобы понять почему из под Tomcat'а используется TLSv1, а не SSLv2Hello?
Требуется во время сборки проекта создать копию одного из этих файлов (конфигурируется в pom.xml) с именем resource. Какой плагин может решить эту задачу? (Вариант с вызовом shell-команд не предлагать)