libssh  0.10.4
The SSH library
callbacks.h
1 /*
2  * This file is part of the SSH Library
3  *
4  * Copyright (c) 2009 Aris Adamantiadis <aris@0xbadc0de.be>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 /* callback.h
22  * This file includes the public declarations for the libssh callback mechanism
23  */
24 
25 #ifndef _SSH_CALLBACK_H
26 #define _SSH_CALLBACK_H
27 
28 #include <libssh/libssh.h>
29 #include <string.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
49 typedef void (*ssh_callback_int) (int code, void *user);
50 
59 typedef size_t (*ssh_callback_data) (const void *data, size_t len, void *user);
60 
61 typedef void (*ssh_callback_int_int) (int code, int errno_code, void *user);
62 
63 typedef int (*ssh_message_callback) (ssh_session, ssh_message message, void *user);
64 typedef int (*ssh_channel_callback_int) (ssh_channel channel, int code, void *user);
65 typedef int (*ssh_channel_callback_data) (ssh_channel channel, int code, void *data, size_t len, void *user);
66 
74 typedef void (*ssh_log_callback) (ssh_session session, int priority,
75  const char *message, void *userdata);
76 
90 typedef void (*ssh_logging_callback) (int priority,
91  const char *function,
92  const char *buffer,
93  void *userdata);
94 
102 typedef void (*ssh_status_callback) (ssh_session session, float status,
103  void *userdata);
104 
112 typedef void (*ssh_global_request_callback) (ssh_session session,
113  ssh_message message, void *userdata);
114 
125  const char * originator_address, int originator_port, void *userdata);
126 
137  void *userdata);
138 
144  size_t size;
148  void *userdata;
161  void (*connect_status_function)(void *userdata, float status);
172 };
173 typedef struct ssh_callbacks_struct *ssh_callbacks;
174 
188 typedef int (*ssh_auth_password_callback) (ssh_session session, const char *user, const char *password,
189  void *userdata);
190 
201 typedef int (*ssh_auth_none_callback) (ssh_session session, const char *user, void *userdata);
202 
215 typedef int (*ssh_auth_gssapi_mic_callback) (ssh_session session, const char *user, const char *principal,
216  void *userdata);
217 
231 typedef int (*ssh_auth_pubkey_callback) (ssh_session session, const char *user, struct ssh_key_struct *pubkey,
232  char signature_state, void *userdata);
233 
234 
244 typedef int (*ssh_service_request_callback) (ssh_session session, const char *service, void *userdata);
245 
255 
256 /*
257  * @brief handle the beginning of a GSSAPI authentication, server side.
258  * @param session current session handler
259  * @param user the username of the client
260  * @param n_oid number of available oids
261  * @param oids OIDs provided by the client
262  * @returns an ssh_string containing the chosen OID, that's supported by both
263  * client and server.
264  * @warning It is not necessary to fill this callback in if libssh is linked
265  * with libgssapi.
266  */
267 typedef ssh_string (*ssh_gssapi_select_oid_callback) (ssh_session session, const char *user,
268  int n_oid, ssh_string *oids, void *userdata);
269 
270 /*
271  * @brief handle the negociation of a security context, server side.
272  * @param session current session handler
273  * @param[in] input_token input token provided by client
274  * @param[out] output_token output of the gssapi accept_sec_context method,
275  * NULL after completion.
276  * @returns SSH_OK if the token was generated correctly or accept_sec_context
277  * returned GSS_S_COMPLETE
278  * @returns SSH_ERROR in case of error
279  * @warning It is not necessary to fill this callback in if libssh is linked
280  * with libgssapi.
281  */
282 typedef int (*ssh_gssapi_accept_sec_ctx_callback) (ssh_session session,
283  ssh_string input_token, ssh_string *output_token, void *userdata);
284 
285 /*
286  * @brief Verify and authenticates a MIC, server side.
287  * @param session current session handler
288  * @param[in] mic input mic to be verified provided by client
289  * @param[in] mic_buffer buffer of data to be signed.
290  * @param[in] mic_buffer_size size of mic_buffer
291  * @returns SSH_OK if the MIC was authenticated correctly
292  * @returns SSH_ERROR in case of error
293  * @warning It is not necessary to fill this callback in if libssh is linked
294  * with libgssapi.
295  */
296 typedef int (*ssh_gssapi_verify_mic_callback) (ssh_session session,
297  ssh_string mic, void *mic_buffer, size_t mic_buffer_size, void *userdata);
298 
299 
306  size_t size;
310  void *userdata;
315 
320 
325 
330 
341  ssh_gssapi_select_oid_callback gssapi_select_oid_function;
344  ssh_gssapi_accept_sec_ctx_callback gssapi_accept_sec_ctx_function;
345  /* This function will be called when a MIC needs to be verified.
346  */
347  ssh_gssapi_verify_mic_callback gssapi_verify_mic_function;
348 };
350 
375 LIBSSH_API int ssh_set_server_callbacks(ssh_session session, ssh_server_callbacks cb);
376 
385  void *userdata;
390  ssh_callback_data data;
394  ssh_callback_int controlflow;
398  ssh_callback_int_int exception;
402  ssh_callback_int_int connected;
403 };
405 
406 #define SSH_SOCKET_FLOW_WRITEWILLBLOCK 1
407 #define SSH_SOCKET_FLOW_WRITEWONTBLOCK 2
408 
409 #define SSH_SOCKET_EXCEPTION_EOF 1
410 #define SSH_SOCKET_EXCEPTION_ERROR 2
411 
412 #define SSH_SOCKET_CONNECTED_OK 1
413 #define SSH_SOCKET_CONNECTED_ERROR 2
414 #define SSH_SOCKET_CONNECTED_TIMEOUT 3
415 
423 #define ssh_callbacks_init(p) do {\
424  (p)->size=sizeof(*(p)); \
425 } while(0);
426 
436 #define ssh_callbacks_exists(p,c) (\
437  (p != NULL) && ( (char *)&((p)-> c) < (char *)(p) + (p)->size ) && \
438  ((p)-> c != NULL) \
439  )
440 
457 #define ssh_callbacks_execute_list(list, cbtype, c, ...) \
458  do { \
459  struct ssh_iterator *i = ssh_list_get_iterator(list); \
460  cbtype cb; \
461  while (i != NULL){ \
462  cb = ssh_iterator_value(cbtype, i); \
463  if (ssh_callbacks_exists(cb, c)) \
464  cb-> c (__VA_ARGS__, cb->userdata); \
465  i = i->next; \
466  } \
467  } while(0)
468 
489 #define ssh_callbacks_iterate(_cb_list, _cb_type, _cb_name) \
490  do { \
491  struct ssh_iterator *_cb_i = ssh_list_get_iterator(_cb_list); \
492  _cb_type _cb; \
493  for (; _cb_i != NULL; _cb_i = _cb_i->next) { \
494  _cb = ssh_iterator_value(_cb_type, _cb_i); \
495  if (ssh_callbacks_exists(_cb, _cb_name))
496 
497 #define ssh_callbacks_iterate_exec(_cb_name, ...) \
498  _cb->_cb_name(__VA_ARGS__, _cb->userdata)
499 
500 #define ssh_callbacks_iterate_end() \
501  } \
502  } while(0)
503 
513 typedef int (*ssh_packet_callback) (ssh_session session, uint8_t type, ssh_buffer packet, void *user);
514 
517 #define SSH_PACKET_USED 1
520 #define SSH_PACKET_NOT_USED 2
521 
522 
530 #define SSH_PACKET_CALLBACK(name) \
531  int name (ssh_session session, uint8_t type, ssh_buffer packet, void *user)
532 
535  uint8_t start;
537  uint8_t n_callbacks;
543  void *user;
544 };
545 
547 
572 LIBSSH_API int ssh_set_callbacks(ssh_session session, ssh_callbacks cb);
573 
585 typedef int (*ssh_channel_data_callback) (ssh_session session,
586  ssh_channel channel,
587  void *data,
588  uint32_t len,
589  int is_stderr,
590  void *userdata);
591 
598 typedef void (*ssh_channel_eof_callback) (ssh_session session,
599  ssh_channel channel,
600  void *userdata);
601 
608 typedef void (*ssh_channel_close_callback) (ssh_session session,
609  ssh_channel channel,
610  void *userdata);
611 
619 typedef void (*ssh_channel_signal_callback) (ssh_session session,
620  ssh_channel channel,
621  const char *signal,
622  void *userdata);
623 
631  ssh_channel channel,
632  int exit_status,
633  void *userdata);
634 
646  ssh_channel channel,
647  const char *signal,
648  int core,
649  const char *errmsg,
650  const char *lang,
651  void *userdata);
652 
666  ssh_channel channel,
667  const char *term,
668  int width, int height,
669  int pxwidth, int pwheight,
670  void *userdata);
671 
680  ssh_channel channel,
681  void *userdata);
690  ssh_channel channel,
691  void *userdata);
692 
700 typedef void (*ssh_channel_x11_req_callback) (ssh_session session,
701  ssh_channel channel,
702  int single_connection,
703  const char *auth_protocol,
704  const char *auth_cookie,
705  uint32_t screen_number,
706  void *userdata);
719  ssh_channel channel,
720  int width, int height,
721  int pxwidth, int pwheight,
722  void *userdata);
723 
733  ssh_channel channel,
734  const char *command,
735  void *userdata);
736 
749  ssh_channel channel,
750  const char *env_name,
751  const char *env_value,
752  void *userdata);
762  ssh_channel channel,
763  const char *subsystem,
764  void *userdata);
765 
779  ssh_channel channel,
780  uint32_t bytes,
781  void *userdata);
782 
785  size_t size;
789  void *userdata;
850 };
851 
853 
881 LIBSSH_API int ssh_set_channel_callbacks(ssh_channel channel,
883 
900 LIBSSH_API int ssh_add_channel_callbacks(ssh_channel channel,
902 
915 LIBSSH_API int ssh_remove_channel_callbacks(ssh_channel channel,
917 
924 typedef int (*ssh_thread_callback) (void **lock);
925 
926 typedef unsigned long (*ssh_thread_id_callback) (void);
928  const char *type;
929  ssh_thread_callback mutex_init;
930  ssh_thread_callback mutex_destroy;
931  ssh_thread_callback mutex_lock;
932  ssh_thread_callback mutex_unlock;
933  ssh_thread_id_callback thread_id;
934 };
935 
954  *cb);
955 
965 LIBSSH_API struct ssh_threads_callbacks_struct *ssh_threads_get_default(void);
966 
973 LIBSSH_API struct ssh_threads_callbacks_struct *ssh_threads_get_pthread(void);
974 
985 LIBSSH_API struct ssh_threads_callbacks_struct *ssh_threads_get_noop(void);
986 
994 LIBSSH_API int ssh_set_log_callback(ssh_logging_callback cb);
995 
1002 
1004 #ifdef __cplusplus
1005 }
1006 #endif
1007 
1008 #endif /*_SSH_CALLBACK_H */
1009 
1010 /* @} */
int(* ssh_auth_callback)(const char *prompt, char *buf, size_t len, int echo, int verify, void *userdata)
SSH authentication callback for password and publickey auth.
Definition: libssh.h:674
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.
Definition: callbacks.h:665
LIBSSH_API int ssh_set_callbacks(ssh_session session, ssh_callbacks cb)
Set the session callback functions.
Definition: callbacks.c:48
LIBSSH_API int ssh_add_channel_callbacks(ssh_channel channel, ssh_channel_callbacks cb)
Add channel callback functions.
Definition: callbacks.c:109
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.
Definition: callbacks.h:718
int(* ssh_channel_exec_request_callback)(ssh_session session, ssh_channel channel, const char *command, void *userdata)
SSH channel Exec request from a client.
Definition: callbacks.h:732
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(an...
Definition: callbacks.h:700
int(* ssh_channel_shell_request_callback)(ssh_session session, ssh_channel channel, void *userdata)
SSH channel Shell request from a client.
Definition: callbacks.h:679
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.
Definition: callbacks.h:585
void(* ssh_channel_eof_callback)(ssh_session session, ssh_channel channel, void *userdata)
SSH channel eof callback. Called when a channel receives EOF.
Definition: callbacks.h:598
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.
Definition: callbacks.h:608
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.
Definition: callbacks.h:619
int(* ssh_auth_pubkey_callback)(ssh_session session, const char *user, struct ssh_key_struct *pubkey, char signature_state, void *userdata)
SSH authentication callback.
Definition: callbacks.h:231
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.
Definition: callbacks.h:513
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.
Definition: callbacks.h:630
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 connectio...
Definition: callbacks.h:124
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...
Definition: callbacks.h:201
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.
Definition: callbacks.h:74
int(* ssh_service_request_callback)(ssh_session session, const char *service, void *userdata)
Handles an SSH service request.
Definition: callbacks.h:244
LIBSSH_API int ssh_set_server_callbacks(ssh_session session, ssh_server_callbacks cb)
Set the session server callback functions.
Definition: callbacks.c:133
ssh_channel(* ssh_channel_open_request_auth_agent_callback)(ssh_session session, void *userdata)
Handles an SSH new channel open "auth-agent" request. This happens when the server sends back an "aut...
Definition: callbacks.h:136
int(* ssh_channel_write_wontblock_callback)(ssh_session session, ssh_channel channel, uint32_t bytes, void *userdata)
SSH channel write will not block (flow control).
Definition: callbacks.h:778
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.
Definition: callbacks.h:215
void(* ssh_logging_callback)(int priority, const char *function, const char *buffer, void *userdata)
SSH log callback.
Definition: callbacks.h:90
void(* ssh_status_callback)(ssh_session session, float status, void *userdata)
SSH Connection status callback.
Definition: callbacks.h:102
ssh_channel(* ssh_channel_open_request_session_callback)(ssh_session session, void *userdata)
Handles an SSH new channel open session request.
Definition: callbacks.h:254
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.
Definition: callbacks.h:645
LIBSSH_API int ssh_set_channel_callbacks(ssh_channel channel, ssh_channel_callbacks cb)
Set the channel callback functions.
Definition: callbacks.c:104
int(* ssh_auth_password_callback)(ssh_session session, const char *user, const char *password, void *userdata)
SSH authentication callback.
Definition: callbacks.h:188
LIBSSH_API int ssh_remove_channel_callbacks(ssh_channel channel, ssh_channel_callbacks cb)
Remove a channel callback.
Definition: callbacks.c:114
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.
Definition: callbacks.h:748
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.
Definition: callbacks.h:112
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 ava...
Definition: callbacks.h:689
int(* ssh_channel_subsystem_request_callback)(ssh_session session, ssh_channel channel, const char *subsystem, void *userdata)
SSH channel subsystem request from a client.
Definition: callbacks.h:761
LIBSSH_API ssh_logging_callback ssh_get_log_callback(void)
Get the pointer to the logging callback function.
Definition: log.c:224
LIBSSH_API int ssh_set_log_callback(ssh_logging_callback cb)
Set the logging callback function.
Definition: log.c:214
LIBSSH_API int ssh_threads_set_callbacks(struct ssh_threads_callbacks_struct *cb)
Set the thread callbacks structure.
Definition: threads.c:71
Definition: buffer.c:47
Definition: callbacks.h:142
ssh_channel_open_request_auth_agent_callback channel_open_request_auth_agent_function
Definition: callbacks.h:171
ssh_log_callback log_function
Definition: callbacks.h:156
ssh_auth_callback auth_function
Definition: callbacks.h:152
ssh_channel_open_request_x11_callback channel_open_request_x11_function
Definition: callbacks.h:168
void * userdata
Definition: callbacks.h:148
size_t size
Definition: callbacks.h:144
void(* connect_status_function)(void *userdata, float status)
Definition: callbacks.h:161
ssh_global_request_callback global_request_function
Definition: callbacks.h:165
Definition: callbacks.h:783
ssh_channel_data_callback channel_data_function
Definition: callbacks.h:793
ssh_channel_write_wontblock_callback channel_write_wontblock_function
Definition: callbacks.h:849
ssh_channel_x11_req_callback channel_x11_req_function
Definition: callbacks.h:829
ssh_channel_exit_status_callback channel_exit_status_function
Definition: callbacks.h:809
ssh_channel_shell_request_callback channel_shell_request_function
Definition: callbacks.h:821
ssh_channel_env_request_callback channel_env_request_function
Definition: callbacks.h:841
ssh_channel_subsystem_request_callback channel_subsystem_request_function
Definition: callbacks.h:845
ssh_channel_eof_callback channel_eof_function
Definition: callbacks.h:797
size_t size
Definition: callbacks.h:785
ssh_channel_pty_window_change_callback channel_pty_window_change_function
Definition: callbacks.h:833
ssh_channel_auth_agent_req_callback channel_auth_agent_req_function
Definition: callbacks.h:825
ssh_channel_exit_signal_callback channel_exit_signal_function
Definition: callbacks.h:813
ssh_channel_pty_request_callback channel_pty_request_function
Definition: callbacks.h:817
void * userdata
Definition: callbacks.h:789
ssh_channel_signal_callback channel_signal_function
Definition: callbacks.h:805
ssh_channel_close_callback channel_close_function
Definition: callbacks.h:801
ssh_channel_exec_request_callback channel_exec_request_function
Definition: callbacks.h:837
Definition: channels.h:62
Definition: pki.h:54
Definition: messages.h:85
Definition: callbacks.h:533
uint8_t start
Definition: callbacks.h:535
ssh_packet_callback * callbacks
Definition: callbacks.h:539
void * user
Definition: callbacks.h:543
uint8_t n_callbacks
Definition: callbacks.h:537
Definition: callbacks.h:304
ssh_gssapi_accept_sec_ctx_callback gssapi_accept_sec_ctx_function
Definition: callbacks.h:344
ssh_service_request_callback service_request_function
Definition: callbacks.h:334
size_t size
Definition: callbacks.h:306
ssh_auth_none_callback auth_none_function
Definition: callbacks.h:319
ssh_auth_gssapi_mic_callback auth_gssapi_mic_function
Definition: callbacks.h:324
ssh_channel_open_request_session_callback channel_open_request_session_function
Definition: callbacks.h:338
ssh_auth_password_callback auth_password_function
Definition: callbacks.h:314
ssh_auth_pubkey_callback auth_pubkey_function
Definition: callbacks.h:329
void * userdata
Definition: callbacks.h:310
ssh_gssapi_select_oid_callback gssapi_select_oid_function
Definition: callbacks.h:341
Definition: session.h:110
Definition: callbacks.h:381
void * userdata
Definition: callbacks.h:385
ssh_callback_data data
Definition: callbacks.h:390
ssh_callback_int_int connected
Definition: callbacks.h:402
ssh_callback_int controlflow
Definition: callbacks.h:394
ssh_callback_int_int exception
Definition: callbacks.h:398
Definition: string.h:29
Definition: callbacks.h:927