The libssh callbacks
Overview
Callback which can be replaced in libssh. More…
// typedefs typedef int (*ssh_auth_gssapi_mic_callback)( ssh_session session, const char *user, const char *principal, void *userdata ); typedef int (*ssh_auth_none_callback)( ssh_session session, const char *user, void *userdata ); typedef int (*ssh_auth_password_callback)( ssh_session session, const char *user, const char *password, void *userdata ); typedef int (*ssh_auth_pubkey_callback)( ssh_session session, const char *user, struct ssh_key_struct *pubkey, char signature_state, void *userdata ); typedef int (*ssh_callback_data)( const void *data, size_t len, void *user ); typedef void (*ssh_callback_int)( int code, void *user ); typedef void (*ssh_callback_int_int)( int code, int errno_code, void *user ); typedef void (*ssh_channel_auth_agent_req_callback)( ssh_session session, ssh_channel channel, void *userdata ); typedef int (*ssh_channel_callback_data)( ssh_channel channel, int code, void *data, size_t len, void *user ); typedef int (*ssh_channel_callback_int)( ssh_channel channel, int code, void *user ); typedef void (*ssh_channel_close_callback)( ssh_session session, ssh_channel channel, void *userdata ); typedef int (*ssh_channel_data_callback)( ssh_session session, ssh_channel channel, void *data, uint32_t len, int is_stderr, void *userdata ); typedef int (*ssh_channel_env_request_callback)( ssh_session session, ssh_channel channel, const char *env_name, const char *env_value, void *userdata ); typedef void (*ssh_channel_eof_callback)( ssh_session session, ssh_channel channel, void *userdata ); typedef int (*ssh_channel_exec_request_callback)( ssh_session session, ssh_channel channel, const char *command, void *userdata ); typedef void (*ssh_channel_exit_signal_callback)( ssh_session session, ssh_channel channel, const char *signal, int core, const char *errmsg, const char *lang, void *userdata ); typedef void (*ssh_channel_exit_status_callback)( ssh_session session, ssh_channel channel, int exit_status, void *userdata ); typedef ssh_channel (*ssh_channel_open_request_session_callback)( ssh_session session, void *userdata ); typedef ssh_channel (*ssh_channel_open_request_x11_callback)( ssh_session session, const char *originator_address, int originator_port, void *userdata ); typedef int (*ssh_channel_pty_request_callback)( ssh_session session, ssh_channel channel, const char *term, int width, int height, int pxwidth, int pwheight, void *userdata ); typedef int (*ssh_channel_pty_window_change_callback)( ssh_session session, ssh_channel channel, int width, int height, int pxwidth, int pwheight, void *userdata ); typedef int (*ssh_channel_shell_request_callback)( ssh_session session, ssh_channel channel, void *userdata ); typedef void (*ssh_channel_signal_callback)( ssh_session session, ssh_channel channel, const char *signal, void *userdata ); typedef int (*ssh_channel_subsystem_request_callback)( ssh_session session, ssh_channel channel, const char *subsystem, void *userdata ); typedef void (*ssh_channel_x11_req_callback)( ssh_session session, ssh_channel channel, int single_connection, const char *auth_protocol, const char *auth_cookie, uint32_t screen_number, void *userdata ); typedef void (*ssh_global_request_callback)( ssh_session session, ssh_message message, void *userdata ); typedef int (*ssh_gssapi_accept_sec_ctx_callback)( ssh_session session, ssh_string input_token, ssh_string *output_token, void *userdata ); typedef ssh_string (*ssh_gssapi_select_oid_callback)( ssh_session session, const char *user, int n_oid, ssh_string *oids, void *userdata ); typedef int (*ssh_gssapi_verify_mic_callback)( ssh_session session, ssh_string mic, void *mic_buffer, size_t mic_buffer_size, void *userdata ); typedef void (*ssh_log_callback)( ssh_session session, int priority, const char *message, void *userdata ); typedef void (*ssh_logging_callback)( int priority, const char *function, const char *buffer, void *userdata ); typedef int (*ssh_message_callback)( ssh_session, ssh_message message, void *user ); typedef int (*ssh_packet_callback)( ssh_session session, uint8_t type, ssh_buffer packet, void *user ); typedef int (*ssh_service_request_callback)( ssh_session session, const char *service, void *userdata ); typedef void (*ssh_status_callback)( ssh_session session, float status, void *userdata ); // structs struct ssh_callbacks_struct; struct ssh_channel_callbacks_struct; struct ssh_packet_callbacks_struct; struct ssh_server_callbacks_struct; struct ssh_socket_callbacks_struct; // global functions LIBSSH_API int ssh_set_callbacks( ssh_session session, ssh_callbacks cb ); LIBSSH_API int ssh_set_channel_callbacks( ssh_channel channel, ssh_channel_callbacks cb ); LIBSSH_API int ssh_set_server_callbacks( ssh_session session, ssh_server_callbacks cb ); // macros #define SSH_PACKET_CALLBACK(name) #define SSH_PACKET_NOT_USED #define SSH_PACKET_USED #define SSH_SOCKET_CONNECTED_ERROR #define SSH_SOCKET_CONNECTED_OK #define SSH_SOCKET_CONNECTED_TIMEOUT #define SSH_SOCKET_EXCEPTION_EOF #define SSH_SOCKET_EXCEPTION_ERROR #define SSH_SOCKET_FLOW_WRITEWILLBLOCK #define SSH_SOCKET_FLOW_WRITEWONTBLOCK #define ssh_callbacks_exists( \ p, \ c \ ) #define ssh_callbacks_init(p)
Detailed Documentation
Callback which can be replaced in libssh.
Typedefs
typedef int (*ssh_auth_gssapi_mic_callback)( ssh_session session, const char *user, const char *principal, void *userdata )
SSH authentication callback.
Tries to authenticates user with the “gssapi-with-mic” method
Warning
Implementations should verify that parameter user matches in some way the principal. user and principal can be different. Only the latter is guaranteed to be safe.
Parameters:
session |
Current session handler |
user |
Username of the user (can be spoofed) |
principal |
Authenticated principal of the user, including realm. |
userdata |
Userdata to be passed to the callback function. |
Returns:
SSH_AUTH_SUCCESS Authentication is accepted.
SSH_AUTH_PARTIAL Partial authentication, more authentication means are needed.
SSH_AUTH_DENIED Authentication failed.
typedef int (*ssh_auth_none_callback)( ssh_session session, const char *user, void *userdata )
SSH authentication callback.
Tries to authenticates user with the “none” method which is anonymous or passwordless.
Parameters:
session |
Current session handler |
user |
User that wants to authenticate |
userdata |
Userdata to be passed to the callback function. |
Returns:
SSH_AUTH_SUCCESS Authentication is accepted.
SSH_AUTH_PARTIAL Partial authentication, more authentication means are needed.
SSH_AUTH_DENIED Authentication failed.
typedef int (*ssh_auth_password_callback)( ssh_session session, const char *user, const char *password, void *userdata )
These are callbacks used specifically in SSH servers.
SSH authentication callback.
Parameters:
session |
Current session handler |
user |
User that wants to authenticate |
password |
Password used for authentication |
userdata |
Userdata to be passed to the callback function. |
Returns:
SSH_AUTH_SUCCESS Authentication is accepted.
SSH_AUTH_PARTIAL Partial authentication, more authentication means are needed.
SSH_AUTH_DENIED Authentication failed.
typedef int (*ssh_auth_pubkey_callback)( ssh_session session, const char *user, struct ssh_key_struct *pubkey, char signature_state, void *userdata )
SSH authentication callback.
Parameters:
session |
Current session handler |
user |
User that wants to authenticate |
pubkey |
public key used for authentication |
signature_state |
SSH_PUBLICKEY_STATE_NONE if the key is not signed (simple public key probe), SSH_PUBLICKEY_STATE_VALID if the signature is valid. Others values should be replied with a SSH_AUTH_DENIED. |
userdata |
Userdata to be passed to the callback function. |
Returns:
SSH_AUTH_SUCCESS Authentication is accepted.
SSH_AUTH_PARTIAL Partial authentication, more authentication means are needed.
SSH_AUTH_DENIED Authentication failed.
typedef void (*ssh_channel_auth_agent_req_callback)( ssh_session session, ssh_channel channel, void *userdata )
SSH auth-agent-request from the client.
This request is sent by a client when agent forwarding is available. Server is free to ignore this callback, no answer is expected.
Parameters:
channel |
the channel |
userdata |
Userdata to be passed to the callback function. |
typedef void (*ssh_channel_close_callback)( ssh_session session, ssh_channel channel, void *userdata )
SSH channel close callback.
Called when a channel is closed by remote peer
Parameters:
session |
Current session handler |
channel |
the actual channel |
userdata |
Userdata to be passed to the callback function. |
typedef int (*ssh_channel_data_callback)( ssh_session session, ssh_channel channel, void *data, uint32_t len, int is_stderr, void *userdata )
SSH channel data callback.
Called when data is available on a channel
Parameters:
session |
Current session handler |
channel |
the actual channel |
data |
the data that has been read on the channel |
len |
the length of the data |
is_stderr |
is 0 for stdout or 1 for stderr |
userdata |
Userdata to be passed to the callback function. |
Returns:
number of bytes processed by the callee. The remaining bytes will be sent in the next callback message, when more data is available.
typedef int (*ssh_channel_env_request_callback)( ssh_session session, ssh_channel channel, const char *env_name, const char *env_value, void *userdata )
SSH channel environment request from a client.
Warning
some environment variables can be dangerous if changed (e.g. LD_PRELOAD) and should not be fulfilled.
Parameters:
channel |
the channel |
env_name |
name of the environment value to be set |
env_value |
value of the environment value to be set |
userdata |
Userdata to be passed to the callback function. |
Returns:
0 if the env request is accepted
1 if the request is denied
typedef void (*ssh_channel_eof_callback)( ssh_session session, ssh_channel channel, void *userdata )
SSH channel eof callback.
Called when a channel receives EOF
Parameters:
session |
Current session handler |
channel |
the actual channel |
userdata |
Userdata to be passed to the callback function. |
typedef int (*ssh_channel_exec_request_callback)( ssh_session session, ssh_channel channel, const char *command, void *userdata )
SSH channel Exec request from a client.
Parameters:
channel |
the channel |
command |
the shell command to be executed |
userdata |
Userdata to be passed to the callback function. |
Returns:
0 if the exec request is accepted
1 if the request is denied
typedef void (*ssh_channel_exit_signal_callback)( ssh_session session, ssh_channel channel, const char *signal, int core, const char *errmsg, const char *lang, void *userdata )
SSH channel exit signal callback.
Called when a channel has received an exit signal
Parameters:
session |
Current session handler |
channel |
the actual channel |
signal |
the signal name (without the SIG prefix) |
core |
a boolean telling wether a core has been dumped or not |
errmsg |
the description of the exception |
lang |
the language of the description (format: RFC 3066) |
userdata |
Userdata to be passed to the callback function. |
typedef void (*ssh_channel_exit_status_callback)( ssh_session session, ssh_channel channel, int exit_status, void *userdata )
SSH channel exit status callback.
Called when a channel has received an exit status
Parameters:
session |
Current session handler |
channel |
the actual channel |
userdata |
Userdata to be passed to the callback function. |
typedef ssh_channel (*ssh_channel_open_request_session_callback)( ssh_session session, void *userdata )
Handles an SSH new channel open session request.
Warning
The channel pointer returned by this callback must be closed by the application.
Parameters:
session |
current session handler |
userdata |
Userdata to be passed to the callback function. |
Returns:
a valid ssh_channel handle if the request is to be allowed
NULL if the request should not be allowed
typedef ssh_channel (*ssh_channel_open_request_x11_callback)( ssh_session session, const char *originator_address, int originator_port, void *userdata )
Handles an SSH new channel open X11 request.
This happens when the server sends back an X11 connection attempt. This is a client-side API
Warning
The channel pointer returned by this callback must be closed by the application.
Parameters:
session |
current session handler |
userdata |
Userdata to be passed to the callback function. |
Returns:
a valid ssh_channel handle if the request is to be allowed
NULL if the request should not be allowed
typedef int (*ssh_channel_pty_request_callback)( ssh_session session, ssh_channel channel, const char *term, int width, int height, int pxwidth, int pwheight, void *userdata )
SSH channel PTY request from a client.
Parameters:
channel |
the channel |
term |
The type of terminal emulation |
width |
width of the terminal, in characters |
height |
height of the terminal, in characters |
pxwidth |
width of the terminal, in pixels |
pxheight |
height of the terminal, in pixels |
userdata |
Userdata to be passed to the callback function. |
Returns:
0 if the pty request is accepted
-1 if the request is denied
typedef int (*ssh_channel_pty_window_change_callback)( ssh_session session, ssh_channel channel, int width, int height, int pxwidth, int pwheight, void *userdata )
SSH channel PTY windows change (terminal size) from a client.
Parameters:
channel |
the channel |
width |
width of the terminal, in characters |
height |
height of the terminal, in characters |
pxwidth |
width of the terminal, in pixels |
pxheight |
height of the terminal, in pixels |
userdata |
Userdata to be passed to the callback function. |
Returns:
0 if the pty request is accepted
-1 if the request is denied
typedef int (*ssh_channel_shell_request_callback)( ssh_session session, ssh_channel channel, void *userdata )
SSH channel Shell request from a client.
Parameters:
channel |
the channel |
userdata |
Userdata to be passed to the callback function. |
Returns:
0 if the shell request is accepted
1 if the request is denied
typedef void (*ssh_channel_signal_callback)( ssh_session session, ssh_channel channel, const char *signal, void *userdata )
SSH channel signal callback.
Called when a channel has received a signal
Parameters:
session |
Current session handler |
channel |
the actual channel |
signal |
the signal name (without the SIG prefix) |
userdata |
Userdata to be passed to the callback function. |
typedef int (*ssh_channel_subsystem_request_callback)( ssh_session session, ssh_channel channel, const char *subsystem, void *userdata )
SSH channel subsystem request from a client.
Parameters:
channel |
the channel |
subsystem |
the subsystem required |
userdata |
Userdata to be passed to the callback function. |
Returns:
0 if the subsystem request is accepted
1 if the request is denied
typedef void (*ssh_channel_x11_req_callback)( ssh_session session, ssh_channel channel, int single_connection, const char *auth_protocol, const char *auth_cookie, uint32_t screen_number, void *userdata )
SSH X11 request from the client.
This request is sent by a client when X11 forwarding is requested(and available). Server is free to ignore this callback, no answer is expected.
Parameters:
channel |
the channel |
userdata |
Userdata to be passed to the callback function. |
typedef void (*ssh_global_request_callback)( ssh_session session, ssh_message message, void *userdata )
SSH global request callback.
All global request will go through this callback.
Parameters:
session |
Current session handler |
message |
the actual message |
userdata |
Userdata to be passed to the callback function. |
typedef void (*ssh_log_callback)( ssh_session session, int priority, const char *message, void *userdata )
SSH log callback.
All logging messages will go through this callback
Parameters:
session |
Current session handler |
priority |
Priority of the log, the smaller being the more important |
message |
the actual message |
userdata |
Userdata to be passed to the callback function. |
typedef void (*ssh_logging_callback)( int priority, const char *function, const char *buffer, void *userdata )
SSH log callback.
All logging messages will go through this callback.
Parameters:
priority |
Priority of the log, the smaller being the more important. |
function |
The function name calling the the logging fucntions. |
message |
The actual message |
userdata |
Userdata to be passed to the callback function. |
typedef int (*ssh_packet_callback)( ssh_session session, uint8_t type, ssh_buffer packet, void *user )
Prototype for a packet callback, to be called when a new packet arrives.
Parameters:
session |
The current session of the packet |
type |
packet type (see |
packet |
buffer containing the packet, excluding size, type and padding fields |
user |
user argument to the callback and are called each time a packet shows up |
Returns:
SSH_PACKET_USED Packet was parsed and used
SSH_PACKET_NOT_USED Packet was not used or understood, processing must continue
typedef int (*ssh_service_request_callback)( ssh_session session, const char *service, void *userdata )
Handles an SSH service request.
Parameters:
session |
current session handler |
service |
name of the service (e.g. “ssh-userauth”) requested |
userdata |
Userdata to be passed to the callback function. |
Returns:
0 if the request is to be allowed
-1 if the request should not be allowed
typedef void (*ssh_status_callback)( ssh_session session, float status, void *userdata )
SSH Connection status callback.
Parameters:
session |
Current session handler |
status |
Percentage of connection status, going from 0.0 to 1.0 once connection is done. |
userdata |
Userdata to be passed to the callback function. |
Global Functions
LIBSSH_API int ssh_set_callbacks( ssh_session session, ssh_callbacks cb )
Set the session callback functions.
This functions sets the callback structure to use your own callback functions for auth, logging and status.
struct ssh_callbacks_struct cb = { .userdata = data, .auth_function = my_auth_function }; ssh_callbacks_init(&cb); ssh_set_callbacks(session, &cb);
Parameters:
session |
The session to set the callback structure. |
cb |
The callback structure itself. |
Returns:
SSH_OK on success, SSH_ERROR on error.
LIBSSH_API int ssh_set_channel_callbacks( ssh_channel channel, ssh_channel_callbacks cb )
Set the channel callback functions.
This functions sets the callback structure to use your own callback functions for channel data and exceptions
struct ssh_channel_callbacks_struct cb = { .userdata = data, .channel_data = my_channel_data_function }; ssh_callbacks_init(&cb); ssh_set_channel_callbacks(channel, &cb);
Parameters:
channel |
The channel to set the callback structure. |
cb |
The callback structure itself. |
Returns:
SSH_OK on success, SSH_ERROR on error.
LIBSSH_API int ssh_set_server_callbacks( ssh_session session, ssh_server_callbacks cb )
Set the session server callback functions.
This functions sets the callback structure to use your own callback functions for user authentication, new channels and requests.
struct ssh_server_callbacks_struct cb = { .userdata = data, .auth_password_function = my_auth_function }; ssh_callbacks_init(&cb); ssh_set_server_callbacks(session, &cb);
Parameters:
session |
The session to set the callback structure. |
cb |
The callback structure itself. |
Returns:
SSH_OK on success, SSH_ERROR on error.
Macros
#define SSH_PACKET_CALLBACK(name)
This macro declares a packet callback handler.
SSH_PACKET_CALLBACK(mycallback){ ... }
#define SSH_PACKET_NOT_USED
Packet was not used and should be passed to any other callback available.
#define SSH_PACKET_USED
return values for a ssh_packet_callback
Packet was used and should not be parsed by another callback
#define ssh_callbacks_init(p)
Initializes an ssh_callbacks_struct A call to this macro is mandatory when you have set a new ssh_callback_struct structure.
Its goal is to maintain the binary compatibility with future versions of libssh as the structure evolves with time.