diff options
author | Jan Synacek <jsynacek@redhat.com> | 2013-02-08 13:16:31 +0100 |
---|---|---|
committer | Jan Synacek <jsynacek@redhat.com> | 2013-02-11 13:10:40 +0100 |
commit | 7f40ebbf575d93a9d0bc540c484969ec614f308b (patch) | |
tree | 3a698f3560c626c5e9ca6aa060dc1c4b3e836b0a /src/logicalfile/LMI_UnixFileProvider.c | |
parent | 80a4e2961a65f9922e000d27ce642a4789588648 (diff) | |
download | openlmi-providers-7f40ebbf575d93a9d0bc540c484969ec614f308b.tar.gz openlmi-providers-7f40ebbf575d93a9d0bc540c484969ec614f308b.tar.xz openlmi-providers-7f40ebbf575d93a9d0bc540c484969ec614f308b.zip |
New provider: LogicalFile
Diffstat (limited to 'src/logicalfile/LMI_UnixFileProvider.c')
-rw-r--r-- | src/logicalfile/LMI_UnixFileProvider.c | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/src/logicalfile/LMI_UnixFileProvider.c b/src/logicalfile/LMI_UnixFileProvider.c new file mode 100644 index 0000000..8f47d33 --- /dev/null +++ b/src/logicalfile/LMI_UnixFileProvider.c @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2012 Red Hat, Inc. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: Jan Synacek <jsynacek@redhat.com> + */ +#include <konkret/konkret.h> +#include "LMI_UnixFile.h" +#include "file.h" + +static const CMPIBroker* _cb = NULL; + +static void LMI_UnixFileInitialize() +{ +} + +static CMPIStatus LMI_UnixFileCleanup( + CMPIInstanceMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_UnixFileEnumInstanceNames( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_UnixFileEnumInstances( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char** properties) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_UnixFileGetInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char** properties) +{ + LMI_UnixFile lmi_file; + CMPIStatus st; + struct stat sb; + char aux[BUFLEN]; + const char *path; + + st = lmi_check_required(_cb, cop, UNIXFILE); + if (st.rc != CMPI_RC_OK) { + return st; + } + + LMI_UnixFile_InitFromObjectPath(&lmi_file, _cb, cop); + path = KChars(lmi_file.LFName.value); + + if (stat(path, &sb) < 0) { + snprintf(aux, BUFLEN, "Can't stat file: %s", path); + CMReturnWithChars(_cb, CMPI_RC_ERR_NOT_FOUND, aux); + } + sprintf(aux, "%u", sb.st_uid); + LMI_UnixFile_Set_UserID(&lmi_file, aux); + sprintf(aux, "%u", sb.st_gid); + LMI_UnixFile_Set_GroupID(&lmi_file, aux); + LMI_UnixFile_Set_SetUid(&lmi_file, sb.st_mode & S_IFMT & S_ISUID); + LMI_UnixFile_Set_SetGid(&lmi_file, sb.st_mode & S_IFMT & S_ISGID); + sprintf(aux, "%u", (unsigned int)sb.st_ino); + LMI_UnixFile_Set_FileInodeNumber(&lmi_file, aux); + LMI_UnixFile_Set_LinkCount(&lmi_file, sb.st_nlink); + /* sticky bit */ + LMI_UnixFile_Set_SaveText(&lmi_file, sb.st_mode & S_IFMT & S_ISVTX); + + KReturnInstance(cr, lmi_file); + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_UnixFileCreateInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const CMPIInstance* ci) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_UnixFileModifyInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const CMPIInstance* ci, + const char** properties) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_UnixFileDeleteInstance( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +static CMPIStatus LMI_UnixFileExecQuery( + CMPIInstanceMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* lang, + const char* query) +{ + CMReturn(CMPI_RC_ERR_NOT_SUPPORTED); +} + +CMInstanceMIStub( + LMI_UnixFile, + LMI_UnixFile, + _cb, + LMI_UnixFileInitialize()) + +static CMPIStatus LMI_UnixFileMethodCleanup( + CMPIMethodMI* mi, + const CMPIContext* cc, + CMPIBoolean term) +{ + CMReturn(CMPI_RC_OK); +} + +static CMPIStatus LMI_UnixFileInvokeMethod( + CMPIMethodMI* mi, + const CMPIContext* cc, + const CMPIResult* cr, + const CMPIObjectPath* cop, + const char* meth, + const CMPIArgs* in, + CMPIArgs* out) +{ + return LMI_UnixFile_DispatchMethod( + _cb, mi, cc, cr, cop, meth, in, out); +} + +CMMethodMIStub( + LMI_UnixFile, + LMI_UnixFile, + _cb, + LMI_UnixFileInitialize()) + +KONKRET_REGISTRATION( + "root/cimv2", + "LMI_UnixFile", + "LMI_UnixFile", + "instance method") +/* vi: set et: */ |