| 
					
				 | 
			
			
				@@ -479,6 +479,44 @@ test_socks_5_authenticate(void *ptr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** Perform SOCKS 5 authentication with empty username/password fields. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Technically this violates RfC 1929, but some client software will send 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * this kind of message to Tor. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+test_socks_5_authenticate_empty_user_pass(void *ptr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  SOCKS_TEST_INIT(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* SOCKS 5 Negotiate username/password authentication */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ADD_DATA(buf, "\x05\x01\x02"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_assert(!fetch_from_buf_socks(buf, socks, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   get_options()->TestSocks, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   get_options()->SafeSocks)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(2,OP_EQ, socks->replylen); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(5,OP_EQ, socks->reply[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(SOCKS_USER_PASS,OP_EQ, socks->reply[1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(5,OP_EQ, socks->socks_version); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(0,OP_EQ, buf_datalen(buf)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /* SOCKS 5 Send username/password auth message with empty user/pass fields */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ADD_DATA(buf, "\x01\x00\x00"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_assert(!fetch_from_buf_socks(buf, socks, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   get_options()->TestSocks, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   get_options()->SafeSocks)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(5,OP_EQ, socks->socks_version); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(2,OP_EQ, socks->replylen); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(1,OP_EQ, socks->reply[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(0,OP_EQ, socks->reply[1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(0,OP_EQ, socks->usernamelen); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tt_int_op(0,OP_EQ, socks->passwordlen); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ done: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** Perform SOCKS 5 authentication and send data all in one go */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 test_socks_5_authenticate_with_data(void *ptr) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1035,6 +1073,7 @@ struct testcase_t socks_tests[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   SOCKSENT(5_auth_unsupported_version), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   SOCKSENT(5_auth_before_negotiation), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   SOCKSENT(5_authenticate), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  SOCKSENT(5_authenticate_empty_user_pass), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   SOCKSENT(5_authenticate_with_data), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   SOCKSENT(5_malformed_commands), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   SOCKSENT(5_bad_arguments), 
			 |