* RUNTIME_PREFIX references in gitconfig variable paths @ 2018-07-04 6:08 Paul Smith 2018-07-04 11:26 ` Johannes Schindelin 0 siblings, 1 reply; 4+ messages in thread From: Paul Smith @ 2018-07-04 6:08 UTC (permalink / raw) To: Git mailing list One thing I wanted to do was provide a default ca-bundle.crt file along with my local build of Git. I need my installation to be relocatable and I'm using RUNTIME_PREFIX with Git 2.18.0 (on GNU/Linux). I can provide a system gitconfig file with a setting for http.sslCAInfo but the problem is I can't create a relocatable path here so I don't know how to set it: $ cat $prefix/etc/gitconfig [http] sslCAInfo = <prefix>/etc/ca-bundle.crt What do I use for <prefix> above since I want it to be relocatable? Basically I want this to be in the same directory as the relocatable sysconfdir (I don't actually care much but that seems like a good place). Is there some way to create a reference to a path relative to the installation directory? For example "~" is accepted as the users $HOME path; is there some syntax which refers to the Git installation directory? If not this seems like something that would be very useful. I can use a wrapper script and set GIT_SSL_CAINFO, but that will also override any user's setting of http.sslCAInfo in their local gitconfig which I don't really want. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: RUNTIME_PREFIX references in gitconfig variable paths 2018-07-04 6:08 RUNTIME_PREFIX references in gitconfig variable paths Paul Smith @ 2018-07-04 11:26 ` Johannes Schindelin 2018-07-04 13:56 ` Paul Smith 0 siblings, 1 reply; 4+ messages in thread From: Johannes Schindelin @ 2018-07-04 11:26 UTC (permalink / raw) To: Paul Smith; +Cc: Git mailing list Hi Paul, On Wed, 4 Jul 2018, Paul Smith wrote: > One thing I wanted to do was provide a default ca-bundle.crt file along > with my local build of Git. I need my installation to be relocatable > and I'm using RUNTIME_PREFIX with Git 2.18.0 (on GNU/Linux). Understandable. We do this all the time in Git for Windows. Our config entry has this form: [http] sslCAinfo = /ssl/certs/ca-bundle.crt and in the RUNTIME_PREFIX mode, this will be made relative to the runtime prefix. It is my understanding that bf9acba (http: treat config options sslCAPath and sslCAInfo as paths, 2015-11-23) makes this work. > I can provide a system gitconfig file with a setting for http.sslCAInfo > but the problem is I can't create a relocatable path here so I don't > know how to set it: > > $ cat $prefix/etc/gitconfig > [http] > sslCAInfo = <prefix>/etc/ca-bundle.crt > > What do I use for <prefix> above since I want it to be relocatable? > Basically I want this to be in the same directory as the relocatable > sysconfdir (I don't actually care much but that seems like a good > place). > > Is there some way to create a reference to a path relative to the > installation directory? > > For example "~" is accepted as the users $HOME path; is there some > syntax which refers to the Git installation directory? > > If not this seems like something that would be very useful. > > > I can use a wrapper script and set GIT_SSL_CAINFO, but that will also > override any user's setting of http.sslCAInfo in their local gitconfig > which I don't really want. I think if you simply delete `<prefix>`, it will start working. Ciao, Johannes ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: RUNTIME_PREFIX references in gitconfig variable paths 2018-07-04 11:26 ` Johannes Schindelin @ 2018-07-04 13:56 ` Paul Smith 2018-10-02 14:28 ` Johannes Schindelin 0 siblings, 1 reply; 4+ messages in thread From: Paul Smith @ 2018-07-04 13:56 UTC (permalink / raw) To: Johannes Schindelin; +Cc: Git mailing list On Wed, 2018-07-04 at 13:26 +0200, Johannes Schindelin wrote: > On Wed, 4 Jul 2018, Paul Smith wrote: > > > One thing I wanted to do was provide a default ca-bundle.crt file > > along with my local build of Git. I need my installation to be > > relocatable and I'm using RUNTIME_PREFIX with Git 2.18.0 (on > > GNU/Linux). > > Understandable. We do this all the time in Git for Windows. Our > config entry has this form: > > [http] > sslCAinfo = /ssl/certs/ca-bundle.crt > > and in the RUNTIME_PREFIX mode, this will be made relative to the > runtime prefix. It is my understanding that bf9acba (http: treat > config options sslCAPath and sslCAInfo as paths, 2015-11-23) makes > this work. Hm. Unless I'm missing something this doesn't happen (and indeed, it does not work for me; with: [http] sslcainfo = /etc/ca-bundle.crt I get: fatal: unable to access 'https://github.com/myrepo.git/': error setting certificate verify locations: CAfile: /etc/ca-bundle.crt CApath: none although it works if I use a fully-qualified pathname, and using strace I find the process never attempted to access any other path for ca- bundle.crt). In http.c we see how this path is treated in http_options(): if (!strcmp("http.sslcainfo", var)) return git_config_pathname(&ssl_cainfo, var, value); I can't tell exactly how this function is invoked, but the result (ssl_cainfo) is used here without further modification: curl_easy_setopt(result, CURLOPT_CAINFO, ssl_cainfo); In config.c we find get_config_pathname() which does this: *dest = expand_user_path(value, 0); In path.c we find expand_user_path() which does this: if (path == NULL) goto return_null; if (path[0] == '~') { ... } strbuf_addstr(&user_path, to_copy); return strbuf_detach(&user_path, NULL); I don't see any reference to system_prefix(), system_path(), etc. which would be needed to RUNTIME_PREFIX-ize things. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: RUNTIME_PREFIX references in gitconfig variable paths 2018-07-04 13:56 ` Paul Smith @ 2018-10-02 14:28 ` Johannes Schindelin 0 siblings, 0 replies; 4+ messages in thread From: Johannes Schindelin @ 2018-10-02 14:28 UTC (permalink / raw) To: Paul Smith; +Cc: Git mailing list Hi Paul, [late reply, I know, sorry about that!] On Wed, 4 Jul 2018, Paul Smith wrote: > On Wed, 2018-07-04 at 13:26 +0200, Johannes Schindelin wrote: > > On Wed, 4 Jul 2018, Paul Smith wrote: > > > > > One thing I wanted to do was provide a default ca-bundle.crt file > > > along with my local build of Git. I need my installation to be > > > relocatable and I'm using RUNTIME_PREFIX with Git 2.18.0 (on > > > GNU/Linux). > > > > Understandable. We do this all the time in Git for Windows. Our > > config entry has this form: > > > > [http] > > sslCAinfo = /ssl/certs/ca-bundle.crt > > > > and in the RUNTIME_PREFIX mode, this will be made relative to the > > runtime prefix. It is my understanding that bf9acba (http: treat > > config options sslCAPath and sslCAInfo as paths, 2015-11-23) makes > > this work. > > Hm. Unless I'm missing something this doesn't happen (and indeed, it > does not work for me; with: > > [http] > sslcainfo = /etc/ca-bundle.crt > > I get: > > fatal: unable to access 'https://github.com/myrepo.git/': error > setting certificate verify locations: > CAfile: /etc/ca-bundle.crt > CApath: none > > although it works if I use a fully-qualified pathname, and using strace > I find the process never attempted to access any other path for ca- > bundle.crt). > > In http.c we see how this path is treated in http_options(): > > if (!strcmp("http.sslcainfo", var)) > return git_config_pathname(&ssl_cainfo, var, value); > > I can't tell exactly how this function is invoked, but the result > (ssl_cainfo) is used here without further modification: > > curl_easy_setopt(result, CURLOPT_CAINFO, ssl_cainfo); > > In config.c we find get_config_pathname() which does this: > > *dest = expand_user_path(value, 0); > > In path.c we find expand_user_path() which does this: > > if (path == NULL) > goto return_null; > if (path[0] == '~') { > ... > } > strbuf_addstr(&user_path, to_copy); > return strbuf_detach(&user_path, NULL); > > I don't see any reference to system_prefix(), system_path(), etc. which > would be needed to RUNTIME_PREFIX-ize things. I finally got around to dig into this, and found out what is happening: in https://github.com/git/git/blob/v2.19.0/http.c#L295-L296, the http.sslcainfo setting is handled by calling git_config_pathname(), which in turn calls expand_user_path() to handle special cases (https://github.com/git/git/blob/v2.19.0/config.c#L1067-L1075). And it is this function which has a specific, special handling on Windows (which, like so many other changes that are waiting patiently for the slow upstreaming process, has not made it into any *Git* version yet), see https://github.com/git-for-windows/git/commit/434b76522de1: @@ -709,6 +710,10 @@ char *expand_user_path(const char *path, int real_home) if (path == NULL) goto return_null; +#ifdef __MINGW32__ + if (path[0] == '/') + return system_path(path + 1); +#endif if (path[0] == '~') { const char *first_slash = strchrnul(path, '/'); const char *username = path + 1; This explains why it works on Windows, but not elsewhere... Now, I could imagine that this special handling makes a ton of sense not for *Git for Windows*, but rather for RUNTIME_PREFIX. So maybe we should replace that `__MINGW32__` condition by `RUNTIME_PREFIX`? What do you think? Ciao, Johannes ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-10-02 14:28 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-07-04 6:08 RUNTIME_PREFIX references in gitconfig variable paths Paul Smith 2018-07-04 11:26 ` Johannes Schindelin 2018-07-04 13:56 ` Paul Smith 2018-10-02 14:28 ` Johannes Schindelin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).