⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vsclientpolicyxmllib.c

📁 IBE是一种非对称密码技术
💻 C
📖 第 1 页 / 共 3 页
字号:
/* Copyright 2003-2006, Voltage Security, all rights reserved.
*/

#include <string.h>
#include "VSClientPolicyXMLLib.h"
#include "Utility.h"

#include "VSBuildFlags.h"
#include "icXmlParser.h"
#include "icstringutils.h"
#include "vibe.h"
#include "environment.h"
#include "base.h"
#include "libctx.h"
#include "volti18n.h"

#if VOLT_OS == VOLT_WINDOWS_32
#include <windows.h>
#include <tchar.h>
#endif


#define MIN_SUPPORTED_VERSION    1
#define MAX_SUPPORTED_VERSION    2

typedef struct
{
  char    *clientName;
  char    **keys;
  char    **values;
  int      count;
} clientSettingsT;

struct vs_client_policy_s
{
  int        version;
  int        localPolicyLocked;
  char      **localDomains;
  int        localDomainsCount;
  int        defaultDistrict;
  char      **userWhitelist;
  int        userWhitelistCount;
  char      **provisionedList;
  int        provisionedListCount;
  char      *provisionedDistrict;
  char      *fallthroughDistrict;
  char      *messageHeaderInternal;
  char      *messageHeaderExternal;
  char      *messageFooter;
  int        parameterRefreshRateNegative;
  int        parameterRefreshRatePositive;
  char      **parameterAggressiveDistricts;
  int        parameterAggressiveDistrictsCount;
  int        strictParameterChecking;
  char      **trustedDistricts;
  int        trustedDistrictsCount;
  int        passwordCaching;
  int        decryptionMode;
  int        sendUniversalReader;
  char      *zfrTemplate;
  char      *zdm2Template;
  char      *htmlMessageBodyTemplate;
  char      *encryptRules;
  int        keyPurgeTime;
  clientSettingsT  **clientSettings;
  int        clientSettingsCount;
  char      *defaultZDM;

#if VOLT_OS == VOLT_WINDOWS_32
  HMODULE      hResources;
#endif
};


#define MESSAGE_HEADER_INTERNAL_DEFAULT \
      "This message was sent using the Voltage SecureMail evaluation system.\r\n" \
      "Learn how to secure your business communication at http://www.voltage.com.\r\n"
#define MESSAGE_HEADER_EXTERNAL_DEFAULT \
      "This message was sent securely using Voltage SecureMail.  Please contact your local administrator or the " \
      "sender to learn how to view this message."
#define MESSAGE_FOOTER_DEFAULT \
      "This message was sent using Voltage SecureMail.\r\n"

#define MAX_MESSAGE_STRING_SIZE  512

#if VOLT_OS == VOLT_WINDOWS_32
#define MESSAGE_HEADER_INTERNAL_DEFAULT_RESOURCE          10003
#define MESSAGE_HEADER_EXTERNAL_DEFAULT_RESOURCE          10001
#define MESSAGE_FOOTER_DEFAULT_RESOURCE                10002
#endif



#define LOCAL_POLICY_LOCKED_DEFAULT          0
#define DEFAULT_DISTRICT_DEFAULT          2
#define PARAMETER_REFRESH_RATE_NEGATIVE_DEFAULT    86400
#define PARAMETER_REFRESH_RATE_POSITIVE_DEFAULT    604800
#define PARAMETER_AGGRESSIVE_DISTRICTS_DEFAULT    BUILD_HOMEDOMAIN
#define STRICT_PARAMETER_CHECKING_DEFAULT      0
#define TRUST_THIRD_PARTY_SIGS_DEFAULT        0
#define PASSWORD_CACHING_DEFAULT          0
#define DECRYPTION_MODE_DEFAULT            0    // auto-decrypt
#define SEND_UNIVERSAL_READER_DEFAULT        BUILD_ZDRDEFAULT
#define FALLTHROUGH_DISTRICT_DEFAULT        BUILD_HOMEDOMAIN
#define TRUSTED_DISTRICTS_DEFAULT          BUILD_TRUSTEDDISTRICTS
#define KEY_PURGE_TIME_DEFAULT            -1

