LINUX.ORG.RU

Сообщения cyclon

 

Действия для всего контекста в Asterisk

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

Что то типа:

[local]
exten => _.,1,gotoif(_ПРОВЕРЯЕМ_УСЛОВИЕ_)
exten => _.,n,_ТУТ_ЧТО_ТО_ДЕЛАЕМ_

; ищем нужный экстеншн

exten => 1,1,Answer()
exten => 1,n,Dial(...)

exten => 2,1,Answer()
exten => 2,n,Dial(...)

П.С. без использования макросов

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

 

cyclon
()

пустой %{LA-U:REMOTE_USER} в логах Rewrite Apache

Доброго времени суток. Настраиваю WebDav на apache (2.2.16), под debian (6.0.4).

Всё вроде работает, rewrite нормально перенаправляет в нужную директорию, однако в его (rewrite) логах заметна одна проблема.

настройки сайта:

...
	<Directory /var/www/webdav/>
                DAV On
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                Allow from all

                AuthType Basic
                AuthName "webdav auth"
                AuthUserFile /var/www/webdav/.htpasswd
                Require valid-user
        </Directory>

        RewriteEngine   on

        RewriteLogLevel 3
        RewriteLog      /var/log/apache2/rewrite_mod.log

        # пропуск картинок
        RewriteRule     ^/icons/(.*\.(gif|png|jpg|jpeg))        -               [L,NC]

        # проверяем наличи директории, если нет, пишем ошибку
        RewriteCond     %{LA-U:REMOTE_USER}                     !=""
        RewriteCond     %{DOCUMENT_ROOT}/%{LA-U:REMOTE_USER}    !-d
        RewriteCond     %{REQUEST_URI}                          !/404      
        RewriteRule     ^/(.*)                                  /404            [L]

        # переходим в нужную директорию, если она есть
        RewriteCond     %{LA-U:REMOTE_USER}                     !=""
        RewriteCond     %{DOCUMENT_ROOT}/%{LA-U:REMOTE_USER}    -d
        RewriteCond     %{REQUEST_URI}                          !/404
        RewriteRule     ^/(.*)                  /var/www/webdav/%{LA-U:REMOTE_USER}/$1  [L]

	...

лог:

x.x.x.x - - ... (2) init rewrite engine with requested uri /index.html
x.x.x.x - - ... (3) applying pattern '^/icons/(.*\.(gif|png|jpg|jpeg))' to uri '/index.html'
x.x.x.x - - ... (3) applying pattern '^/(.*)' to uri '/index.html'
x.x.x.x - - ... (3) applying pattern '^$' to uri '/index.html'
x.x.x.x - - ... (3) applying pattern '^/(.*)' to uri '/index.html'
x.x.x.x - - ... (2) rewrite '/index.html' -> '/var/www/webdav//index.html'
x.x.x.x - - ... (2) local path result: /var/www/webdav//index.html
x.x.x.x - - ... (1) go-ahead with /var/www/webdav//index.html [OK]
x.x.x.x - - ... (2) rewrite '/index.html' -> '/var/www/webdav/USER_NAME/index.html'
x.x.x.x - - ... (2) local path result: /var/www/webdav/USER_NAME/index.html
x.x.x.x - - ... (1) go-ahead with /var/www/webdav/USER_NAME/index.html [OK]

Судя по логу, получается, что сначала идёт rewrite без имени авторизованного пользователя, а затем тот же rewrite, но уже с именем пользователя. Про особоенность работы rewrite читал, но может есть способ как-то избежать, пустого срабатывания?

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

 , , webav

cyclon
()

[dd-wrt][не большой оффтоп] не работает маршрутизация на роутере

Доброго времени всем. Извиняюсь за небольшой оффтоп, но всё же. Поставил тут намедни свежую прошивку
dd-wrt и сразу возникла проблема с NATом и маршрутизацией. Со старой версией прошивки проблем не было.

Имеется роутер d-link dir825 внутренний адрес 192.168.1.1/24, подсеть «1» 192.168.1.0/24, белый
адрес x.x.x.x, так же имеется отдельная внутренняя подсеть «2» 192.168.2.0/24 (в ней сидят вируталки).

