Re: [PATCH] fetch: Strip usernames from url's before storing them
Andreas Ericsson schrieb:
Show 21 quoted lines
> +/*
> + * strip username information from the url
> + * This will allocate a new string, or return its argument
> + * if no stripping is necessary.
> + *
> + * The url's we want to catch are the following:
> + * ssh://[user@]host.xz[:port]/path/to/repo.git/
> + * [user@]host.xz:/path/to/repo.git/
> + * http[s]://[user[:password]@]host.xz/path/to/repo.git
> + *
> + * Although git doesn't currently support giving the password
> + * to http url's on the command-line, it's easier to catch
> + * that case too than it is to cater for it specially.
> + */
> +static char *anonymize_url(const char *url)
> +{
> + char *anon_url;
> + const char *at_sign = strchr(url, '@');
> + size_t prefix_len = 0;
> +
> + if (!at_sign) if (!at_sign || has_dos_drive_prefix(url))
or even better move this function to transport.c and use is_local().
Show 19 quoted lines
> + return strdup(url);
> +
> + if (!prefixcmp(url, "ssh://"))
> + prefix_len = strlen("ssh://");
> + else if (!prefixcmp(url, "http://"))
> + prefix_len = strlen("http://");
> + else if (!prefixcmp(url, "https://"))
> + prefix_len = strlen("https://");
> + else if (!strchr(at_sign + 1, ':'))
> + return strdup(url);
> +
> + anon_url = xcalloc(1, 1 + prefix_len +
> + ((unsigned long)at_sign - (unsigned long)url));
> + if (prefix_len)
> + memcpy(anon_url, url, prefix_len);
> + memcpy(anon_url + prefix_len, at_sign + 1, strlen(at_sign + 1));
> +
> + return anon_url;
> +}