/* ****************************************************************************** * IPSSH CONFIGURATION FILE * * Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: ipssh_config.c,v $ $Revision: 1.49.10.9 $ * $Source: /home/interpeak/CVSRoot/ipssh/config/ipssh_config.c,v $ * $Author: svc-cmnet $ * $State: Exp $ $Locker: $ * * INTERPEAK_COPYRIGHT_STRING * Design and implementation by Roger Boden ****************************************************************************** */ /* **************************************************************************** * 1 DESCRIPTION **************************************************************************** */ /* **************************************************************************** * 2 INCLUDE FILES **************************************************************************** */ #include "ipssh_config.h" #include #include #include #include #include #include #include /* **************************************************************************** * 3 DEFINES **************************************************************************** */ #ifndef IPSSH_GET_SFTP_FUNC_CB #define IPSSH_GET_SFTP_FUNC_CB ipssh_get_sftp_func_example_cb #endif #ifndef IPSSH_SFTP_CHECK_ACCESS_CB #define IPSSH_SFTP_CHECK_ACCESS_CB ipssh_sftp_check_access_example_cb #endif #ifndef IPSSH_SHELL_CHECK_ACCESS_CB #define IPSSH_SHELL_CHECK_ACCESS_CB ipssh_shell_check_access_example_cb #endif #ifndef IPSSH_VALIDATE_USERID_PW_CB #define IPSSH_VALIDATE_USERID_PW_CB ipssh_validate_userid_pw_example_cb #endif #ifndef IPSSH_VALIDATE_PUBKEY_CB #define IPSSH_VALIDATE_PUBKEY_CB ipssh_validate_pubkey_example_cb #endif #ifndef IPSSH_VALIDATE_HOSTBASED_CB #define IPSSH_VALIDATE_HOSTBASED_CB ipssh_validate_hostbased_example_cb #endif #ifndef IPSSH_VALIDATE_RSA_PUBKEY_V1_CB #define IPSSH_VALIDATE_RSA_PUBKEY_V1_CB ipssh_validate_rsa_pubkey_v1_example_cb #endif #ifndef IPSSH_AUTH_COMPLETE_CB #define IPSSH_AUTH_COMPLETE_CB ipssh_auth_complete_example_cb #endif #ifndef IPSSH_VALIDATE_SRV_PUBLIC_KEY_CB #define IPSSH_VALIDATE_SRV_PUBLIC_KEY_CB ipssh_validate_srv_public_key_example_cb #endif #ifndef IPSSH_LOAD_RSA_KEY_CB #define IPSSH_LOAD_RSA_KEY_CB ipssh_load_rsa_key_example_cb #endif #ifndef IPSSH_LOAD_RSA_KEYEX_KEY_CB #define IPSSH_LOAD_RSA_KEYEX_KEY_CB ipssh_load_rsa_keyex_key_example_cb #endif #ifndef IPSSH_LOAD_DSA_KEY_CB #define IPSSH_LOAD_DSA_KEY_CB ipssh_load_dsa_key_example_cb #endif #ifndef SSH_SFTP_START_DIR #define SSH_SFTP_START_DIR "/ram" #endif #ifndef SSH_DSA_KEY_ID #define SSH_DSA_KEY_ID "default_dsa" #endif #ifndef SSH_RSA_KEY_ID #define SSH_RSA_KEY_ID "default_rsa" #endif #ifndef SSH_RSA_KEYEX_KEY_ID #define SSH_RSA_KEYEX_KEY_ID "default_rsa" #endif #ifndef SSH_AUTH_HOSTBASED_ALLOWED #define SSH_AUTH_HOSTBASED_ALLOWED "1" #endif #ifndef SSH_AUTH_HOSTBASED_REQUIRED #define SSH_AUTH_HOSTBASED_REQUIRED "0" #endif /* **************************************************************************** * 4 TYPES **************************************************************************** */ /* **************************************************************************** * 5 EXTERN PROTOTYPES **************************************************************************** */ IP_GLOBAL int ipssh_stop_cmd(int argc, char **argv); IP_GLOBAL int ipssh_cmd_sftp(int argc, char **argv); IP_GLOBAL int ipssh_list_cmd(int argc, char **argv); IP_GLOBAL int ipssh_keyfp_cmd(int argc, char **argv); #ifdef IPTESTENGINE IP_GLOBAL Ip_err ipssh_cmd_ssh_subsystem(int argc, char** argv); IP_GLOBAL Ip_err ipssh_cmd_ssh_stdio_echo(int argc, char** argv); #endif IP_PUBLIC Ipssh_sftp_func_cb* IPSSH_GET_SFTP_FUNC_CB(const char *path); IP_PUBLIC Ip_err IPSSH_SFTP_CHECK_ACCESS_CB(const char *user, int action, const char *path, int flags); IP_PUBLIC Ip_err IPSSH_SHELL_CHECK_ACCESS_CB(const char *user, int flags); IP_PUBLIC Ip_err IPSSH_VALIDATE_USERID_PW_CB(const char *user, const char *pw, Ipcom_shell_ctx* sh_ctx); IP_PUBLIC Ip_err IPSSH_VALIDATE_PUBKEY_CB(const char *user, EVP_PKEY *pub_key, Ipcom_shell_ctx* sh_ctx); IP_PUBLIC Ip_err IPSSH_VALIDATE_HOSTBASED_CB(const char *user, char *host, EVP_PKEY *pub_key, Ipcom_shell_ctx* sh_ctx); IP_PUBLIC RSA * IPSSH_VALIDATE_RSA_PUBKEY_V1_CB(const char *user, BIGNUM *modulus, Ipcom_shell_ctx* sh_ctx); IP_PUBLIC Ip_err IPSSH_AUTH_COMPLETE_CB(const char* user, Ipcom_shell_ctx* sh_ctx); IP_PUBLIC Ip_err IPSSH_VALIDATE_SRV_PUBLIC_KEY_CB(EVP_PKEY *srv_key, const union Ip_sockaddr_union *srv_addr); IP_PUBLIC RSA* IPSSH_LOAD_RSA_KEY_CB(void); IP_PUBLIC RSA* IPSSH_LOAD_RSA_KEYEX_KEY_CB(void); IP_PUBLIC DSA* IPSSH_LOAD_DSA_KEY_CB(void); /* **************************************************************************** * 6 LOCAL PROTOTYPES **************************************************************************** */ /* **************************************************************************** * 7 DATA **************************************************************************** */ IP_CONST Ipcom_sysvar ipssh_conf_sysvar[] = { IP_SYSVAR("ipssh.port", "22", SSH_PORT), { "ipssh.bind_addr", "0.0.0.0" }, IP_SYSVAR("ipssh.idle_timeout", "0", SSH_IDLE_TIMEOUT), IP_SYSVAR("ipssh.max_clients", "20", SSH_MAX_CLIENTS), IP_SYSVAR("ipssh.max_channels", "10", SSH_MAX_SHELLS), #ifdef IPSSH_USE_AES IP_SYSVAR("ipssh.enc.aes", "1", SSH_USE_AES), IP_SYSVAR("ipssh.enc.aes192", "1", SSH_USE_AES), IP_SYSVAR("ipssh.enc.aes256", "1", SSH_USE_AES), #endif #ifdef IPSSH_USE_DES IP_SYSVAR("ipssh.enc.3des", "1", SSH_USE_3DES), IP_SYSVAR("ipssh.enc.des", "0", SSH_USE_DES), #endif #ifdef IPSSH_USE_BLOWFISH IP_SYSVAR("ipssh.enc.blowfish", "1", SSH_USE_BLOWFISH), #endif #ifdef IPSSH_USE_CAST IP_SYSVAR("ipssh.enc.cast", "1", SSH_USE_CAST), #endif #ifdef IPSSH_USE_ARCFOUR IP_SYSVAR("ipssh.enc.arcfour", "0", SSH_USE_ARCFOUR), IP_SYSVAR("ipssh.enc.arcfour128", "1", SSH_USE_ARCFOUR_128), #endif IP_SYSVAR("ipssh.enc.none", "0", SSH_USE_NO_CIPHER), #ifdef IPSSH_USE_SHA1 IP_SYSVAR("ipssh.mac.sha1", "1", SSH_USE_SHA1), IP_SYSVAR("ipssh.mac.sha1-96", "1", SSH_USE_SHA1_96), #endif #ifdef _WRS_CONFIG_COMPONENT_IPSSH_SUPPORT_SHA2 #ifdef IPSSH_USE_SHA256 IP_SYSVAR("ipssh.mac.sha256", "1", SSH_USE_SHA256), #endif #ifdef IPSSH_USE_SHA512 IP_SYSVAR("ipssh.mac.sha512", "1", SSH_USE_SHA512), #endif #endif #ifdef IPSSH_USE_MD5 IP_SYSVAR("ipssh.mac.md5", "0", SSH_USE_MD5), IP_SYSVAR("ipssh.mac.md5-96", "0", SSH_USE_MD5_96), #endif IP_SYSVAR("ipssh.mac.none", "0", SSH_USE_NO_MAC), /* Key-exchange mechanisms */ IP_SYSVAR("ipssh.kex.dh_gr1_sha1", "0", SSH_USE_DH_GR1_SHA1), IP_SYSVAR("ipssh.kex.dh_gr14_sha1", "1", SSH_USE_DH_GR14_SHA1), IP_SYSVAR("ipssh.kex.dh_gex.sha1", "1", SSH_USE_DH_GEX_SHA1), IP_SYSVAR("ipssh.kex.dh_gex.sha256", "1", SSH_USE_DH_GEX_SHA256), IP_SYSVAR("ipssh.kex.rsa1024-sha1", "1", SSH_USE_RSA1024_SHA1), IP_SYSVAR("ipssh.kex.rsa2048-sha256", "0", SSH_USE_RSA2048_SHA256), IP_SYSVAR("ipssh.kex.dh_gex.clt.min", "2048", SSH_USE_DH_GEX_CLT_MIN), IP_SYSVAR("ipssh.kex.dh_gex.clt.n", "2048", SSH_USE_DH_GEX_CLT_N), IP_SYSVAR("ipssh.kex.dh_gex.clt.max", "4096", SSH_USE_DH_GEX_CLT_MAX), IP_SYSVAR("ipssh.kex.dh_gex.moduli_file", IPCOM_FILE_ROOT"moduli", SSH_MODULI_FILE), #ifdef IPSSH_USE_V1 IP_SYSVAR("ipssh.v1", "0", SSH_USE_V1), IP_SYSVAR("ipssh.v2", "1", SSH_USE_V2), #endif IP_SYSVAR("ipssh.service.terminal", "1", SSH_USE_TERMINAL), #ifdef IPSSH_USE_SFTP IP_SYSVAR("ipssh.service.sftp", "1", SSH_USE_SFTP), IP_SYSVAR( "ipssh.sftp.start_dir", IPSSH_SFTP_START_DIR, SSH_SFTP_START_DIR ), #endif IP_SYSVAR("ipssh.service.port_fwd", "1", SSH_USE_PORT_FWD), IP_SYSVAR("ipssh.key_id.rsa", "default_rsa", SSH_RSA_KEY_ID), IP_SYSVAR("ipssh.key_id.rsa_keyex", "default_rsa", SSH_RSA_KEYEX_KEY_ID), IP_SYSVAR("ipssh.key_id.dsa", "default_dsa", SSH_DSA_KEY_ID), IP_SYSVAR("ipssh.auth.pw.allowed", "1", SSH_AUTH_PW_ALLOWED), IP_SYSVAR("ipssh.auth.pw.required", "0", SSH_AUTH_PW_REQUIRED), IP_SYSVAR("ipssh.auth.pub_key.allowed", "1", SSH_AUTH_PUB_KEY_ALLOWED), IP_SYSVAR("ipssh.auth.pub_key.required", "0", SSH_AUTH_PUB_KEY_REQUIRED), IP_SYSVAR("ipssh.auth.pub_key_first", "1", SSH_AUTH_PUB_KEY_FIRST), IP_SYSVAR("ipssh.auth.hostbased.allowed", "1", SSH_AUTH_HOSTBASED_ALLOWED), IP_SYSVAR("ipssh.auth.hostbased.required", "0", SSH_AUTH_HOSTBASED_REQUIRED), IP_SYSVAR("ipssh.auth.max_fail", "3", SSH_AUTH_MAX_FAIL), IP_SYSVAR("ipssh.host_key.rsa", "1", SSH_HOST_KEY_RSA), IP_SYSVAR("ipssh.host_key.dsa", "1", SSH_HOST_KEY_DSA), { IP_NULL, IP_NULL } }; /* **************************************************************************** * 8 STATIC FUNCTIONS **************************************************************************** */ /* **************************************************************************** * 9 GLOBAL FUNCTIONS **************************************************************************** */ /* **************************************************************************** * 10 PUBLIC FUNCTIONS **************************************************************************** */ /* *=========================================================================== * ipssh_configure *=========================================================================== * Description: * Parameters: * Returns: * */ IP_GLOBAL Ip_err ipssh_configure(void) { ipcom_sysvar_setv(ipssh_conf_sysvar, 0); #ifdef IPSSH_USE_STOP_SPAWN (void)ipcom_shell_add_cmd("ipssh_stop", "ipssh_stop [-c ] [-a] [-h]", "Stop SSH spawns", (Ipcom_shell_cmd_type) ipssh_stop_cmd, IPSSH_SHELLCMD_PROC_PRIO, IPCOM_PROC_STACK_DEFAULT); #endif (void)ipcom_shell_add_cmd("ipssh_list", "ipssh_list [-l] [-h]", "List connected ssh clients", (Ipcom_shell_cmd_type) ipssh_list_cmd, IPSSH_SHELLCMD_PROC_PRIO, IPCOM_PROC_STACK_DEFAULT); #ifdef IPSSH_USE_SFTP_CLT_CMD (void)ipcom_shell_add_cmd("sftp", "sftp", "sftp file transfer", (Ipcom_shell_cmd_type) ipssh_cmd_sftp, IPSSH_SHELLCMD_PROC_PRIO, IPCOM_PROC_STACK_MAX); #endif #ifdef IPSSH_USE_KEY_FINGERPRINT (void)ipcom_shell_add_cmd("keyfp", "keyfp -f <-b|-h>", "Generate key finger print", (Ipcom_shell_cmd_type) ipssh_keyfp_cmd, IPSSH_SHELLCMD_PROC_PRIO, IPCOM_PROC_STACK_DEFAULT); #endif #ifdef IPTESTENGINE (void)ipcom_shell_add_cmd("ssh_subsystem", "ssh_subsystem [-p port] [-u user] [-w password] -s subsystem host", "", (Ipcom_shell_cmd_type) ipssh_cmd_ssh_subsystem, IPSSH_SHELLCMD_PROC_PRIO, IPCOM_PROC_STACK_DEFAULT); (void)ipcom_shell_add_cmd("stdio_echo", "stdio_echo", "", (Ipcom_shell_cmd_type) ipssh_cmd_ssh_stdio_echo, IPSSH_SHELLCMD_PROC_PRIO, IPCOM_PROC_STACK_DEFAULT); #endif #ifdef IPSSH_USE_DH_GROUP_EX_EXAMPLE_MODULI_FILE ipssh_create_dh_gex_moduli_example_file(); #endif return IPCOM_SUCCESS; } /* *=========================================================================== * ipssh_get_sftp_func_cb *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC Ipssh_sftp_func_cb * ipssh_get_sftp_func_cb(const char *path) { (void) path; return IPSSH_GET_SFTP_FUNC_CB(path); } /* *=========================================================================== * ipssh_sftp_check_access_cb *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC Ip_err ipssh_sftp_check_access_cb(const char *user, int action, const char *path, int flags) { return IPSSH_SFTP_CHECK_ACCESS_CB(user, action, path, flags); } /* *=========================================================================== * ipssh_shell_check_access_cb *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC Ip_err ipssh_shell_check_access_cb(const char *user, int flags) { return IPSSH_SHELL_CHECK_ACCESS_CB(user, flags); } /* *=========================================================================== * ipssh_validate_userid_pw_cb *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC Ip_err ipssh_validate_userid_pw_cb(const char *user, const char *pw, Ipcom_shell_ctx* sh_ctx) { return IPSSH_VALIDATE_USERID_PW_CB(user, pw, sh_ctx); } /* *=========================================================================== * ipssh_validate_pubkey_cb *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC Ip_err ipssh_validate_pubkey_cb(const char *user, EVP_PKEY *pub_key, Ipcom_shell_ctx* sh_ctx) { return IPSSH_VALIDATE_PUBKEY_CB(user, pub_key, sh_ctx); } /* *=========================================================================== * ipssh_validate_hostbased_cb *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC Ip_err ipssh_validate_hostbased_cb(const char *user, char *host, EVP_PKEY *pub_key, Ipcom_shell_ctx* sh_ctx) { return IPSSH_VALIDATE_HOSTBASED_CB(user, host, pub_key, sh_ctx); } #ifdef IPSSH_USE_RSA /* *=========================================================================== * ipssh_validate_rsa_pubkey_v1_cb *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC RSA * ipssh_validate_rsa_pubkey_v1_cb(const char *user, BIGNUM *modulus, Ipcom_shell_ctx* sh_ctx) { return IPSSH_VALIDATE_RSA_PUBKEY_V1_CB(user, modulus, sh_ctx); } #endif /* *=========================================================================== * ipssh_auth_complete_cb *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC Ip_err ipssh_auth_complete_cb(const char* user, Ipcom_shell_ctx* sh_ctx) { return IPSSH_AUTH_COMPLETE_CB(user, sh_ctx); } /* *=========================================================================== * ipssh_validate_srv_public_key_cb *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC Ip_err ipssh_validate_srv_public_key_cb(EVP_PKEY *srv_key, const union Ip_sockaddr_union *srv_addr) { return IPSSH_VALIDATE_SRV_PUBLIC_KEY_CB(srv_key, srv_addr); } #ifdef IPSSH_USE_RSA /* *=========================================================================== * ipssh_load_rsa_key_cb *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC RSA * ipssh_load_rsa_key_cb(void) { return IPSSH_LOAD_RSA_KEY_CB(); } /* *=========================================================================== * ipssh_load_rsa_keyex_key_cb *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC RSA * ipssh_load_rsa_keyex_key_cb(void) { return IPSSH_LOAD_RSA_KEYEX_KEY_CB(); } #endif /* *=========================================================================== * ipssh_load_dsa_key_cb *=========================================================================== * Description: * Parameters: * Returns: * */ IP_PUBLIC DSA * ipssh_load_dsa_key_cb(void) { return IPSSH_LOAD_DSA_KEY_CB(); } /* **************************************************************************** * END OF FILE **************************************************************************** */