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

  1 a.dunfey 1.26.10.1 //%2006////////////////////////////////////////////////////////////////////////
  2 mike     1.2       //
  3 karl     1.17      // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
  4                    // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
  5                    // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
  6 karl     1.8       // IBM Corp.; EMC Corporation, The Open Group.
  7 karl     1.17      // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
  8                    // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
  9 karl     1.19      // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 10                    // EMC Corporation; VERITAS Software Corporation; The Open Group.
 11 a.dunfey 1.26.10.1 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 12                    // EMC Corporation; Symantec Corporation; The Open Group.
 13 mike     1.2       //
 14                    // Permission is hereby granted, free of charge, to any person obtaining a copy
 15                    // of this software and associated documentation files (the "Software"), to
 16                    // deal in the Software without restriction, including without limitation the
 17                    // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 18                    // sell copies of the Software, and to permit persons to whom the Software is
 19                    // furnished to do so, subject to the following conditions:
 20 kumpf    1.4       // 
 21 mike     1.2       // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 22                    // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 23                    // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 24                    // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 25                    // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 26                    // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 27                    // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 28                    // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 29                    //
 30                    //==============================================================================
 31                    //
 32                    // Author: Sushma Fernandes, Hewlett-Packard Company (sushma_fernandes@hp.com)
 33                    //
 34                    // Modified By: Rudy Schuet (rudy.schuet@compaq.com) 11/12/01
 35                    //              added nsk platform support
 36 a.arora  1.16      //              Amit K Arora, IBM (amita@in.ibm.com) for Bug#1527
 37 kumpf    1.18      //              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
 38 gs.keenan 1.20      //              Sean Keenan, Hewlett-Packard Company (sean.keenan@hp.com)
 39 mike      1.2       //
 40                     //%/////////////////////////////////////////////////////////////////////////////
 41                     
 42 david.dillard 1.23      //#include <fstream>
 43                         //#include <iostream>
 44 mike          1.2       #include <Pegasus/Common/FileSystem.h>
 45                         #include <Pegasus/Common/TraceFileHandler.h>
 46                         
 47                         #if defined(PEGASUS_OS_TYPE_WINDOWS)
 48                         # include <Pegasus/Common/TraceFileHandlerWindows.cpp>
 49                         #elif defined(PEGASUS_OS_TYPE_UNIX)
 50                         # include <Pegasus/Common/TraceFileHandlerUnix.cpp>
 51                         #elif defined(PEGASUS_OS_TYPE_NSK)
 52                         # include <Pegasus/Common/TraceFileHandlerNsk.cpp>
 53 gs.keenan     1.20      #elif defined(PEGASUS_OS_VMS)
 54                         # include <Pegasus/Common/TraceFileHandlerVms.cpp>
 55 mike          1.2       #else
 56                         # error "Unsupported platform"
 57                         #endif
 58                         
 59                         
 60                         PEGASUS_USING_STD;
 61                         
 62                         PEGASUS_NAMESPACE_BEGIN
 63                         
 64                         ////////////////////////////////////////////////////////////////////////////////
 65                         //  Constructs TraceFileHandler
 66                         ////////////////////////////////////////////////////////////////////////////////
 67                         
 68                         TraceFileHandler::TraceFileHandler () 
 69                         {
 70 kumpf         1.3           _fileName = 0;
 71 mike          1.2           _fileHandle = 0;
 72                             _wroteToLog = false;
 73 a.arora       1.16      #ifdef PEGASUS_PLATFORM_LINUX_GENERIC_GNU
 74                             _baseFileName = 0;
 75                             _fileCount = 0;
 76                         #endif
 77 mike          1.2       }
 78                         
 79                         ////////////////////////////////////////////////////////////////////////////////
 80                         //  Destructs TraceFileHandler
 81                         ////////////////////////////////////////////////////////////////////////////////
 82                         
 83                         TraceFileHandler::~TraceFileHandler () 
 84                         {
 85                             // Close the File 
 86                             if (_fileHandle)
 87                             {
 88                                 fclose(_fileHandle);
 89                             }
 90 kumpf         1.3           if (_fileName)
 91                             {
 92                                 delete []_fileName;
 93                             }
 94 a.arora       1.16      #ifdef PEGASUS_PLATFORM_LINUX_GENERIC_GNU
 95                             if (_baseFileName)
 96                             {
 97                                 delete []_baseFileName;
 98                             }
 99                         #endif
100 mike          1.2       }
101                         
102                         ////////////////////////////////////////////////////////////////////////////////
103                         //  Sets the filename to the given filename and opens the file in append
104                         //  mode
105                         ////////////////////////////////////////////////////////////////////////////////
106                         
107                         Uint32 TraceFileHandler::setFileName(const char* fileName)
108                         {
109 kumpf         1.18          // If a file is already open, close it
110                             if (_fileHandle)
111                             {
112                                 fclose(_fileHandle);
113                                 _fileHandle = 0;
114                             }
115                         
116                             delete [] _fileName;
117                             _fileName = 0;
118                         #ifdef PEGASUS_PLATFORM_LINUX_GENERIC_GNU
119                             delete [] _baseFileName;
120                             _baseFileName = 0;
121                         #endif
122                         
123 mike          1.2           if (!isValidFilePath(fileName))
124                             {
125                         	return 1;
126                             }
127 kumpf         1.18          _fileHandle = _openFile(fileName);
128 mike          1.2           if (!_fileHandle)
129                             {
130 kumpf         1.18              return 1;
131 mike          1.2           }
132 kumpf         1.18      
133                             _fileName = new char[strlen(fileName)+1];
134                             strcpy(_fileName, fileName);
135 a.arora       1.16      #ifdef PEGASUS_PLATFORM_LINUX_GENERIC_GNU
136 kumpf         1.18          _baseFileName = new char[strlen(fileName)+1];
137                             strcpy(_baseFileName, fileName);
138 a.arora       1.16      #endif
139 kumpf         1.18      
140                             return 0;
141                         }
142                         
143                         FILE* TraceFileHandler::_openFile(const char* fileName)
144                         {
145 gs.keenan     1.25      #ifdef PEGASUS_OS_VMS
146                         //    FILE* fileHandle = fopen(fileName,"a+", "shr=get,put,upd");
147                             FILE* fileHandle = fopen(fileName,"w", "shr=get,put,upd");
148                         #else
149 kumpf         1.18          FILE* fileHandle = fopen(fileName,"a+");
150 gs.keenan     1.25      #endif
151 kumpf         1.18          if (!fileHandle)
152                             {
153                                 // Unable to open file, log a message
154 kumpf         1.24              Logger::put_l(Logger::DEBUG_LOG, System::CIMSERVER, Logger::WARNING,
155 kumpf         1.18                  "Common.TraceFileHandler.FAILED_TO_OPEN_FILE",
156                                     "Failed to open file $0", fileName);
157                                 return 0;
158 mike          1.2           }
159 kumpf         1.9       
160                             //
161 kumpf         1.24          // Verify that the file has the correct owner
162                             //
163                             if (!System::verifyFileOwnership(fileName))
164                             {
165                                 Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
166                                    "Common.TraceFileHandler.UNEXPECTED_FILE_OWNER",
167                                    "File $0 is not owned by user $1.", fileName,
168                                    System::getEffectiveUserName());
169                                 fclose(fileHandle);
170                                 return 0;
171                             }
172                         
173                             //
174 kumpf         1.18          // Set the file permissions to 0600
175 marek         1.12          //
176 chuck         1.15      #if !defined(PEGASUS_OS_TYPE_WINDOWS)
177 kumpf         1.18          if (!FileSystem::changeFilePermissions(
178                                     String(fileName), (S_IRUSR|S_IWUSR)) )
179 marek         1.12      #else
180 kumpf         1.18          if (!FileSystem::changeFilePermissions(
181                                     String(fileName), (_S_IREAD|_S_IWRITE)) )
182 marek         1.12      #endif
183 kumpf         1.9           {
184 kumpf         1.24              Logger::put_l(Logger::DEBUG_LOG, System::CIMSERVER, Logger::WARNING,
185 kumpf         1.9                  "Common.TraceFileHandler.FAILED_TO_SET_FILE_PERMISSIONS",
186 kumpf         1.18                 "Failed to set permissions on file $0", fileName);
187                                 fclose(fileHandle);
188                                 return 0;
189                             }
190                         
191                             return fileHandle;
192 mike          1.2       }
193                         
194                         Boolean TraceFileHandler::isValidFilePath(const char* filePath)
195                         {
196                             String fileName = String(filePath);
197                         
198                             // Check if the file path is a directory
199                             FileSystem::translateSlashes(fileName);
200                             if (FileSystem::isDirectory(fileName))
201                             {
202                         	return 0;
203                             }
204                         
205                             // Check if the file exists and is writable
206                             if (FileSystem::exists(fileName))
207                             {
208                                 if (!FileSystem::canWrite(fileName))
209                                 {
210                         	    return 0;
211                                 }
212                         	else
213 mike          1.2       	{
214                         	    return 1;
215                                 }
216                             }
217                             else
218                             {
219                                 // Check if directory is writable
220 kumpf         1.6               Uint32 index = fileName.reverseFind('/');
221 mike          1.2       
222 kumpf         1.6               if (index != PEG_NOT_FOUND)
223 mike          1.2       	{
224 kumpf         1.6                   String dirName = fileName.subString(0,index);
225 mike          1.2                   if (!FileSystem::isDirectory(dirName))
226                                     {
227                         	        return 0;
228                                     }
229                                     if (!FileSystem::canWrite(dirName) )
230                                     {
231                         		return 0;
232                                     }
233                         	    else
234                         	    {
235                         		return 1;
236                                     }
237                                 }
238                         	else
239                                 {
240                                     String currentDir;
241                         
242                                     // Check if there is permission to write in the
243                                     // current working directory
244                                     FileSystem::getCurrentDirectory(currentDir);
245                         
246 mike          1.2                   if (!FileSystem::canWrite(currentDir))
247                                     {
248                         		return 0;
249                                     }
250                         	    else
251                         	    {
252                         		return 1;
253                                     }
254                                 }
255                             }
256 carson.hovey  1.22          PEGASUS_UNREACHABLE(return 1;)
257 mike          1.2       }
258                         PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2