LINUX.ORG.RU

Сообщения nial

 

bind: несколько view, несколько acl, пара master-slave сервера и проблема

столкнулся с проблемой, и хотелось бы посоветоваться с сообществом:

у меня есть master и slave NS-сервера. Есть домен domain.com, который master через трансфер передаёт на slave. И в этой ситуации появилась необходимость разным подсетям интернета выдавать разные IP адреса домена domain.com.

Конечно, я на мастере сделал несколько acl, за которыми закрепил необходимые подсети. Далее, я создал несколько view, указал на какие acl им реагировать, и сделал в этих view описания зон, с соответствующими IP адресами. На мастере все заработало.

На слейве я также завел acl, view, и описания зон. Вот только зоны я описал как slave, и указал для них мастера и другие параметры для notify и transfer операций.

И трабл в том, что когда слейв-сервак ломиться к мастеру, тот его пропускает по одному из view (исходя из указаний acl-директив), и соответственно все зоны на слейв-сервере содержат одни и те же записи (то есть, в них попадает описание зоны, сделанное для одного из view'ов на мастер-сервере).

В общем, можно ли как-то определить, какое именно описание слейв-сервак желает стащить к себе, чтобы выдать то, что надо.

Заранее спасибо.

>>>

nial
()

задержки в восприятии нажатия в MC

работаю в mc через ssh. после каждого нажатия на клавиши типа PgDn, PgUp, Home, End, F-*, короче, функциональные клавиши, происходит задержка их выполнения - сначала примерно пол секунды, потом секунду, далее две, и так по нарастающей.

прекратить эту задержку можно нажав на клавишу повторно, либо вообще просто на какую-угодно клавишу.

конечно я удалял ~/.mc. Я не рут в системе, но причины уж больно интересны.

подскажите, кто знает, из-за чего такие задержки в обработке.

>>>

nial
()

хочу узнать текущй год, а gcc не дает

bazil@f3t ~/try/file_stat $ cat ./stat.c

#include <stdio.h>
#include <stdlib.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <utime.h>

int main(int argc, char*argv[]) {
        time_t tt;
        struct tm * t;

        tt = time(NULL);
        t = gmtime((const time_t *)(&tt));

        printf("Local: %d\n", t->tm_year);

        exit(0);
}
bazil@f3t ~/try/file_stat $ gcc -g -o stat stat.c
stat.c: В функции ‘main’
stat.c:15: предупреждение: assignment makes pointer from integer without a cast
stat.c:17: ошибка: доступ по указателю на неполный тип
bazil@f3t ~/try/file_stat $ gcc --version
gcc (GCC) 4.1.2 (Gentoo 4.1.2 p1.0.1)
Copyright (C) 2006 Free Software Foundation, Inc.
Это свободно распространяемое программное обеспечение. Условия копирования
приведены в исходных текстах. Без гарантии каких-либо качеств, включая
коммерческую ценность и применимость для каких-либо целей.

bazil@f3t ~/try/file_stat $ uname -p
AMD Turion(tm) 64 X2 Mobile Technology TL-52
bazil@f3t ~/try/file_stat $ 

>>>

nial
()

Red Hat Enterprise Linux 5 - это уже что-то другое, или все то же RHEL

Red Hat Enterprise Linux - читаю на сайте:
http://www.redhat.com/rhel/server/details/

A base Red Hat Enterprise Linux server has para-virtualized guest operating system support for Red Hat Enterprise Linux 5 and version 4 Update 5.

означает ли это, что RHEL теперь не обычный дистрибутив, как Slackware, например, а уже, что-ли, контейнер для других ОСей ?

я также попытался получить ихнюю 30-ти дневную подписку, но.... они не ответили мне.
то есть, как я вижу, единственный способ получить этот RHEL - заплатить почти $400, только не известно за что...

Можно ли его где-то скачать, этот RHEL 5, бесплатно, так сказать ?

>>>

nial
()

convert char to integer

как перевести в командной строке символ в цифру

a -> 97
b -> 98
c -> 99

?

>>>

nial
()

dlopen: Segmentation fault

у меня есть библиотека, которую использует СУБД Cache в своей работе. Использует удачно. Это so файл.

Вот смотрите, сами:

user$ /tmp/1 $ ldd /usr/local/mca/servers/mca/lib/libccallin.so
libpm.so.0 => /usr/local/mca/servers/mca/lib/libpm.so.0 (0x00002b6cbb3ef000)
libcache.so => /opt/cache2007/bin/libcache.so (0x00002b6cbb52e000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002b6cbbaad000)
libm.so.6 => /lib64/tls/libm.so.6 (0x00002b6cbbc9e000)
libc.so.6 => /lib64/tls/libc.so.6 (0x00002b6cbbe24000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b6cbc058000)
libshared.so => /usr/local/mca/libs/binreloc/lib/libshared.so (0x00002b6cbc164000)
libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00002b6cbc267000)
libZThread-2.3.so.2 => /usr/local/mca/libs/zthread/lib/libZThread-2.3.so.2 (0x00002b6cbc475000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002b6cbc5bf000)
librt.so.1 => /lib64/tls/librt.so.1 (0x00002b6cbc6c2000)
/lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
libpthread.so.0 => /lib64/tls/libpthread.so.0 (0x00002b6cbc7dc000)
libz.so.1 => /usr/lib64/libz.so.1 (0x00002b6cbc8f2000)
user$ /tmp/1 $ cat 1.c

#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>

int main (int argc, char *argv[]) {
int han;

han = dlopen("/usr/local/mca/servers/mca/lib/libccallin.so", RTLD_LAZY);
if (!han) {
printf("Error: %s\n", dlerror());
}

printf("Done\n");

exit(0);

}
user$ /tmp/1 $ gcc -g 1.c -o 1 -ldl && ./1
1.c: In function `main':
1.c:9: warning: assignment makes integer from pointer without a cast
Segmentation fault
user$ /tmp/1 $

user$ /tmp/1 $ gdb ./1
GNU gdb Red Hat Linux (6.3.0.0-1.132.EL4rh)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu"...Using host libthread_db library "/lib64/tls/libthread_db.so.1".

(gdb) r
Starting program: /tmp/1/1
[Thread debugging using libthread_db enabled]
[New Thread 47175520534080 (LWP 27253)]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 47175520534080 (LWP 27253)]
0x0000003620a0aafe in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2
(gdb) bt
#0 0x0000003620a0aafe in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2
#1 0x0000003620cf85f2 in _dl_open () from /lib64/tls/libc.so.6
Previous frame inner to this frame (corrupt stack?)
(gdb)



я так понимаю, в этой библиотеке создаеться поток, который и вызывает SIGSEGV ?
только я не понимаю, как может вызваться функция в этой библиотеке, если RTLD_LAZY не делает этого.

может кто-то дать комментарий ?

nial
()

mod_php - fastCGI - необходим ответ знающего человека

Доброго дня всем.

Ну вот смотрите - если мы собираем php, с опцией --with-apxs2, то php сделает 
модуль для апача. В таком случае, загружаясь, апач будет подгружать so файл от php.
 Это первый вариант.

Другой - fastCGI (апач и php общаються через TCP/IP).

Что-то мне сильно кажется, что вариант mod_pm быстрее будет работать:
рассмотрим что будет происходить на запрос клиента (пусть даже mpm=prefork)

mod_pm:
----------------------------------------
* fork() - свободных уже нет
* обработка запроса, потому что mod_php уже был загружен parent процессом
* выдаем ответ клиенту

fastCGI:
----------------------------------------
* fork() - свободных уже нет
* открываем сокет
* пишем в сокет
* читаем из сокета
* выдаем ответ клиенту

сейчас часто вижу слова fastCGI рядом с nginx, и поэтому решил спросить здесь про 
эти особенности (пусть даже не про nginx, хотя мне и это интересно, а прочто про 
апач).

заранее спасибо за содержательные ответы.
nial
()

Контроль над пользовательской сессией X11

У меня есть LTSP сервер, и куча пользователей грузятся с него на своих бездисковых станциях, логинятся в KDE на этом же сервере, как я понимаю, используя XDMCP

Можно ли "подключиться" к сессии пользователя, т. е., к сессии между сервером X11 на клиентской машине, и клиентом X11 на сервере LTPS, выступая таким образом, вторым X11 сервером, и банально видеть все то что видит пользователь, управлять мышкой, клавой и .т.д. ?

nial
()

продолжить работу после обработки signal

код примерно таков:

void Signal_Handler(int sig) {
	printf("Yes, I am hear you\n");
}

int main( int argc, char *argv[] ) {

	signal(SIGINT, Signal_Handler);

    if ( fork() == 0) {
           sleep(2);
           kill(getppid(), SIGINT);
           exit(0);
    }

    sleep(10);
    exit(0);
}

В итоге, через 2 секунды main завершает свою работу.
Никогда не задумывался над этим: можно ли продолжить работу далее ?
nial
()

общие данные у родителя и потомка

у родителя есть переменная, объявленная в main. В этот же main делается fork(),  и потомок через некоторое время проверяет эту переменную, которую родитель у себя уже изменил. Проблема в том, что потомок не видит изменения.

Я понимаю в чем проблема, однако знаний устранить проблему быстро не хватает. Подскажите, как можно решить.

main () {
    int var = 0;

    if ( fork() == 0) {
         sleep(2)
         if (var == 0)
           kill(getppid(), SIGKILL);
           exit(0);
    }

    var = 1;
    sleep(10);
}

В итоге, родитель будет убит.
nial
()

как передать ssh-у пароль, чтобы не спрашивал

в общем, ума не приложу, как сделать именно эту задачу. я понимаю, что можно сгенерить ключ, и на другой передать публичную часть ключа, но что делать если этого сделать нельзя ? что если есть только пароль и логин.

то есть, как реализовать такую мысль: ssh user:password@server, и мы в системе.

разве что изменить исходный код ssh клиента....

nial
()

core dump & gdb - stragne stack

Доброго дня всем.

Есть httpd сервер (обычный Apache), к нему написан модуль, который выпадает в SigSegV. Мне необходимо узнать где это происходит, и вот какое решение я пытался воплотить:

Я переопределяю обработчик сигнала SigSegV, и в свой функции я делаю vfork(), и далее в новом процессе вызываю gdb, который делает attach к родителю, и делает gcore.

Далее, я этот core файл начинаю использовать:

$ gdb httpd -c 5861.1Hc3Ks-0001WX-gC.5861
....
Loaded symbols for /home/prapor/programs/mca/libs/xalan/lib/libxalanMsg.so.110
#0 0x00002af2e04ffa40 in wait () from /lib/libpthread.so.0
(gdb) bt
#0 0x00002af2e04ffa40 in wait () from /lib/libpthread.so.0
#1 0x00002af2e5edc197 in Signal_SIGSEGV (sig=<value optimized out>) at mod_pm.cpp:51
#2 0x00002af2e073f940 in killpg () from /lib/libc.so.6
#3 0x0000000000000000 in ?? ()
(gdb)

И я не вижу тот стек, который я ожидал увидеть. Ведь, как я понимаю, родитель работал, стек у него должен быть не маленький, а тут ноль.

Я уже проделывал таку штуку на работающем апаче - видел нормальный стек исполнения. Но здесь что-то не то. Ведь смотрите: если обработчик сигнала просто завершит свое выполнение (return;), то процесс будет продолжать выполнять свой код. Так а как же он вернется в этот код, если стек пуст!

Вот снимок стека работающего апача:

(gdb) bt
#0 0x00002af2e07c8363 in select () from /lib/libc.so.6
#1 0x00002af2e00a8115 in apr_sleep (t=<value optimized out>) at time.c:246
#2 0x000000000043b4a5 in ap_wait_or_timeout (status=0x7fffcb10b2bc, exitcode=0x7fffcb10b2b8, ret=0x7fffcb10b290,
p=0x565138) at mpm_common.c:345
#3 0x00000000004448e7 in ap_mpm_run (_pconf=0x16f8, plog=<value optimized out>, s=0x2) at worker.c:1570
#4 0x0000000000420b01 in main (argc=1, argv=0x7fffcb10b488) at main.c:717
(gdb)

Но не то что я видел !

Заранее спасибо за советы.

nial
()

Потоки и ядро 2.6.20

Добрый всем день.

Такая проблема: у меня приложение создает потоки, и потоки кидают в лог помимо своих сообщение, еще и свои tid'ы (идентификаторы потоков). Так вот, эти идентификаторы совпадают. причем такое впечатление, что мне (как пользователю системы) выделили десяток tid'ов, организовали их в "стек", и выдают верхний из "стека tid'ов". Ибо я каждый раз запускаю программу, и каждый раз потоки показывают одни и техе tid'ы.

Вот и я думаю, то-ли лыжи не едут, то ли...

nial
()

Bind from ISC & /dev/ass

в общем, как всегда: два ns сервера, один мастер, другой слейв.
буду писать много, так как этот bind уже заебал.

трабл вот в чем: после запуска серверов на слейве в notify.log находим 
такие вот строки:
-------------8<---------------------------------------------------------
Aug 11 16:30:40.005 notify: received notify for zone 'abc': not authoritative
Aug 11 16:30:40.512 notify: received notify for zone 'xyz'
-------------8<---------------------------------------------------------

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

конфиг мастера:
-------------8<---------------------------------------------------------
options {
        version "my_own_version";
        directory "/var/named";

        forward first;
        forwarders {
                192.168.0.13;
                192.168.0.8;
        };

        listen-on-v6 { none; };
        listen-on { 127.0.0.1; 192.168.0.199; };

        pid-file "/var/run/named/named.pid";
};

logging {
        channel notify_ch {
                file "/var/log/bind/notify" versions 3 size 10000k;
                severity debug;
                print-time yes;
                print-category yes;
        };
        category notify { notify_ch; };
};

view "aaa" {
        zone "abc" IN {
                type master;
                file "master/abc.zone";

                allow-transfer { any; };
                allow-update { any; };

                notify explicit;
                notify-source 192.168.0.199;
                also-notify { 192.168.0.113; };
        };
};

view "bbb" {
        zone "xyz" IN {
                type master;
                file "master/xyz.zone";

                allow-transfer { any; };
                allow-update { any; };

                notify explicit;
                notify-source 192.168.0.199;
                also-notify { 192.168.0.113; };
        };
};
-------------8<---------------------------------------------------------

зоны на мастере:
-------------8<---------------------------------------------------------
# cat abc.zone
$TTL 3600       ; 1 hour
@       IN      SOA     abc.    bindmaster.abc. (
                                        2006081055 ; serial
                                        2H       ; refresh (2 hours)
                                        15M      ; retry (15 minutes)
                                        2H       ; expire (2 hours)
                                        15M       ; negative-caching (15 minutes)
                                )
                IN      A       192.168.0.199
                IN      NS      ns.abc.
                IN      NS      ns2.abc.
$ORIGIN abc.
ns              IN      A       192.168.0.199
ns2             IN      A       192.168.0.133

# cat xyz.zone
$TTL 3600       ; 1 hour
@       IN      SOA     xyz.    bindmaster.xyz. (
                                        2006081044 ; serial
                                        2H       ; refresh (2 hours)
                                        15M      ; retry (15 minutes)
                                        2H       ; expire (2 hours)
                                        15M       ; negative-caching (15 minutes)
                                )
                IN      A       192.168.0.199
                IN      NS      ns.xyz.
                IN      NS      ns2.xyz.
$ORIGIN xyz.
ns              IN      A       192.168.0.199
ns2             IN      A       192.168.0.133
-------------8<---------------------------------------------------------

конфиг слейва:
-------------8<---------------------------------------------------------
options {
        version "my_own_version";
        directory "/var/named";

        forward first;
        forwarders {
                192.168.0.13;
                192.168.0.8;
        };

        listen-on-v6 { none; };
        listen-on { 127.0.0.1; 192.168.0.113; };

        pid-file "/var/run/named/named.pid";
};

logging {
        channel notify_ch {
                file "/var/log/bind/notify" versions 3 size 10000k;
                severity debug;
                print-time yes;
                print-category yes;
        };
        category notify { notify_ch; };
};

view "first" {
        zone "abc" IN {
                type slave;
                file "slave/abc.zone";
                masters { 192.168.0.199; };

                # transfer mechanism
                transfer-source 192.168.0.113;
        };
};

view "second" {
        zone "xyz" IN {
                type slave;
                file "slave/xyz.zone";
                masters { 192.168.0.199; };

                # transfer mechanism
                transfer-source 192.168.0.113;
        };
};
-------------8<---------------------------------------------------------

вот такие конфиги.
а теперь фокус: меняем местами порядок view на слейве, чтобы получилось вот так:

-------------8<---------------------------------------------------------
view "second" {
        zone "xyz" IN {
                type slave;
                file "slave/xyz.zone";
                masters { 192.168.0.199; };

                # transfer mechanism
                transfer-source 192.168.0.113;
        };
};

view "first" {
        zone "abc" IN {
                type slave;
                file "slave/abc.zone";
                masters { 192.168.0.199; };

                # transfer mechanism
                transfer-source 192.168.0.113;
        };
};
-------------8<---------------------------------------------------------

и получаем другие сообщения в логах слейва:
-------------8<---------------------------------------------------------
Aug 11 16:30:40.005 notify: received notify for zone 'abc'
Aug 11 16:30:40.512 notify: received notify for zone 'xyz':  not authoritative
-------------8<---------------------------------------------------------

теперь зона abc обновилась, а зона xyz не обновилась с мастера.

чудеса ?

в общем, это надо как-то решить.
конфиги раньше были сложные, с TSIG и так далее, епростил как можно
сильнее - никаких прав, и все равно такая зараза. 
да, еще забавный момент: если обе зоны перевести в первый view, то они
обновятся обое:


-------------8<---------------------------------------------------------
view "second" {
        zone "xyz" IN {
                type slave;
                file "slave/xyz.zone";
                masters { 192.168.0.199; };

                # transfer mechanism
                transfer-source 192.168.0.113;
        };

        zone "abc" IN {
                type slave;
                file "slave/abc.zone";
                masters { 192.168.0.199; };

                # transfer mechanism
                transfer-source 192.168.0.113;
        };
};

view "first" {

};
-------------8<---------------------------------------------------------

логи:
-------------8<---------------------------------------------------------
Aug 11 16:30:40.005 notify: received notify for zone 'abc'
Aug 11 16:30:40.512 notify: received notify for zone 'xyz'
-------------8<---------------------------------------------------------
все ok.

как это побороть, есть идеи ?
спасибо.
nial
()

Бок при использовании IPTables::IPv4

http://search.cpan.org/~dpates/IPTables-IPv4-0.98/IPv4.pm

Трабл при использовании модуля IPTables::IPv4. странные вещи творятся..

начнем с iptables
host ~ # iptables -xnv -L table_a
Chain table_a (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 192.168.7.155 10.10.0.0/21

Это правило я вбил руками.

а вот пеловый скрипт, который пытаеться показать это правило

-------8<-----------------------------------------
#!/usr/bin/perl
use IPTables::IPv4;
use Data::Dumper;

my $table = IPTables::IPv4::init('filter');
unless ($table) {
print ("Can't initialize IPv4 table\n");
exit;
}

my @rules = $table->list_rules("table_a");
print Dumper(@rules);
-------8<-----------------------------------------

I run it:
host new # ./aaa.pl
$VAR1 = {
'pcnt' => '0',
'jump' => 'DROP',
'bcnt' => '0'
};

заметьте, полей source и destination нету.

теперь я создам похожее правило, не через модуль IPTables::IPv4

-------8<-----------------------------------------
#!/usr/bin/perl
use IPTables::IPv4;
use Data::Dumper;
use strict;
use warnings;

my $table = IPTables::IPv4::init('filter');
unless ($table) {
print ("Can't initialize IPv4 table\n");
exit;
}

my $rule = {"source" => "192.168.7.154",
"destination" => "10.10.0.0/21",
"jump" => "DROP"};

$table->append_entry("table_a", $rule) ||
print "Error: $!";
$table->commit() ||
print "Commit Error: $!";
-------8<-----------------------------------------

iptables:
host ~ # iptables -nv -L table_a
Chain table_a (1 references)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 192.168.7.155 10.10.0.0/21
0 0 DROP all -- * * 192.168.7.154 10.10.0.0/21

теперь вызываем смотрим на записи:

host new # ./aaa.pl
$VAR1 = {
'pcnt' => '0',
'jump' => 'DROP',
'bcnt' => '0'
};
$VAR2 = {
'source' => '192.168.7.154',
'pcnt' => '0',
'destination' => '10.10.0.0/21',
'jump' => 'DROP',
'bcnt' => '0'
};

вуаля, правило есть.
где бок ?
автору на dpates@dsdk12.net я уже отписал.

nial
()

Идентифицировать хост в сети

в общем, есть сеть на свичах - обычная локальная сеть, на обычных свичах.
один хост меняет себе мак и ip, и начинает творить всякие гадости. причем, чел делает все верно: вытащил кабель, поменял мак и ip, и потом вставил кабель. arp демон на фре ничего не говорит.
я могу изнать, какой ip адрес творит гадость, но этот ip адрес ведь не принадлежит злоумышленнику ). так вот, я хочу как-то идентифицировать его хост (наподобие OS fingerprint в nmap-е), и потом, когда он вернеться на свой обычный ip - найти его.

смотрите:
1) OS Fingerprin - мало в чем может помочь... я сканировал разные машины - рельтат один и тот же.
2) открытые на машине порты: такая возможность есть - т.е., посмотреть какие порты открыты на нем, и потом найти его по таким же поратм - но это не серьезно. можно, но не серьезно. причины этому, я думаю, понятны.

3) - черт его знает, каким способом можно узнать машины, если на ней сменили ip и мак адрес... может подскажите со своего опыта.

спасибо.

nial
()

OSPF not enabled on this interface

В общем, есть проблема с работой ospfd демона:
вот конфиги демонов:
-------------------------------------------------------------------------------- ------------------
root at pegas# cat /usr/local/etc/quagga/zebra.conf
!
! Zebra configuration saved from vty
! 2006/04/06 22:44:59
!
hostname pegas
password ***
enable password ***
log file /var/log/zebra/zebra.log
!
interface fxp0
no shutdown
ip address 192.168.5.251/24
!
interface fxp1
ip address 192.168.10.254/24
!
interface lo0
!
ip route 0.0.0.0/0 192.168.5.254
!
ip forwarding
!
line vty
!
-------------------------------------------------------------------------------- ------------------
root at pegas# cat /usr/local/etc/quagga/ospfd.conf
!
! Zebra configuration saved from vty
! 2006/04/06 22:43:27
!
hostname pegas
password ***
enable password ***
log file /var/log/zebra/ospfd.log
!
interface fxp0
ip ospf authentication message-digest
ip ospf message-digest-key 5 md5 ***
ip ospf hello-interval 3
ip ospf dead-interval 10
ip ospf cost 10
!
interface fxp1
!
router ospf
ospf router-id 192.168.5.251
redistribute kernel
redistribute connected
redistribute static
network 192.168.5.0/24 area 0.0.0.1
network 192.168.10.0/24 area 0.0.0.1
area 0.0.0.1 authentication message-digest
area 0.0.0.1 range 192.168.5.0/24
area 0.0.0.1 range 192.168.10.0/24
!
line vty
!
-------------------------------------------------------------------------------- -------------------------
Далее, я запускаю демоны:
root at pegas# zebra -d -l 255 -f /usr/local/etc/quagga/zebra.conf -i
/var/run/quagga/zebra.pid
root at pegas# ospfd -d -f /usr/local/etc/quagga/ospfd.conf -i
/var/run/quagga/ospfd.pid

И поддключаюсь к ospfd демону:
-------------------------------------------------------------------------------- --------------------------
root at pegas# telnet localhost ospfd
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Hello, this is Quagga (version 0.99.3).
Copyright 1996-2005 Kunihiro Ishiguro, et al.


User Access Verification

Password:
pegas> enable
Password:
pegas# show ip ospf
OSPF Routing Process, Router ID: 192.168.5.251
Supports only single TOS (TOS0) routes
This implementation conforms to RFC2328
RFC1583Compatibility flag is disabled
Initial SPF scheduling delay 200 millisec(s)
Minimum hold time between consecutive SPFs 1000 millisec(s)
Maximum hold time between consecutive SPFs 10000 millisec(s)
Hold time multiplier is currently 1
SPF algorithm last executed 25m33s ago
SPF timer is inactive
Refresh timer 10 secs
This router is an ASBR (injecting external routing information)
Number of external LSA 0. Checksum Sum 0x00000000
Number of areas attached to this router: 1

Area ID: 0.0.0.1
Shortcutting mode: Default, S-bit consensus: ok
Number of interfaces in this area: Total: 0, Active: 0
Number of fully adjacent neighbors in this area: 0
Area has message digest authentication
Number of full virtual adjacencies going through this area: 0
SPF algorithm executed 1 times
Number of LSA 1
Number of router LSA 1. Checksum Sum 0x0000adde
Number of network LSA 0. Checksum Sum 0x00000000
Number of summary LSA 0. Checksum Sum 0x00000000
Number of ASBR summary LSA 0. Checksum Sum 0x00000000
Number of NSSA LSA 0. Checksum Sum 0x00000000

pegas# show ip ospf interface fxp0
fxp0 is down
ifindex 0, MTU 0 bytes, BW 0 Kbit <>
OSPF not enabled on this interface
-------------------------------------------------------------------------------- ---------
And I have reasonable question: Why OSPF not enabled on fxp0 interface ?
Thanks for helping me.

nial
()

составить «простой» SQL запрос

помогите составить запрос (прада, есть подозрения что такое сделать нельзя). использую postgresql 8.0.
есть таблица "a":

create table a (
id integer, 
var varchar(20));

и таблица "b":

create table b (
id_a integer, 
value varchar(20));

далее, делаем:
insert into a (id, var) values (1, 'int');
insert into a (id, var) values (2, 'int');
insert into a (id, var) values (3, 'int');
insert into a (id, var) values (4, 'string');

а вот теперь и сам вопрос: как мне одним sql запросом сдлеать типа такого:

insert into b (value, id_a) 
values ('ten', ( select id
                 from a
                 where var = 'int' ));

проблема в том,что подзапрос возвражает более одного значения. вот в
 этом и прикол - мне как бы надо для каждого такого значения таблицы 
"a" вызвать такой запрос вставки в таблицу "b". Т.е., если в таблице 
"a" будет одна запись, с полем var равным 'int', то этот  запрос 
выполнится.
сталкивался кто-то с этим. вопрос в том, что мне это надо сделать 
одним sql запросом... но я подозреваю, что это нельзя.
nial
()

разбить файл

как разбить файл на куски определенного размера ?

nial
()

Ошибка в коде...

как всегда, есть код (приведен ниже).
при запуске программы вылетает:
*** 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;
};
nial
()

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