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

Diff for /pegasus/src/Server/cimserver.cpp between version 1.196 and 1.217

version 1.196, 2007/04/03 18:51:01 version 1.217, 2008/03/05 22:27:38
Line 45 
Line 45 
 // //
 // cimserver daemon=false // cimserver daemon=false
 // //
 // The daemon config property has no effect on windows operation.  // The daemon config property has no effect on windows operation or when
   // privilege separation is enabled.
 // //
 // To shutdown pegasus, use the -s option: // To shutdown pegasus, use the -s option:
 // //
Line 76 
Line 77 
 // Alternatively, you can use the windows service manager. Pegasus shows up // Alternatively, you can use the windows service manager. Pegasus shows up
 // in the service database as "Pegasus CIM Object Manager" // in the service database as "Pegasus CIM Object Manager"
 // //
 // Mike Day, mdday@us.ibm.com  
 //  
 ////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
  
  
 #include <Pegasus/Common/Config.h> #include <Pegasus/Common/Config.h>
 #include <Pegasus/Common/Constants.h> #include <Pegasus/Common/Constants.h>
 #include <Pegasus/Common/PegasusAssert.h> #include <Pegasus/Common/PegasusAssert.h>
 #include <cstdlib>  
 #include <Pegasus/Common/FileSystem.h> #include <Pegasus/Common/FileSystem.h>
 #include <Pegasus/Common/Monitor.h>  
 #include <Pegasus/Common/PegasusVersion.h> #include <Pegasus/Common/PegasusVersion.h>
 #include <Pegasus/Common/Logger.h> #include <Pegasus/Common/Logger.h>
 #include <Pegasus/Common/System.h> #include <Pegasus/Common/System.h>
Line 94 
Line 91 
 #include <Pegasus/Common/LanguageParser.h> #include <Pegasus/Common/LanguageParser.h>
 #include <Pegasus/Config/ConfigManager.h> #include <Pegasus/Config/ConfigManager.h>
 #include <Pegasus/Client/CIMClient.h> #include <Pegasus/Client/CIMClient.h>
 #include <Pegasus/Server/ShutdownService.h>  
 #include <Pegasus/Server/CIMServer.h> #include <Pegasus/Server/CIMServer.h>
 #include <Service/ServerProcess.h> #include <Service/ServerProcess.h>
   #include <Service/ServerShutdownClient.h>
 #if defined(PEGASUS_OS_OS400)  #include <Service/ServerRunStatus.h>
 #  include "vfyptrs.cinc"  
 #  include "OS400ConvertChar.h"  
 #endif  
  
 #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM)
   #include <Pegasus/Common/SetFileDescriptorToEBCDICEncoding.h>
 #include <Service/ARM_zOS.h> #include <Service/ARM_zOS.h>
 # ifdef PEGASUS_ZOS_SECURITY # ifdef PEGASUS_ZOS_SECURITY
 // This include file will not be provided in the OpenGroup CVS for now. // This include file will not be provided in the OpenGroup CVS for now.
Line 113 
Line 107 
 #endif #endif
  
 #if defined(PEGASUS_OS_TYPE_UNIX) #if defined(PEGASUS_OS_TYPE_UNIX)
 # if defined(PEGASUS_OS_OS400)  
 #  include <unistd.cleinc>  
 # else  
 #  include <unistd.h> #  include <unistd.h>
 # endif  
 # include <sys/types.h> # include <sys/types.h>
 # include <sys/stat.h> # include <sys/stat.h>
 # include <fcntl.h> # include <fcntl.h>
 #endif #endif
  
   #ifdef PEGASUS_ENABLE_PRIVILEGE_SEPARATION
   # define PEGASUS_PROCESS_NAME "cimservermain"
   #else
   # define PEGASUS_PROCESS_NAME "cimserver"
   #endif
   
   #include <Pegasus/Common/Executor.h>
   
   #ifdef PEGASUS_OS_PASE
   # include <ILEWrapper/ILEUtilities2.h>
   # include <ILEWrapper/qumemultiutil.h>
   #endif
   
 PEGASUS_USING_PEGASUS; PEGASUS_USING_PEGASUS;
 PEGASUS_USING_STD; PEGASUS_USING_STD;
  
 #define PEGASUS_PROCESS_NAME "cimserver";  
   
 //Windows service variables are not defined elsewhere in the product //Windows service variables are not defined elsewhere in the product
 //enable ability to override these //enable ability to override these
 #ifndef PEGASUS_SERVICE_NAME #ifndef PEGASUS_SERVICE_NAME
Line 137 
Line 138 
 #define PEGASUS_SERVICE_DESCRIPTION "Pegasus CIM Object Manager Service"; #define PEGASUS_SERVICE_DESCRIPTION "Pegasus CIM Object Manager Service";
 #endif #endif
  
   #ifdef PEGASUS_OS_PASE
   #include <as400_protos.h> //for _SETCCSID
   #endif
   
 class CIMServerProcess : public ServerProcess class CIMServerProcess : public ServerProcess
 { {
 public: public:
  
     CIMServerProcess(void)      CIMServerProcess()
     {     {
         cimserver_set_process(this);         cimserver_set_process(this);
     }     }
  
     virtual ~CIMServerProcess(void)      virtual ~CIMServerProcess()
     {     {
     }     }
  
Line 186 
Line 191 
         return PEGASUS_PROCESS_NAME;         return PEGASUS_PROCESS_NAME;
     }     }
  
     //defined in Constants.h  
     virtual const char* getPIDFileName() const  
     {  
         return PEGASUS_CIMSERVER_START_FILE;  
     }  
   
     int cimserver_run(     int cimserver_run(
         int argc,         int argc,
         char** argv,         char** argv,
         Boolean shutdownOption,         Boolean shutdownOption,
         Boolean debugOutputOption);         Boolean debugOutputOption);
  
     void cimserver_stop(void);      void cimserver_stop();
 }; };
  
   ServerRunStatus _serverRunStatus(
       PEGASUS_PROCESS_NAME, PEGASUS_CIMSERVER_START_FILE);
 AutoPtr<CIMServerProcess> _cimServerProcess(new CIMServerProcess()); AutoPtr<CIMServerProcess> _cimServerProcess(new CIMServerProcess());
 static CIMServer* _cimServer = 0; static CIMServer* _cimServer = 0;
 static Monitor* _monitor = 0;  
 static Thread* dummyInitialThread = 0; static Thread* dummyInitialThread = 0;
   
 // //
 //  The command name. //  The command name.
 // //