#define ZFR_TEMPLATE_DEFAULT            BUILD_ZDRTEMPLATE

vsClientPolicyT *ParseClientPolicy (
   char *xml,
   VoltLibCtx *libCtx
   );
int NewClientPolicy (
   vsClientPolicyT **policy,
   VoltLibCtx *libCtx
   );
void FreeClientPolicy (
   vsClientPolicyT *policy,
   VoltLibCtx *libCtx
   );

clientSettingsT *NewClientSettings (
   VoltLibCtx *libCtx
   );
void FreeClientSettings (
   clientSettingsT *settings,
   VoltLibCtx *libCtx
   );
clientSettingsT *ParseClientSettings (
   icXmlNode *node,
   VoltLibCtx *libCtx
   );

#if VOLT_OS == VOLT_WINDOWS_32
char *GetHeaderExternalDefault (
   vsClientPolicyT *policy,
   VoltLibCtx *libCtx
   );
char *GetHeaderInternalDefault (
   vsClientPolicyT *policy,
   VoltLibCtx *libCtx
   );
char *GetFooterDefault (
   vsClientPolicyT *policy,
   VoltLibCtx *libCtx
   );
HRESULT convertCharSet (
   UINT nCharSet1,
   LPSTR szCharSet1,
   UINT nCharSet2,
   LPSTR *szCharSet2,
   VoltLibCtx *libCtx
   );
#endif

vsClientPolicyT *vs_cp_new (
   char *xml,
   VoltLibCtx *libCtx
   )
{
  vsClientPolicyT *ret = (vsClientPolicyT *) 0;
  int errorcode = 0;

  if (xml == (void *) 0)
  {
    errorcode = NewClientPolicy(&ret, libCtx);
    return ret;
  }
  else
  {
    ret = ParseClientPolicy(xml, libCtx);
    if (ret != (void *) 0)
      return ret;
    else
    {
      errorcode = NewClientPolicy(&ret, libCtx);
      return ret;
    }
  }

}

void vs_cp_free (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  FreeClientPolicy(cp, libCtx);
}


int vs_cp_get_version (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  return cp->version;
}

int vs_cp_is_local_policy_locked (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  return cp->localPolicyLocked;
}

char *vs_cp_get_primary_domain (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  int status;
  char *retVal = (char *)0;

  if (cp->localDomainsCount == 0)
    return ((char *)0);

  status = Z2Strdup (cp->localDomains[0], &retVal);
  return (retVal);
}

int vs_cp_is_local_domain (
   vsClientPolicyT *cp,
   char *domain,
   VoltLibCtx *libCtx
   )
{
  int i;

  for (i = 0; i < cp->localDomainsCount; i++)
    if (Z2Strcmp(cp->localDomains[i], domain) == 0)
      return 1;

  return 0;
}

int vs_cp_get_default_district (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  return cp->defaultDistrict;
}

int vs_cp_is_user_on_whitelist (
   vsClientPolicyT *cp,
   char *user,
   VoltLibCtx *libCtx
   )
{
  int i;

  for (i = 0; i < cp->userWhitelistCount; i++)
    if (icXstricmpsafe (cp->userWhitelist[i], user, libCtx))
      return 1;

  return 0;
}

int vs_cp_is_user_provisioned (
   vsClientPolicyT *cp,
   char *user,
   VoltLibCtx *libCtx
   )
{
  int i;

  for (i = 0; i < cp->provisionedListCount; i++)
    if (icXstricmpsafe (cp->provisionedList[i], user, libCtx))
      return 1;

  return 0;
}

