Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Мелочи —> ProFTPD+iconv

ProFTPD+iconv

Автор: moonug.


Есть такая неприятная особенность нашего мира: как правило на наших хардах файлы лежат не в любимой виндоусом кодировке CP1251, а в koi8-r или utf-8. Что при использовании фтп приносит некоторую головную боль, т.к виндовые фтп-клиенты в большинстве своем желают видеть на сервере файлы в кодировке CP1251, а поисковик часто идет у них на поводу. Есть два пути решения проблемы: либо хранить файлы у себя уже в CP1251, либо осуществлять перекодирование "на лету". Первый вариант меня абсолютно не устраивает. Поэтому мы пойдем по второму. В некоторых фтп-серверах, например в pure-ftpd есть такая возможность "из коробки", а вот в столь любимом мной proftpd ее нет :(. Зато к версиям 1.2.10 и 1.3.0 есть патчик от наших японских друзей, который сию функциональность добавляет. Все было хорошо, даже в родном фряшном порте появилась опция, позволяющая наклыдвать этот патч прям из порта, поставил крестик - и доволен :). Но с приходом в мир версии 1.3.1 опция изчезла, а старые патчи не накладывались. Сначала не захотел возиться с кодом proftpd и разбираться почему не патчится, попробовал мигрировать на pure-ftpd, но прошел месяц, и я в очередной раз осознал, что функциональности этого сервера мне не хватает, слишком уж много у меня заморочек, большая их часть правда еще в проекте :). Итак было принято героическое решение разобраться и пропатчить таки proftpd. По привычке полез в гугл, вдруг кто уже все сделал, так нет, всем лень или никто не хочет делиться. Чтож, полез сам, оказалось все намного проще, чем думал :).

Как это было

Итак, идем в порт ftp/proftpd и делаем там make extract. Попутно качая патчи для версии 1.3.0 (ссылку на них я не привожу - лежат на каждом втором сервере, если надо - гугл вас спасет :)). Патчим, что-то где-то ругается. Говорим make. И очень быстро вылетаем с ошибкой в mod_ls.c, говорят, что переменную buf2 компилятор первый раз в глаза видит, а ей уже сто-то присваивают, даже не объявив, не хорошо. Идем разбираться. Открываем любимым текстовым редактором файл work/proftpd-1.3.1/modules/mod_ls.c (в моем случае это vim, но это так, к слову) и топаем к строке с ошибкой. В соседней консоли внимательно смотрим в соответствующий diff. Оказывается немного изменили строки выше, и объявления из патча просто не нашли куда себя вставлять :). Дописываем и продолжаем сборку. И о чудо! Все собралось, поставилось и даже заработало :). (В опциях порта я выбрал CYRFIX, чтоб не вырезать руками кусок netio.c).

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

Делаем порт
Все просто, правим Makefile порта, убираем из опций CYRFIX, и соответственно добавляем нашу секцию ICONV. Получаем вот такой вот Makefile:

# New ports collection makefile for:    proftpd
# Date created:         26 January 1998
# Whom:                 Stephane Legrand
#
# $FreeBSD: ports/ftp/proftpd/Makefile,v 1.129 2008/03/03 22:12:52 beech Exp $
#

PORTNAME=       proftpd
DISTVERSION=    1.3.1
PORTREVISION=   9
CATEGORIES=     ftp
MASTER_SITES=   ftp://ftp.proftpd.org/distrib/source/ \
                ftp://ftp.fastorama.com/mirrors/ftp.proftpd.org/distrib/source/ \
                ftp://ftp.dataguard.no/ftp/pub/proftpd/distrib/source/ \
                ftp://spirit.bentel.sk/mirrors/Proftpd/distrib/source/ \
                ftp://proftpd.networkedsystems.co.uk/distrib/source/ \
                http://mirrors.ibiblio.org/pub/mirrors/proftpd/distrib/source/ \
                http://www.mirrorservice.org/sites/ftp.proftpd.org/distrib/source/ \
                CENKES:clam \
                http://www.smartftp.com/oss/proftpd/:digest \
                http://lev.serebryakov.spb.ru/mod_comb/:comb\
                http://labratsoftware.com/mod_sql_tds/:sql_tds \
                LOCAL/beech:digest \
                LOCAL/beech:comb \
                LOCAL/beech:sql_tds