Line 232 
Line 233 
  
 static const char OPTION_DEBUGOUTPUT = 'X'; static const char OPTION_DEBUGOUTPUT = 'X';
  
 static const String PROPERTY_TIMEOUT = "shutdownTimeout";  
   
 ConfigManager*    configManager;  
   
 /** GetOptions function - This function defines the Options Table /** GetOptions function - This function defines the Options Table
     and sets up the options from that table using the config manager.     and sets up the options from that table using the config manager.
   
       Some possible exceptions:  NoSuchFile, FileNotReadable, CannotRenameFile,
       ConfigFileSyntaxError, UnrecognizedConfigProperty, InvalidPropertyValue,
       CannotOpenFile.
 */ */
 void GetOptions( void GetOptions(
     ConfigManager* cm,     ConfigManager* cm,
     int& argc,     int& argc,
     char** argv,     char** argv,
     const Boolean& shutdownOption)      Boolean shutdownOption)
 {  
     try  
     {     {
         if (shutdownOption)         if (shutdownOption)
         {         {
Line 265 
Line 264 
         // Enable updates again         // Enable updates again
         cm->useConfigFiles = true;         cm->useConfigFiles = true;
     }     }
     catch (NoSuchFile&)  
     {  
         throw;  
     }  
     catch (FileNotReadable&)  
     {  
         throw;  
     }  
     catch (CannotRenameFile&)  
     {  
         throw;  
     }  
     catch (ConfigFileSyntaxError&)  
     {  
         throw;  
     }  
     catch(UnrecognizedConfigProperty&)  
     {  
         throw;  
     }  
     catch(InvalidPropertyValue&)  
     {  
         throw;  
     }  
     catch (CannotOpenFile&)  
     {  
         throw;  
     }  
 }  
  
 /* PrintHelp - This is temporary until we expand the options manager to allow /* PrintHelp - This is temporary until we expand the options manager to allow
    options help to be defined with the OptionRow entries and presented from    options help to be defined with the OptionRow entries and presented from
Line 312 
Line 282 
     usage.append ("    -D [home]       - sets pegasus home directory\n");     usage.append ("    -D [home]       - sets pegasus home directory\n");
 #endif #endif
 #if defined(PEGASUS_OS_TYPE_WINDOWS) #if defined(PEGASUS_OS_TYPE_WINDOWS)
     usage.append ("    -install [name] - installs pegasus as a Windows Service\n");      usage.append("    -install [name] - installs pegasus as a Windows "
     usage.append ("                      [name] is optional and overrides the\n");          "Service\n");
       usage.append("                      [name] is optional and overrides "
           "the\n");
     usage.append ("                      default CIM Server Service Name\n");     usage.append ("                      default CIM Server Service Name\n");
     usage.append ("                      by appending [name]\n");     usage.append ("                      by appending [name]\n");
     usage.append ("    -remove [name]  - removes pegasus as a Windows Service\n");      usage.append("    -remove [name]  - removes pegasus as a Windows "
     usage.append ("                      [name] is optional and overrides the\n");          "Service\n");
       usage.append("                      [name] is optional and overrides "
           "the\n");
     usage.append ("                      default CIM Server Service Name\n");     usage.append ("                      default CIM Server Service Name\n");
     usage.append ("                      by appending [name]\n");     usage.append ("                      by appending [name]\n");
     usage.append ("    -start [name]   - starts pegasus as a Windows Service\n");     usage.append ("    -start [name]   - starts pegasus as a Windows Service\n");
     usage.append ("                      [name] is optional and overrides the\n");      usage.append("                      [name] is optional and overrides "
           "the\n");
     usage.append ("                      default CIM Server Service Name\n");     usage.append ("                      default CIM Server Service Name\n");
     usage.append ("                      by appending [name]\n");     usage.append ("                      by appending [name]\n");
     usage.append ("    -stop [name]    - stops pegasus as a Windows Service\n");     usage.append ("    -stop [name]    - stops pegasus as a Windows Service\n");
     usage.append ("                      [name] is optional and overrides the\n");      usage.append("                      [name] is optional and overrides "
           "the\n");
     usage.append ("                      default CIM Server Service Name\n");     usage.append ("                      default CIM Server Service Name\n");
     usage.append ("                      by appending [name]\n\n");     usage.append ("                      by appending [name]\n\n");
 #endif #endif
     usage.append ("  configProperty=value\n");     usage.append ("  configProperty=value\n");
     usage.append ("                    - sets CIM Server configuration property\n");      usage.append("                    - sets CIM Server configuration "
           "property\n");
  
     cout << endl;     cout << endl;
     cout << _cimServerProcess->getProductName() << " " << _cimServerProcess->getCompleteVersion() << endl;      cout << _cimServerProcess->getProductName() << " " <<
           _cimServerProcess->getCompleteVersion() << endl;
     cout << endl;     cout << endl;
  
 #if defined(PEGASUS_OS_TYPE_WINDOWS) #if defined(PEGASUS_OS_TYPE_WINDOWS)
     MessageLoaderParms parms("src.Server.cimserver.MENU.WINDOWS", usage);     MessageLoaderParms parms("src.Server.cimserver.MENU.WINDOWS", usage);
 #elif defined(PEGASUS_USE_RELEASE_DIRS) #elif defined(PEGASUS_USE_RELEASE_DIRS)
     MessageLoaderParms parms("src.Server.cimserver.MENU.HPUXLINUXIA64GNU", usage);      MessageLoaderParms parms(
           "src.Server.cimserver.MENU.HPUXLINUXIA64GNU",
           usage);
 #else #else
     MessageLoaderParms parms("src.Server.cimserver.MENU.STANDARD", usage);     MessageLoaderParms parms("src.Server.cimserver.MENU.STANDARD", usage);
 #endif #endif
     cout << MessageLoader::getMessage(parms) << endl;     cout << MessageLoader::getMessage(parms) << endl;
 } }
  
 //This needs to be called at various points in the code depending on the platform and error conditions.  // This needs to be called at various points in the code depending on the
 //We need to delete the _cimServer reference on exit in order for the destructors to get called.  // platform and error conditions.
   // We need to delete the _cimServer reference on exit in order for the
   // destructors to get called.
 void deleteCIMServer() void deleteCIMServer()
 { {
     if (_cimServer)  
     {  
         delete _cimServer;         delete _cimServer;
         _cimServer = 0;         _cimServer = 0;
  
 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_OS_LINUX) \  
 || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || defined(PEGASUS_OS_AIX) \  
 || defined(PEGASUS_OS_SOLARIS) || defined(PEGASUS_OS_VMS)  
         //  
         //  Remove the PID file to indicate CIMServer termination  
         //  
         FileSystem::removeFile(_cimServerProcess->getPIDFileName());  
 #endif  
     }  
     delete _monitor;  
    if (dummyInitialThread)    if (dummyInitialThread)
    {    {
         Thread::clearLanguages();         Thread::clearLanguages();
Line 372 
Line 342 
    }    }
 } }
  
 // l10n  
 // //
 // Dummy function for the Thread object associated with the initial thread. // Dummy function for the Thread object associated with the initial thread.
 // Since the initial thread is used to process CIM requests, this is // Since the initial thread is used to process CIM requests, this is
Line 381 
Line 350 
 // //
 ThreadReturnType PEGASUS_THREAD_CDECL dummyThreadFunc(void *parm) ThreadReturnType PEGASUS_THREAD_CDECL dummyThreadFunc(void *parm)
 { {
    return((ThreadReturnType)0);      return (ThreadReturnType)0;
 } }
  
 //  #ifdef PEGASUS_ENABLE_PRIVILEGE_SEPARATION
 //  Waits until either the CIM Server has terminated, or the shutdown timeout  
 //  has expired.  If the shutdown timeout has expired, and the CIM Server is  
 //  still running, kills the cimserver process.  
 //  
 void _waitForTerminationOrTimeout (Uint32 maxWaitTime)  
 {  
     //  
     //  If the CIM Server is still running, and the shutdown timeout has not  
     //  expired, loop and wait one second until either the CIM Server has  
     //  terminated, or the shutdown timeout has expired  
     //  
     Boolean running = _cimServerProcess->isCIMServerRunning ();  
     while (running && (maxWaitTime > 0))  
     {  
         System::sleep (1);  
         running = _cimServerProcess->isCIMServerRunning ();  
         maxWaitTime--;  
     }  
  
     //  static int _extractExecutorSockOpt(int& argc, char**& argv)
     //  If the shutdown timeout has expired, and the CIM Server is still  
     //  running, kill the cimserver process  
     //  
     if (running)  
     {     {
         int kill_rc = _cimServerProcess->cimserver_kill (0);      // Extract the "--executor-socket <sock>" option if any. This indicates
       // that the e[x]ecutor is running. The option argument is the socket used
       // to communicate with the executor. Remove the option from the
       // argv list and decrease argc by two.
  
 #ifdef PEGASUS_OS_OS400      int sock = -1;
         if (kill_rc == -1)      const char OPT[] = "--executor-socket";
   
       for (int i = 1; i < argc; i++)
         {         {
             _cimServerProcess->cimserver_exitRC (2);          if (strcmp(argv[i], OPT) == 0)
         }          {
         _cimServerProcess->cimserver_exitRC (1);              // Check for missing option argument.
 #endif  
  
 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) \              if (i + 1 == argc)
 || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || defined(PEGASUS_OS_SOLARIS) \  
 || defined (PEGASUS_OS_VMS)  
         if (kill_rc != -1)  
         {         {
             //l10n - TODO                  MessageLoaderParms parms(
             Logger::put_l (Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,                      "src.Server.cimserver.MISSING_OPTION_ARGUMENT",
                 "src.Server.cimserver.TIMEOUT_EXPIRED_SERVER_KILLED",                      "Missing argument for $0 option.",
                 "Shutdown timeout expired.  Forced shutdown initiated.");                      OPT);
             MessageLoaderParms parms                  cerr << argv[0] << ": " << MessageLoader::getMessage(parms) <<
                 ("src.Server.cimserver.TIMEOUT_EXPIRED_SERVER_KILLED",                      endl;
                 "Shutdown timeout expired.  Forced shutdown initiated.");                  exit(1);
             cout << MessageLoader::getMessage(parms) << endl;  
             exit (0);  
         }  
 #endif  
     }  
 } }
  
 void shutdownCIMOM(Uint32 timeoutValue)              // Convert argument to positive integer.
 {  
     //  
     // Create CIMClient object  
     //  
     CIMClient client;  
  
     //              char* end;
     // Get local host name              unsigned long x = strtoul(argv[i+1], &end, 10);
     //  
     String hostStr = System::getHostName();  
  
     //              // Check whether option argument will fit in a signed integer.
     // open connection to CIMOM  
     //  
     try  
     {  
         client.connectLocal();  
  
         //              if (*end != '\0' || x > 2147483647)
         // set client timeout to 2 seconds  
         //  
         client.setTimeout(2000);  
     }  
     catch(Exception&)  
     {     {
 #ifdef PEGASUS_OS_OS400                  MessageLoaderParms parms(
     //l10n                      "src.Server.cimserver.BAD_OPTION_ARGUMENT",
     //Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,                      "Bad $0 option argument: $1.",
             //"Unable to connect to CIM Server.  CIM Server may not be running." );                      OPT,
     Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,                      argv[i+1]);
             "src.Server.cimserver.UNABLE_CONNECT_SERVER_MAY_NOT_BE_RUNNING",                  cerr << argv[0] << ": " << MessageLoader::getMessage(parms) <<
             "Unable to connect to CIM Server.  CIM Server may not be running." );                      endl;
     // The server job may still be active but not responding.  
     // Kill the job if it exists.  
     if(_cimServerProcess->cimserver_kill(0) == -1)  
        _cimServerProcess->cimserver_exitRC(2);  
     _cimServerProcess->cimserver_exitRC(1);  
 #else  
         //l10n  
         //PEGASUS_STD(cerr) << "Unable to connect to CIM Server." << PEGASUS_STD(endl);  
         //PEGASUS_STD(cerr) << "CIM Server may not be running." << PEGASUS_STD(endl);  
         MessageLoaderParms parms("src.Server.cimserver.UNABLE_CONNECT_SERVER_MAY_NOT_BE_RUNNING",  
                                                          "Unable to connect to CIM Server.\nCIM Server may not be running.\n");  
         PEGASUS_STD(cerr) << MessageLoader::getMessage(parms);  
         exit(1);         exit(1);
 #endif  
     }     }
  
     try              sock = int(x);
     {  
         //  
         // construct CIMObjectPath  
         //  
         String referenceStr = "//";  
         referenceStr.append(hostStr);  
         referenceStr.append("/");  
         referenceStr.append(PEGASUS_NAMESPACENAME_SHUTDOWN.getString());  
         referenceStr.append(":");  
         referenceStr.append(PEGASUS_CLASSNAME_SHUTDOWN.getString());  
         CIMObjectPath reference(referenceStr);  
   
         //  
         // issue the invokeMethod request on the shutdown method  
         //  
         Array<CIMParamValue> inParams;  
         Array<CIMParamValue> outParams;  
   
         // set force option to true for now  
         inParams.append(CIMParamValue("force",  
             CIMValue(Boolean(true))));  
   
         inParams.append(CIMParamValue("timeout",  
             CIMValue(Uint32(timeoutValue))));  
  
         CIMValue retValue = client.invokeMethod(              // Remove "-x <sock>" from argv-argc.
             PEGASUS_NAMESPACENAME_SHUTDOWN,  
             reference,  
             "shutdown",  
             inParams,  
             outParams);  
     }  
     catch(CIMException& e)  
     {  
 #ifdef PEGASUS_OS_OS400  
  
     if (e.getCode() == CIM_ERR_INVALID_NAMESPACE)              memmove(argv + i, argv + i + 2, sizeof(char*) * (argc - i - 1));
     {              argc -= 2;
         //l10n              break;
         //Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,  
             //"Failed to shutdown server: $0", "The repository may be empty.");  
         Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,  
             "src.Server.cimserver.SHUTDOWN_FAILED_REPOSITORY_EMPTY",  
             "Error in server shutdown: The repository may be empty.");  
     }  
     else  
     {  
         //l10n  
         //Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,  
             //"Failed to shutdown server: $0", e.getMessage());  
         Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,  
             "src.Server.cimserver.SHUTDOWN_FAILED",  
             "Error in server shutdown: $0", e.getMessage());  
     }  
     // Kill the server job.  
     if(_cimServerProcess->cimserver_kill(0) == -1)  
        _cimServerProcess->cimserver_exitRC(2);  
 #else  
         //l10n - TODO  
         MessageLoaderParms parms("src.Server.cimserver.SHUTDOWN_FAILED",  
                                  "Error in server shutdown: ");  
         PEGASUS_STD(cerr) << MessageLoader::getMessage(parms);  
         if (e.getCode() == CIM_ERR_INVALID_NAMESPACE)  
         {  
             //  
             // Repository may be empty.  
             //  
             //l10n - TODO  
             Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,  
                 "src.Server.cimserver.SHUTDOWN_FAILED_REPOSITORY_EMPTY",  
                 "Error in server shutdown: The repository may be empty.");  
             MessageLoaderParms parms("src.Server.cimserver.REPOSITORY_EMPTY",  
                                      "The repository may be empty.");  
             PEGASUS_STD(cerr) << MessageLoader::getMessage(parms) << PEGASUS_STD(endl);  
         }         }
         else  
         {  
             //l10n - TODO  
             Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,  
                 "src.Server.cimserver.SHUTDOWN_FAILED",  
                 "Error in server shutdown: $0", e.getMessage());  
             PEGASUS_STD(cerr) << e.getMessage() << PEGASUS_STD(endl);  
         }         }
  
     // Kill the cimserver process      if (sock == -1)
     if (_cimServerProcess->cimserver_kill(0) == 0)  
         {         {
             //l10n - TODO          MessageLoaderParms parms(
             Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,              "src.Server.cimserver.MISSING_OPTION",
                 "src.Server.cimserver.SERVER_FORCED_SHUTDOWN",              "Missing $0 option.",
             "Forced shutdown initiated.");              OPT);
             MessageLoaderParms parms("src.Server.cimserver.SERVER_FORCED_SHUTDOWN",          cerr << argv[0] << ": " << MessageLoader::getMessage(parms) << endl;
                                      "Forced shutdown initiated.");  
             PEGASUS_STD(cerr) << MessageLoader::getMessage(parms) << PEGASUS_STD(endl);  
         }  
         exit(1);         exit(1);
 #endif  
     }  
     catch(Exception&)  
     {  
         //  
         // This may mean that the CIM Server has terminated, causing this  
         // client to get a "Empty HTTP response message" exception.  It may  
         // also mean that the CIM Server is taking longer than 2 seconds  
         // (client timeout value) to terminate, causing this client to  
         // timeout with a "connection timeout" exception.  
         //  
         //  Wait until either the CIM Server has terminated, or the shutdown  
         //  timeout has expired.  If the timeout has expired and the CIM Server  
         //  is still running, kill the cimserver process.  
         //  
         _waitForTerminationOrTimeout (timeoutValue - 2);  
     }     }
  
     //      return sock;
     //  InvokeMethod succeeded.  
     //  Wait until either the CIM Server has terminated, or the shutdown  
     //  timeout has expired.  If the timeout has expired and the CIM Server  
     //  is still running, kill the cimserver process.  
     //  
     _waitForTerminationOrTimeout (timeoutValue);  
     return;  
 } }
  
   #endif /* PEGASUS_ENABLE_PRIVILEGE_SEPARATION */
  
 ///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
 //  MAIN //  MAIN
 ////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
   
 int main(int argc, char** argv) int main(int argc, char** argv)
 { {
     String pegasusHome;     String pegasusHome;
     Boolean shutdownOption = false;     Boolean shutdownOption = false;
     Boolean debugOutputOption = false;     Boolean debugOutputOption = false;
  
 //l10n  
 // Set Message loading to process locale // Set Message loading to process locale
 MessageLoader::_useProcessLocale = true; MessageLoader::_useProcessLocale = true;
 //l10n  
  
 //l10n  #ifdef PEGASUS_OS_ZOS
 #if defined(PEGASUS_OS_AIX) && defined(PEGASUS_HAS_MESSAGES)      // Direct standard input to /dev/null,
 setlocale(LC_ALL, "");      close(STDIN_FILENO);
 #endif      open("/dev/null", O_RDONLY);
   
 #ifdef PEGASUS_OS_OS400  
   
   VFYPTRS_INCDCL;               // VFYPTRS local variables  
   
   // verify pointers  
   #pragma exception_handler (qsyvp_excp_hndlr,qsyvp_excp_comm_area,\  
     0,_C2_MH_ESCAPE)  
     for( int arg_index = 1; arg_index < argc; arg_index++ ){  
     VFYPTRS(VERIFY_SPP_NULL(argv[arg_index]));  
     }  
   #pragma disable_handler  
  
     // Convert the args to ASCII      if ( setEBCDICEncoding(STDOUT_FILENO)==-1 ||
     for(Uint32 i = 0;i< argc;++i)           setEBCDICEncoding(STDERR_FILENO)==-1 )
     {     {
     EtoA(argv[i]);         PEG_TRACE_CSTRING(TRC_SERVER,Tracer::LEVEL4,
              "Coud not set stdout or stderr to EBCDIC encoding.");
     }     }
       // Need to initialize timezone information in the
     // Initialize Pegasus home to the shipped OS/400 directory.      // initial processing thread (IPT)
     pegasusHome = OS400_DEFAULT_PEGASUS_HOME;      tzset();
 #endif #endif
  
   #if defined(PEGASUS_OS_AIX) && defined(PEGASUS_HAS_MESSAGES)
       setlocale(LC_ALL, "");
   #endif
  
 #ifndef PEGASUS_OS_TYPE_WINDOWS #ifndef PEGASUS_OS_TYPE_WINDOWS
     //     //
     // Get environment variables:     // Get environment variables:
     //     //
 #ifdef PEGASUS_OS_OS400  
 #pragma convert(37)  
     const char* tmp = getenv("PEGASUS_HOME");  
 #pragma convert(0)  
     char home[256] = {0};  
     if (tmp && strlen(tmp) < 256)  
     {  
     strcpy(home, tmp);  
     EtoA(home);  
     pegasusHome = home;  
     }  
 #else  
   #if defined(PEGASUS_OS_AIX) && defined(PEGASUS_USE_RELEASE_DIRS)   #if defined(PEGASUS_OS_AIX) && defined(PEGASUS_USE_RELEASE_DIRS)
     pegasusHome = AIX_RELEASE_PEGASUS_HOME;     pegasusHome = AIX_RELEASE_PEGASUS_HOME;
   #elif !defined(PEGASUS_USE_RELEASE_DIRS) || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM)  # elif defined(PEGASUS_OS_PASE)
       const char *tmp = getenv("PEGASUS_HOME");
       pegasusHome = (tmp == 0) ? PASE_DEFAULT_PEGASUS_HOME : tmp;
   # elif !defined(PEGASUS_USE_RELEASE_DIRS) || \
       defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM)
     const char* tmp = getenv("PEGASUS_HOME");     const char* tmp = getenv("PEGASUS_HOME");
  
     if (tmp)     if (tmp)
Line 682 
Line 477 
         pegasusHome = tmp;         pegasusHome = tmp;
     }     }
   #endif   #endif
 #endif  
  
     FileSystem::translateSlashes(pegasusHome);     FileSystem::translateSlashes(pegasusHome);
 #else #else
