threads / discuss / 32475

Fail to push over HTTP with MySQL authentication (Apache2)

Subject: Fail to push over HTTP with MySQL authentication (Apache2)

## tl;dr

3 messages between Dec 29, 2012 and Dec 30, 2012.

replies: 2people: 2as markdown or json

Davide Baldini· Dec 29, 2012, 19:54 UTC · lore
Hi,

I'm not able to setup a public Git repository over plain HTTP with MySQL authentication. Both HTTP and authentication are provided by Apache2.

SETUP: -----

This setup is performed on Debian 6.0.4.
Apache2 (v. 2.2), with modules:
    auth_mysql
    WebDAV
Git (v. 1.7.8.3)
Git repository location:
    local, for webserver: /var/www/public/GT_rulesets/GT00.git
    public, for Git:      http://greatturn.org:8081/GT00.git
Git repository has been configured as:
    cd /var/www/public/GT_rulesets/GT00.git
    git init --bare
    mv hooks/post-update.sample hooks/post-update
    git update server-info
    chmode 777 /var/www/public/GT_rulesets/GT00.git  # for testing.

FACTS: -----

The Apache side of my setup seems to work:
_   HTTP, MySQL authentication:
        I point Iceweasel to http://greatturn.org:8081/ .
        It asks for authentication; I authenticate with a username/
        password pair taken from MySQL database (which doesn't exist as
        a system user); It works, and I can see all the content of
        the git repository "GT00.git".
_   WebDAV:
        I point Konqueror to webdav://greatturn.org:8081/ .
        Works exactly as previous point.
_   Git:
        Git can fetch the repository without problems:
        git clone http://username:password@greatturn.org:8081/GT00.git
Pushing the locally fetched repository back to the remote one doesn't
work:
    "git push http://greatturn.org:8081/GT00.git master"
    asks for username and password:
        > Username for 'greatturn.org:8081':
        > Password for 'greatturn.org:8081':
    I enter my credentials, then git outputs the following and exits:
        > error: Cannot access URL http://greatturn.org:8081/GT00.git/,
return code 22
        > fatal: git-http-push failed
    On Apache's access.log, git produces all and no more than the
    following:
        > 87.19.240.177 - - [29/Dec/2012:16:43:22 +0100] "GET /GT00.git
/info/refs?service=git-receive-pack HTTP/1.1" 401 767 "-"
"git/1.7.8.3"
        > 87.19.240.177 - - [29/Dec/2012:16:43:26 +0100] "GET
/GT00.git/info/refs?service=git-receive-pack HTTP/1.1" 401 767 "-"
"git/1.7.8.3"
        > 87.19.240.177 - davide [29/Dec/2012:16:43:26 +0100] "GET
/GT00.git/info/refs?service=git-receive-pack HTTP/1.1" 200 233 "-"
"git/1.7.8.3"
        > 87.19.240.177 - davide [29/Dec/2012:16:43:26 +0100] "GET
/GT00.git/HEAD HTTP/1.1" 200 258 "-" "git/1.7.8.3"
        > 87.19.240.177 - - [29/Dec/2012:16:43:26 +0100] "PROPFIND
/GT00.git/ HTTP/1.1" 401 767 "-" "git/1.7.8.3"
Jeff King· Dec 29, 2012, 21:01 UTC · re: Davide Baldini · lore

Re: Fail to push over HTTP with MySQL authentication (Apache2)

On Sat, Dec 29, 2012 at 08:54:32PM +0100, Davide Baldini wrote:
Show 9 quoted lines
> SETUP:
> -----
> [...]
> Git repository has been configured as:
>     cd /var/www/public/GT_rulesets/GT00.git
>     git init --bare
>     mv hooks/post-update.sample hooks/post-update
>     git update server-info
>     chmode 777 /var/www/public/GT_rulesets/GT00.git  # for testing.

Should this last line be a "chmod -R"? Git init will create many subdirectories, and you want to make sure they are all writable for push.

Show 8 quoted lines
> _   Git:
>         Git can fetch the repository without problems:
>         git clone http://username:password@greatturn.org:8081/GT00.git
> 
> Pushing the locally fetched repository back to the remote one doesn't
> work:
> [...]
> > 87.19.240.177 - - [29/Dec/2012:16:43:26 +0100] "PROPFIND /GT00.git/ HTTP/1.1" 401 767 "-" "git/1.7.8.3"

If fetch is working and push is not, I'd suspect WebDAV configuration problems (and indeed, your credentials seem fine, but the PROPFIND is returning a 401). Fetch works over stock HTTP and does not use WebDAV at all. There is some documentation on setting up DAV here:

  https://github.com/git/git/blob/master/Documentation/howto/setup-git-server-over-http.txt
but I have no idea if it is up-to-date or not.

However, before trying to investigate that avenue, have you considered using git's smart-http backend instead of WebDAV? It's significantly more efficient. You can get details and example apache configuration from "git help http-backend".

-Peff
Davide Baldini· Dec 30, 2012, 00:27 UTC · re: Jeff King · lore

Re: Fail to push over HTTP with MySQL authentication (Apache2)

On 12/29/12 22:01, Jeff King wrote:
> However, before trying to investigate that avenue, have you considered
> using git's smart-http backend instead of WebDAV? It's significantly
> more efficient. You can get details and example apache configuration
> from "git help http-backend".

Thank you for the suggestions, I've been able to have the setup running. I abandoned the horrible WebDAV in favour of Smart HTTP, and it's been quite straightforward to configure and run successfully.

There is some documentation on setting up DAV here:
> 
>   https://github.com/git/git/blob/master/Documentation/howto/setup-git-server-over-http.txt
> 
> but I have no idea if it is up-to-date or not.

No it's not up-to-date. It should refer to Apache versions <2.0 . Some of its config directives are inexistent in modern Apaches.

- Davide

← back to recent threads