DISTFILES=      ${DISTNAME}${EXTRACT_SUFX}
EXTRACT_ONLY=   ${DISTNAME}${EXTRACT_SUFX}

MAINTAINER?=    beech@FreeBSD.org
COMMENT?=       Highly configurable ftp daemon
CONFLICTS=      proftpd-[0-9]*]

MAN1=   ftpcount.1 ftpwho.1 ftptop.1
MAN5=   xferlog.5
MAN8=   proftpd.8 ftpshut.8 ftpdctl.8

PORTDOCSdoc=    Configuration.html faq.html
PORTDOCScontrib=mod_ifsession.html mod_radius.html mod_rewrite.html \
                mod_tls.html mod_wrap2.html mod_wrap2_file.html mod_wrap2_sql.html \
                mod_ban.html mod_quotatab_radius.html ftpasswd.html
PORTDOCSreadme= README README.DSO README.FreeBSD README.IPv6 README.LDAP README.PAM \
                README.capabilities README.classes README.facl README.modules \
                README.ports RELEASE_NOTES
PORTDOCS=       ${PORTDOCSdoc} ${PORTDOCScontrib} ${PORTDOCSreadme}

PORTEXAMPLES=   ASCII.html CreateHome.html Filters.html SQL.html Umask.html \
                AuthFiles.html DNS.html Globbing.html SSH.html Upgrade.html \
                Authentication.html DSO.html Limit.html Scoreboard.html Vhost.html \
                BCP.html Debugging.html ListOptions.html ServerType.html \
                VirtualUsers.html Chroot.html Directory.html Logging.html Stopping.html \
                index.html Classes.html DisplayFiles.html NAT.html TLS.html ConfigFile.html \
                FTP.html Quotas.html Timestamps.html Controls.html \
                FXP.html Regex.html Tracing.html

USE_GMAKE=      yes
USE_BZIP2=      yes
USE_AUTOTOOLS=  autoconf:261
GNU_CONFIGURE=  yes
USE_RC_SUBR=    proftpd.sh

CONFIGURE_ARGS= --localstatedir=/var/run \
                --sysconfdir=${PREFIX}/etc \
                --disable-sendfile

OPTIONS=        IPV6 "Use IPv6" off \
                LDAP "Use LDAP" off \
                LDAP_TLS "Use LDAP TLS (Requires LDAP, OPENSSL)" off\
                MYSQL "MySQL auth (Can be combined with PGSQL)" off \
                PGSQL "Postgres auth (Can be combined with MYSQL)" off \
                TDS "FreeTDS - Sybase & MS-SQL auth (Exclusive)" off \
                OPENSSL "Include mod_tls" on \
                QUOTA "Include mod_quota" off \
                IFSESSION "Include mod_ifsession" on \
                README "Include mod_readme" on \
                RATIO "Include mod_ratio" on \
                CTRLS "Include controls" off \
                REWRITE "Include mod_rewrite" on \
                WRAP "Include mod_wrap2" on \
                WRAP_FILE "Include mod_wrap2_file" off \
                WRAP_SQL "Include mod_wrap2_sql" off \
                RADIUS "Include mod_radius" on \
                QUOTATAB_RADIUS "include mod_quotatab_radius" off \
                BAN "Include mod_ban (Requires CTRLS)" off \
                NLS "Use nls (builds mod_lang)" off \
                CLAMAV "Include mod_clamav" off \
                DIGEST "Include mod_digest" off \
                COMB "Include mod_comb (multistream upload)" off \
                ICONV "Transcode" on

MODULES?=
LIBDIRS?=
INCLUDEDIRS?=

.include <bsd.port.pre.mk>

.if !defined(WITHOUT_RATIO)
MODULES:=${MODULES}:mod_ratio
.endif

.if !defined(WITHOUT_README)
MODULES:=${MODULES}:mod_readme
.endif

.if !defined(WITHOUT_REWRITE)
MODULES:=${MODULES}:mod_rewrite
.endif

