как всегда, есть код (приведен ниже).
при запуске программы вылетает:
*** glibc detected *** malloc(): memory corruption (fast): 0x0804f070 ***
Aborted
что должна делает программа: в функцию char ** get_elements() передается строка "3, 4, 5, 6". эта функция должна создать char **, раскидав в каждый char * строки: "3", " 4", " 5", " 6".
т.е.
char ** rrr = NULL;
rrr = get_elements("3, 4, 5, 6");
после должно быть так:
rrr[0] = "3";
rrr[1] = " 4";
rrr[2] = " 5";
rrr[3] = " 6";
rrr[4] = NULL;
вся суть в функции get_elements() - вот только где там ошибка я так и не понял.
подскажите, плиз.
ЗЫ: функции add_char_to_string() и safe_free() никогда не подводили.
void safe_free(char ** str)
{
if (!(*str))
return;
free(*str);
*str = NULL;
};
char * add_char_to_string(char * str, char byte)
{
char * result = NULL;
unsigned int len = 0;
if (!str)
len = 0;
else
len = strlen(str);
result = (char*) calloc(len+2, sizeof(char));
if (!result)
return NULL;
if (len != 0)
strcat(result,str);
result[len] = byte;
result[len+1] = '\0';
if (str)
safe_free(&str);
return result;
};
char ** get_elements(char * params)
{
char ** result = NULL;
unsigned int len = 0, i = 0, k = 0;
char * temp = NULL;
if (!params)
return NULL;
if (strlen(params) == 0)
return NULL;
len = strlen(params);
while (1) {
for(; i < len; i++) {
if (params[i] == ',')
break;
temp = add_char_to_string(temp, params[i]);
}
k++;
i++;
if (!result)
result = (char **) calloc(k + 1, sizeof(char *));
else
result = (char**) realloc(result, k + 1);
result[k] = 0;
result[k-1] = temp;
if (i >= len) {
break;
}
temp = NULL;
}
return result;
}
int main(int argc, char *argv[])
{
char ** rrr = NULL;
rrr = get_elements("3, 4, 5, 6");
if (!rrr) {
printf("Wrong\n");
}
else {
printf("Not bad\n");
}
return EXIT_SUCCESS;
};
# nc localhost 110
+OK gigant Cyrus POP3 v2.2.12-Gentoo server ready <1392129762.1135859107@gigant>
USER zan
+OK Name is a valid mailbox
PASS ***
-ERR [SYS/PERM] Unable to locate maildrop: Mailbox does not exist
QUIT
+OK
совсем не могу понять, что за ошибка... новый год уж как близко, а трабл остался )
я меня сеть аналогичная работающая система (второй сервер), и там не такой проги, конфиги тоже слиты с работающего... видать, чет с правами доступа, того вот где...
гадать тут нет смысла, надо все проверять, но может кто-то уже сталкивался.
такая проблема:
я хоу чтобы slave сервер не делал transfer не пройдя аутентификацию на master'е.
проблема вот в чем: мастер стоит за NAT'ом (т.е. проверка ip адресов не катит).
а вот что я хочу - чтоб мастер запрашивал аутентификацию только при transfer'те зоны. читал http://www.bind9.net/manual/bind/9.3.1/Bv9ARM.ch06.html -вроде таких опций нет.
может кто-нибудь делал такое.
спасибо.
такоя проблемы: удалил файл /var/log/aaa.log
при этом дисковое пространство не освободилось - видимо, либо это файл открыт каким-то приложением, либо на него имееться жесткая ссылка.
как освободить место занимаемое в прошлом этим файлом ? (без перезагрузки и останова процессов).
спасибо.
в общем, есть две машины, которые залинкованы двумя сетевыми (т.е. в каждой из них стоит две сетевых карты, и на каждой одна смотрит в 192.168.1.0./24, другая в 192.168.2.0/24).
я зочу чтоб по-умолчанию пакеты жемду двумя машинами ходили через 1-у сеть, а если она упадет - через 2-ю.
как я понимаю, здесь нужны статические маршруты....
вот что я кинул в zebra.conf (для одной из машин):
ip route 192.168.1.0/24 eth1
ip route 192.168.2.0/24 192.168.1.254
ip route 192.168.1.0/24 192.168.2.254
ip route 192.168.2.0/24 eth2
вопрос: будет ли так работать, либо надо еще подымать ospfd ?
я че спрашиваю - покамись не могу это протестить, а настроить заранее надо.
Надо узнать скорость передаич нанных по, допустим, eth1.
пробовал iptraf - но он теряет пакеты, и в то время как tcpdump показывает сотни пакетов в секунду, iptraf пишет 0.2 packets/sec ))
что можно для этого поюзать ?
mrtg работает, но надо чет другое, чтоб с консоли запустить.
В общем, проблема закрытия сокета.
Программа слушает порт:
listenfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
int x = 1;
setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &x, sizeof (x));
и т.д.
при коннекте, получает дескриптор:
clientfd = accept(listenfd, (struct sockaddr *) &cliaddr, &clilen);
потом clientfd передается процессу, запущенному через fork().
он его пытается закрыть через close(clientfd). Результат - состояние "CLOSE_WAIT" соединения.
Как я понимаю, close(clientfd) не работает из-за fork()'a. Если запустить fork() в родительском потоке - все нормально закроется.
Я читал про то, что дочерный процесс не может изменять данные родителя - ядро ему делает только копию родителя. Но, если у него копия данных родителя, то почему не работает системный вызов ? Ведь, номер дескриптора не изменился.
Возможно ли в принципе закрыть сокет, который был передан родительским процессом дочерному ?
начну с этого:
[root@zhuk bazil]# /sbin/arping 172.16.212.200
ARPING 172.16.212.200 from 172.16.212.85 eth0
Unicast reply from 172.16.212.200 [00:04:75:99:B1:0C] 0.688ms
Unicast reply from 172.16.212.200 [00:C0:9F:8A:A8:07] 0.991ms
Sent 1 probes (1 broadcast(s))
Received 2 response(s)
[root@zhuk bazil]#
моя сетевая - 00:04:75:99:B1:0C.
я делал: "/sbin/arp -s 172.16.212.200 00:C0:9F:8A:A8:07" но этот МАС ни пингуется ни сканится через "nmap -P0 172.16.212.200" (говорит, ни одного ответа не получил).
сеть, в которой я работаю на 200-300 машин, свичи, хабы.
ходить по всем компам и искать этот МАС я тоже не могу. я в принципе не понимаю: этот МАС (00:C0:9F:8A:A8:07) может быть МАС'ок железки ?
либо это обычная сетевая карта, и ее хозяин слишком умен ?
спасибо.
если в MySQL можно без проблем сказать:
CREATE DATABASE some_base
GRANT USAGE ON some_base.* TO some_user@% IDENTIFIED BY some_passwd
и не будет проблем при попытке подключения с some_base другого пользователя кроме как some_user, то в PostgreSQL все наоборот (тут не помешают пару матов). Сколько манов читал, вот все что выгреб из них (postgresql-docs-8.0.3.tar.bz2):
создаю двоих пользователей:
CREATE USER aaa_user WITH NOCREATEDB NOCREATEUSER ENCRYPTED PASSWORD 'aaa';
CREATE USER bbb_user WITH NOCREATEDB NOCREATEUSER ENCRYPTED PASSWORD 'bbb';
bbb=> \du
List of users
User name | User ID | Attributes | Groups
----------------+---------+----------------------------+--------
aaa_user | 102 | |
bbb_user | 103 | |
postgres | 1 | superuser, create database |
(3 rows)
bbb=> \z
Access privileges for database "bbb"
Schema | Name | Type | Access privileges
--------+------+------+-------------------
(0 rows)
далее, как в фильме: aaa_user сможет делать все что угодно в базе 'bbb'
я начал думать, что разработчики PostgreSQL вообще не придумали никаких средств защиты базы от других пользователей (особенно мне нравится рабочая команда \l+)...
гуглил инет долго, решил сюда прийти.
может кто-нибудь админил эту субд ?
спасибо.
пытаюсь найти ftp-сервер, который бы работал на подобии courier-auth, т.е. брал бы из базы данных информацию о пользователе (name, passwd, uid/gid, homedir, qouta, ...).
кто нибудь с таким сталкивался ?
столкнулись с проблемой: надо делать сложный NAT под виндой. На iptables это реализовать можно без проблем ) Но для винды я нашел только одну программу - WinRoute.
просто крик души: есть чет намного сильнее чем WinRoute - там просто вообще идеология NAT неправильно реализована