Bug 24003 - chvt из X.org: неверная диагностика при недостаточности прав доступа
Summary: chvt из X.org: неверная диагностика при недостаточности прав доступа
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: console-vt-tools (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Alexey Gladkov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-09-01 18:32 MSD by Andrey Cherepanov
Modified: 2010-09-03 15:13 MSD (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrey Cherepanov 2010-09-01 18:32:22 MSD
[cas@cas ~]$ chvt 2
Couldn't get a file descriptor referring to the console
[cas@cas ~]$ ll /dev/tty2
crw------- 1 root root 4, 2 Авг 30 10:25 /dev/tty2

Очевидно, что при наличии файла устровйства, но недостаточности прав доступа к нему диагностика должна быть 
chvt: /dev/tty2: Permission denied
или подобная.
Comment 1 Alexey Gladkov 2010-09-01 18:46:20 MSD
(В ответ на комментарий №0)
> [cas@cas ~]$ chvt 2
> Couldn't get a file descriptor referring to the console

chvt не смогла открыть консоль о чём и написала.

> Очевидно, что при наличии файла устровйства, но недостаточности прав доступа к
> нему диагностика должна быть 
> chvt: /dev/tty2: Permission denied
> или подобная.

Выведенное сообщение не имеет отношения к правам.
Comment 2 Andrey Cherepanov 2010-09-01 18:59:19 MSD
Причину неполучения файлового дескриптора она не указала, что затрудняет диагностику. И не открыть консоль, а открыть файловый дескриптор, знания о котором избыточны для использования этой программы.

> Выведенное сообщение не имеет отношения к правам.
Оно - следствие недостаточности прав.
Comment 3 Alexey Gladkov 2010-09-01 19:30:44 MSD
(В ответ на комментарий №2)
> Причину неполучения файлового дескриптора она не указала, что затрудняет
> диагностику.

У тебя на машине не получилось открыть дескриптор на консоль, либо все файлы устройств или дескрипторы не являются терминалами. Это исключительная ситуация, о которой было сообщено максимально полно.

> И не открыть консоль, а открыть файловый дескриптор, знания о
> котором избыточны для использования этой программы.

Если ваша машина сломана настолько, то такие знания необходимы.

> Оно - следствие недостаточности прав.

Нет. Эта проблема не имеет отношения к /dev/tty2.

На нормально работающей ситеме strace выглядит так:

$ ls -al /dev/tty5
crw------- 1 root root 4, 5 Сен  1 18:46 /dev/tty5

$ LANG=C strace -fF -e trace=open,ioctl chvt 5
6739  open("/etc/ld.so.cache", O_RDONLY) = 3
6739  open("/lib/libc.so.6", O_RDONLY)  = 3
6739  open("/proc/self/fd/0", O_RDWR)   = 3
6739  ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
6739  ioctl(3, KDGKBTYPE, 0xafdad22f)   = 0
6739  ioctl(3, VIDIOC_G_COMP or VT_ACTIVATE, 0x5) = 0
6739  ioctl(3, VIDIOC_S_COMP or VT_WAITACTIVE, 0x5) = 0

и происходит переключение на tty5.
Comment 4 Andrey Cherepanov 2010-09-01 20:45:27 MSD
Данное поведение наблюдается только при переключении из X.org. На обычной консоли всё работает.

[cas@cas ~]$ LANG=C strace -fF -e trace=open chvt 2
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib/libc.so.6", O_RDONLY)        = 3
open("/proc/self/fd/0", O_RDWR)         = 3
open("/dev/tty", O_RDWR)                = 3
open("/dev/tty0", O_RDWR)               = -1 EACCES (Permission denied)
open("/dev/tty0", O_WRONLY)             = -1 EACCES (Permission denied)
open("/dev/tty0", O_RDONLY)             = -1 EACCES (Permission denied)
open("/dev/vc/0", O_RDWR)               = -1 ENOENT (No such file or directory)
open("/dev/vc/0", O_WRONLY)             = -1 ENOENT (No such file or directory)
open("/dev/vc/0", O_RDONLY)             = -1 ENOENT (No such file or directory)
open("/dev/console", O_RDWR)            = -1 EACCES (Permission denied)
open("/dev/console", O_WRONLY)          = -1 EACCES (Permission denied)
open("/dev/console", O_RDONLY)          = -1 EACCES (Permission denied)
Couldn't get a file descriptor referring to the console

[cas@cas ~]$ ls -l /dev/tty0
crw--w---- 1 root root 4, 0 Авг 30 14:25 /dev/tty0
Comment 5 Alexey Gladkov 2010-09-01 22:10:37 MSD
(В ответ на комментарий №4)
> Couldn't get a file descriptor referring to the console

Ты где-нибудь в выводе strace видишь /dev/tty2 ?

Я ещё раз говорю, chvt безразличны права на этот файл. Он не смог открыть дескриптор на консоль, хотя искал его не в одном месте. Сообщение полностью описывает ситуацию.
Кстати, ты напрасно исключил отслеживание ioctl в strace.

Вот вывод из urxvt в Иксах:

$ l /dev/tty5
crw------- 1 root root 4, 5 Сен  1 18:46 /dev/tty5

$ LANG=C strace -fF -e trace=open,ioctl chvt 5
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib/libc.so.6", O_RDONLY)        = 3
open("/proc/self/fd/0", O_RDWR)         = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B4000000 opost isig icanon echo ...}) = 0
ioctl(3, KDGKBTYPE, 0xafc0b47f)         = -1 EINVAL (Invalid argument)
open("/dev/tty", O_RDWR)                = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B4000000 opost isig icanon echo ...}) = 0
ioctl(3, KDGKBTYPE, 0xafc0b47f)         = -1 EINVAL (Invalid argument)
open("/dev/tty0", O_RDWR)               = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, KDGKBTYPE, 0xafc0b47f)         = 0
ioctl(3, VIDIOC_G_COMP or VT_ACTIVATE, 0x5) = -1 EPERM (Operation not permitted)
chvt: VT_ACTIVATE: Operation not permitted

