В соответствии с это практическое руководство на многопользовательском экране в настоящее время нет интерфейса для внутренних ACL-списков Screen. Это джайвы с Руководство по экрану ; ни команды ни Многопользовательская сессия секции дают любые другие связанные с ACL команды. Вот полный список:
- acladd - Добавляет пользователей с полным разрешением для всех окон.
- aclchg - Добавляет пользователей с более гибкими разрешениями или изменяет разрешения для существующего пользователя.
- acldel - Удаляет пользователя из экрана знаний.
- aclgrp - Добавляет пользователя в группу или просто описывает членство пользователя в группе.
- aclumask - Устанавливает разрешения по умолчанию для окон, которые еще не созданы.
- defescape - Как и escape, но устанавливает символ команды для всех пользователей.
- defwritelock - Устанавливает настройку записи по умолчанию для новых окон.
- многопользовательский - Включает или отключает многопользовательский режим.
- су - Работать от имени другого пользователя.
- блокировку записи - Устанавливает режим блокировки записи для текущего окна.
Я не знаком с внутренними компонентами Screen, но если вы хотите получить доступ к ACL-спискам Screen способом, отличным от разрешенного этими командами, вам необходимо проверьте источник непосредственно. Ваш проект звучит так, как будто он будет очень полезен для сообщества Screen, поэтому я желаю вам удачи в его реализации.
Если вы посмотрите на src/acls.h
вы увидите структуры aclusergroup
а также acluser
; есть также структура acl
в src/screen.h
, Это основные структуры данных; похоже, что списки управления доступом к экрану - это, по сути, связанный список 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
(хотя я не уверен, определено ли это в командной строке или в каком-либо другом заголовочном файле), поэтому поиск по этому ключевому слову может помочь вам найти определенный многопользовательский код.