2009-11-16 2 views
0

사용자가 'cvs init'을 할 수 없게하는 방법이 있습니까?cvsd 데몬에 대해 cvs init 명령을 비활성화하는 방법이 있습니까?

'cvs init'은 새 저장소를 만듭니다. 의사는 파일을 덮어 쓰지 않으므로 기존 저장소에서 안전한 작업이라고 말합니다. 그러나 문제는 CVSROOT의 관리 파일이 변경된다는 것입니다.

예를 들어 메일 그룹에 커밋 정보를 메일로 보내는 CVSROOT/loginfo 스크립트가 있습니다. repo에서 cvs init을 수행 한 후 '깨끗한'버전으로 대체됩니다.

독립 실행 형 서버로 실행되는 Linux 상자에서 cvs 1.12.13을 사용하고 대부분 pserver 프로토콜을 사용하여 창에서 연결합니다.

CVSROOT에서 권한을 설정해도 도움이되지 않았습니다. cvsd 데몬이 루트로 실행되기 때문입니다. (실행중인 사용자와 통합해야합니다.)

문제점 : cvs에 익숙하지 않은 일부 사용자는 새로운 모듈을 만들기 위해 'cvs import'대신 'cvs init'을 시도했습니다.

답변

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 $*` 

타 옵션은 init 명령을 해제하려면 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

답장을 보내 주셔서 감사합니다. 앞에서 언급했듯이 pserver 모드에서 cvs를 사용하기 때문에 작동하지 않습니다. 모든 클라이언트를 수정하는 것은 물론 효과가 있지만 너무 복잡합니다. 더 나쁜 것은 사용중인 다른 클라이언트가 있다는 것입니다 (TortoiseCVS, WinCVS, Windows와 Linux의 명령 행). 따라서 솔루션은 서버 측에서 작동해야합니다. –

관련 문제