J'ai installé git et gitosis et j'ai besoin d'ajouter une vérification que le nom d'utilisateur est valide quand quelque chose est poussé dans le dépôt. Je pense que le crochet de pré-réception est le bon crochet pour le placer, mais je n'arrive pas à trouver le vrai nom d'utilisateur et l'adresse e-mail que gitosis entre dans le dépôt (ceux définis par git config user.name et git config user.email) à partir de variables d'environnement. LOGNAME et USER sont tous deux «git». Comment la gitose détecte-t-elle cette information et puis-je la trouver dans le crochet de pré-réception?Git/gitose: Comment vérifier la validité du nom d'utilisateur et du courrier électronique?
Répondre
Hmm, à partir de ce que je comprends de githooks(5)
le crochet pre-receive
est nourri les refs mis à jour sur stdin
.
#!/bin/sh
while read old new name; do
email=$(git log -1 --pretty=format:%ae $new)
# check email
done
Vous devrez vérifier les adresses e-mail (il peut y avoir plus d'une ligne de données) et quitter le script en conséquence, à savoir exit 0
pour le succès et, par exemple exit 1
pour l'échec.
Ajout os.environ [ 'WHATVER_USER'] = utilisateur à ~ ligne 202 serve.py devrait faire l'affaire ...
OK, nous avons réussi à faire le travail, la réponse ci-dessus a aidé Bombe beaucoup . Voici comment cela a été fait:
- I ajouté os.environ [ 'GITOSIS_USER'] = utilisateur Gitosis/Serve.py, la fonction principale() et réinstallée.
- J'ai ensuite créé le script de pré-réception suivant:
hooks/pre-receive
#!/usr/bin/perl
my $user = $ENV{'GITOSIS_USER'};
if ($user !~ m/^[^@][email protected][^@]+$/) {
print STDERR "Unknown user. Not running under Gitosis?\n";
exit 1;
}
my $fail = 0;
while(<STDIN>) {
if (m/^([0-9a-f]+)\s+([0-9a-f]+)\s+(\S+)$/) {
my $oldver = $1;
my $curver = $2;
my $ref = $3;
my $ret = open (FH, "-|", "git", "rev-list", '--pretty=format:%H:%ae:%ce',$
if ($ret) {
# great and less brakets hidden in HTML: >FH<
while (<FH>) {
chomp;
my $line = $_;
if ($_ !~ m/commit /) {
my ($rev, $author, $committer) = split(":", $line);
if ($author ne $user && $committer ne $user) {
print STDERR "Unauthorized commit: $rev\n";
$fail++;
}
}
}
}
}
}
if ($fail) {
exit 1;
}
exit 0;
Cela signifie que le nom d'utilisateur doit être le même que celui utilisé pour créer la clé ssh pour gitosis porte-clés.
Ce script est cassé de plusieurs façons. D'abord, la ligne open() est coupée. Après avoir corrigé cela, le script est entré dans une boucle infinie le premier while(), ne tentant même pas d'appeler git-rev-list.
Avec un peu d'aide de mes amis, je l'ai réussi à embellir un peu:
hooks/pre-receive
#!/usr/bin/perl
my $user = $ENV{'GITOSIS_USER'};
if ($user !~ m/^[^@][email protected][^@]+$/) {
print STDERR "Unknown user. Not running under Gitosis?\n";
exit 1;
}
my $fail = 0;
while(<STDIN>) {
if (m/^([0-9a-f]+)\s+([0-9a-f]+)\s+(\S+)$/) {
my $oldver = $1;
my $curver = $2;
my $ref = $3;
my $ret = open (FH, "-|", "git", "rev-list", '-- pretty=format:%H:%ae:%ce',"$oldver..$curver");
if ($ret) {
while (<FH>) {
chomp;
my $line = $_;
if ($_ !~ m/commit /) {
my ($rev, $author, $committer) = split(":", $line);
if ($author ne $user && $committer ne $user) {
print STDERR "Unauthorized commit: $rev\n";
print STDERR "You must specify Author and Committer.\n";
print STDERR "Specified a/c: $author/$committer\n";
print STDERR "Expected user: $user\n";
$fail++;
}
}
}
}
}
}
if ($fail) {
exit 1;
}
exit 0;
Vous pouvez vérifier <gitosis-path>/.ssh/authorized_keys
voir:
command="gitosis-serve [email protected]",...
homme Lire pour sshd
et trouvé : après command="command"
vous pouvez ajouter l'option environment="NAME=value"
pour définir les noms d'utilisateur souhaités pour vos clés publiques ssh. Et aucune modification Gitosis/Serve.py
requise.
traitement environnement est désactivé par défaut et est contrôlé par l'option PermitUserEnvironment
:
sudo echo "PermitUserEnvironment yes" >> /etc/ssh/sshd_config
- 1. Sauvegarde du courrier électronique
- 2. analyse du courrier électronique
- 3. Traitement du courrier électronique entrant
- 4. Comment trouver la validité du hashcode?
- 5. Comment utiliser le courrier électronique au lieu du nom d'utilisateur pour l'authentification de l'utilisateur?
- 6. php - vérifie la validité du guid
- 7. Détection du client Outlook 2007 dans le courrier électronique
- 8. Test du courrier électronique codé pour le japonais
- 9. fonction de courrier électronique
- 10. Vérification de la validité du numéro de version avec Perl
- 11. Vidéo dans le courrier électronique?
- 12. DTS Envoyer une tâche de courrier électronique envoie deux fois le courrier électronique
- 13. Visionneuse de courrier électronique HTML dans wxPython
- 14. Comment puis-je envoyer le contenu du fichier sous forme de courrier électronique en Perl?
- 15. Appel de la fonction d'impression/enregistrement/courrier électronique du plugin Adobe Reader dans le navigateur
- 16. Modification du format de courrier électronique Task Atdue dans le workflow d'approbation des documents MOSS 2007
- 17. Comment commencer à traiter le courrier électronique lié à l'activité du site Web?
- 18. SMTP d'envoi du courrier
- 19. Caractères sauvages consécutifs dans le courrier électronique
- 20. python: comment envoyer du courrier avec TO, CC et BCC?
- 21. Téléchargement de fichier et courrier électronique dans JSP
- 22. La liste déroulante du nom de la classe et du nom de la méthode est manquante (paramètre du studio visuel)
- 23. Courrier électronique utilisant Access et VBA sans MAPI
- 24. comment envoyer du courrier en python ssmtp vs smtplib
- 25. fonction d'envoi de courrier électronique deux fois
- 26. Comment extraire du courrier avec PHP?
- 27. Récupérer les valeurs MergeField à partir du document Word fusionné par courrier électronique
- 28. xml validité, ajax et php
- 29. Envoi du code de courrier dans ASP
- 30. Exception de connexion essayant d'envoyer un courrier électronique en Java
OK, qui répond à ma question, mais en fait, ma question n'a pas été le bon :(Ce que je vraiment besoin de voir est l'adresse e-mail utilisée par gitosis pour faire correspondre la clé ssh.La raison: nous avons un système autobuild qui a un accès limité.Tout le monde peut écrire dans le dépôt (donc l'accès à la gitose n'aide pas), mais seulement quelques-uns sont autorisés à construire. Supposons que j'ai la permission de construire, quelqu'un d'autre n'a besoin que de changer l'adresse e-mail (utilisateur git config).email) à la mine et il a également accès. J'aurais besoin de vérifier l'adresse e-mail utilisée par gitosis pour vérifier la clé ssh pour éviter cela. – Makis
Je n'ai jamais travaillé avec la gitose alors je ne peux pas vous aider, désolé. – Bombe
Désolé, j'ai testé et pour autant que je sache, cela ne fonctionne pas en pré-réception, car le journal ne contient que des événements validés. – Makis