При закачке файлов windows-клиентами на ftp-сервер в именах файлов поглощается буква "я" (код 0xFF) и один символ, идущий за ней. Например: "Скрытая угроза.avi" превращается в "Скрытаугроза.avi". Это как-нибудь можно побороть ?
>При закачке файлов windows-клиентами на ftp-сервер в именах файлов поглощается буква "я"
>(код 0xFF) и один символ, идущий за ней. Например: "Скрытая угроза.avi"
>превращается в "Скрытаугроза.avi". Это как-нибудь можно побороть ?Поиск по форуму. Lavr постил решения для и для proftpd, и для FreeBSD ftpd.
>>При закачке файлов windows-клиентами на ftp-сервер в именах файлов поглощается буква "я"
>>(код 0xFF) и один символ, идущий за ней. Например: "Скрытая угроза.avi"
>>превращается в "Скрытаугроза.avi". Это как-нибудь можно побороть ?
>
>Поиск по форуму. Lavr постил решения для и для proftpd, и для
>FreeBSD ftpd.Так и сделал первым делом. Может я плохо искал, - решения проблемы 0xFF не нашел. Конечно замечательно заставить всех пользоваться клиентами, поддерживающими KOI8-R, но это просто нереально.
>>>При закачке файлов windows-клиентами на ftp-сервер в именах файлов поглощается буква "я"
>>>(код 0xFF) и один символ, идущий за ней. Например: "Скрытая угроза.avi"
>>>превращается в "Скрытаугроза.avi". Это как-нибудь можно побороть ?
>>
>>Поиск по форуму. Lavr постил решения для и для proftpd, и для
>>FreeBSD ftpd.
>
>Так и сделал первым делом. Может я плохо искал, - решения проблемы
>0xFF не нашел. Конечно замечательно заставить всех пользоваться клиентами, поддерживающими KOI8-R,
>но это просто нереально.Было, было на форуме. Сам оттуда брал. Идея такая - ищем кусок кода с "IAC" и комментим его нафиг.
>Было, было на форуме. Сам оттуда брал. Идея такая - ищем кусок
>кода с "IAC" и комментим его нафиг.Во! Судя по коду - это оно. Попробую вечером.
>>Было, было на форуме. Сам оттуда брал. Идея такая - ищем кусок
>>кода с "IAC" и комментим его нафиг.
>
>Во! Судя по коду - это оно. Попробую вечером.Все работает. В файле netio.c заменить реализацию функции pr_netio_telnet_gets на следующее:
char *pr_netio_telnet_gets(char *buf, size_t buflen,
pr_netio_stream_t *in_nstrm, pr_netio_stream_t *out_nstrm) {char *bp = buf;
unsigned char cp;
static unsigned char mode = 0;
int toread;
pr_buffer_t *pbuf = NULL;
buflen--;if (in_nstrm->strm_buf)
pbuf = in_nstrm->strm_buf;
else
pbuf = netio_buffer_alloc(in_nstrm);while (buflen) {
/* Is the buffer empty? */
if (!pbuf->current ||
pbuf->remaining == pbuf->buflen) {toread = pr_netio_read(in_nstrm, pbuf->buf,
(buflen < pbuf->buflen ? buflen : pbuf->buflen), 1);if (toread <= 0) {
if (bp != buf) {
*bp = '\0';
return buf;} else
return NULL;
}pbuf->remaining = pbuf->buflen - toread;
pbuf->current = pbuf->buf;} else
toread = pbuf->buflen - pbuf->remaining;while (buflen && toread > 0 && *pbuf->current != '\n' && toread--) {
cp = *pbuf->current++;
pbuf->remaining++;
*bp++ = cp;
buflen--;
}if (buflen && toread && *pbuf->current == '\n') {
buflen--;
toread--;
*bp++ = *pbuf->current++;
pbuf->remaining++;
break;
}if (!toread)
pbuf->current = NULL;
}*bp = '\0';
return buf;
}
PS Верно для proftpd-1.2.10.