Line 692 
Line 486 
   pegasusHome = _cimServerProcess->getHome();   pegasusHome = _cimServerProcess->getHome();
 #endif #endif
  
   #ifdef PEGASUS_ENABLE_PRIVILEGE_SEPARATION
   
       // If invoked with "--executor-socket <socket>" option, then use executor.
   
       Executor::setSock(_extractExecutorSockOpt(argc, argv));
   
       // Ping executor to verify the specified socket is valid.
   
       if (Executor::ping() != 0)
       {
           MessageLoaderParms parms("src.Server.cimserver.EXECUTOR_PING_FAILED",
               "Failed to ping the executor on the specified socket.");
           cerr << argv[0] << ": " << MessageLoader::getMessage(parms) << endl;
           exit(1);
       }
   
   #endif /* !defined(PEGASUS_ENABLE_PRIVILEGE_SEPARATION) */
   
         // Get help, version, and shutdown options         // Get help, version, and shutdown options
  
         for (int i = 1; i < argc; )         for (int i = 1; i < argc; )
         {         {
             const char* arg = argv[i];             const char* arg = argv[i];
             if(String::equal(arg,"--help"))              if (strcmp(arg, "--help") == 0)
             {             {
                     PrintHelp(argv[0]);                     PrintHelp(argv[0]);
                   Executor::daemonizeExecutor();
                     exit(0);                     exit(0);
             }             }
             else if(String::equal(arg,"--version"))              else if (strcmp(arg, "--version") == 0)
             {             {
                 cout << _cimServerProcess->getCompleteVersion() << endl;                 cout << _cimServerProcess->getCompleteVersion() << endl;
                   Executor::daemonizeExecutor();
                 exit(0);                 exit(0);
             }             }
             // Check for -option             // Check for -option
Line 720 
Line 534 
                     strlen(option) == 1)                     strlen(option) == 1)
                 {                 {
                     cout << _cimServerProcess->getCompleteVersion() << endl;                     cout << _cimServerProcess->getCompleteVersion() << endl;
                       Executor::daemonizeExecutor();
                     exit(0);                     exit(0);
                 }                 }
                 //                 //