Когда я пытаюсь подключить к любому ресурсу подсети «1» (к примеру вебсервер), то локальный адрес
клиента (к примеру 192.168.1.2) менятся на x.x.x.x (видно через netstat), то же происходит, если подключаться к ресурсам подсети «2» из подсети «1».
Удалось выяснить, что всю малину портит iptables на роутере.

Покопавшись в iptables, удалось решить проблему так
iptables -t nat -I POSTROUTING -d ! 192.168.0.0/16 -j SNAT --to-source x.x.x.x

т.е. NAT будет работать только для адресов назначения не в подсети 192.168.0.0/16.

Но это как то не красиво, да и на старой прошивке всё работало.

Собственно в чём может быть проблема, ведь POSTROUTING должен отрабатывать после маршрутизации, а
получается до?

Маршрутизация на роутере
# route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 x.x.x.x 0.0.0.0 UG 0 0 0 ppp0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
192.168.2.0 192.168.1.2 255.255.255.0 UG 0 0 0 br0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br0

Интерфейс на роутере
# ifconfig
br0 Link encap:Ethernet HWaddr 00:18:E7:EC:AE:D3
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:291559020 errors:0 dropped:207 overruns:0 frame:0
TX packets:175122285 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:403879585944 (376.1 GiB) TX bytes:29553370251 (27.5 GiB)

Сеть примерно такая:
192.168.1.0/24<-----[|192.168.1.1|]<-------> [|192.168.1.2||192.168.2.1|]----->192.168.2.0/24


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

 

cyclon
()

[СПВ] Музыки тред, почитал баша.

Доброго времени суток. Скачал, начитавшись баша, несколько альбомов Two steps from hell. В альбоме Illumina уж больно понравились треки с женским вокалом. Может кто нибудь подсказать группы или исполнителей с похожим стилем?

 

cyclon
()

Астериск и мониторинг пиров

Настроил вывод звонков на астериске через сипнет, но почти каждый день происходят косяки со связью. В частности иногда вызываемая сторона меня не слышит, но чаще просто не происходит соединения (отваливается по таймауту).

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

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

cyclon
()

exim не может войти в директорию созданную dovecot'ом

Доброго времени суток. Возникла проблема при настройке почтового сервера на exim и dovecot. Структура директорий такая /var/mail/${domain}/${user}.

Начальная структура директорий создана dovecot'ом, как собственно и планируется. Но затык в том, что при получении нового письма exim'ом, оный не может его сохранить в директории пользователя, даже не может войти в неё.

Вот как всё выглядит:

 ps -Af | grep exim
mail      6556     1  0 18:48 ?        00:00:00 /usr/sbin/exim4 -bd
mail      6558     1  0 18:48 ?        00:00:00 /usr/sbin/exim4 -oP /var/run/exim4/eximqr.pid -q30m

# ps -Af | grep dovecot
root      2411     1  0 17:55 ?        00:00:00 /usr/sbin/dovecot -c /etc/dovecot/dovecot.conf
mail      2413  2411  0 17:55 ?        00:00:00 dovecot-auth
root      6579 13345  0 18:48 pts/2    00:00:00 grep dovecot

# ls -la /var/mail/
drwxrwsrwx  4 mail mail 4096 Окт 24 18:21 .
drwxr-xr-x 13 root root 4096 Окт 24 15:44 ..
drwxrws---  3 mail mail 4096 Окт 24 18:22 domain.ru

# ls -la /var/mail/domain.ru/
drwxrws--- 3 mail mail 4096 Окт 24 18:22 .
drwxrwsrwx 4 mail mail 4096 Окт 24 18:21 ..
drwx--S--- 7 mail mail 4096 Окт 24 18:23 user
2011-10-24 18:48:28 1RILpE-0001hu-50 <= user@domain.ru H=*.*.ru ([192.168.1.12]) [xxx.xxx.xxx.xxx] P=esmtpa A=auth_login:domain@domain.ru S=877 id=4EA57AB7.4000208@domain.ru
2011-10-24 18:48:28 1RILpE-0001hu-50 == user@domain.ru R=local_user T=mail_spool defer (13): Permission denied: cannot chdir to /var/spool/mail/domain.ru/user
mail_spool:
  debug_print = "T: appendfile for $local_part@$domain"
  driver = appendfile
  directory = ${lookup pgsql{SELECT TEXTCAT('/var/spool/mail/', maildir) \
                FROM mailbox WHERE username='${local_part}@${domain}'}}
  directory_mode = 770
  delivery_date_add
  envelope_to_add
  return_path_add
  maildir_format
  maildir_tag = ,S=$message_size
  group = mail
  mode = 0770
  mode_fail_narrower = false

