Есть ли способ отключить команду инициализации cvs для демона cvsd? - PullRequest
0 голосов
/ 16 ноября 2009

Есть ли способ запретить пользователям делать 'cvs init'?

'cvs init' создает новый репозиторий. В документе говорится, что это безопасная операция в существующем хранилище, поскольку он не перезаписывает файлы. Но проблема в том, что административные файлы в CVSROOT будут изменены.

Например, у нас есть скрипт CVSROOT / loginfo, который отправляет информацию о коммитах в почтовую группу. После выполнения cvs init для этого репозитория он заменяется «чистой» версией.

Мы используем cvs 1.12.13 на linux box, работающем как автономный сервер, и подключаемся в основном из windows, используя протокол pserver.

Установка прав в CVSROOT не помогла, потому что демон cvsd работает от имени пользователя root. (Необходимо включить в исполняющего пользователя).

Проблема в том, что некоторые пользователи, не очень знакомые с cvs, пытались создать cvs init вместо cvs import для создания нового модуля.

1 Ответ

0 голосов
/ 17 ноября 2009

Я предполагаю, что у вас есть полномочия системного администратора над машинами. Вы можете предоставить оболочку для реального двоичного файла CVS, чтобы предотвратить выполнение определенных команд, и сохранить эту оболочку таким образом, чтобы она была подобрана перед настоящим CVS. Это что-то вроде хака, но в крайнем случае это сработает:

#!/bin/bash

REAL_CVS=/usr/bin/cvs

case $1 in
  init)
  echo "The use of $1 is restricted. Contact your CVS administrator"
  exit 1
esac

$REAL_CVS $*`

Другой вариант - перекомпилировать клиент CVS, чтобы отключить команду init. Взгляните на:

http://cvs.savannah.gnu.org/viewvc/cvs/ccvs/src/client.c?revision=1.483&view=markup

Было бы тривиально изменить эту функцию для распечатки чего-либо.

void
send_init_command (void)
{
    /* This is here because we need the current_parsed_root->directory variable.  */
    send_to_server ("init ", 0);
    send_to_server (current_parsed_root->directory, 0);
    send_to_server ("\012", 0);
}
...