Line 729 
Line 544 
                         (strlen(option) == 1))                         (strlen(option) == 1))
                 {                 {
                     PrintHelp(argv[0]);                     PrintHelp(argv[0]);
                       Executor::daemonizeExecutor();
                     exit(0);                     exit(0);
                 }                 }
 #if !defined(PEGASUS_USE_RELEASE_DIRS) #if !defined(PEGASUS_USE_RELEASE_DIRS)
Line 741 
Line 557 
                     }                     }
                     else                     else
                     {                     {
                         //l10n  
                         //cout << "Missing argument for option -" << option << endl;  
                         String opt(option);                         String opt(option);
                         MessageLoaderParms parms("src.Server.cimserver.MISSING_ARGUMENT",                          MessageLoaderParms parms(
                               "src.Server.cimserver.MISSING_ARGUMENT",
                                          "Missing argument for option -$0",                                          "Missing argument for option -$0",
                                          opt);                                          opt);
                         cout << MessageLoader::getMessage(parms) << endl;                         cout << MessageLoader::getMessage(parms) << endl;
                         exit(0);                          exit(1);
                     }                     }
  
                     memmove(&argv[i], &argv[i + 2], (argc-i-1) * sizeof(char*));                     memmove(&argv[i], &argv[i + 2], (argc-i-1) * sizeof(char*));
Line 787 
Line 602 
                     //                     //
                     if (shutdownOption)                     if (shutdownOption)
                     {                     {
                         //l10n                          MessageLoaderParms parms(
                         //cout << "Duplicate shutdown option specified." << endl;                              "src.Server.cimserver.DUPLICATE_SHUTDOWN_OPTION",
                         MessageLoaderParms parms("src.Server.cimserver.DUPLICATE_SHUTDOWN_OPTION",  
                                                  "Duplicate shutdown option specified.");                                                  "Duplicate shutdown option specified.");
  
                         cout << MessageLoader::getMessage(parms) << endl;                         cout << MessageLoader::getMessage(parms) << endl;
                         exit(0);                          exit(1);
                     }                     }
  
                     shutdownOption = true;                     shutdownOption = true;
Line 846 
Line 660 
     Boolean shutdownOption,     Boolean shutdownOption,
     Boolean debugOutputOption)     Boolean debugOutputOption)
 { {
     String logsDirectory;  
     Boolean daemonOption = false;     Boolean daemonOption = false;
  
     //  #if defined (PEGASUS_OS_PASE) && !defined (PEGASUS_DEBUG)
     // Get an instance of the Config Manager.      // PASE have itself regular for checking privileged user
     //      if (!System::isPrivilegedUser("*CURRENT  "))
     configManager = ConfigManager::getInstance();  
     configManager->useConfigFiles = true;  
   
 #ifdef PEGASUS_OS_OS400  
     // In a special startup case for IBM OS400, when the server is  
     // automatically started when the machine starts up the config  
     // file cannot be read because of access restrictions for the  
     // user starting the server.  In this case, we need to skip  
     // reading the config options and therefore any use of the config  
     // manager also.  To make this determinations we will check to see  
     // if the daemon flag is set to true.  If so, then there will be a  
     // series of checks to bracket all the calls to the configManager  
     // which would otherwise fail.  All this will only be done for  
     // IBM OS400.  
   
     Boolean os400StartupOption = false;  
     // loop through args to check for daemon=true  
     for (int i=1; i < argc; i++)  
       if (strcmp(argv[i], "daemon=true") == 0)  
       {       {
         os400StartupOption = true;          MessageLoaderParms parms(
         daemonOption = true;                  "src.Server.cimserver.NO_AUTHORITY.PEGASUS_OS_PASE",
                   "The caller should be a privileged user,"
                   " or the server will not run.");
           cerr << MessageLoader::getMessage(parms) << endl;
           exit (1);
       }       }
       char jobName[11];
     if (!os400StartupOption)      // this function only can be found in PASE environment
       umeGetJobName(jobName, false);
       if (strncmp("QUMECIMOM ", jobName, 10) != 0
               && strncmp("QUMEENDCIM", jobName, 10) != 0)
     {     {
         // If this is the server job, then set the job          MessageLoaderParms parms(
         // to save the job log.                  "src.Server.cimserver.NOT_OFFICIAL_START.PEGASUS_OS_PASE",
         system ("QSYS/CHGJOB JOB(*) LOG(4 00 *SECLVL)");                  "cimserver can not be started by user.\nServer will not run.");
           cerr << MessageLoader::getMessage(parms) << endl;
           exit (1);
     }     }
   
       // Direct standard input, output, and error to /dev/null,
       // PASE run this job in background, any output in not allowed
       freopen("/dev/null", "r", stdin);
       freopen("/dev/null", "w", stdout);
       freopen("/dev/null", "w", stderr);
 #endif #endif
  
     //     //
     // Get options (from command line and from configuration file); this      // Get an instance of the Config Manager.
     // removes corresponding options and their arguments from the command  
     // line.  
     //     //
       ConfigManager* configManager = ConfigManager::getInstance();
       configManager->useConfigFiles = true;
   
     try     try
     {     {
 #ifdef PEGASUS_OS_OS400          //
     if (os400StartupOption == false)          // Get options (from command line and from configuration file); this
 #endif          // removes corresponding options and their arguments from the command
         // If current process is "cimserver -s" (shutdown option = true) the contents          // line.  NOTE: If shutdownOption=true, the contents of current config
         // of current config should not be overwriten by planned config          // file are not overwritten by the planned config file.
           //
         GetOptions(configManager, argc, argv, shutdownOption);         GetOptions(configManager, argc, argv, shutdownOption);
     }  
     catch (Exception& e)  
     {  
         Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,  
             "src.Server.cimserver.SERVER_NOT_STARTED",  
             "cimserver not started:  $0", e.getMessage());  
   
 #if !defined(PEGASUS_OS_OS400)  
         MessageLoaderParms parms("src.Server.cimserver.SERVER_NOT_STARTED",  
             "cimserver not started: $0", e.getMessage());  
   
         PEGASUS_STD(cerr) << argv[0] << ": " << MessageLoader::getMessage(parms)  
             << PEGASUS_STD(endl);  
 #endif  
  
         return(1);          //
     }          // Initialize the message home directory in the MessageLoader.
           // This is the default directory where the resource bundles are found.
 // l10n          //
     // Set the home directory, msg sub-dir, into the MessageLoader.  
     // This will be the default directory where the resource bundles  
     // are found.  
     MessageLoader::setPegasusMsgHome(ConfigManager::getHomedPath(     MessageLoader::setPegasusMsgHome(ConfigManager::getHomedPath(
         ConfigManager::getInstance()->getCurrentValue("messageDir")));         ConfigManager::getInstance()->getCurrentValue("messageDir")));
  
 #ifdef PEGASUS_OS_OS400  #ifdef PEGASUS_OS_PASE
     // Still need to declare and set the connection variables.      // set ccsid to unicode for entire job
     // Will initialize to false since they are fixed at false for OS400.      // ccsid is globolization mechanism in PASE environment
       if (_SETCCSID(1208) == -1)
     // NOTE:  OS400 is a LOCAL_DOMAIN_SOCKET, so a few lines down  
     // the test will not be compiled in.  If OS400 ever turns off that  
     // define, then we will need to change this code path to insure that  
     // one of the variables is true.  
     Boolean enableHttpConnection = false;  
     Boolean enableHttpsConnection = false;  
   
     if (os400StartupOption == false)  
     {     {
       enableHttpConnection = ConfigManager::parseBooleanValue(          MessageLoaderParms parms(
           configManager->getCurrentValue("enableHttpConnection"));                  "src.Server.cimserver.SET_CCSID_ERROR.PEGASUS_OS_PASE",
       enableHttpsConnection = ConfigManager::parseBooleanValue(                  "Failed to set CCSID, server will stop.");
           configManager->getCurrentValue("enableHttpsConnection"));          cerr << MessageLoader::getMessage(parms) << endl;
           Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::FATAL,
                   "src.Server.cimserver.SET_CCSID_ERROR.PEGASUS_OS_PASE",
                   "Failed to set CCSID, server will stop.\n");
           exit (1);
     }     }
 #else  
       char fullJobName[29];
       umeGetJobName(fullJobName, true);
       Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,
               "src.Server.cimserver.SERVER_JOB_NAME.PEGASUS_OS_PASE",
               "CIM Server's Job Name is: $0", fullJobName);
   #endif
   
     Boolean enableHttpConnection = ConfigManager::parseBooleanValue(     Boolean enableHttpConnection = ConfigManager::parseBooleanValue(
         configManager->getCurrentValue("enableHttpConnection"));         configManager->getCurrentValue("enableHttpConnection"));
     Boolean enableHttpsConnection = ConfigManager::parseBooleanValue(     Boolean enableHttpsConnection = ConfigManager::parseBooleanValue(
         configManager->getCurrentValue("enableHttpsConnection"));         configManager->getCurrentValue("enableHttpsConnection"));
 #endif  
  
     // Make sure at least one connection is enabled     // Make sure at least one connection is enabled
 #ifdef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET #ifdef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET
Line 957 
Line 753 
             //"CIMServer will not be started.");             //"CIMServer will not be started.");
         Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,         Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,
             "src.Server.cimserver.HTTP_NOT_ENABLED_SERVER_NOT_STARTING",             "src.Server.cimserver.HTTP_NOT_ENABLED_SERVER_NOT_STARTING",
             "Neither HTTP nor HTTPS connection is enabled.  CIMServer will not be started.");              "Neither HTTP nor HTTPS connection is enabled."
               "  CIMServer will not be started.");
         //cerr << "Neither HTTP nor HTTPS connection is enabled.  "         //cerr << "Neither HTTP nor HTTPS connection is enabled.  "
             //"CIMServer will not be started." << endl;             //"CIMServer will not be started." << endl;
         MessageLoaderParms parms("src.Server.cimserver.HTTP_NOT_ENABLED_SERVER_NOT_STARTING",          MessageLoaderParms parms(
                                  "Neither HTTP nor HTTPS connection is enabled.  CIMServer will not be started.");                  "src.Server.cimserver.HTTP_NOT_ENABLED_SERVER_NOT_STARTING",
                   "Neither HTTP nor HTTPS connection is enabled."
                   "  CIMServer will not be started.");
         cerr << MessageLoader::getMessage(parms) << endl;         cerr << MessageLoader::getMessage(parms) << endl;
         return(1);         return(1);
     }     }
 #endif #endif
   
     try  
     {  
         //         //
         // Check to see if we should start Pegasus as a daemon         // Check to see if we should start Pegasus as a daemon
         //         //
   
         daemonOption = ConfigManager::parseBooleanValue(         daemonOption = ConfigManager::parseBooleanValue(
             configManager->getCurrentValue("daemon"));             configManager->getCurrentValue("daemon"));
  
 #ifdef PEGASUS_OS_OS400          if ((Executor::detectExecutor() == 0) && (daemonOption == false))
     if (os400StartupOption == false)  
     {     {
 #endif              MessageLoaderParms parms(
         // Get the log file directory definition.                  "src.Server.cimserver.PRIVSEP_REQUIRES_DAEMON",
         // We put String into Cstring because                  "Warning: The configuration setting daemon=false is ignored "
         // Directory functions only handle Cstring.                      "with privilege separation enabled.");
         // ATTN-KS: create String based directory functions.              cerr << MessageLoader::getMessage(parms) << endl;
               daemonOption = true;
           }
   
 #if !defined(PEGASUS_USE_SYSLOGS) #if !defined(PEGASUS_USE_SYSLOGS)
                 // When using syslog facility. No files anymore.          String logsDirectory = ConfigManager::getHomedPath(
         logsDirectory = configManager->getCurrentValue("logdir");              configManager->getCurrentValue("logdir"));
         logsDirectory =  
         ConfigManager::getHomedPath(configManager->getCurrentValue("logdir"));  
 #endif  
 #ifdef PEGASUS_OS_OS400  
     }  // end if (os400StartupOption == false)  
 #endif  
  
         // Set up the Logger. This does not open the logs          // Set up the Logger.  This does not open the logs.
         // Might be more logical to clean before set.         // Might be more logical to clean before set.
         // ATTN: Need tool to completely disable logging.  
   
 #if !defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_LINUX_IA64_GNU) && \  
 !defined(PEGASUS_OS_OS400) && !defined(PEGASUS_USE_SYSLOGS)  
         Logger::setHomeDirectory(logsDirectory);         Logger::setHomeDirectory(logsDirectory);
   
   # ifdef PEGASUS_OS_PASE
       /* write job log to tell where pegasus log is.*/
       if(logsDirectory.size() > 0)
           // this function only can be found in PASE environment
           logPegasusDir2joblog(logsDirectory.getCString());
       else
           logPegasusDir2joblog(".");
   # endif
 #endif #endif
  
         //         //
Line 1010 
Line 806 
         {         {
             String configTimeout =             String configTimeout =
                 configManager->getCurrentValue("shutdownTimeout");                 configManager->getCurrentValue("shutdownTimeout");
             Uint32 timeoutValue = strtol(configTimeout.getCString(), (char **)0, 10);              Uint32 timeoutValue =
 // To deregister Pegasus with SLP                  strtol(configTimeout.getCString(), (char **)0, 10);
 #ifdef PEGASUS_SLP_REG_TIMEOUT  
             unregisterPegasusFromSLP();  
 #endif  
  
             shutdownCIMOM(timeoutValue);              ServerShutdownClient serverShutdownClient(&_serverRunStatus);
               serverShutdownClient.shutdown(timeoutValue);
  
 #ifdef PEGASUS_OS_OS400              MessageLoaderParms parms(
         //l10n  
         //Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::INFORMATION,  
             //"CIM Server stopped.");  
         Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::INFORMATION,  
             "src.Server.cimserver.SERVER_STOPPED",             "src.Server.cimserver.SERVER_STOPPED",
             "CIM Server stopped.");             "CIM Server stopped.");
             cimserver_exitRC(0);  
 #else  
             //l10n  
             //cout << "CIM Server stopped." << endl;  
             MessageLoaderParms parms("src.Server.cimserver.SERVER_STOPPED",  
                                      "CIM Server stopped.");  
  
             cout << MessageLoader::getMessage(parms) << endl;             cout << MessageLoader::getMessage(parms) << endl;
             return(0);              return 0;
 #endif  
         }         }
  
 #if defined(PEGASUS_DEBUG)  #if defined(PEGASUS_DEBUG) && !defined(PEGASUS_USE_SYSLOGS)
         // Leave this in until people get familiar with the logs.         // Leave this in until people get familiar with the logs.
         //l10n  
         //cout << "Logs Directory = " << logsDirectory << endl;  
 #if !defined(PEGASUS_USE_SYSLOGS)  
         MessageLoaderParms parms("src.Server.cimserver.LOGS_DIRECTORY",         MessageLoaderParms parms("src.Server.cimserver.LOGS_DIRECTORY",
                                  "Logs Directory = ");                                  "Logs Directory = ");
         cout << MessageLoader::getMessage(parms) << logsDirectory << endl;         cout << MessageLoader::getMessage(parms) << logsDirectory << endl;
 #endif #endif
 #endif  
     }     }
     catch (UnrecognizedConfigProperty& e)      catch (Exception& e)
     {  
         // UnrecognizedConfigProperty is already translated  
         // thus, just output the message  
         Logger::put(Logger::ERROR_LOG,  
                     System::CIMSERVER,  
                     Logger::SEVERE,  
                     e.getMessage());  
 #ifndef PEGASUS_OS_OS400  
         cout << e.getMessage() << endl;  
 #endif  
     }  
     catch (Exception& ex)  
     {     {
         Logger::put(Logger::ERROR_LOG,          MessageLoaderParms parms("src.Server.cimserver.SERVER_NOT_STARTED",
                       System::CIMSERVER,              "cimserver not started: $0", e.getMessage());
                       Logger::SEVERE,          Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,
                       ex.getMessage());              MessageLoader::getMessage(parms));
 #ifndef PEGASUS_OS_OS400          cerr << MessageLoader::getMessage(parms) << endl;
         cout << ex.getMessage() << endl;  
 #endif          return 1;
         exit(1);      }
     }  
  
 #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) && defined(PEGASUS_ZOS_SECURITY) #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) && defined(PEGASUS_ZOS_SECURITY)
     startupCheckBPXServer(true);     startupCheckBPXServer(true);