Пробовал ставить разный mode и directory_mode, но Exim упорно не хочет входить в ящик пользователя.

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

cyclon
()

ipsec + racoon производительность

Есть два сервера debian с настроенным ipsec+racoon. Как только на него завернули много трафика, люди начали жаловаться на тормоза.

Как можно посмотреть насколько ipsec загружает систему (в top'е ничего не видно)?

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

cyclon
()

ipsec+raconn, трафик не шифруется

Доброго времени суток. Имеется два сервера с двумя сетевыми картами. Одна из карт eth0 смотрит в локальную сеть, вторая карта eth1 подключена в VLAN (он соединяет eth1 на двух серверах). Проблема в том, что судя по выхлопу tcpdump'а трафик не шифруется. Т.е. всё содержимое пакетов, что проходят между eth1 одного сервера и eth1 второго видно. Так же, если намеренно внести неверные данные в конфиг то пакеты перестают ходить (т.е. связь через ipsec+racoon есть).

host1 (192.168.129.184/22, 10.0.0.1/24)

ipsec-tools.conf

#!/usr/sbin/setkey -f

flush;
spdflush;

spdadd 192.168.156.0/22 192.168.128.0/22 any -P in ipsec esp/tunnel/10.0.0.2-10.0.0.1/require;
spdadd 192.168.128.0/22 192.168.156.0/22 any -P out ipsec esp/tunnel/10.0.0.1-10.0.0.2/require;

racoon.conf

path pre_shared_key "/etc/racoon/psk.txt";

log info;

listen {
	isakmp 10.0.0.1 [500];
}

remote 10.0.0.2 {
	my_identifier address 10.0.0.1;
	exchange_mode main,aggressive;
	nat_traversal off;
	
	proposal {
		encryption_algorithm 3des;
		hash_algorithm md5;
		authentication_method pre_shared_key;
		dh_group modp1024;
	}

	passive off;
	proposal_check obey;
	verify_cert off;
	lifetime time 28800 sec;
	exchange_mode main;
	dpd_delay 30;
}

sainfo address 192.168.128.0/22 any address 192.168.156.0/22 any {
	pfs_group modp1024;
	lifetime time 28800 sec;
	encryption_algorithm aes;
	authentication_algorithm hmac_sha1;
	compression_algorithm deflate;
}

sainfo address 192.168.156.0/22 any address 192.168.128.0/22 any {
	pfs_group modp1024;
	lifetime time 28800 sec;
	encryption_algorithm aes;
	authentication_algorithm hmac_sha1;
	compression_algorithm deflate;
}

psk.txt

10.0.0.2 xxxx

host2 (192.168.159.10/22, 10.0.0.2/24)

ipsec-tools.conf

#!/usr/sbin/setkey -f

flush;
spdflush;

spdadd 192.168.128.0/22 192.168.156.0/22 any -P in ipsec esp/tunnel/10.0.0.1-10.0.0.2/require;
spdadd 192.168.156.0/22 192.168.128.0/22 any -P out ipsec esp/tunnel/10.0.0.2-10.0.0.1/require;

racoon.conf

path pre_shared_key "/etc/racoon/psk.txt";

log info;

listen {
	isakmp 10.0.0.2 [500];
}

remote 10.0.0.1 {
	my_identifier address 10.0.0.2;
	exchange_mode main,aggressive;
	nat_traversal off;
	
	proposal {
		encryption_algorithm 3des;
		hash_algorithm md5;
		authentication_method pre_shared_key;
		dh_group modp1024;
	}

	passive off;
	proposal_check obey;
	verify_cert off;
	lifetime time 28800 sec;
	exchange_mode main;
	dpd_delay 30;
}

sainfo address 192.168.128.0/22 any address 192.168.156.0/22 any {
	pfs_group modp1024;
	lifetime time 28800 sec;
	encryption_algorithm aes;
	authentication_algorithm hmac_sha1;
	compression_algorithm deflate;
}

sainfo address 192.168.156.0/22 any address 192.168.128.0/22 any {
	pfs_group modp1024;
	lifetime time 28800 sec;
	encryption_algorithm aes;
	authentication_algorithm hmac_sha1;
	compression_algorithm deflate;
}

psk.txt

10.0.0.1 xxxx

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

cyclon
()

МК модуль

Доброго времени суток, решил немного поковыряться с одноплатными компьютерами (кажется это называется МК модуль). Встал вопрос какой выбрать и где приобрести (в Москве и не сильно дорого) и где бы почтитать про это.

Из опций хотелось бы наличие USB, Ethernet, возможность LCD (чем больше тем лучше)) сенсорный) и 3G модуль (до кучи), VGA.

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

