summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan Synacek <jsynacek@redhat.com>2013-02-13 15:31:23 +0100
committerJan Synacek <jsynacek@redhat.com>2013-02-14 16:00:03 +0100
commitf9800113caf680157b86a7d7e072fb163985e52f (patch)
tree1272a363f330dd66e04d6e61e88063162dc2bb9c /src
parent806c9b45edf41d54c6673fc04a6e0c06e92af101 (diff)
downloadopenlmi-providers-f9800113caf680157b86a7d7e072fb163985e52f.tar.gz
openlmi-providers-f9800113caf680157b86a7d7e072fb163985e52f.tar.xz
openlmi-providers-f9800113caf680157b86a7d7e072fb163985e52f.zip
LogicalFile: check for valid classes in association methods
Diffstat (limited to 'src')
-rw-r--r--src/logicalfile/LMI_DirectoryContainsFileProvider.c30
-rw-r--r--src/logicalfile/LMI_FileIdentityProvider.c32
2 files changed, 62 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);
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)) {