External Contributions to sfcc
******************************

Below are listed code contributions from the open source community.  
The format is:

Author, Organization
--------------------
MM/DD/YYYY [ bugnum ] description


where "bugnum" is the bug number on SourceForge where a summary of the fix can 
be found, along with a patch file containing the contributed code.

The SourceForge bugtracker can be found here:

https://sourceforge.net/tracker/?atid=712784&group_id=128809

********************************************************************************

Shashi Uli, Citrix
------------------
04/23/2008 [ 1940546 ] Memory corruption in AsciiToXmlStr()

Pavol Rusnak, Novell
--------------------
09/06/2009 [ 2102339 ] Missing ret values in sblim-sfcc
09/08/2008 [ 2102345 ] missing configuration of CIM-HOST-PORT in sblim-sfcc
11/12/2008 [ 2270179 ] Missing includes and values in return statements

Rajib Saha, AMI
---------------
08/19/2009 [ 2691478 ] sfcc 2.1.0 cannot handle OutParams on Extrinsic Method Call

Klaus Kampf, Novell
-------------------
09/02/2009 [ 2847782 ] sfcc getClass crashes if cimom isn't running
09/22/2009 [ 2849853 ] getClass reports most property types as CMPI_Instance
03/23/2011 [ 2990315 ] cmciRelease not called in case of error

Suresh Sundriyal, VMWare
------------------------
04/05/2010 [ 2982349 ] Memory leak in backend/cimxml/client.c
04/05/2010 [ 2982352 ] Double free in backend/cimxml/property.c

Josef Moellers, Fujitsu
-----------------------
03/29/2011 [ 3196128 ] enumInstances does not set NameSpace in ObjectPath in XML mode

J. Bart Whiteley, Novell
------------------------
03/29/2011 [ 1956407 ] CIM-XML/HTTP connection to unix socket
