Сеанс OpenSSH завершается, когда из Perl выполняется вызов системной записи с пустой переменной в Solaris 11

Не все эти символы в режиме являются разрешениями.

Первый символ обозначает тип файла. :Вы не можете изменить тип файла. Поэтому вы не можете изменить сокет (s )в каталог (d ).

4
26.10.2020, 19:28
1 ответ

Решение найдено! :-)Короче говоря, мы должны установить флаг CPTY_ZEROREADна этапе настройки компиляции .

В файле channels.cисходного кода мы видим, где возникает ошибка...

#ifndef PTY_ZEROREAD
    if (len <= 0) {
#else
    if ((!c->isatty && len <= 0) ||
        (c->isatty && (len < 0 || (len == 0 && errno != 0)))) {
#endif
        debug2("channel %d: read<=0 rfd %d len %zd",
            c->self, c->rfd, len);
        if (c->type != SSH_CHANNEL_OPEN) {
            debug2("channel %d: not open", c->self);
            chan_mark_dead(ssh, c);
            return -1;
        } else {
            chan_read_failed(ssh, c);
        }
        return -1;
    }

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

Для решения проблемы необходимо выполнить команду configureс установленным флагом C, как показано в последней строке следующей команды:

./configure --with-zlib           \
        --with-pam                \
        --with-md5-passwords      \
        CFLAGS="-DPTY_ZEROREAD=1"
1
18.03.2021, 22:56

Теги

Похожие вопросы