Пытаюсь отучить Apache выполнять программы.
все опции, которые связаны с CGI, я в конфигах закоментировал.
теперь он не "понимает" файлы с расширением cgi.
Так знаете что он делает когда я ложу в любой каталог исполняемый файл (в названии фала нет намека на cgi) ? - он сначала выводит сожержимое этого файла (бинарного), а потом исполняет его ! я бит исполнения убрал - ему пофиг.
я не понимаю, какого хера они вообще придумали технологию CGI, если ее отключить нельзя !
может кто-то сталкивался с такими проблемами ?
Apache версии 1.3.28
дистрибутив - Slackware 9.1
может кто-нибудь использовал и подскажет программы для доса для связи по самбе. надо просто чтоб дос смог подключить шары других машин, и качать оттуда данные.
почему сюда пишу - денег на инет нет, и попробовать поискать проги самому для меня болезненно.
Ух, уж 3 года знаком с DNS, недавно пришлось его по-настоящему настраивать - оказалось многого не знал.
Но что меня вообще вывело из себя, так это новые "горизонты" в отношении доменов. К примеру - Custom DNS, Static DNS,... Оказываеться, трансфер зоны не "просто так" делаеться. И еще много-много чего.
Я чего сюда пишу - в инете искал документацию про DNS, но кроме dyndns.org (откуда вопросы и взялись) ничего путного не нашел. (не скрою, знания вроде есть чтоб домен держать, а вот больше...).
Короче, может усть у кого ссылка на хороший ресурс (описание работы DNS)(only not rfc :)).
Спасибо.
Короче,такой трабл:
я с домена nkkep.dp.ua посылаю почту на teleportsv.net
в ответ с relay.teleportsv.net получаю:
(кидаю с заголовком)
>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>
This message was created automatically by mail delivery software.
A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:
alex@teleportsv.net
SMTP error from remote mailer after MAIL FROM:<nial@nkkep.dp.ua> SIZE=2950:
host relay.teleportsv.net [193.41.48.230]: 550 Valid relay MUST have PTR DNS record.
------ This is a copy of the message, including all the headers. ------
Return-path: <nial@nkkep.dp.ua>
Received: from firstserv.koledg ([192.168.0.1] helo=server.nkkep.edu)
by relay.nkkep.dp.ua with esmtp (Exim 4.43)
id 1CoOLE-0005yS-8C
for alex@teleportsv.net; Tue, 11 Jan 2005 17:53:56 +0200
Date: Tue, 11 Jan 2005 17:54:29 +0300
From: nial <nial@nkkep.dp.ua>
X-Mailer: The Bat! (v1.61)
Reply-To: nial <nial@nkkep.dp.ua>
Organization: Nkkep.dp.ua
X-Priority: 3 (Normal)
Message-ID: <43977258142.20050111175429@nkkep.dp.ua>
To: alex@teleportsv.net
Subject: =?Windows-1251?B?wuDq4O3x6P8=?=
MIME-Version: 1.0
Content-Type: text/plain; charset=Windows-1251
Content-Transfer-Encoding: 8bit
в dns вроде все правильно прописано. Может есть опытные людм - подскажите, в чем проблема.
и еще, если не тяжело, сделайте nmap relay.nkkep.dp.ua - и ответ перешлите на nial at ukr dot net
пишу сканер работающих машин в локальной сети (мне нехер делать)
посылаю запрос на 80-й порт, и по результатам определяю - включена машина или нет.
смотрел как это делает nmap (простой пинг) (я с него идею 80-го скопировал) - он сразу на все машины сокеты открывает. причем если на машине стоит apache, рвет соединение.
вопрос: как его правильно рвать, это соединение. через netstat вижу висящий SYN запрос на машину, хотя close(socket) сделал. пытался shutdown(socket) - тоже нихрена, висит соединение.
и еще :) - как nmap открывает сразу много сокетов и шлет через них сразу - вроде fork он не использует, в системе висит всего один процесс, а сокетов - тьма.
может можно от ожидания ответа сокета отказаться, и начать открывать новый ? ума просто не приложу.
меня давно этот вопрос мучает: есть несколько дистров линукса, а вот где их применяют в основном, мне так и не известно. и как они держат себя в плане безопасности. Слышал самые противоречивые мнения. интересно послушать что-то стоящее. Например про Слаку (я ее юзаю)
void Init_Spisok(Spisok *L);
unsigned int Spisok_Add(Spisok *L, Data *dt);
Data * Spisok_Get(Spisok *L, unsigned int z);
void Spisok_Delete(Spisok *L,unsigned int z);
void Init_Template_Spisok(Template_Spisok *L);
unsigned int Template_Spisok_Add(Template_Spisok *L, Template_Data *dt);
Template_Data * Template_Spisok_Get(Template_Spisok *L, unsigned int z);
void Template_Spisok_Delete(Template_Spisok *L,unsigned int z);
Может кто-то сталкивался с проблемой: появляеться ошибка в __int_malloc (как говорит gdb).Есть намек на изменение глобальных переменных, которые использует malloc. При этом сопутствующие казусы просто великолепны: память больше не выделяеться на свободном месте, она выделяеться где попало. Причем после ее освобождения, старые "затертые" данные востанавливаються (используется calloc).
Эту ошибку вызывает функция, в которой почти нет указателей, а те что есть - безобидны. я их уже много раз проверял, они вроде бы в порядке.
Я вот на что намикаю: возможно есть какие нибудь "манипуляци" с обычными переменными, после которых malloc теряет голову.
Ошибка не обычна. Пишу программы уже довольно долго, но такого еще не видел. Код, если есть желающие, я могу выложить. Длина кода - около 400 строк, стиль написания - в лучших манерах.
Если есть возможность у кого-то протестить код, ответьте, я его выложу.
ЗЫ: есть в С функции сравнения по шаблону ? perl не подходит. надо на С.
ситуация типичная: пишется программа. как всегда SIGSEGV, но, вот показан кусок работы в gdb:
Breakpoint 2, template_procced (
str_start=0x8051f10 "Nov 10 16:46:11 proxima kernel: ipfw: 3100 Deny UDP 172.16.200.1:53 172.16.211.7:50105 in via rl0",
templ_start=0x8051ea8 "month date time host kernel/last prog/mess id/repeat
target/count proto/times src dst in via dev") at firewall.c:181
181 first_templ_word = (char *)get_before_slash(templ_word);
(gdb) s
get_before_slash (word=0x8051e78 "date") at string.c:226
226 char * result = NULL;
...
here goes code
...
260 if (find_slash == 0) {
(gdb)
261 result = (char *)safe_strdup(word);
(gdb) p word
$14 = 0x8051e78 "date"
(gdb) p calloc(5,1)
$15 = (void *) 0x8051e88
(gdb) p free(0x8051e88)
$16 = void
(gdb) s
safe_strdup (str=0x8051e78 "date") at string.c:355
355 char * result = NULL;
(gdb)
(gdb) p calloc(5,1)
Program received signal SIGSEGV, Segmentation fault.
0x400944c8 in _int_malloc () from /lib/libc.so.6
The program being debugged was signaled while in a function called from GDB.
GDB remains in the frame where the signal was received.
To change this behavior use "set unwindonsignal on"
Evaluation of the expression containing the function (calloc) will be abandoned.(gdb)
Сразу говорю, что вместо "(gdb) p calloc(5,1)" в проге стоит нормальное выделение памяти. тоже самое касаеться (gdb) p free(0x8051e88).
описание: до входа в функцию память освобождалась и выделялась нормально (пробовал много раз), но после - вы сами видете. В чем может быть причина этого ? я понимаю что это мой код что-то делает не так, но почему именно в такой форме все происходит ?
И еще один прикол из той же програмы:
Breakpoint 2, template_procced (
str_start=0x8051f10 "Nov 10 16:46:11 proxima kernel: ipfw: 3100 Deny UDP 172.16.200.1:53 172.16.211.7:50105 in via rl0",
templ_start=0x8051ea8 "month date time host kernel/last prog/mess id/repeat
target/count proto/times src dst in via dev") at firewall.c:181
181 first_templ_word = (char *)get_before_slash(templ_word);
(gdb) s
get_before_slash (word=0x8051e78 "date") at string.c:226
226 char * result = NULL;
(gdb) p word
$7 = 0x8051e78 "date"
(gdb) p calloc(5,1)
$8 = (void *) 0x8051e78
(gdb) p word
$9 = 0x8051e78 ""
(gdb) p free(0x8051e78)
$10 = void
(gdb) p word
$11 = 0x8051e78 "date"
описание: я выделяю память. Она выделяеться на уже выделеном участке (это первый глюк). calloc должен этот участок очистить. Но после освобождения памяти, прежние данные тоже остаються в порядке (второй).
ну просто пиздец какой-то.
Я не прошу писать мне сообщения типа: это у тебя ошибка в проге. Я это знаю.
Мне интересен другой вопрос, как calloc смог выделить память, очистить ее, а потом вернуть ее старое сдержимое на место. Или это gdb прикалывается, или это calloc не смог правильно сработать.
int main()
{
FILE * file;
char *str;
char c;
file = fopen("some_file","r");
str = (char*)calloc(sizeof(char),1);
do {
c = fgetc(file);
sprintf(str,"%s%c",str,c);
} while (c != '\n' && c != EOF);
printf("\n String: %s",str);
fclose(file);
return 0;
}
some_file - любой текстовый файл.
она вызывает Segmentation Fault в системе Slackware 9.1 на строке fclose(file);
Дистр поставлен, и напильником не обработан.
gdb говорит что ошибка в glibc.so.6 (стоит 2.3.2)
Это вина девелопера glibc ? проверте ее на 9.1 - как у других бутет ли работать.
Если ошибка - оправте отчет про ошибку.
Вопрос про iptables и самбу: когда smbclient начинает работать, ему выдаеться порт > 1024. Дальше он коннектится к другой самбе, и другая принимает сообщения с начала на 137(9) порт, но ведь потом другая переводит разговор на другой порт, тоже > 1024. И тут загвоздка - как правильно настроить iptables, чтоб самба работала. Ведь не известно на каких портах она будет работать.
Может решение в том, что б smbclient заставить работать на конкретном диапазоне портов ? (Жаль динамических правил нету)
Хотелось бы поставить свежие пакеты glibc: glibc, glibc-devel, glibc-common (все 2.3.2). Вопрос: система не загнеться, например из-за изменения libc.so.6 ? Был случай, я из слаки 9 скопировал libc.so.6 в RH 7.3 . Команда login сразу отказалась работать. :)
Текущая система: Slackware 9.0