Дамп / показать ACL на экране GNU

2196
ℝaphink

Я пытаюсь сделать интерфейс, чтобы было проще установить ACL на экране. Настройка ACL довольно проста, однако я не могу найти способ показать или вывести существующий ACL. Просмотр архивов этого списка показал, что я не единственный в этой ситуации. Тем не менее, предыдущий вопрос по этому вопросу, кажется, так и не получил ответа.

Есть ли способ увидеть существующий ACL на экране в настоящее время? А еще лучше, есть ли способ вывести их в файл / стандартный вывод?

3
getacl и getfacl не помогают? Dan McGrath 14 лет назад 0
Нет, эти команды неизвестны на экране 4.0.3. ℝaphink 14 лет назад 0
Извините, SuperMagic выяснил, что вы имели в виду. Я говорю о пользовательском ACL на экране, использующем многопользовательский режим, а не о файловом ACL Linux. ℝaphink 14 лет назад 0

1 ответ на вопрос

3
quack quixote

Согласно этой инструкции на многопользовательском экране, в настоящее время нет интерфейса для внутренних ACL-списков Screen. Это сочетается с руководством по экрану ; ни разделы « Команды», ни « Многопользовательская сессия» не дают никаких других команд, связанных с ACL. Вот полный список:

  • acladd - добавляет пользователей с полным разрешением для всех окон.
  • aclchg - добавляет пользователей с более гибкими разрешениями или изменяет разрешения для существующего пользователя.
  • acldel - удаляет пользователя из знаний экрана.
  • aclgrp - добавляет пользователя в группу или просто описывает членство пользователя в группе.
  • aclumask - устанавливает разрешения по умолчанию для окон, которые еще не созданы.
  • defescape - как escape, но устанавливает символ команды для всех пользователей.
  • defwritelock - устанавливает настройки блокировки записи по умолчанию для новых окон.
  • многопользовательский - включает или отключает многопользовательский режим.
  • su - работать как другой пользователь.
  • writelock - устанавливает режим блокировки записи для текущего окна.

Я не знаком с внутренними компонентами Screen, но если вы хотите получить доступ к ACL-спискам Screen способом, отличным от разрешенного этими командами, вам нужно будет проверить источник напрямую. Ваш проект звучит так, как будто он будет очень полезен для сообщества Screen, поэтому я желаю вам удачи в его реализации.


Если вы посмотрите на src/acls.h, вы увидите структуры aclusergroupи acluser; есть также структура aclв src/screen.h. Это основные структуры данных; Похоже, что ACL-списки экранов представляют собой по существу связанный список aclusergroupузлов, причем acluserузел содержит большую часть интересных данных.

src/acls.cсодержит код манипуляции ACL; например, acladdи aclchgкоманды и обрабатываются с помощью функции UserAcl()(строка 864).

Структура выглядит так:

/* in screen.h */ struct acl { struct acl *next; char *name; };  /* in acls.h */ /* * How a user joins a group. * Here is the node to construct one list per user. */ struct aclusergroup { struct acluser *u; /* the user who borrows us his rights */ struct aclusergroup *next; };  /* ... */  /* * A User has a list of groups, and points to other users.  * users is the User entry of the session owner (creator) * and anchors all other users. Add/Delete users there. */ typedef struct acluser { struct acluser *u_next; /* continue the main user list */ char u_name[20+1]; /* login name how he showed up */ char *u_password; /* his password (may be NullStr). */ int u_checkpassword; /* nonzero if this u_password is valid */ int u_detachwin; /* the window where he last detached */ int u_detachotherwin; /* window that was "other" when he detached */ int u_Esc, u_MetaEsc; /* the users screen escape character */ #ifdef COPY_PASTE struct plop u_plop; /* internal copy-paste buffer */ #endif #ifdef MULTIUSER int u_id; /* a uniq index in the bitfields. */ AclBits u_umask_w_bits[ACL_BITS_PER_WIN]; /* his window create umask */ struct aclusergroup *u_group; /* linked list of pointers to other users */ #endif } User; 

Код ACL, кажется, включается при компиляции экрана MULTIUSER(хотя я не уверен, определен ли он в командной строке или в каком-либо другом заголовочном файле), поэтому поиск по этому ключевому слову может помочь вам найти определенный многопользовательский код.

Спасибо, шарлатан. К сожалению, мои навыки С довольно плохие. Я посмотрел на код, и я не совсем понимаю, как команды связаны с функциями в acls.c, но я мог бы попытаться посмотреть позже. ℝaphink 14 лет назад 0
@Raphink: начать с acls.h; вот где хранятся структуры данных. обновлено с тем, что я могу различить. это относится к территории переполнения стека, поэтому, если вы хотите получить больше информации, чем я могу предоставить здесь, вам следует открыть там вопрос. quack quixote 14 лет назад 0
Я приму это как ответ, так как сейчас нет способа достичь этого, и вы предоставляете необходимую информацию для ее реализации (когда у меня есть мотивация, чтобы взломать ее). ℝaphink 13 лет назад 0