static void credential_apply_config(struct credential *c)
{
- if (!c->host)
- die(_("refusing to work with credential missing host field"));
- if (!c->protocol)
- die(_("refusing to work with credential missing protocol field"));
-
if (c->configured)
return;
git_config(credential_config_callback, c);
return 0;
}
-static void credential_write_item(FILE *fp, const char *key, const char *value,
- int required)
+static void credential_write_item(FILE *fp, const char *key, const char *value)
{
- if (!value && required)
- BUG("credential value for %s is missing", key);
if (!value)
return;
- if (strchr(value, '\n'))
- die("credential value for %s contains newline", key);
fprintf(fp, "%s=%s\n", key, value);
}
void credential_write(const struct credential *c, FILE *fp)
{
- credential_write_item(fp, "protocol", c->protocol, 1);
- credential_write_item(fp, "host", c->host, 1);
- credential_write_item(fp, "path", c->path, 0);
- credential_write_item(fp, "username", c->username, 0);
- credential_write_item(fp, "password", c->password, 0);
+ credential_write_item(fp, "protocol", c->protocol);
+ credential_write_item(fp, "host", c->host);
+ credential_write_item(fp, "path", c->path);
+ credential_write_item(fp, "username", c->username);
+ credential_write_item(fp, "password", c->password);
}
static int run_credential_helper(struct credential *c,
c->approved = 0;
}
-static int check_url_component(const char *url, int quiet,
- const char *name, const char *value)
-{
- if (!value)
- return 0;
- if (!strchr(value, '\n'))
- return 0;
-
- if (!quiet)
- warning(_("url contains a newline in its %s component: %s"),
- name, url);
- return -1;
-}
-
-int credential_from_url_gently(struct credential *c, const char *url,
- int quiet)
+void credential_from_url(struct credential *c, const char *url)
{
const char *at, *colon, *cp, *slash, *host, *proto_end;
* (3) proto://<user>:<pass>@<host>/...
*/
proto_end = strstr(url, "://");
- if (!proto_end || proto_end == url) {
- if (!quiet)
- warning(_("url has no scheme: %s"), url);
- return -1;
- }
+ if (!proto_end)
+ return;
cp = proto_end + 3;
at = strchr(cp, '@');
colon = strchr(cp, ':');
host = at + 1;
}
- c->protocol = xmemdupz(url, proto_end - url);
- c->host = url_decode_mem(host, slash - host);
+ if (proto_end - url > 0)
+ c->protocol = xmemdupz(url, proto_end - url);
+ if (slash - host > 0)
+ c->host = url_decode_mem(host, slash - host);
/* Trim leading and trailing slashes from path */
while (*slash == '/')
slash++;
while (p > c->path && *p == '/')
*p-- = '\0';
}
-
- if (check_url_component(url, quiet, "username", c->username) < 0 ||
- check_url_component(url, quiet, "password", c->password) < 0 ||
- check_url_component(url, quiet, "protocol", c->protocol) < 0 ||
- check_url_component(url, quiet, "host", c->host) < 0 ||
- check_url_component(url, quiet, "path", c->path) < 0)
- return -1;
-
- return 0;
-}
-
-void credential_from_url(struct credential *c, const char *url)
-{
- if (credential_from_url_gently(c, url, 0) < 0)
- die(_("credential url cannot be parsed: %s"), url);
}