aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libssh/gssapi.h7
-rw-r--r--include/libssh/messages.h5
-rw-r--r--include/libssh/priv.h3
-rw-r--r--src/channels.c6
-rw-r--r--src/gssapi.c13
-rw-r--r--src/messages.c15
-rw-r--r--src/packet.c14
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