void client::DisableClientAffinity() { DWORD dwError = 0; //This code would eventually move out of here //when other APIs become remotable PVMAFD_SERVER pServer = NULL; dwError = VmAfdOpenServerA(NULL,NULL,NULL,&pServer); BAIL_ON_ERROR(dwError); dwError = CdcDisableClientAffinity(pServer); BAIL_ON_ERROR(dwError); cleanup: if (pServer) { VmAfdCloseServer(pServer); } return; error: THROW_IF_NEEDED(dwError); goto cleanup; }
std::string client::GetCdcState() { CDC_DC_STATE cdcState = CDC_DC_STATE_UNDEFINED; DWORD dwError = 0; std::string result; //This code would eventually move out of here //when other APIs become remotable PVMAFD_SERVER pServer = NULL; dwError = VmAfdOpenServerA(NULL,NULL,NULL,&pServer); BAIL_ON_ERROR(dwError); dwError = CdcGetCurrentState(pServer, &cdcState); BAIL_ON_ERROR(dwError); switch (cdcState) { case CDC_DC_STATE_NO_DC_LIST: result.assign("NO_DC_LIST"); break; case CDC_DC_STATE_SITE_AFFINITIZED: result.assign("SITE_AFFINITIZED"); break; case CDC_DC_STATE_OFF_SITE: result.assign("OFF_SITE"); break; case CDC_DC_STATE_NO_DCS_ALIVE: result.assign("NO_DCS_ALIVE"); break; case CDC_DC_STATE_LEGACY: result.assign("DISABLED"); break; default: result.assign("UNKNOWN"); break; } cleanup: if (pServer) { VmAfdCloseServer(pServer); } return result; error: THROW_IF_NEEDED(dwError); goto cleanup; }
bpl::list client::EnumDCEntries() { DWORD dwError = 0; bpl::list result; DWORD dwCount = 0; DWORD dwIndex = 0; PSTR pszDCEntry = NULL; PSTR *ppszDCEntries = NULL; //This code would eventually move out of here //when other APIs become remotable PVMAFD_SERVER pServer = NULL; dwError = VmAfdOpenServerA(NULL,NULL,NULL,&pServer); BAIL_ON_ERROR(dwError); dwError = CdcEnumDCEntriesA( pServer, &ppszDCEntries, &dwCount); if (dwError == 0 && dwCount > 0) { for (dwIndex=0; dwIndex<dwCount; dwIndex++) { if (ppszDCEntries[dwIndex]) { std::string st(ppszDCEntries[dwIndex]); result.append(st); } } } BAIL_ON_ERROR(dwError); cleanup: if (pServer) { VmAfdCloseServer(pServer); } if (ppszDCEntries) { CdcFreeStringArrayA(ppszDCEntries, dwCount); } return result; error: THROW_IF_NEEDED(dwError); goto cleanup; }
std::string client::GetAffinitizedDC(std::string DomainName, bool bForceRefresh) { PSTR pszAffinitizedDC = NULL; DWORD dwError = 0; std::string result; PCDC_DC_INFO_A pDomainControllerInfo = NULL; //This code would eventually move out of here //when other APIs become remotable PVMAFD_SERVER pServer = NULL; dwError = VmAfdOpenServerA(NULL,NULL,NULL,&pServer); BAIL_ON_ERROR(dwError); dwError = CdcGetDCNameA( pServer, (PSTR)DomainName.c_str(), NULL, NULL, bForceRefresh, &pDomainControllerInfo); BAIL_ON_ERROR(dwError); result.assign(pDomainControllerInfo->pszDCName); cleanup: if (pServer) { VmAfdCloseServer(pServer); } if (pDomainControllerInfo) { CdcFreeDomainControllerInfoA(pDomainControllerInfo); } return result; error: THROW_IF_NEEDED(dwError); goto cleanup; }
static DWORD VmAfdCliBeginOrEndUpgrade( PVM_AFD_CLI_CONTEXT pContext ) { DWORD dwError = 0; PSTR pszAccount = NULL; PSTR pszPassword = NULL; PSTR pszDomainName = NULL; BOOL bUsingIPC = FALSE; PVMAFD_SERVER pServer = NULL; if (!pContext) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); } dwError = VmAfdGetDomainNameA(NULL,&pszDomainName); BAIL_ON_VMAFD_ERROR(dwError); if (IsNullOrEmptyString(pContext->pszServerName)) { bUsingIPC = TRUE; } if (bUsingIPC && !IsNullOrEmptyString(pContext->pszUserName)) { printf ("Getting heartbeat status of local system\n" "lightwave user-name will not be used\n" ); } if (!bUsingIPC) { //Factor domain name as well into this equation if(IsNullOrEmptyString(pContext->pszUserName)) { dwError = VmAfdGetMachineAccountInfoA(NULL, &pszAccount, &pszPassword); } else { if (VmAfdCaselessStrStrA(pContext->pszUserName, "@")) { dwError = VmAfdAllocateStringA(pContext->pszUserName, &pszAccount); } else { dwError = VmAfdAllocateStringPrintf( &pszAccount, "%s@%s", pContext->pszUserName, pszDomainName ); } BAIL_ON_VMAFD_ERROR(dwError); if (IsNullOrEmptyString(pContext->pszPassword)) { dwError = GetPassword(&pszPassword); } else { dwError = VmAfdAllocateStringA(pContext->pszPassword, &pszPassword); } BAIL_ON_VMAFD_ERROR(dwError); } } BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdOpenServerA( pContext->pszServerName, pszAccount, pszPassword, &pServer ); BAIL_ON_VMAFD_ERROR(dwError); if (pContext->action == VM_AFD_ACTION_BEGIN_UPGRADE) { dwError = VmAfdBeginUpgrade(pServer); BAIL_ON_VMAFD_ERROR(dwError); printf ("Begin upgrade state is set\n"); } else if (pContext->action == VM_AFD_ACTION_END_UPGRADE) { dwError = VmAfdEndUpgrade(pServer); BAIL_ON_VMAFD_ERROR(dwError); printf ("End upgrade state is set\n"); } cleanup: VMAFD_SAFE_FREE_MEMORY(pszAccount); VMAFD_SAFE_FREE_MEMORY(pszPassword); VMAFD_SAFE_FREE_MEMORY(pszDomainName); if (pServer) { VmAfdCloseServer(pServer); } return dwError; error: goto cleanup; }
static DWORD VmAfdCliGetHeartbeatStatus( PVM_AFD_CLI_CONTEXT pContext ) { DWORD dwError = 0; PSTR pszAccount = NULL; PSTR pszPassword = NULL; PSTR pszDomainName = NULL; BOOL bUsingIPC = FALSE; PVMAFD_HB_STATUS_A pHeartbeatStatus = NULL; PVMAFD_SERVER pServer = NULL; if (!pContext) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); } if (IsNullOrEmptyString(pContext->pszServerName)) { bUsingIPC = TRUE; } if (bUsingIPC && !IsNullOrEmptyString(pContext->pszUserName)) { printf ("Getting heartbeat status of local system\n" "lotus user-name will not be used\n" ); } if (!bUsingIPC) { //Factor domain name as well into this equation if(!pContext->pszUserName) { dwError = VmAfdGetMachineAccountInfoA(NULL, &pszAccount, &pszPassword); } else if (pContext->pszUserName && pContext->pszPassword) { dwError = VmAfdAllocateStringA(pContext->pszUserName, &pszAccount); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdAllocateStringA(pContext->pszPassword, &pszPassword); } else if (pContext->pszUserName && !pContext->pszPassword) { //getPassword } } BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdOpenServerA( pContext->pszServerName, pszAccount, pszPassword, &pServer ); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdGetHeartbeatStatusA( pServer, &pHeartbeatStatus ); BAIL_ON_VMAFD_ERROR(dwError); printf ("Current Status of the machine is :\t%d\n",pHeartbeatStatus->bIsAlive); cleanup: VMAFD_SAFE_FREE_MEMORY(pszAccount); VMAFD_SAFE_FREE_MEMORY(pszPassword); VMAFD_SAFE_FREE_MEMORY(pszDomainName); return dwError; error: goto cleanup; }
static DWORD VecsCliExecEntryRequest( int argc, char* argv[] ) { DWORD dwError = 0; PSTR pszStoreName = NULL; PSTR pszPassword = NULL; PSTR pszAlias = NULL; PSTR pszCertFilePath = NULL; PSTR pszKeyFilePath = NULL; PSTR pszOutputFilePath = NULL; PSTR pszServerName = NULL; PSTR pszUPN = NULL; PSTR pszLotusPassword = NULL; DWORD dwFormatAsText = 0; DWORD idx = 0; DWORD dwAliasesOnly = 0; DWORD dwForceDelete = 0; VECS_COMMAND command = VECS_COMMAND_UNKNOWN; typedef enum { PARSE_MODE_OPEN = 0, PARSE_MODE_CREATE, PARSE_MODE_LIST, PARSE_MODE_GET_ENTRY, PARSE_MODE_DELETE } PARSE_MODE; typedef enum { PARSE_SUB_MODE_OPEN = 0, PARSE_SUB_MODE_NAME, PARSE_SUB_MODE_ALIAS, PARSE_SUB_MODE_CERT_PATH, PARSE_SUB_MODE_KEY_PATH, PARSE_SUB_MODE_SERVER, PARSE_SUB_MODE_UPN } PARSE_SUB_MODE; PARSE_MODE mode = PARSE_MODE_OPEN; PARSE_SUB_MODE submode = PARSE_SUB_MODE_OPEN; PVMAFD_SERVER pServer = NULL; if (!argc) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); } for (; idx < argc; idx++) { PSTR pszArg = argv[idx]; switch (mode) { case PARSE_MODE_OPEN: if (!strcmp(pszArg, "create")) { command = VECS_COMMAND_ENTRY_CREATE; mode = PARSE_MODE_CREATE; } else if (!strcmp(pszArg, "list")) { command = VECS_COMMAND_ENTRY_LIST; mode = PARSE_MODE_LIST; } else if (!strcmp(pszArg, "delete")) { command = VECS_COMMAND_ENTRY_DELETE; mode = PARSE_MODE_DELETE; } else if (!strcmp(pszArg, "getcert")) { command = VECS_COMMAND_ENTRY_GETCERT; mode = PARSE_MODE_GET_ENTRY; } else if (!strcmp(pszArg, "getkey")) { command = VECS_COMMAND_ENTRY_GETKEY; mode = PARSE_MODE_GET_ENTRY; } else { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); } break; case PARSE_MODE_CREATE: switch (submode) { case PARSE_SUB_MODE_OPEN: if (!strcmp(pszArg, "--store")) { submode = PARSE_SUB_MODE_NAME; } else if (!strcmp(pszArg, "--alias")) { submode = PARSE_SUB_MODE_ALIAS; } else if (!strcmp(pszArg, "--cert")) { submode = PARSE_SUB_MODE_CERT_PATH; } else if (!strcmp(pszArg, "--key")) { submode = PARSE_SUB_MODE_KEY_PATH; } else if (!strcmp(pszArg, "--server")) { submode = PARSE_SUB_MODE_SERVER; } else if (!strcmp(pszArg, "--upn")) { submode = PARSE_SUB_MODE_UPN; } else { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR (dwError); } break; case PARSE_SUB_MODE_NAME: if (!pszStoreName) { pszStoreName = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_ALIAS: if (!pszAlias) { pszAlias = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_CERT_PATH: if (!pszCertFilePath) { pszCertFilePath = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_KEY_PATH: if (!pszKeyFilePath) { pszKeyFilePath = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_SERVER: if (!pszServerName) { pszServerName = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_UPN: if (!pszUPN) { pszUPN = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; default: dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR (dwError); break; } break; case PARSE_MODE_LIST: switch (submode) { case PARSE_SUB_MODE_OPEN: if (!strcmp(pszArg, "--store")) { submode = PARSE_SUB_MODE_NAME; } else if (!strcmp(pszArg, "--text")) { dwFormatAsText = 1; submode = PARSE_SUB_MODE_OPEN; } else if (!strcmp(pszArg, "--aliases")) { dwAliasesOnly = 1; submode = PARSE_SUB_MODE_OPEN; } else if (!strcmp(pszArg, "--server")) { submode = PARSE_SUB_MODE_SERVER; } else if (!strcmp(pszArg, "--upn")) { submode = PARSE_SUB_MODE_UPN; } else { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); } break; case PARSE_SUB_MODE_NAME: if (!pszStoreName) { pszStoreName = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_SERVER: if (!pszServerName) { pszServerName = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_UPN: if (!pszUPN) { pszUPN = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; default: dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); break; } break; case PARSE_MODE_GET_ENTRY: switch (submode) { case PARSE_SUB_MODE_OPEN: if (!strcmp(pszArg, "--store")) { submode = PARSE_SUB_MODE_NAME; } else if(!strcmp(pszArg, "--alias")) { submode = PARSE_SUB_MODE_ALIAS; } else if(!strcmp(pszArg, "--output")) { submode = PARSE_SUB_MODE_CERT_PATH; } else if(!strcmp(pszArg, "--text")) { submode = PARSE_SUB_MODE_OPEN; dwFormatAsText = 1; } else if (!strcmp(pszArg, "--server")) { submode = PARSE_SUB_MODE_SERVER; } else if (!strcmp(pszArg, "--upn")) { submode = PARSE_SUB_MODE_UPN; } else { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR (dwError); } break; case PARSE_SUB_MODE_NAME: if (!pszStoreName) { pszStoreName = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_ALIAS: if (!pszAlias) { pszAlias = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_CERT_PATH: if (!pszOutputFilePath) { pszOutputFilePath = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_SERVER: if (!pszServerName) { pszServerName = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_UPN: if (!pszUPN) { pszUPN = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; default: dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); } break; case PARSE_MODE_DELETE: switch (submode) { case PARSE_SUB_MODE_OPEN: if (!strcmp(pszArg, "--store")) { submode = PARSE_SUB_MODE_NAME; } else if (!strcmp(pszArg, "--alias")) { submode = PARSE_SUB_MODE_ALIAS; } else if (!strcmp(pszArg, "-y")) { dwForceDelete = 1; submode = PARSE_SUB_MODE_OPEN; } else if (!strcmp(pszArg, "--server")) { submode = PARSE_SUB_MODE_SERVER; } else if (!strcmp(pszArg, "--upn")) { submode = PARSE_SUB_MODE_UPN; } else { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR (dwError); } break; case PARSE_SUB_MODE_NAME: if (!pszStoreName) { pszStoreName = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_ALIAS: if (!pszAlias) { pszAlias = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_SERVER: if (!pszServerName) { pszServerName = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_UPN: if (!pszUPN) { pszUPN = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; default: dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR (dwError); break; } break; } } if (submode != PARSE_SUB_MODE_OPEN) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR (dwError); } if (IsNullOrEmptyString(pszServerName) ^ IsNullOrEmptyString(pszUPN) ) { dwError = ERROR_INVALID_STATE; BAIL_ON_VECS_CLI_ERROR ( dwError, "Error: You have to provide both server and upn \n" ); } if (!IsNullOrEmptyString(pszServerName)) { fprintf ( stdout, "Enter password:\t" ); dwError = GetPassword(&pszLotusPassword); BAIL_ON_VECS_CLI_ERROR( dwError, "Failed to get password from user \n" ); fprintf (stdout, "\n"); } dwError = VmAfdOpenServerA( pszServerName, pszUPN, pszLotusPassword, &pServer); BAIL_ON_VECS_CLI_ERROR ( dwError, "Failed to establish connection to remote server \n" ); switch (command) { case VECS_COMMAND_ENTRY_CREATE: dwError = VecsCliAddEntryA( pServer, pszStoreName, pszPassword, pszAlias, pszCertFilePath, pszKeyFilePath ); break; case VECS_COMMAND_ENTRY_LIST: dwError = VecsCliListEntriesA( pServer, pszStoreName, pszPassword, dwFormatAsText, dwAliasesOnly ); break; case VECS_COMMAND_ENTRY_GETCERT: dwError = VecsCliGetCertificateA( pServer, pszStoreName, pszPassword, pszAlias, pszOutputFilePath, dwFormatAsText ); break; case VECS_COMMAND_ENTRY_GETKEY: dwError = VecsCliGetKeyA( pServer, pszStoreName, pszPassword, pszAlias, pszOutputFilePath, dwFormatAsText ); break; case VECS_COMMAND_ENTRY_DELETE: if (!dwForceDelete) { char input = 0; fprintf (stdout, "Warning: This operation will delete entry [%s] from store [%s]\n" "Do you wish to continue? Y/N [N] \n", pszAlias, pszStoreName ); scanf ( "%c", &input ); if (input == 'Y' || input == 'y') { dwForceDelete = 1; } } if (dwForceDelete) { dwError = VecsCliDeleteEntryA( pServer, pszStoreName, pszPassword, pszAlias ); } break; default: dwError = ERROR_INVALID_STATE; break; } BAIL_ON_VMAFD_ERROR(dwError); cleanup: VMAFD_SAFE_FREE_STRINGA(pszLotusPassword); if (pServer) { VmAfdCloseServer(pServer); } return dwError; error: goto cleanup; }
static DWORD VecsCliExecStoreRequest( int argc, char* argv[] ) { DWORD dwError = 0; PSTR pszStoreName = NULL; PSTR pszPassword = NULL; PSTR pszUserName = NULL; PSTR pszServerName = NULL; PSTR pszUPN = NULL; PSTR pszLotusPassword = NULL; DWORD idx = 0; DWORD dwForceDelete = 0; DWORD dwAccessMask = 0; VECS_COMMAND command = VECS_COMMAND_UNKNOWN; VECS_PERMISSION_MODE permMode = VECS_PERMISSION_MODE_UNKNOWN; typedef enum { PARSE_MODE_OPEN = 0, PARSE_MODE_CREATE, PARSE_MODE_DELETE, PARSE_MODE_LIST, PARSE_MODE_PERMISSIONS, PARSE_MODE_GET_PERMISSIONS } PARSE_MODE; typedef enum { PARSE_SUB_MODE_OPEN = 0, PARSE_SUB_MODE_NAME, PARSE_SUB_MODE_PASSWORD, PARSE_SUB_MODE_USER, PARSE_SUB_MODE_MASK, PARSE_SUB_MODE_SERVER, PARSE_SUB_MODE_UPN } PARSE_SUB_MODE; PARSE_MODE mode = PARSE_MODE_OPEN; PARSE_SUB_MODE submode = PARSE_SUB_MODE_OPEN; PVMAFD_SERVER pServer = NULL; if (!argc) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); } for (; idx < argc; idx++) { PSTR pszArg = argv[idx]; switch (mode) { case PARSE_MODE_OPEN: if (!strcmp(pszArg, "create")) { command = VECS_COMMAND_STORE_CREATE; mode = PARSE_MODE_CREATE; } else if (!strcmp(pszArg, "list")) { command = VECS_COMMAND_STORE_LIST; mode = PARSE_MODE_LIST; } else if (!strcmp(pszArg, "delete")) { command = VECS_COMMAND_STORE_DELETE; mode = PARSE_MODE_DELETE; } else if (!strcmp(pszArg, "permission")) { command = VECS_COMMAND_STORE_PERMISSION; mode = PARSE_MODE_PERMISSIONS; } else if (!strcmp(pszArg, "get-permissions")) { command = VECS_COMMAND_STORE_GET_PERMISSIONS; mode = PARSE_MODE_GET_PERMISSIONS; } else { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); } break; case PARSE_MODE_CREATE: switch (submode) { case PARSE_SUB_MODE_OPEN: if (!strcmp(pszArg, "--name")) { submode = PARSE_SUB_MODE_NAME; } else if (!strcmp(pszArg, "--server")) { submode = PARSE_SUB_MODE_SERVER; } else if (!strcmp(pszArg, "--upn")) { submode = PARSE_SUB_MODE_UPN; } else { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); } break; case PARSE_SUB_MODE_NAME: pszStoreName = pszArg; submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_SERVER: pszServerName = pszArg; submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_UPN: pszUPN = pszArg; submode = PARSE_SUB_MODE_OPEN; break; default: dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR (dwError); break; } break; case PARSE_MODE_DELETE: switch (submode) { case PARSE_SUB_MODE_OPEN: if (!strcmp(pszArg, "--name")) { submode = PARSE_SUB_MODE_NAME; } else if (!strcmp(pszArg, "-y")) { dwForceDelete = 1; submode = PARSE_SUB_MODE_OPEN; } else if (!strcmp(pszArg, "--server")) { submode = PARSE_SUB_MODE_SERVER; } else if (!strcmp(pszArg, "--upn")) { submode = PARSE_SUB_MODE_UPN; } else { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); } break; case PARSE_SUB_MODE_NAME: pszStoreName = pszArg; submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_SERVER: pszServerName = pszArg; submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_UPN: pszUPN = pszArg; submode = PARSE_SUB_MODE_OPEN; break; default: dwError = ERROR_INVALID_STATE; BAIL_ON_VMAFD_ERROR(dwError); break; } break; case PARSE_MODE_LIST: switch(submode) { case PARSE_SUB_MODE_OPEN: if (!strcmp(pszArg, "--server")) { submode = PARSE_SUB_MODE_SERVER; } else if (!strcmp(pszArg, "--upn")) { submode = PARSE_SUB_MODE_UPN; } else { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR (dwError); } break; case PARSE_SUB_MODE_SERVER: if (!pszServerName) { pszServerName = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_UPN: if (!pszUPN) { pszUPN = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; default: dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR (dwError); break; } break; case PARSE_MODE_PERMISSIONS: switch (submode) { case PARSE_SUB_MODE_OPEN: if (!strcmp(pszArg, "--name")) { submode = PARSE_SUB_MODE_NAME; } else if (!strcmp(pszArg, "--grant")) { if (permMode != VECS_PERMISSION_MODE_UNKNOWN) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR (dwError); } permMode = VECS_PERMISSION_MODE_GRANT; submode = PARSE_SUB_MODE_MASK; } else if (!strcmp(pszArg, "--revoke")) { if (permMode != VECS_PERMISSION_MODE_UNKNOWN) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR (dwError); } permMode = VECS_PERMISSION_MODE_REVOKE; submode = PARSE_SUB_MODE_MASK; } else if (!strcmp (pszArg, "--user")) { submode = PARSE_SUB_MODE_USER; } else { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR (dwError); } break; case PARSE_SUB_MODE_NAME: if (!pszStoreName) { pszStoreName = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_MASK: if (!strcmp(pszArg, "read")) { dwAccessMask = dwAccessMask | READ_STORE; } else if (!strcmp (pszArg, "write")) { dwAccessMask = dwAccessMask | WRITE_STORE; } else { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR (dwError); } submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_USER: if (!pszUserName) { pszUserName = pszArg; } submode = PARSE_SUB_MODE_OPEN; break; default: dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR (dwError); break; } break; case PARSE_MODE_GET_PERMISSIONS: switch (submode) { case PARSE_SUB_MODE_OPEN: if (!strcmp(pszArg, "--name")) { submode = PARSE_SUB_MODE_NAME; } else if (!strcmp(pszArg, "--server")) { submode = PARSE_SUB_MODE_SERVER; } else if (!strcmp(pszArg, "--upn")) { submode = PARSE_SUB_MODE_UPN; } else { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); } break; case PARSE_SUB_MODE_NAME: pszStoreName = pszArg; submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_SERVER: pszServerName = pszArg; submode = PARSE_SUB_MODE_OPEN; break; case PARSE_SUB_MODE_UPN: pszUPN = pszArg; submode = PARSE_SUB_MODE_OPEN; break; default: dwError = ERROR_INVALID_STATE; BAIL_ON_VMAFD_ERROR(dwError); break; } break; } } if (IsNullOrEmptyString(pszServerName) ^ IsNullOrEmptyString(pszUPN) ) { dwError = ERROR_INVALID_STATE; BAIL_ON_VECS_CLI_ERROR ( dwError, "Error: You have to provide both server and upn \n" ); } if (!IsNullOrEmptyString(pszServerName)) { fprintf ( stdout, "Enter password:\t" ); dwError = GetPassword(&pszLotusPassword); BAIL_ON_VECS_CLI_ERROR( dwError, "Failed to get password from user \n" ); fprintf (stdout, "\n"); } dwError = VmAfdOpenServerA( pszServerName, pszUPN, pszLotusPassword, &pServer); BAIL_ON_VECS_CLI_ERROR( dwError, "Failed to establish connection to remote server \n" ); switch (command) { case VECS_COMMAND_STORE_CREATE: dwError = VecsCliCreateStoreA(pServer, pszStoreName); break; case VECS_COMMAND_STORE_LIST: dwError = VecsCliListStoreA(pServer); break; case VECS_COMMAND_STORE_DELETE: if (!dwForceDelete) { char input = 0; fprintf (stdout, "Warning: This operation will delete store [%s]\n" "Do you wish to continue? Y/N [N] \n", pszStoreName ); scanf ( "%c", &input ); if (input == 'Y' || input == 'y') { dwForceDelete = 1; } } if (dwForceDelete) { dwError = VecsCliDeleteStoreA(pServer, pszStoreName, pszPassword); } break; case VECS_COMMAND_STORE_PERMISSION: dwError = VecsCliSetPermissionA ( pszStoreName, pszUserName, permMode, dwAccessMask ); break; case VECS_COMMAND_STORE_GET_PERMISSIONS: dwError = VecsCliGetPermissionsA ( pServer, pszStoreName ); break; default: dwError = ERROR_INVALID_STATE; break; } BAIL_ON_VMAFD_ERROR(dwError); cleanup: VMAFD_SAFE_FREE_STRINGA(pszLotusPassword); if (pServer) { VmAfdCloseServer(pServer); } return dwError; error: goto cleanup; }