Files
m241Neelima/components/ip_net2-6.9/ipssh/config/ipssh_config.c
T
2026-07-30 11:19:44 +05:30

557 lines
18 KiB
C

/*
******************************************************************************
* 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 <roger@interpeak.se>
******************************************************************************
*/
/*
****************************************************************************
* 1 DESCRIPTION
****************************************************************************
*/
/*
****************************************************************************
* 2 INCLUDE FILES
****************************************************************************
*/
#include "ipssh_config.h"
#include <ipcom_type.h>
#include <ipcom_cstyle.h>
#include <ipcom_clib.h>
#include <ipcom_shell.h>
#include <ipcom_err.h>
#include <ipcom_sysvar.h>
#include <ipssh.h>
/*
****************************************************************************
* 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 <id>] [-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 <file> <-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
****************************************************************************
*/