【问题标题】:Is there a way to disable the cvs init command for the cvsd daemon?有没有办法禁用 cvsd 守护进程的 cvs init 命令?
【发布时间】:2009-11-16 15:05:32
【问题描述】:

有没有办法阻止用户执行 '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' 来创建新模块。

【问题讨论】:

    标签: linux cvs


    【解决方案1】:

    我假设您对机器拥有系统管理员权限。您可以为真正的 CVS 二进制文件提供一个包装器,以防止某些命令运行,并以这样一种方式存储这个包装器,以便它在真正的 CVS 之前被拾取。这有点小技巧,但在紧要关头,它会起作用:

    #!/bin/bash
    
    REAL_CVS=/usr/bin/cvs
    
    案例 1 美元
      在里面)
      echo "$1 的使用受到限制。请联系您的 CVS 管理员"
      1号出口
    经社理事会
    
    $REAL_CVS $*`
    

    另一种选择是重新编译 CVS 客户端以禁用 init 命令。看看:

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

    修改这个函数来打印出一些东西是微不足道的。

    空白 send_init_command(无效) { /* 这是因为我们需要 current_parsed_root->directory 变量。 */ 发送到服务器(“初始化”,0); send_to_server (current_parsed_root->directory, 0); send_to_server ("\012", 0); }

    【讨论】:

    • Gah -- CVS 守护进程,我看错了。所以我的回答不是那么相关,但仍然有点立场:阻止客户端发出 init 命令。或者,您可以重建 CVS 守护程序源以完全禁用 init 命令,而无需更改任何客户端。
    • 感谢您的回答。正如您所提到的,这不起作用,因为我们在 pserver 模式下使用 cvs。修改所有客户端当然可以,但是太麻烦了。更糟糕的是,使用了不同的客户端(TortoiseCVS、WinCVS、windows 和 linux 上的命令行)。所以解决方案应该在服务器端工作。
    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 2020-02-21
    • 2015-11-09
    相关资源
    最近更新 更多