.if !defined(WITHOUT_WRAP)
MODULES:=${MODULES}:mod_wrap2
INCLUDEDIRS:=${INCLUDEDIRS}:${WORKDIR}/include
LIBDIRS:=${LIBDIRS}:${LOCALBASE}/lib
PLIST_FILES+=   include/proftpd/mod_wrap2.h
.endif

.if defined(WITH_WRAP_FILE)
INCLUDEDIRS:=${INCLUDEDIRS}:${LOCALBASE}/include
LIBDIRS:=${LIBDIRS}:${LOCALBASE}/lib
MODULES:=${MODULES}:mod_wrap2_file
.endif

.if defined(WITH_WRAP_SQL)
INCLUDEDIRS:=${INCLUDEDIRS}:${LOCALBASE}/include
LIBDIRS:=${LIBDIRS}:${LOCALBASE}/lib
MODULES:=${MODULES}:mod_wrap2_sql
.endif

.if defined(WITH_RADIUS)
MODULES:=${MODULES}:mod_radius
.endif

.if defined(WITH_QUOTATAB_RADIUS)
MODULES:=${MODULES}:mod_quotatab_radius
.endif

.if defined(WITH_BAN)
MODULES:=${MODULES}:mod_ban
.endif

.if defined(WITH_SETPASSENT)
CONFIGURE_ARGS+=        --enable-force-setpassent
.endif

.if defined(WITHOUT_PAM)
CONFIGURE_ARGS+=        --disable-auth-pam
.endif

.if defined(WITH_IPV6)
CONFIGURE_ARGS+=        --enable-ipv6
.endif

.if !defined(WITH_IPV6)
CONFIGURE_ARGS+=        --disable-ipv6
.endif

.if defined(WITH_NLS)
INCLUDEDIRS:=${INCLUDEDIRS}:${LOCALBASE}/include
LIBDIRS:=${LIBDIRS}:${LOCALBASE}/lib
CONFIGURE_ARGS+=        --enable-nls
USE_GETTEXT=yes
PROFTPD_LIBS+=  -lintl -L${LOCALBASE}/lib
.endif

#allow user to override
MODULES?=       mod_ratio:mod_readme:mod_rewrite:mod_wrap2:mod_ifsession

INCLUDEDIRS?=
LIBDIRS?=

.if defined(WITH_LDAP)
USE_OPENLDAP=   yes
MODULES:=${MODULES}:mod_ldap
INCLUDEDIRS:=${INCLUDEDIRS}:${LOCALBASE}/include
LIBDIRS:=${LIBDIRS}:${LOCALBASE}/lib
.endif

# Добавляем перекодировку "на лету"
.if defined(WITH_ICONV)
USE_ICONV=      yes
EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-iconv-netio.c
EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-iconv-mod_codeconv.c
EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-iconv-mod_df.c
EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-iconv-mod_ls.c
MODULES:=${MODULES}:mod_codeconv
INCLUDEDIRS:=${INCLUDEDIRS}:${LOCALBASE}/include
LIBDIRS:=${LIBDIRS}:${LOCALBASE}/lib
PROFTPD_LIBS+=  -liconv -L${LOCALBASE}/lib
.endif

.if defined(WITH_MYSQL)
USE_MYSQL=      yes
MODULES:=${MODULES}:mod_sql_mysql
INCLUDEDIRS:=${INCLUDEDIRS}:${LOCALBASE}/include:${LOCALBASE}/include/mysql
LIBDIRS:=${LIBDIRS}:${LOCALBASE}/lib/mysql
.endif

.if defined(WITH_PGSQL)
USE_PGSQL=      yes
MODULES:=${MODULES}:mod_sql_postgres
INCLUDEDIRS:=${INCLUDEDIRS}:${LOCALBASE}/include
LIBDIRS:=${LIBDIRS}:${LOCALBASE}/lib
.endif

.if ${MODULES:M*mod_sql_*}
MODULES:=mod_sql${MODULES}
PLIST_FILES+=   include/proftpd/mod_sql.h
.endif

.if defined(WITH_OPENSSL)
.include <${PORTSDIR}/Mk/bsd.openssl.mk>
CFLAGS+=        -DHAVE_OPENSSL -I${OPENSSLINC}
PROFTPD_LIBS+=  -lssl -lcrypto -L${OPENSSLLIB}
MODULES:=${MODULES}:mod_tls
.endif

