Commit 172786ec1b7eab7ffdb13b64c5a18f38083d2c2c

Patrick Steinhardt 2019-04-16T12:03:20

examples: use username provided via URL The credentials callback may be passed a username in case where the URL already includes the expected username. As we usually cannot use a different username in such context, we should use that one if provided and not ask the user for a diferent username.

diff --git a/examples/common.c b/examples/common.c
index 0b52eb5..4cd9f2b 100644
--- a/examples/common.c
+++ b/examples/common.c
@@ -353,14 +353,19 @@ int cred_acquire_cb(git_cred **out,
 	int error = 1;
 
 	UNUSED(url);
-	UNUSED(username_from_url);
 	UNUSED(payload);
 
+	if (username_from_url) {
+		if ((username = strdup(username_from_url)) == NULL)
+			goto out;
+	} else if ((error = ask(&username, "Username:", 0)) < 0) {
+		goto out;
+	}
+
 	if (allowed_types & GIT_CREDTYPE_SSH_KEY) {
 		int n;
 
-		if ((error = ask(&username, "Username:", 0)) < 0 ||
-		    (error = ask(&privkey, "SSH Key:", 0)) < 0 ||
+		if ((error = ask(&privkey, "SSH Key:", 0)) < 0 ||
 		    (error = ask(&password, "Password:", 1)) < 0)
 			goto out;
 
@@ -371,15 +376,11 @@ int cred_acquire_cb(git_cred **out,
 
 		error = git_cred_ssh_key_new(out, username, pubkey, privkey, password);
 	} else if (allowed_types & GIT_CREDTYPE_USERPASS_PLAINTEXT) {
-		if ((error = ask(&username, "Username:", 0)) < 0 ||
-		    (error = ask(&password, "Password:", 1)) < 0)
+		if ((error = ask(&password, "Password:", 1)) < 0)
 			goto out;
 
 		error = git_cred_userpass_plaintext_new(out, username, password);
 	} else if (allowed_types & GIT_CREDTYPE_USERNAME) {
-		if ((error = ask(&username, "Username:", 0)) < 0)
-			goto out;
-
 		error = git_cred_username_new(out, username);
 	}