mirror of
				https://github.com/libssh2/libssh2.git
				synced 2025-11-03 22:13:11 +03:00 
			
		
		
		
	Made most internal tables 'static const'.
This commit is contained in:
		@@ -183,7 +183,7 @@ libssh2_channel_open_ex(LIBSSH2_SESSION *session, const char *channel_type,
 | 
				
			|||||||
			unsigned int packet_size, const char *message,
 | 
								unsigned int packet_size, const char *message,
 | 
				
			||||||
			unsigned int message_len)
 | 
								unsigned int message_len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned char reply_codes[3] = {
 | 
						static const unsigned char reply_codes[3] = {
 | 
				
			||||||
		SSH_MSG_CHANNEL_OPEN_CONFIRMATION,
 | 
							SSH_MSG_CHANNEL_OPEN_CONFIRMATION,
 | 
				
			||||||
		SSH_MSG_CHANNEL_OPEN_FAILURE,
 | 
							SSH_MSG_CHANNEL_OPEN_FAILURE,
 | 
				
			||||||
		0
 | 
							0
 | 
				
			||||||
@@ -373,7 +373,8 @@ LIBSSH2_API LIBSSH2_CHANNEL *libssh2_channel_direct_tcpip_ex(LIBSSH2_SESSION *se
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
LIBSSH2_API LIBSSH2_LISTENER *libssh2_channel_forward_listen_ex(LIBSSH2_SESSION *session, char *host, int port, int *bound_port, int queue_maxsize)
 | 
					LIBSSH2_API LIBSSH2_LISTENER *libssh2_channel_forward_listen_ex(LIBSSH2_SESSION *session, char *host, int port, int *bound_port, int queue_maxsize)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned char *packet, *s, *data, reply_codes[3] = { SSH_MSG_REQUEST_SUCCESS, SSH_MSG_REQUEST_FAILURE, 0 };
 | 
						unsigned char *packet, *s, *data;
 | 
				
			||||||
 | 
						static const unsigned char reply_codes[3] = { SSH_MSG_REQUEST_SUCCESS, SSH_MSG_REQUEST_FAILURE, 0 };
 | 
				
			||||||
	unsigned long data_len;
 | 
						unsigned long data_len;
 | 
				
			||||||
	unsigned long host_len = (host ? strlen(host) : (sizeof("0.0.0.0") - 1));
 | 
						unsigned long host_len = (host ? strlen(host) : (sizeof("0.0.0.0") - 1));
 | 
				
			||||||
	unsigned long packet_len = host_len + (sizeof("tcpip-forward") - 1) + 14;
 | 
						unsigned long packet_len = host_len + (sizeof("tcpip-forward") - 1) + 14;
 | 
				
			||||||
@@ -575,7 +576,8 @@ libssh2_channel_forward_accept(LIBSSH2_LISTENER *listener)
 | 
				
			|||||||
LIBSSH2_API int libssh2_channel_setenv_ex(LIBSSH2_CHANNEL *channel, char *varname, unsigned int varname_len, char *value, unsigned int value_len)
 | 
					LIBSSH2_API int libssh2_channel_setenv_ex(LIBSSH2_CHANNEL *channel, char *varname, unsigned int varname_len, char *value, unsigned int value_len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	LIBSSH2_SESSION *session = channel->session;
 | 
						LIBSSH2_SESSION *session = channel->session;
 | 
				
			||||||
	unsigned char *s, *packet, *data, reply_codes[3] = { SSH_MSG_CHANNEL_SUCCESS, SSH_MSG_CHANNEL_FAILURE, 0 }, local_channel[4];
 | 
						unsigned char *s, *packet, *data, local_channel[4];
 | 
				
			||||||
 | 
						static const unsigned char reply_codes[3] = { SSH_MSG_CHANNEL_SUCCESS, SSH_MSG_CHANNEL_FAILURE, 0 };
 | 
				
			||||||
	unsigned long data_len;
 | 
						unsigned long data_len;
 | 
				
			||||||
	unsigned long packet_len = varname_len + value_len + 21; /* packet_type(1) + channel_id(4) + request_len(4) + request(3)"env" +
 | 
						unsigned long packet_len = varname_len + value_len + 21; /* packet_type(1) + channel_id(4) + request_len(4) + request(3)"env" +
 | 
				
			||||||
																want_reply(1) + varname_len(4) + value_len(4) */
 | 
																					want_reply(1) + varname_len(4) + value_len(4) */
 | 
				
			||||||
@@ -634,7 +636,8 @@ LIBSSH2_API int libssh2_channel_request_pty_ex(LIBSSH2_CHANNEL *channel, char *t
 | 
				
			|||||||
																		 int width_px, int height_px)
 | 
																							 int width_px, int height_px)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	LIBSSH2_SESSION *session = channel->session;
 | 
						LIBSSH2_SESSION *session = channel->session;
 | 
				
			||||||
	unsigned char *s, *packet, *data, reply_codes[3] = { SSH_MSG_CHANNEL_SUCCESS, SSH_MSG_CHANNEL_FAILURE, 0 }, local_channel[4];
 | 
						unsigned char *s, *packet, *data, local_channel[4];
 | 
				
			||||||
 | 
						static const unsigned char reply_codes[3] = { SSH_MSG_CHANNEL_SUCCESS, SSH_MSG_CHANNEL_FAILURE, 0 };
 | 
				
			||||||
	unsigned long data_len;
 | 
						unsigned long data_len;
 | 
				
			||||||
	unsigned long packet_len = term_len + modes_len + 41; /*  packet_type(1) + channel(4) + pty_req_len(4) + "pty_req"(7) + want_reply(1) +
 | 
						unsigned long packet_len = term_len + modes_len + 41; /*  packet_type(1) + channel(4) + pty_req_len(4) + "pty_req"(7) + want_reply(1) +
 | 
				
			||||||
															  term_len(4) + width(4) + height(4) + width_px(4) + height_px(4) + modes_len(4) */
 | 
																				  term_len(4) + width(4) + height(4) + width_px(4) + height_px(4) + modes_len(4) */
 | 
				
			||||||
@@ -700,7 +703,8 @@ LIBSSH2_API int libssh2_channel_request_pty_ex(LIBSSH2_CHANNEL *channel, char *t
 | 
				
			|||||||
LIBSSH2_API int libssh2_channel_x11_req_ex(LIBSSH2_CHANNEL *channel, int single_connection, char *auth_proto, char *auth_cookie, int screen_number)
 | 
					LIBSSH2_API int libssh2_channel_x11_req_ex(LIBSSH2_CHANNEL *channel, int single_connection, char *auth_proto, char *auth_cookie, int screen_number)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	LIBSSH2_SESSION *session = channel->session;
 | 
						LIBSSH2_SESSION *session = channel->session;
 | 
				
			||||||
	unsigned char *s, *packet, *data, reply_codes[3] = { SSH_MSG_CHANNEL_SUCCESS, SSH_MSG_CHANNEL_FAILURE, 0 }, local_channel[4];
 | 
						unsigned char *s, *packet, *data, local_channel[4];
 | 
				
			||||||
 | 
						static const unsigned char reply_codes[3] = { SSH_MSG_CHANNEL_SUCCESS, SSH_MSG_CHANNEL_FAILURE, 0 };
 | 
				
			||||||
	unsigned long data_len;
 | 
						unsigned long data_len;
 | 
				
			||||||
	unsigned long proto_len = auth_proto ? strlen(auth_proto) : (sizeof("MIT-MAGIC-COOKIE-1") - 1);
 | 
						unsigned long proto_len = auth_proto ? strlen(auth_proto) : (sizeof("MIT-MAGIC-COOKIE-1") - 1);
 | 
				
			||||||
	unsigned long cookie_len = auth_cookie ? strlen(auth_cookie) : LIBSSH2_X11_RANDOM_COOKIE_LEN;
 | 
						unsigned long cookie_len = auth_cookie ? strlen(auth_cookie) : LIBSSH2_X11_RANDOM_COOKIE_LEN;
 | 
				
			||||||
@@ -776,7 +780,8 @@ LIBSSH2_API int libssh2_channel_x11_req_ex(LIBSSH2_CHANNEL *channel, int single_
 | 
				
			|||||||
LIBSSH2_API int libssh2_channel_process_startup(LIBSSH2_CHANNEL *channel, const char *request, unsigned int request_len, const char *message, unsigned int message_len)
 | 
					LIBSSH2_API int libssh2_channel_process_startup(LIBSSH2_CHANNEL *channel, const char *request, unsigned int request_len, const char *message, unsigned int message_len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	LIBSSH2_SESSION *session = channel->session;
 | 
						LIBSSH2_SESSION *session = channel->session;
 | 
				
			||||||
	unsigned char *s, *packet, *data, reply_codes[3] = { SSH_MSG_CHANNEL_SUCCESS, SSH_MSG_CHANNEL_FAILURE, 0 }, local_channel[4];
 | 
						unsigned char *s, *packet, *data, local_channel[4];
 | 
				
			||||||
 | 
						static const unsigned char reply_codes[3] = { SSH_MSG_CHANNEL_SUCCESS, SSH_MSG_CHANNEL_FAILURE, 0 };
 | 
				
			||||||
	unsigned long data_len;
 | 
						unsigned long data_len;
 | 
				
			||||||
	unsigned long packet_len = request_len + 10; /* packet_type(1) + channel(4) + request_len(4) + want_reply(1) */
 | 
						unsigned long packet_len = request_len + 10; /* packet_type(1) + channel(4) + request_len(4) + want_reply(1) */
 | 
				
			||||||
	libssh2pack_t rc;
 | 
						libssh2pack_t rc;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								src/comp.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/comp.c
									
									
									
									
									
								
							@@ -70,8 +70,8 @@ static int libssh2_comp_method_none_comp(LIBSSH2_SESSION *session,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
/* }}} */
 | 
					/* }}} */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_COMP_METHOD libssh2_comp_method_none = {
 | 
					static const LIBSSH2_COMP_METHOD libssh2_comp_method_none = {
 | 
				
			||||||
	(char *)"none",
 | 
						"none",
 | 
				
			||||||
	NULL,
 | 
						NULL,
 | 
				
			||||||
	libssh2_comp_method_none_comp,
 | 
						libssh2_comp_method_none_comp,
 | 
				
			||||||
	NULL
 | 
						NULL
 | 
				
			||||||
@@ -288,8 +288,8 @@ static int libssh2_comp_method_zlib_dtor(LIBSSH2_SESSION *session, int compress,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
/* }}} */
 | 
					/* }}} */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_COMP_METHOD libssh2_comp_method_zlib = {
 | 
					static const LIBSSH2_COMP_METHOD libssh2_comp_method_zlib = {
 | 
				
			||||||
	(char *)"zlib",
 | 
						"zlib",
 | 
				
			||||||
	libssh2_comp_method_zlib_init,
 | 
						libssh2_comp_method_zlib_init,
 | 
				
			||||||
	libssh2_comp_method_zlib_comp,
 | 
						libssh2_comp_method_zlib_comp,
 | 
				
			||||||
	libssh2_comp_method_zlib_dtor,
 | 
						libssh2_comp_method_zlib_dtor,
 | 
				
			||||||
@@ -300,7 +300,7 @@ static LIBSSH2_COMP_METHOD libssh2_comp_method_zlib = {
 | 
				
			|||||||
   * Compression Methods *
 | 
					   * Compression Methods *
 | 
				
			||||||
   *********************** */
 | 
					   *********************** */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_COMP_METHOD *_libssh2_comp_methods[] = {
 | 
					static const LIBSSH2_COMP_METHOD *_libssh2_comp_methods[] = {
 | 
				
			||||||
	&libssh2_comp_method_none,
 | 
						&libssh2_comp_method_none,
 | 
				
			||||||
#ifdef LIBSSH2_HAVE_ZLIB
 | 
					#ifdef LIBSSH2_HAVE_ZLIB
 | 
				
			||||||
	&libssh2_comp_method_zlib,
 | 
						&libssh2_comp_method_zlib,
 | 
				
			||||||
@@ -308,7 +308,7 @@ static LIBSSH2_COMP_METHOD *_libssh2_comp_methods[] = {
 | 
				
			|||||||
	NULL
 | 
						NULL
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIBSSH2_COMP_METHOD **libssh2_comp_methods(void) {
 | 
					const LIBSSH2_COMP_METHOD **libssh2_comp_methods(void) {
 | 
				
			||||||
	return _libssh2_comp_methods;
 | 
						return _libssh2_comp_methods;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										24
									
								
								src/crypt.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								src/crypt.c
									
									
									
									
									
								
							@@ -48,7 +48,7 @@ static int libssh2_crypt_none_crypt(LIBSSH2_SESSION *session, unsigned char *buf
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
/* }}} */
 | 
					/* }}} */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_none = {
 | 
					static const LIBSSH2_CRYPT_METHOD libssh2_crypt_method_none = {
 | 
				
			||||||
	"none",
 | 
						"none",
 | 
				
			||||||
	8, /* blocksize (SSH2 defines minimum blocksize as 8) */
 | 
						8, /* blocksize (SSH2 defines minimum blocksize as 8) */
 | 
				
			||||||
	0, /* iv_len */
 | 
						0, /* iv_len */
 | 
				
			||||||
@@ -67,7 +67,7 @@ struct crypt_ctx {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int _libssh2_init (LIBSSH2_SESSION *session,
 | 
					static int _libssh2_init (LIBSSH2_SESSION *session,
 | 
				
			||||||
		 LIBSSH2_CRYPT_METHOD *method,
 | 
							 const LIBSSH2_CRYPT_METHOD *method,
 | 
				
			||||||
		 unsigned char *iv, int *free_iv,
 | 
							 unsigned char *iv, int *free_iv,
 | 
				
			||||||
		 unsigned char *secret, int *free_secret,
 | 
							 unsigned char *secret, int *free_secret,
 | 
				
			||||||
		 int encrypt, void **abstract)
 | 
							 int encrypt, void **abstract)
 | 
				
			||||||
@@ -110,7 +110,7 @@ static int _libssh2_dtor(LIBSSH2_SESSION *session, void **abstract)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if LIBSSH2_AES
 | 
					#if LIBSSH2_AES
 | 
				
			||||||
static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_aes128_cbc = {
 | 
					static const LIBSSH2_CRYPT_METHOD libssh2_crypt_method_aes128_cbc = {
 | 
				
			||||||
	"aes128-cbc",
 | 
						"aes128-cbc",
 | 
				
			||||||
	16, /* blocksize */
 | 
						16, /* blocksize */
 | 
				
			||||||
	16, /* initial value length */
 | 
						16, /* initial value length */
 | 
				
			||||||
@@ -122,7 +122,7 @@ static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_aes128_cbc = {
 | 
				
			|||||||
	_libssh2_cipher_aes128
 | 
						_libssh2_cipher_aes128
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_aes192_cbc = {
 | 
					static const LIBSSH2_CRYPT_METHOD libssh2_crypt_method_aes192_cbc = {
 | 
				
			||||||
	"aes192-cbc",
 | 
						"aes192-cbc",
 | 
				
			||||||
	16, /* blocksize */
 | 
						16, /* blocksize */
 | 
				
			||||||
	16, /* initial value length */
 | 
						16, /* initial value length */
 | 
				
			||||||
@@ -134,7 +134,7 @@ static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_aes192_cbc = {
 | 
				
			|||||||
	_libssh2_cipher_aes192
 | 
						_libssh2_cipher_aes192
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_aes256_cbc = {
 | 
					static const LIBSSH2_CRYPT_METHOD libssh2_crypt_method_aes256_cbc = {
 | 
				
			||||||
	"aes256-cbc",
 | 
						"aes256-cbc",
 | 
				
			||||||
	16, /* blocksize */
 | 
						16, /* blocksize */
 | 
				
			||||||
	16, /* initial value length */
 | 
						16, /* initial value length */
 | 
				
			||||||
@@ -147,7 +147,7 @@ static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_aes256_cbc = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* rijndael-cbc@lysator.liu.se == aes256-cbc */
 | 
					/* rijndael-cbc@lysator.liu.se == aes256-cbc */
 | 
				
			||||||
static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_rijndael_cbc_lysator_liu_se = {
 | 
					static const LIBSSH2_CRYPT_METHOD libssh2_crypt_method_rijndael_cbc_lysator_liu_se = {
 | 
				
			||||||
	"rijndael-cbc@lysator.liu.se",
 | 
						"rijndael-cbc@lysator.liu.se",
 | 
				
			||||||
	16, /* blocksize */
 | 
						16, /* blocksize */
 | 
				
			||||||
	16, /* initial value length */
 | 
						16, /* initial value length */
 | 
				
			||||||
@@ -161,7 +161,7 @@ static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_rijndael_cbc_lysator_liu_se = {
 | 
				
			|||||||
#endif /* LIBSSH2_AES */
 | 
					#endif /* LIBSSH2_AES */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if LIBSSH2_BLOWFISH
 | 
					#if LIBSSH2_BLOWFISH
 | 
				
			||||||
static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_blowfish_cbc = {
 | 
					static const LIBSSH2_CRYPT_METHOD libssh2_crypt_method_blowfish_cbc = {
 | 
				
			||||||
	"blowfish-cbc",
 | 
						"blowfish-cbc",
 | 
				
			||||||
	8, /* blocksize */
 | 
						8, /* blocksize */
 | 
				
			||||||
	8, /* initial value length */
 | 
						8, /* initial value length */
 | 
				
			||||||
@@ -175,7 +175,7 @@ static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_blowfish_cbc = {
 | 
				
			|||||||
#endif /* LIBSSH2_BLOWFISH */
 | 
					#endif /* LIBSSH2_BLOWFISH */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if LIBSSH2_RC4
 | 
					#if LIBSSH2_RC4
 | 
				
			||||||
static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_arcfour = {
 | 
					static const LIBSSH2_CRYPT_METHOD libssh2_crypt_method_arcfour = {
 | 
				
			||||||
	"arcfour",
 | 
						"arcfour",
 | 
				
			||||||
	8, /* blocksize */
 | 
						8, /* blocksize */
 | 
				
			||||||
	8, /* initial value length */
 | 
						8, /* initial value length */
 | 
				
			||||||
@@ -189,7 +189,7 @@ static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_arcfour = {
 | 
				
			|||||||
#endif /* LIBSSH2_RC4 */
 | 
					#endif /* LIBSSH2_RC4 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if LIBSSH2_CAST
 | 
					#if LIBSSH2_CAST
 | 
				
			||||||
static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_cast128_cbc = {
 | 
					static const LIBSSH2_CRYPT_METHOD libssh2_crypt_method_cast128_cbc = {
 | 
				
			||||||
	"cast128-cbc",
 | 
						"cast128-cbc",
 | 
				
			||||||
	8, /* blocksize */
 | 
						8, /* blocksize */
 | 
				
			||||||
	8, /* initial value length */
 | 
						8, /* initial value length */
 | 
				
			||||||
@@ -203,7 +203,7 @@ static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_cast128_cbc = {
 | 
				
			|||||||
#endif /* LIBSSH2_CAST */
 | 
					#endif /* LIBSSH2_CAST */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if LIBSSH2_3DES
 | 
					#if LIBSSH2_3DES
 | 
				
			||||||
static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_3des_cbc = {
 | 
					static const LIBSSH2_CRYPT_METHOD libssh2_crypt_method_3des_cbc = {
 | 
				
			||||||
	"3des-cbc",
 | 
						"3des-cbc",
 | 
				
			||||||
	8, /* blocksize */
 | 
						8, /* blocksize */
 | 
				
			||||||
	8, /* initial value length */
 | 
						8, /* initial value length */
 | 
				
			||||||
@@ -216,7 +216,7 @@ static LIBSSH2_CRYPT_METHOD libssh2_crypt_method_3des_cbc = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_CRYPT_METHOD *_libssh2_crypt_methods[] = {
 | 
					static const LIBSSH2_CRYPT_METHOD *_libssh2_crypt_methods[] = {
 | 
				
			||||||
#if LIBSSH2_AES
 | 
					#if LIBSSH2_AES
 | 
				
			||||||
	&libssh2_crypt_method_aes256_cbc,
 | 
						&libssh2_crypt_method_aes256_cbc,
 | 
				
			||||||
	&libssh2_crypt_method_rijndael_cbc_lysator_liu_se, /* == aes256-cbc */
 | 
						&libssh2_crypt_method_rijndael_cbc_lysator_liu_se, /* == aes256-cbc */
 | 
				
			||||||
@@ -242,6 +242,6 @@ static LIBSSH2_CRYPT_METHOD *_libssh2_crypt_methods[] = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Expose to kex.c */
 | 
					/* Expose to kex.c */
 | 
				
			||||||
LIBSSH2_CRYPT_METHOD **libssh2_crypt_methods(void) {
 | 
					const LIBSSH2_CRYPT_METHOD **libssh2_crypt_methods(void) {
 | 
				
			||||||
	return _libssh2_crypt_methods;
 | 
						return _libssh2_crypt_methods;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -191,7 +191,7 @@ static int libssh2_hostkey_method_ssh_rsa_dtor(LIBSSH2_SESSION *session,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
/* }}} */
 | 
					/* }}} */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_HOSTKEY_METHOD libssh2_hostkey_method_ssh_rsa = {
 | 
					static const LIBSSH2_HOSTKEY_METHOD libssh2_hostkey_method_ssh_rsa = {
 | 
				
			||||||
	"ssh-rsa",
 | 
						"ssh-rsa",
 | 
				
			||||||
	MD5_DIGEST_LENGTH,
 | 
						MD5_DIGEST_LENGTH,
 | 
				
			||||||
	libssh2_hostkey_method_ssh_rsa_init,
 | 
						libssh2_hostkey_method_ssh_rsa_init,
 | 
				
			||||||
@@ -358,7 +358,7 @@ static int libssh2_hostkey_method_ssh_dss_dtor(LIBSSH2_SESSION *session,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
/* }}} */
 | 
					/* }}} */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_HOSTKEY_METHOD libssh2_hostkey_method_ssh_dss = {
 | 
					static const LIBSSH2_HOSTKEY_METHOD libssh2_hostkey_method_ssh_dss = {
 | 
				
			||||||
	"ssh-dss",
 | 
						"ssh-dss",
 | 
				
			||||||
	MD5_DIGEST_LENGTH,
 | 
						MD5_DIGEST_LENGTH,
 | 
				
			||||||
	libssh2_hostkey_method_ssh_dss_init,
 | 
						libssh2_hostkey_method_ssh_dss_init,
 | 
				
			||||||
@@ -370,7 +370,7 @@ static LIBSSH2_HOSTKEY_METHOD libssh2_hostkey_method_ssh_dss = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
#endif /* LIBSSH2_DSA */
 | 
					#endif /* LIBSSH2_DSA */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_HOSTKEY_METHOD *_libssh2_hostkey_methods[] = {
 | 
					static const LIBSSH2_HOSTKEY_METHOD *_libssh2_hostkey_methods[] = {
 | 
				
			||||||
#if LIBSSH2_RSA
 | 
					#if LIBSSH2_RSA
 | 
				
			||||||
	&libssh2_hostkey_method_ssh_rsa,
 | 
						&libssh2_hostkey_method_ssh_rsa,
 | 
				
			||||||
#endif /* LIBSSH2_RSA */
 | 
					#endif /* LIBSSH2_RSA */
 | 
				
			||||||
@@ -380,7 +380,7 @@ static LIBSSH2_HOSTKEY_METHOD *_libssh2_hostkey_methods[] = {
 | 
				
			|||||||
	NULL
 | 
						NULL
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIBSSH2_HOSTKEY_METHOD **libssh2_hostkey_methods(void)
 | 
					const LIBSSH2_HOSTKEY_METHOD **libssh2_hostkey_methods(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return _libssh2_hostkey_methods;
 | 
						return _libssh2_hostkey_methods;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										63
									
								
								src/kex.c
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								src/kex.c
									
									
									
									
									
								
							@@ -481,7 +481,7 @@ static int libssh2_kex_method_diffie_hellman_groupGP_sha1_key_exchange(LIBSSH2_S
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
static int libssh2_kex_method_diffie_hellman_group1_sha1_key_exchange(LIBSSH2_SESSION *session)
 | 
					static int libssh2_kex_method_diffie_hellman_group1_sha1_key_exchange(LIBSSH2_SESSION *session)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned char p_value[128] = {
 | 
						static const unsigned char p_value[128] = {
 | 
				
			||||||
		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
 | 
							0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
 | 
				
			||||||
		0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
 | 
							0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
 | 
				
			||||||
		0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
 | 
							0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
 | 
				
			||||||
@@ -523,7 +523,7 @@ static int libssh2_kex_method_diffie_hellman_group1_sha1_key_exchange(LIBSSH2_SE
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
static int libssh2_kex_method_diffie_hellman_group14_sha1_key_exchange(LIBSSH2_SESSION *session)
 | 
					static int libssh2_kex_method_diffie_hellman_group14_sha1_key_exchange(LIBSSH2_SESSION *session)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned char p_value[256] = {
 | 
						static const unsigned char p_value[256] = {
 | 
				
			||||||
		0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
 | 
							0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
 | 
				
			||||||
		0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
 | 
							0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
 | 
				
			||||||
		0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
 | 
							0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
 | 
				
			||||||
@@ -636,25 +636,25 @@ static int libssh2_kex_method_diffie_hellman_group_exchange_sha1_key_exchange(LI
 | 
				
			|||||||
#define LIBSSH2_KEX_METHOD_FLAG_REQ_ENC_HOSTKEY		0x0001
 | 
					#define LIBSSH2_KEX_METHOD_FLAG_REQ_ENC_HOSTKEY		0x0001
 | 
				
			||||||
#define LIBSSH2_KEX_METHOD_FLAG_REQ_SIGN_HOSTKEY	0x0002
 | 
					#define LIBSSH2_KEX_METHOD_FLAG_REQ_SIGN_HOSTKEY	0x0002
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIBSSH2_KEX_METHOD libssh2_kex_method_diffie_helman_group1_sha1 = {
 | 
					const LIBSSH2_KEX_METHOD libssh2_kex_method_diffie_helman_group1_sha1 = {
 | 
				
			||||||
	"diffie-hellman-group1-sha1",
 | 
						"diffie-hellman-group1-sha1",
 | 
				
			||||||
	libssh2_kex_method_diffie_hellman_group1_sha1_key_exchange,
 | 
						libssh2_kex_method_diffie_hellman_group1_sha1_key_exchange,
 | 
				
			||||||
	LIBSSH2_KEX_METHOD_FLAG_REQ_SIGN_HOSTKEY,
 | 
						LIBSSH2_KEX_METHOD_FLAG_REQ_SIGN_HOSTKEY,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIBSSH2_KEX_METHOD libssh2_kex_method_diffie_helman_group14_sha1 = {
 | 
					const LIBSSH2_KEX_METHOD libssh2_kex_method_diffie_helman_group14_sha1 = {
 | 
				
			||||||
	"diffie-hellman-group14-sha1",
 | 
						"diffie-hellman-group14-sha1",
 | 
				
			||||||
	libssh2_kex_method_diffie_hellman_group14_sha1_key_exchange,
 | 
						libssh2_kex_method_diffie_hellman_group14_sha1_key_exchange,
 | 
				
			||||||
	LIBSSH2_KEX_METHOD_FLAG_REQ_SIGN_HOSTKEY,
 | 
						LIBSSH2_KEX_METHOD_FLAG_REQ_SIGN_HOSTKEY,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIBSSH2_KEX_METHOD libssh2_kex_method_diffie_helman_group_exchange_sha1 = {
 | 
					const LIBSSH2_KEX_METHOD libssh2_kex_method_diffie_helman_group_exchange_sha1 = {
 | 
				
			||||||
	"diffie-hellman-group-exchange-sha1",
 | 
						"diffie-hellman-group-exchange-sha1",
 | 
				
			||||||
	libssh2_kex_method_diffie_hellman_group_exchange_sha1_key_exchange,
 | 
						libssh2_kex_method_diffie_hellman_group_exchange_sha1_key_exchange,
 | 
				
			||||||
	LIBSSH2_KEX_METHOD_FLAG_REQ_SIGN_HOSTKEY,
 | 
						LIBSSH2_KEX_METHOD_FLAG_REQ_SIGN_HOSTKEY,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIBSSH2_KEX_METHOD *libssh2_kex_methods[] = {
 | 
					const LIBSSH2_KEX_METHOD *libssh2_kex_methods[] = {
 | 
				
			||||||
	&libssh2_kex_method_diffie_helman_group14_sha1,
 | 
						&libssh2_kex_method_diffie_helman_group14_sha1,
 | 
				
			||||||
	&libssh2_kex_method_diffie_helman_group_exchange_sha1,
 | 
						&libssh2_kex_method_diffie_helman_group_exchange_sha1,
 | 
				
			||||||
	&libssh2_kex_method_diffie_helman_group1_sha1,
 | 
						&libssh2_kex_method_diffie_helman_group1_sha1,
 | 
				
			||||||
@@ -662,7 +662,7 @@ LIBSSH2_KEX_METHOD *libssh2_kex_methods[] = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct _LIBSSH2_COMMON_METHOD {
 | 
					typedef struct _LIBSSH2_COMMON_METHOD {
 | 
				
			||||||
	char *name;
 | 
						const char *name;
 | 
				
			||||||
} LIBSSH2_COMMON_METHOD;
 | 
					} LIBSSH2_COMMON_METHOD;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* {{{ libssh2_kex_method_strlen
 | 
					/* {{{ libssh2_kex_method_strlen
 | 
				
			||||||
@@ -791,7 +791,7 @@ static int libssh2_kexinit(LIBSSH2_SESSION *session)
 | 
				
			|||||||
#ifdef LIBSSH2DEBUG
 | 
					#ifdef LIBSSH2DEBUG
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* Funnily enough, they'll all "appear" to be '\0' terminated */
 | 
						/* Funnily enough, they'll all "appear" to be '\0' terminated */
 | 
				
			||||||
	char *p = data + 21; /* type(1) + cookie(16) + len(4) */
 | 
						unsigned char *p = data + 21; /* type(1) + cookie(16) + len(4) */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_libssh2_debug(session, LIBSSH2_DBG_KEX, "Sent KEX: %s", p);				p += kex_len + 4;
 | 
						_libssh2_debug(session, LIBSSH2_DBG_KEX, "Sent KEX: %s", p);				p += kex_len + 4;
 | 
				
			||||||
	_libssh2_debug(session, LIBSSH2_DBG_KEX, "Sent HOSTKEY: %s", p);			p += hostkey_len + 4;
 | 
						_libssh2_debug(session, LIBSSH2_DBG_KEX, "Sent HOSTKEY: %s", p);			p += hostkey_len + 4;
 | 
				
			||||||
@@ -827,7 +827,7 @@ static int libssh2_kexinit(LIBSSH2_SESSION *session)
 | 
				
			|||||||
 * Needle must be preceed by BOL or ',', and followed by ',' or EOL
 | 
					 * Needle must be preceed by BOL or ',', and followed by ',' or EOL
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static unsigned char *libssh2_kex_agree_instr(unsigned char *haystack, unsigned long haystack_len,
 | 
					static unsigned char *libssh2_kex_agree_instr(unsigned char *haystack, unsigned long haystack_len,
 | 
				
			||||||
											  unsigned char *needle, unsigned long needle_len)
 | 
																  const unsigned char *needle, unsigned long needle_len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned char *s;
 | 
						unsigned char *s;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -860,7 +860,7 @@ static unsigned char *libssh2_kex_agree_instr(unsigned char *haystack, unsigned
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* {{{ libssh2_get_method_by_name
 | 
					/* {{{ libssh2_get_method_by_name
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static LIBSSH2_COMMON_METHOD *libssh2_get_method_by_name(char *name, int name_len, LIBSSH2_COMMON_METHOD **methodlist)
 | 
					static const LIBSSH2_COMMON_METHOD *libssh2_get_method_by_name(const char *name, int name_len, const LIBSSH2_COMMON_METHOD **methodlist)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	while (*methodlist) {
 | 
						while (*methodlist) {
 | 
				
			||||||
		if ((strlen((*methodlist)->name) == name_len) &&
 | 
							if ((strlen((*methodlist)->name) == name_len) &&
 | 
				
			||||||
@@ -878,7 +878,7 @@ static LIBSSH2_COMMON_METHOD *libssh2_get_method_by_name(char *name, int name_le
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
static int libssh2_kex_agree_hostkey(LIBSSH2_SESSION *session, unsigned long kex_flags, unsigned char *hostkey, unsigned long hostkey_len)
 | 
					static int libssh2_kex_agree_hostkey(LIBSSH2_SESSION *session, unsigned long kex_flags, unsigned char *hostkey, unsigned long hostkey_len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	LIBSSH2_HOSTKEY_METHOD	**hostkeyp	= libssh2_hostkey_methods();
 | 
						const LIBSSH2_HOSTKEY_METHOD	**hostkeyp	= libssh2_hostkey_methods();
 | 
				
			||||||
	unsigned char *s;
 | 
						unsigned char *s;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (session->hostkey_prefs) {
 | 
						if (session->hostkey_prefs) {
 | 
				
			||||||
@@ -888,7 +888,7 @@ static int libssh2_kex_agree_hostkey(LIBSSH2_SESSION *session, unsigned long kex
 | 
				
			|||||||
			unsigned char *p = strchr(s, ',');
 | 
								unsigned char *p = strchr(s, ',');
 | 
				
			||||||
			int method_len = (p ? (p - s) : strlen(s));
 | 
								int method_len = (p ? (p - s) : strlen(s));
 | 
				
			||||||
			if (libssh2_kex_agree_instr(hostkey, hostkey_len, s, method_len)) {
 | 
								if (libssh2_kex_agree_instr(hostkey, hostkey_len, s, method_len)) {
 | 
				
			||||||
				LIBSSH2_HOSTKEY_METHOD *method = (LIBSSH2_HOSTKEY_METHOD*)libssh2_get_method_by_name(s, method_len, (LIBSSH2_COMMON_METHOD**)hostkeyp);
 | 
									const LIBSSH2_HOSTKEY_METHOD *method = (const LIBSSH2_HOSTKEY_METHOD*)libssh2_get_method_by_name(s, method_len, (const LIBSSH2_COMMON_METHOD**)hostkeyp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (!method) {
 | 
									if (!method) {
 | 
				
			||||||
					/* Invalid method -- Should never be reached */
 | 
										/* Invalid method -- Should never be reached */
 | 
				
			||||||
@@ -943,7 +943,7 @@ static int libssh2_kex_agree_hostkey(LIBSSH2_SESSION *session, unsigned long kex
 | 
				
			|||||||
static int libssh2_kex_agree_kex_hostkey(LIBSSH2_SESSION *session, unsigned char *kex, unsigned long kex_len,
 | 
					static int libssh2_kex_agree_kex_hostkey(LIBSSH2_SESSION *session, unsigned char *kex, unsigned long kex_len,
 | 
				
			||||||
																   unsigned char *hostkey, unsigned long hostkey_len)
 | 
																					   unsigned char *hostkey, unsigned long hostkey_len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	LIBSSH2_KEX_METHOD **kexp = libssh2_kex_methods;
 | 
						const LIBSSH2_KEX_METHOD **kexp = libssh2_kex_methods;
 | 
				
			||||||
	unsigned char *s;
 | 
						unsigned char *s;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (session->kex_prefs) {
 | 
						if (session->kex_prefs) {
 | 
				
			||||||
@@ -953,7 +953,7 @@ static int libssh2_kex_agree_kex_hostkey(LIBSSH2_SESSION *session, unsigned char
 | 
				
			|||||||
			unsigned char *q, *p = strchr(s, ',');
 | 
								unsigned char *q, *p = strchr(s, ',');
 | 
				
			||||||
			int method_len = (p ? (p - s) : strlen(s));
 | 
								int method_len = (p ? (p - s) : strlen(s));
 | 
				
			||||||
			if ((q = libssh2_kex_agree_instr(kex, kex_len, s, method_len))) {
 | 
								if ((q = libssh2_kex_agree_instr(kex, kex_len, s, method_len))) {
 | 
				
			||||||
				LIBSSH2_KEX_METHOD *method = (LIBSSH2_KEX_METHOD*)libssh2_get_method_by_name(s, method_len, (LIBSSH2_COMMON_METHOD**)kexp);
 | 
									const LIBSSH2_KEX_METHOD *method = (const LIBSSH2_KEX_METHOD*)libssh2_get_method_by_name(s, method_len, (const LIBSSH2_COMMON_METHOD**)kexp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (!method) {
 | 
									if (!method) {
 | 
				
			||||||
					/* Invalid method -- Should never be reached */
 | 
										/* Invalid method -- Should never be reached */
 | 
				
			||||||
@@ -1013,8 +1013,9 @@ static int libssh2_kex_agree_crypt(LIBSSH2_SESSION *session,
 | 
				
			|||||||
				   unsigned char *crypt,
 | 
									   unsigned char *crypt,
 | 
				
			||||||
				   unsigned long crypt_len)
 | 
									   unsigned long crypt_len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	LIBSSH2_CRYPT_METHOD **cryptp = libssh2_crypt_methods();
 | 
						const LIBSSH2_CRYPT_METHOD **cryptp = libssh2_crypt_methods();
 | 
				
			||||||
	unsigned char *s;
 | 
						unsigned char *s;
 | 
				
			||||||
 | 
						(void)session;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (endpoint->crypt_prefs) {
 | 
						if (endpoint->crypt_prefs) {
 | 
				
			||||||
		s = endpoint->crypt_prefs;
 | 
							s = endpoint->crypt_prefs;
 | 
				
			||||||
@@ -1024,8 +1025,8 @@ static int libssh2_kex_agree_crypt(LIBSSH2_SESSION *session,
 | 
				
			|||||||
			int method_len = (p ? (p - s) : strlen(s));
 | 
								int method_len = (p ? (p - s) : strlen(s));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (libssh2_kex_agree_instr(crypt, crypt_len, s, method_len)) {
 | 
								if (libssh2_kex_agree_instr(crypt, crypt_len, s, method_len)) {
 | 
				
			||||||
				LIBSSH2_CRYPT_METHOD *method =
 | 
									const LIBSSH2_CRYPT_METHOD *method =
 | 
				
			||||||
					(LIBSSH2_CRYPT_METHOD*)libssh2_get_method_by_name((char *)s, method_len, (LIBSSH2_COMMON_METHOD**)cryptp);
 | 
										(const LIBSSH2_CRYPT_METHOD*)libssh2_get_method_by_name((char *)s, method_len, (const LIBSSH2_COMMON_METHOD**)cryptp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (!method) {
 | 
									if (!method) {
 | 
				
			||||||
					/* Invalid method -- Should never be reached */
 | 
										/* Invalid method -- Should never be reached */
 | 
				
			||||||
@@ -1061,8 +1062,9 @@ static int libssh2_kex_agree_crypt(LIBSSH2_SESSION *session,
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
static int libssh2_kex_agree_mac(LIBSSH2_SESSION *session, libssh2_endpoint_data *endpoint, unsigned char *mac, unsigned long mac_len)
 | 
					static int libssh2_kex_agree_mac(LIBSSH2_SESSION *session, libssh2_endpoint_data *endpoint, unsigned char *mac, unsigned long mac_len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	LIBSSH2_MAC_METHOD **macp = libssh2_mac_methods();
 | 
						const LIBSSH2_MAC_METHOD **macp = libssh2_mac_methods();
 | 
				
			||||||
	unsigned char *s;
 | 
						unsigned char *s;
 | 
				
			||||||
 | 
						(void)session;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (endpoint->mac_prefs) {
 | 
						if (endpoint->mac_prefs) {
 | 
				
			||||||
		s = endpoint->mac_prefs;
 | 
							s = endpoint->mac_prefs;
 | 
				
			||||||
@@ -1072,7 +1074,7 @@ static int libssh2_kex_agree_mac(LIBSSH2_SESSION *session, libssh2_endpoint_data
 | 
				
			|||||||
			int method_len = (p ? (p - s) : strlen(s));
 | 
								int method_len = (p ? (p - s) : strlen(s));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (libssh2_kex_agree_instr(mac, mac_len, s, method_len)) {
 | 
								if (libssh2_kex_agree_instr(mac, mac_len, s, method_len)) {
 | 
				
			||||||
				LIBSSH2_MAC_METHOD *method = (LIBSSH2_MAC_METHOD*)libssh2_get_method_by_name(s, method_len, (LIBSSH2_COMMON_METHOD**)macp);
 | 
									const LIBSSH2_MAC_METHOD *method = (const LIBSSH2_MAC_METHOD*)libssh2_get_method_by_name(s, method_len, (const LIBSSH2_COMMON_METHOD**)macp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (!method) {
 | 
									if (!method) {
 | 
				
			||||||
					/* Invalid method -- Should never be reached */
 | 
										/* Invalid method -- Should never be reached */
 | 
				
			||||||
@@ -1110,6 +1112,7 @@ static int libssh2_kex_agree_comp(LIBSSH2_SESSION *session, libssh2_endpoint_dat
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	LIBSSH2_COMP_METHOD **compp = libssh2_comp_methods();
 | 
						LIBSSH2_COMP_METHOD **compp = libssh2_comp_methods();
 | 
				
			||||||
	unsigned char *s;
 | 
						unsigned char *s;
 | 
				
			||||||
 | 
						(void)session;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (endpoint->comp_prefs) {
 | 
						if (endpoint->comp_prefs) {
 | 
				
			||||||
		s = endpoint->comp_prefs;
 | 
							s = endpoint->comp_prefs;
 | 
				
			||||||
@@ -1119,7 +1122,7 @@ static int libssh2_kex_agree_comp(LIBSSH2_SESSION *session, libssh2_endpoint_dat
 | 
				
			|||||||
			int method_len = (p ? (p - s) : strlen(s));
 | 
								int method_len = (p ? (p - s) : strlen(s));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (libssh2_kex_agree_instr(comp, comp_len, s, method_len)) {
 | 
								if (libssh2_kex_agree_instr(comp, comp_len, s, method_len)) {
 | 
				
			||||||
				LIBSSH2_COMP_METHOD *method = (LIBSSH2_COMP_METHOD*)libssh2_get_method_by_name(s, method_len, (LIBSSH2_COMMON_METHOD**)compp);
 | 
									const LIBSSH2_COMP_METHOD *method = (const LIBSSH2_COMP_METHOD*)libssh2_get_method_by_name(s, method_len, (const LIBSSH2_COMMON_METHOD**)compp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (!method) {
 | 
									if (!method) {
 | 
				
			||||||
					/* Invalid method -- Should never be reached */
 | 
										/* Invalid method -- Should never be reached */
 | 
				
			||||||
@@ -1321,40 +1324,40 @@ LIBSSH2_API int libssh2_session_method_pref(LIBSSH2_SESSION *session, int method
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	char **prefvar, *s, *newprefs;
 | 
						char **prefvar, *s, *newprefs;
 | 
				
			||||||
	int prefs_len = strlen(prefs);
 | 
						int prefs_len = strlen(prefs);
 | 
				
			||||||
	LIBSSH2_COMMON_METHOD **mlist;
 | 
						const LIBSSH2_COMMON_METHOD **mlist;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (method_type) {
 | 
						switch (method_type) {
 | 
				
			||||||
		case LIBSSH2_METHOD_KEX:
 | 
							case LIBSSH2_METHOD_KEX:
 | 
				
			||||||
			prefvar = &session->kex_prefs;
 | 
								prefvar = &session->kex_prefs;
 | 
				
			||||||
			mlist = (LIBSSH2_COMMON_METHOD**)libssh2_kex_methods;
 | 
								mlist = (const LIBSSH2_COMMON_METHOD**)libssh2_kex_methods;
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case LIBSSH2_METHOD_HOSTKEY:
 | 
							case LIBSSH2_METHOD_HOSTKEY:
 | 
				
			||||||
			prefvar = &session->hostkey_prefs;
 | 
								prefvar = &session->hostkey_prefs;
 | 
				
			||||||
			mlist = (LIBSSH2_COMMON_METHOD**)libssh2_hostkey_methods();
 | 
								mlist = (const LIBSSH2_COMMON_METHOD**)libssh2_hostkey_methods();
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case LIBSSH2_METHOD_CRYPT_CS:
 | 
							case LIBSSH2_METHOD_CRYPT_CS:
 | 
				
			||||||
			prefvar = &session->local.crypt_prefs;
 | 
								prefvar = &session->local.crypt_prefs;
 | 
				
			||||||
			mlist = (LIBSSH2_COMMON_METHOD**)libssh2_crypt_methods();
 | 
								mlist = (const LIBSSH2_COMMON_METHOD**)libssh2_crypt_methods();
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case LIBSSH2_METHOD_CRYPT_SC:
 | 
							case LIBSSH2_METHOD_CRYPT_SC:
 | 
				
			||||||
			prefvar = &session->remote.crypt_prefs;
 | 
								prefvar = &session->remote.crypt_prefs;
 | 
				
			||||||
			mlist = (LIBSSH2_COMMON_METHOD**)libssh2_crypt_methods();
 | 
								mlist = (const LIBSSH2_COMMON_METHOD**)libssh2_crypt_methods();
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case LIBSSH2_METHOD_MAC_CS:
 | 
							case LIBSSH2_METHOD_MAC_CS:
 | 
				
			||||||
			prefvar = &session->local.mac_prefs;
 | 
								prefvar = &session->local.mac_prefs;
 | 
				
			||||||
			mlist = (LIBSSH2_COMMON_METHOD**)libssh2_mac_methods();
 | 
								mlist = (const LIBSSH2_COMMON_METHOD**)libssh2_mac_methods();
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case LIBSSH2_METHOD_MAC_SC:
 | 
							case LIBSSH2_METHOD_MAC_SC:
 | 
				
			||||||
			prefvar = &session->remote.mac_prefs;
 | 
								prefvar = &session->remote.mac_prefs;
 | 
				
			||||||
			mlist = (LIBSSH2_COMMON_METHOD**)libssh2_mac_methods();
 | 
								mlist = (const LIBSSH2_COMMON_METHOD**)libssh2_mac_methods();
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case LIBSSH2_METHOD_COMP_CS:
 | 
							case LIBSSH2_METHOD_COMP_CS:
 | 
				
			||||||
			prefvar = &session->local.comp_prefs;
 | 
								prefvar = &session->local.comp_prefs;
 | 
				
			||||||
			mlist = (LIBSSH2_COMMON_METHOD**)libssh2_comp_methods();
 | 
								mlist = (const LIBSSH2_COMMON_METHOD**)libssh2_comp_methods();
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case LIBSSH2_METHOD_COMP_SC:
 | 
							case LIBSSH2_METHOD_COMP_SC:
 | 
				
			||||||
			prefvar = &session->remote.comp_prefs;
 | 
								prefvar = &session->remote.comp_prefs;
 | 
				
			||||||
			mlist = (LIBSSH2_COMMON_METHOD**)libssh2_comp_methods();
 | 
								mlist = (const LIBSSH2_COMMON_METHOD**)libssh2_comp_methods();
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case LIBSSH2_METHOD_LANG_CS:
 | 
							case LIBSSH2_METHOD_LANG_CS:
 | 
				
			||||||
			prefvar = &session->local.lang_prefs;
 | 
								prefvar = &session->local.lang_prefs;
 | 
				
			||||||
@@ -1378,7 +1381,7 @@ LIBSSH2_API int libssh2_session_method_pref(LIBSSH2_SESSION *session, int method
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	while (s && *s) {
 | 
						while (s && *s) {
 | 
				
			||||||
		char *p = strchr(s, ',');
 | 
							char *p = strchr(s, ',');
 | 
				
			||||||
		int method_len = p ? (p - s) : strlen(s);
 | 
							int method_len = p ? (p - s) : (int) strlen(s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (!libssh2_get_method_by_name(s, method_len, mlist)) {
 | 
							if (!libssh2_get_method_by_name(s, method_len, mlist)) {
 | 
				
			||||||
			/* Strip out unsupported method */
 | 
								/* Strip out unsupported method */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -192,14 +192,14 @@ typedef struct _libssh2_endpoint_data {
 | 
				
			|||||||
	unsigned char *kexinit;
 | 
						unsigned char *kexinit;
 | 
				
			||||||
	unsigned long kexinit_len;
 | 
						unsigned long kexinit_len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	LIBSSH2_CRYPT_METHOD *crypt;
 | 
						const LIBSSH2_CRYPT_METHOD *crypt;
 | 
				
			||||||
	void *crypt_abstract;
 | 
						void *crypt_abstract;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	LIBSSH2_MAC_METHOD *mac;
 | 
						const LIBSSH2_MAC_METHOD *mac;
 | 
				
			||||||
	unsigned long seqno;
 | 
						unsigned long seqno;
 | 
				
			||||||
	void *mac_abstract;
 | 
						void *mac_abstract;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	LIBSSH2_COMP_METHOD *comp;
 | 
						const LIBSSH2_COMP_METHOD *comp;
 | 
				
			||||||
	void *comp_abstract;
 | 
						void *comp_abstract;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Method Preferences -- NULL yields "load order" */
 | 
						/* Method Preferences -- NULL yields "load order" */
 | 
				
			||||||
@@ -268,14 +268,14 @@ struct _LIBSSH2_SESSION {
 | 
				
			|||||||
	int flags;
 | 
						int flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Agreed Key Exchange Method */
 | 
						/* Agreed Key Exchange Method */
 | 
				
			||||||
	LIBSSH2_KEX_METHOD *kex;
 | 
						const LIBSSH2_KEX_METHOD *kex;
 | 
				
			||||||
	int burn_optimistic_kexinit:1;
 | 
						int burn_optimistic_kexinit:1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	unsigned char *session_id;
 | 
						unsigned char *session_id;
 | 
				
			||||||
	unsigned long session_id_len;
 | 
						unsigned long session_id_len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Server's public key */
 | 
						/* Server's public key */
 | 
				
			||||||
	LIBSSH2_HOSTKEY_METHOD *hostkey;
 | 
						const LIBSSH2_HOSTKEY_METHOD *hostkey;
 | 
				
			||||||
	void *server_hostkey_abstract;
 | 
						void *server_hostkey_abstract;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Either set with libssh2_session_hostkey() (for server mode)
 | 
						/* Either set with libssh2_session_hostkey() (for server mode)
 | 
				
			||||||
@@ -370,7 +370,7 @@ struct _LIBSSH2_CRYPT_METHOD {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	long flags;
 | 
						long flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	int (*init)(LIBSSH2_SESSION *session, LIBSSH2_CRYPT_METHOD *method, unsigned char *iv, int *free_iv, unsigned char *secret, int *free_secret, int encrypt, void **abstract);
 | 
						int (*init)(LIBSSH2_SESSION *session, const LIBSSH2_CRYPT_METHOD *method, unsigned char *iv, int *free_iv, unsigned char *secret, int *free_secret, int encrypt, void **abstract);
 | 
				
			||||||
	int (*crypt)(LIBSSH2_SESSION *session, unsigned char *block, void **abstract);
 | 
						int (*crypt)(LIBSSH2_SESSION *session, unsigned char *block, void **abstract);
 | 
				
			||||||
	int (*dtor)(LIBSSH2_SESSION *session, void **abstract);
 | 
						int (*dtor)(LIBSSH2_SESSION *session, void **abstract);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -550,13 +550,13 @@ libssh2pack_t libssh2_packet_read(LIBSSH2_SESSION *session);
 | 
				
			|||||||
int libssh2_packet_ask_ex(LIBSSH2_SESSION *session, unsigned char packet_type, unsigned char **data, unsigned long *data_len, unsigned long match_ofs, const unsigned char *match_buf, unsigned long match_len, int poll_socket);
 | 
					int libssh2_packet_ask_ex(LIBSSH2_SESSION *session, unsigned char packet_type, unsigned char **data, unsigned long *data_len, unsigned long match_ofs, const unsigned char *match_buf, unsigned long match_len, int poll_socket);
 | 
				
			||||||
#define libssh2_packet_ask(session, packet_type, data, data_len, poll_socket)	\
 | 
					#define libssh2_packet_ask(session, packet_type, data, data_len, poll_socket)	\
 | 
				
			||||||
		libssh2_packet_ask_ex((session), (packet_type), (data), (data_len), 0, NULL, 0, (poll_socket))
 | 
							libssh2_packet_ask_ex((session), (packet_type), (data), (data_len), 0, NULL, 0, (poll_socket))
 | 
				
			||||||
int libssh2_packet_askv_ex(LIBSSH2_SESSION *session, unsigned char *packet_types, unsigned char **data, unsigned long *data_len, unsigned long match_ofs, const unsigned char *match_buf, unsigned long match_len, int poll_socket);
 | 
					int libssh2_packet_askv_ex(LIBSSH2_SESSION *session, const unsigned char *packet_types, unsigned char **data, unsigned long *data_len, unsigned long match_ofs, const unsigned char *match_buf, unsigned long match_len, int poll_socket);
 | 
				
			||||||
#define libssh2_packet_askv(session, packet_types, data, data_len, poll_socket)	\
 | 
					#define libssh2_packet_askv(session, packet_types, data, data_len, poll_socket)	\
 | 
				
			||||||
		libssh2_packet_askv_ex((session), (packet_types), (data), (data_len), 0, NULL, 0, (poll_socket))
 | 
							libssh2_packet_askv_ex((session), (packet_types), (data), (data_len), 0, NULL, 0, (poll_socket))
 | 
				
			||||||
int libssh2_packet_require_ex(LIBSSH2_SESSION *session, unsigned char packet_type, unsigned char **data, unsigned long *data_len, unsigned long match_ofs, const unsigned char *match_buf, unsigned long match_len);
 | 
					int libssh2_packet_require_ex(LIBSSH2_SESSION *session, unsigned char packet_type, unsigned char **data, unsigned long *data_len, unsigned long match_ofs, const unsigned char *match_buf, unsigned long match_len);
 | 
				
			||||||
#define libssh2_packet_require(session, packet_type, data, data_len) \
 | 
					#define libssh2_packet_require(session, packet_type, data, data_len) \
 | 
				
			||||||
 libssh2_packet_require_ex((session), (packet_type), (data), (data_len), 0, NULL, 0)
 | 
					 libssh2_packet_require_ex((session), (packet_type), (data), (data_len), 0, NULL, 0)
 | 
				
			||||||
int libssh2_packet_requirev_ex(LIBSSH2_SESSION *session, unsigned char *packet_types, unsigned char **data, unsigned long *data_len, unsigned long match_ofs, const unsigned char *match_buf, unsigned long match_len);
 | 
					int libssh2_packet_requirev_ex(LIBSSH2_SESSION *session, const unsigned char *packet_types, unsigned char **data, unsigned long *data_len, unsigned long match_ofs, const unsigned char *match_buf, unsigned long match_len);
 | 
				
			||||||
#define libssh2_packet_requirev(session, packet_types, data, data_len)			\
 | 
					#define libssh2_packet_requirev(session, packet_types, data, data_len)			\
 | 
				
			||||||
		libssh2_packet_requirev_ex((session), (packet_types), (data), (data_len), 0, NULL, 0)
 | 
							libssh2_packet_requirev_ex((session), (packet_types), (data), (data_len), 0, NULL, 0)
 | 
				
			||||||
int libssh2_packet_burn(LIBSSH2_SESSION *session);
 | 
					int libssh2_packet_burn(LIBSSH2_SESSION *session);
 | 
				
			||||||
@@ -582,10 +582,10 @@ int _libssh2_channel_write_ex(LIBSSH2_CHANNEL *channel,
 | 
				
			|||||||
int _libssh2_channel_set_blocking(LIBSSH2_CHANNEL *channel, int blocking);
 | 
					int _libssh2_channel_set_blocking(LIBSSH2_CHANNEL *channel, int blocking);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Let crypt.c/hostkey.c/comp.c/mac.c expose their method structs */
 | 
					/* Let crypt.c/hostkey.c/comp.c/mac.c expose their method structs */
 | 
				
			||||||
LIBSSH2_CRYPT_METHOD **libssh2_crypt_methods(void);
 | 
					const LIBSSH2_CRYPT_METHOD **libssh2_crypt_methods(void);
 | 
				
			||||||
LIBSSH2_HOSTKEY_METHOD **libssh2_hostkey_methods(void);
 | 
					const LIBSSH2_HOSTKEY_METHOD **libssh2_hostkey_methods(void);
 | 
				
			||||||
LIBSSH2_COMP_METHOD **libssh2_comp_methods(void);
 | 
					const LIBSSH2_COMP_METHOD **libssh2_comp_methods(void);
 | 
				
			||||||
LIBSSH2_MAC_METHOD **libssh2_mac_methods(void);
 | 
					const LIBSSH2_MAC_METHOD **libssh2_mac_methods(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Language API doesn't exist yet.  Just act like we've agreed on a language */
 | 
					/* Language API doesn't exist yet.  Just act like we've agreed on a language */
 | 
				
			||||||
#define libssh2_kex_agree_lang(session, endpoint, str, str_len)	0
 | 
					#define libssh2_kex_agree_lang(session, endpoint, str, str_len)	0
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								src/mac.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								src/mac.c
									
									
									
									
									
								
							@@ -113,7 +113,7 @@ static int libssh2_mac_method_hmac_sha1_hash(LIBSSH2_SESSION *session, unsigned
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
/* }}} */
 | 
					/* }}} */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_MAC_METHOD libssh2_mac_method_hmac_sha1 = {
 | 
					static const LIBSSH2_MAC_METHOD libssh2_mac_method_hmac_sha1 = {
 | 
				
			||||||
	"hmac-sha1",
 | 
						"hmac-sha1",
 | 
				
			||||||
	20,
 | 
						20,
 | 
				
			||||||
	20,
 | 
						20,
 | 
				
			||||||
@@ -138,7 +138,7 @@ static int libssh2_mac_method_hmac_sha1_96_hash(LIBSSH2_SESSION *session, unsign
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
/* }}} */
 | 
					/* }}} */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_MAC_METHOD libssh2_mac_method_hmac_sha1_96 = {
 | 
					static const LIBSSH2_MAC_METHOD libssh2_mac_method_hmac_sha1_96 = {
 | 
				
			||||||
	"hmac-sha1-96",
 | 
						"hmac-sha1-96",
 | 
				
			||||||
	12,
 | 
						12,
 | 
				
			||||||
	20,
 | 
						20,
 | 
				
			||||||
@@ -173,7 +173,7 @@ static int libssh2_mac_method_hmac_md5_hash(LIBSSH2_SESSION *session, unsigned c
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
/* }}} */
 | 
					/* }}} */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_MAC_METHOD libssh2_mac_method_hmac_md5 = {
 | 
					static const LIBSSH2_MAC_METHOD libssh2_mac_method_hmac_md5 = {
 | 
				
			||||||
	"hmac-md5",
 | 
						"hmac-md5",
 | 
				
			||||||
	16,
 | 
						16,
 | 
				
			||||||
	16,
 | 
						16,
 | 
				
			||||||
@@ -198,7 +198,7 @@ static int libssh2_mac_method_hmac_md5_96_hash(LIBSSH2_SESSION *session, unsigne
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
/* }}} */
 | 
					/* }}} */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_MAC_METHOD libssh2_mac_method_hmac_md5_96 = {
 | 
					static const LIBSSH2_MAC_METHOD libssh2_mac_method_hmac_md5_96 = {
 | 
				
			||||||
	"hmac-md5-96",
 | 
						"hmac-md5-96",
 | 
				
			||||||
	12,
 | 
						12,
 | 
				
			||||||
	16,
 | 
						16,
 | 
				
			||||||
@@ -234,7 +234,7 @@ static int libssh2_mac_method_hmac_ripemd160_hash(LIBSSH2_SESSION *session, unsi
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
/* }}} */
 | 
					/* }}} */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_MAC_METHOD libssh2_mac_method_hmac_ripemd160 = {
 | 
					static const LIBSSH2_MAC_METHOD libssh2_mac_method_hmac_ripemd160 = {
 | 
				
			||||||
	"hmac-ripemd160",
 | 
						"hmac-ripemd160",
 | 
				
			||||||
	20,
 | 
						20,
 | 
				
			||||||
	20,
 | 
						20,
 | 
				
			||||||
@@ -243,7 +243,7 @@ static LIBSSH2_MAC_METHOD libssh2_mac_method_hmac_ripemd160 = {
 | 
				
			|||||||
	libssh2_mac_method_common_dtor,
 | 
						libssh2_mac_method_common_dtor,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_MAC_METHOD libssh2_mac_method_hmac_ripemd160_openssh_com = {
 | 
					static const LIBSSH2_MAC_METHOD libssh2_mac_method_hmac_ripemd160_openssh_com = {
 | 
				
			||||||
	"hmac-ripemd160@openssh.com",
 | 
						"hmac-ripemd160@openssh.com",
 | 
				
			||||||
	20,
 | 
						20,
 | 
				
			||||||
	20,
 | 
						20,
 | 
				
			||||||
@@ -253,7 +253,7 @@ static LIBSSH2_MAC_METHOD libssh2_mac_method_hmac_ripemd160_openssh_com = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
#endif /* LIBSSH2_HMAC_RIPEMD */
 | 
					#endif /* LIBSSH2_HMAC_RIPEMD */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static LIBSSH2_MAC_METHOD *_libssh2_mac_methods[] = {
 | 
					static const LIBSSH2_MAC_METHOD *_libssh2_mac_methods[] = {
 | 
				
			||||||
	&libssh2_mac_method_hmac_sha1,
 | 
						&libssh2_mac_method_hmac_sha1,
 | 
				
			||||||
	&libssh2_mac_method_hmac_sha1_96,
 | 
						&libssh2_mac_method_hmac_sha1_96,
 | 
				
			||||||
	&libssh2_mac_method_hmac_md5,
 | 
						&libssh2_mac_method_hmac_md5,
 | 
				
			||||||
@@ -268,7 +268,7 @@ static LIBSSH2_MAC_METHOD *_libssh2_mac_methods[] = {
 | 
				
			|||||||
	NULL
 | 
						NULL
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIBSSH2_MAC_METHOD **libssh2_mac_methods(void) {
 | 
					const LIBSSH2_MAC_METHOD **libssh2_mac_methods(void) {
 | 
				
			||||||
	return _libssh2_mac_methods;
 | 
						return _libssh2_mac_methods;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -186,10 +186,10 @@ void _libssh2_debug(LIBSSH2_SESSION *session, int context,
 | 
				
			|||||||
	char buffer[1536];
 | 
						char buffer[1536];
 | 
				
			||||||
	int len;
 | 
						int len;
 | 
				
			||||||
	va_list vargs;
 | 
						va_list vargs;
 | 
				
			||||||
	static const char *contexts[9] = {
 | 
						static const char * const contexts[9] = {
 | 
				
			||||||
		"Unknown",
 | 
							"Unknown",
 | 
				
			||||||
		"Transport",
 | 
							"Transport",
 | 
				
			||||||
		"Key Exhange",
 | 
							"Key Exchange",
 | 
				
			||||||
		"Userauth",
 | 
							"Userauth",
 | 
				
			||||||
		"Connection",
 | 
							"Connection",
 | 
				
			||||||
		"scp",
 | 
							"scp",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -651,7 +651,7 @@ int libssh2_packet_ask_ex(LIBSSH2_SESSION *session, unsigned char packet_type,
 | 
				
			|||||||
 * socket for a packet first
 | 
					 * socket for a packet first
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int libssh2_packet_askv_ex(LIBSSH2_SESSION *session,
 | 
					int libssh2_packet_askv_ex(LIBSSH2_SESSION *session,
 | 
				
			||||||
                           unsigned char *packet_types,
 | 
					                           const unsigned char *packet_types,
 | 
				
			||||||
                           unsigned char **data,
 | 
					                           unsigned char **data,
 | 
				
			||||||
                           unsigned long *data_len,
 | 
					                           unsigned long *data_len,
 | 
				
			||||||
                           unsigned long match_ofs,
 | 
					                           unsigned long match_ofs,
 | 
				
			||||||
@@ -816,7 +816,7 @@ int libssh2_packet_burn(LIBSSH2_SESSION *session)
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int libssh2_packet_requirev_ex(LIBSSH2_SESSION *session,
 | 
					int libssh2_packet_requirev_ex(LIBSSH2_SESSION *session,
 | 
				
			||||||
                               unsigned char *packet_types,
 | 
					                               const unsigned char *packet_types,
 | 
				
			||||||
                               unsigned char **data, unsigned long *data_len,
 | 
					                               unsigned char **data, unsigned long *data_len,
 | 
				
			||||||
                               unsigned long match_ofs,
 | 
					                               unsigned long match_ofs,
 | 
				
			||||||
                               const unsigned char *match_buf,
 | 
					                               const unsigned char *match_buf,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -555,7 +555,7 @@ LIBSSH2_API int libssh2_session_disconnect_ex(LIBSSH2_SESSION *session, int reas
 | 
				
			|||||||
LIBSSH2_API const char *libssh2_session_methods(LIBSSH2_SESSION *session, int method_type)
 | 
					LIBSSH2_API const char *libssh2_session_methods(LIBSSH2_SESSION *session, int method_type)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* All methods have char *name as their first element */
 | 
						/* All methods have char *name as their first element */
 | 
				
			||||||
	LIBSSH2_KEX_METHOD *method = NULL;
 | 
						const LIBSSH2_KEX_METHOD *method = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch(method_type) {
 | 
						switch(method_type) {
 | 
				
			||||||
		case LIBSSH2_METHOD_KEX:
 | 
							case LIBSSH2_METHOD_KEX:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								src/sftp.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								src/sftp.c
									
									
									
									
									
								
							@@ -293,7 +293,7 @@ static int libssh2_sftp_packet_require(LIBSSH2_SFTP *sftp, unsigned char packet_
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
static int libssh2_sftp_packet_requirev(LIBSSH2_SFTP *sftp,
 | 
					static int libssh2_sftp_packet_requirev(LIBSSH2_SFTP *sftp,
 | 
				
			||||||
                                        int num_valid_responses,
 | 
					                                        int num_valid_responses,
 | 
				
			||||||
                                        unsigned char *valid_responses,
 | 
					                                        const unsigned char *valid_responses,
 | 
				
			||||||
                                        unsigned long request_id,
 | 
					                                        unsigned long request_id,
 | 
				
			||||||
                                        unsigned char **data,
 | 
					                                        unsigned char **data,
 | 
				
			||||||
                                        unsigned long *data_len)
 | 
					                                        unsigned long *data_len)
 | 
				
			||||||
@@ -572,7 +572,7 @@ LIBSSH2_API LIBSSH2_SFTP_HANDLE *libssh2_sftp_open_ex(LIBSSH2_SFTP *sftp, char *
 | 
				
			|||||||
	ssize_t packet_len = filename_len + 13 + ((open_type == LIBSSH2_SFTP_OPENFILE) ? (4 + libssh2_sftp_attrsize(&attrs)) : 0);
 | 
						ssize_t packet_len = filename_len + 13 + ((open_type == LIBSSH2_SFTP_OPENFILE) ? (4 + libssh2_sftp_attrsize(&attrs)) : 0);
 | 
				
			||||||
                                                        /* packet_len(4) + packet_type(1) + request_id(4) + filename_len(4) + flags(4) */
 | 
					                                                        /* packet_len(4) + packet_type(1) + request_id(4) + filename_len(4) + flags(4) */
 | 
				
			||||||
        unsigned char *packet, *data, *s;
 | 
					        unsigned char *packet, *data, *s;
 | 
				
			||||||
        unsigned char fopen_responses[2] = { SSH_FXP_HANDLE,    SSH_FXP_STATUS  };
 | 
					        static const unsigned char fopen_responses[2] = { SSH_FXP_HANDLE,    SSH_FXP_STATUS  };
 | 
				
			||||||
        unsigned long request_id;
 | 
					        unsigned long request_id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        s = packet = LIBSSH2_ALLOC(session, packet_len);
 | 
					        s = packet = LIBSSH2_ALLOC(session, packet_len);
 | 
				
			||||||
@@ -666,7 +666,7 @@ static ssize_t _libssh2_sftp_read(LIBSSH2_SFTP_HANDLE *handle,
 | 
				
			|||||||
        unsigned long data_len, request_id;
 | 
					        unsigned long data_len, request_id;
 | 
				
			||||||
        ssize_t packet_len = handle->handle_len + 25; /* packet_len(4) + packet_type(1) + request_id(4) + handle_len(4) + offset(8) + length(4) */
 | 
					        ssize_t packet_len = handle->handle_len + 25; /* packet_len(4) + packet_type(1) + request_id(4) + handle_len(4) + offset(8) + length(4) */
 | 
				
			||||||
        unsigned char *packet, *s, *data;
 | 
					        unsigned char *packet, *s, *data;
 | 
				
			||||||
        unsigned char read_responses[2] = { SSH_FXP_DATA,               SSH_FXP_STATUS };
 | 
					        static const unsigned char read_responses[2] = { SSH_FXP_DATA,               SSH_FXP_STATUS };
 | 
				
			||||||
        size_t bytes_read = 0;
 | 
					        size_t bytes_read = 0;
 | 
				
			||||||
        size_t bytes_requested = 0;
 | 
					        size_t bytes_requested = 0;
 | 
				
			||||||
        size_t total_read = 0;
 | 
					        size_t total_read = 0;
 | 
				
			||||||
@@ -822,7 +822,7 @@ LIBSSH2_API int libssh2_sftp_readdir(LIBSSH2_SFTP_HANDLE *handle, char *buffer,
 | 
				
			|||||||
        unsigned long data_len, request_id, filename_len, num_names;
 | 
					        unsigned long data_len, request_id, filename_len, num_names;
 | 
				
			||||||
        ssize_t packet_len = handle->handle_len + 13; /* packet_len(4) + packet_type(1) + request_id(4) + handle_len(4) */
 | 
					        ssize_t packet_len = handle->handle_len + 13; /* packet_len(4) + packet_type(1) + request_id(4) + handle_len(4) */
 | 
				
			||||||
        unsigned char *packet, *s, *data;
 | 
					        unsigned char *packet, *s, *data;
 | 
				
			||||||
        unsigned char read_responses[2] = { SSH_FXP_NAME,               SSH_FXP_STATUS };
 | 
					        static const unsigned char read_responses[2] = { SSH_FXP_NAME,               SSH_FXP_STATUS };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (handle->u.dir.names_left) {
 | 
					        if (handle->u.dir.names_left) {
 | 
				
			||||||
                /* A prior request returned more than one directory entry, feed it back from the buffer */
 | 
					                /* A prior request returned more than one directory entry, feed it back from the buffer */
 | 
				
			||||||
@@ -1051,7 +1051,7 @@ LIBSSH2_API int libssh2_sftp_fstat_ex(LIBSSH2_SFTP_HANDLE *handle, LIBSSH2_SFTP_
 | 
				
			|||||||
        ssize_t packet_len = handle->handle_len + 13 + (setstat ? libssh2_sftp_attrsize(attrs) : 0);
 | 
					        ssize_t packet_len = handle->handle_len + 13 + (setstat ? libssh2_sftp_attrsize(attrs) : 0);
 | 
				
			||||||
                                                                                        /* packet_len(4) + packet_type(1) + request_id(4) + handle_len(4) */
 | 
					                                                                                        /* packet_len(4) + packet_type(1) + request_id(4) + handle_len(4) */
 | 
				
			||||||
        unsigned char *packet, *s, *data;
 | 
					        unsigned char *packet, *s, *data;
 | 
				
			||||||
        unsigned char fstat_responses[2] = { SSH_FXP_ATTRS,             SSH_FXP_STATUS };
 | 
					        static const unsigned char fstat_responses[2] = { SSH_FXP_ATTRS,             SSH_FXP_STATUS };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _libssh2_debug(session, LIBSSH2_DBG_SFTP, "Issuing %s command", setstat ? "set-stat" : "stat");
 | 
					        _libssh2_debug(session, LIBSSH2_DBG_SFTP, "Issuing %s command", setstat ? "set-stat" : "stat");
 | 
				
			||||||
        s = packet = LIBSSH2_ALLOC(session, packet_len);
 | 
					        s = packet = LIBSSH2_ALLOC(session, packet_len);
 | 
				
			||||||
@@ -1442,7 +1442,7 @@ LIBSSH2_API int libssh2_sftp_stat_ex(LIBSSH2_SFTP *sftp, char *path, unsigned in
 | 
				
			|||||||
        ssize_t packet_len = path_len + 13 + ((stat_type == LIBSSH2_SFTP_SETSTAT) ? libssh2_sftp_attrsize(attrs) : 0);
 | 
					        ssize_t packet_len = path_len + 13 + ((stat_type == LIBSSH2_SFTP_SETSTAT) ? libssh2_sftp_attrsize(attrs) : 0);
 | 
				
			||||||
                                                                        /* packet_len(4) + packet_type(1) + request_id(4) + path_len(4) */
 | 
					                                                                        /* packet_len(4) + packet_type(1) + request_id(4) + path_len(4) */
 | 
				
			||||||
        unsigned char *packet, *s, *data;
 | 
					        unsigned char *packet, *s, *data;
 | 
				
			||||||
        unsigned char stat_responses[2] = { SSH_FXP_ATTRS,              SSH_FXP_STATUS  };
 | 
					        static const unsigned char stat_responses[2] = { SSH_FXP_ATTRS,              SSH_FXP_STATUS  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        _libssh2_debug(session, LIBSSH2_DBG_SFTP, "%s %s", (stat_type == LIBSSH2_SFTP_SETSTAT) ? "Set-statting" : (stat_type == LIBSSH2_SFTP_LSTAT ? "LStatting" : "Statting"), path);
 | 
					        _libssh2_debug(session, LIBSSH2_DBG_SFTP, "%s %s", (stat_type == LIBSSH2_SFTP_SETSTAT) ? "Set-statting" : (stat_type == LIBSSH2_SFTP_LSTAT ? "LStatting" : "Statting"), path);
 | 
				
			||||||
        s = packet = LIBSSH2_ALLOC(session, packet_len);
 | 
					        s = packet = LIBSSH2_ALLOC(session, packet_len);
 | 
				
			||||||
@@ -1517,7 +1517,7 @@ LIBSSH2_API int libssh2_sftp_symlink_ex(LIBSSH2_SFTP *sftp, const char *path, un
 | 
				
			|||||||
        ssize_t packet_len = path_len + 13 + ((link_type == LIBSSH2_SFTP_SYMLINK) ? (4 + target_len) : 0);
 | 
					        ssize_t packet_len = path_len + 13 + ((link_type == LIBSSH2_SFTP_SYMLINK) ? (4 + target_len) : 0);
 | 
				
			||||||
                                                                        /* packet_len(4) + packet_type(1) + request_id(4) + path_len(4) */
 | 
					                                                                        /* packet_len(4) + packet_type(1) + request_id(4) + path_len(4) */
 | 
				
			||||||
        unsigned char *packet, *s, *data;
 | 
					        unsigned char *packet, *s, *data;
 | 
				
			||||||
        unsigned char link_responses[2] = { SSH_FXP_NAME,               SSH_FXP_STATUS  };
 | 
					        static const unsigned char link_responses[2] = { SSH_FXP_NAME,               SSH_FXP_STATUS  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ((sftp->version < 3) &&
 | 
					        if ((sftp->version < 3) &&
 | 
				
			||||||
                (link_type != LIBSSH2_SFTP_REALPATH)) {
 | 
					                (link_type != LIBSSH2_SFTP_REALPATH)) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,7 +54,7 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
LIBSSH2_API char *libssh2_userauth_list(LIBSSH2_SESSION *session, const char *username, unsigned int username_len)
 | 
					LIBSSH2_API char *libssh2_userauth_list(LIBSSH2_SESSION *session, const char *username, unsigned int username_len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned char reply_codes[3] = { SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, 0 };
 | 
						static const unsigned char reply_codes[3] = { SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, 0 };
 | 
				
			||||||
	unsigned long data_len = username_len + 31; /* packet_type(1) + username_len(4) + service_len(4) + service(14)"ssh-connection" +
 | 
						unsigned long data_len = username_len + 31; /* packet_type(1) + username_len(4) + service_len(4) + service(14)"ssh-connection" +
 | 
				
			||||||
												   method_len(4) + method(4)"none" */
 | 
																	   method_len(4) + method(4)"none" */
 | 
				
			||||||
	unsigned long methods_len;
 | 
						unsigned long methods_len;
 | 
				
			||||||
@@ -121,7 +121,8 @@ LIBSSH2_API int libssh2_userauth_password_ex(LIBSSH2_SESSION *session, const cha
 | 
				
			|||||||
																	   const char *password, unsigned int password_len,
 | 
																						   const char *password, unsigned int password_len,
 | 
				
			||||||
																	   LIBSSH2_PASSWD_CHANGEREQ_FUNC((*passwd_change_cb)))
 | 
																						   LIBSSH2_PASSWD_CHANGEREQ_FUNC((*passwd_change_cb)))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unsigned char *data, *s, reply_codes[4] = { SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, SSH_MSG_USERAUTH_PASSWD_CHANGEREQ, 0 };
 | 
						unsigned char *data, *s;
 | 
				
			||||||
 | 
						static const unsigned char reply_codes[4] = { SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, SSH_MSG_USERAUTH_PASSWD_CHANGEREQ, 0 };
 | 
				
			||||||
	unsigned long data_len = username_len + password_len + 40; /* packet_type(1) + username_len(4) + service_len(4) + service(14)"ssh-connection" + 
 | 
						unsigned long data_len = username_len + password_len + 40; /* packet_type(1) + username_len(4) + service_len(4) + service(14)"ssh-connection" + 
 | 
				
			||||||
																  method_len(4) + method(8)"password" + chgpwdbool(1) + password_len(4) */
 | 
																					  method_len(4) + method(8)"password" + chgpwdbool(1) + password_len(4) */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -316,11 +317,11 @@ static int libssh2_file_read_publickey(LIBSSH2_SESSION *session, unsigned char *
 | 
				
			|||||||
/* {{{ libssh2_file_read_privatekey
 | 
					/* {{{ libssh2_file_read_privatekey
 | 
				
			||||||
 * Read a PEM encoded private key from an id_??? style file
 | 
					 * Read a PEM encoded private key from an id_??? style file
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static int libssh2_file_read_privatekey(LIBSSH2_SESSION *session,	LIBSSH2_HOSTKEY_METHOD **hostkey_method, void **hostkey_abstract,
 | 
					static int libssh2_file_read_privatekey(LIBSSH2_SESSION *session,	const LIBSSH2_HOSTKEY_METHOD **hostkey_method, void **hostkey_abstract,
 | 
				
			||||||
																	const char *method, int method_len,
 | 
																						const char *method, int method_len,
 | 
				
			||||||
																	const char *privkeyfile, const char *passphrase)
 | 
																						const char *privkeyfile, const char *passphrase)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	LIBSSH2_HOSTKEY_METHOD **hostkey_methods_avail = libssh2_hostkey_methods();
 | 
						const LIBSSH2_HOSTKEY_METHOD **hostkey_methods_avail = libssh2_hostkey_methods();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_libssh2_debug(session, LIBSSH2_DBG_AUTH, "Loading private key file: %s", privkeyfile);
 | 
						_libssh2_debug(session, LIBSSH2_DBG_AUTH, "Loading private key file: %s", privkeyfile);
 | 
				
			||||||
	*hostkey_method = NULL;
 | 
						*hostkey_method = NULL;
 | 
				
			||||||
@@ -356,11 +357,12 @@ LIBSSH2_API int libssh2_userauth_hostbased_fromfile_ex(LIBSSH2_SESSION *session,
 | 
				
			|||||||
																				 const char *hostname, unsigned int hostname_len,
 | 
																									 const char *hostname, unsigned int hostname_len,
 | 
				
			||||||
																				 const char *local_username, unsigned int local_username_len)
 | 
																									 const char *local_username, unsigned int local_username_len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	LIBSSH2_HOSTKEY_METHOD *privkeyobj;
 | 
						const LIBSSH2_HOSTKEY_METHOD *privkeyobj;
 | 
				
			||||||
	void *abstract;
 | 
						void *abstract;
 | 
				
			||||||
	unsigned char buf[5];
 | 
						unsigned char buf[5];
 | 
				
			||||||
	struct iovec datavec[4];
 | 
						struct iovec datavec[4];
 | 
				
			||||||
	unsigned char *method, *pubkeydata, *packet, *s, *sig, *data, reply_codes[3] = { SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, 0 };
 | 
						unsigned char *method, *pubkeydata, *packet, *s, *sig, *data;
 | 
				
			||||||
 | 
						static const unsigned char reply_codes[3] = { SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, 0 };
 | 
				
			||||||
	unsigned long method_len, pubkeydata_len, packet_len, sig_len, data_len;
 | 
						unsigned long method_len, pubkeydata_len, packet_len, sig_len, data_len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (libssh2_file_read_publickey(session, &method, &method_len, &pubkeydata, &pubkeydata_len, publickey)) {
 | 
						if (libssh2_file_read_publickey(session, &method, &method_len, &pubkeydata, &pubkeydata_len, publickey)) {
 | 
				
			||||||
@@ -490,7 +492,7 @@ LIBSSH2_API int libssh2_userauth_publickey_fromfile_ex(LIBSSH2_SESSION *session,
 | 
				
			|||||||
                                                                                 const char *publickey, const char *privatekey,
 | 
					                                                                                 const char *publickey, const char *privatekey,
 | 
				
			||||||
                                                                                 const char *passphrase)
 | 
					                                                                                 const char *passphrase)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	LIBSSH2_HOSTKEY_METHOD *privkeyobj;
 | 
						const LIBSSH2_HOSTKEY_METHOD *privkeyobj;
 | 
				
			||||||
	void *abstract;
 | 
						void *abstract;
 | 
				
			||||||
	unsigned char buf[5];
 | 
						unsigned char buf[5];
 | 
				
			||||||
	struct iovec datavec[4];
 | 
						struct iovec datavec[4];
 | 
				
			||||||
@@ -707,7 +709,7 @@ LIBSSH2_API int libssh2_userauth_keyboard_interactive_ex(LIBSSH2_SESSION *sessio
 | 
				
			|||||||
	LIBSSH2_FREE(session, data);
 | 
						LIBSSH2_FREE(session, data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (;;) {
 | 
						for (;;) {
 | 
				
			||||||
		unsigned char reply_codes[4] = { SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, SSH_MSG_USERAUTH_INFO_REQUEST, 0 };
 | 
							static const unsigned char reply_codes[4] = { SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, SSH_MSG_USERAUTH_INFO_REQUEST, 0 };
 | 
				
			||||||
		unsigned int auth_name_len;
 | 
							unsigned int auth_name_len;
 | 
				
			||||||
		char* auth_name = NULL;
 | 
							char* auth_name = NULL;
 | 
				
			||||||
		unsigned auth_instruction_len;
 | 
							unsigned auth_instruction_len;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user