Дамп / показать ACL на экране GNU

3

Я пытаюсь сделать интерфейс, чтобы было проще установить ACL на экране. Установить ACL довольно легко, однако я не могу найти способ показать или вывести существующий ACL. Просмотр архивов этого списка показал, что я не единственный в этой ситуации. Тем не менее, предыдущий вопрос на эту тему кажется, никогда не отвечал.

Есть ли способ увидеть существующий ACL на экране в настоящее время? А еще лучше, есть ли способ вывести их в файл / стандартный вывод?

ℝaphink
источник
getacl и getfacl не помогают?
Dan McGrath
Нет, эти команды неизвестны на экране 4.0.3.
ℝaphink
Извините, SuperMagic выяснил, что вы имели в виду. Я говорю о пользовательских ACL на экране, использующих многопользовательский режим, а не о файловых ACL в Linux.
ℝaphink

Ответы:

3

В соответствии с это практическое руководство на многопользовательском экране в настоящее время нет интерфейса для внутренних 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 (хотя я не уверен, определено ли это в командной строке или в каком-либо другом заголовочном файле), поэтому поиск по этому ключевому слову может помочь вам найти определенный многопользовательский код.

quack quixote
источник
Спасибо, шарлатан. К сожалению, мои навыки Си довольно плохие. Я взглянул на код, и я не очень понимаю, как команды связаны с функциями в acls.c, но я мог бы попытаться посмотреть позже.
ℝaphink
@Raphink: начать с acls.h; вот где хранятся структуры данных. обновлено с тем, что я могу различить. это относится к территории переполнения стека, поэтому, если вы хотите получить больше информации, чем я могу предоставить здесь, вам следует открыть там вопрос.
quack quixote
Я приму это как ответ, так как сейчас нет способа достичь этого, и вы предоставляете необходимую информацию для ее реализации (когда у меня достаточно мотивации, чтобы взломать ее).
ℝaphink