diff options
-rw-r--r-- | include/libssh/gssapi.h | 7 | ||||
-rw-r--r-- | include/libssh/messages.h | 5 | ||||
-rw-r--r-- | include/libssh/priv.h | 3 | ||||
-rw-r--r-- | src/channels.c | 6 | ||||
-rw-r--r-- | src/gssapi.c | 13 | ||||
-rw-r--r-- | src/messages.c | 15 | ||||
-rw-r--r-- | src/packet.c | 14 |
7 files changed, 49 insertions, 14 deletions
diff --git a/include/libssh/gssapi.h b/include/libssh/gssapi.h index ad85e948..ccd83664 100644 --- a/include/libssh/gssapi.h +++ b/include/libssh/gssapi.h @@ -31,13 +31,14 @@ typedef struct ssh_gssapi_struct *ssh_gssapi; #ifdef WITH_SERVER int ssh_gssapi_handle_userauth(ssh_session session, const char *user, uint32_t n_oid, ssh_string *oids); -SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token); SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token_server); -SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token_client); SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_mic); +#endif /* WITH_SERVER */ + +SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token); +SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token_client); SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_response); -#endif /* WITH_SERVER */ int ssh_gssapi_auth_mic(ssh_session session); diff --git a/include/libssh/messages.h b/include/libssh/messages.h index dbe437b2..e766d08b 100644 --- a/include/libssh/messages.h +++ b/include/libssh/messages.h @@ -92,9 +92,12 @@ struct ssh_message_struct { }; SSH_PACKET_CALLBACK(ssh_packet_channel_open); +SSH_PACKET_CALLBACK(ssh_packet_global_request); + +#ifdef WITH_SERVER SSH_PACKET_CALLBACK(ssh_packet_service_request); SSH_PACKET_CALLBACK(ssh_packet_userauth_request); -SSH_PACKET_CALLBACK(ssh_packet_global_request); +#endif /* WITH_SERVER */ int ssh_message_handle_channel_request(ssh_session session, ssh_channel channel, ssh_buffer packet, const char *request, uint8_t want_reply); diff --git a/include/libssh/priv.h b/include/libssh/priv.h index c985a3ab..7168cf55 100644 --- a/include/libssh/priv.h +++ b/include/libssh/priv.h @@ -180,9 +180,10 @@ void _ssh_set_error_invalid(void *error, const char *function); /* server.c */ +#ifdef WITH_SERVER int ssh_auth_reply_default(ssh_session session,int partial); int ssh_auth_reply_success(ssh_session session, int partial); - +#endif /* client.c */ int ssh_send_banner(ssh_session session, int is_server); diff --git a/src/channels.c b/src/channels.c index f6f992bd..687a8ee9 100644 --- a/src/channels.c +++ b/src/channels.c @@ -843,12 +843,16 @@ SSH_PACKET_CALLBACK(channel_rcv_request) { leave_function(); return SSH_PACKET_USED; } +#ifdef WITH_SERVER /* If we are here, that means we have a request that is not in the understood * client requests. That means we need to create a ssh message to be passed * to the user code handling ssh messages */ ssh_message_handle_channel_request(session,channel,packet,request,status); - +#else + SSH_LOG(session,SSH_LOG_WARNING, "Unhandled channel request %s", request); +#endif + SAFE_FREE(request); leave_function(); diff --git a/src/gssapi.c b/src/gssapi.c index c8c00a0a..163febe6 100644 --- a/src/gssapi.c +++ b/src/gssapi.c @@ -121,6 +121,8 @@ static int ssh_gssapi_send_response(ssh_session session, ssh_string oid){ return SSH_OK; } +#endif /* WITH_SERVER */ + static void ssh_gssapi_log_error(ssh_session session, int verb, const char *msg, int maj_stat){ gss_buffer_desc buffer; OM_uint32 dummy, message_context; @@ -128,6 +130,8 @@ static void ssh_gssapi_log_error(ssh_session session, int verb, const char *msg, ssh_log(session, verb, "GSSAPI(%s): %s", msg, (const char *)buffer.value); } +#ifdef WITH_SERVER + /** @internal * @brief handles an user authentication using GSSAPI */ @@ -251,6 +255,8 @@ int ssh_gssapi_handle_userauth(ssh_session session, const char *user, uint32_t n return ssh_gssapi_send_response(session, oids[i]); } +#endif /* WITH_SERVER */ + static char * ssh_gssapi_name_to_char(ssh_session session, gss_name_t name){ gss_buffer_desc buffer; OM_uint32 maj_stat, min_stat; @@ -265,6 +271,8 @@ static char * ssh_gssapi_name_to_char(ssh_session session, gss_name_t name){ } +#ifdef WITH_SERVER + SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token_server){ ssh_string token; char *hexa; @@ -349,6 +357,8 @@ SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token_server){ return SSH_PACKET_USED; } +#endif /* WITH_SERVER */ + static ssh_buffer ssh_gssapi_build_mic(ssh_session session){ ssh_buffer mic_buffer = ssh_buffer_new(); ssh_string str; @@ -377,6 +387,8 @@ static ssh_buffer ssh_gssapi_build_mic(ssh_session session){ return mic_buffer; } +#ifdef WITH_SERVER + SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_mic){ ssh_string mic_token; OM_uint32 maj_stat, min_stat; @@ -824,7 +836,6 @@ SSH_PACKET_CALLBACK(ssh_packet_userauth_gssapi_token_client){ } if (GSS_ERROR(maj_stat)){ ssh_gssapi_log_error(session, SSH_LOG_PROTOCOL, "Gssapi error", maj_stat); - ssh_auth_reply_default(session,0); ssh_gssapi_free(session); session->gssapi=NULL; return SSH_PACKET_USED; diff --git a/src/messages.c b/src/messages.c index d4dd4380..47785ae4 100644 --- a/src/messages.c +++ b/src/messages.c @@ -93,6 +93,7 @@ static int ssh_message_reply_default(ssh_message msg) { #endif +#ifdef WITH_SERVER /** @internal * Executes the callbacks defined in session->server_callbacks, out of an ssh_message * I don't like ssh_message interface but it works. @@ -258,6 +259,8 @@ static int ssh_execute_server_callbacks(ssh_session session, ssh_message msg){ return SSH_AGAIN; } +#endif /* WITH_SERVER */ + static int ssh_execute_message_callback(ssh_session session, ssh_message msg) { int ret; if(session->ssh_message_callback != NULL) { @@ -282,7 +285,6 @@ static int ssh_execute_message_callback(ssh_session session, ssh_message msg) { return SSH_OK; } - /** * @internal * @@ -294,8 +296,9 @@ static int ssh_execute_message_callback(ssh_session session, ssh_message msg) { * @param[in] message The message to add to the queue. */ void ssh_message_queue(ssh_session session, ssh_message message){ - int ret; if (message != NULL) { +#ifdef WITH_SERVER + int ret; /* probably not the best place to execute server callbacks, but still better * than nothing. */ @@ -304,6 +307,7 @@ void ssh_message_queue(ssh_session session, ssh_message message){ ssh_message_free(message); return; } +#endif /* WITH_SERVER */ if(session->ssh_message_callback != NULL) { ssh_execute_message_callback(session, message); return; @@ -477,6 +481,8 @@ void ssh_message_free(ssh_message msg){ SAFE_FREE(msg); } +#ifdef WITH_SERVER + SSH_PACKET_CALLBACK(ssh_packet_service_request){ ssh_string service = NULL; char *service_c = NULL; @@ -888,6 +894,7 @@ end: return SSH_PACKET_USED; } +#endif /* WITH_SERVER */ /** * @internal * @@ -902,7 +909,7 @@ SSH_PACKET_CALLBACK(ssh_packet_userauth_info_response){ (void)user; return SSH_PACKET_USED; } -#else +#else /* WITH_SERVER */ SSH_PACKET_CALLBACK(ssh_packet_userauth_info_response){ uint32_t nanswers; uint32_t i; @@ -1011,7 +1018,7 @@ error: leave_function(); return SSH_PACKET_USED; } -#endif +#endif /* WITH_SERVER */ SSH_PACKET_CALLBACK(ssh_packet_channel_open){ ssh_message msg = NULL; diff --git a/src/packet.c b/src/packet.c index 4dee9c33..eb31d704 100644 --- a/src/packet.c +++ b/src/packet.c @@ -55,7 +55,11 @@ static ssh_packet_callback default_packet_handlers[]= { ssh_packet_ignore_callback, // SSH2_MSG_IGNORE 2 ssh_packet_unimplemented, // SSH2_MSG_UNIMPLEMENTED 3 ssh_packet_ignore_callback, // SSH2_MSG_DEBUG 4 +#if WITH_SERVER ssh_packet_service_request, // SSH2_MSG_SERVICE_REQUEST 5 +#else + NULL, +#endif ssh_packet_service_accept, // SSH2_MSG_SERVICE_ACCEPT 6 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // 7-19 @@ -77,7 +81,11 @@ static ssh_packet_callback default_packet_handlers[]= { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // 35-49 +#if WITH_SERVER ssh_packet_userauth_request, // SSH2_MSG_USERAUTH_REQUEST 50 +#else + NULL, +#endif ssh_packet_userauth_failure, // SSH2_MSG_USERAUTH_FAILURE 51 ssh_packet_userauth_success, // SSH2_MSG_USERAUTH_SUCCESS 52 ssh_packet_userauth_banner, // SSH2_MSG_USERAUTH_BANNER 53 @@ -92,11 +100,11 @@ static ssh_packet_callback default_packet_handlers[]= { NULL, // SSH2_MSG_USERAUTH_GSSAPI_EXCHANGE_COMPLETE 63 NULL, // SSH2_MSG_USERAUTH_GSSAPI_ERROR 64 NULL, // SSH2_MSG_USERAUTH_GSSAPI_ERRTOK 65 -#ifdef WITH_GSSAPI +#if WITH_GSSAPI && WITH_SERVER ssh_packet_userauth_gssapi_mic, // SSH2_MSG_USERAUTH_GSSAPI_MIC 66 -#else /* WITH_GSSAPI */ +#else /* WITH_GSSAPI && WITH_SERVER */ NULL, -#endif /* WITH_GSSAPI */ +#endif /* WITH_GSSAPI && WITH_SERVER */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, // 67-79 |