.if defined(WITH_CTRLS)
CONFIGURE_ARGS+=        --enable-ctrls
PLIST_FILES+=   sbin/ftpdctl
.if !defined(WITHOUT_CTRLS_ADMIN)
MODULES:=${MODULES}:mod_ctrls_admin
.endif
.endif

.if defined(WITH_QUOTA)
MODULES:=${MODULES}:mod_quotatab:mod_quotatab_file
PLIST_FILES+=   include/proftpd/mod_quotatab.h
.if defined(WITH_LDAP)
MODULES:=${MODULES}:mod_quotatab_ldap
.endif
.if defined(WITH_PGSQL) || defined(WITH_MYSQL)
MODULES:=${MODULES}:mod_quotatab_sql
.endif
.endif

.if defined(WITH_CLAMAV)
#http://www.uglyboxindustries.com/mod_clamav_new.c
DISTFILES+=     mod_clamav-0.5.1.tar.bz2:clam
EXTRACT_ONLY+=  mod_clamav-0.5.1.tar.bz2
USE_CLAMAV=     yes
MODULES:=${MODULES}:mod_clamav
LIB_DEPENDS+=   clamav.3:${PORTSDIR}/security/clamav
INCLUDEDIRS:=${INCLUDEDIRS}:${LOCALBASE}/include
LIBDIRS:=${LIBDIRS}:${LOCALBASE}/lib
.endif

.if defined(WITH_DIGEST)
DISTFILES+=     mod_digest.c:digest
MODULES:=${MODULES}:mod_digest
.endif

.if defined(WITH_COMB)
COMB_VERSION=   0.1
DISTFILES+=     mod_comb-${COMB_VERSION}.tar.bz2:comb
EXTRACT_ONLY+=  mod_comb-${COMB_VERSION}.tar.bz2
MODULES:=${MODULES}:mod_comb
PORTDOCScontrib+=mod_comb.html
PORTDOCSreadme+=README.mod_comb
.endif

.if defined(WITH_TDS)
DISTFILES+=     mod_sql_tds-4.5.tar.bz2:sql_tds
EXTRACT_ONLY+=  mod_sql_tds-4.5.tar.bz2
MODULES:=${MODULES}:mod_sql_tds
MODULES:=mod_sql${MODULES}
PLIST_FILES+=   include/proftpd/mod_sql.h
INCLUDEDIRS:=${INCLUDEDIRS}:${LOCALBASE}/include
LIBDIRS:=${LIBDIRS}:${LOCALBASE}/lib
LIB_DEPENDS+=   sybdb.5:${PORTSDIR}/databases/freetds
.endif

# mod_ifsession should be the last item in the modules list
.if !defined(WITHOUT_IFSESSION)
MODULES:=${MODULES}:mod_ifsession
.endif

# Keep this here below, in case similar constructs need to be made
CONFIGURE_ENV+= "LIBS=${PROFTPD_LIBS}"

.if !empty(MODULES)
CONFIGURE_ARGS+=        --with-modules=${MODULES}
.endif

.if !empty(INCLUDEDIRS)
CONFIGURE_ARGS+=        --with-includes=${INCLUDEDIRS}
.endif

.if !empty(LIBDIRS)
CONFIGURE_ARGS+=        --with-libraries=${LIBDIRS}
.endif
MODULES!=${ECHO} ${MODULES} | ${SED} -e 's,^:,,' -e 's,:$$,,'

post-extract:
.if defined(WITH_CLAMAV)
        @${MV} ${WRKDIR}/mod_clamav_new.c ${WRKSRC}/modules/mod_clamav.c
.endif
.if defined(WITH_DIGEST)
        @${CP} ${DISTDIR}/${DIST_SUBDIR}/mod_digest.c ${WRKSRC}/modules/
.endif
.if defined(WITH_COMB)
        @${MV} ${WRKDIR}/mod_comb-${COMB_VERSION}/mod_comb.c ${WRKSRC}/contrib/
        @${MV} ${WRKDIR}/mod_comb-${COMB_VERSION}/README ${WRKSRC}/README.mod_comb
        @${MV} ${WRKDIR}/mod_comb-${COMB_VERSION}/mod_comb.html ${WRKSRC}/doc/contrib/
