summaryrefslogtreecommitdiffstats
path: root/src/logicalfile/LMI_FileIdentityProvider.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/logicalfile/LMI_FileIdentityProvider.c')
-rw-r--r--src/logicalfile/LMI_FileIdentityProvider.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/logicalfile/LMI_FileIdentityProvider.c b/src/logicalfile/LMI_FileIdentityProvider.c
index 453764e..9e3427c 100644
--- a/src/logicalfile/LMI_FileIdentityProvider.c
+++ b/src/logicalfile/LMI_FileIdentityProvider.c
@@ -27,6 +27,28 @@
static const CMPIBroker* _cb;
+static int check_valid_classes(const CMPIObjectPath *o)
+{
+ const char *VALID_CLASSES[] = {
+ "LMI_UnixFile",
+ "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,
@@ -42,6 +64,11 @@ static CMPIStatus associators(
CMPIStatus st, res;
CMPIInstance *ci;
+ /* allow only LMI_UnixFile and classes derived from CIM_LogicalFile */
+ if (!check_valid_classes(cop)) {
+ CMReturn(CMPI_RC_OK);
+ }
+
/* TODO filtering */
if (names) {
res = CMReturnObjectPath(cr, cop);
@@ -74,6 +101,11 @@ static CMPIStatus references(
const char *ns = KNameSpace(cop);
CMPIInstance *ci;
+ /* allow only LMI_UnixFile and classes derived from CIM_LogicalFile */
+ if (!check_valid_classes(cop)) {
+ CMReturn(CMPI_RC_OK);
+ }
+
LMI_FileIdentity_Init(&lmi_fi, _cb, ns);
if (CMClassPathIsA(_cb, cop, LMI_UnixFile_ClassName, &st)) {