Mercurial > illumos > illumos-gate
annotate usr/src/lib/libkmsagent/common/KMSAgentLoadBalancer.cpp @ 12720:3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
6944296 Solaris needs a PKCS#11 provider to allow access to KMS keystore functionality
author | Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM> |
---|---|
date | Mon, 28 Jun 2010 16:04:11 -0700 |
parents | |
children |
rev | line source |
---|---|
12720
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1 /* |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
2 * CDDL HEADER START |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
3 * |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
4 * The contents of this file are subject to the terms of the |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
5 * Common Development and Distribution License (the "License"). |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
6 * You may not use this file except in compliance with the License. |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
7 * |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
9 * or http://www.opensolaris.org/os/licensing. |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
10 * See the License for the specific language governing permissions |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
11 * and limitations under the License. |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
12 * |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
13 * When distributing Covered Code, include this CDDL HEADER in each |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
15 * If applicable, add the following below this CDDL HEADER, with the |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
16 * fields enclosed by brackets "[]" replaced with your own identifying |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
17 * information: Portions Copyright [yyyy] [name of copyright owner] |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
18 * |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
19 * CDDL HEADER END |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
20 */ |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
21 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
22 /* |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
23 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
24 */ |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
25 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
26 /** |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
27 * \file KMSAgentLoadBalancer.cpp |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
28 */ |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
29 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
30 #ifdef WIN32 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
31 #define _WIN32_WINNT 0x0400 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
32 #include <windows.h> |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
33 #include <process.h> |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
34 #endif |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
35 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
36 #include <stdlib.h> |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
37 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
38 #include "KMS_AgentH.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
39 #include "KMSClientProfile.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
40 #include "KMSAgentSoapUtilities.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
41 #include "KMSAgentStringUtilities.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
42 #include "KMSClientProfileImpl.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
43 #include "KMSAgent.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
44 #include "KMSAuditLogger.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
45 #include "ApplianceParameters.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
46 #include "KMSAgentCryptoUtilities.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
47 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
48 #ifdef METAWARE |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
49 #include "debug.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
50 #include "sizet.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
51 typedef unsigned char uint8_t; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
52 typedef unsigned short uint16_t; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
53 typedef unsigned int uint32_t; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
54 typedef unsigned long long uint64_t; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
55 #endif |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
56 #include "KMSAgentAESKeyWrap.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
57 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
58 #ifdef METAWARE |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
59 #include "stdsoap2.h" /* makes fewer platform assumptions |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
60 than the standard stdsoap2.h */ |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
61 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
62 int time (char *); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
63 #include "literals.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
64 #else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
65 #include "stdsoap2.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
66 #endif |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
67 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
68 #include "AutoMutex.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
69 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
70 // real declaration of soap * |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
71 #include "KMSAgentDataUnitCache.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
72 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
73 #include "ClientSoapFaultCodes.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
74 #include "KMSAgentPKICommon.h" |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
75 #include "KMSAgentLoadBalancer.h" // needs to be after stdsoap2.h to use the |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
76 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
77 CAgentLoadBalancer::CAgentLoadBalancer (KMSClientProfile * const i_pProfile) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
78 : m_pProfile (i_pProfile), |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
79 m_iTransactionStartTimeInMilliseconds (0), |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
80 m_bFIPS (false), |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
81 m_iKWKEntryNum (0), |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
82 m_iLastAttemptedWhenNoneResponding (0) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
83 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
84 CAutoMutex oAutoMutex((K_MUTEX_HANDLE) m_pProfile->m_pLock); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
85 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
86 // initialize the aCluster, let it contain the default appliance |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
87 m_iClusterNum = 1; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
88 memset(&(m_aCluster[0]), 0, sizeof (KMSClusterEntry)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
89 strncpy(m_aCluster[0].m_wsApplianceNetworkAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
90 i_pProfile->m_wsApplianceAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
91 sizeof(m_aCluster[0].m_wsApplianceNetworkAddress)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
92 m_aCluster[0].m_wsApplianceNetworkAddress[sizeof(m_aCluster[0].m_wsApplianceNetworkAddress)-1] = '\0'; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
93 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
94 // This may not be known because the initial |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
95 // appliance's Alias is not yet entered. |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
96 strcpy(m_aCluster[0].m_wsApplianceAlias, ""); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
97 strcpy(m_sURL, ""); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
98 memset(m_aKWKEntries, 0, KMS_MAX_CLUSTER_NUM * sizeof(struct KWKEntry *)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
99 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
100 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
101 CAgentLoadBalancer::~CAgentLoadBalancer () |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
102 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
103 // free up KWK entries |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
104 for( int i=0; i < m_iKWKEntryNum && i < KMS_MAX_CLUSTER_NUM; i++) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
105 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
106 if (m_aKWKEntries[i] != NULL) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
107 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
108 delete m_aKWKEntries[i]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
109 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
110 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
111 return; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
112 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
113 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
114 char *CAgentLoadBalancer::GetHTTPSURL (int i_iIndex, int i_iPort) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
115 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
116 if (i_iIndex < 0 || i_iIndex >= m_iClusterNum) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
117 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
118 strcpy(m_sURL, ""); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
119 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
120 else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
121 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
122 K_snprintf(m_sURL, KMS_MAX_URL, "https://%s:%d", |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
123 m_aCluster[i_iIndex].m_wsApplianceNetworkAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
124 i_iPort); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
125 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
126 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
127 return m_sURL; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
128 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
129 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
130 char *CAgentLoadBalancer::GetHTTPURL (int i_iIndex, int i_iPort) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
131 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
132 if (i_iIndex < 0 || i_iIndex >= m_iClusterNum) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
133 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
134 strcpy(m_sURL, ""); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
135 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
136 else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
137 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
138 K_snprintf(m_sURL, KMS_MAX_URL, "http://%s:%d", |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
139 m_aCluster[i_iIndex].m_wsApplianceNetworkAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
140 i_iPort); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
141 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
142 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
143 return m_sURL; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
144 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
145 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
146 int CAgentLoadBalancer::Balance () |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
147 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
148 CAutoMutex oAutoMutex((K_MUTEX_HANDLE) m_pProfile->m_pLock); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
149 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
150 int i; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
151 unsigned int iSelected = 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
152 unsigned int iSelected2 = 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
153 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
154 // clear the failover attempts |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
155 m_pProfile->m_iFailoverAttempts = 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
156 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
157 // This assumes Balance()/BalanceBy...() are called at the top of |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
158 // each Agent Library transaction |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
159 // m_iTransactionStartTimeInMilliseconds is used to determine if |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
160 // enough time remains |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
161 // (vs. KMSClientProfile::m_iTransactionTimeout) to retry a |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
162 // request if there was a Server Busy error. |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
163 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
164 m_iTransactionStartTimeInMilliseconds = K_GetTickCount(); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
165 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
166 // if not enabling load balancing, return the default appliance & if |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
167 // its FIPS compatible when running in FIPS_MODE |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
168 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
169 if (m_pProfile->m_iClusterDiscoveryFrequency == 0) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
170 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
171 if (m_bFIPS && !FIPScompatibleKMA(m_aCluster[0].m_sKMAVersion)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
172 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
173 return NO_FIPS_KMA_AVAILABLE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
174 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
175 return 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
176 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
177 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
178 int iCurrentTime = K_GetTickCount() / 1000; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
179 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
180 // if it is the first time or time to get cluster information |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
181 if ((!m_pProfile->m_bIsClusterDiscoveryCalled) || |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
182 ((iCurrentTime - m_pProfile->m_iLastClusterDiscoveryTime) > |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
183 m_pProfile->m_iClusterDiscoveryFrequency)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
184 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
185 if (!KMSClient_GetClusterInformation(m_pProfile, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
186 m_pProfile->m_wsEntitySiteID, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
187 sizeof (m_pProfile->m_wsEntitySiteID), |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
188 &(m_pProfile->m_iClusterNum), |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
189 m_pProfile->m_aCluster, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
190 KMS_MAX_CLUSTER_NUM)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
191 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
192 // if failed due to some error, return default one |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
193 // KMSClient_GetClusterInformation logs |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
194 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
195 return 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
196 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
197 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
198 m_pProfile->m_bIsClusterDiscoveryCalled = true; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
199 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
200 // Reset the transaction start time to not include the time spent |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
201 // calling KMSClient_GetClusterInformation. |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
202 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
203 m_iTransactionStartTimeInMilliseconds = K_GetTickCount(); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
204 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
205 // reset this index since cluster size may have changed |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
206 m_iLastAttemptedWhenNoneResponding = 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
207 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
208 // TODO: Adjust timeouts to guarentee a response to the Agent |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
209 // Library called in m_iTransactionTimeout seconds? This means |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
210 // not adjusting m_iTransactionStartTimeInMilliseconds, but also |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
211 // reducing socket timeouts for subsequent calls. |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
212 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
213 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
214 // sort the cluster array by Load |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
215 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
216 KMSClient_SortClusterArray(m_pProfile); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
217 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
218 // copy all Appliances to this object |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
219 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
220 for (i = 0; i < m_pProfile->m_iClusterNum; i++) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
221 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
222 m_aCluster[i] = m_pProfile->m_aCluster[i]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
223 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
224 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
225 m_iClusterNum = m_pProfile->m_iClusterNum; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
226 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
227 int iCandidateAppliances = 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
228 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
229 // the initial set of candidates for load balancing are all enabled, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
230 // responding and unlocked KMAs (assumes they are at the top of the sort |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
231 // order) & FIPS compatible if we're in that mode |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
232 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
233 for (i = 0; i < m_iClusterNum; i++) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
234 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
235 if ((m_aCluster[i].m_iResponding == TRUE) && |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
236 (m_aCluster[i].m_iEnabled == TRUE ) && |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
237 (m_aCluster[i].m_iKMALocked == FALSE)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
238 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
239 iCandidateAppliances++; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
240 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
241 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
242 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
243 // check if there are any enabled and responding Appliances in the |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
244 // same site as this Agent, and if so make those the candidates |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
245 // (assumes they are at the top of the sort order) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
246 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
247 int iCandidateAppliancesInSameSite = 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
248 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
249 if (strlen(m_pProfile->m_wsEntitySiteID) > 0) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
250 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
251 for (i = 0; i < iCandidateAppliances; i++) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
252 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
253 if (strncmp(m_aCluster[i].m_wsApplianceSiteID, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
254 m_pProfile->m_wsEntitySiteID, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
255 sizeof(m_aCluster[i].m_wsApplianceSiteID)) == 0) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
256 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
257 iCandidateAppliancesInSameSite++; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
258 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
259 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
260 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
261 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
262 // reduce the candidate set to just KMAs within the site |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
263 if (iCandidateAppliancesInSameSite > 0) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
264 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
265 iCandidateAppliances = iCandidateAppliancesInSameSite; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
266 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
267 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
268 // constrain the candidate set to just FIPS compatible KMAs |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
269 if (m_bFIPS) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
270 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
271 int iCandidateFIPSKMAs = 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
272 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
273 for (i = 0; i < iCandidateAppliances; i++) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
274 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
275 if ( FIPScompatibleKMA(m_aCluster[i].m_sKMAVersion )) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
276 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
277 iCandidateFIPSKMAs++; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
278 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
279 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
280 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
281 // select only from FIPS capable KMAs |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
282 iCandidateAppliances = iCandidateFIPSKMAs; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
283 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
284 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
285 // if there are no candidate Appliances, use the default Appliance unless |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
286 // we're in FIPS mode |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
287 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
288 if (!m_bFIPS && iCandidateAppliances <= 1) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
289 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
290 return 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
291 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
292 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
293 // FIPS mode |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
294 else if (iCandidateAppliances <= 0) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
295 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
296 return NO_FIPS_KMA_AVAILABLE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
297 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
298 else if (iCandidateAppliances == 1) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
299 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
300 return 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
301 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
302 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
303 // randomly select two candidate Appliances and select the one |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
304 // with the smaller load |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
305 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
306 // choose one random number between 0 -- iCandidateAppliances - 1 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
307 iSelected = rand() % iCandidateAppliances; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
308 iSelected2 = (iSelected + 1) % iCandidateAppliances; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
309 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
310 // select the one with the smaller load |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
311 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
312 if (m_aCluster[iSelected2].m_lLoad < m_aCluster[iSelected].m_lLoad) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
313 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
314 iSelected = iSelected2; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
315 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
316 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
317 return iSelected; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
318 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
319 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
320 int CAgentLoadBalancer::BalanceByDataUnitID ( |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
321 const unsigned char * const i_pDataUnitID, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
322 int i_iDataUnitIDMaxLen) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
323 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
324 FATAL_ASSERT(i_pDataUnitID); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
325 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
326 CAutoMutex oAutoMutex((K_MUTEX_HANDLE) m_pProfile->m_pLock); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
327 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
328 // clear the failover attempts |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
329 m_pProfile->m_iFailoverAttempts = 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
330 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
331 // This assumes Balance(), or BalanceBy...(), |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
332 // is called at the top of each Agent Library transaction |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
333 // m_iTransactionStartTimeInMilliseconds is used to determine if enough time remains |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
334 // (vs. KMSClientProfile::m_iTransactionTimeout) to retry a request if there was |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
335 // a Server Busy error. |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
336 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
337 m_iTransactionStartTimeInMilliseconds = K_GetTickCount(); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
338 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
339 // look in cache |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
340 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
341 CDataUnitCache *pDataUnitCache = (CDataUnitCache *) m_pProfile->m_pDataUnitCache; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
342 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
343 // if not enabling load balancing, return the default appliance & if |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
344 // its FIPS compatible when running in FIPS_MODE |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
345 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
346 if (m_pProfile->m_iClusterDiscoveryFrequency == 0) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
347 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
348 if (m_bFIPS && !FIPScompatibleKMA(m_aCluster[0].m_sKMAVersion)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
349 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
350 return NO_FIPS_KMA_AVAILABLE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
351 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
352 return 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
353 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
354 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
355 // if the Data Unit ID is in the server affinity cache, use that Appliance |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
356 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
357 utf8char wsApplianceNetworkAddress[KMS_MAX_NETWORK_ADDRESS]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
358 int iIndex = CLIENT_SIDE_ERROR; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
359 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
360 if (pDataUnitCache->GetApplianceByDataUnitID( |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
361 i_pDataUnitID, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
362 i_iDataUnitIDMaxLen, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
363 wsApplianceNetworkAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
364 sizeof(wsApplianceNetworkAddress))) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
365 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
366 iIndex = FindIndexByNetworkAddress(wsApplianceNetworkAddress); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
367 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
368 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
369 if (iIndex != CLIENT_SIDE_ERROR) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
370 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
371 if (m_bFIPS && !FIPScompatibleKMA(m_aCluster[iIndex].m_sKMAVersion)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
372 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
373 // in spite of caching we need to attempt an alternate KMA due |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
374 // to the FIPS mode setting |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
375 return Balance(); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
376 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
377 return iIndex; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
378 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
379 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
380 // normal balancing |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
381 return Balance(); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
382 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
383 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
384 int CAgentLoadBalancer::BalanceByDataUnitKeyID ( |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
385 const unsigned char * const i_pDataUnitKeyID, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
386 int i_iDataUnitKeyIDMaxLen) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
387 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
388 FATAL_ASSERT(i_pDataUnitKeyID); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
389 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
390 CAutoMutex oAutoMutex((K_MUTEX_HANDLE) m_pProfile->m_pLock); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
391 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
392 // clear the failover attempts |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
393 m_pProfile->m_iFailoverAttempts = 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
394 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
395 // This assumes Balance()/BalanceBy...() |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
396 // are called at the top of each Agent Library transaction |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
397 // m_iTransactionStartTimeInMilliseconds is used to determine if enough time remains |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
398 // (vs. KMSClientProfile::m_iTransactionTimeout) to retry a request if there was |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
399 // a Server Busy error. |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
400 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
401 m_iTransactionStartTimeInMilliseconds = K_GetTickCount(); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
402 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
403 // look in cache |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
404 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
405 CDataUnitCache *pDataUnitCache = (CDataUnitCache *) m_pProfile->m_pDataUnitCache; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
406 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
407 // if not enabling load balancing, return the default appliance & if |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
408 // its FIPS compatible when running in FIPS_MODE |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
409 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
410 if (m_pProfile->m_iClusterDiscoveryFrequency == 0) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
411 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
412 if (m_bFIPS && !FIPScompatibleKMA(m_aCluster[0].m_sKMAVersion)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
413 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
414 return NO_FIPS_KMA_AVAILABLE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
415 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
416 return 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
417 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
418 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
419 // if the Data Unit Key ID is in the server affinity cache, use that Appliance |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
420 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
421 utf8char sApplianceNetworkAddress[KMS_MAX_NETWORK_ADDRESS]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
422 int iIndex = CLIENT_SIDE_ERROR; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
423 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
424 if (pDataUnitCache->GetApplianceByDataUnitKeyID( |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
425 i_pDataUnitKeyID, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
426 i_iDataUnitKeyIDMaxLen, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
427 sApplianceNetworkAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
428 sizeof(sApplianceNetworkAddress))) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
429 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
430 iIndex = FindIndexByNetworkAddress(sApplianceNetworkAddress); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
431 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
432 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
433 if (iIndex != CLIENT_SIDE_ERROR) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
434 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
435 if (m_bFIPS && !FIPScompatibleKMA(m_aCluster[iIndex].m_sKMAVersion)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
436 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
437 // in spite of caching we need to attempt an alternate KMA due |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
438 // to the FIPS mode setting |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
439 return Balance(); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
440 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
441 return iIndex; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
442 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
443 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
444 // normal balancing |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
445 return Balance(); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
446 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
447 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
448 int CAgentLoadBalancer::FindIndexByNetworkAddress |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
449 (char * i_wsApplianceNetworkAddress) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
450 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
451 FATAL_ASSERT(i_wsApplianceNetworkAddress); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
452 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
453 for (int i = 0; i < m_iClusterNum; i++) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
454 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
455 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
456 if ((strncmp(m_aCluster[i].m_wsApplianceNetworkAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
457 i_wsApplianceNetworkAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
458 sizeof(m_aCluster[i].m_wsApplianceNetworkAddress)) == 0) && |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
459 m_aCluster[i].m_iEnabled == TRUE && |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
460 m_aCluster[i].m_iResponding == TRUE) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
461 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
462 return i; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
463 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
464 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
465 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
466 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
467 return CLIENT_SIDE_ERROR; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
468 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
469 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
470 char* CAgentLoadBalancer::GetApplianceNetworkAddress (int i_iIndex) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
471 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
472 if (i_iIndex < 0 || i_iIndex >= m_iClusterNum) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
473 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
474 return (char *)""; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
475 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
476 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
477 return m_aCluster[i_iIndex].m_wsApplianceNetworkAddress; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
478 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
479 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
480 bool CAgentLoadBalancer::FailOverLimit (void) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
481 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
482 if (m_pProfile->m_iFailoverLimit >= 0 && |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
483 m_pProfile->m_iFailoverAttempts > m_pProfile->m_iFailoverLimit) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
484 return true; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
485 else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
486 return false; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
487 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
488 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
489 int CAgentLoadBalancer::FailOver (int i_iFailedApplianceIndex, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
490 struct soap *i_pstSoap) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
491 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
492 FATAL_ASSERT(i_pstSoap); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
493 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
494 CAutoMutex oAutoMutex((K_MUTEX_HANDLE) m_pProfile->m_pLock); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
495 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
496 const char *strError = GET_SOAP_FAULTSTRING(i_pstSoap); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
497 int iSoapErrno = i_pstSoap->errnum; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
498 int iErrorCode = GET_FAULT_CODE(strError); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
499 int i; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
500 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
501 if ( m_bFIPS && |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
502 KMSClient_NoFIPSCompatibleKMAs(m_pProfile)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
503 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
504 return NO_FIPS_KMA_AVAILABLE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
505 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
506 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
507 m_pProfile->m_iFailoverAttempts++; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
508 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
509 /* |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
510 * if KWK is not registered, or mismatched, most likely KMA lost its key due to a service |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
511 * restart. Call RegisterKWK to re-register the KWK. |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
512 * If RegisterKWK fails proceed from here with new failover info |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
513 */ |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
514 if ( iErrorCode == CLIENT_ERROR_AGENT_KWK_NOT_REGISTERED || |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
515 iErrorCode == CLIENT_ERROR_AGENT_KWK_ID_MISMATCH ) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
516 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
517 LogError(m_pProfile, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
518 AGENT_LOADBALANCER_FAILOVER, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
519 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
520 m_aCluster[i_iFailedApplianceIndex].m_wsApplianceNetworkAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
521 "KWK not registered or ID mismatch - registering"); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
522 // delete the KWK entry since the KMA no longer has it |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
523 DeleteKWKEntry( GetKMAID(i_iFailedApplianceIndex)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
524 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
525 return i_iFailedApplianceIndex; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
526 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
527 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
528 bool bServerError = false; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
529 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
530 // if the request failed due to a Server Busy error, and if |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
531 // - transaction timeout has not been exceeded OR |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
532 // - failover attempts remain |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
533 // then failover |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
534 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
535 if (iErrorCode == CLIENT_ERROR_SERVER_BUSY && |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
536 (K_GetTickCount() < m_iTransactionStartTimeInMilliseconds + (m_pProfile->m_iTransactionTimeout * 1000) || |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
537 !CAgentLoadBalancer::FailOverLimit())) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
538 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
539 LogError(m_pProfile, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
540 AGENT_LOADBALANCER_FAILOVER, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
541 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
542 m_aCluster[i_iFailedApplianceIndex].m_wsApplianceNetworkAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
543 "Server Busy - failing over"); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
544 bServerError = true; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
545 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
546 else if (ServerError(strError,iSoapErrno)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
547 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
548 bServerError = true; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
549 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
550 else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
551 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
552 if (i_iFailedApplianceIndex == AES_KEY_WRAP_SETUP_ERROR) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
553 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
554 return AES_KEY_WRAP_SETUP_ERROR; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
555 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
556 else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
557 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
558 return CLIENT_SIDE_ERROR; // it is a client side problem, don't fail over |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
559 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
560 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
561 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
562 // disable the failed Appliance in the profile, and |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
563 // re-sort the cluster array, so transactions in other threads |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
564 // will not send requests to the same failed Appliance |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
565 #if defined(METAWARE) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
566 log_cond_printf(ECPT_LOG_AGENT, "CAgentLoadBalancer::Failover(): FailoverAttempts=%d\n", |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
567 m_pProfile->m_iFailoverAttempts); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
568 #endif |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
569 for (i = 0; i < m_pProfile->m_iClusterNum; i++) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
570 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
571 if (m_pProfile->m_aCluster[i].m_lApplianceID == |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
572 m_aCluster[i_iFailedApplianceIndex].m_lApplianceID) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
573 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
574 m_pProfile->m_aCluster[i].m_iResponding = FALSE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
575 break; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
576 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
577 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
578 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
579 KMSClient_SortClusterArray(m_pProfile); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
580 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
581 // mark the failed Appliance as not responding (unlike the case |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
582 // above which is conditional on bServerError, this marking is |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
583 // only local to this transaction; it must be done to ensure that |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
584 // this transaction does not cycle in its fail-over loop.) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
585 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
586 m_aCluster[i_iFailedApplianceIndex].m_iResponding = FALSE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
587 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
588 if (!CAgentLoadBalancer::FailOverLimit()) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
589 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
590 // now try to fail over to all other Appliances that are |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
591 // apparently enabled and responding |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
592 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
593 for (i = 0; i < m_iClusterNum; i++) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
594 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
595 if (m_aCluster[i].m_iEnabled == TRUE && |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
596 m_aCluster[i].m_iResponding == TRUE && |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
597 m_aCluster[i].m_iKMALocked == FALSE) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
598 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
599 Log(AGENT_LOADBALANCER_FAILOVER, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
600 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
601 m_aCluster[i].m_wsApplianceNetworkAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
602 "Failing over to this addr"); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
603 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
604 return i; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
605 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
606 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
607 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
608 // now retry KMAs previously reported as not responding |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
609 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
610 m_iLastAttemptedWhenNoneResponding++; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
611 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
612 if (m_iLastAttemptedWhenNoneResponding >= m_iClusterNum) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
613 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
614 m_iLastAttemptedWhenNoneResponding = m_iLastAttemptedWhenNoneResponding % m_iClusterNum; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
615 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
616 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
617 Log(AGENT_LOADBALANCER_FAILOVER, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
618 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
619 m_aCluster[m_iLastAttemptedWhenNoneResponding].m_wsApplianceNetworkAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
620 "Failing over to retry this addr"); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
621 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
622 return m_iLastAttemptedWhenNoneResponding; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
623 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
624 else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
625 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
626 Log(AGENT_LOADBALANCER_FAILOVER, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
627 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
628 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
629 "Failover limit reached"); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
630 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
631 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
632 return m_bFIPS ? NO_FIPS_KMA_AVAILABLE : NO_KMA_AVAILABLE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
633 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
634 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
635 void CAgentLoadBalancer::UpdateResponseStatus(int i_iIndex) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
636 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
637 bool bStatusChanged = false; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
638 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
639 CAutoMutex oAutoMutex((K_MUTEX_HANDLE) m_pProfile->m_pLock); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
640 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
641 // enable the responding Appliance in the profile, and |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
642 // re-sort the cluster array, so transactions in other threads |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
643 // will not send requests to the same failed Appliance |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
644 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
645 for (int i = 0; i < m_pProfile->m_iClusterNum; i++) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
646 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
647 if (m_pProfile->m_aCluster[i].m_lApplianceID == |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
648 m_aCluster[i_iIndex].m_lApplianceID) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
649 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
650 if (m_pProfile->m_aCluster[i].m_iResponding == FALSE) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
651 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
652 bStatusChanged = true; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
653 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
654 m_pProfile->m_aCluster[i].m_iResponding = TRUE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
655 break; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
656 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
657 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
658 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
659 // only resort if the responding status actually changed |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
660 if (bStatusChanged) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
661 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
662 KMSClient_SortClusterArray(m_pProfile); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
663 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
664 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
665 // mark the Appliance as now responding |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
666 m_aCluster[i_iIndex].m_iResponding = TRUE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
667 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
668 return; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
669 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
670 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
671 Long64 CAgentLoadBalancer::GetKMAID ( |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
672 int i_iIndex) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
673 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
674 if (i_iIndex < 0 || i_iIndex >= m_iClusterNum) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
675 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
676 return -1; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
677 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
678 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
679 return m_aCluster[i_iIndex].m_lApplianceID; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
680 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
681 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
682 CAgentLoadBalancer::KWKEntry *CAgentLoadBalancer::GetKWK ( |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
683 Long64 i_lKMAID) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
684 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
685 if (i_lKMAID == -1) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
686 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
687 return NULL; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
688 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
689 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
690 for (int i = 0; i < m_iKWKEntryNum && i < KMS_MAX_CLUSTER_NUM; i++) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
691 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
692 if (m_aKWKEntries[i] != NULL && |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
693 m_aKWKEntries[i]->m_lKMAID == i_lKMAID ) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
694 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
695 return m_aKWKEntries[i]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
696 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
697 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
698 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
699 return NULL; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
700 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
701 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
702 CAgentLoadBalancer::KWKEntry *CAgentLoadBalancer::CreateKWK ( |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
703 Long64 i_lKMAID, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
704 struct soap * const i_pstSoap, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
705 const char * const i_sURL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
706 bool * const o_pbClientAESKeyWrapSetupError) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
707 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
708 FATAL_ASSERT(i_pstSoap); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
709 FATAL_ASSERT(i_sURL); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
710 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
711 int bSuccess = FALSE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
712 KWKEntry *oKWKEntry = new KWKEntry; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
713 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
714 oKWKEntry->m_lKMAID = i_lKMAID; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
715 *o_pbClientAESKeyWrapSetupError = false; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
716 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
717 bSuccess = GetPseudorandomBytes(sizeof (oKWKEntry->m_acKWK), |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
718 oKWKEntry->m_acKWK); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
719 if (!bSuccess) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
720 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
721 Log(AUDIT_CLIENT_AGENT_CREATE_KWK_RNG_ERROR, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
722 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
723 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
724 "Error from RNG"); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
725 *o_pbClientAESKeyWrapSetupError = true; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
726 delete(oKWKEntry); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
727 return NULL; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
728 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
729 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
730 #if defined(DEBUG) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
731 char sHexKWK[2*KMS_MAX_KEY_SIZE+1]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
732 ConvertBinaryToUTF8HexString( sHexKWK, oKWKEntry->m_acKWK, sizeof (oKWKEntry->m_acKWK)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
733 #if defined(METAWARE) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
734 log_printf("CAgentLoadBalancer::CreateKWK(): KWK hex=%s\n", |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
735 sHexKWK); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
736 #else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
737 // printf("CAgentLoadBalancer::CreateKWK(): KWK hex=%s\n", |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
738 // sHexKWK); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
739 #endif |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
740 #endif |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
741 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
742 CPublicKey oPublicKEK; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
743 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
744 bSuccess = GetKWKWrappingKey(i_pstSoap, i_sURL, &oPublicKEK); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
745 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
746 if (!bSuccess) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
747 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
748 // GetKWKWrappingKey logs errors |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
749 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
750 if (!ServerError(GET_SOAP_FAULTSTRING(i_pstSoap),i_pstSoap->errnum)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
751 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
752 *o_pbClientAESKeyWrapSetupError = true; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
753 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
754 delete(oKWKEntry); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
755 return NULL; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
756 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
757 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
758 unsigned char acWrappedKWK[MAX_RSA_PUB_KEY_LENGTH]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
759 int iWrappedKWKLength; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
760 bSuccess = oPublicKEK.Encrypt(sizeof (oKWKEntry->m_acKWK), |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
761 oKWKEntry->m_acKWK, (unsigned char *) acWrappedKWK, &iWrappedKWKLength); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
762 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
763 if (!bSuccess) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
764 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
765 Log(AUDIT_CLIENT_AGENT_CREATE_KWK_PUBLIC_ENCRYPT_ERROR, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
766 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
767 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
768 "Error encrypting KWK with KMA public key"); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
769 *o_pbClientAESKeyWrapSetupError = true; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
770 delete(oKWKEntry); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
771 return NULL; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
772 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
773 //#if defined(DEBUG) && !defined(METAWARE) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
774 // char sHexWrappedKWK[2*MAX_RSA_PUB_KEY_LENGTH+1]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
775 // ConvertBinaryToUTF8HexString( sHexWrappedKWK, acWrappedKWK, iWrappedKWKLength); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
776 // printf("CAgentLoadBalancer::CreateKWK(): wrapped KWK hex=%s\n", |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
777 // sHexWrappedKWK); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
778 //#endif |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
779 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
780 // register the new KWK |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
781 bSuccess = RegisterKWK(iWrappedKWKLength, acWrappedKWK, i_pstSoap, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
782 i_sURL, oKWKEntry->m_acKWKID); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
783 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
784 if (!bSuccess) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
785 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
786 // RegisterKWK logs errors |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
787 if (!ServerError(GET_SOAP_FAULTSTRING(i_pstSoap), i_pstSoap->error)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
788 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
789 *o_pbClientAESKeyWrapSetupError = true; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
790 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
791 delete(oKWKEntry); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
792 return NULL; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
793 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
794 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
795 // save the new KWK entry in an empty slot in the array |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
796 for (int i=0; i < m_iKWKEntryNum && i < KMS_MAX_CLUSTER_NUM; i++) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
797 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
798 if (m_aKWKEntries[i] == NULL) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
799 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
800 m_aKWKEntries[i] = oKWKEntry; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
801 return oKWKEntry; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
802 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
803 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
804 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
805 // no empty slots so add it to the end |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
806 m_aKWKEntries[m_iKWKEntryNum++] = oKWKEntry; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
807 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
808 return oKWKEntry; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
809 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
810 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
811 void CAgentLoadBalancer::DeleteKWKEntry(Long64 i_lKMAID) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
812 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
813 for (int i=0; i < m_iKWKEntryNum && i < KMS_MAX_CLUSTER_NUM; i++) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
814 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
815 if (m_aKWKEntries[i] && m_aKWKEntries[i]->m_lKMAID == i_lKMAID) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
816 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
817 delete(m_aKWKEntries[i]); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
818 m_aKWKEntries[i] = NULL; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
819 return; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
820 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
821 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
822 // should not occur |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
823 FATAL_ASSERT(0); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
824 return; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
825 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
826 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
827 bool CAgentLoadBalancer::AESKeyWrapSupported (int i_iIndex) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
828 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
829 if (i_iIndex < 0 || i_iIndex >= m_iClusterNum) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
830 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
831 return false; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
832 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
833 return (strcmp(m_aCluster[i_iIndex].m_sKMAVersion, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
834 FIPS_COMPATIBLE_KMA_VERSION) >= 0); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
835 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
836 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
837 int CAgentLoadBalancer::GetKWKID ( |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
838 int i_Index, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
839 Long64 i_lKMAID, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
840 struct soap * const i_pstSoap, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
841 UTF8_KEYID o_pKWKID, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
842 bool * const o_pbClientAESKeyWrapSetupError) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
843 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
844 FATAL_ASSERT(i_Index >= 0 && i_Index <= m_iClusterNum); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
845 FATAL_ASSERT(i_lKMAID != 0); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
846 FATAL_ASSERT(i_pstSoap); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
847 FATAL_ASSERT(o_pKWKID); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
848 FATAL_ASSERT(o_pbClientAESKeyWrapSetupError); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
849 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
850 *o_pbClientAESKeyWrapSetupError = false; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
851 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
852 // check if the KMA for this cluster index is at a version supporting |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
853 // AES key wrap |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
854 if (!AESKeyWrapSupported(i_Index)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
855 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
856 strcpy(o_pKWKID, ""); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
857 return TRUE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
858 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
859 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
860 // AES Key Wrap Mode |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
861 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
862 struct KWKEntry* pKWKentry = GetKWK(i_lKMAID); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
863 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
864 if (pKWKentry == NULL) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
865 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
866 const char* sURL = GetHTTPSURL( |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
867 i_Index, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
868 m_pProfile->m_iPortForAgentService); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
869 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
870 pKWKentry = CreateKWK(i_lKMAID, i_pstSoap, sURL, o_pbClientAESKeyWrapSetupError); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
871 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
872 if (pKWKentry == NULL) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
873 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
874 return FALSE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
875 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
876 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
877 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
878 #if defined(DEBUG) && defined(METAWARE) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
879 log_printf("CAgentLoadBalancer::GetKWKID(): KWK IDhex=%s\n", |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
880 pKWKentry->m_acKWKID, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
881 sizeof (UTF8_KEYID)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
882 #endif |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
883 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
884 strncpy(o_pKWKID, pKWKentry->m_acKWKID, sizeof(UTF8_KEYID)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
885 o_pKWKID[sizeof(UTF8_KEYID)-1] = '\0'; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
886 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
887 return TRUE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
888 }; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
889 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
890 int CAgentLoadBalancer::GetKWKWrappingKey ( |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
891 struct soap * const i_pstSoap, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
892 const char * const i_sURL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
893 CPublicKey * const o_opPublicKEK) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
894 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
895 FATAL_ASSERT(i_pstSoap); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
896 FATAL_ASSERT(i_sURL); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
897 FATAL_ASSERT(o_opPublicKEK); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
898 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
899 int bSuccess = TRUE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
900 struct KMS_Agent::KMS_Agent__GetAgentKWKPublicKeyResponse oResponse; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
901 char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
902 char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
903 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
904 bSuccess = KMS_Agent::soap_call_KMS_Agent__GetAgentKWKPublicKey( |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
905 const_cast<struct soap *> (i_pstSoap), |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
906 i_sURL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
907 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
908 oResponse) == SOAP_OK; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
909 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
910 if (!bSuccess) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
911 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
912 GetSoapFault(sSoapFaultMsg, const_cast<struct soap *> (i_pstSoap)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
913 GetPeerNetworkAddress(sKmaAddress, const_cast<struct soap *> (i_pstSoap)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
914 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
915 LogError(m_pProfile, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
916 AUDIT_CLIENT_GET_KWK_WRAPPING_KEY_SOAP_ERROR, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
917 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
918 sKmaAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
919 sSoapFaultMsg); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
920 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
921 return FALSE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
922 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
923 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
924 // Validate the response structure |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
925 if (bSuccess) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
926 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
927 if (oResponse.KWKPublicKey.__ptr == NULL |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
928 || oResponse.KWKPublicKey.__size < 1) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
929 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
930 bSuccess = FALSE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
931 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
932 GetPeerNetworkAddress(sKmaAddress, const_cast<struct soap *> (i_pstSoap)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
933 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
934 LogError(m_pProfile, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
935 AUDIT_CLIENT_GET_KWK_WRAPPING_KEY_INVALID_KEY_RESPONSE, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
936 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
937 sKmaAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
938 NULL); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
939 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
940 else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
941 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
942 bSuccess = o_opPublicKEK->Load(oResponse.KWKPublicKey.__ptr, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
943 oResponse.KWKPublicKey.__size, PKI_FORMAT); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
944 if (!bSuccess) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
945 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
946 GetPeerNetworkAddress(sKmaAddress, const_cast<struct soap *> (i_pstSoap)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
947 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
948 LogError(m_pProfile, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
949 AUDIT_CLIENT_GET_KWK_WRAPPING_KEY_INVALID_RSA_PUB_KEY, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
950 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
951 sKmaAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
952 NULL); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
953 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
954 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
955 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
956 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
957 // Note: no SOAP cleanup as caller's environment will get destroyed |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
958 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
959 return bSuccess; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
960 }; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
961 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
962 int CAgentLoadBalancer::RegisterKWK ( |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
963 int i_iWrappedKWKSize, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
964 const unsigned char * const i_acWrappedKWK, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
965 struct soap * const i_pstSoap, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
966 const char * const i_sURL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
967 UTF8_KEYID o_acUTF8KeyID) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
968 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
969 FATAL_ASSERT(i_iWrappedKWKSize > 0); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
970 FATAL_ASSERT(i_acWrappedKWK); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
971 FATAL_ASSERT(i_pstSoap); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
972 FATAL_ASSERT(i_sURL); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
973 FATAL_ASSERT(o_acUTF8KeyID); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
974 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
975 int bSuccess; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
976 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
977 struct KMS_Agent::xsd__hexBinary oKWK; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
978 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
979 #if defined(DEBUG) && defined(METAWARE) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
980 char sHexWrappedKWK[512]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
981 ConvertBinaryToUTF8HexString( sHexWrappedKWK, i_acWrappedKWK, i_iWrappedKWKSize); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
982 log_printf("CAgentLoadBalancer::RegisterKWK(): Wrapped KWK hex=%s, len=%d\n", |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
983 sHexWrappedKWK, i_iWrappedKWKSize); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
984 #endif |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
985 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
986 if (!PutBinaryIntoSoapBinary(i_pstSoap, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
987 i_acWrappedKWK, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
988 i_iWrappedKWKSize, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
989 oKWK.__ptr, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
990 oKWK.__size)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
991 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
992 return FALSE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
993 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
994 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
995 char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
996 char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
997 struct KMS_Agent::KMS_Agent__RegisterAgentKWKResponse oResponse; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
998 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
999 bSuccess = KMS_Agent::soap_call_KMS_Agent__RegisterAgentKWK( |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1000 const_cast<struct soap *> (i_pstSoap), |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1001 i_sURL, NULL, oKWK, oResponse) == SOAP_OK; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1002 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1003 if (bSuccess) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1004 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1005 // verify response |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1006 if (oResponse.AgentKWKID && |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1007 strlen(oResponse.AgentKWKID) == 2 * KMS_KWK_KEY_ID_SIZE) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1008 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1009 #if defined(DEBUG) && defined(METAWARE) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1010 log_printf("CAgentLoadBalancer::RegisterKWK(): KWK ID hex=%s\n", |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1011 oResponse.AgentKWKID, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1012 sizeof (UTF8_KEYID)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1013 #endif |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1014 strncpy(o_acUTF8KeyID, oResponse.AgentKWKID, sizeof(UTF8_KEYID)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1015 o_acUTF8KeyID[sizeof(UTF8_KEYID)-1] = '\0'; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1016 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1017 else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1018 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1019 GetPeerNetworkAddress(sKmaAddress, const_cast<struct soap *> (i_pstSoap)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1020 GetSoapFault(sSoapFaultMsg, const_cast<struct soap *> (i_pstSoap)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1021 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1022 Log(AUDIT_CLIENT_AGENT_REGISTER_KWK_INVALID_KEYID_RESPONSE, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1023 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1024 sKmaAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1025 sSoapFaultMsg); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1026 bSuccess = FALSE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1027 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1028 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1029 else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1030 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1031 GetPeerNetworkAddress(sKmaAddress, const_cast<struct soap *> (i_pstSoap)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1032 GetSoapFault(sSoapFaultMsg, const_cast<struct soap *> (i_pstSoap)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1033 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1034 Log(AUDIT_CLIENT_AGENT_REGISTER_KWK_ERROR, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1035 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1036 sKmaAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1037 sSoapFaultMsg); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1038 bSuccess = FALSE; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1039 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1040 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1041 // Note: Clean up SOAP must happen in caller, not here |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1042 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1043 return bSuccess; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1044 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1045 }; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1046 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1047 bool CAgentLoadBalancer::AESKeyUnwrap ( |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1048 int * const io_pIndex, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1049 const WRAPPED_KEY i_pAESWrappedKey, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1050 KEY o_pPlainTextKey) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1051 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1052 FATAL_ASSERT(io_pIndex); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1053 FATAL_ASSERT(*io_pIndex >= 0); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1054 FATAL_ASSERT(o_pPlainTextKey); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1055 FATAL_ASSERT(i_pAESWrappedKey); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1056 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1057 struct KWKEntry * pKWKEntry = GetKWK(GetKMAID(*io_pIndex)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1058 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1059 if (pKWKEntry == NULL) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1060 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1061 Log(AGENT_LOADBALANCER_AESKEYUNWRAP_GETKWK_RETURNED_NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1062 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1063 m_aCluster[*io_pIndex].m_wsApplianceNetworkAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1064 NULL); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1065 *io_pIndex = CAgentLoadBalancer::AES_KEY_UNWRAP_ERROR; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1066 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1067 return false; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1068 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1069 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1070 #if defined(DEBUG) && defined(METAWARE) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1071 char sHexKWK[2*KMS_MAX_KEY_SIZE+1]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1072 ConvertBinaryToUTF8HexString( sHexKWK, pKWKEntry->m_acKWK, sizeof (pKWKEntry->m_acKWK)); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1073 log_printf("CAgentLoadBalancer::AESKeyUnwrap(): KWK hex=%s\n", |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1074 sHexKWK); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1075 #endif |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1076 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1077 if (aes_key_unwrap(pKWKEntry->m_acKWK, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1078 sizeof (pKWKEntry->m_acKWK), |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1079 i_pAESWrappedKey, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1080 o_pPlainTextKey, 4) != 0) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1081 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1082 Log(AGENT_LOADBALANCER_AESKEYUNWRAP_KEY_UNWRAP_FAILED, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1083 NULL, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1084 m_aCluster[*io_pIndex].m_wsApplianceNetworkAddress, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1085 NULL); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1086 *io_pIndex = CAgentLoadBalancer::AES_KEY_UNWRAP_ERROR; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1087 return false; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1088 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1089 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1090 return true; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1091 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1092 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1093 /*--------------------------------------------------------------------------- |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1094 * Function: KMSClient_SortClusterArray |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1095 * |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1096 *--------------------------------------------------------------------------*/ |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1097 void CAgentLoadBalancer::KMSClient_SortClusterArray (KMSClientProfile * const i_pProfile) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1098 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1099 FATAL_ASSERT(i_pProfile); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1100 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1101 CAutoMutex oAutoMutex((K_MUTEX_HANDLE) i_pProfile->m_pLock); |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1102 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1103 int i; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1104 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1105 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1106 // adjust loads according to availability, site and FIPS compatibility |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1107 for (i = 0; i < i_pProfile->m_iClusterNum; i++) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1108 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1109 if ((i_pProfile->m_aCluster[i].m_iEnabled == FALSE |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1110 || i_pProfile->m_aCluster[i].m_iResponding == FALSE |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1111 || i_pProfile->m_aCluster[i].m_iKMALocked)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1112 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1113 ((unsigned char*) &(i_pProfile->m_aCluster[i].m_lLoad))[sizeof (int)+1] = 1; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1114 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1115 else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1116 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1117 ((unsigned char*) &(i_pProfile->m_aCluster[i].m_lLoad))[sizeof (int)+1] = 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1118 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1119 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1120 if (strcmp(i_pProfile->m_aCluster[i].m_wsApplianceSiteID, |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1121 i_pProfile->m_wsEntitySiteID) != 0) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1122 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1123 ((unsigned char*) &(i_pProfile->m_aCluster[i].m_lLoad))[sizeof (int)] = 1; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1124 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1125 else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1126 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1127 ((unsigned char*) &(i_pProfile->m_aCluster[i].m_lLoad))[sizeof (int)] = 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1128 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1129 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1130 if ( m_bFIPS && |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1131 !FIPScompatibleKMA(i_pProfile->m_aCluster[i].m_sKMAVersion)) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1132 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1133 ((unsigned char*) &(i_pProfile->m_aCluster[i].m_lLoad))[sizeof (int)+2] = 1; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1134 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1135 else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1136 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1137 ((unsigned char*) &(i_pProfile->m_aCluster[i].m_lLoad))[sizeof (int)+2] = 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1138 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1139 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1140 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1141 // sort ascending by load |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1142 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1143 // gnome sort: the simplest sort algoritm |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1144 // http://www.cs.vu.nl/~dick/gnomesort.html |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1145 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1146 //void gnomesort(int n, int ar[]) { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1147 // int i = 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1148 // |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1149 // while (i < n) { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1150 // if (i == 0 || ar[i-1] <= ar[i]) i++; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1151 // else {int tmp = ar[i]; ar[i] = ar[i-1]; ar[--i] = tmp;} |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1152 // } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1153 //} |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1154 |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1155 i = 0; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1156 while (i < i_pProfile->m_iClusterNum) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1157 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1158 if (i == 0 || i_pProfile->m_aCluster[i - 1].m_lLoad <= i_pProfile->m_aCluster[i].m_lLoad) |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1159 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1160 i++; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1161 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1162 else |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1163 { |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1164 KMSClusterEntry tmp = i_pProfile->m_aCluster[i]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1165 i_pProfile->m_aCluster[i] = i_pProfile->m_aCluster[i - 1]; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1166 i_pProfile->m_aCluster[--i] = tmp; |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1167 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1168 } |
3db6e0082404
PSARC 2010/195 PKCS11 KMS Provider
Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
parents:
diff
changeset
|
1169 } |