(file) Return to SystemUnix.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

  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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2