char *vs_cp_get_provisioned_district (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  int status;
  char *retVal = (char *)0;

  if (cp->provisionedDistrict == (void *) 0)
    return ((char *)0);

  status = Z2Strdup (cp->provisionedDistrict, &retVal);
  return (retVal);
}

char *vs_cp_get_fallthrough_district (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  int status;
  char *retVal = (char *)0;

  if (cp->fallthroughDistrict == (void *)0)
    status = Z2Strdup (FALLTHROUGH_DISTRICT_DEFAULT, &retVal);
  else
    status = Z2Strdup (cp->fallthroughDistrict, &retVal);

  return (retVal);
}

char *vs_cp_get_message_header_internal (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  int status;
  char *retVal = (char *)0;

  if (cp->messageHeaderInternal == (void *)0)
  {
#if VOLT_OS == VOLT_WINDOWS_32
    retVal = GetHeaderInternalDefault (cp, libCtx);
#else
    status = Z2Strdup (MESSAGE_HEADER_INTERNAL_DEFAULT, &retVal);
#endif
    return (retVal);
  }

  status = Z2Strdup (cp->messageHeaderInternal, &retVal);
  return (retVal);
}

char *vs_cp_get_message_header_external (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  int status;
  char *retVal = (char *)0;

  if (cp->messageHeaderExternal == (void *) 0)
  {
#if VOLT_OS == VOLT_WINDOWS_32
    retVal = GetHeaderExternalDefault (cp, libCtx);
#else
    status = Z2Strdup (MESSAGE_HEADER_EXTERNAL_DEFAULT, &retVal);
#endif
    return (retVal);
  }

  status = Z2Strdup (cp->messageHeaderExternal, &retVal);
  return (retVal);
}

char *vs_cp_get_message_footer (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  int status;
  char *retVal = (char *)0;

  if (cp->messageFooter == (void *) 0)
  {
#if VOLT_OS == VOLT_WINDOWS_32
    retVal = GetFooterDefault (cp, libCtx);
#else
    status = Z2Strdup (MESSAGE_FOOTER_DEFAULT, &retVal);
#endif
    return (retVal);
  }

  status = Z2Strdup (cp->messageFooter, &retVal);
  return (retVal);
}

int vs_cp_get_parameter_refresh_rate_negative (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  return cp->parameterRefreshRateNegative;
}

int vs_cp_get_parameter_refresh_rate_positive (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  return cp->parameterRefreshRatePositive;
}

int vs_cp_is_parameter_retrieval_aggressive (
   vsClientPolicyT *cp,
   char *district,
   VoltLibCtx *libCtx
   )
{
  int i, found, tempAggressiveCount;
  char **tempAggressiveList;
  
  if (cp->parameterAggressiveDistricts == (void *) 0)
  {
    makeStringArray(&tempAggressiveList, &tempAggressiveCount, PARAMETER_AGGRESSIVE_DISTRICTS_DEFAULT, libCtx);
  }
  else
  {
    tempAggressiveList = cp->parameterAggressiveDistricts;
    tempAggressiveCount = cp->parameterAggressiveDistrictsCount;
  }

  found = 0;

  for (i = 0; i < tempAggressiveCount; i++)
  {
    if (icXstricmpsafe (tempAggressiveList[i], district, libCtx))
    {
      found = 1;
      break;
    }
  }

  if (cp->parameterAggressiveDistricts == (void *) 0)
    freeStringArray(tempAggressiveList, tempAggressiveCount, libCtx);

  return found;
}
  
int vs_cp_is_parameter_checking_strict (
   vsClientPolicyT *cp,
   VoltLibCtx *libCtx
   )
{
  return cp->strictParameterChecking;
}

int vs_cp_is_trusted_district (
   vsClientPolicyT *cp,
   char *district,
   VoltLibCtx *libCtx
   )
{
  int i, found, tempTrustedDistrictsCount;
  char **tempTrustedDistricts;
  
  if (cp->trustedDistricts == (void *) 0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -