61 thilo.boehm 1.1 PEGASUS_USING_STD;
62
63 PEGASUS_NAMESPACE_BEGIN
64
65 static const String providerModuleStatus [] = {
66 "Unknown", "Other", "OK", "Degraded",
67 "Stressed", "Predictive Failure", "Error", "Non-Recoverable Error",
68 "Starting", "Stopping", "Stopped", "In Service", "No Contact",
69 "Lost Communication"};
70
71 Boolean AuditLogger::_auditLogFlag = false;
72
73 AuditLogger::PEGASUS_AUDITLOGINITIALIZE_CALLBACK_T
74 AuditLogger::_auditLogInitializeCallback = 0;
75
76 AuditLogger::PEGASUS_AUDITLOG_CALLBACK_T AuditLogger::_writeAuditMessage =
77 AuditLogger::_writeAuditMessageToLog;
78
79 void AuditLogger::logCurrentConfig(
80 const Array<String> & propertyNames,
81 const Array<String> & propertyValues)
82 thilo.boehm 1.1 {
83 for (Uint32 i = 0; i < propertyNames.size(); i++)
84 {
85 String propertyStr = propertyNames[i] + "=" + propertyValues[i];
86
87 MessageLoaderParms msgParms("Common.AuditLogger.CURRENT_CONFIG",
88 "cimserver configuration $0", propertyStr);
89
90 _writeAuditMessage(TYPE_CONFIGURATION,
91 SUBTYPE_CURRENT_CONFIGURATION,
92 EVENT_START_UP, Logger::INFORMATION, msgParms);
93 }
94 }
95
96 void AuditLogger::logCurrentRegProvider(
97 const Array < CIMInstance > & instances)
98 {
99 String moduleName;
100 Array<Uint16> moduleStatus;
101 String statusValue;
102 Uint32 pos;
103 thilo.boehm 1.1
104 // get all the registered provider module names and status
105 for (Uint32 i = 0; i <instances.size(); i++)
106 {
107 instances[i].getProperty(instances[i].findProperty(
108 _PROPERTY_PROVIDERMODULE_NAME)).getValue().get(moduleName);
109
110 pos = instances[i].findProperty(_PROPERTY_OPERATIONALSTATUS);
111
112 if (pos == PEG_NOT_FOUND)
113 {
114 moduleStatus.append(0);
115 }
116 else
117 {
118 CIMValue theValue = instances[i].getProperty(pos).getValue();
119
120 if (theValue.isNull())
121 {
122 moduleStatus.append(0);
123 }
124 thilo.boehm 1.1 else
125 {
126 theValue.get(moduleStatus);
127 }
128 }
129
130 statusValue = _getModuleStatusValue(moduleStatus);
131
132 MessageLoaderParms msgParms(
133 "Common.AuditLogger.CURRENT_PROVIDER_REGISTRATION",
134 "Provider module \"$0\" has status \"$1\".",
135 moduleName, statusValue);
136
137 _writeAuditMessage(TYPE_CONFIGURATION,
138 SUBTYPE_CURRENT_PROVIDER_REGISTRATION,
139 EVENT_START_UP, Logger::INFORMATION, msgParms);
140 }
141 }
142
143 void AuditLogger::logCurrentEnvironmentVar()
144 {
145 thilo.boehm 1.1 #ifdef PEGASUS_OS_DARWIN
146 char** envp = *_NSGetEnviron();
147 #else
148 char** envp = environ;
149 #endif
150
151 Uint32 i = 0;
152
153 while (envp[i])
154 {
155 MessageLoaderParms msgParms("Common.AuditLogger.CURRENT_ENV",
156 "cimserver environment variable: $0", envp[i]);
157
158 _writeAuditMessage(TYPE_CONFIGURATION,
159 SUBTYPE_CURRENT_ENVIRONMENT_VARIABLES,
160 EVENT_START_UP, Logger::INFORMATION, msgParms);
161
162 i++;
163 }
164 }
165
166 thilo.boehm 1.1 void AuditLogger::logSetConfigProperty(
167 const String & userName,
168 const String & propertyName,
169 const String & prePropertyValue,
170 const String & newPropertyValue,
171 Boolean isPlanned)
172 {
173 if (isPlanned)
174 {
175 MessageLoaderParms msgParms(
176 "Common.AuditLogger.SET_PLANNED_CONFIG_PROPERTY",
177 "The planned value of property \"$0\" is modified from "
178 "value \"$1\" to value \"$2\" by user \"$3\".",
179 propertyName, prePropertyValue, newPropertyValue, userName);
180
181 _writeAuditMessage(TYPE_CONFIGURATION,
182 SUBTYPE_CONFIGURATION_CHANGE,
183 EVENT_UPDATE, Logger::INFORMATION, msgParms);
184 }
185 else
186 {
187 thilo.boehm 1.1 MessageLoaderParms msgParms(
188 "Common.AuditLogger.SET_CURRENT_CONFIG_PROPERTY",
189 "The current value of property \"$0\" is modified from "
190 "value \"$1\" to value \"$2\" by user \"$3\".",
191 propertyName, prePropertyValue, newPropertyValue, userName);
192
193 _writeAuditMessage(TYPE_CONFIGURATION,
194 SUBTYPE_CONFIGURATION_CHANGE,
195 EVENT_UPDATE, Logger::INFORMATION, msgParms);
196 }
197 }
198
199 void AuditLogger::logUpdateClassOperation(
200 const char* cimMethodName,
201 AuditEvent eventType,
202 const String& userName,
203 const String& ipAddr,
204 const CIMNamespaceName& nameSpace,
205 const CIMName& className,
206 CIMStatusCode statusCode)
207 {
208 thilo.boehm 1.1 MessageLoaderParms msgParms(
209 "Common.AuditLogger.OPERATION_UPDATE_CLASS",
210 "A CIM $0 operation on class \"$1\" in namespace \"$2\" by user "
211 "\"$3\" connected from system \"$4\" resulted in status \"$5\".",
212 cimMethodName,
213 className.getString(),
214 nameSpace.getString(),
215 userName,
216 ipAddr,
217 cimStatusCodeToString(statusCode));
218
219 _writeAuditMessage(TYPE_CIMOPERATION, SUBTYPE_SCHEMA_OPERATION,
220 eventType, Logger::INFORMATION, msgParms);
221 }
222
223 void AuditLogger::logUpdateQualifierOperation(
224 const char* cimMethodName,
225 AuditEvent eventType,
226 const String& userName,
227 const String& ipAddr,
228 const CIMNamespaceName& nameSpace,
229 thilo.boehm 1.1 const CIMName& className,
230 CIMStatusCode statusCode)
231 {
232 MessageLoaderParms msgParms(
233 "Common.AuditLogger.OPERATION_UPDATE_QUALIFIER",
234 "A CIM $0 operation on qualifier \"$1\" in namespace \"$2\" by user "
235 "\"$3\" connected from system \"$4\" resulted in status \"$5\".",
236 cimMethodName,
237 className.getString(),
238 nameSpace.getString(),
239 userName,
240 ipAddr,
241 cimStatusCodeToString(statusCode));
242
243 _writeAuditMessage(TYPE_CIMOPERATION, SUBTYPE_SCHEMA_OPERATION,
244 eventType, Logger::INFORMATION, msgParms);
245 }
246
247 void AuditLogger::logUpdateInstanceOperation(
248 const char* cimMethodName,
249 AuditEvent eventType,
250 thilo.boehm 1.1 const String& userName,
251 const String& ipAddr,
252 const CIMNamespaceName& nameSpace,
253 const CIMObjectPath& instanceName,
254 const String& moduleName,
255 const String& providerName,
256 CIMStatusCode statusCode)
257 {
258 if (providerName != String::EMPTY)
259 {
260 MessageLoaderParms msgParms(
261 "Common.AuditLogger.OPERATION_UPDATE_INSTANCE_WITH_PROVIDER",
262 "A CIM $0 operation on instance \"$1\" in namespace \"$2\" by "
263 "user \"$3\" connected from system \"$4\" resulted in "
264 "status \"$5\". "
265 "The provider for this operation is \"$6\" in module \"$7\".",
266 cimMethodName,
267 CIMObjectPath("", CIMNamespaceName(), instanceName.getClassName(),
268 instanceName.getKeyBindings()).toString(),
269 nameSpace.getString(),
270 userName,
271 thilo.boehm 1.1 ipAddr,
272 cimStatusCodeToString(statusCode),
273 providerName,
274 moduleName);
275
276 _writeAuditMessage(TYPE_CIMOPERATION, SUBTYPE_INSTANCE_OPERATION,
277 eventType, Logger::INFORMATION, msgParms);
278 }
279 else
280 {
281 MessageLoaderParms msgParms(
282 "Common.AuditLogger.OPERATION_UPDATE_INSTANCE",
283 "A CIM $0 operation on instance \"$1\" in namespace \"$2\" by "
284 "user \"$3\" connected from system \"$4\" resulted in "
285 "status \"$5\". ",
286 cimMethodName,
287 CIMObjectPath("", CIMNamespaceName(), instanceName.getClassName(),
288 instanceName.getKeyBindings()).toString(),
289 nameSpace.getString(),
290 userName,
291 ipAddr,
292 thilo.boehm 1.1 cimStatusCodeToString(statusCode));
293
294 _writeAuditMessage(TYPE_CIMOPERATION, SUBTYPE_INSTANCE_OPERATION,
295 eventType, Logger::INFORMATION, msgParms);
296 }
297 }
298
299 void AuditLogger::logInvokeMethodOperation(
300 const String& userName,
301 const String& ipAddr,
302 const CIMNamespaceName& nameSpace,
303 const CIMObjectPath& objectName,
304 const CIMName& methodName,
305 const String& moduleName,
306 const String& providerName,
307 CIMStatusCode statusCode)
308 {
309 if (providerName != String::EMPTY)
310 {
311 MessageLoaderParms msgParms(
312 "Common.AuditLogger.OPERATION_INVOKE_METHOD_WITH_PROVIDER",
313 thilo.boehm 1.1 "A CIM InvokeMethod operation on method \"$0\" of object \"$1\" "
314 "in namespace \"$2\" by user \"$3\" connected from system "
315 "\"$4\" resulted in status \"$5\". The provider for this "
316 "operation is \"$6\" in module \"$7\".",
317 methodName.getString(),
318 CIMObjectPath("", CIMNamespaceName(), objectName.getClassName(),
319 objectName.getKeyBindings()).toString(),
320 nameSpace.getString(),
321 userName,
322 ipAddr,
323 cimStatusCodeToString(statusCode),
324 providerName,
325 moduleName);
326
327 _writeAuditMessage(TYPE_CIMOPERATION, SUBTYPE_INSTANCE_OPERATION,
328 EVENT_INVOKE, Logger::INFORMATION, msgParms);
329 }
330 else
331 {
332 MessageLoaderParms msgParms(
333 "Common.AuditLogger.OPERATION_INVOKE_METHOD",
334 thilo.boehm 1.1 "A CIM InvokeMethod operation on method \"$0\" of object \"$1\" "
335 "in namespace \"$2\" by user \"$3\" connected from system "
336 "\"$4\" resulted in status \"$5\".",
337 methodName.getString(),
338 CIMObjectPath("", CIMNamespaceName(), objectName.getClassName(),
339 objectName.getKeyBindings()).toString(),
340 nameSpace.getString(),
341 userName,
342 ipAddr,
343 cimStatusCodeToString(statusCode));
344
345 _writeAuditMessage(TYPE_CIMOPERATION, SUBTYPE_INSTANCE_OPERATION,
346 EVENT_INVOKE, Logger::INFORMATION, msgParms);
347 }
348 }
349
|