コード例 #1
0
ファイル: mds_util.c プロジェクト: ozgend/hive
BioAPI_RETURN BioAPI MDSU_Term( MDSU_CONTEXT *pContext )
{
	BioAPI_RETURN rv = CSSM_OK;

	/* Parameter check */
	if ( pContext == NULL )
	{
		rv = CSSMERR_CSSM_INVALID_POINTER;
	}
	else
	{
		/* Commit the records in the cache */
		MDSU_Commit( pContext );

		/* Free the commit cache */
		MDSU_free( pContext, pContext->pCommitCache );

		/* Close the database handle */
		if ( ( rv = s_MDSUFuncs.DbClose( pContext->hDb ) ) == CSSM_OK )
		{
			/* Close the MDS connection */
			if ( ( rv = MDS_Terminate( pContext->hMds ) ) == CSSM_OK )
			{
				/* Wipe the context */
				memset( pContext, 0, sizeof(MDSU_CONTEXT) );
			}
		} /* DbClose */
	} /* Validation */

	return rv;
}
コード例 #2
0
ファイル: modinstall.c プロジェクト: amuntasim/jbioapi
static CSSM_RETURN __CleanMDS( MDSU_CONTEXT *pContext )
{
	CSSM_RETURN rv = CSSM_OK;
	MDSU_CDSA_COMMON_SCHEMA CommonTemplate;
	MDSU_CDSA_COMMON_SCHEMA CommonData;
	MDSU_CDSA_DL_PRIMARY_SCHEMA DLPrimaryTemplate;
	MDSU_CDSA_DL_PRIMARY_SCHEMA DLPrimaryData;
	MDSU_CDSA_DL_ENC_PRODUCT_SCHEMA DLEncProdTemplate;
	MDSU_CDSA_DL_ENC_PRODUCT_SCHEMA DLEncProdData;

	/* Execute a search on every DL record type to get a handle of all
	 * records and then delete them.
	 */
	/* Common Schema */
	CommonTemplate.ModuleID = MODULE_GUID;
	rv = MDSU_FindFirst( pContext,
						 &IfiMdsuCdsadirCommonSchema,
						 &CommonTemplate,
						 MDSU_COM_MODULE_ID,
						 &CommonData,
						 NULL );
	while ( rv == CSSM_OK )
	{
		if ( CommonData.Manifest.Data )
		{
			MDSU_free( pContext, CommonData.Manifest.Data );
		}

		rv = MDSU_FindNext( pContext,
							&CommonData,
							NULL );
	}
	if ( rv == CSSMERR_DL_ENDOFDATA )
	{
		/* DL Primary Schema */
		DLPrimaryTemplate.ModuleID = MODULE_GUID;
		rv = MDSU_FindFirst( pContext,
							 &IfiMdsuCdsadirDLPrimarySchema,
							 &DLPrimaryTemplate,
							 MDSU_DLP_MODULE_ID,
							 &DLPrimaryData,
							 NULL );
		while ( rv == CSSM_OK )
		{
			if ( DLPrimaryData.Manifest.Data )
			{
				MDSU_free( pContext, DLPrimaryData.Manifest.Data );
			}

			rv = MDSU_FindNext( pContext,
								&DLPrimaryData,
								NULL );
		}
		if ( rv == CSSMERR_DL_ENDOFDATA )
		{
			/* DL Encapsulated Product Schema */
			DLEncProdTemplate.ModuleID = MODULE_GUID;
			rv = MDSU_FindFirst( pContext,
								 &IfiMdsuCdsadirDLEncProductSchema,
								 &DLEncProdTemplate,
								 MDSU_DLEP_MODULE_ID,
								 &DLEncProdData,
								 NULL );
			while ( rv == CSSM_OK )
			{
				rv = MDSU_FindNext( pContext,
									&DLEncProdData,
									NULL );
			}
			if ( rv == CSSMERR_DL_ENDOFDATA )
			{
				/* Flush everything from the MDS */
				rv = MDSU_Revert( pContext );
			} /* CSP Encapsulated Product removed */
		} /* CSP Primary removed */
	} /* Common removed */

	/* Make sure nothing gets removed if there is an error */
	if ( ( rv != CSSMERR_DL_ENDOFDATA ) &&
		 ( rv != CSSM_OK ) )
	{
		MDSU_Commit( pContext );
	}

	return rv;
}
コード例 #3
0
ファイル: modinstall.c プロジェクト: amuntasim/jbioapi
BioAPI_RETURN BioAPI INSTALL_ENTRY_NAME(
						const char *szModuleName,
						const char *szSearchPath,
						BioAPI_DATA *pCredential,
						INSTALL_ACTION Action,
						BioAPI_INSTALL_ERROR *pError )
{
	BioAPI_RETURN rv = BioAPI_OK;
	MDSU_CONTEXT MDSUContext;
	MDSU_CDSA_COMMON_SCHEMA Common;
	MDSU_CDSA_DL_PRIMARY_SCHEMA DLPrimary;
	MDSU_CDSA_DL_ENC_PRODUCT_SCHEMA DLEncProduct;


	/* Initialize the MDS update */
	if ( ( rv = MDSU_Init( &MDSUContext,
						   &Addin_APIMemFuncs,
						   &MODULE_GUID,
						   MDS_CDSA_DIRECTORY,
						   ( CSSM_DB_ACCESS_READ |
							 CSSM_DB_ACCESS_WRITE ),
						   DL_MDS_COMMIT_SIZE ) ) != CSSM_OK )
	{
		sprintf( pError->ErrorString, "MDS Error (Init): %X\n", rv );
		pError->ErrorCode = rv;
		return rv;
	}

	/* Place code to remove existing entries here */
	if ( ( rv = __CleanMDS( &MDSUContext ) ) != CSSM_OK )
	{
		sprintf( pError->ErrorString, "MDS Error (Clean): %X\n", rv );
		pError->ErrorCode = rv;
		MDSU_Term( &MDSUContext );
		return rv;
	}
	if ( Action == INSTALL_ACTION_UNINSTALL )
	{
		MDSU_Term( &MDSUContext );
		return rv;
	}

	/* Fill in the "easy" common schema structure */
	memcpy( &Common.ModuleID, &MODULE_GUID, sizeof(MODULE_GUID) );
	Common.Manifest = *pCredential;
	strcpy( Common.ModuleName, szModuleName );
	strcpy( Common.Path, szSearchPath );
	Common.CDSAVersion.Major = CSSM_MAJOR;
	Common.CDSAVersion.Minor = CSSM_MINOR;
	strcpy( Common.Desc, ADDIN_NAME );
	Common.DynamicFlag = CSSM_FALSE;
	Common.MultiThreadFlag = CSSM_FALSE;
	Common.ServiceMask = CSSM_SERVICE_DL;

	/* Insert the common schema record into the MDS */
	rv = MDSU_UpdateSchema( &MDSUContext,
							&IfiMdsuCdsadirCommonSchema,
							&Common,
							NULL );
	if ( rv != CSSM_OK )
	{
		sprintf( pError->ErrorString, "MDS Error (common-DL): %X\n", rv );
		pError->ErrorCode = rv;
		MDSU_Term( &MDSUContext );
		return rv;
	}

	/* Fill in the DL primary schema data */
	memcpy( &DLPrimary.ModuleID, &MODULE_GUID, sizeof(MODULE_GUID) );
	DLPrimary.SSID = ADDIN_DL_SUBSERVICE_ID;
	DLPrimary.Manifest.Data = NULL;
	DLPrimary.Manifest.Length = 0;
	strcpy( DLPrimary.ModuleName, szModuleName );
	DLPrimary.ProductVersion.Major = INTEL_FF_DSM_MAJOR_VER;
	DLPrimary.ProductVersion.Minor = INTEL_FF_DSM_MINOR_VER;
	strcpy( DLPrimary.Vendor, ADDIN_VENDOR_NAME );
	DLPrimary.DLType = CSSM_DL_FFS;
	DLPrimary.QueryLimitsFlag = CSSM_TRUE;
	memset(DLPrimary.SampleTypes, 0,
				sizeof(CSSM_SAMPLE_TYPE)*MDSU_MAX_VALUE_COUNT);
	DLPrimary.NumSampleTypes = 0;
	memset(DLPrimary.AclSubjectTypes, 0,
				  sizeof(CSSM_ACL_SUBJECT_TYPE)*MDSU_MAX_VALUE_COUNT);
	DLPrimary.NumAclSubjectTypes = 0;
	memset(DLPrimary.AclAuthTags, 0,
				sizeof(CSSM_ACL_AUTHORIZATION_TAG)*MDSU_MAX_VALUE_COUNT);
	DLPrimary.NumAclAuthTags = 0;
	DLPrimary.ConjunctiveOps[0] = CSSM_DB_NONE;
	DLPrimary.ConjunctiveOps[1] = CSSM_DB_AND;
	DLPrimary.ConjunctiveOps[2] = CSSM_DB_OR;
	DLPrimary.NumConjunctiveOps = 3;
	DLPrimary.RelationalOps[0] = CSSM_DB_EQUAL;
	DLPrimary.RelationalOps[1] = CSSM_DB_NOT_EQUAL;
	DLPrimary.NumRelationalOps = 2;

	/* Write the data to MDS */
	rv = MDSU_UpdateSchema( &MDSUContext,
							&IfiMdsuCdsadirDLPrimarySchema,
							&DLPrimary,
							NULL );
	if ( rv != CSSM_OK )
	{
		sprintf( pError->ErrorString, "MDS Error (DL Primary): %X\n", rv );
		pError->ErrorCode = rv;
		MDSU_Revert( &MDSUContext );
		MDSU_Term( &MDSUContext );
		return rv;
	}

	/* Fill in the DL encapsulated product schema data */
	memcpy( &DLEncProduct.ModuleID, &MODULE_GUID, sizeof(MODULE_GUID) );
	DLEncProduct.SSID = ADDIN_DL_SUBSERVICE_ID;
	strcpy( DLEncProduct.ProductDesc, "Intel FlatFile DL" );
	DLEncProduct.ProductVersion.Major = ADDIN_PRODUCT_VERSION_MAJOR;
	DLEncProduct.ProductVersion.Minor = ADDIN_PRODUCT_VERSION_MINOR;
	strcpy( DLEncProduct.ProductVendor, ADDIN_VENDOR_NAME );
	DLEncProduct.ProductFlags = 0;
	strcpy( DLEncProduct.StandardDesc, "Flatfile" );
	DLEncProduct.StandardVersion.Major = 0;
	DLEncProduct.StandardVersion.Minor = 0;
	DLEncProduct.Protocol = CSSM_NET_PROTO_NONE;
	DLEncProduct.RetrievalMode = 0;

	/* Write the data to MDS */
	rv = MDSU_UpdateSchema( &MDSUContext,
							&IfiMdsuCdsadirDLEncProductSchema,
							&DLEncProduct,
							NULL );
	if ( rv != CSSM_OK )
	{
		sprintf( pError->ErrorString, "MDS Error (DL Enc): %X\n", rv );
		pError->ErrorCode = rv;
		MDSU_Revert( &MDSUContext );
		MDSU_Term( &MDSUContext );
		return rv;
	}

	/* Commit the records */
	MDSU_Commit( &MDSUContext );

	/* Shut down the MDS connection */
	MDSU_Term( &MDSUContext );

	return BioAPI_OK;
}