diff options
author | Jan Synacek <jsynacek@redhat.com> | 2013-02-13 15:31:23 +0100 |
---|---|---|
committer | Jan Synacek <jsynacek@redhat.com> | 2013-02-14 16:00:03 +0100 |
commit | f9800113caf680157b86a7d7e072fb163985e52f (patch) | |
tree | 1272a363f330dd66e04d6e61e88063162dc2bb9c /src | |
parent | 806c9b45edf41d54c6673fc04a6e0c06e92af101 (diff) | |
download | openlmi-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.c | 30 | ||||
-rw-r--r-- | src/logicalfile/LMI_FileIdentityProvider.c | 32 |
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)) { |