📄 vsclientpolicyxmllib.c
字号:
/* 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 + -