cyclon
()

[фото][специалисты по всему] какой объектив выбрать

Доброго времени суток ЛОР, в преддверии ДР решил себе сделать подарок в виде хорошего телевика. Выбор стоит между Sigma AF 50-500mm f/4.5-6.3 и Canon EF 100-400 f/4.5-5.6L. У первого фокус больше, но второй canon'овская L-ка.

Что подскажет всезнающий лор?

P.S. linux при том, что фото обрабатывается в Gimp'е под linux'ом. P.P.S аппарат Canon 550d (возможно перейду на полный кадр).

 

cyclon
()

[C/C++] выбор элемента списка без поиска по всему списку

Все добрых суток.

Допустим есть структура:

struct m{
     int id;
     int val;

     struct m *next;   // сразу добавил для работы в списке
};

Можно ли сделать обращение к элементу списка таких структур, таким же быстрым как к элементу массива, если я точно знаю номер элемента массива, id равно n+1'ому элементу массива.

К примеру

struct m arr[10]; // 10ть элементов 
struct m *list;   // указатель на первый элемент списка

Я знаю что мне нужен элемент с id = 5, тогда для массива я просто обращаюсь к элементу arr[4], для списка же мне придётся перебирать все элементы list пока я не найду нужный c id равным 5ти.

Можно ли как сразу обратиться к 5-му элементу?

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

cyclon
()

[google][рабство] грабёж

Вот оказывается что я купил сам того не ведая:

$10 Google Voice calling credit for account ******@gmail.com - Allows you to make international calls using Google Voice.   USD 10,00

Сегодня в обед получаю от гугля письмо, мол «Квитанция по заказу от Google Services (USD 10,00)». Смотрю и не понимаю, я ничего не покупал.
Деньги были списаны со счёта кредитной карты, которую я регестрировал через google checkout, т.е. гуголь просто взял и продал мне эти кредиты.

Конечно понимаю ССЗБ и т.д., но всё же, что делать, это у них такая реклама Google Voice за чужой счёт?

 ,

cyclon
()

[C/C++] как такое распарсить O_LARGEFILE | O_TRUNC

Все доброго времени суток. Родился такой вопрос, поскольку сам ни разу не использовал, но вижу в реализациях.

К примеру функцию open можно вызвать с параметром flags равным O_WRONLY | O_CREAT | O_LARGEFILE. А как собственно это потом проверять в функции?

p/s даже не знаю как гуглить этот вопрос

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

cyclon
()

как запоминать обработанный кусок лога squid'а

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

Как вариант думаю сохранять первую и последнюю временную отметку из лога, на момент обработки. Но если так делать, то через некоторое время появляется большое число таких временных отрезков, которые будут тормозить обработку лога, если сравнивать каждую новую временную отметку лога с ними. Да и поиск последней обработанной записи в таком случае замедляется, в большом логе. Может есть какой то другой более правильный и рациональный способ?!

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

cyclon
()

libmysqlclient и sefault

Есть ли способ при использовании libmysqlclient узнать почему сервер вернул ту или иную ошибку, можно ли это узнать профайлером. К примеру меня интересвует почему приходит «MySQL server has gone away».

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

