Imported Upstream version 2.23.0
[platform/upstream/git.git] / credential.c
index cf11cc9..62be651 100644 (file)
@@ -89,11 +89,6 @@ static int proto_is_http(const char *s)
 
 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);
@@ -196,25 +191,20 @@ int credential_read(struct credential *c, FILE *fp)
        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,
@@ -332,22 +322,7 @@ void credential_reject(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;
 
@@ -360,11 +335,8 @@ int credential_from_url_gently(struct credential *c, const char *url,
         *   (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, ':');
@@ -385,8 +357,10 @@ int credential_from_url_gently(struct credential *c, const char *url,
                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++;
@@ -397,19 +371,4 @@ int credential_from_url_gently(struct credential *c, const char *url,
                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);
 }