Git -http-backend и ldap-аутентификация, push-ошибка: запрошенная ошибка URL-адреса: 401 Требуется авторизация


Моя настройка:

ОС: debian
git v 1.7.10
apache (с поддержкой режима suexec) с поддержкой git -http-backend и ldap для git repos wchich работает для операций клонирования, но не работает для push и что проблема. Я использую https как протокол связи для моего сервера git.
Здесь моя конфигурация:

Конфигурация VirtualHost:

<IfModule mod_ssl.c>
<VirtualHost _default_:443>

    DocumentRoot /git/myrepos

    <Directory "/git/myrepos">
    Allow from All
    Options +ExecCGI
    AllowOverride All
    </Directory>

ScriptAlias /git /git/myrepos/bin/suexec-wrapper.sh
SSLEngine on
SSLCertificateFile    /etc/ssl/git.crt
SSLCertificateKeyFile /etc/ssl/git.key

<FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
        SSLOptions +StdEnvVars
    </Directory>


/git/myrepos/bin/suexec-wrapper.sh:

#!/bin/bash
PATH_INFO=$SCRIPT_URL
GIT_PROJECT_ROOT=/git/myrepos
REMOTE_USER=$REDIRECT_REMOTE_USER
export GIT_HTTP_EXPORT_ALL=true
/usr/lib/git-core/git-http-backend


Клонирование репозиториев работает так, как должно (например, git clone https://192.168.0.1/repo1.git): оно принимает учетные данные для пользователя ldap и клонирует репо.
И при нажатии репо (например, git нажмите начальный мастер): он запрашивает учетные данные, принимает их и затем выдает ошибку:

error: Cannot access URL https://192.168.0.1/repo1.git/, return code 22
fatal: git-http-push failed


При запуске push в режиме verbose (GIT_CURL_VERBOSE=1 git push origin master) он запрашивает учетные данные, принимает их и (хвост вывода):

* STATE: DO => DO_DONE handle 0x1cdd270; (connection #0)
* STATE: DO_DONE => WAITPERFORM handle 0x1cdd270; (connection #0)
* STATE: WAITPERFORM => PERFORM handle 0x1cdd270; (connection #0)
* additional stuff not fine transfer.c:1037: 0 0
* The requested URL returned error: 401
* Closing connection #0
* Expire cleared
error: Cannot access URL https://192.168.0.1/repo1.git/, return code 22
fatal: git-http-push failed

Я настраиваю apache git -http-backend (с оберткой script?) правильно?
И что может вызвать проблему с нажатием кнопки?
Как отладить его более подробно?
Любые предложения очень ценятся!
С уважением

Ответ 1

После многих попыток я нашел решение:)
Проблема заключалась в неправильной конфигурации VirtualHost для git -http-backend.
Здесь моя рабочая конфигурация:

<IfModule mod_ssl.c>
<VirtualHost _default_:443>

        DocumentRoot /git/myrepos

        SetEnv GIT_PROJECT_ROOT /git/myrepos
        SetEnv GIT_HTTP_EXPORT_ALL
        ScriptAlias /myrepos/ /usr/lib/git-core/git-http-backend
        AliasMatch ^/myrepos/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /git/myrepos/$1
        AliasMatch ^/repos/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /git/myrepos/$1

        ScriptAliasMatch "(?x)^/(.*/(HEAD | info/refs | objects/(info/[^/]+ | [0-9a-f]{2}/[0-9a-f]{38} | pack/pack-[0-9a-f]{40}\.(pack|idx)) | git-(upload|receive)-pack))$" /usr/lib/git-core/git-http-backend/$1

        <Directory "/usr/lib/git-core/">
        Options +ExecCGI
        Allow From All
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined

        SSLEngine on
        SSLCertificateFile    /etc/ssl/git.crt
        SSLCertificateKeyFile /etc/ssl/git.key

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

        BrowserMatch "MSIE [2-6]" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown


<Location /repo1.git>
Order deny,allow
Deny from all
Allow from all
AuthName "GIT Authentication"
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPBindDN domain\user
AuthLDAPBindPassword passwd
AuthLDAPURL ldap://ldap.server:389/ou=git,DC=domain?sAMAccountName
Require ldap-group cn=git_repo1,ou=git,dc=domain
</Location>

</VirtualHost>
</IfModule>


Теперь все операции git корректно работают с git -http-backend через https с авторизацией ldap:)
Может быть, это будет полезно для кого-то.