/ etc / motd не отображается при именованном канале?

8

Запуск Gentoo 3.4.0

Недавно услышав о файле / etc / motd, я попытался отобразить случайные состояния коровы. Я написал некоторый случайный bash-скрипт, который будет выступать в роли демона, подавая / etc / motd как именованный канал, как видно на некоторых форумах.

Я не думаю, что есть какие-либо проблемы со сценарием, потому что cat'ing pipe работает просто отлично, но MOTD не будет отображаться при входе в систему (использование обычного файла работает)!

fira@nyan ~ % cat /etc/motd
 _______________________________________ 
/ We didn't put in ^^ because then we'd \
| have to keep telling people what it   |
| means, and then we'd have to keep     |
| telling them why it doesn't short     |
| circuit. :-/                          |
|                                       |
| -- Larry Wall in                      |
\ <199707300650.XAA05515@wall.org>      /
 --------------------------------------- 
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/

Я что-то упускаю из виду?

Не используя ничего, как .hushlogin или еще много чего, пробовал использовать несколько оболочек, труба читаема как + r.

Fira
источник

Ответы:

7

Вы не упускаете ничего очевидного. Я копался в источнике pam_motdмодуля, чтобы понять это.

Хитрость в том, что pam_motdделает следующее с /etc/motd:

  1. Проверьте размер файла.
  2. Выделите буфер такого размера.
  3. Прочитайте весь файл в буфер.
  4. Выведите буфер через любой используемый метод вывода. (В конце концов, PAM является модульным; не могу предположить, что это терминал.)

Так как канал не имеет размер файла, это не удается на шаге 1.

РЕДАКТИРОВАТЬ : Почему PAM беспокоит размер в первую очередь? Я полагаю, что это предотвращает отказ в обслуживании, преднамеренный или непреднамеренный. Когда PAM проверяет размер файла, он также отказывается выводить motd, если размер файла превышает 64 КБ. Я полагаю, кто бы ни пытался войти в систему, было бы очень грустно, если бы кто-то, например, смог передать файл фильма на DVD в / etc / motd - не говоря уже о том, сколько памяти это может занять.

Jander
источник
Ну, в конце я просто перестроил PAM с помощью специального патча, чтобы он правильно читал канал, если он один => pastebin.com/bMpbLskH
Fira
С открытым исходным кодом это замечательно. ^ _ ^ Я добавил свои мысли о том, почему PAM проверяет размер файла, что, я думаю, вы могли заподозрить из примечания «Нужно больше проверок» в вашем патче. Я думаю, что самое простое, что нужно сделать, это перестать читать канал после 64k.
Jander
2

Эта ссылка проведет вас через все необходимые шаги

маргаритка
источник
1
Ницца. Вы также должны добавить шаги непосредственно в ответ, так что если ссылка в будущем разорвется, ваш ответ все равно будет полезен.
Джандер
Итак, отключить MotD и вместо этого показать что-то вручную? Почему бы и нет, но могу ли я сделать это глобально, независимо от bash? Я использую ZSH, поэтому содержимое / etc / profile не выполняется
Fira