Beispiel #1
0
QString QRec::operator [](int i) const
{
	ASSERTVALID();

	switch ( m_outputAttributeData[i].Info.AttributeFormat )
	{
	case CSSM_DB_ATTRIBUTE_FORMAT_STRING:
		return AttributeFormatString( i );
		break;

	case CSSM_DB_ATTRIBUTE_FORMAT_UINT32:
		return AttributeFormatUint32( i );
		break;

	case CSSM_DB_ATTRIBUTE_FORMAT_MULTI_UINT32:
		return AttributeFormatMultiUint32( i );
		break;

	case CSSM_DB_ATTRIBUTE_FORMAT_BLOB:
		return AttributeFormatBlob( i );
		break;

	case CSSM_DB_ATTRIBUTE_FORMAT_SINT32:
		return AttributeFormatSint32( i );
		break;


	default:
		return _T("Error: Unsupported attribute data" );
		break;
	} //switch
}
Beispiel #2
0
CSSM_RETURN QMDS::DataDelete(MDS_DB_HANDLE MdsDbHandle,
			     const CSSM_DB_UNIQUE_RECORD *UniqueRecordIdentifier)
{
  ASSERTVALID();

  return m_dlFunctions.DataDelete( MdsDbHandle, UniqueRecordIdentifier );
}
Beispiel #3
0
CSSM_DB_UNIQUE_RECORD_PTR CRecType::NextRecordId(CSSM_DB_RECORD_ATTRIBUTE_DATA & outputAttributes)
{
    ASSERTVALID();

    if ( m_resultsHandle == 0 )
    {
        return NULL;
    }

    CSSM_DB_UNIQUE_RECORD_PTR recordId = NULL;

    CMDS * pMds = m_pDir->m_pMds;

    CSSM_RETURN ret = pMds->DataGetNext(
                          m_pDir->m_hDb,
                          m_resultsHandle,
                          &outputAttributes,
                          NULL,
                          &recordId);

    if ((ret != CSSM_OK) && (ret != CSSMERR_DL_ENDOFDATA))
    {
        //char buffer[128];
        //GetErrorMsgString(ret,buffer,sizeof(buffer));

        CString strMsg;
        strMsg.Format(
            _T("Error occurred during DataGetFirst.	 MDS may be corrupted"));

        AfxMessageBox( strMsg );

    }

    return recordId;
}
Beispiel #4
0
CSSM_RETURN QMDS::DataAbortQuery(MDS_DB_HANDLE MdsDbHandle,
				 CSSM_HANDLE ResultsHandle)
{
  ASSERTVALID();
  
  return m_dlFunctions.DataAbortQuery( MdsDbHandle, ResultsHandle );
}
Beispiel #5
0
QString QRec::AttributeFormatMultiUint32(int i) const
{
	ASSERTVALID();
	ASSERT(m_outputAttributeData[i].Info.AttributeFormat ==
		   CSSM_DB_ATTRIBUTE_FORMAT_MULTI_UINT32 );

	if ( m_outputAttributeData[i].Value->Data == NULL )
	{
		return "<NULL>";
	}

	QString str = "{ ";
	QString strTmp;
	for ( uint32 j = 0; j < m_outputAttributeData[i].Value->Length; j+=4 )
	{
		uint32 u32Val = *((uint32 *) (m_outputAttributeData[i].Value->Data+j));
		//QT: alternative to Format()
		//strTmp.Format( "0x%.8X", u32Val );
                strTmp = QStringFormat("0x%.8X", u32Val);
		str += strTmp;
		str += " ";
	}
	str += "}";

	return str;
}
Beispiel #6
0
CSSM_RETURN QDirectory::Open(QMDS *pMds, const char *szDirName)
{
  ASSERTVALID();

  m_pMds = pMds;
  m_strDirName = szDirName;
  return OpenDirectory();
}
Beispiel #7
0
CSSM_RETURN QMDS::FreeUniqueRecord(MDS_DB_HANDLE MdsDbHandle,
				   CSSM_DB_UNIQUE_RECORD_PTR UniqueRecord)
{
  ASSERTVALID();

  return m_dlFunctions.FreeUniqueRecord(MdsDbHandle,
					UniqueRecord);
}
Beispiel #8
0
CSSM_RETURN QMDS::DataGetFromUniqueRecordId(MDS_DB_HANDLE MdsDbHandle,
					    CSSM_DB_UNIQUE_RECORD_PTR UniqueRecord,
					    CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
					    CSSM_DATA_PTR  Data)
{
  ASSERTVALID();

  return m_dlFunctions.DataGetFromUniqueRecordId(MdsDbHandle,
						 UniqueRecord,
						 Attributes,
						 Data);
}
Beispiel #9
0
CSSM_RETURN QDirectory::CloseDirectory()
{
  ASSERTVALID();

  CSSM_RETURN crStatus = m_pMds->DbClose( m_hDb );

  if ( crStatus == CSSM_OK )
  {
    memset( &m_hDb, 0, sizeof(MDS_DB_HANDLE) );
  }

  return crStatus;
}
Beispiel #10
0
CSSM_RETURN QMDS::DataInsert(MDS_DB_HANDLE MdsDbHandle,
			     CSSM_DB_RECORDTYPE RecordType,
			     const CSSM_DB_RECORD_ATTRIBUTE_DATA *Attributes,
			     const CSSM_DATA *Data,
			     CSSM_DB_UNIQUE_RECORD_PTR *UniqueId)
{
  ASSERTVALID();
  
  return m_dlFunctions.DataInsert(MdsDbHandle,
				  RecordType,
				  Attributes,
				  Data,
				  UniqueId);
}
Beispiel #11
0
CString CRec::AttributeFormatBlob(int i) const
{
	ASSERTVALID();
	ASSERT(m_outputAttributeData[i].Info.AttributeFormat ==
		   CSSM_DB_ATTRIBUTE_FORMAT_BLOB );

	if ( m_outputAttributeData[i].Value->Data == NULL )
	{
		return "<NULL>";
	}

	CString str;
	uint32 u32NumBytesToDisplay = 0;
	const uint32 u32MaxNumBytesToDisplay = 12;

	if ( s_bViewBlobAsString )
	{
		u32NumBytesToDisplay =
			__min(2*u32MaxNumBytesToDisplay, m_outputAttributeData[i].Value->Length);

		CString strTmp(
			(LPCTSTR) m_outputAttributeData[i].Value->Data,
			u32NumBytesToDisplay);

		str = strTmp + " ";
	}
	else
	{
		u32NumBytesToDisplay =
			__min(u32MaxNumBytesToDisplay, m_outputAttributeData[i].Value->Length);

		CString strTmp;

		for ( uint32 j = 0; j < u32NumBytesToDisplay; j++ )
		{
			uint8 u8Val = *((uint8 *) (m_outputAttributeData[i].Value->Data+j));
			strTmp.Format( "0x%.2X", u8Val );

			str += strTmp;
			str += " ";
		}
	}

	if ( m_outputAttributeData[i].Value->Length > u32NumBytesToDisplay )
	{
		str += "...";
	}

	return str;
}
Beispiel #12
0
CSSM_RETURN QMDS::DataGetNext(MDS_DB_HANDLE MdsDbHandle,
			      CSSM_HANDLE ResultsHandle,
			      CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
			      CSSM_DATA_PTR Data,
			      CSSM_DB_UNIQUE_RECORD_PTR *UniqueID)
{
  ASSERTVALID();
  
  return m_dlFunctions.DataGetNext(MdsDbHandle,
				   ResultsHandle,
				   Attributes,
				   Data,
				   UniqueID);
}
Beispiel #13
0
CString CRec::AttributeFormatString(int i) const
{
	ASSERTVALID();
	ASSERT(m_outputAttributeData[i].Info.AttributeFormat ==
		   CSSM_DB_ATTRIBUTE_FORMAT_STRING );

	if ( m_outputAttributeData[i].Value->Data == NULL )
	{
		return "<NULL>";
	}

	CString str;
	str.Format( "\"%s\"", m_outputAttributeData[i].Value->Data );
	return str;
}
Beispiel #14
0
CString CRec::AttributeFormatUint32(int i) const
{
	ASSERTVALID();
	ASSERT(m_outputAttributeData[i].Info.AttributeFormat ==
		   CSSM_DB_ATTRIBUTE_FORMAT_UINT32 );

	if ( m_outputAttributeData[i].Value->Data == NULL )
	{
		return "<NULL>";
	}

	CString str;
	uint32 u32Val = *((uint32 *) m_outputAttributeData[i].Value->Data);
	str.Format( "0x%.8X", u32Val );
	return str;
}
Beispiel #15
0
CSSM_RETURN QMDS::DataModify(MDS_DB_HANDLE MdsDbHandle,
			     CSSM_DB_RECORDTYPE RecordType,
			     CSSM_DB_UNIQUE_RECORD_PTR	UniqueRecordIdentifier,
			     const CSSM_DB_RECORD_ATTRIBUTE_DATA *AttributesToBeModified,
			     const CSSM_DATA *DataToBeModified,
			     const CSSM_DB_MODIFY_MODE ModifyMode)
{
  ASSERTVALID();
  
  return m_dlFunctions.DataModify(MdsDbHandle,
				  RecordType,
				  UniqueRecordIdentifier,
				  AttributesToBeModified,
				  DataToBeModified,
				  ModifyMode);
}
Beispiel #16
0
QString QRec::AttributeFormatString(int i) const
{
  ASSERTVALID();
  ASSERT(m_outputAttributeData[i].Info.AttributeFormat ==
	 CSSM_DB_ATTRIBUTE_FORMAT_STRING );
  
  if ( m_outputAttributeData[i].Value->Data == NULL )
  {
    return "<NULL>";
  }

  QString str;
  //QT: alternative to Format()
  //str.Format( "\"%s\"", m_outputAttributeData[i].Value->Data );
  str += "\"";
  str += (const char *)m_outputAttributeData[i].Value->Data;
  str += "\"";
  return str;
}
Beispiel #17
0
QString QRec::AttributeFormatSint32(int i) const
{
	ASSERTVALID();
	ASSERT(m_outputAttributeData[i].Info.AttributeFormat ==
		   CSSM_DB_ATTRIBUTE_FORMAT_SINT32 );

	if ( m_outputAttributeData[i].Value->Data == NULL )
	{
		return "<NULL>";
	}

	QString str;
	sint32 s32Val = *((sint32 *) m_outputAttributeData[i].Value->Data);
	
	//QT: alternative to Format()
	//str.Format( "0x%.8X", s32Val );
	str = QStringFormat("0x%.8X", s32Val );

	return str;
}
Beispiel #18
0
CSSM_RETURN QDirectory::OpenDirectory()
{
  ASSERTVALID();


  CSSM_DB_ACCESS_TYPE access =
    CSSM_DB_ACCESS_READ | CSSM_DB_ACCESS_WRITE;

  m_hDb.DLHandle = m_pMds->m_hMds;
  m_hDb.DBHandle = 0;
  
  CSSM_RETURN ret = m_pMds->DbOpen(m_strDirName,
				   NULL,
				   access,
				   NULL,
				   NULL,
				   &m_hDb.DBHandle);
  
  return ret;
}
Beispiel #19
0
//////////////////////////////////////////////////////////////////////
//Wrappers Around MDS_FUNCS Function Pointers
//////////////////////////////////////////////////////////////////////
CSSM_RETURN QMDS::DbOpen(const char *DbName,
			 const CSSM_NET_ADDRESS *DbLocation,
			 CSSM_DB_ACCESS_TYPE AccessRequest,
			 const CSSM_ACCESS_CREDENTIALS *AccessCred,
			 const void *OpenParameters,
			 CSSM_DB_HANDLE *hMds)