Наведи порядок у себя в системе.

Пожалуйста перестань переоткрывать этот баг.
Ошибки нет (по крайней в первоначальной формулировке), сообщение правильное и ничего исправлять я не планирую.
Comment 6 Dmitry V. Levin 2010-09-02 05:25:25 MSD
(In reply to comment #5)
> Ошибки нет (по крайней в первоначальной формулировке), сообщение правильное и
> ничего исправлять я не планирую.

С этим я почти согласен, см. ниже.

(In reply to comment #3)
> У тебя на машине не получилось открыть дескриптор на консоль, либо все файлы
> устройств или дескрипторы не являются терминалами. Это исключительная ситуация,
> о которой было сообщено максимально полно.

С этим я не согласен в том смысле, что это никакая не исключительная ситуация.
Доступа к /dev/tty0 (текущая вирт.консоль) может и не быть.
В случае если логин произведён не с помощью login(1), а через *dm, то и управляющий терминал (/dev/tty) не является вирт.консолью, не говоря уже о /dev/console.

Возвращаясь к нашей фразе:
Couldn't get a file descriptor referring to the console

Тут есть одна ошибка и одна неточность:
Ошибка в слове "the": поскольку утилита пытается получить дескриптор любой подходящей вирт.консоли, определённый артикль тут неуместен.
Неточность в слове console: поскольку речь идет о вирт.консоли (даже при попытке использовать /dev/console), было бы точнее написать "virtual console".

Итого, я предлагаю заменить "the console" на "a virtual console". :)
Если хочется покороче, то можно написать так:
Couldn't find a suitable virtual console
Comment 7 Alexey Gladkov 2010-09-02 08:00:24 MSD
(В ответ на комментарий №6)
> С этим я не согласен в том смысле, что это никакая не исключительная ситуация.

Насчёт исключительности я имел ввиду следующее: порядок поиска консоли таков:

/proc/self/fd/0
/dev/tty
/dev/tty0
/dev/vc/0
/dev/console
дескрипторы 0,1,2

если ни одного нет, то для chvt это ситуация не является рабочей :)
Он даже не может перейти к стадии переключения терминала.

> Доступа к /dev/tty0 (текущая вирт.консоль) может и не быть.
> В случае если логин произведён не с помощью login(1), а через *dm, то и
> управляющий терминал (/dev/tty) не является вирт.консолью, не говоря уже о
> /dev/console.

Но у самой утилиты терминал должен быть.

> Тут есть одна ошибка и одна неточность:
> Ошибка в слове "the": поскольку утилита пытается получить дескриптор любой
> подходящей вирт.консоли, определённый артикль тут неуместен.

Я думаю, что "the" потому что имеется ввиду терминал на конкретном компьютере.

> Итого, я предлагаю заменить "the console" на "a virtual console". :)
> Если хочется покороче, то можно написать так:
> Couldn't find a suitable virtual console

Всё это косметические изменения и вносить их без крайней нужды мне не хочется так как предётся править ещё и все переводы. Было бы понятно если бы сообщение было в корне неправильное или не отражало сути проблемы.

Я постараюсь не забыть исправить эту фразу, когда буду вносить изменения, требующие усилий локализаторов.
Comment 8 Andrey Cherepanov 2010-09-02 21:16:47 MSD
(В ответ на комментарий №7)
> Я постараюсь не забыть исправить эту фразу, когда буду вносить изменения,
> требующие усилий локализаторов.
Надеюсь на это. Баг закрываю.
Comment 9 Alexey Gladkov 2010-09-03 11:12:59 MSD
(В ответ на комментарий №8)
> Надеюсь на это. Баг закрываю.

Я рад, что решением "неверная диагностика при недостаточности прав доступа" исправляется для _тебя_ заменой в сообщении "the console" на "a virtual console".
Шикарно.
Comment 10 Andrey Cherepanov 2010-09-03 15:13:28 MSD
(В ответ на комментарий №9)
> (В ответ на комментарий №8)
> > Надеюсь на это. Баг закрываю.
> 
> Я рад, что решением "неверная диагностика при недостаточности прав доступа"
> исправляется для _тебя_ заменой в сообщении "the console" на "a virtual
> console".
> Шикарно.
Я просто знаю, что от тебя большего не дождёшься. :)