version 1.141, 2004/10/17 20:40:39
|
version 1.150, 2005/02/06 21:28:25
|
|
|
//%2004//////////////////////////////////////////////////////////////////////// |
//%2005//////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development | // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. | // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
|
|
// IBM Corp.; EMC Corporation, The Open Group. | // IBM Corp.; EMC Corporation, The Open Group. |
// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; | // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; |
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. | // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; VERITAS Software Corporation; The Open Group. |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy | // Permission is hereby granted, free of charge, to any person obtaining a copy |
// of this software and associated documentation files (the "Software"), to | // of this software and associated documentation files (the "Software"), to |
|
|
// Modified By: Humberto Rivero (hurivero@us.ibm.com) | // Modified By: Humberto Rivero (hurivero@us.ibm.com) |
// | // |
// Modified By: Steve Hills (steve.hills@ncr.com) | // Modified By: Steve Hills (steve.hills@ncr.com) |
|
// Sean Keenan, Hewlett-Packard Company (sean.keenan@hp.com) |
|
// |
|
// Modified By: Amit K Arora, IBM (amitarora@in.ibm.com) - pep 167 |
|
// |
|
// Modified By: Josephine Eskaline Joyce, IBM (jojustin@in.ibm.com) - Bug#2555 |
|
// |
|
// Modified By: Josephine Eskaline Joyce, IBM (jojustin@in.ibm.com) - Bug#2032 |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
# else | # else |
# include "cimserver_unix.cpp" | # include "cimserver_unix.cpp" |
#endif | #endif |
|
#elif defined(PEGASUS_OS_VMS) |
|
# include "cimserver_vms.cpp" |
#else | #else |
# error "Unsupported platform" | # error "Unsupported platform" |
#endif | #endif |
|
|
| |
static const char OPTION_SHUTDOWN = 's'; | static const char OPTION_SHUTDOWN = 's'; |
| |
|
static const char LONG_HELP [] = "help"; |
|
|
|
static const char LONG_VERSION [] = "version"; |
|
|
#if defined(PEGASUS_OS_HPUX) | #if defined(PEGASUS_OS_HPUX) |
static const char OPTION_BINDVERBOSE = 'X'; | static const char OPTION_BINDVERBOSE = 'X'; |
#endif | #endif |
| |
|
# if defined(PEGASUS_OS_VMS) |
|
static const char OPTION_PORT = 'p'; |
|
|
|
static const char OPTION_TRACE = 't'; |
|
#endif |
|
|
static const String PROPERTY_TIMEOUT = "shutdownTimeout"; | static const String PROPERTY_TIMEOUT = "shutdownTimeout"; |
| |
ConfigManager* configManager; | ConfigManager* configManager; |
|
|
*/ | */ |
void PrintHelp(const char* arg0) | void PrintHelp(const char* arg0) |
{ | { |
/** |
|
Build the usage string for the config command. |
|
*/ |
|
/* l10n |
|
String usage = String (USAGE); | String usage = String (USAGE); |
usage.append (COMMAND_NAME); | usage.append (COMMAND_NAME); |
usage.append (" [ [ options ] | [ configProperty=value, ... ] ]\n"); | usage.append (" [ [ options ] | [ configProperty=value, ... ] ]\n"); |
usage.append (" options\n"); | usage.append (" options\n"); |
usage.append (" -v - displays CIM Server version number\n"); |
usage.append (" -v, --version - displays CIM Server version number\n"); |
usage.append (" -h - prints this help message\n"); |
usage.append (" -h, --help - prints this help message\n"); |
usage.append (" -s - shuts down CIM Server\n"); | usage.append (" -s - shuts down CIM Server\n"); |
#if !defined(PEGASUS_USE_RELEASE_DIRS) | #if !defined(PEGASUS_USE_RELEASE_DIRS) |
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 NT Service\n"); |
usage.append (" -install [name] - installs 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 (" -remove [name] - removes pegasus as a Windows NT Service\n"); |
usage.append (" -remove [name] - removes 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 (" -start [name] - starts pegasus as a Windows NT 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 (" -stop [name] - stops pegasus as a Windows NT 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\n"); | usage.append (" default CIM Server Service Name\n\n"); |
#endif | #endif |
|
|
usage.append (" - sets CIM Server configuration property\n"); | usage.append (" - sets CIM Server configuration property\n"); |
| |
cout << endl; | cout << endl; |
#if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_IA64_GNU) |
cout << PEGASUS_PRODUCT_NAME << " " << PEGASUS_PRODUCT_VERSION << endl; |
cout << PLATFORM_PRODUCT_NAME << " " << PLATFORM_PRODUCT_VERSION << endl; |
|
#else |
|
cout << PEGASUS_NAME << PEGASUS_VERSION << endl; |
|
#endif |
|
cout << endl; |
|
cout << usage << endl; |
|
*/ |
|
|
|
String usage = String (USAGE); |
|
usage.append (COMMAND_NAME); |
|
usage.append (" [ [ options ] | [ configProperty=value, ... ] ]\n"); |
|
usage.append (" options\n"); |
|
usage.append (" -v - displays CIM Server version number\n"); |
|
usage.append (" -h - prints this help message\n"); |
|
usage.append (" -s - shuts down CIM Server\n"); |
|
#if !defined(PEGASUS_USE_RELEASE_DIRS) |
|
usage.append (" -D [home] - sets pegasus home directory\n"); |
|
#endif |
|
#if defined(PEGASUS_OS_TYPE_WINDOWS) |
|
usage.append (" -install [name] - installs pegasus as a Windows NT Service\n"); |
|
usage.append (" [name] is optional and overrides the\n"); |
|
usage.append (" default CIM Server Service Name\n"); |
|
usage.append (" -remove [name] - removes pegasus as a Windows NT Service\n"); |
|
usage.append (" [name] is optional and overrides the\n"); |
|
usage.append (" default CIM Server Service Name\n"); |
|
usage.append (" -start [name] - starts pegasus as a Windows NT Service\n"); |
|
usage.append (" [name] is optional and overrides the\n"); |
|
usage.append (" default CIM Server Service Name\n"); |
|
usage.append (" -stop [name] - stops pegasus as a Windows NT Service\n"); |
|
usage.append (" [name] is optional and overrides the\n"); |
|
usage.append (" default CIM Server Service Name\n\n"); |
|
#endif |
|
usage.append (" configProperty=value\n"); |
|
usage.append (" - sets CIM Server configuration property\n"); |
|
|
|
cout << endl; |
|
#if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_IA64_GNU) |
|
cout << PLATFORM_PRODUCT_NAME << " " << PLATFORM_PRODUCT_VERSION << endl; |
|
#else |
|
cout << PEGASUS_NAME << PEGASUS_VERSION << endl; |
|
#endif |
|
cout << endl; | cout << endl; |
| |
#if defined(PEGASUS_OS_TYPE_WINDOWS) | #if defined(PEGASUS_OS_TYPE_WINDOWS) |
|
|
cimserver_exitRC(1); | cimserver_exitRC(1); |
#endif | #endif |
| |
#if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || defined(PEGASUS_PLATFORM_SOLARIS_SPARC_CC) |
#if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) \ |
|
|| defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || defined(PEGASUS_PLATFORM_SOLARIS_SPARC_CC) \ |
|
|| defined (PEGASUS_OS_VMS) |
if (kill_rc != -1) | if (kill_rc != -1) |
{ | { |
//l10n - TODO | //l10n - TODO |
|
|
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")) |
|
{ |
|
PrintHelp(argv[0]); |
|
exit(0); |
|
} |
|
else if(String::equal(arg,"--version")) |
|
{ |
|
cout << PEGASUS_PRODUCT_VERSION << endl; |
|
exit(0); |
|
} |
// Check for -option | // Check for -option |
if (*arg == '-') |
else if (*arg == '-') |
{ | { |
// Get the option | // Get the option |
const char* option = arg + 1; | const char* option = arg + 1; |
|
|
if (*option == OPTION_VERSION && | if (*option == OPTION_VERSION && |
strlen(option) == 1) | strlen(option) == 1) |
{ | { |
#if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_IA64_GNU) |
cout << PEGASUS_PRODUCT_VERSION << endl; |
cout << PLATFORM_PRODUCT_VERSION << endl; |
|
#else |
|
cout << PEGASUS_VERSION << endl; |
|
#endif |
|
exit(0); | exit(0); |
} | } |
// | // |
|
|
argc -= 2; | argc -= 2; |
} | } |
#endif | #endif |
|
#if defined(PEGASUS_OS_VMS) |
|
else if (*option == OPTION_PORT) |
|
{ |
|
if (i + 1 < argc) |
|
{ |
|
newPortNumber.assign(argv[i + 1]); |
|
} |
|
else |
|
{ |
|
cout << "Missing argument for option -" << option << endl; |
|
exit(0); |
|
} |
|
|
|
memmove(&argv[i], &argv[i + 2], (argc-i-1) * sizeof(char*)); |
|
argc -= 2; |
|
} |
|
else if (*option == OPTION_TRACE) |
|
{ |
|
if (i + 1 < argc) |
|
{ |
|
pegasusTrace.assign(argv[i + 1]); |
|
} |
|
else |
|
{ |
|
cout << "Missing argument for option -" << option << endl; |
|
exit(0); |
|
} |
|
|
|
memmove(&argv[i], &argv[i + 2], (argc-i-1) * sizeof(char*)); |
|
argc -= 2; |
|
} |
|
#endif |
#if defined(PEGASUS_OS_HPUX) | #if defined(PEGASUS_OS_HPUX) |
// | // |
// Check to see if user asked for the version (-X option): | // Check to see if user asked for the version (-X option): |
|
|
#endif | #endif |
} | } |
| |
Uint32 portNumberHttps; |
Uint32 portNumberHttps=0; |
Uint32 portNumberHttp; |
Uint32 portNumberHttp=0; |
Uint32 portNumberExportHttps; |
Uint32 portNumberExportHttps=0; |
| |
if (enableHttpsConnection) | if (enableHttpsConnection) |
{ | { |
String httpsPort = configManager->getCurrentValue("httpsPort"); | String httpsPort = configManager->getCurrentValue("httpsPort"); |
CString portString = httpsPort.getCString(); | CString portString = httpsPort.getCString(); |
|
#if defined(PEGASUS_OS_VMS) |
|
// if (!(newPortNumber == String::EMPTY)) |
|
if (!(newPortNumber == "")) |
|
{ |
|
portString = newPortNumber.getCString(); |
|
} |
|
#endif |
char* end = 0; | char* end = 0; |
Uint32 port = strtol(portString, &end, 10); | Uint32 port = strtol(portString, &end, 10); |
assert(end != 0 && *end == '\0'); |
if(!(end != 0 && *end == '\0')) |
|
{ |
|
PEGASUS_STD(cerr) << "Bad HTTPS Port Value" << PEGASUS_STD(endl); |
|
exit(1); |
|
} |
|
|
| |
// | // |
// Look up the WBEM-HTTPS port number | // Look up the WBEM-HTTPS port number |
|
|
{ | { |
String httpPort = configManager->getCurrentValue("httpPort"); | String httpPort = configManager->getCurrentValue("httpPort"); |
CString portString = httpPort.getCString(); | CString portString = httpPort.getCString(); |
|
#if defined(PEGASUS_OS_VMS) |
|
// if (!(newPortNumber == String::EMPTY)) |
|
if (!(newPortNumber == "")) |
|
{ |
|
portString = newPortNumber.getCString(); |
|
} |
|
#endif |
char* end = 0; | char* end = 0; |
Uint32 port = strtol(portString, &end, 10); | Uint32 port = strtol(portString, &end, 10); |
assert(end != 0 && *end == '\0'); |
if(!(end != 0 && *end == '\0')) |
|
{ |
|
PEGASUS_STD(cerr) << "Bad HTTP Port Value" << PEGASUS_STD(endl); |
|
exit(1); |
|
} |
// | // |
// Look up the WBEM-HTTP port number | // Look up the WBEM-HTTP port number |
// | // |
|
|
} | } |
#if defined(PEGASUS_DEBUG) | #if defined(PEGASUS_DEBUG) |
// Put out startup up message. | // Put out startup up message. |
cout << PEGASUS_NAME << PEGASUS_VERSION << endl; |
cout << PEGASUS_PRODUCT_NAME << " " << PEGASUS_PRODUCT_VERSION << endl; |
//l10n | //l10n |
//cout << "Built " << __DATE__ << " " << __TIME__ << endl; | //cout << "Built " << __DATE__ << " " << __TIME__ << endl; |
//cout <<"Starting..." | //cout <<"Starting..." |
|
|
#endif | #endif |
| |
| |
#if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || defined(PEGASUS_OS_AIX) || defined(PEGASUS_PLATFORM_SOLARIS_SPARC_CC) |
#if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) \ |
|
|| defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || defined(PEGASUS_OS_AIX) \ |
|
|| defined(PEGASUS_PLATFORM_SOLARIS_SPARC_CC) || defined (PEGASUS_OS_VMS) |
umask(S_IWGRP|S_IWOTH); | umask(S_IWGRP|S_IWOTH); |
| |
// | // |
|
|
| |
| |
| |
#if defined(PEGASUS_USE_23HTTPMONITOR_SERVER) |
Monitor monitor; |
Monitor monitor(true); |
|
CIMServer server(&monitor); | CIMServer server(&monitor); |
#else |
|
monitor_2 monitor; |
|
CIMServer server(&monitor); |
|
#endif |
|
| |
CimserverHolder cimserverHolder( &server ); | CimserverHolder cimserverHolder( &server ); |
| |
|
#if defined(PEGASUS_OS_VMS) |
|
// |
|
// Enable tracing at highest level |
|
// |
|
|
|
if (!(pegasusTrace == String::EMPTY)) |
|
{ |
|
Tracer::setTraceFile(pegasusTrace.getCString()); |
|
Tracer::setTraceLevel(Tracer::LEVEL4); |
|
Tracer::setTraceComponents("All"); |
|
} |
|
#endif |
if (enableHttpConnection) | if (enableHttpConnection) |
{ | { |
server.addAcceptor(false, portNumberHttp, false, false); | server.addAcceptor(false, portNumberHttp, false, false); |
|
|
| |
time_t last = 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_PLATFORM_SOLARIS_SPARC_CC) |
#if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_OS_LINUX) || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) \ |
|
|| defined(PEGASUS_OS_AIX) || defined(PEGASUS_PLATFORM_SOLARIS_SPARC_CC) \ |
|
|| defined(PEGASUS_OS_VMS) |
// | // |
// create a file to indicate that the cimserver has started and | // create a file to indicate that the cimserver has started and |
// save the process id of the cimserver process in the file | // save the process id of the cimserver process in the file |
|
|
#endif | #endif |
| |
// Put server started message to the logger | // Put server started message to the logger |
#if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_IA64_GNU) |
Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, |
//l10n |
Logger::INFORMATION, |
//Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION, |
|
//"Started $0 version $1.", |
|
//PLATFORM_PRODUCT_NAME, PLATFORM_PRODUCT_VERSION); |
|
Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION, |
|
"src.Server.cimserver.STARTED_VERSION", | "src.Server.cimserver.STARTED_VERSION", |
"Started $0 version $1.", | "Started $0 version $1.", |
PLATFORM_PRODUCT_NAME, PLATFORM_PRODUCT_VERSION); |
PEGASUS_PRODUCT_NAME, PEGASUS_PRODUCT_VERSION); |
#else |
|
//l10n |
|
//Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION, |
|
//"Started $0 version $1.", |
|
//PEGASUS_NAME, PEGASUS_VERSION); |
|
Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION, |
|
"src.Server.cimserver.STARTED_VERSION", |
|
"Started $0 version $1.", |
|
PEGASUS_NAME, PEGASUS_VERSION); |
|
#endif |
|
|
|
| |
// | // |
// Loop to call CIMServer's runForever() method until CIMServer | // Loop to call CIMServer's runForever() method until CIMServer |
|
|
// | // |
// normal termination | // normal termination |
// | // |
// Put server shutdown message to the logger |
|
#if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_IA64_GNU) |
|
//l10n |
|
//Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION, |
|
//"$0 stopped.", PLATFORM_PRODUCT_NAME); |
|
Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION, |
|
"src.Server.cimserver.STOPPED", |
|
"$0 stopped.", PLATFORM_PRODUCT_NAME); |
|
#else |
|
//l10n |
|
//Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION, |
|
//"$0 stopped.", PEGASUS_NAME); |
|
Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, Logger::INFORMATION, |
|
"src.Server.cimserver.STOPPED", |
|
"$0 stopped.", PEGASUS_NAME); |
|
#endif |
|
| |
#if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) || defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || defined(PEGASUS_OS_AIX) || defined(PEGASUS_PLATFORM_SOLARIS_SPARC_CC) |
// Put server shutdown message to the logger |
|
Logger::put_l(Logger::STANDARD_LOG, System::CIMSERVER, |
|
Logger::INFORMATION, "src.Server.cimserver.STOPPED", |
|
"$0 stopped.", PEGASUS_PRODUCT_NAME); |
|
|
|
#if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) \ |
|
|| defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || defined(PEGASUS_OS_AIX) \ |
|
|| defined(PEGASUS_PLATFORM_SOLARIS_SPARC_CC) || defined(PEGASUS_OS_VMS) |
// | // |
// close the file created at startup time to indicate that the | // close the file created at startup time to indicate that the |
// cimserver has terminated normally. | // cimserver has terminated normally. |