コード例 #1
0
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;
}
コード例 #2
0
ファイル: account.c プロジェクト: borland667/pbis
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;
}