(file) Return to AutoPThreadSecurity.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ProviderManager2

  1 martin 1.4 //%LICENSE////////////////////////////////////////////////////////////////
  2 martin 1.5 //
  3 martin 1.4 // Licensed to The Open Group (TOG) under one or more contributor license
  4            // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
  5            // this work for additional information regarding copyright ownership.
  6            // Each contributor licenses this file to you under the OpenPegasus Open
  7            // Source License; you may not use this file except in compliance with the
  8            // License.
  9 martin 1.5 //
 10 martin 1.4 // Permission is hereby granted, free of charge, to any person obtaining a
 11            // copy of this software and associated documentation files (the "Software"),
 12            // to deal in the Software without restriction, including without limitation
 13            // the rights to use, copy, modify, merge, publish, distribute, sublicense,
 14            // and/or sell copies of the Software, and to permit persons to whom the
 15            // Software is furnished to do so, subject to the following conditions:
 16 martin 1.5 //
 17 martin 1.4 // The above copyright notice and this permission notice shall be included
 18            // in all copies or substantial portions of the Software.
 19 martin 1.5 //
 20 martin 1.4 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 21 martin 1.5 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 22 martin 1.4 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 23            // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 24            // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 25            // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 26            // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 27 martin 1.5 //
 28 martin 1.4 //////////////////////////////////////////////////////////////////////////
 29 kumpf  1.1 //
 30            //%/////////////////////////////////////////////////////////////////////////////
 31            
 32            #ifndef Pegasus_AutoPThreadSecurity_h
 33            #define Pegasus_AutoPThreadSecurity_h
 34            
 35            #include <Pegasus/Common/Config.h>
 36            #include <Pegasus/Common/OperationContextInternal.h>
 37            #include <Pegasus/Common/Exception.h>
 38            #include <Pegasus/ProviderManager2/Linkage.h>
 39            
 40            #ifdef PEGASUS_ZOS_SECURITY
 41            // This include file will not be provided in the OpenGroup CVS for now.
 42            // Do NOT try to include it in your compile
 43 kumpf  1.3 # include <Pegasus/ProviderManager2/ProviderManagerzOS_inline.h>
 44 kumpf  1.1 #endif
 45            
 46            PEGASUS_NAMESPACE_BEGIN
 47            
 48            // Auto class to encapsulate enabling and disabling
 49            // of the pthread_security on z/OS
 50            // For all other platforms this should be an empty class
 51            // Targets: avoid ifdefs and keep code readable(clean)
 52 marek  1.6 #ifndef PEGASUS_ZOS_SECURITY
 53 kumpf  1.3 
 54 kumpf  1.1 // not z/OS == empty class
 55 mike   1.2 class AutoPThreadSecurity
 56 kumpf  1.1 {
 57 kumpf  1.3 public:
 58 marek  1.6     AutoPThreadSecurity(const OperationContext& context, bool reverse=false) {};
 59 kumpf  1.1 };
 60 kumpf  1.3 
 61 kumpf  1.1 #else
 62            
 63 mike   1.2 class AutoPThreadSecurity
 64 kumpf  1.1 {
 65            public:
 66 marek  1.6     AutoPThreadSecurity(const OperationContext& context, bool reverse=false):
 67                    _reverse(reverse)
 68 kumpf  1.1     {
 69 marek  1.6         if (!_reverse)
 70 kumpf  1.1         {
 71 marek  1.6             int err_num=enablePThreadSecurity(context);
 72                        if (err_num!=0)
 73                        {
 74                            // need a new CIMException for this
 75                            throw CIMException(
 76                                CIM_ERR_ACCESS_DENIED,
 77                                String(strerror(err_num)));
 78                        }
 79                    }
 80                    else
 81                    {
 82                        // remember the context, it will be needed in the destructor
 83                        internalOpContextReference = &(context);
 84                        revDisablePThreadSecurity();        
 85 kumpf  1.1         }
 86                };
 87            
 88                ~AutoPThreadSecurity()
 89                {
 90 marek  1.6         if (!_reverse)
 91                    {
 92                        disablePThreadSecurity();
 93                    }
 94                    else
 95                    {
 96                        revEnablePThreadSecurity(*internalOpContextReference);
 97                    }
 98 kumpf  1.1     };
 99 marek  1.6 private:
100                const OperationContext * internalOpContextReference;
101                bool _reverse;
102 kumpf  1.1 };
103            
104            #endif
105            
106            PEGASUS_NAMESPACE_END
107            
108            #endif

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2