Line 1078 
Line 844 
     startupEnableMSC();     startupEnableMSC();
 #endif #endif
  
     // Bug 2148 - Here is the order of operations for determining the server HTTP and HTTPS ports.  
     // 1) If the user explicitly specified a port, use it.  
     // 2) If the user did not specify a port, get the port from the services file.  
     // 3) If no value is specified in the services file, use the IANA WBEM default port.  
     // Note that 2 and 3 are done within the System::lookupPort method  
     // An empty string from the ConfigManager implies that the user did not specify a port.  
   
     Uint32 portNumberHttps=0;  
     Uint32 portNumberHttp=0;  
     Uint32 portNumberExportHttps=0;  
   
     if (enableHttpsConnection)  
     {  
         String httpsPort = configManager->getCurrentValue("httpsPort");  
         if (httpsPort == String::EMPTY)  
         {  
             //  
             // Look up the WBEM-HTTPS port number  
             //  
             portNumberHttps = System::lookupPort(WBEM_HTTPS_SERVICE_NAME, WBEM_DEFAULT_HTTPS_PORT);  
   
         } else  
         {  
             //  
             // user-specified  
             //  
             CString portString = httpsPort.getCString();  
             char* end = 0;  
             portNumberHttps = strtol(portString, &end, 10);  
             if(!(end != 0 && *end == '\0'))  
             {  
                 InvalidPropertyValue e("httpsPort", httpsPort);  
                 Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,  
                               "src.Server.cimserver.SERVER_NOT_STARTED",  
                               "cimserver not started:  $0", e.getMessage());  
 #if !defined(PEGASUS_OS_OS400)  
                 MessageLoaderParms parms("src.Server.cimserver.SERVER_NOT_STARTED",  
                                          "cimserver not started: $0", e.getMessage());  
                 PEGASUS_STD(cerr) << argv[0] << ": " << MessageLoader::getMessage(parms)  
                                   << PEGASUS_STD(endl);  
 #endif  
                 exit(1);  
             }  
         }  
     }  
   
     if (enableHttpConnection)  
     {  
         String httpPort = configManager->getCurrentValue("httpPort");  
         if (httpPort == String::EMPTY)  
         {  
             //  
             // Look up the WBEM-HTTP port number  
             //  
             portNumberHttp = System::lookupPort(WBEM_HTTP_SERVICE_NAME, WBEM_DEFAULT_HTTP_PORT);  
   
         } else  
         {  
             //  
             // user-specified  
             //  
             CString portString = httpPort.getCString();  
             char* end = 0;  
             portNumberHttp = strtol(portString, &end, 10);  
             if(!(end != 0 && *end == '\0'))  
             {  
                 InvalidPropertyValue e("httpPort", httpPort);  
                 Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,  
                               "src.Server.cimserver.SERVER_NOT_STARTED",  
                               "cimserver not started:  $0", e.getMessage());  
 #if !defined(PEGASUS_OS_OS400)  
                 MessageLoaderParms parms("src.Server.cimserver.SERVER_NOT_STARTED",  
                                              "cimserver not started: $0", e.getMessage());  
                 PEGASUS_STD(cerr) << argv[0] << ": " << MessageLoader::getMessage(parms)  
                                   << PEGASUS_STD(endl);  
 #endif  
                 exit(1);  
             }  
         }  
     }  
 #if defined(PEGASUS_DEBUG) #if defined(PEGASUS_DEBUG)
     // Put out startup up message.     // Put out startup up message.
     cout << _cimServerProcess->getProductName() << " " << _cimServerProcess->getCompleteVersion() << endl;      cout << _cimServerProcess->getProductName() << " " <<
     //l10n          _cimServerProcess->getCompleteVersion() << endl;
     //cout << "Built " << __DATE__ << " " << __TIME__ << endl;  
     //cout <<"Starting..."  
     MessageLoaderParms parms("src.Server.cimserver.STARTUP_MESSAGE",  
                              "Built $0 $1\nStarting...",  
                              __DATE__,  
                              __TIME__);  
 #endif #endif
  
 //l10n  
 // reset message loading to NON-process locale // reset message loading to NON-process locale
 MessageLoader::_useProcessLocale = false; MessageLoader::_useProcessLocale = false;
 //l10n  
  
     // Get the parent's PID before forking     // Get the parent's PID before forking
     _cimServerProcess->set_parent_pid(System::getPID());      _serverRunStatus.setParentPid(System::getPID());
  
     // do we need to run as a daemon ?      // Do not fork when using privilege separation (executor will daemonize
       // itself later).
     if (daemonOption)     if (daemonOption)
     {     {
         if(-1 == _cimServerProcess->cimserver_fork())         if(-1 == _cimServerProcess->cimserver_fork())
 #ifndef PEGASUS_OS_OS400              return -1;
     {  
         return(-1);  
     }  
 #else  
     {  
             return(-1);  
     }     }
     else  
     {  
         return(0);  
     }  
 #endif  
  
     }  
   
 // l10n  
     // Now we are after the fork...     // Now we are after the fork...
     // Create a dummy Thread object that can be used to store the     // Create a dummy Thread object that can be used to store the
     // AcceptLanguageList object for CIM requests that are serviced     // AcceptLanguageList object for CIM requests that are serviced
