#include <stdlib.h>
#include <unistd.h>
#include "rpcclt_openapi.h"
#include "proc_util.h"
void printTacacsAppMenu()
{
printf("Usage: tacacs_example <test#> <arg1> <arg2> ... \n");
printf("Test 1: Add TACACS+ server: tacacs_example 1 <tacacs-server>\n");
printf("Test 2: Set TACACS+ server key: tacacs_example 2 <tacacs-server> <key>\n");
printf("Test 3: Set TACACS+ server priority: tacacs_example 3 <tacacs-server> <priority>\n");
printf("Test 4: Set TACACS+ server port: tacacs_example 4 <tacacs-server> <port>\n");
printf("Test 5: Set TACACS+ server timeout: tacacs_example 5 <tacacs-server> <timeout>\n");
printf("Test 6: Set TACACS+ global key: tacacs_example 6 <tacacs-server global key>\n");
printf("Test 7: Set TACACS+ server global timeout: tacacs_example 7 <global timeout>\n");
printf("Test 8: Set TACACS+ server port to default: tacacs_example 8 <tacacs-server>\n");
printf("Test 9: Set TACACS+ server priority to default: tacacs_example 9 <tacacs-server>\n");
printf("Test 10: Set TACACS+ server key to default: tacacs_example 10 <tacacs-server>\n");
printf("Test 11: Delete TACACS+ server: tacacs_example 11 <tacacs-server>\n");
printf("Test 12: Delete TACACS+ server global key: taccas_example 12\n");
printf("Test 13: Get TACACS+ server info: tacacs_example 13\n");
printf("Test 14: tacacs_example OpEN APIs sanity: tacacs_example 14\n");
return;
}
{
char str[256];
memset(str, 0, sizeof(str));
strncpy(str, tacacsServerAddr, (sizeof(str) - 1));
tacacsServer.
pstart = str;
tacacsServer.
size = strlen(str)+1;
{
printf("Bad return code trying to add TACACS+ server. (result = %d)\n", result);
}
else
{
printf("TACACS+ server is added successfully. (result = %d)\n", result);
}
return;
}
{
char str[256];
char str1[256];
memset(str, 0, sizeof(str));
strncpy(str, tacacsServerAddr, (sizeof(str) - 1));
tacacsServer.pstart = str;
tacacsServer.size = strlen(str)+1;
memset(str1, 0, sizeof(str1));
strncpy(str1, key, (sizeof(str1) - 1));
tacacsKey.pstart = str1;
tacacsKey.size = strlen(str1)+1;
{
printf("Bad return code trying to set TACACS+ server key. (result = %d)\n", result);
}
else
{
printf("TACACS+ server key is set successfully. (result = %d)\n", result);
}
return;
}
void tacacsServerPrioritySet(
openapiClientHandle_t *clientHandle,
char *tacacsServerAddr, uint32_t priority)
{
char str[256];
memset(str, 0, sizeof(str));
strncpy(str, tacacsServerAddr, (sizeof(str) - 1));
tacacsServer.pstart = str;
tacacsServer.size = strlen(str)+1;
{
printf("Bad return code trying to set TACACS+ server priority. (result = %d)\n", result);
}
else
{
printf("TACACS+ server priority is set successfully. (result = %d)\n", result);
}
return;
}
{
char str[256];
memset(str, 0, sizeof(str));
strncpy(str, tacacsServerAddr, (sizeof(str) - 1));
tacacsServer.pstart = str;
tacacsServer.size = strlen(str)+1;
{
printf("Bad return code trying to set TACACS+ server port. (result = %d)\n", result);
}
else
{
printf("TACACS+ server port is set successfully. (result = %d)\n", result);
}
return;
}
void tacacsServerTimeoutSet(
openapiClientHandle_t *clientHandle,
char *tacacsServerAddr, uint32_t timeout)
{
char str[256];
memset(str, 0, sizeof(str));
strncpy(str, tacacsServerAddr, (sizeof(str) - 1));
tacacsServer.pstart = str;
tacacsServer.size = strlen(str)+1;
{
printf("Bad return code trying to set TACACS+ server timeout. (result = %d)\n", result);
}
else
{
printf("TACACS+ server timeout is set successfully. (result = %d)\n", result);
}
return;
}
{
char str[256];
memset(str, 0, sizeof(str));
strncpy(str, tacacsGlobalKey, (sizeof(str) - 1));
tacacsGblKeyBuffDesc.pstart = str;
tacacsGblKeyBuffDesc.size = strlen(str)+1;
{
printf("Bad return code trying to set TACACS+ server global key. (result = %d)\n", result);
}
else
{
printf("TACACS+ server global key is set successfully. (result = %d)\n", result);
}
return;
}
{
char str[256];
memset(str, 0, sizeof(str));
strncpy(str, tacacsServerAddr, (sizeof(str) - 1));
tacacsServer.pstart = str;
tacacsServer.size = strlen(str)+1;
{
printf("Bad return code trying to delete TACACS+ server. (result = %d)\n", result);
}
else
{
printf("TACACS+ server deleted is set successfully. (result = %d)\n", result);
}
return;
}
{
{
printf("Bad return code trying to set TACACS+ server global timeout. (result = %d)\n", result);
}
else
{
printf("TACACS+ server global timeout is set successfully. (result = %d)\n", result);
}
return;
}
{
char str[256];
memset(str, 0, sizeof(str));
strncpy(str, tacacsServerAddr, (sizeof(str) - 1));
tacacsSrvBuffDesc.pstart = str;
tacacsSrvBuffDesc.size = strlen(str)+1;
{
printf("Bad return code trying to set TACACS+ server port to default. (result = %d)\n", result);
}
else
{
printf("TACACS+ server port is set to default successfully. (result = %d)\n", result);
}
return;
}
{
char str[256];
memset(str, 0, sizeof(str));
strncpy(str, tacacsServerAddr, (sizeof(str) - 1));
tacacsSrvBuffDesc.pstart = str;
tacacsSrvBuffDesc.size = strlen(str)+1;
{
printf("Bad return code trying to set TACACS+ server priority to default. (result = %d)\n", result);
}
else
{
printf("TACACS+ server priority is set to default successfully. (result = %d)\n", result);
}
return;
}
{
char str[256];
memset(str, 0, sizeof(str));
strncpy(str, tacacsServerAddr, (sizeof(str) - 1));
tacacsSrvBuffDesc.pstart = str;
tacacsSrvBuffDesc.size = strlen(str)+1;
{
printf("Bad return code trying to set TACACS+ server key to default. (result = %d)\n", result);
}
else
{
printf("TACACS+ server key is set to default successfully. (result = %d)\n", result);
}
return;
}
{
{
printf("Bad return code trying to delete TACACS+ server global key. (result = %d)\n", result);
}
else
{
printf("TACACS+ server global key is deleted successfully. (result = %d)\n", result);
}
return;
}
{
uint32_t tacacsSrvMaxLen = 0;
uint32_t tacacsServerKeyMaxLen = 0;
uint32_t maxTacacsServersSupp = 0;
char *tacacsSrv;
uint16_t port = 0, priority = 0;
uint32_t timeout = 0, globalTimeout = 0;
{
printf(" Bad return code trying to get TACACS+ server maximum length. (result = %d)\n", result);
return;
}
{
printf(" Bad return code trying to get TACACS+ server key maximum length. (result = %d)\n", result);
return;
}
if ((tacacsSrv = (char *)malloc(tacacsSrvMaxLen)) == NULL)
{
printf("Could not allocate memory. \n");
return;
}
memset(tacacsSrv, 0, tacacsSrvMaxLen);
tacacsSrvBuffDesc.pstart = tacacsSrv;
tacacsSrvBuffDesc.size = tacacsSrvMaxLen;
printf("\n");
{
printf(" Bad return code trying to get maximum TACACS+ servers supported. (result = %d)\n", result);
free(tacacsSrv);
return;
}
else
{
printf("Maximum TACACS+ Servers Supported: %d\n", maxTacacsServersSupp);
}
{
printf(" Bad return code trying to get TACACS+ server global timeout. (result = %d)\n", result);
}
else
{
printf("TACACS+ server global timeout: %d\n", globalTimeout);
}
printf("\n");
printf("TACACS+ server details: \n");
printf("-----------------------\n");
{
printf(" Bad return code trying to get first TACACS+ server. (result = %d)\n", result);
return;
}
do
{
printf("TACACS+ server Address: %s\n", (char *) tacacsSrvBuffDesc.pstart);
printf("Port: ");
{
printf("Error getting TACACS+ server port. (result = %d) \n", result);
}
else
{
printf("%d\n", port);
}
printf("Priority: ");
{
printf("Error getting TACACS+ server priority. (result = %d) \n", result);
}
else
{
printf("%d\n", priority);
}
printf("Timeout: ");
{
printf("Error getting TACACS+ server timeout. (result = %d) \n", result);
}
else
{
printf("%d\n", timeout);
}
tacacsSrvBuffDesc.size = tacacsSrvMaxLen;
printf("\n");
free(tacacsSrv);
return;
}
{
uint32_t tacacsSrvMaxLen = 0;
uint32_t tacacsServerKeyMaxLen = 0;
uint32_t maxTacacsServersSupp = 0;
char *tacacsSrv, *tacacsSrvKey;
uint16_t port = 0, priority = 0;
uint32_t timeout = 0, globalTimeout = 0;
{
printf(" Bad return code trying to get TACACS+ server maximum length. (result = %d)\n", result);
return;
}
{
printf(" Bad return code trying to get TACACS+ server key maximum length. (result = %d)\n", result);
return;
}
if ((tacacsSrv = (char *)malloc(tacacsSrvMaxLen)) == NULL)
{
printf("Could not allocate memory. \n");
return;
}
if ((tacacsSrvKey = (char *)malloc(tacacsServerKeyMaxLen)) == NULL)
{
printf("Could not allocate memory. \n");
free(tacacsSrv);
return;
}
memset(tacacsSrv, 0, tacacsSrvMaxLen);
tacacsSrvBuffDesc.pstart = tacacsSrv;
tacacsSrvBuffDesc.size = tacacsSrvMaxLen;
memset(tacacsSrvKey, 0, tacacsServerKeyMaxLen);
tacacsSrvKeyBuffDesc.pstart = tacacsSrvKey;
tacacsSrvKeyBuffDesc.size = tacacsServerKeyMaxLen;
printf("\nTesting openapiTacacsServerMaxLengthGet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL parameter to TACACS+ server maximum length. (result = %d)\n", result);
printf("openapiTacacsServerMaxLengthGet() sanity successful. \n");
printf("\nTesting openapiTacacsKeyMaxLengthGet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL parameter to TACACS+ server key maximum length. (result = %d)\n", result);
printf("openapiTacacsKeyMaxLengthGet() sanity successful. \n");
printf("\nTesting openapiTacacsServersMaxSupportedGet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL parameter to maximum TACACS+ servers supported. (result = %d)\n", result);
printf("openapiTacacsServersMaxSupportedGet() sanity successful. \n");
printf("\nTesting openapiTacacsServerAdd():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server. (result = %d)\n", result);
printf("openapiTacacsServerAdd() sanity successful. \n");
printf("\nTesting openapiTacacsServerFirstGet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server. (result = %d)\n", result);
printf("openapiTacacsServerFirstGet() sanity successful. \n");
printf("\nTesting openapiTacacsServerNextGet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server. (result = %d)\n", result);
printf("NULL buff descriptor to next TACACS+ server. (result = %d)\n", result);
printf("openapiTacacsServerNextGet() sanity successful. \n");
printf("\nTesting openapiTacacsServerDelete():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server. (result = %d)\n", result);
printf("openapiTacacsServerDelete() sanity successful. \n");
printf("\nTesting openapiTacacsServerKeySet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server key. (result = %d)\n", result);
printf("openapiTacacsServerKeySet() sanity successful. \n");
printf("\nTesting openapiTacacsServerPortSet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server. (result = %d)\n", result);
printf("openapiTacacsServerPortSet() sanity successful. \n");
printf("\nTesting openapiTacacsServerPortGet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server. (result = %d)\n", result);
printf("NULL parameter to TACACS+ server port. (result = %d)\n", result);
printf("openapiTacacsServerPortGet() sanity successful. \n");
printf("\nTesting openapiTacacsServerPrioritySet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server. (result = %d)\n", result);
printf("openapiTacacsServerPrioritySet() sanity successful. \n");
printf("\nTesting openapiTacacsServerPriorityGet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server. (result = %d)\n", result);
printf("NULL parameter to TACACS+ server priority. (result = %d)\n", result);
printf("openapiTacacsServerPriorityGet() sanity successful. \n");
printf("\nTesting openapiTacacsServerTimeoutSet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server. (result = %d)\n", result);
printf("Invalid TACACS+ server timeout value. (result = %d)\n", result);
printf("Invalid TACACS+ server timeout value. (result = %d)\n", result);
printf("openapiTacacsServerTimeoutSet() sanity successful. \n");
printf("\nTesting openapiTacacsServerTimeoutGet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server. (result = %d)\n", result);
printf("NULL parameter to TACACS+ server timeout. (result = %d)\n", result);
printf("openapiTacacsServerTimeoutGet() sanity successful. \n");
printf("\nTesting openapiTacacsServerGlobalKeySet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server global key. (result = %d)\n", result);
printf("openapiTacacsServerGlobalKeySet() sanity successful. \n");
printf("\nTesting openapiTacacsServerGlobalTimeoutGet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL parameter to TACACS+ server global timeout. (result = %d)\n", result);
printf("openapiTacacsServerGlobalTimeoutGet() sanity successful. \n");
printf("\nTesting openapiTacacsServerDefaultKeySet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server. (result = %d)\n", result);
printf("openapiTacacsServerDefaultKeySet() sanity successful. \n");
printf("\nTesting openapiTacacsServerDefaultPortSet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server. (result = %d)\n", result);
printf("openapiTacacsServerDefaultPortSet() sanity successful. \n");
printf("\nTesting openapiTacacsServerDefaultPrioritySet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("NULL buff descriptor to TACACS+ server. (result = %d)\n", result);
printf("openapiTacacsServerDefaultPrioritySet() sanity successful. \n");
printf("\nTesting openapiTacacsServerGlobalKeyDelete():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("openapiTacacsServerGlobalKeyDelete() sanity successful. \n");
printf("\nTesting openapiTacacsServerGlobalTimeoutSet():\n");
printf("NULL Client Handle. (result = %d)\n", result);
printf("Invalid global timeout value. (result = %d)\n", result);
printf("Invalid global timeout value. (result = %d)\n", result);
printf("openapiTacacsServerGlobalTimeoutSet() sanity successful. \n");
free(tacacsSrv);
free(tacacsSrvKey);
return;
}
int main(int argc, char **argv)
{
uint32_t testNum, arg1;
char switch_os_revision_string[100];
if (argc < 2)
{
printTacacsAppMenu();
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 TACACS+ 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)
{
printTacacsAppMenu();
exit(1);
}
tacacsServerAdd(&clientHandle, argv[2]);
break;
case 2:
if (argc != 4)
{
printTacacsAppMenu();
exit(1);
}
tacacsServerKeySet(&clientHandle, argv[2], argv[3]);
break;
case 3:
if (argc != 4)
{
printTacacsAppMenu();
exit(1);
}
arg1 = atoi(argv[3]);
tacacsServerPrioritySet(&clientHandle, argv[2], arg1);
break;
case 4:
if (argc != 4)
{
printTacacsAppMenu();
exit(1);
}
arg1 = atoi(argv[3]);
tacacsServerPortSet(&clientHandle, argv[2], arg1);
break;
case 5:
if (argc != 4)
{
printTacacsAppMenu();
exit(1);
}
arg1 = atoi(argv[3]);
tacacsServerTimeoutSet(&clientHandle, argv[2], arg1);
break;
case 6:
if (argc != 3)
{
printTacacsAppMenu();
exit(1);
}
tacacsServerGlobalKeySet(&clientHandle, argv[2]);
break;
case 7:
if (argc != 3)
{
printTacacsAppMenu();
exit(1);
}
arg1 = atoi(argv[2]);
tacacsServerGlobalTimeoutSet(&clientHandle, arg1);
break;
case 8:
if (argc != 3)
{
printTacacsAppMenu();
exit(1);
}
tacacsServerDefaultPortSet(&clientHandle, argv[2]);
break;
case 9:
if (argc != 3)
{
printTacacsAppMenu();
exit(1);
}
tacacsServerDefaultPrioritySet(&clientHandle, argv[2]);
break;
case 10:
if (argc != 3)
{
printTacacsAppMenu();
exit(1);
}
tacacsServerDefaultKeySet(&clientHandle, argv[2]);
break;
case 11:
if (argc != 3)
{
printTacacsAppMenu();
exit(1);
}
tacacsServerDelete(&clientHandle, argv[2]);
break;
case 12:
if (argc != 2)
{
printTacacsAppMenu();
exit(1);
}
tacacsServerGlobalKeyDelete(&clientHandle);
break;
case 13:
if (argc != 2)
{
printTacacsAppMenu();
exit(1);
}
tacacsServerInfoGet(&clientHandle);
break;
case 14:
if (argc != 2)
{
printTacacsAppMenu();
exit(1);
}
tacacsOpENAPIsSanity(&clientHandle);
break;
default:
printTacacsAppMenu();
break;
}
L7PROC_LOGF(L7PROC_LOG_SEVERITY_INFO, 0, "Stopping TACACS+ API example application");
return 0;
}