.endif

.if defined(WITH_TDS)
         @${MV} ${WRKDIR}/mod_sql_tds.c ${WRKSRC}/contrib/
.endif

post-patch:
.if defined(WITH_NLS)
        @${REINPLACE_CMD} -e 's|-lsupp|-lsupp -lintl|g' ${WRKSRC}/Makefile.in
.endif
.if defined(WITH_LDAP_TLS)
        @${REINPLACE_CMD} -e 's:/\* #define USE_LDAP_TLS \*/:#define USE_LDAP_TLS:' \
                ${WRKSRC}/contrib/mod_ldap.c
.endif
        @${REINPLACE_CMD} -e 's|proftpd\.conf|proftpd.conf.sample|g' ${WRKSRC}/Makefile.in

pre-configure:
        @${ECHO_MSG} "==> Configuring with ${MODULES}"

post-configure:
        ${REINPLACE_CMD} -e 's: -lnsl::' ${WRKSRC}/Make.rules
        ${REINPLACE_CMD} -e 's:/usr/sbin:${PREFIX}/sbin:' \
                -e 's:/usr/bin:${PREFIX}/bin:' \
                ${WRKSRC}/src/proftpd.8 ${WRKSRC}/utils/ftpshut.8 \
                ${WRKSRC}/utils/ftpcount.1

post-install:
        @cd  ${PREFIX}/etc/ && ${CP} -n proftpd.conf.sample proftpd.conf
.if !defined(NOPORTDOCS)
        @${INSTALL} -d ${DOCSDIR}/
        @cd ${WRKSRC}/doc/ && ${INSTALL_DATA} ${PORTDOCSdoc} ${DOCSDIR}/
        @cd ${WRKSRC}/doc/contrib && ${INSTALL_DATA} ${PORTDOCScontrib} ${DOCSDIR}/
        @cd ${WRKSRC} && ${INSTALL_DATA} ${PORTDOCSreadme} ${DOCSDIR}/
.endif
.if !defined(NOPORTEXAMPLES)
        @${INSTALL} -d ${EXAMPLESDIR}/
        @cd ${WRKSRC}/doc/howto/ && ${INSTALL_DATA} ${PORTEXAMPLES} ${EXAMPLESDIR}/
.endif
.if defined(WITH_CTRLS)
        @${INSTALL_PROGRAM} ${WRKSRC}/ftpdctl ${PREFIX}/sbin/
        @${INSTALL_MAN} ${WRKSRC}/src/ftpdctl.8 ${MAN8PREFIX}/man/man8/
.endif

.include <bsd.port.post.mk>

Складываем патчи в каталог files. Порт готов :).


Накладываем патч на родной порт:

Идем все туда же - ftp/proftpd, make extract, распаковываем архив с патчами в work, собственно накладываем патч :). Дальше make config install. Галку на пункте CYRFIX можно не ставить. Вуаля!

Ленивые обладатели FreeBSD могут сильно не думать, а сразу скачать архив с готовым портом, распаковать, и с помощью привычных make install && make clean, проставив нужные галки, получить готовый Proftpd. (Опция, включающая перекодирование - ICONV)


Файлы:

Переделанный патч, ничего после него править руками не надо, все сам делает, умный :)
Берем его здесь

Собственно порт берем здесь

added by lissyara
ftp автора частенько лежит, поэтому выкладываю и у себя



размещено: 2008-03-21,
последнее обновление: 2008-03-21,
автор: moonug


П.К., 2008-03-22 в 19:46:51

Ай да молодца! Спасибо!

PS: vsftpd кто нить борол?

galilei, 2008-03-23 в 1:59:47

А ты попробуй сделать так, как там написано. Ничего не получится. Патчик уж сильно устарел.

polkan, 2008-03-23 в 2:54:30

аффтару зачот! :)
одначе хотелось бы узнать: а кинул ли он свой фикс авторам порта? было бы ишшо удобнее ленивейшим из бздунов :)

Samm, 2008-03-23 в 6:13:04

рекомендую смотреть почему и что убрано, помогает. Опция иконва пропала в http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/114502 с мотивацией When proftpd running with -nd 10 encounters client command OPTS utf8 on it exits with signal 11.

