Git/gitosis: Как проверить законность имени пользователя и электронной почты?

Это должно сработать, благодаря ценным данным @Socowi:

while read -r f1 f2 #store values of each row for first column and second
do

    mkdir "dir${f2}" #makes directory with the name
    mv ${f1}.* "dir${f2}/" #moves all the files with the class name to that directory 

done < <(tail +2 file.csv) #reads file line by line except first

PS file.csv - это файл, содержащий классы, их имена и т. Д., Количество файлов не имеет значения.

12
задан Makis 5 May 2009 в 03:00
поделиться

4 ответа

Хм, как я понял из githooks (5) , ловушка pre-receive получает обновленные ссылки на stdin .

#!/bin/sh

while read old new name; do
    email=$(git log -1 --pretty=format:%ae $new)
    # check email
done

Вам необходимо проверить адреса электронной почты (может быть более одной строки данных) и соответствующим образом выйти из сценария, например, , выйти 0 для успеха и, например, выйти 1 [1111572. ] за неудачу.

9
ответ дан 26 October 2019 в 11:50
поделиться

OK, we managed to get the job done, Bombe's reply above helped a lot. This is how it was done:

  • I added os.environ['GITOSIS_USER'] = user to Gitosis/Serve.py, function Main() and reinstalled it.
  • I then created the following pre-receive script:

hooks/pre-receive

#!/usr/bin/perl

my $user = $ENV{'GITOSIS_USER'};

if ($user !~ m/^[^@]+@[^@]+$/ ) {
  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: &gt;FH&lt;
      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;

This means the user name has to be the same as the one used to create the ssh key for gitosis key ring.

5
ответ дан 26 October 2019 в 11:50
поделиться

Добавление os.environ ['WHATVER_USER'] = пользователь в ~ строке 202 в serve.py должен сделать свое дело ...

1
ответ дан 26 October 2019 в 11:50
поделиться

Этот скрипт не работает по нескольким причинам. Сначала обрезается линия open (). После того, как я исправил это, сценарий вошел в бесконечный цикл при первом while (), даже не пытаясь вызвать git-rev-list.

С небольшой помощью моих друзей мне удалось немного его улучшить:

hooks / pre-receive

#!/usr/bin/perl

my $user = $ENV{'GITOSIS_USER'};

if ($user !~ m/^[^@]+@[^@]+$/ ) {
  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;

2
ответ дан 26 October 2019 в 11:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: