1 mike 1.19 //%/////////////////////////////////////////////////////////////////////////////
2 //
|
3 kumpf 1.39 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM,
4 // The Open Group, Tivoli Systems
|
5 mike 1.19 //
6 // Permission is hereby granted, free of charge, to any person obtaining a copy
|
7 mike 1.21 // of this software and associated documentation files (the "Software"), to
8 // deal in the Software without restriction, including without limitation the
9 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
10 mike 1.19 // sell copies of the Software, and to permit persons to whom the Software is
11 // furnished to do so, subject to the following conditions:
|
12 kumpf 1.39 //
|
13 mike 1.21 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
|
14 mike 1.19 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
15 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
16 mike 1.21 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
17 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
19 mike 1.19 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 //
22 //==============================================================================
23 //
24 // Author: Mike Brasher (mbrasher@bmc.com)
25 //
|
26 mike 1.21 // Modified By: Ben Heilbronn (ben_heilbronn@hp.com)
27 // Sushma Fernandes (sushma_fernandes@hp.com)
28 // Nag Boranna (nagaraja_boranna@hp.com)
|
29 mike 1.19 //
|
30 david 1.54 // Modified By: Dave Rosckes (rosckes@us.ibm.com)
31 //
|
32 mike 1.19 //%/////////////////////////////////////////////////////////////////////////////
33
34 #ifdef PEGASUS_OS_HPUX
35 # include <dl.h>
|
36 mike 1.21 #elif defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM)
37 # include <dll.h>
|
38 chuck 1.44 #elif defined(PEGASUS_PLATFORM_OS400_ISERIES_IBM)
39 # include <fcntl.h>
40 # include <mih/rslvsp.h> /* rslvsp() */
41 # include <mih/micommon.h> /* _AUTH_EXECUTE */
42 # include <mih/miobjtyp.h> /* WLI_SRVPGM */
43 # include <pointer.h> /* _SYSPTR */
44 # include <qusec.h> /* Qus_EC_t */
45 # include <qleawi.h> /* QleActBndPgm(),QleGetExp() */
|
46 chuck 1.53 # include <qycmutiltyUtility.H>
|
47 chuck 1.44 # include <unistd.cleinc>
|
48 david 1.54 # include "qycmmsgclsMessage.H" // ycmMessage class
|
49 mike 1.19 #else
50 # include <dlfcn.h>
51 #endif
52
|
53 mike 1.21 #include <unistd.h>
|
54 mike 1.19 #include <dirent.h>
|
55 mike 1.21 #include <pwd.h>
|
56 sage 1.23
|
57 chuck 1.44 #if !defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) && !defined(PEGASUS_PLATFORM_OS400_ISERIES_IBM)
|
58 kumpf 1.24 #include <crypt.h>
|
59 sage 1.23 #endif
60
|
61 david 1.54 #if defined(PEGASUS_USE_SYSLOGS)
62 #include <syslog.h>
63 #endif
64
|
65 mike 1.19 #include <sys/stat.h>
66 #include <sys/types.h>
67 #include <cstdio>
68 #include <time.h>
|
69 kumpf 1.41 #include <sys/time.h>
|
70 kumpf 1.24 #include <netdb.h>
|
71 kumpf 1.41 #include "System.h"
|
72 mike 1.21 #include <Pegasus/Common/Tracer.h>
|
73 kumpf 1.25 #include <Pegasus/Common/Destroyer.h>
|
74 kumpf 1.42 #include <Pegasus/Common/InternalException.h>
|
75 mike 1.21
|
76 mike 1.19 PEGASUS_NAMESPACE_BEGIN
77
|
78 kumpf 1.35 #if defined(PEGASUS_OS_HPUX)
79 Boolean System::bindVerbose = false;
80 #endif
81
|
82 chuck 1.44 #if defined(PEGASUS_OS_OS400)
83 char os400ExceptionID[8] = {0};
84 #endif
85
|
86 mike 1.19 inline void sleep_wrapper(Uint32 seconds)
87 {
88 sleep(seconds);
89 }
90
91 void System::getCurrentTime(Uint32& seconds, Uint32& milliseconds)
92 {
93 timeval tv;
94 gettimeofday(&tv, 0);
|
95 kumpf 1.33 seconds = Uint32(tv.tv_sec);
96 milliseconds = Uint32(tv.tv_usec) / 1000;
|
97 mike 1.19 }
98
99 String System::getCurrentASCIITime()
100 {
101 char str[50];
102 time_t rawTime;
103
104 time(&rawTime);
|
105 kumpf 1.32 strftime(str, 40,"%m/%d/%Y-%T", localtime(&rawTime));
|
106 mike 1.19 String time = str;
107 return time;
108 }
109
110 void System::sleep(Uint32 seconds)
111 {
112 sleep_wrapper(seconds);
113 }
114
115 Boolean System::exists(const char* path)
116 {
117 return access(path, F_OK) == 0;
118 }
119
120 Boolean System::canRead(const char* path)
121 {
122 return access(path, R_OK) == 0;
123 }
124
125 Boolean System::canWrite(const char* path)
126 {
127 mike 1.19 return access(path, W_OK) == 0;
128 }
129
130 Boolean System::getCurrentDirectory(char* path, Uint32 size)
131 {
132 return getcwd(path, size) != NULL;
133 }
134
135 Boolean System::isDirectory(const char* path)
136 {
137 struct stat st;
138
139 if (stat(path, &st) != 0)
|
140 mike 1.21 return false;
|
141 mike 1.19
142 return S_ISDIR(st.st_mode);
143 }
144
145 Boolean System::changeDirectory(const char* path)
146 {
147 return chdir(path) == 0;
148 }
149
150 Boolean System::makeDirectory(const char* path)
151 {
152 return mkdir(path, 0777) == 0;
153 }
154
155 Boolean System::getFileSize(const char* path, Uint32& size)
156 {
157 struct stat st;
158
159 if (stat(path, &st) != 0)
|
160 mike 1.21 return false;
|
161 mike 1.19
162 size = st.st_size;
163 return true;
164 }
165
166 Boolean System::removeDirectory(const char* path)
167 {
|
168 mike 1.21 return rmdir(path) == 0;
|
169 mike 1.19 }
170
171 Boolean System::removeFile(const char* path)
172 {
|
173 mike 1.21 return unlink(path) == 0;
|
174 mike 1.19 }
175
176 Boolean System::renameFile(const char* oldPath, const char* newPath)
177 {
178 if (link(oldPath, newPath) != 0)
|
179 mike 1.21 return false;
|
180 mike 1.19
181 return unlink(oldPath) == 0;
182 }
183
184 DynamicLibraryHandle System::loadDynamicLibrary(const char* fileName)
185 {
|
186 kumpf 1.40 PEG_METHOD_ENTER(TRC_OS_ABSTRACTION, "System::loadDynamicLibrary()");
|
187 mike 1.19
|
188 mike 1.21 Tracer::trace(TRC_OS_ABSTRACTION, Tracer::LEVEL2,
189 "Attempting to load library %s", fileName);
|
190 mike 1.19
|
191 mike 1.21 #if defined(PEGASUS_OS_HPUX)
|
192 kumpf 1.35 void* handle;
193 if (bindVerbose)
194 {
195 handle = shl_load(fileName,
196 BIND_IMMEDIATE | DYNAMIC_PATH | BIND_VERBOSE, 0L);
197 }
198 else
199 {
200 handle = shl_load(fileName, BIND_IMMEDIATE | DYNAMIC_PATH, 0L);
201 }
|
202 mike 1.21 Tracer::trace(TRC_OS_ABSTRACTION, Tracer::LEVEL2,
|
203 kumpf 1.34 "After loading lib %s, error code is %d", fileName,
204 (handle == (void *)0)?errno:0);
|
205 mike 1.21
|
206 kumpf 1.40 PEG_METHOD_EXIT();
|
207 mike 1.19 return DynamicLibraryHandle(handle);
|
208 mike 1.21 #elif defined(PEGASUS_OS_TRU64)
|
209 kumpf 1.40 PEG_METHOD_EXIT();
|
210 mike 1.21 return DynamicLibraryHandle(dlopen(fileName, RTLD_NOW));
211 #elif defined(PEGASUS_OS_ZOS)
|
212 kumpf 1.40 PEG_METHOD_EXIT();
|
213 mike 1.21 return DynamicLibraryHandle(dllload(fileName));
|
214 chuck 1.44 #elif defined(PEGASUS_OS_OS400)
215 // Activate the service program.
216
217 // Parse out the library and srvpgm names.
218 // Note: the fileName passed in must be in OS/400 form - library/srvpgm
219 if (fileName == NULL || strlen(fileName) == 0 || strlen(fileName) >= 200)
220 return 0;
221
|
222 chuck 1.48 // More checking here!
|
223 chuck 1.44 char name[200];
224 strcpy(name, fileName);
225
226 char* lib = strtok(name, "/");
227 if (lib == NULL || strlen(lib) == 0)
228 return 0;
229
|
230 chuck 1.48 char* srvpgm = strtok(NULL,"/");
|
231 chuck 1.44 if (srvpgm == NULL || strlen(srvpgm) == 0)
232 return 0;
233
234 /*----------------------------------------------------------------*/
235 /* Resolve to the service program */
236 /*----------------------------------------------------------------*/
237 _OBJ_TYPE_T objectType = WLI_SRVPGM;
238 _SYSPTR sysP = rslvsp(objectType, srvpgm, lib, _AUTH_NONE);
239
240 /*----------------------------------------------------------------*/
241 /* Activate the service program */
242 /*----------------------------------------------------------------*/
243 Qle_ABP_Info_t activationInfo;
244 int actInfoLen = sizeof(activationInfo);
245 int hdl;
246
247 Qus_EC_t os400ErrorCode = {0};
248 os400ErrorCode.Bytes_Provided = sizeof(Qus_EC_t);
249 os400ErrorCode.Bytes_Available = 0;
250
251 QleActBndPgm(&sysP,
252 chuck 1.44 &hdl,
253 &activationInfo,
254 &actInfoLen,
255 &os400ErrorCode);
256
257 if (os400ErrorCode.Bytes_Available)
258 {
259 // Got an error.
260 memset(os400ExceptionID, '\0', 8);
261 strncpy(os400ExceptionID, os400ErrorCode.Exception_Id, 7);
262 Tracer::trace(TRC_OS_ABSTRACTION, Tracer::LEVEL2,
263 "Error activating service program. Exception Id = %s", os400ExceptionID);
264 return 0;
265 }
266
267 PEG_METHOD_EXIT();
268 return DynamicLibraryHandle(hdl);
269
|
270 mike 1.19 #else
|
271 kumpf 1.40 PEG_METHOD_EXIT();
|
272 mike 1.21 return DynamicLibraryHandle(dlopen(fileName, RTLD_NOW | RTLD_GLOBAL));
273 #endif
|
274 mike 1.20
|
275 mike 1.21 }
|
276 mike 1.20
|
277 mike 1.21 void System::unloadDynamicLibrary(DynamicLibraryHandle libraryHandle)
278 {
279 // ATTN: Should this method indicate success/failure?
280 #ifdef PEGASUS_OS_LINUX
281 dlclose(libraryHandle);
282 #endif
283
284 #ifdef PEGASUS_OS_HPUX
285 // Note: shl_unload will unload the library even if it has been loaded
286 // multiple times. No reference count is kept.
|
287 kumpf 1.31 int ignored = shl_unload(reinterpret_cast<shl_t>(libraryHandle));
|
288 mike 1.19 #endif
289 }
290
291 String System::dynamicLoadError() {
|
292 mike 1.21 // ATTN: Is this safe in a multi-threaded process? Should this string
293 // be returned from loadDynamicLibrary?
|
294 mike 1.19 #ifdef PEGASUS_OS_HPUX
|
295 mike 1.21 // ATTN: If shl_load() returns NULL, this value should be strerror(errno)
296 return String();
297 #elif defined(PEGASUS_OS_ZOS)
|
298 mike 1.19 return String();
|
299 chuck 1.44 #elif defined(PEGASUS_OS_OS400)
300 return String(os400ExceptionID);
|
301 mike 1.19 #else
302 String dlerr = dlerror();
303 return dlerr;
304 #endif
305 }
306
307
308 DynamicSymbolHandle System::loadDynamicSymbol(
309 DynamicLibraryHandle libraryHandle,
310 const char* symbolName)
311 {
312 #ifdef PEGASUS_OS_HPUX
313 char* p = (char*)symbolName;
314 void* proc = 0;
315
|
316 kumpf 1.31 if (shl_findsym((shl_t*)&libraryHandle, symbolName, TYPE_UNDEFINED,
317 &proc) == 0)
318 {
|
319 mike 1.21 return DynamicSymbolHandle(proc);
|
320 kumpf 1.31 }
|
321 mike 1.19
|
322 kumpf 1.47 if (shl_findsym((shl_t*)libraryHandle,
323 (String("_") + symbolName).getCString(),
324 TYPE_UNDEFINED,
|
325 kumpf 1.31 &proc) == 0)
|
326 mike 1.19 {
|
327 mike 1.21 return DynamicSymbolHandle(proc);
|
328 mike 1.19 }
329
330 return 0;
331
|
332 mike 1.21 #elif defined(PEGASUS_OS_ZOS)
333 return DynamicSymbolHandle(dllqueryfn((dllhandle *)libraryHandle,
334 (char*)symbolName));
|
335 chuck 1.44
336 #elif defined(PEGASUS_OS_OS400)
337 /*----------------------------------------------------------------*/
338 /* Get procedure pointer and return it to caller */
339 /*----------------------------------------------------------------*/
340
341 Qus_EC_t os400ErrorCode = {0};
342 os400ErrorCode.Bytes_Provided = sizeof(Qus_EC_t);
343 os400ErrorCode.Bytes_Available = 0;
344
345 int exportType;
|
346 chuck 1.48 int hdl = (int)libraryHandle;
|
347 chuck 1.44 void * procAddress = NULL;
348
|
349 chuck 1.48 QleGetExp(&hdl,
|
350 chuck 1.44 0,
351 0,
352 (char *)symbolName,
353 &procAddress,
354 &exportType,
355 &os400ErrorCode);
356
357 if (os400ErrorCode.Bytes_Available)
358 {
359 // Got an error.
360 memset(os400ExceptionID, '\0', 8);
361 strncpy(os400ExceptionID, os400ErrorCode.Exception_Id, 7);
362 Tracer::trace(TRC_OS_ABSTRACTION, Tracer::LEVEL2,
363 "Error getting export. Exception Id = %s", os400ExceptionID);
364 return 0;
365 }
366
367 return DynamicSymbolHandle(procAddress);
368
|
369 mike 1.19 #else
370
371 return DynamicSymbolHandle(dlsym(libraryHandle, (char*)symbolName));
372
373 #endif
374 }
375
376 String System::getHostName()
377 {
378 static char hostname[64];
379
380 if (!*hostname)
381 gethostname(hostname, sizeof(hostname));
382
383 return hostname;
|
384 kumpf 1.24 }
385
|
386 kumpf 1.30 String System::getFullyQualifiedHostName ()
387 {
388 #ifdef PEGASUS_OS_HPUX
389 char hostName [MAXHOSTNAMELEN];
390 struct hostent *he;
391 String fqName;
392
393 if (gethostname (hostName, MAXHOSTNAMELEN) != 0)
394 {
395 return String::EMPTY;
396 }
397
398 if (he = gethostbyname (hostName))
399 {
400 strcpy (hostName, he->h_name);
401 }
402
403 fqName.assign (hostName);
404
405 return fqName;
406 #else
407 kumpf 1.30 //
408 // ATTN: Implement this method to return the fully qualified host name
409 //
410 return String::EMPTY;
411 #endif
412 }
413
414 String System::getSystemCreationClassName ()
415 {
416 #ifdef PEGASUS_OS_HPUX
417 return "CIM_ComputerSystem";
418 #else
419 //
420 // ATTN: Implement this method to return the system creation class name
421 //
422 return String::EMPTY;
423 #endif
424 }
425
|
426 kumpf 1.24 Uint32 System::lookupPort(
427 const char * serviceName,
428 Uint32 defaultPort)
429 {
430 Uint32 localPort;
431
432 struct servent *serv;
433
434 //
435 // Get wbem-local port from /etc/services
436 //
|
437 chuck 1.44 #if !defined(PEGASUS_OS_OS400)
|
438 kumpf 1.37 if ( (serv = getservbyname(serviceName, TCP)) != NULL )
|
439 chuck 1.44 #else
440 // Need to cast on OS/400
441 if ( (serv = getservbyname((char *)serviceName, TCP)) != NULL )
442 #endif
|
443 kumpf 1.24 {
|
444 sage 1.43 #ifndef PEGASUS_PLATFORM_LINUX_IX86_GNU
|
445 kumpf 1.24 localPort = serv->s_port;
|
446 sage 1.43 #else
447 localPort = htons((uint16_t)serv->s_port);
448 #endif
|
449 kumpf 1.24 }
450 else
451 {
452 localPort = defaultPort;
453 }
454
455 return localPort;
|
456 mike 1.19 }
457
|
458 mike 1.21 String System::getPassword(const char* prompt)
459 {
460
461 String password;
462
|
463 chuck 1.44 #if !defined(PEGASUS_OS_OS400)
464 // Not supported on OS/400, and we don't need it.
|
465 mike 1.21 password = String(getpass( prompt ));
|
466 chuck 1.44 #endif
|
467 mike 1.21
468 return password;
469 }
470
|
471 kumpf 1.38 String System::getEffectiveUserName()
|
472 mike 1.21 {
473 String userName = String::EMPTY;
474 struct passwd* pwd = NULL;
475
476 //
477 // get the currently logged in user's UID.
478 //
|
479 kumpf 1.38 pwd = getpwuid(geteuid());
|
480 mike 1.21 if ( pwd == NULL )
481 {
482 //ATTN: Log a message
483 // "User might have been removed just after login"
484 }
485 else
486 {
487 //
488 // get the user name
489 //
490 userName.assign(pwd->pw_name);
491 }
492
493 return(userName);
494 }
495
496 String System::encryptPassword(const char* password, const char* salt)
497 {
|
498 chuck 1.44 #if !defined(PEGASUS_OS_OS400)
|
499 mike 1.21 return ( String(crypt( password,salt)) );
|
500 chuck 1.44 #else
501 // Not supported on OS400, and we don't need it.
502 return ( String(password) );
503 #endif
|
504 mike 1.21 }
505
|
506 kumpf 1.47 Boolean System::isSystemUser(const char* userName)
|
507 mike 1.21 {
508 //
509 // get the password entry for the user
510 //
511 if ( getpwnam(userName) == NULL )
512 {
513 return false;
514 }
515 return true;
516 }
517
|
518 kumpf 1.25 Boolean System::isPrivilegedUser(const String userName)
|
519 mike 1.21 {
520 //
|
521 kumpf 1.38 // Check if the given user is a privileged user
|
522 mike 1.21 //
|
523 chuck 1.51 #if !defined(PEGASUS_OS_OS400)
|
524 kumpf 1.38 struct passwd pwd;
525 struct passwd *result;
526 char pwdBuffer[1024];
|
527 kumpf 1.25
|
528 kumpf 1.47 if (getpwnam_r(userName.getCString(), &pwd, pwdBuffer, 1024, &result) == 0)
|
529 kumpf 1.25 {
|
530 kumpf 1.38 if ( pwd.pw_uid == 0 )
|
531 kumpf 1.25 {
|
532 kumpf 1.38 return true;
|
533 kumpf 1.25 }
|
534 mike 1.21 }
|
535 kumpf 1.38 return false;
|
536 chuck 1.51 #else
537 return ycmCheckUserCmdAuthorities(userName.getCString());
538 #endif
|
539 kumpf 1.26 }
540
541 String System::getPrivilegedUserName()
542 {
543 static String userName = String::EMPTY;
544
545 if (userName == String::EMPTY)
546 {
547 struct passwd* pwd = NULL;
548
549 //
550 // get the privileged user's UID.
551 //
|
552 chuck 1.51 // (on OS/400, this is QSECOFR)
|
553 kumpf 1.26 pwd = getpwuid(0);
554 if ( pwd != NULL )
555 {
556 //
557 // get the user name
558 //
559 userName.assign(pwd->pw_name);
560 }
561 else
562 {
563 PEGASUS_ASSERT(0);
564 }
565 }
566
567 return (userName);
|
568 mike 1.21 }
|
569 kumpf 1.22
570 Uint32 System::getPID()
571 {
572 //
573 // Get the Process ID
574 //
575 Uint32 pid = getpid();
576
577 return pid;
578 }
|
579 mike 1.28
580 Boolean System::truncateFile(
581 const char* path,
582 size_t newSize)
583 {
|
584 chuck 1.44 #if !defined(PEGASUS_OS_OS400)
|
585 kumpf 1.29 return (truncate(path, newSize) == 0);
|
586 chuck 1.44 #else
587 int fd = open(path, O_WRONLY);
588 if (fd != -1)
589 {
590 int rc = ftruncate(fd, newSize);
591 close(fd);
592 return (rc == 0);
593 }
594
595 return false;
596 #endif
|
597 mike 1.28 }
|
598 tony 1.52
599 // Is absolute path?
600 Boolean System::is_absolute_path(const char *path)
601 {
602 if (path == NULL)
603 return false;
604
605 if (path[0] == '/')
606 return true;
607
608 return false;
609 }
|
610 david 1.54
611 void System::openlog(const String ident)
612 {
613 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_IA64_GNU)
614
615 openlog(ident, LOG_PID|LOG_CONS, LOG_DAEMON);
616
617 #endif
618
619 return;
620 }
621
622 void System::syslog(Uint32 severity, const char *data)
623 {
624 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_IA64_GNU)
625
626 // FUTURE-SF-P3-20020517 : Use the Syslog on HP-UX. Eventually only
627 // certain messages will go to the Syslog and others to the
628 // Pegasus Logger.
629 Uint32 syslogLevel = LOG_DEBUG;
630
631 david 1.54 // Map the log levels.
632 if (severity & Logger::TRACE) syslogLevel = LOG_DEBUG;
633 if (severity & Logger::INFORMATION) syslogLevel = LOG_INFO;
634 if (severity & Logger::WARNING) syslogLevel = LOG_WARNING;
635 if (severity & Logger::SEVERE) syslogLevel = LOG_ERR;
636 if (severity & Logger::FATAL) syslogLevel = LOG_CRIT;
637
638 syslog(syslogLevel, "%s", data);
639
640 #elif defined(PEGASUS_OS_OS400)
641
642 std::string replacementData = data;
643 // All messages will go to the joblog. In the future
644 // some messages may go to other message queues yet
645 // to be determined.
646 if ((severity & Logger::TRACE) ||
647 (severity & Logger::INFORMATION))
648 {
649
650 // turn into ycmMessage so we can put it in the job log
651 ycmMessage theMessage(msgCPxDF80,
652 david 1.54 CPIprefix,
653 replacementData,
654 "Logger",ycmCTLCIMID);
655
656 // put the message in the joblog
657 theMessage.joblogIt(UnitOfWorkError,
658 ycmMessage::Informational);
659 }
660
661 if ((severity & Logger::WARNING) ||
662 (severity & Logger::SEVERE) ||
663 (severity & Logger::FATAL))
664 {
665 // turn into ycmMessage so we can put it in the job log
666 ycmMessage theMessage(msgCPxDF82,
667 CPDprefix,
668 replacementData,
669 "Logger",ycmCTLCIMID);
670
671 // put the message in the joblog
672 theMessage.joblogIt(UnitOfWorkError,
673 david 1.54 ycmMessage::Diagnostic);
674 }
675
676 #endif
677
678 return;
679 }
680
681 void System::closelog()
682 {
683 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_IA64_GNU)
684
685 closelog();
686
687 #endif
688
689 return;
690 }
691
692 // System ID constants for Logger::put and Logger::trace
693 #if defined(PEGASUS_PLATFORM_OS400_ISERIES_IBM)
694 david 1.54 const String System::CIMSERVER = "qycmcimom"; // Server system ID
695 #else
696 const String System::CIMSERVER = "cimserver"; // Server system ID
697 #endif
|
698 mike 1.21
|
699 mike 1.19 PEGASUS_NAMESPACE_END
|