Samm, 2008-03-23 в 6:23:01

Хаха!
samm@samm-laptop:~$ telnet studkomff.ru 21
Trying 194.88.210.246...
Connected to studkomff.ru.
Escape character is '^]'.
220 ProFTPD 1.3.1 Server (FTP-LAKEMOON) [194.88.210.246]
user anonymous
331 Anonymous login ok, send your complete email address as your password
pass samm@sss.com
230 Anonymous access granted, restrictions apply
OPTS utf8
Connection closed by foreign host.


Вы всё ещё хотите ставить это? Автору пожелание - не писать больше подобных статей.

Samm, 2008-03-23 в 6:38:53

И на последок. Краткий анализ проблемы показал, что всё дело в том, что в 3.1 добавили поддержку UTF8 через иконв. Правда, оно сделано немного странно но легко может быть допилено до нужного функционала. Так что данный патч уже совершенно не актуален и более того - опасен.

moonug, 2008-03-23 в 8:35:07

Хм.
Допили, раз легко, буду рад почитать.
И вообще, мне была интересна перекодировка CP1251<->KOI8-R,  и причем тут твой утф совершенно не понятно. :)

Samm, 2008-03-23 в 12:26:35

Блин, ну что за детство! И так, по порядку.
1) Тебя не смутило то, что патч, который был в 1.3.0 "почему-то" убрали в 1.3.1. При этом, замечу, что порты FreeBSD модифицируется через подачу PR, т.е. обычно крайне легко отследить причину изменений. Вместо этого ты наложил (без изменений) патч руками, да ещё и посоветовал заняться тем же идиотизмом окружающих.
2) А если бы ты посмотрел причину по которой его убрали - то понял, что это произошло по той причине, что патч - конфликтует с добавленной в 1.3.1 функциональностью, а точнее приводит к крешу тушки при выдаче клиентом команды "OPTS utf8". При этом данную команду, например, по умолчанию выдаёт IE при подключении к фтп. Автор патча не ответил на репорт и патч был признан устаревшим.
3) "При чём тут твой UTF" - UTF не мой, а самый что ни на есть системный. Проблема в том, что в proftpd добавили базовую поддержку UTF и рекодинг в неё через iconv. И эта функциональность конфликтует с данным патчем и приводит к крешу. Но, главное, что файле utf.c уже есть рекодинг и явно имеет смысл допилить его, а не патч, это намного более правильный путь.
4) "допили раз легко" - мне это нафуй не надо. Для раздачи файлов я использую http который поддерживает чарсет изначально и вообще имеет кучу других плюсов. Чего и вам желаю :) Допилить его - это 2-3 часа, которые мне тратить лень. Если так уж надо - могу сделать, конечно.

phantomm, 2008-03-23 в 12:29:26

Поддержва UTF-8 это хорошо, но на самом деле не все клиенты поддерживают ее - тот же far без доп. плагина.
Проблему же с вылетом при работе с кодировкой UTF (а это по умолчанию тот-же ftp-клиент Explorer'а генерит) решил.
Кого инересует - могу выслать патч.
Работает с 3.1rc2 уже более полугода без всяких нареканий!

lissyara, 2008-03-23 в 12:30:58

Пиздеть, простите, не мешки ворочать.
Поэтому либо через три часа выкатывай патч, либо греби в направлении откуда пригрёб =j
==========
насчёт надо-не надо - это надо очень многим - можно судить по популярности таких тем.
Поэтому если что-то можешь сделать - сделай.

phantomm, 2008-03-23 в 12:41:56

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

lissyara, 2008-03-23 в 12:42:24

Насчёт патча для УТФ - пришлите если не сложно - ибо думаю что от Samm патча мы не дождёмся ни через три часа ни через три года.

lissyara, 2008-03-23 в 12:44:04

2 Фанотом - это не вам было а Samm =))

moonug, 2008-03-23 в 13:30:57

В чем-то Samm прав, посмотрю на досуге, возможно проще попилить в другом месте. А насчет патча от Samm.. Мне тоже кажется, что его не будет.

moonug, 2008-03-23 в 14:05:27

