DWORD ProcessSystemAccessRight( const DWORD Argc, PCSTR* Argv ) { DWORD err = ERROR_SUCCESS; DWORD i = 0; PCSTR pszArg = NULL; RPC_PARAMETERS Params = {0}; PRIVILEGE_COMMAND Command = PrivilegeDoNothing; PSTR pszAccountName = NULL; err = ProcessRpcParameters(Argc, Argv, &Params); BAIL_ON_LSA_ERROR(err); for (i = 0; i < Argc; i++) { pszArg = Argv[i]; if (((strcmp(pszArg, "-g") == 0) || (strcmp(pszArg, "--get") == 0)) && (i + 1 < Argc)) { pszArg = Argv[++i]; err = LwAllocateString(pszArg, &pszAccountName); BAIL_ON_LSA_ERROR(err); Command = SystemAccessRightGetAccount; } } switch (Command) { case SystemAccessRightGetAccount: err = ProcessGetAccountSystemAccessRights( &Params, pszAccountName); BAIL_ON_LSA_ERROR(err); break; default: ShowUsageSystemAccessRights(Argv[0]); break; } error: LW_SAFE_FREE_MEMORY(pszAccountName); return err; }
DWORD ProcessAccount( const DWORD Argc, PCSTR* Argv ) { DWORD err = ERROR_SUCCESS; DWORD i = 0; PCSTR pszArg = NULL; RPC_PARAMETERS Params = {0}; PRIVILEGE_COMMAND Command = PrivilegeDoNothing; PSTR userRightName = NULL; PSTR accountName = NULL; PSTR accountRightName = NULL; BOOLEAN removeAll = FALSE; err = ProcessRpcParameters(Argc, Argv, &Params); BAIL_ON_LSA_ERROR(err); for (i = 0; i < Argc; i++) { pszArg = Argv[i]; if (strcmp(pszArg, "--enum-accounts") == 0) { if (i + 1 < Argc) { pszArg = Argv[++i]; err = LwAllocateString(pszArg, &userRightName); BAIL_ON_LSA_ERROR(err); } Command = AccountEnumerate; } else if (((strcmp(pszArg, "-e") == 0) || (strcmp(pszArg, "--enum-account-rights") == 0)) && (i + 1 < Argc)) { pszArg = Argv[++i]; err = LwAllocateString(pszArg, &accountName); BAIL_ON_LSA_ERROR(err); Command = AccountEnumerateUserRights; } else if (((strcmp(pszArg, "-a") == 0) || (strcmp(pszArg, "--add") == 0)) && (i + 1 < Argc)) { pszArg = Argv[++i]; err = LwAllocateString(pszArg, &accountRightName); BAIL_ON_LSA_ERROR(err); Command = AccountAddAccountRights; } else if (((strcmp(pszArg, "-r") == 0) || (strcmp(pszArg, "--remove") == 0)) && (i + 1 < Argc)) { pszArg = Argv[++i]; err = LwAllocateString(pszArg, &accountRightName); BAIL_ON_LSA_ERROR(err); Command = AccountRemoveAccountRights; } else if (strcmp(pszArg, "--remove-all") == 0) { removeAll = TRUE; Command = AccountRemoveAccountRights; } else if (strcmp(pszArg, "--delete") == 0) { Command = AccountDelete; } else if (i + 1 == Argc) { LW_SAFE_FREE_MEMORY(accountName); pszArg = Argv[i]; err = LwAllocateString(pszArg, &accountName); BAIL_ON_LSA_ERROR(err); } } switch (Command) { case AccountEnumerate: err = ProcessEnumerateAccounts( &Params, userRightName); BAIL_ON_LSA_ERROR(err); break; case AccountEnumerateUserRights: err = ProcessEnumerateAccountUserRights( &Params, accountName); BAIL_ON_LSA_ERROR(err); break; case AccountAddAccountRights: err = ProcessAddRemoveAccountRights( &Params, TRUE, accountRightName, removeAll, accountName); BAIL_ON_LSA_ERROR(err); break; case AccountRemoveAccountRights: err = ProcessAddRemoveAccountRights( &Params, FALSE, accountRightName, removeAll, accountName); BAIL_ON_LSA_ERROR(err); break; case AccountDelete: err = ProcessDeleteAccount( &Params, accountName); BAIL_ON_LSA_ERROR(err); break; default: ShowUsageAccount(Argv[0]); break; } error: LW_SAFE_FREE_MEMORY(userRightName); LW_SAFE_FREE_MEMORY(accountName); LW_SAFE_FREE_MEMORY(accountRightName); return err; }