summaryrefslogtreecommitdiffstats
path: root/src/logicalfile/LMI_DirectoryContainsFileProvider.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/logicalfile/LMI_DirectoryContainsFileProvider.c')
-rw-r--r--src/logicalfile/LMI_DirectoryContainsFileProvider.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/logicalfile/LMI_DirectoryContainsFileProvider.c b/src/logicalfile/LMI_DirectoryContainsFileProvider.c
index 8eb6018..fcc77f3 100644
--- a/src/logicalfile/LMI_DirectoryContainsFileProvider.c
+++ b/src/logicalfile/LMI_DirectoryContainsFileProvider.c
@@ -93,6 +93,27 @@ static CMPIStatus dir_file_objectpaths(
CMReturn(CMPI_RC_OK);
}
+static int check_valid_classes(const CMPIObjectPath *o)
+{
+ const char *VALID_CLASSES[] = {
+ "LMI_DataFile",
+ "LMI_UnixDeviceFile",
+ "LMI_UnixDirectory",
+ "LMI_FIFOPipeFile",
+ "LMI_SymbolicLink",
+ "LMI_UnixSocket",
+ NULL
+ };
+ int found = 0;
+ for (int i = 0; VALID_CLASSES[i]; i++) {
+ if (CMClassPathIsA(_cb, o, VALID_CLASSES[i], NULL)) {
+ found++;
+ break;
+ }
+ }
+ return found;
+}
+
static CMPIStatus associators(
CMPIAssociationMI* mi,
const CMPIContext* cc,
@@ -115,6 +136,10 @@ static CMPIStatus associators(
if (st.rc != CMPI_RC_OK) {
return st;
}
+ /* allow only LMI_UnixFile and classes derived from CIM_LogicalFile */
+ if (!check_valid_classes(cop)) {
+ CMReturn(CMPI_RC_OK);
+ }
cd = CMGetKey(cop, "CreationClassName", &st);
const char *ccname = KChars(cd.value.string);
@@ -182,6 +207,11 @@ static CMPIStatus references(
CMPIObjectPath *o;
CMPIInstance *ci;
+ /* allow only LMI_UnixFile and classes derived from CIM_LogicalFile */
+ if (!check_valid_classes(cop)) {
+ CMReturn(CMPI_RC_OK);
+ }
+
CIM_DirectoryRef_Init(&lmi_dr, _cb, ns);
CIM_LogicalFileRef_Init(&lmi_lfr, _cb, ns);
LMI_DirectoryContainsFile_Init(&lmi_dcf, _cb, ns);