2 Samm
По поводу надо/не надо. Не надо - кнопка закрытия окна помнишь где находится?
Напишешь правильный патч - приходи, поговорим

Samm, 2008-03-23 в 14:43:49

2 Lissyara:
>Пиздеть, простите, не мешки ворочать.
>Поэтому либо через три часа выкатывай патч, либо греби в >направлении откуда пригрёб =j

Я всего лишь указал, что статья не совсем корректна, а делать патч для фичи которая мне не нужна - я не собирался. Мне - не надо. Я поддерживаю достаточное количество opensource проектов, чтобы заниматься тем, что мне нужно или, как минимум, интересно. Требуемый функционал ПРОСТО дописать в utf.c, о чём я и указал автору. Если бы меня _вежливо_ попросили помочь в этом, а не "в течении трёх часов", то я бы сделал патч. Да и разбираться я начал ТОЛЬКО после того, как решил сделать PR для возврата этой опции, так как я очень не люблю модифицированные порты не включённые в baseline. А с подобными предьявами про "3 часа" - греби сам, и рекомендуй ставить патчи приводящие к сегфолту.
==========
насчёт надо-не надо - это надо очень многим - можно судить по популярности таких тем.
Поэтому если что-то можешь сделать - сделай.

lissyara, 2008-03-23 в 14:51:15

Вот и ожидаемый ответ.
у вас ещё 1 час и 15 минут.

Samm, 2008-03-23 в 14:54:19

А потом? :)

Samm, 2008-03-23 в 14:58:25

А, вот, предлагаю после этого времени стереть мои посты как неполиткорректные :) Кстати, в качестве homework - попробуйте послать PR используя дифф в данной статье и посмотрите что ответит мейнтейнер )

moonug, 2008-03-23 в 15:05:13

2 Samm
Поехали в форум, хорошо в камментах страть.
Заодно и покажешь мастер-класс, как нужно ПРОСТО дописать функционал в utf.c
http://forum.lissyara.su/viewtopic.php?f=14&t=7747

lissyara, 2008-03-23 в 15:12:18

Неа, стирать или нет - решает автор статьи.
Это не моя статья - и не мне решать.
==========
а потом - крестик в углу экрана.
И направление откуда пригрёб.
На выбор:
в гугл с запросом ndp "-s" freebsd ipv6
или на опеннет, статью № 14901
=========
а майнтайнеру порта уже писали. Он ответил точно также - не моя проблема не мне решать.
Неправильный подход, на мой взгляд - кому ненадо соберуть без патча, кому надо - будут юзать патч.
Лишать людей права выбора из-за свой лени - нельзя.

Samm, 2008-03-23 в 16:18:21

Да причём тут лень! патч - опасен и вызывает сегфаулт. Поэтому и выкинули.

P.S. Ковыряю fsio.c

samm, 2008-03-23 в 17:16:33

патч готов. Заинтересованные идут в мыло.

Samm, 2008-03-23 в 18:19:24

Кстати, глюк в модуле комментов - вторая ссылка содержит 2 раза ?, и, как следствие, не работает. urlencode() и аналоги никто не отменял.

lissyara, 2008-03-23 в 19:55:12

Ну вот, пока не пнёшь - ничё и не сделают =)
За патч, спасибо.
Ну а про обсуждение - ненадо своё плохое настроение выносить на обсуждение.
Тогда не будет таких тем.
=======
Хотя... Тогда бы не было патча =)))
=======
про энкоды и прочее - тут свои проблемы. Надо весь этот кусок сайта перепиливать - тоже на коленке писанный =(

phantom, 2008-03-24 в 3:15:10

Вижу, что проблему уже решили, но все равно предложу и свой вариант патча
В данном случае это исправление патча, упомянутого в самой статье

Samm, 2008-03-24 в 11:07:28

Думаю, что лучше этот патч (от японца) не использовать. Слишком много всего оно модифицирует и совершенно не вписывается в архитектуру proftpd создавая дублирующий код. Вчера читал RFC2460 (ну и бредятина!) в котором затрагивается вопрос работы сервера в Unicode. Вобщем, явно применяя патч с перекодировкой и _если_ output charset != UTF-8, то FEAT UTF8 надо убирать нафиг. Кроме того, в mod_lang есть ещё и обработка OPTS UTF8 ON, что вообще не описано ни в одном из RFC, но поддерживается некоторомы клиентами (FileZilla) и серверами. Что с ним делать в таком случае - ума не приложу.

barsykoff, 2008-04-03 в 21:43:53

Ах-ха-ха-ха, ну и демагогия)))

