mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-10-31 09:15:51 +00:00 
			
		
		
		
	Expose stock user/pass credential utility
This commit is contained in:
		
							parent
							
								
									252b24049c
								
							
						
					
					
						commit
						ffb02b1630
					
				| @ -68,6 +68,26 @@ typedef int (*git_cred_acquire_cb)( | ||||
| 	unsigned int allowed_types, | ||||
| 	void *payload); | ||||
| 
 | ||||
| /**
 | ||||
|  * Payload for git_cred_stock_userpass_plaintext. | ||||
|  */ | ||||
| typedef struct git_cred_stock_userpass_plaintext_payload { | ||||
| 	char *username; | ||||
| 	char *password; | ||||
| } git_cred_stock_userpass_plaintext_payload; | ||||
| 
 | ||||
| 
 | ||||
| /**
 | ||||
|  * Stock callback usable as a git_cred_acquire_cb.  This calls | ||||
|  * git_cred_userpass_plaintext_new unless the protocol has not specified | ||||
|  * GIT_CREDTYPE_USERPASS_PLAINTEXT as an allowed type. | ||||
|  */ | ||||
| GIT_EXTERN(int) git_cred_stock_userpass_plaintext( | ||||
| 		git_cred **cred, | ||||
| 		const char *url, | ||||
| 		unsigned int allowed_types, | ||||
| 		void *payload); | ||||
| 
 | ||||
| /*
 | ||||
|  *** End interface for credentials acquisition *** | ||||
|  *** Begin base transport interface *** | ||||
|  | ||||
| @ -57,3 +57,23 @@ int git_cred_userpass_plaintext_new( | ||||
| 	*cred = &c->parent; | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| int git_cred_stock_userpass_plaintext( | ||||
| 		git_cred **cred, | ||||
| 		const char *url, | ||||
| 		unsigned int allowed_types, | ||||
| 		void *payload) | ||||
| { | ||||
| 	git_cred_stock_userpass_plaintext_payload *userpass =  | ||||
| 		(git_cred_stock_userpass_plaintext_payload*)payload; | ||||
| 
 | ||||
| 	GIT_UNUSED(url); | ||||
| 
 | ||||
| 	if (!userpass || !userpass->username || !userpass->password) return -1; | ||||
| 
 | ||||
| 	if ((GIT_CREDTYPE_USERPASS_PLAINTEXT & allowed_types) == 0 || | ||||
| 			git_cred_userpass_plaintext_new(cred, userpass->username, userpass->password) < 0) | ||||
| 		return -1; | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
							
								
								
									
										27
									
								
								tests-clar/network/cred.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								tests-clar/network/cred.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| #include "clar_libgit2.h" | ||||
| 
 | ||||
| #include "git2/transport.h" | ||||
| 
 | ||||
| void test_network_cred__stock_userpass_validates_args(void) | ||||
| { | ||||
| 	git_cred_stock_userpass_plaintext_payload payload = {0}; | ||||
| 
 | ||||
| 	cl_git_fail(git_cred_stock_userpass_plaintext(NULL, NULL, 0, NULL)); | ||||
| 
 | ||||
| 	payload.username = "user"; | ||||
| 	cl_git_fail(git_cred_stock_userpass_plaintext(NULL, NULL, 0, &payload)); | ||||
| 
 | ||||
| 	payload.username = NULL; | ||||
| 	payload.username = "pass"; | ||||
| 	cl_git_fail(git_cred_stock_userpass_plaintext(NULL, NULL, 0, &payload)); | ||||
| } | ||||
| 
 | ||||
| void test_network_cred__stock_userpass_validates_that_method_is_allowed(void) | ||||
| { | ||||
| 	git_cred *cred; | ||||
| 	git_cred_stock_userpass_plaintext_payload payload = {"user", "pass"}; | ||||
| 
 | ||||
| 	cl_git_fail(git_cred_stock_userpass_plaintext(&cred, NULL, 0, &payload)); | ||||
| 	cl_git_pass(git_cred_stock_userpass_plaintext(&cred, NULL, GIT_CREDTYPE_USERPASS_PLAINTEXT, &payload)); | ||||
| 	git__free(cred); | ||||
| } | ||||
| @ -121,7 +121,7 @@ static int update_tips(const char *refname, const git_oid *a, const git_oid *b, | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| void test_clone_network__custom_remote_callbacks(void) | ||||
| void test_online_clone__custom_remote_callbacks(void) | ||||
| { | ||||
| 	git_remote_callbacks remote_callbacks = GIT_REMOTE_CALLBACKS_INIT; | ||||
| 	int callcount = 0; | ||||
| @ -134,39 +134,18 @@ void test_clone_network__custom_remote_callbacks(void) | ||||
| 	cl_assert(callcount > 0); | ||||
| } | ||||
| 
 | ||||
| struct cred_user_pass { | ||||
| 	const char *user; | ||||
| 	const char *pass; | ||||
| }; | ||||
| 
 | ||||
| static int cred_acquire( | ||||
| 	git_cred **cred, | ||||
| 	const char *url, | ||||
| 	unsigned int allowed_types, | ||||
| 	void *payload) | ||||
| { | ||||
| 	struct cred_user_pass *user_pass = (struct cred_user_pass*)payload; | ||||
| 
 | ||||
| 	GIT_UNUSED(url); | ||||
| 	if ((GIT_CREDTYPE_USERPASS_PLAINTEXT & allowed_types) == 0 || | ||||
| 			git_cred_userpass_plaintext_new(cred, user_pass->user, user_pass->pass) < 0) | ||||
| 		return -1; | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| void test_clone_network__credentials(void) | ||||
| void test_online_clone__credentials(void) | ||||
| { | ||||
| 	/* Remote URL environment variable must be set.  User and password are optional.  */ | ||||
| 	const char *remote_url = cl_getenv("GITTEST_REMOTE_URL"); | ||||
| 	struct cred_user_pass user_pass = { | ||||
| 	git_cred_stock_userpass_plaintext_payload user_pass = { | ||||
| 		cl_getenv("GITTEST_REMOTE_USER"), | ||||
| 		cl_getenv("GITTEST_REMOTE_PASS") | ||||
| 	}; | ||||
| 
 | ||||
| 	if (!remote_url) return; | ||||
| 
 | ||||
| 	g_options.cred_acquire_cb = cred_acquire; | ||||
| 	g_options.cred_acquire_cb = git_cred_stock_userpass_plaintext; | ||||
| 	g_options.cred_acquire_payload = &user_pass; | ||||
| 
 | ||||
| 	cl_git_pass(git_clone(&g_repo, remote_url, "./foo", &g_options)); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Ben Straub
						Ben Straub