#include <stdlib.h>
#include <unistd.h>
#include "rpcclt_openapi.h"
#include "proc_util.h"
void printSSHAppMenu()
{
printf("Usage: ssh_example <test#> <arg1> <arg2> ... \n");
printf("Usage: In below, <key-type> should be set to 0 for RSA, and 1 for DSA\n");
printf("Usage: In below, <protocol_version> should be set to 0 for OPEN_SSH_PROTO_VERSION_1, and 1 for OPEN_SSH_PROTO_VERSION_2\n");
printf("Usage: In below, <mode> should be set to 0 for OPEN_DISABLE and 1 for OPEN_ENABLE\n");
printf("Test 1: Generate SSH key: ssh_example 1 <key-type> \n");
printf("Test 2: Get SSH key status: ssh_example 2 <key-type> \n");
printf("Test 3: Delete SSH key: ssh_example 3 <key-type>\n");
printf("Test 4: Set SSH admin mode: ssh_example 4 <mode>\n");
printf("Test 5: Get SSH admin mode: ssh_example 5 \n");
printf("Test 6: Set SSH protocol version: ssh_example 6 <protocol-version> \n");
printf("Test 7: Get SSH protocol version: ssh_example 7 \n");
printf("Test 8: Set SSH session idle timeout value: ssh_example 8 <timeout>\n");
printf("Test 9: Get SSH session idle timeout value: ssh_example: ssh_example 9 \n");
printf("Test 10: Set maximum number of allowed SSH sessions: ssh_example 10 <max-sessions>\n");
printf("Test 11: Set maximum number of allowed SSH sessions to default: ssh_example 11 \n");
printf("Test 12: Get maximum number of allowed SSH sessions: ssh_example 12 \n");
printf("Test 13: Get maximum number of active SSH sessions: ssh_example 13 \n");
printf("Test 14: SSH OpEN API Sanity: ssh_example 14 \n");
printf("Test 15: Set SCP Server admin mode: ssh example 15 <mode>\n");
printf("Test 16: Get SCP server admin mode: ssh_example 16 \n");
printf("Test 17: SCP server file transfer start: ssh_example 17 <filename> \n");
printf("Test 18: Set SCP server file transfer complete status: ssh_example 18 \n");
printf("Test 19: Get the remote server password for a given client socket ID for outbound SSH: ssh_example 19 <clientSockID> \n");
return;
}
{
{
printf("Bad return code trying to generate SSH key. (result = %d)\n", result);
}
else
{
{
printf("RSA");
}
else
{
printf("DSA");
}
printf(" key generated successfully. (result = %d)\n", result);
}
return;
}
{
char str[20];
{
strcpy(str, "RSA");
}
{
strcpy(str, "DSA");
}
else
{
memset(str, 0, sizeof(str));
}
{
printf(" %s key is present. \n", str);
}
{
printf(" %s key generation is in progress. \n", str);
}
{
printf(" %s key is not found. \n", str);
}
else
{
printf("Bad return code trying to get SSH keys status. (resul = %d)\n", result);
}
return;
}
{
{
printf("Bad return code trying to delete SSH key. (result = %d)\n", result);
}
else
{
{
printf("RSA");
}
else
{
printf("DSA");
}
printf(" key deleted successfully. (result = %d)\n", result);
}
return;
}
{
{
printf("Bad return code trying to set SSH admin mode. (result = %d)\n", result);
}
else
{
printf("SSH admin mode set successfully. (result = %d)\n", result);
}
return;
}
{
{
printf("Bad return code trying to set SSH admin mode. (result = %d)\n", result);
}
else
{
printf("SSH admin mode: %d (result = %d)\n", mode, result);
}
return;
}
{
{
printf("Bad return code trying to set SSH protocol version. (result = %d)\n", result);
}
else
{
printf("SSH protocol version is set successfully. (result = %d)\n", result);
}
return;
}
{
{
printf("Bad return code trying to get SSH protocol version. (result = %d)\n", result);
}
else
{
printf("SSH protocol version: %d (result = %d)\n", protoVersion, result);
}
return;
}
{
{
printf("Bad return code trying to set SSH session timeout. (result = %d)\n", result);
}
else
{
printf("SSH session timeout is set successfully. (result = %d)\n", result);
}
return;
}
{
uint32_t sshSessionTimeout;
{
printf("Bad return code trying to get SSH session timeout. (result = %d)\n", result);
}
else
{
printf("SSH session timeout: %d. (result = %d)\n", sshSessionTimeout, result);
}
return;
}
{
{
printf("Bad return code trying to set maximum SSH sessions allowed. (result = %d)\n", result);
}
else
{
printf("Maximum number of SSH sessions is set successfully. (result = %d)\n", result);
}
return;
}
{
{
printf("Bad return code trying to set maximum SSH sessions allowed to default. (result = %d)\n", result);
}
else
{
printf("Maximum number of SSH sessions is set to default successfully. (result = %d)\n", result);
}
return;
}
{
uint32_t maxSshSessions;
{
printf("Bad return code trying to get maximum SSH sessions allowed. (result = %d)\n", result);
}
else
{
printf("Maximum number of SSH sessions: %d. (result = %d)\n", maxSshSessions, result);
}
return;
}
{
uint32_t activeSshSessions;
{
printf("Bad return code trying to get active SSH sessions. (result = %d)\n", result);
}
else
{
printf("Number of active SSH sessions: %d. (result = %d)\n", activeSshSessions, result);
}
return;
}
{
{
printf("Bad return code trying to set SCP server admin mode. (result = %d)\n", result);
}
else
{
printf("SCP server admin mode set successfully. (result = %d)\n", result);
}
return;
}
{
{
printf("Bad return code trying to set SCP server admin mode. (result = %d)\n", result);
}
else
{
printf(
"SCP server admin mode: %s (result = %d)\n", (mode ==
OPEN_ENABLE ?
"enable" :
"disable"), result);
}
return;
}
{
{
printf("Bad return code trying to start SCP server remote file transfer (result = %d)\n", result);
}
else
{
printf("SCP server start remote file transfer : (result = %d)\n", result);
}
return;
}
{
{
printf("Bad return code trying to set SCP transfer complete (result = %d)\n", result);
}
else
{
printf("SCP server file transfer complete : (result = %d)\n", result);
}
return;
}
{
{
printf("Bad return code trying to get the password for a client socket ID. (result = %d)\n", result);
}
else
{
printf("Password is returned successfully : (result = %d)\n", result);
}
return;
}
{
uint32_t activeSshSessions = 0;
uint32_t maxSshSessions = 0;
uint32_t sshSessionTimeout = 0;
uint32_t clientSockID = 1;
printf("\nTesting openapiSSHKeyGenerate(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("Invalid SSH key. (result = %d)\n", result);
printf("openapiSSHKeyGenerate() sanity successful.\n");
printf("\nTesting openapiSSHKeyDelete(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("Invalid SSH key. (result = %d)\n", result);
printf("openapiSSHKeyDelete() sanity successful.\n");
printf("\nTesting openapiSSHKeyStatusGet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("Invalid SSH key. (result = %d)\n", result);
printf("openapiSSHKeyStatusGet() sanity successful.\n");
printf("\nTesting openapiSSHAdminModeSet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("Invalid SSH admin mode. (result = %d)\n", result);
printf("openapiSSHKeyStatusSet() sanity successful.\n");
printf("\nTesting openapiSSHAdminModeGet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("SSH admin mode. (result = %d)\n", result);
printf("openapiSSHKeyStatusGet() sanity successful.\n");
printf("\nTesting openapiSSHProtocolVersionSet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("Invalid SSH protocol version. (result = %d)\n", result);
printf("openapiSSHProtocolVersionSet() sanity successful.\n");
printf("\nTesting openapiSSHProtocolVersionGet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("SSH protocol version. (result = %d)\n", result);
printf("openapiSSHProtocolVersionGet() sanity successful.\n");
printf("\nTesting openapiSSHSessionTimeoutSet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("Invalid SSH timeout value. (result = %d)\n", result);
printf("openapiSSHSessionTimeoutSet() sanity successful.\n");
printf("\nTesting openapiSSHSessionTimeoutGet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL SSH timeout value. (result = %d)\n", result);
printf("openapiSSHSessionTimeoutGet() sanity successful.\n");
printf("\nTesting openapiSSHMaxSessionsSet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("Invalid maximum SSH sessions. (result = %d)\n", result);
printf("openapiSSHMaxSessionsSet() sanity successful.\n");
printf("\nTesting openapiSSHMaxSessionsDefaultSet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("openapiSSHMaxSessionsDefaultSet() sanity successful.\n");
printf("\nTesting openapiSSHMaxSessionsGet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL maximum SSH sessions. (result = %d)\n", result);
printf("openapiSSHMaxSessionsGet() sanity successful.\n");
printf("\nTesting openapiSSHActiveSessionsGet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL active SSH sessions. (result = %d)\n", result);
printf("openapiSSHActiveSessionsGet() sanity successful.\n");
printf("\nTesting openapiScpServerAdminModeSet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
{
}
printf("Invalid SCP Server admin mode. (result = %d)\n", result);
{
}
{
printf("openapiScpServerAdminModeSet() sanity successful.\n");
}
else
{
printf("openapiScpServerAdminModeSet() sanity failed.\n");
}
printf("\nTesting openapiScpServerAdminModeGet(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
{
}
printf("SCP sever admin mode. (result = %d)\n", result);
{
}
{
printf("openapiScpServerAdminModeGet() sanity successful.\n");
}
else
{
printf("openapiScpServerAdminModeGet() sanity failed.\n");
}
printf("\nTesting openapiScpRemoteTransferStart(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
{
}
printf("Invalid SCP transfer file name. (result = %d)\n", result);
{
}
{
printf("openapiScpRemoteTransferStart() sanity successful.\n");
}
else
{
printf("openapiScpRemoteTransferStart() sanity failed.\n");
}
printf("\nTesting openapiScpRemoteTransferComplete(): \n");
printf("NULL Client Handle. (result = %d)\n", result);
{
}
{
printf("openapiScpRemoteTransferComplete() sanity successful.\n");
}
else
{
printf("openapiScpRemoteTransferComplete() sanity failed.\n");
}
printf("\nTesting openapiSSHRemotePasswordGet(): \n");
printf("NULL client handle:(result = %d)\n", result);
printf("NULL argumet 3:(result = %d)\n", result);
return;
}
int main(int argc, char **argv)
{
uint32_t testNum;
char switch_os_revision_string[100];
uint32_t arg1;
if (argc < 2)
{
printSSHAppMenu();
exit(1);
}
testNum = atoi(argv[1]);
l7proc_crashlog_register();
{
printf("\nFailed to initialize RPC to OpEN. Exiting (result = %d)\n", result);
exit(2);
}
{
sleep(1);
}
L7PROC_LOGF(L7PROC_LOG_SEVERITY_INFO, 0, "Starting SSH API example application");
printf("\n");
switch_os_revision.
pstart = switch_os_revision_string;
switch_os_revision.
size =
sizeof(switch_os_revision_string);
printf("Network OS version = %s\n", switch_os_revision_string);
else
printf("Network OS version retrieve error\n");
printf("\n");
switch (testNum)
{
case 1:
if (argc != 3)
{
printSSHAppMenu();
exit(1);
}
arg1 = atoi(argv[2]);
sshKeyGenerate(&clientHandle, arg1);
break;
case 2:
if (argc != 3)
{
printSSHAppMenu();
exit(1);
}
arg1 = atoi(argv[2]);
sshKeyStatusGet(&clientHandle, arg1);
break;
case 3:
if (argc != 3)
{
printSSHAppMenu();
exit(1);
}
arg1 = atoi(argv[2]);
sshKeyDelete(&clientHandle, arg1);
break;
case 4:
if (argc != 3)
{
printSSHAppMenu();
exit(1);
}
arg1 = atoi(argv[2]);
sshAdminModeSet(&clientHandle, arg1);
break;
case 5:
if (argc != 2)
{
printSSHAppMenu();
exit(1);
}
sshAdminModeGet(&clientHandle);
break;
case 6:
if (argc != 3)
{
printSSHAppMenu();
exit(1);
}
arg1 = atoi(argv[2]);
sshProtocolVersionSet(&clientHandle, arg1);
break;
case 7:
if (argc != 2)
{
printSSHAppMenu();
exit(1);
}
sshProtocolVersionGet(&clientHandle);
break;
case 8:
if (argc != 3)
{
printSSHAppMenu();
exit(1);
}
arg1 = atoi(argv[2]);
sshSessionTimeoutSet(&clientHandle, arg1);
break;
case 9:
if (argc != 2)
{
printSSHAppMenu();
exit(1);
}
sshSessionTimeoutGet(&clientHandle);
break;
case 10:
if (argc != 3)
{
printSSHAppMenu();
exit(1);
}
arg1 = atoi(argv[2]);
sshMaxSessionsSet(&clientHandle, arg1);
break;
case 11:
if (argc != 2)
{
printSSHAppMenu();
exit(1);
}
sshMaxSessionsDefaultSet(&clientHandle);
break;
case 12:
if (argc != 2)
{
printSSHAppMenu();
exit(1);
}
sshMaxSessionsGet(&clientHandle);
break;
case 13:
if (argc != 2)
{
printSSHAppMenu();
exit(1);
}
sshActiveSessionsGet(&clientHandle);
break;
case 14:
if (argc != 2)
{
printSSHAppMenu();
exit(1);
}
sshOpENAPISanity(&clientHandle);
break;
case 15:
if (argc != 3)
{
printSSHAppMenu();
exit(1);
}
arg1 = atoi(argv[2]);
scpServerAdminModeSet(&clientHandle, arg1);
break;
case 16:
if (argc != 2)
{
printSSHAppMenu();
exit(1);
}
scpServerAdminModeGet(&clientHandle);
break;
case 17:
if (argc != 3)
{
printSSHAppMenu();
exit(1);
}
if (strlen(argv[2]) != 0)
{
strncpy(fileNameStr, argv[2], strlen(argv[2]));
fileParams.size = sizeof(fileNameStr);
fileParams.pstart = &fileNameStr;
scpServerRemoteTransferStart(&clientHandle, &fileParams);
}
break;
case 18:
if (argc != 2)
{
printSSHAppMenu();
exit(1);
}
ScpServerRemoteTransferComplete(&clientHandle);
break;
case 19:
if (argc != 3)
{
printSSHAppMenu();
exit(1);
}
arg1 = atoi(argv[2]);
sshRemotePasswordGet(&clientHandle, arg1, &password);
break;
default:
printSSHAppMenu();
break;
}
L7PROC_LOGF(L7PROC_LOG_SEVERITY_INFO, 0, "Stopping SSH API example application");
return 0;
}