За патч спасибо! ;)

nikll, 2008-04-04 в 7:19:00

Люди, а кто нибудь отправил данный патч мейтейнеру порта или разработчикам proftpd

phantom, 2008-04-04 в 12:25:47

патч уже закомичен на freebsd.org:

beech       2008-03-27 19:36:11 UTC

 FreeBSD ports repository

 Modified files:
   ftp/proftpd          Makefile
 Added files:
   ftp/proftpd/files    extra-patch-mod-codeconv
 Log:
 - Re-add OPTIONS CODECONV (mod_codeconv) with v1.3.1 fixes for
international users
 - Bump portrevision

Samm, 2008-04-04 в 12:33:12

Это кривой патч :)

phantom, 2008-04-04 в 12:50:05

Для многих важна чисто функциональность без отвлечения на демогогию. С указанной версией сервера он работает без проблем. Что ещу нужно?
А то, что он "криво ложится на архитектуру", то, это мало кого интересовать должно кроме разработчиков и тех, кто поддерживает данный проект :)
Только не стоит делать заключения, что я ратую за кривой код.

lissyara, 2008-04-04 в 12:53:06

На днях я уже про него писал баг-репорт.
Про текущий патч в портах...
ну, думаю скоро будет всё прямо и без патчей - так что ждём

Samm, 2008-04-04 в 12:55:10

Он нарушает RFC и отвратительно написан. Хороший админ - должен быть эстетом :)

termsl, 2008-04-10 в 21:48:27

Вот отожгли, но радует, что есть решение проблеммы, притом более одного способа.

nwton, 2008-04-18 в 16:36:45

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

Если кого-то интересуют подробности, то вот:

beech 2008-04-02 01:15:47 UTC

FreeBSD ports repository

Modified files:
ftp/proftpd Makefile
ftp/proftpd/files extra-patch-mod-codeconv
Removed files:
ftp/proftpd/files extra-patch-cyrillic-fix-netio.c
Log:
- Remove cyrillic-fix-netio.c (handled by CODECONV)
- Bump portrevision

PR: ports/122355
Submitted by: Alex Keda

Revision Changes Path
1.132 +1 -6 ports/ftp/proftpd/Makefile
1.2 +0 -50 ports/ftp/proftpd/files/extra-patch-cyrillic-fix-netio.c (dead)
1.5 +1 -131 ports/ftp/proftpd/files/extra-patch-mod-codeconv

NJSmith, 2008-05-22 в 14:29:58

Ни фич, ни багов писать не буду, душевное Вам спасибо автор, оченно помогло

Corwin, 2008-06-06 в 10:49:53

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

Николай, 2008-06-13 в 18:11:23

Спасибо большое за статью. Полдня ничего настроить не мог пока не прочитал. Пиши чаще.

Пожарыч, 2008-10-29 в 12:59:35

Поставлен сегодня proftpd-1.3.2rc2.tar.bz2 из портов. Перекодировка включилась без напильников и прочего после добавления двух строк в /usr/local/etc/proftpd.conf:

LangEngine      on
UseEncoding     koi8-r cp1251

Проверено и работает - пробуйте.
Да, ставилось без всяких опций стандартными командами.

Sava, 2009-01-02 в 1:39:10

Да, работает без проблем. Ставим галку напротив NLS и имеем счастье. Так что проблема перекодировки в proftpd исторически исчезла. Да здравствуют разрабы! :)

Marchd, 2010-06-24 в 1:35:09

в версии как минимум 1.3.2a есть уже модуль ничего мудрить не нужно

Для БЗДЫ
В  proftpd.conf

<IfModule mod_lang.c>
    UseEncoding koi8r cp1251
  </IfModule>



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0612 секунд
Из них PHP: 51%; SQL: 49%; Число SQL-запросов: 77 шт.
Исходный размер: 69293; Сжатая: 16946