From 4354a7f31b6ed6a0b8cf58d2bd3cc10945385a4f Mon Sep 17 00:00:00 2001 From: Jan Synacek Date: Fri, 25 Apr 2014 09:11:51 +0200 Subject: logicalfile: respect configuration when creating/removing directories --- src/logicalfile/LMI_UnixDirectoryProvider.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/logicalfile/LMI_UnixDirectoryProvider.c b/src/logicalfile/LMI_UnixDirectoryProvider.c index 65a5430..0f19cbb 100644 --- a/src/logicalfile/LMI_UnixDirectoryProvider.c +++ b/src/logicalfile/LMI_UnixDirectoryProvider.c @@ -90,8 +90,9 @@ static CMPIStatus LMI_UnixDirectoryCreateInstance( check_status(st); const char *path = get_string_property_from_op(iop, "Name"); + bool allow = lmi_read_config_boolean("LMI_UnixDirectory", "AllowMkdir"); - if (mkdir(path, 0777) < 0) { + if (allow && mkdir(path, 0777) < 0) { char errmsg[BUFLEN]; char strerr[BUFLEN]; snprintf(errmsg, BUFLEN, "Can't mkdir: %s (%s)", @@ -99,6 +100,10 @@ static CMPIStatus LMI_UnixDirectoryCreateInstance( strerror_r(errno, strerr, BUFLEN)); CMReturnWithChars(_cb, CMPI_RC_ERR_FAILED, errmsg); } + if (allow == false) { + CMReturnWithChars(_cb, CMPI_RC_ERR_FAILED, + "Can't mkdir: disabled by provider configuration"); + } return CMReturnObjectPath(cr, iop); } @@ -121,8 +126,9 @@ static CMPIStatus LMI_UnixDirectoryDeleteInstance( const CMPIObjectPath* cop) { const char *path = get_string_property_from_op(cop, "Name"); + bool allow = lmi_read_config_boolean("LMI_UnixDirectory", "AllowRmdir"); - if (rmdir(path) < 0) { + if (allow && rmdir(path) < 0) { char errmsg[BUFLEN]; char strerr[BUFLEN]; snprintf(errmsg, BUFLEN, "Can't rmdir: %s (%s)", @@ -130,6 +136,10 @@ static CMPIStatus LMI_UnixDirectoryDeleteInstance( strerror_r(errno, strerr, BUFLEN)); CMReturnWithChars(_cb, CMPI_RC_ERR_FAILED, errmsg); } + if (allow == false) { + CMReturnWithChars(_cb, CMPI_RC_ERR_FAILED, + "Can't rmdir: disabled by provider configuration"); + } CMReturn(CMPI_RC_OK); } @@ -186,4 +196,5 @@ KONKRET_REGISTRATION( /* vi: set et: */ /* Local Variables: */ /* indent-tabs-mode: nil */ +/* c-basic-offset: 4 */ /* End: */ -- cgit