Dump / show ACL na tela GNU

3

Estou tentando criar uma interface para facilitar a configuração da ACL na tela. Configurar a ACL é muito fácil, no entanto, não consigo encontrar uma maneira de mostrar ou descarregar a ACL existente. Um olhar nos arquivos dessa lista me mostrou que eu não sou o único nessa situação. No entanto, a pergunta anterior sobre este assunto parece nunca ter sido respondida .

Existe uma maneira de ver a ACL existente na tela atualmente? Melhor ainda, existe uma maneira de despejá-los em um arquivo / stdout?

    
por ℝaphink 02.02.2010 / 15:22

1 resposta

3

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.

    
por 11.02.2010 / 19:40