cyclon
()

HDD USB Transcend и кнопка

Есть на внешних usb hdd'шных винтах компании transcend кнопка, которая, как я понимаю в офтопике иницировало ПО установленное на компе для бэкапов. Можно ли её задействовань в линуксе (Ubuntu последняя). Смотрел usb устройства, при подключении диска вроде ничего относящегося к вводу не появилось...

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

cyclon
()

MySQL server has gone away

Доброго времени суток. Написал софтинку для переноса логов сквида из файла в БД mysql. Но возникла проблема. После 300-600 (когда как) тысяч insert'ов в базу (через минуту после запуска), возникает:

MySQL server has gone away

В чём может быть причина?

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

cyclon
()

phtread и fork()

Есть код на С++.

Используется fork() и phthrad.

class thread {

	public :
		virtual ~thread(){}

		virtual void *init() = 0;

		int start(){
			int n = pthread_create(&pth_, 0, &real_run, this);
			pthread_detach(pth_);
			return n;
		}

		int stop(){pthread_exit(this);}

		pthread_t id() const{
			return pth_;
		}

	private :
		pthread_t pth_;
		static void * real_run(void *arg){
  			thread *t = static_cast<thread *>(arg);
 			return t->init();
		}
};

class vol : public thread{

	public:
		vol();
	
	private:
		void test(){printf(">>> echo from thread\n");};
		void *init(){test();};
};

vol::vol()
{}

int main()
{
	int pid = 0;

	printf("> create vol\n");
	vol *v = new vol();
	printf("> start fork\n");
	if ((pid = fork()) < 0) 
	{
		printf("> can't fork\n");
	} else if (pid != 0) {
		printf("> fork success\n");
		exit(0);
	}
	printf("> start thread\n");
	v->start();
	printf("> ready\n");
}

на выходе

./prog
> create vol
> start fork
> fork success
> start thread
> ready

... не выводится >>> echo from thread

Проблема в том, что не происходит запуска потока. Есть ли способ запускать поток и использовать fork().

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

cyclon
()

[C++] Не получается вызывать метод класса в share object

Извиняюсь за ламерский вопрос, но можно ли вызывать метод класса находящегося в so или же придётся каждую функцию выносить через extern «C»?

Есть класс помещённый в so. Есть программа которая её подключает, создаёт объект и вызывает метод.

Код:

//	mydb.h

class mydb{
	public:
		mydb(...);

		int test();
		int p;
};

typedef mydb* mydb_t(...);

/********************************/

//	mydb.cpp

#include "mydb.h"

mydb::mydb()
{
}

int mydb::test()
{
	return p;
}

extern "C" mydb *mydb_new(...)
{
	return new mysqldb(...);
}

/*************************************/

//	someapp.cpp

#include "mydb.h"

void *lib_handle;

lib_handle = dlopen("libnmydb.so.0.1", RTLD_LAZY);
if (!lib_handle) {
	printf("can't open shared\n");
	exit(1);
}

mydb_t *mydb_ = (mydb_t*) dlsym(lib_handle, "mydb_new");
if (!mydb_) {
	printf("can't load symbol\n");
	exit(1);
}

mydb *mdb = mydb_new(...);

// так ошибка при линковке
printf("%i\n",mdb->test());
// так всё работает
printf("%i\n",mdb->p);

/************************************************************/

при компиляции:

someapp.cpp:27: undefined reference to `mydb::test()'
someapp.cpp:27: undefined reference to `mydb::test()'

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

 

cyclon
()

cisco 2821 + radius не передаёт Framed-IP-Address

Вопрос может не в тот форум, но всё же :) ...

На циске 2821 (2800 Software (C2800NM-ADVENTERPRISEK9-M), Version 12.4(6)T) поднят vpdn, настроена авторизация через радиус (freeradius). Так же на сервере на котором стоит радиус (debian), поднят pptpd. Если подкючаться к pptpd, то радиус показывает ip выданный клиенту при подключении, а если подключаться к циске, то ip адрес передаётся только при отключении, при подключении параметр в логах отсутствует. В чём может быть проблемма?

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

cyclon
()

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