Charles Bailey <charles@xxxxxxxxxxxxx> writes: > On Thu, Jul 20, 2017 at 12:42:40PM -0700, Junio C Hamano wrote: >> Victor Toni <victor.toni@xxxxxxxxx> writes: >> >> > What's unexpected is that paths used for sslKey or sslCert are treated >> > differently insofar as they are expected to be absolute. >> > Relative paths (whether with or without "~") don't work. >> >> It appears that only two of these among four were made aware of the >> "~[username]/" prefix in bf9acba2 ("http: treat config options >> sslCAPath and sslCAInfo as paths", 2015-11-23), but "sslkey" and >> "sslcert" were still left as plain vanilla strings. I do not know >> if that was an elaborate omission, or a mere oversight, as it seems >> that it happened while I was away, so... > > It was more of an oversight than a deliberate omission, but more > accurately I didn't actively consider whether the other http.ssl* > variables were pathname-like or not. > > At the time I was trying to make a config which needed to set > http.sslCAPath and/or http.sslCAInfo more portable between users and > these were "obviously" pathname-like to me. Now that I read > the help for http.sslCert and http.sslKey, I see no reason that they > shouldn't also use git_config_pathname. If I'd been more thorough I > would have proposed this at the time. Thanks. I've read the function again and I think the attached patch covers everything that ought to be a filename. By the way, to credit you, do you prefer your bloomberg or hashpling address? -- >8 -- Subject: http.c: http.sslcert and http.sslkey are both pathnames Back when the modern http_options() codepath was created to parse various http.* options at 29508e1e ("Isolate shared HTTP request functionality", 2005-11-18), and then later was corrected for interation between the multiple configuration files in 7059cd99 ("http_init(): Fix config file parsing", 2009-03-09), we parsed configuration variables like http.sslkey, http.sslcert as plain vanilla strings, because git_config_pathname() that understands "~[username]/" prefix did not exist. Later, we converted some of them (namely, http.sslCAPath and http.sslCAInfo) to use the function, and added variables like http.cookeyFile http.pinnedpubkey to use the function from the beginning. Because of that, these variables all understand "~[username]/" prefix. Make the remaining two variables, http.sslcert and http.sslkey, also aware of the convention, as they are both clearly pathnames to files. Noticed-by: Victor Toni <victor.toni@xxxxxxxxx> Helped-by: Charles Bailey <cbailey32@xxxxxxxxxxxxx> Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> --- http.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/http.c b/http.c index c6c010f881..76ff63c14d 100644 --- a/http.c +++ b/http.c @@ -272,10 +272,10 @@ static int http_options(const char *var, const char *value, void *cb) if (!strcmp("http.sslversion", var)) return git_config_string(&ssl_version, var, value); if (!strcmp("http.sslcert", var)) - return git_config_string(&ssl_cert, var, value); + return git_config_pathname(&ssl_cert, var, value); #if LIBCURL_VERSION_NUM >= 0x070903 if (!strcmp("http.sslkey", var)) - return git_config_string(&ssl_key, var, value); + return git_config_pathname(&ssl_key, var, value); #endif #if LIBCURL_VERSION_NUM >= 0x070908 if (!strcmp("http.sslcapath", var))