Andreas Ericsson <ae@xxxxxx> writes: > When pulling from a remote, the full URL including username > is by default added to the commit message. Since it adds > very little value but could be used by malicious people to > glean valid usernames (with matching hostnames), we're far > better off just stripping the username before storing the > remote URL locally. Sounds like a sensible thing to do. > +/* > + * Strip username information from the url and return it in a > + * newly allocated string which the caller has to free. > + * > + * 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 If this is a valid URL: scheme://host.xz/path@with@at@xxxxxxxx/ we do not want to mistakenly trigger this logic. I do not know if rsync://me@there/path is supported, but we should generalize to support any scheme://me@there/path to keep the code simpler. You do not do anything special based on the URL scheme other than learning how long the scheme:// part is to copy it anyway. Perhaps like... char *transport_anonymize_url(const char *url) { char *anon_url, *scheme_prefix, *anon_part; size_t len, prefix_len = 0; anon_part = strchr(url, '@'); if (is_local(url) || !anon_part) goto literal_copy; anon_part++; scheme_prefix = strstr(url, "://"); if (scheme_prefix) { const char *cp; /* make sure scheme is reasonable */ for (cp = url; cp < scheme_prefix; cp++) { switch (*cp) { /* RFC 1738 2.1 */ case '+': case '.': case '-': break; /* ok */ default: if (isalnum(*cp)) break; /* it isn't */ goto literal_copy; } } /* @ past the first slash does not count */ cp = strchr(scheme_prefix + 3, '/'); if (cp < anon_part) goto literal_copy; prefix_len = scheme_prefix - url + 3; } else if (!strchr(anon_part, ':')) /* cannot be "me@there:/path/name" */ goto literal_copy; len = prefix_len + strlen(anon_part); anon_url = xmalloc(len + 1); memcpy(anon_url, url, prefix_len); memcpy(anon_url + prefix_len, anon_part, strlen(anon_part)); return anon_url; literal_copy: return xstrdup(url); } -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html