Страница 1 из 1

rtorrent && wtorrent

Добавлено: 2010-01-26 18:57:40
inBrain
Установил рторрент, прикрутил вебморду.
На попытку добавить торрент морда отвечает:
Ошибка: невозможно создать файл. Проверьте наличие прав
Морда и рторрент работают с директориями:

Код: Выделить всё

drwxrwxr-x  5 p2p   p2p         512B 26 янв 17:51 torrent
уровнем ниже:

Код: Выделить всё

drwxrwxr-x  2 p2p  p2p   512B 26 янв 17:51 dl
drwxrwxr-x  2 p2p  p2p   512B 26 янв 18:32 session
drwxrwxr-x  2 p2p  p2p   512B 26 янв 17:51 work
Права 775 на всех, апач писать туда везде может (юзером www файлы создаются успешно)

Код: Выделить всё

uid=1002(p2p) gid=1004(p2p) groups=1004(p2p),80(www),1001(mgrsecure)
uid=80(www) gid=80(www) groups=80(www),1004(p2p)
Есть у кого идеи, что еще может быть?
Полдня занимался "любовью" с мордой, результат - 0.

Re: rtorrent && wtorrent

Добавлено: 2010-03-07 15:17:59
Alex Keda
отладку включите

Re: rtorrent && wtorrent

Добавлено: 2010-04-10 11:58:33
FreeBSP
материлась на меня так
Error: Impossible to create file on given directory, please check permisions

матюгнулся в ответ так:

Код: Выделить всё

[13:33]wtorrent/# grep -rin 'mpossible to create file on given directory, please check permisions' ./*
./wt/lang/en.txt:13:err_add_dir = Error: Impossible to create file on given directory, please check permisions
[13:34]wtorrent/# grep -rin err_add_dir ./*
./wt/cls/AddT.cls.php:203:                      $this->addMessage($this->_str['err_add_dir']);
....
потопал, куда послали, узрел это

Код: Выделить всё

 63                 $uploadfile = DIR_EXEC . DIR_TORRENTS . sha1( $url ) . md5($url) . ".torrent";
 64                 // Get sha1/md5 for avoid filename problems & Multiple torrents
 65                 if (file_exists($uploadfile))
 66                 {
 67                         $this->addMessage($this->_str['err_add_file']);
 68                         return false;
 69                 }
Почесал репу, сказал "КАКОВА ЛЕШЕГО!!!!!", зарекся написать патчик и потопал стругать костыль

Код: Выделить всё

[13:36]wtorrent/# grep DIR_TORRENTS wtorrent/conf/user.conf.php
define ('DIR_TORRENTS', '../../../../../../../../mnt/160/dl/_TORRENTS/');
теперь имею честь лицезреть в вебморде такое:

Код: Выделить всё

 Torrent file: /usr/local/www/apache22/data/wtorrent/../../../../../../../../mnt/160/dl/_TORRENTS/1270892222Beliy.Den.Diskografija.1996-2005.MP3.192-320kbps.torrent
Data path: /mnt/160/dl/_MUSIC/Beliy.Den.Diskografija.1996-2005.MP3.192-320kbps
Done: 701.00 MB
Uploaded: 0 b
Size: 701.00 MB
Ratio: 0
надеюсь кому поможет костыль. на неделе напишу патчик

PS может, кто в курсе, в проект wtorrent патчи принимают?

Re: rtorrent && wtorrent

Добавлено: 2010-05-06 15:52:42
Гость
может кому интересно будет, как я стругал патчик, и тут кто нить что нить нового почерпнет :bn:

итак, я просек, что вместо чего - то разумного банально склеиваются пути к wtorrent и путь к папке с торрентами.
склейка происходит приблизительно так

Код: Выделить всё

$uploadfile = DIR_EXEC . DIR_TORRENTS . sha1( $url ) . md5($url) . ".torrent";
и в любом случае получаем что то типа "/path/to/www/dir/wtorrent/DIR_TORRENTS" без возможности повлиять на это предусмотренными конфигурялками.
мне это совершенно не нравится, никакой гибкости, хотя вышеописанный костыль под это дело ставится в два счета.

ну, поехали стругать патчик

Код: Выделить всё

[11:21]wtorrent/# grep -rn DIR_TORRENTS ./*
./conf/sample.user.conf.php:45:define( 'DIR_TORRENTS',          'torrents/');
./conf/user.conf.php:13:define ('DIR_TORRENTS', '../../../../../../../../mnt/160/dl/_TORRENTS/');
./wt/cls/AddT.cls.php:56:               if (!is_writable(DIR_EXEC . DIR_TORRENTS))
./wt/cls/AddT.cls.php:58:                       $this->addMessage(DIR_EXEC . DIR_TORRENTS . $this->_str['err_not_writable']);
./wt/cls/AddT.cls.php:63:               $uploadfile = DIR_EXEC . DIR_TORRENTS . sha1( $url ) . md5($url) . ".torrent";
./wt/cls/AddT.cls.php:200:              $uploadfile = DIR_EXEC . DIR_TORRENTS . time() . basename($fileU['name']);
./wt/cls/AddT.cls.php:201:              if (!is_writable(DIR_EXEC . DIR_TORRENTS))
АГА
константа DIR_TORRENTS используется только в одном файле, как следует из названия, там наверное находится класс для добавления торрентов. В файле действительно оказался класс, и константа используется в двух методах - addRemoteTorrent() и uploadTorrent(). Всего, как сказал добрый grep, 5 вхождений.
Просто выкорчевать из этих строк константу DIR_EXEC мне показалось мало. Решил поставить что то поинтереснее, а заодно вытянуть оттудова тросик и приладить его к рычажку в conf/user.conf.php
сказано - сделано
Сначала делаем рычажок - дописываем строчку в user.conf.php

Код: Выделить всё

define ('ABSOLUTE_PATH_TORRENTS', true);
без определения этой константы в истину(true) wtorrent будет сохранять стандартное поведение даже при наложенном патче - для совместимости и успокоения нервов

ну а далее стругаем патч - добавляем в класс публичное свойство uploaddir и рисуем небольшую проверку в конструкторе

Код: Выделить всё

 24                 if(defined('ABSOLUTE_PATH_TORRENTS') && ABSOLUTE_PATH_TORRENTS === true
 25                         && defined('DIR_TORRENTS') && substr(DIR_TORRENTS, 0,1) === '/')
 26                 {
 27                         $this->uploaddir = DIR_TORRENTS;
 28                 }
 29                 else
 30                 {
 31                         $this->uploaddir = DIR_EXEC . DIR_TORRENTS;
 32                 }
в таком виде даже с активированным патчем если в DIR_TORRENTS указан относительный путь, он и останется относительным. Для того чтобы путь считался абсолютным, он должен начинаться со слеша - все стандартно =)
дальше меняем все вхождения DIR_EXEC . DIR_TORRENTS на $this->uploaddir. вроде бы и все - проверяем, грузим торренты, играемся с настройкой ABSOLUTE_PATH_TORRENTS...

патч прикрепляю, пинаем
тикет в проект отослал http://www.wtorrent-project.org/trac/ticket/416

Re: rtorrent && wtorrent

Добавлено: 2010-05-06 15:55:49
FreeBSP
предыдущее сообщение мое,
а вот и патч