The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
proftpd и буква 'я', !*! scout, 03-Дек-04, 10:08  [смотреть все]
При закачке файлов windows-клиентами на ftp-сервер в именах файлов поглощается буква "я" (код 0xFF) и один символ, идущий за ней. Например: "Скрытая угроза.avi" превращается в "Скрытаугроза.avi". Это как-нибудь можно побороть ?
  • proftpd и буква 'я', !*! Keeper, 10:41 , 03-Дек-04 (1)
    >При закачке файлов windows-клиентами на ftp-сервер в именах файлов поглощается буква "я"
    >(код 0xFF) и один символ, идущий за ней. Например: "Скрытая угроза.avi"
    >превращается в "Скрытаугроза.avi". Это как-нибудь можно побороть ?

    Поиск по форуму. Lavr постил решения для и для proftpd, и для FreeBSD ftpd.

    • proftpd и буква 'я', !*! scout, 11:13 , 03-Дек-04 (2)
      >>При закачке файлов windows-клиентами на ftp-сервер в именах файлов поглощается буква "я"
      >>(код 0xFF) и один символ, идущий за ней. Например: "Скрытая угроза.avi"
      >>превращается в "Скрытаугроза.avi". Это как-нибудь можно побороть ?
      >
      >Поиск по форуму. Lavr постил решения для и для proftpd, и для
      >FreeBSD ftpd.

      Так и сделал первым делом. Может я плохо искал, - решения проблемы 0xFF не нашел. Конечно замечательно заставить всех пользоваться клиентами, поддерживающими KOI8-R, но это просто нереально.

      • proftpd и буква 'я', !*! Keeper, 11:20 , 03-Дек-04 (3)
        >>>При закачке файлов windows-клиентами на ftp-сервер в именах файлов поглощается буква "я"
        >>>(код 0xFF) и один символ, идущий за ней. Например: "Скрытая угроза.avi"
        >>>превращается в "Скрытаугроза.avi". Это как-нибудь можно побороть ?
        >>
        >>Поиск по форуму. Lavr постил решения для и для proftpd, и для
        >>FreeBSD ftpd.
        >
        >Так и сделал первым делом. Может я плохо искал, - решения проблемы
        >0xFF не нашел. Конечно замечательно заставить всех пользоваться клиентами, поддерживающими KOI8-R,
        >но это просто нереально.

        Было, было на форуме. Сам оттуда брал. Идея такая - ищем кусок кода с "IAC" и комментим его нафиг.

        • proftpd и буква 'я', !*! scout, 11:26 , 03-Дек-04 (4)
          >Было, было на форуме. Сам оттуда брал. Идея такая - ищем кусок
          >кода с "IAC" и комментим его нафиг.

          Во! Судя по коду - это оно. Попробую вечером.

          • proftpd и буква 'я', !*! scout, 11:45 , 05-Дек-04 (5)
            >>Было, было на форуме. Сам оттуда брал. Идея такая - ищем кусок
            >>кода с "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.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру