有没有办法禁用cvsd守护进程的cvs init命令?

时间:2009-11-16 15:05:32

标签: linux cvs

有没有办法阻止用户进行'cvs init'?

'cvs init'创建一个新的存储库。该文档说它是对现有存储库的安全操作,因为它不会覆盖任何文件。但问题是,CVSROOT中的管理文件将被更改。

例如,我们有一个CVSROOT / loginfo脚本,它将提交信息邮寄给邮件组。在该repo上执行cvs init之后,它将被“干净”版本替换。

我们在作为独立服务器运行的linux机器上使用cvs 1.12.13,并使用pserver协议主要从windows连接。

在CVSROOT中设置权限没有帮助,因为cvsd守护程序以root身份运行。 (它需要合并到执行用户)。

问题是,一些不熟悉cvs的用户尝试'cvs init'而不是'cvs import'来创建一个新模块。

1 个答案:

答案 0 :(得分: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客户端以禁用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);
}