vsftpd
ftp://kai.local/pub/temp/multifs
Файловая система для fuse, объединяет несколько каталогов в один. Только позавчера написал
Можно большой каталог раскидать на несколько дисков, а для расшаривания собрать в один. Типа так:
Побочный эффект - разворачивает симлинки.
read-only
Файловая система для fuse, объединяет несколько каталогов в один. Только позавчера написал
Можно большой каталог раскидать на несколько дисков, а для расшаривания собрать в один. Типа так:
mount -t multifs /mnt/video1,/mnt/video2 /local/video -o allow_other
Побочный эффект - разворачивает симлинки.
read-only
не думал что так быстро ответят
зы, прикольная прога
у меня крокозябли
оБЫЕУФЧЙЕ 1
а как он поступает с одноимёнными файлами?
The mount_unionfs utility first appeared in 4.4BSD
Одноименные файлы берутся из первой директории по списку. Одноименные директории склеиваются.
Вообще, он никаких преобразований кодировок не делает.
http://www.linuxjournal.com/article/7714
Показательный пример. Перед тем как что-то писать, нужно всегда поискать подобные в инете. С вероятностью 99% - найдется. Однако, почти никто так не делает. Как результат - имеем огромное множество программ для одной задачи (как правило, у каждой свои проблемы)
Прошлогодняя статья на LJ: Показательный пример. Перед тем как что-то писать, нужно всегда поискать подобные в инете. С вероятностью 99% - найдется. Однако, почти никто так не делает. Как результат - имеем огромное множество программ для одной задачи (как правило, у каждой свои проблемы)
ну unionfs в linux тоже есть давно, но сомневаюсь что оно раскрывает симлиньки - а тут проблема именно в этом.
Там есть интересная идея про copy-on-write. Если эту штуку прикрутить к самбе, то можно будет "править" содержимое чужих расшаренных каталогов Скажем, заметки для себя оставлять.
Говорят там патчи есть какие-то, но нормально описанного метода борьбы с кодировками я так и не нашел
все мои файлы и папки с русскими именами видня примерно вот так: нХНЙК фТПММШ
ведь хвалили здесь этот фтп сервер, неужели с кодировками не разбирались?
он позволяет при запуске указывать кодировки внутреннюю и внешнюю и использовать iconv
у меня с версией 2.0.1 ничего не получилось
делал вот так
patch -p1 < patch.vsftpd
а вот и сам патч
diff -rc vsftpd-2.0.1/ftpcmdio.c vsftpd-2.0.1-convertable-r2/ftpcmdio.c
*** vsftpd-2.0.1/ftpcmdio.c 2004-07-02 15:23:02.000000000 +0400
--- vsftpd-2.0.1-convertable-r2/ftpcmdio.c 2005-02-01 01:17:17.000000000 +0300
***************
*** 200,205 ****
--- 200,206 ----
ftp_getline(p_sess, p_str, p_sess->p_control_line_buf);
/* As mandated by the FTP specifications.. */
str_replace_char(p_str, '\0', '\n');
+ if (iconv_enabled) str_iconv(p_str, 1);
/* If the last character is a \r, strip it */
{
unsigned int len = str_getlen(p_str);
diff -rc vsftpd-2.0.1/ftpcmdio.h vsftpd-2.0.1-convertable-r2/ftpcmdio.h
*** vsftpd-2.0.1/ftpcmdio.h 2003-09-10 03:11:01.000000000 +0400
--- vsftpd-2.0.1-convertable-r2/ftpcmdio.h 2005-02-01 01:17:00.000000000 +0300
***************
*** 1,6 ****
--- 1,8 ----
#ifndef VSF_FTPCMDIO_H
#define VSF_FTPCMDIO_H
+ extern int iconv_enabled;
+
struct mystr;
struct vsf_session;
diff -rc vsftpd-2.0.1/main.c vsftpd-2.0.1-convertable-r2/main.c
*** vsftpd-2.0.1/main.c 2004-07-02 15:23:39.000000000 +0400
--- vsftpd-2.0.1-convertable-r2/main.c 2005-02-01 01:33:46.000000000 +0300
***************
*** 5,10 ****
--- 5,15 ----
* main.c
*/
+ #include <iconv.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <errno.h>
+
#include "session.h"
#include "utility.h"
#include "tunables.h"
***************
*** 31,36 ****
--- 36,46 ----
static void session_init(struct vsf_session* p_sess);
static void env_init(void);
+ #define INSIDE_CHARSET "UTF-8"
+ #define OUTSIDE_CHARSET "WINDOWS-1251"
+ iconv_t cd_inside, cd_outside;
+ int iconv_enabled=0;
+
int
main(int argc, const char* argv[])
{
***************
*** 68,82 ****
/* Zero or one argument supported. If one argument is passed, it is the
* path to the config file
*/
! if (argc > 2)
{
! die("vsftpd: too many arguments (I take an optional config file only)");
}
else if (argc == 0)
{
die("vsftpd: missing argv[0]");
}
! if (argc == 2)
{
if (!vsf_sysutil_strcmp(argv[1], "-v"
{
--- 78,93 ----
/* Zero or one argument supported. If one argument is passed, it is the
* path to the config file
*/
!
! if (argc > 5 || argc == 3)
{
! die("vsftpd: incorrect arguments (usage: vsftpd /path/to/config [inside_charset outside_charset [listen_port]]");
}
else if (argc == 0)
{
die("vsftpd: missing argv[0]");
}
! if (argc >= 2)
{
if (!vsf_sysutil_strcmp(argv[1], "-v"
{
***************
*** 85,90 ****
--- 96,112 ----
p_config_name = argv[1];
config_specified = 1;
}
+ if (argc >= 4) {
+ cd_inside = iconv_open(argv[2], argv[3]);
+ if (cd_inside == (iconv_t-1 die(strerror(errno;
+ cd_outside = iconv_open(argv[3], argv[2]);
+ if (cd_outside == (iconv_t-1 die(strerror(errno;
+ iconv_enabled = 1;
+ }
+ if (argc == 5) {
+ tunable_listen_port = atoi(argv[4]);
+ }
+
/* This might need to open /dev/zero on systems lacking MAP_ANON. Needs
* to be done early (i.e. before config file parse, which may use
* anonymous pages
diff -rc vsftpd-2.0.1/str.c vsftpd-2.0.1-convertable-r2/str.c
*** vsftpd-2.0.1/str.c 2004-07-02 15:25:43.000000000 +0400
--- vsftpd-2.0.1-convertable-r2/str.c 2005-02-01 01:09:16.000000000 +0300
***************
*** 660,662 ****
--- 660,683 ----
}
}
+ void
+ str_iconv(struct mystr* p_str, int direction)
+ {
+ char tmp[MAX_ICONV_STRING+1], *to_buf, *from_buf;
+ size_t sz_from, sz_to, nconv;
+
+ from_buf = (char*)str_strdup(p_str);
+ to_buf = tmp;
+ sz_from = str_getlen(p_str)+1;
+ if (sz_from>MAX_ICONV_STRING) return;
+ sz_to = MAX_ICONV_STRING;
+ if (direction) {
+ nconv = iconv(cd_inside, &from_buf, &sz_from, &to_buf, &sz_to);
+ nconv = iconv(cd_inside, NULL, NULL, NULL, NULL);
+ } else {
+ nconv = iconv(cd_outside, &from_buf, &sz_from, &to_buf, &sz_to);
+ nconv = iconv(cd_inside, NULL, NULL, NULL, NULL);
+ }
+ str_empty(p_str);
+ str_append_text(p_str, tmp);
+ }
diff -rc vsftpd-2.0.1/str.h vsftpd-2.0.1-convertable-r2/str.h
*** vsftpd-2.0.1/str.h 2004-06-04 20:35:00.000000000 +0400
--- vsftpd-2.0.1-convertable-r2/str.h 2005-02-01 01:09:16.000000000 +0300
***************
*** 1,12 ****
--- 1,19 ----
#ifndef VSFTP_STR_H
#define VSFTP_STR_H
+ #include <iconv.h>
+ #include <string.h>
+ #include "sysstr.h"
+ #define MAX_ICONV_STRING 2048
+
/* TODO - document these functions ;-) */
#ifndef VSF_FILESIZE_H
#include "filesize.h"
#endif
+ extern iconv_t cd_inside, cd_outside;
+
struct mystr
{
char* PRIVATE_HANDS_OFF_p_buf;
***************
*** 120,124 ****
--- 127,133 ----
int str_contains_line(const struct mystr* p_str,
const struct mystr* p_line_str);
+ void str_iconv(struct mystr* p_str, int direction); // direction: 1 - inside, 0 - outside
+
#endif /* VSFTP_STR_H */
diff -rc vsftpd-2.0.1/strlist.c vsftpd-2.0.1-convertable-r2/strlist.c
*** vsftpd-2.0.1/strlist.c 2004-07-02 15:25:48.000000000 +0400
--- vsftpd-2.0.1-convertable-r2/strlist.c 2005-02-01 01:21:12.000000000 +0300
***************
*** 92,97 ****
--- 92,98 ----
p_node = &p_list->p_nodes[p_list->list_len];
p_node->str = s_null_str;
p_node->sort_key_str = s_null_str;
+ if (iconv_enabled) str_iconvstruct mystr*)p_str, 0);
str_copy(&p_node->str, p_str);
if (p_sort_key_str)
{
diff -rc vsftpd-2.0.1/strlist.h vsftpd-2.0.1-convertable-r2/strlist.h
*** vsftpd-2.0.1/strlist.h 2002-07-14 22:27:03.000000000 +0400
--- vsftpd-2.0.1-convertable-r2/strlist.h 2005-02-01 01:17:58.000000000 +0300
***************
*** 1,6 ****
--- 1,8 ----
#ifndef VSF_STRLIST_H
#define VSF_STRLIST_H
+ extern int iconv_enabled;
+
/* Forward declarations */
struct mystr;
struct mystr_list_node;
и что за дщистрибутив у тебя?
в vsftpd то кодировку указывать нельзя, только локаль менять
симлинки
или другой фтп сервер?
а как поставил разные кодировки?
как это на сервере то устанавливается (если у тебя vsftpd конечно..)?
а так понятно что симлинки..
lrwxrwxrwx 1 0 0 70 Jun 25 08:04 !Как надо заливать фильмы на сервак! Всем читать!.htm -> /pub/!лБЛ ОБДП ЪБМЙЧБФШ ЖЙМШНЩ ОБ УЕТЧБЛ! чУЕН ЮЙФБФШ!.htm
lrwxrwxrwx 1 0 0 36 Jun 25 08:04 !Все фильмы доступны по ftp.txt -> /pub/!чУЕ ЖЙМШНЩ ДПУФХРОЩ РП ftp.txt
$ telnet video 21
Trying 10.3.0.3...
Connected to video.gznet.ru.
Escape character is '^]'.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
Оставить комментарий
Serge_S
насколько я знаю по симлинкам vsftpd ходить не умеету меня есть директория(DIR1 в которой лежит инфа и в которую залинкованы куча папок(LINKS) (папки+линки на другие папки)
вопрос: можно ли без особого гемора эту папочку сделать читабельной по фтп с помощью vsftpd?
(без особого гемора имелось ввиду не маунтить каждую из папок LINKS в мою директорию для FTP)