2009-11-16 3 views
0

Есть ли способ предотвратить использование пользователями cvs init?Есть ли способ отключить команду cvs init для демона cvsd?

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

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

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

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

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

ответ

0

Я предполагаю, что у вас есть полномочия sysadmin над машинами. Вы можете предоставить оболочку вокруг реального 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, чтобы отключить команду инициализации. Посмотрите на:

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); 
} 
+0

Gah - демон CVS, я неправильно прочитал. Таким образом, мой ответ не является релевантным, но все же отличным: запретить клиентам выдавать команду init. Кроме того, вы можете перестроить источники демона CVS, чтобы полностью отключить команду init, и вам не придется менять ни одного из клиентов. – apbianco

+0

Спасибо за ваш ответ. Как вы упомянули, это не сработает, потому что мы используем cvs в режиме pserver. Конечно, изменение всех клиентов будет работать, но слишком громоздко. Хуже того, используются разные клиенты (TortoiseCVS, WinCVS, командная строка на обоих окнах и Linux). Поэтому решение должно работать на стороне сервера. – 2009-11-18 11:31:33

Смежные вопросы