(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.5.2.1 #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.5.2.1     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.5.2.1     AutoPThreadSecurity(const OperationContext& context, bool reverse=false):
 67                        _reverse(reverse)
 68 kumpf  1.1         {
 69 marek  1.5.2.1         if (!_reverse)
 70 kumpf  1.1             {
 71 marek  1.5.2.1             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.5.2.1         if (!_reverse)
 91                        {
 92                            disablePThreadSecurity();
 93                        }
 94                        else
 95                        {
 96                            revEnablePThreadSecurity(*internalOpContextReference);
 97                        }
 98 kumpf  1.1         };
 99 marek  1.5.2.1 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