>>Было, было на форуме. Сам оттуда брал. Идея такая - ищем кусок
>>кода с "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.