Dump / show ACL dans l'écran GNU

J'essaie de créer une interface pour faciliter l'installation de l'ACL à l'écran. Le réglage ACL est assez simple, mais je ne peux pas trouver un moyen de montrer ou de supprimer la ACL existante. Un regard dans les archives de cette liste m'a montré que je ne suis pas le seul dans cette situation. Cependant, la question précédente sur ce sujet semble n'avoir jamais été répondu.

Existe-t-il un moyen de voir l'ACL existante dans l'écran actuellement? Mieux encore, y at-il un moyen de les jeter à un fichier / stdout?

Selon ce mode d'emploi sur l'écran multi-utilisateur , il n'existe actuellement pas d'interface pour les ACL internes de l'écran. Ce manuel contient le manuel de l' écran ; Ni les sections Commandes ni les sessions multi-utilisateur ne donnent d'autres commandes liées à la LCA. Voici la liste complète:

  • Acladd – Ajoute des utilisateurs avec une autorisation complète à toutes les fenêtres.
  • Aclchg – Ajoute des utilisateurs avec des autorisations plus flexibles ou modifie les autorisations d'un utilisateur existant.
  • Acldel – Supprime un utilisateur de la connaissance de l'écran.
  • Aclgrp – Ajoute un utilisateur à un groupe ou décrit simplement l'appartenance à un groupe d'utilisateurs.
  • Aclumask – Définit les autorisations par défaut pour Windows non encore créées.
  • Defescape – Like escape, mais définit le caractère de commande pour tous les utilisateurs.
  • Defwritelock – Définit le paramètre writelock par défaut pour les nouvelles fenêtres.
  • Multi – utilisateur – Active ou désactive le mode multi-utilisateur.
  • Su – Opérer comme un utilisateur différent.
  • Writelock – Définit le mode writelock pour la fenêtre actuelle.

Je ne connais pas les composants internes de l'écran, mais si vous souhaitez accéder aux ACL d'écran d'une manière autre que ces commandes, vous devez vérifier la source directement. Votre projet semble être très bénéfique pour la communauté Screen, alors je vous souhaite bonne chance pour la mettre en œuvre.


Si vous regardez src/acls.h , vous verrez les structures du groupe aclusergroup et acluser ; Il y a aussi une struct acl dans src/screen.h . Ce sont les structures de données de base; Il semble que les ACL d'écran sont essentiellement une liste liée de nœuds de aclusergroup d' aclusergroup , le nœud d'utilisateur contenant la plupart des données intéressantes.

src/acls.c contient le code de manipulation ACL; Par exemple, les commandes acladd et aclchg sont traitées par la fonction UserAcl() (ligne 864).

La structure ressemble à ceci:

 /* 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; 

Le code ACL semble être inclus lorsque l'écran est compilé avec MULTIUSER (même si je ne suis pas sûr si cela est défini sur la ligne de commande ou dans un autre fichier d'en-tête), alors la recherche de ce mot-clé peut vous aider à trouver un code multi-utilisateur spécifique.