/*
CSSM_DB_HANDLE QMDS::DbOpen(const char *DbName,
const CSSM_NET_ADDRESS *DbLocation,
const CSSM_DB_ACCESS_TYPE *AccessRequest,
const CSSM_USER_AUTHENTICATION *UserAuthentication,
const void *OpenParameters)
*/
{
  ASSERTVALID();

  return m_dlFunctions.DbOpen(m_hMds,
			      DbName,
			      DbLocation,
			      AccessRequest,
			      AccessCred,
			      OpenParameters,
			      hMds);
}
Beispiel #20
0
CSSM_RETURN QMDS::DbClose(MDS_DB_HANDLE MdsDbHandle)
{
  ASSERTVALID();

  return m_dlFunctions.DbClose( MdsDbHandle );
}
Beispiel #21
0
CSSM_RETURN QMDS::GetDbNames(CSSM_NAME_LIST_PTR *pNameList)
{
  ASSERTVALID();

  return m_dlFunctions.GetDbNames( m_hMds, pNameList );
}
Beispiel #22
0
CSSM_RETURN QMDS::GetDbNameFromHandle(MDS_DB_HANDLE MdsHandle, char** dbName)
{
  ASSERTVALID();
  
  return m_dlFunctions.GetDbNameFromHandle( MdsHandle,dbName);
}
Beispiel #23
0
void CRec::Serialize( CArchive& archive )
{
	ASSERTVALID();
	// call base class function first
	// base class is CObject in this case
	CObject::Serialize( archive );

	// now do the stuff for our specific class
	if ( archive.IsStoring() )
	{
		archive.Write(
			&m_outputAttributes.DataRecordType,
			4);

		archive.Write(
			&m_outputAttributes.SemanticInformation,
			4);

		archive.Write(
			&m_outputAttributes.NumberOfAttributes,
			4);

		for ( uint32 i = 0; i < m_outputAttributes.NumberOfAttributes; i++ )
		{
			//store attribute name
			archive.Write(
				&m_outputAttributes.AttributeData[i].Info.AttributeNameFormat,
				4);
			ASSERT( m_outputAttributes.AttributeData[i].Info.AttributeNameFormat ==
					CSSM_DB_ATTRIBUTE_NAME_AS_STRING );

			//Need to fix this if you want to extend it to CSSM_DB_ATTRIBUTE_NAME_AS_OID
			//store attribute info
			//	store attribute info label
			DWORD dwAttrNameLength =
				strlen(m_outputAttributes.AttributeData[i].Info.Label.AttributeName) + 1;
			archive.Write(
				&dwAttrNameLength,
				4);
			archive.Write(
				m_outputAttributes.AttributeData[i].Info.Label.AttributeName,
				dwAttrNameLength);

			//store attribute value format
			archive.Write(
				&m_outputAttributes.AttributeData[i].Info.AttributeFormat,
				4);

			//store attribute value;
			archive.Write(
				&m_outputAttributes.AttributeData[i].Value->Length,
				4);
			if ( m_outputAttributes.AttributeData[i].Value->Length )
			{
				archive.Write(
					m_outputAttributes.AttributeData[i].Value->Data,
					m_outputAttributes.AttributeData[i].Value->Length);
			}
		}
	}
	else
	{
		archive.Read(
			&m_outputAttributes.DataRecordType,
			4);

		archive.Read(
			&m_outputAttributes.SemanticInformation,
			4);

		archive.Read(
			&m_outputAttributes.NumberOfAttributes,
			4);

		for ( uint32 i = 0; i < m_outputAttributes.NumberOfAttributes; i++ )
		{
			//retrieve attribute name
			//	retrieve attribute info label
			archive.Read(
				&m_outputAttributes.AttributeData[i].Info.AttributeNameFormat,
				4);
			ASSERT( m_outputAttributes.AttributeData[i].Info.AttributeNameFormat ==
					CSSM_DB_ATTRIBUTE_NAME_AS_STRING );

			//Need to fix this if you want to extend it to CSSM_DB_ATTRIBUTE_NAME_AS_OID
			DWORD dwAttrNameLength = 0;
			archive.Read(
				&dwAttrNameLength,
				4);

			ASSERT( dwAttrNameLength );

			//allocate memory for the attribute name
			m_outputAttributes.AttributeData[i].Info.Label.AttributeName =
				(char *) CMdsUtil_malloc( dwAttrNameLength, &CMdsUtil_AllocRef );
			if ( !m_outputAttributes.AttributeData[i].Info.Label.AttributeName )
			{
				AfxThrowMemoryException();
			}

			archive.Read(
				m_outputAttributes.AttributeData[i].Info.Label.AttributeName,
				dwAttrNameLength);

			//retrieve attribute value format
			archive.Read(
				&m_outputAttributes.AttributeData[i].Info.AttributeFormat,
				4);

			//retrieve attribute value;
			archive.Read(
				&m_outputAttributes.AttributeData[i].Value->Length,
				4);

			m_outputAttributes.AttributeData[i].Value->Data = NULL;
			if ( m_outputAttributes.AttributeData[i].Value->Length )
			{
				//allocate memory for the data
				m_outputAttributes.AttributeData[i].Value->Data =
					(uint8 *) CMdsUtil_malloc(
						m_outputAttributes.AttributeData[i].Value->Length,
						&CMdsUtil_AllocRef);
				if ( !m_outputAttributes.AttributeData[i].Value->Data )
				{
					AfxThrowMemoryException();
				}

				archive.Read(
					m_outputAttributes.AttributeData[i].Value->Data,
					m_outputAttributes.AttributeData[i].Value->Length);
			}

			//do some error checking and use static memory to represent name
			for ( int j = 0; j < sizeof(s_pMdsAttrInfo)/sizeof(CSSM_DB_ATTRIBUTE_INFO_PTR); j++ )
			{
				if (strcmp(
						s_pMdsAttrInfo[j]->Label.AttributeName,
						m_outputAttributes.AttributeData[i].Info.Label.AttributeName) == 0)
				{
					ASSERT(
						m_outputAttributes.AttributeData[i].Info.AttributeNameFormat ==
						s_pMdsAttrInfo[j]->AttributeNameFormat);

					ASSERT(
						m_outputAttributes.AttributeData[i].Info.AttributeFormat ==
						s_pMdsAttrInfo[j]->AttributeFormat);

					CMdsUtil_free(
						m_outputAttributes.AttributeData[i].Info.Label.AttributeName,
						&CMdsUtil_AllocRef);
					m_outputAttributes.AttributeData[i].Info = *s_pMdsAttrInfo[j];

					break;
				}
			}

			if ( j == sizeof(s_pMdsAttrInfo)/sizeof(CSSM_DB_ATTRIBUTE_INFO_PTR) )
			{
				AfxMessageBox( _T("Unsupported attribute name found in MDS file") );
			}
		}
	}
}
Beispiel #24
0
CSSM_RETURN QMDS::FreeNameList(CSSM_NAME_LIST_PTR NameList)
{
  ASSERTVALID();
  
  return m_dlFunctions.FreeNameList( m_hMds, NameList );
}