From mboxrd@z Thu Jan 1 00:00:00 1970 From: kupcevic@sourceware.org Date: 14 Sep 2006 17:52:05 -0000 Subject: [Cluster-devel] conga ricci/modules/storage/ExtendedFS.cpp ric ... Message-ID: <20060914175205.26943.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: conga Changes by: kupcevic at sourceware.org 2006-09-14 17:52:04 Modified files: ricci/modules/storage: ExtendedFS.cpp Makefile SwapFS.cpp . : conga.spec.in.in Added files: ricci/modules/storage: FileMagic.h FileMagic.cpp Log message: storage module: use libmagic instead of executing "file" command Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FileMagic.h.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/FileMagic.cpp.diff?cvsroot=cluster&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/ExtendedFS.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/Makefile.diff?cvsroot=cluster&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/SwapFS.cpp.diff?cvsroot=cluster&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&r1=1.40&r2=1.41 /cvs/cluster/conga/ricci/modules/storage/FileMagic.h,v --> standard output revision 1.1 --- conga/ricci/modules/storage/FileMagic.h +++ - 2006-09-14 17:52:05.102018000 +0000 @@ -0,0 +1,37 @@ +/* + Copyright Red Hat, Inc. 2006 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + This program 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 + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + MA 02139, USA. +*/ +/* + * Author: Stanko Kupcevic + */ + + +#ifndef FileMagic_h +#define FileMagic_h + +#include "String.h" + + +class FileMagic +{ + public: + static String get_description(const String& filename); +}; + + +#endif // GlobalFS_h /cvs/cluster/conga/ricci/modules/storage/FileMagic.cpp,v --> standard output revision 1.1 --- conga/ricci/modules/storage/FileMagic.cpp +++ - 2006-09-14 17:52:05.198820000 +0000 @@ -0,0 +1,75 @@ +/* + Copyright Red Hat, Inc. 2006 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + This program 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 + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + MA 02139, USA. +*/ +/* + * Author: Stanko Kupcevic + */ + + +#include "FileMagic.h" +#include + + + +String +__get_description(const String& filename, + const String& magic_filename = "") +{ + const char* buff = 0; + magic_t cookie = 0; + + try { + cookie = magic_open(MAGIC_SYMLINK|MAGIC_DEVICES|MAGIC_ERROR); + if (!cookie) + throw String("initialization of libmagic failure"); + + if (magic_filename.empty()) { + if (magic_load(cookie, NULL)) + throw String("initialization of libmagic failure: invalid default magic file"); + } else + if (magic_load(cookie, magic_filename.c_str())) + throw String("initialization of libmagic failure: invalid magic file: ") + magic_filename; + + String descr; + buff = magic_file(cookie, filename.c_str()); + if (buff) + descr = buff; + + if (descr.empty()) + throw String("nothing detected"); + if (descr == "data") + throw String("unknown data detected"); + + magic_close(cookie); cookie = 0; + free((char*) buff); buff = 0; + + return descr; + } catch ( ... ) { + if (cookie) + magic_close(cookie); + if (buff) + free((char*) buff); + throw; + } +} + +String +FileMagic::get_description(const String& filename) +{ + return __get_description(filename); +} --- conga/ricci/modules/storage/ExtendedFS.cpp 2006/08/10 22:53:09 1.3 +++ conga/ricci/modules/storage/ExtendedFS.cpp 2006/09/14 17:52:04 1.4 @@ -26,6 +26,7 @@ #include "MountHandler.h" #include "defines.h" #include "UMountError.h" +#include "FileMagic.h" #include @@ -42,23 +43,15 @@ ContentFS("extended_fs", path), _journaled(false) { - vector args; - args.push_back("-s"); - args.push_back("-L"); - args.push_back(path); + String magic(FileMagic::get_description(path)); + if (magic.find("ext3") == magic.npos && + magic.find("ext2") == magic.npos) + throw String(path + " not extended_fs"); + // dumpe2fs String out, err; int status; - if (utils::execute("/usr/bin/file", args, out, err, status)) - throw String("execute failed"); - if (status) - throw String("file failed"); - if (out.find("ext3") == out.npos && - out.find("ext2") == out.npos) - throw String("not extended_fs"); - - // dumpe2fs - args.clear(); + vector args; args.push_back("-h"); args.push_back(path); if (utils::execute("/sbin/dumpe2fs", args, out, err, status)) --- conga/ricci/modules/storage/Makefile 2006/08/16 06:34:20 1.10 +++ conga/ricci/modules/storage/Makefile 2006/09/14 17:52:04 1.11 @@ -17,6 +17,7 @@ TARGET = ricci-modstorage OBJECTS = main.o \ + FileMagic.o \ Props.o \ BD.o \ Content.o \ @@ -52,7 +53,7 @@ INCLUDE += CXXFLAGS += -LDFLAGS += +LDFLAGS += -lmagic all: ${TARGET} --- conga/ricci/modules/storage/SwapFS.cpp 2006/08/10 22:53:09 1.3 +++ conga/ricci/modules/storage/SwapFS.cpp 2006/09/14 17:52:04 1.4 @@ -25,6 +25,7 @@ #include "utils.h" #include "MountHandler.h" #include "UMountError.h" +#include "FileMagic.h" using namespace std; @@ -33,20 +34,9 @@ SwapFS::SwapFS(const String& path) : ContentFS("swap", path) { - vector args; - args.push_back("-s"); - args.push_back("-L"); - args.push_back(path); - - String out, err; - int status; - if (utils::execute("/usr/bin/file", args, out, err, status)) - throw String("execute failed"); - if (status) - throw String("file failed"); - - if (out.find("swap") == out.npos) - throw String(path + "not swap"); + String magic(FileMagic::get_description(path)); + if (magic.find("swap") == magic.npos) + throw String(path + " not swap"); // swapon MountHandler mh; --- conga/conga.spec.in.in 2006/09/05 19:53:40 1.40 +++ conga/conga.spec.in.in 2006/09/14 17:52:04 1.41 @@ -40,7 +40,7 @@ BuildRequires: python-devel >= 2.4.1 %endif BuildRequires: glibc-devel gcc-c++ libxml2-devel sed -BuildRequires: openssl-devel dbus-devel pam-devel pkgconfig +BuildRequires: openssl-devel dbus-devel pam-devel pkgconfig file %description Conga is a project developing management system for remote stations.