De acordo com este tutorial sobre a tela multiusuário , atualmente não há uma interface para as ACLs internas da Tela. Isso é feito com o Manual de tela ; nem os Comandos nem Multiuser Session fornecem quaisquer outros comandos relacionados à ACL. Aqui está a lista completa:
- acladd - Adiciona usuários com permissão total a todas as janelas.
- aclchg - Adiciona usuários com permissões mais flexíveis ou altera as permissões de um usuário existente.
- acldel - Remove um usuário do conhecimento da tela.
- aclgrp - Adiciona um usuário a um grupo ou apenas descreve a participação no grupo do usuário.
- aclumask - Define permissões padrão para janelas ainda não criadas.
- defescape - Como escape, mas define o caractere de comando para todos os usuários.
- defwritelock - Define a configuração padrão do bloqueio de escrita para novas janelas.
- multiuser - Ativa ou desativa o modo multiusuário.
- su - Opere como um usuário diferente.
- writelock - Define o modo de gravação para a janela atual.
Não estou familiarizado com os recursos internos do Screen, mas se você quiser acessar as ACLs de tela de uma maneira diferente desses comandos, será necessário verifique a fonte diretamente. Seu projeto parece ser muito benéfico para a comunidade Screen, então desejo a você boa sorte em implementá-lo.
Se você olhar para src/acls.h
, você veja as estruturas aclusergroup
e acluser
; há também uma estrutura acl
em src/screen.h
. Estas são as estruturas básicas de dados; parece que as ACLs de tela são essencialmente uma lista vinculada de aclusergroup
nós, com o nó acluser
contendo a maioria dos dados interessantes.
src/acls.c
contém o código de manipulação da ACL; por exemplo, os comandos acladd
e aclchg
são manipulados pela função UserAcl()
(linha 864).
A estrutura é assim:
/* 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;
O código ACL parece estar incluído quando a tela é compilada com MULTIUSER
(embora eu não tenha certeza se isso é definido na linha de comando ou em algum outro arquivo de cabeçalho), então procurar por essa palavra-chave pode ajudá-lo a encontrar multiusuários específicos código.