Я пытаюсь сделать интерфейс, чтобы помочь установить ACL на экране. Установка ACL довольно легка, однако, я не могу найти способ показать или вывести существующий ACL. Взгляд в архивах этого списка показал мне, я не единственный в этой ситуации. Однако на предыдущий вопрос на этом предмете, кажется, никогда не отвечали.
Существует ли способ видеть существующий ACL на экране в настоящее время? Еще лучше существует ли способ вывести их к file/stdout?
Согласно этому практическому руководству на многопользовательском Экране, в настоящее время нет интерфейса к внутреннему ACLs Экрана. Это танцует джайв с Экранным руководством; ни Команды, ни Многопользовательские разделы Сессии не дают никакие другие связанные с ACL команды. Вот полный список:
Я незнаком с внутренностями Экрана, но если Вы хотите получить доступ к Экрану ACLs способом кроме этих команд, позволяют, необходимо будет проверить источник непосредственно. Ваш проект кажется, что это будет очень выгодно для Экранного сообщества, таким образом, я пожелаю Вам удачи в реализации его.
Если Вы смотрите на src/acls.h
, Вы будете видеть структуры aclusergroup
и acluser
; существует также структура acl
в src/screen.h
. Это структуры основных данных; похоже, что Экран ACLs по существу связанный список 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
(хотя я не уверен, определяется ли это на командной строке или в некотором другом заголовочном файле), таким образом искание того ключевого слова может помочь Вам найти определенный многопользовательский код.