Skip to contentSkip to conversation

Fail to push over HTTP with MySQL authentication (Apache2)

DISCUSSION Davide Baldini 2 participants 3 messages Jun 15, 2016

lore
Share & tools
lore
#0 lore raw

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:[email protected]: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"

#1 lore raw
Quoted 9 lines · Davide Baldini

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.

Quoted 8 lines

_ Git:
Git can fetch the repository without problems:
git clone http://username:[email protected]:8081/GT00.git

Pushing the locally fetched repository back to the remote one doesn't work:
[...]

Quoted 1 line

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

#2 lore raw
Quoted 4 lines · Jeff King

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:

Quoted 4 lines

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