Line 1208 
Line 873 
     // The run function for the dummy Thread should never be called,     // The run function for the dummy Thread should never be called,
     dummyInitialThread = new Thread(dummyThreadFunc, NULL, false);     dummyInitialThread = new Thread(dummyThreadFunc, NULL, false);
     Thread::setCurrent(dummyInitialThread);     Thread::setCurrent(dummyInitialThread);
     AcceptLanguageList default_al;      try
     try{      {
          default_al = LanguageParser::getDefaultAcceptLanguages();          Thread::setLanguages(LanguageParser::getDefaultAcceptLanguages());
          Thread::setLanguages(new AcceptLanguageList(default_al));      }
     }catch(InvalidAcceptLanguageHeader& e){      catch (InvalidAcceptLanguageHeader& e)
       {
           Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,           Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,
                   "src.Server.cimserver.FAILED_TO_SET_PROCESS_LOCALE",                   "src.Server.cimserver.FAILED_TO_SET_PROCESS_LOCALE",
                   "Could not convert the system process locale into a valid AcceptLanguage format.");              "Could not convert the system process locale into a valid "
                   "AcceptLanguage format.");
           Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,           Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,
                              e.getMessage());                              e.getMessage());
     }     }
  
   
   
 #ifdef PEGASUS_OS_OS400  
     // Special server initialization code for OS/400.  
     if (cimserver_initialize() != 0)  
     {  
     // do some logging here!  
     //l10n  
     //Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,  
             //"CIM Server failed to initialize");  
     Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,  
                   "src.Server.cimserver.SERVER_FAILED_TO_INITIALIZE",  
                   "CIM Server failed to initialize");  
     return(-1);  
     }  
 #endif  
   
 #ifndef PEGASUS_OS_TYPE_WINDOWS #ifndef PEGASUS_OS_TYPE_WINDOWS
     umask(S_IRWXG|S_IRWXO);     umask(S_IRWXG|S_IRWXO);
 #endif #endif
  
       // Start up the CIM Server
  
       try
       {
 #if defined(PEGASUS_OS_TYPE_UNIX) #if defined(PEGASUS_OS_TYPE_UNIX)
   //   //
   // CRITICAL SECTION BEGIN          // Lock the CIMSERVER_LOCK_FILE during CIM Server start-up to prevent
           // concurrent writes to this file by multiple cimserver processes
           // starting at the same time.
   //   //
   // This is the beginning of the critical section regarding the          CString startupLockFileName = ConfigManager::getHomedPath(
   // access to pidfile (file to indicate that the cimserver has started).              PEGASUS_CIMSERVER_START_LOCK_FILE).getCString();
   // Sometimes, when 2 or more cimserver processes are started at the same  
   // time, they can't detect the concurrent process execution because the  
   // logic fails when pidfile is accessed concurrently.  
  
           // Make sure the start-up lock file exists
   FILE *startupLockFile;   FILE *startupLockFile;
           if ((startupLockFile = fopen(startupLockFileName, "w")) != 0)
   if ((startupLockFile = fopen(ConfigManager::getHomedPath(  
           CIMSERVER_LOCK_FILE).getCString(), "w")) != 0)  
   {   {
       lockf(fileno(startupLockFile), F_LOCK, 0);              fclose(startupLockFile);
   }   }
 #endif  
  
 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) \          AutoFileLock fileLock(startupLockFileName);
 || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || defined(PEGASUS_OS_AIX) \  #endif
 || defined(PEGASUS_OS_SOLARIS) || defined (PEGASUS_OS_VMS)  
  
   #if defined(PEGASUS_OS_TYPE_UNIX) || defined(PEGASUS_OS_VMS)
     //     //
     // check if CIMServer is already running          // Check if a CIM Server is already running.  If so, print an error
     // if CIMServer is already running, print message and          // message and notify the parent process (if there is one) to terminate
     // notify parent process (if there is a parent process) to terminate  
     //     //
     if(_cimServerProcess->isCIMServerRunning())          if (_serverRunStatus.isServerRunning())
     {     {
     //l10n              MessageLoaderParms parms(
         //cout << "Unable to start CIMServer." << endl;                  "src.Server.cimserver.UNABLE_TO_START_SERVER_ALREADY_RUNNING",
         //cout << "CIMServer is already running." << endl;  
         MessageLoaderParms parms("src.Server.cimserver.UNABLE_TO_START_SERVER_ALREADY_RUNNING",  
                      "Unable to start CIMServer. CIMServer is already running.");                      "Unable to start CIMServer. CIMServer is already running.");
     PEGASUS_STD(cerr) << MessageLoader::getMessage(parms) << PEGASUS_STD(endl);              Logger::put(
         Logger::put(Logger::ERROR_LOG,System::CIMSERVER,Logger::INFORMATION,                  Logger::ERROR_LOG, System::CIMSERVER, Logger::INFORMATION,
                     MessageLoader::getMessage(parms));                     MessageLoader::getMessage(parms));
               cerr << MessageLoader::getMessage(parms) << endl;
  
     //  
         // notify parent process (if there is a parent process) to terminate  
         //  
         if (daemonOption)         if (daemonOption)
               {
                 _cimServerProcess->notify_parent(1);                 _cimServerProcess->notify_parent(1);
               }
  
         return(1);              return 1;
     }     }
  
           //
           // Declare ourselves as the running CIM Server process, and write our
           // PID to the PID file.
           //
           _serverRunStatus.setServerRunning();
 #endif #endif
  
     // try loop to bind the address, and run the server          // Create and initialize the CIMServer object
     try  
     {  
  
     _monitor  = new Monitor();          _cimServer = new CIMServer();
     //PEP#222  
     //CIMServer server(&monitor);  
     //CimserverHolder cimserverHolder( &server );  
     _cimServer = new CIMServer(_monitor);  
  
           Boolean enableHttpConnection = ConfigManager::parseBooleanValue(
               configManager->getCurrentValue("enableHttpConnection"));
           Boolean enableHttpsConnection = ConfigManager::parseBooleanValue(
               configManager->getCurrentValue("enableHttpsConnection"));
  
         if (enableHttpConnection)  #ifdef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET
           // Make sure at least one connection is enabled
           if (!enableHttpConnection && !enableHttpsConnection)
         {         {
             _cimServer->addAcceptor(false, portNumberHttp, false);              MessageLoaderParms parms(
             //l10n                  "src.Server.cimserver.HTTP_NOT_ENABLED_SERVER_NOT_STARTING",
             //Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,                  "Neither HTTP nor HTTPS connection is enabled.");
                         //"Listening on HTTP port $0.", portNumberHttp);              throw Exception(parms);
           }
   #endif
  
             Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,          Boolean addIP6Acceptor = false;
                             "src.Server.cimserver.LISTENING_ON_HTTP_PORT",          Boolean addIP4Acceptor = false;
                             "Listening on HTTP port $0.", portNumberHttp);  
   #ifdef PEGASUS_OS_TYPE_WINDOWS
           addIP4Acceptor = true;
   #endif
   
   #ifdef PEGASUS_ENABLE_IPV6
           // If IPv6 stack is disabled swicth to IPv4 stack.
           if (System::isIPv6StackActive())
           {
               addIP6Acceptor = true;
         }         }
         if (enableHttpsConnection)          else
         {         {
             _cimServer->addAcceptor(false, portNumberHttps, true);              MessageLoaderParms parms(
             //l10n                  "src.Server.cimserver.IPV6_STACK_NOT_ACTIVE",
             //Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,                  "IPv6 stack is not active, using IPv4 socket.");
                         //"Listening on HTTPS port $0.", portNumberHttps);              Logger::put(
             Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,                  Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,
                             "src.Server.cimserver.LISTENING_ON_HTTPS_PORT",                  MessageLoader::getMessage(parms));
                             "Listening on HTTPS port $0.", portNumberHttps);  #if defined(PEGASUS_DEBUG)
               cout << MessageLoader::getMessage(parms) << endl;
   #endif
         }         }
   
 #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET  
         _cimServer->addAcceptor(true, 0, false);  
         //l10n  
         //Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,  
                     //"Listening on local connection socket.");  
         Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,  
               "src.Server.cimserver.LISTENING_ON_LOCAL",  
               "Listening on local connection socket.");  
 #endif #endif
           if (!addIP6Acceptor)
           {
               addIP4Acceptor = true;
           }
   
           // The server HTTP and HTTPS ports are determined via this algorithm:
           // 1) If the user explicitly specified a port, use it.
           // 2) If the user did not specify a port, get the port from the
           //    services file.
           // 3) If no value is specified in the services file, use the IANA WBEM
           //    default port.
           // Note that 2 and 3 are done within the System::lookupPort method
           // An empty string from the ConfigManager implies that the user did not
           // specify a port.
  
 #if defined(PEGASUS_DEBUG)  
         if (enableHttpConnection)         if (enableHttpConnection)
         {         {
             //l10n              Uint32 portNumberHttp = 0;
             //cout << "Listening on HTTP port " << portNumberHttp << endl;              String httpPort = configManager->getCurrentValue("httpPort");
       MessageLoaderParms parms("src.Server.cimserver.LISTENING_ON_HTTP_PORT",              if (httpPort == String::EMPTY)
               {
                   //
                   // Look up the WBEM-HTTP port number
                   //
                   portNumberHttp = System::lookupPort(
                       WBEM_HTTP_SERVICE_NAME, WBEM_DEFAULT_HTTP_PORT);
               }
               else
               {
                   //
                   // user-specified
                   //
                   CString portString = httpPort.getCString();
                   char* end = 0;
                   portNumberHttp = strtol(portString, &end, 10);
                   if (!(end != 0 && *end == '\0'))
                   {
                       throw InvalidPropertyValue("httpPort", httpPort);
                   }
               }
   
               if (addIP6Acceptor)
               {
                   _cimServer->addAcceptor(HTTPAcceptor::IPV6_CONNECTION,
                       portNumberHttp, false);
               }
               if (addIP4Acceptor)
               {
                   _cimServer->addAcceptor(HTTPAcceptor::IPV4_CONNECTION,
                       portNumberHttp, false);
               }
   
               MessageLoaderParms parms(
                   "src.Server.cimserver.LISTENING_ON_HTTP_PORT",
                    "Listening on HTTP port $0.", portNumberHttp);                    "Listening on HTTP port $0.", portNumberHttp);
               Logger::put(
                   Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,
                   MessageLoader::getMessage(parms));
   #if defined(PEGASUS_DEBUG)
             cout << MessageLoader::getMessage(parms) << endl;             cout << MessageLoader::getMessage(parms) << endl;
   #endif
         }         }
   
         if (enableHttpsConnection)         if (enableHttpsConnection)
         {         {
             //l10n              Uint32 portNumberHttps = 0;
             //cout << "Listening on HTTPS port " << portNumberHttps << endl;              String httpsPort = configManager->getCurrentValue("httpsPort");
             MessageLoaderParms parms("src.Server.cimserver.LISTENING_ON_HTTPS_PORT",              if (httpsPort == String::EMPTY)
               {
                   //
                   // Look up the WBEM-HTTPS port number
                   //
                   portNumberHttps = System::lookupPort(
                       WBEM_HTTPS_SERVICE_NAME, WBEM_DEFAULT_HTTPS_PORT);
               }
               else
               {
                   //
                   // user-specified
                   //
                   CString portString = httpsPort.getCString();
                   char* end = 0;
                   portNumberHttps = strtol(portString, &end, 10);
                   if (!(end != 0 && *end == '\0'))
                   {
                       throw InvalidPropertyValue("httpsPort", httpsPort);
                   }
               }
               if (addIP6Acceptor)
               {
                   _cimServer->addAcceptor(HTTPAcceptor::IPV6_CONNECTION,
                       portNumberHttps, true);
               }
               if (addIP4Acceptor)
               {
                   _cimServer->addAcceptor(HTTPAcceptor::IPV4_CONNECTION,
                       portNumberHttps, true);
               }
               MessageLoaderParms parms(
                   "src.Server.cimserver.LISTENING_ON_HTTPS_PORT",
                      "Listening on HTTPS port $0.", portNumberHttps);                      "Listening on HTTPS port $0.", portNumberHttps);
               Logger::put(
                   Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,
                   MessageLoader::getMessage(parms));
   #if defined(PEGASUS_DEBUG)
             cout << MessageLoader::getMessage(parms) << endl;             cout << MessageLoader::getMessage(parms) << endl;
   #endif
         }         }
  
 # ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET # ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET
         //l10n          {
         //cout << "Listening on local connection socket" << endl;              _cimServer->addAcceptor(HTTPAcceptor::LOCAL_CONNECTION, 0, false);
         MessageLoaderParms parms("src.Server.cimserver.LISTENING_ON_LOCAL",  
               MessageLoaderParms parms(
                   "src.Server.cimserver.LISTENING_ON_LOCAL",
                  "Listening on local connection socket.");                  "Listening on local connection socket.");
               Logger::put(
                   Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION,
                   MessageLoader::getMessage(parms));
   # if defined(PEGASUS_DEBUG)
         cout << MessageLoader::getMessage(parms) << endl;         cout << MessageLoader::getMessage(parms) << endl;
 # endif # endif
           }
 #endif #endif
  
            _cimServer->bind();            _cimServer->bind();
   
     // notify parent process (if there is a parent process) to terminate     // notify parent process (if there is a parent process) to terminate
         // so user knows that there is cimserver ready to serve CIM requests.         // so user knows that there is cimserver ready to serve CIM requests.
     if (daemonOption)     if (daemonOption)
         _cimServerProcess->notify_parent(0);  
   
     time_t last = 0;  
   
 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_OS_LINUX) || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) \  
     || defined(PEGASUS_OS_AIX) || defined(PEGASUS_OS_SOLARIS) \  
     || defined(PEGASUS_OS_VMS)  
         //  
         // create a file to indicate that the cimserver has started and  
         // save the process id of the cimserver process in the file  
         //  
         // remove the old file if it exists  
         System::removeFile(_cimServerProcess->getPIDFileName());  
   
         // open the file  
         FILE *pid_file = fopen(_cimServerProcess->getPIDFileName(), "w");  
   
         if (pid_file)  
         {         {
             // save the pid in the file              _cimServerProcess->notify_parent(0);
             fprintf(pid_file, "%ld\n", _cimServerProcess->get_server_pid());  
             fclose(pid_file);  
         }         }
 #endif  
  
 #if defined(PEGASUS_DEBUG) #if defined(PEGASUS_DEBUG)
     cout << "Started. " << endl;     cout << "Started. " << endl;
 #endif #endif
  
 #if defined(PEGASUS_OS_TYPE_UNIX)  
     //  
     // CRITICAL SECTION END  
     //  
     // Here is the unlock of file 'lock_file'. It closes the  
     // the critical section that guarantees the non concurrent access to  
     // pid file (file to indicate that the cimserver has started).  
     //  
   
     if (startupLockFile)  
     {  
        lockf(fileno(startupLockFile), F_ULOCK, 0);  
        fclose(startupLockFile);  
     }  
 #endif  
   
   
         // Put server started message to the logger         // Put server started message to the logger
         Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER,         Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER,
             Logger::INFORMATION,             Logger::INFORMATION,
             "src.Server.cimserver.STARTED_VERSION",             "src.Server.cimserver.STARTED_VERSION",
             "Started $0 version $1.",             "Started $0 version $1.",
                       _cimServerProcess->getProductName(), _cimServerProcess->getCompleteVersion());              _cimServerProcess->getProductName(),
               _cimServerProcess->getCompleteVersion());
  
 #if defined(PEGASUS_OS_TYPE_UNIX) && !defined(PEGASUS_OS_ZOS) #if defined(PEGASUS_OS_TYPE_UNIX) && !defined(PEGASUS_OS_ZOS)
         if (daemonOption && !debugOutputOption)         if (daemonOption && !debugOutputOption)
         {         {
             // Direct standard input, output, and error to /dev/null,             // Direct standard input, output, and error to /dev/null,
             // since we are running as a daemon.             // since we are running as a daemon.
             close(0);              close(STDIN_FILENO);
             open("/dev/null", O_RDONLY);             open("/dev/null", O_RDONLY);
             close(1);              close(STDOUT_FILENO);
             open("/dev/null", O_RDWR);             open("/dev/null", O_RDWR);
             close(2);              close(STDERR_FILENO);
             open("/dev/null", O_RDWR);             open("/dev/null", O_RDWR);
         }         }
 #endif #endif
       }
       catch (Exception& e)
       {
           MessageLoaderParms parms("src.Server.cimserver.SERVER_NOT_STARTED",
               "cimserver not started: $0", e.getMessage());
           Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,
               MessageLoader::getMessage(parms));
           cerr << MessageLoader::getMessage(parms) << endl;
   
           //
           // notify parent process (if there is a parent process) to terminate
           //
           if (daemonOption)
               _cimServerProcess->notify_parent(1);
   
           deleteCIMServer();
           return 1;
       }
   
       // Run the main CIM Server loop
  
       try
       {
 #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM)
  
         // ARM is a z/OS internal restart facility.         // ARM is a z/OS internal restart facility.
Line 1446 
Line 1185 
  
 #endif #endif
  
           // In case we don't want to reregister to SLP
           // (i.e. PEGASUS_SLP_REG_TIMEOUT not set) after CIM Server startup,
           // the SLP Provider is started only once,
           // right short before entering the runForever loop which then can handle
           // the invokeMethod call against the SLP provider
           // function startSLPProvider() does create a separate thread to process
           // so code continues to go into the forever loop before executing any
           // requests against the CIM Server
   #ifdef PEGASUS_ENABLE_SLP
   # ifndef PEGASUS_SLP_REG_TIMEOUT
           _cimServer->startSLPProvider();
   # endif
   #endif
         //         //
         // Loop to call CIMServer's runForever() method until CIMServer         // Loop to call CIMServer's runForever() method until CIMServer
         // has been shutdown         // has been shutdown
         //         //
     while( !_cimServer->terminated() )     while( !_cimServer->terminated() )
     {     {
   
       _cimServer->runForever();       _cimServer->runForever();
   
     }     }
  
         //         //
         // normal termination         // normal termination
         //         //
   
 #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM)
  
         // ARM is a z/OS internal restart facility.         // ARM is a z/OS internal restart facility.
Line 1476 
Line 1225 
         Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER,         Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER,
             Logger::INFORMATION, "src.Server.cimserver.STOPPED",             Logger::INFORMATION, "src.Server.cimserver.STOPPED",
             "$0 stopped.", _cimServerProcess->getProductName());             "$0 stopped.", _cimServerProcess->getProductName());
   
 #if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_OS_LINUX) \  
 || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || defined(PEGASUS_OS_AIX) \  
 || defined(PEGASUS_OS_SOLARIS) || defined(PEGASUS_OS_VMS)  
         //  
         //  Note: do not remove the PID file created at startup time, since  
         //  shutdown is not complete until the CIMServer destructor completes.  
         //  
 #endif  
     }  
     catch(BindFailedException& e)  
     {  
         Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,  
             "src.Server.cimserver.SERVER_NOT_STARTED",  
             "cimserver not started:  $0", e.getMessage());  
   
 #if !defined(PEGASUS_OS_OS400)  
         MessageLoaderParms parms("src.Server.cimserver.SERVER_NOT_STARTED",  
             "cimserver not started: $0", e.getMessage());  
   
         cerr << MessageLoader::getMessage(parms) << endl;  
 #endif  
   
     //  
         // notify parent process (if there is a parent process) to terminate  
         //  
         if (daemonOption)  
                 _cimServerProcess->notify_parent(1);  
   
         deleteCIMServer();  
         return 1;  
     }     }
     catch(Exception& e)     catch(Exception& e)
     {     {
     Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,          MessageLoaderParms parms(
             "src.Server.cimserver.ERROR",             "src.Server.cimserver.ERROR",
             "Error: $0", e.getMessage());              "Error: $0",
 #ifndef PEGASUS_OS_OS400              e.getMessage());
     MessageLoaderParms parms("src.Server.cimserver.ERROR",          Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,
                              "Error: $0", e.getMessage());              MessageLoader::getMessage(parms));
     PEGASUS_STD(cerr) << MessageLoader::getMessage(parms) << PEGASUS_STD(endl);          cerr << MessageLoader::getMessage(parms) << endl;
 #endif  
         //  
         // notify parent process (if there is a parent process) to terminate  
         //  
         if (daemonOption)  
                 _cimServerProcess->notify_parent(1);  
  
         deleteCIMServer();         deleteCIMServer();
         return 1;         return 1;
Line 1531 
Line 1243 
     deleteCIMServer();     deleteCIMServer();
     return 0;     return 0;
 } }
   
   
   
   


Legend:
Removed from v.1.196  
changed lines
  Added in v.1.217

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2