2009-11-16 5 views
0

Existe-t-il un moyen d'empêcher les utilisateurs de faire 'cvs init'? 'Cvs init' crée un nouveau référentielY at-il un moyen de désactiver la commande cvs init pour le démon cvsd?

Le doc dit que c'est une opération sûre sur un dépôt existant, car il n'écrase aucun fichier. Mais le problème est, les fichiers administratifs dans CVSROOT seront modifiés. Par exemple, nous avons un script CVSROOT/loginfo qui envoie des informations de validation à un groupe de diffusion. Par exemple, nous avons un script CVSROOT/loginfo. Après avoir fait cvs init sur ce repo, il est remplacé par une version 'clean'.

Nous utilisons cvs 1.12.13 sur une machine linux fonctionnant comme un serveur autonome et nous nous connectons principalement à partir de Windows en utilisant le protocole pserver.

La définition des droits dans CVSROOT n'a pas aidé car le démon cvsd s'exécute en tant que root. (Il doit incorporer dans l'utilisateur exécutant).

Le problème est que certains utilisateurs pas très familiers avec cvs ont essayé 'cvs init' au lieu de 'cvs import' pour créer un nouveau module.

Répondre

0

Je suppose que vous avez l'autorité sysadmin sur les machines. Vous pouvez fournir un wrapper autour du binaire CVS réel pour empêcher certaines commandes de s'exécuter et stocker ce wrapper de telle manière qu'il soit récupéré avant le CVS réel. Il est un peu un hack mais dans une pincée, il travaillerait:

#!/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 $*` 

Une autre option serait de recompiler le client CVS pour désactiver la commande init. Jetez un oeil à:

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

Il serait trivial de modifier cette fonction pour imprimer quelque chose.

 
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 - démon CVS, j'ai mal lu. Donc, ma réponse n'est pas si pertinente, mais encore une sorte de stand: empêcher les clients d'émettre la commande init. Alternativement, vous pouvez reconstruire les sources du démon CVS pour désactiver entièrement la commande init et vous n'aurez pas à modifier les clients. – apbianco

+0

Merci pour votre réponse. Comme vous l'avez mentionné, cela ne fonctionnera pas car nous utilisons cvs en mode pserver. La modification de tous les clients fonctionnerait, bien sûr, mais serait trop lourde. Pire, il existe différents clients en cours d'utilisation (TortoiseCVS, WinCVS, ligne de commande sur les deux fenêtres et Linux). La solution devrait donc fonctionner du côté serveur. –

Questions connexes