diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2009-08-09 18:52:17 +0200 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2009-08-09 18:52:17 +0200 |
commit | d7edb4799b63b9bbde25a0d04603476aaf8acd50 (patch) | |
tree | 4ef76e718eac041c8ddeff985b67ea70e293f261 /src/modules/UserBackendHome | |
parent | 758f3cf98f95fc906c2517c0d4537ce81cf7386d (diff) | |
download | mad-d7edb4799b63b9bbde25a0d04603476aaf8acd50.tar mad-d7edb4799b63b9bbde25a0d04603476aaf8acd50.zip |
Renamed UserBackendMysql to UserDBBackendMysql and UserBackendHome to UserConfigBackendHome
Diffstat (limited to 'src/modules/UserBackendHome')
-rw-r--r-- | src/modules/UserBackendHome/CMakeLists.txt | 8 | ||||
-rw-r--r-- | src/modules/UserBackendHome/Module.cpp | 28 | ||||
-rw-r--r-- | src/modules/UserBackendHome/Module.h | 52 | ||||
-rw-r--r-- | src/modules/UserBackendHome/UserBackendHome.cpp | 213 | ||||
-rw-r--r-- | src/modules/UserBackendHome/UserBackendHome.h | 70 |
5 files changed, 0 insertions, 371 deletions
diff --git a/src/modules/UserBackendHome/CMakeLists.txt b/src/modules/UserBackendHome/CMakeLists.txt deleted file mode 100644 index 9d053f3..0000000 --- a/src/modules/UserBackendHome/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -include_directories(${INCLUDES}) - -mad_module(UserBackendHome - Module.cpp Module.h - UserBackendHome.cpp UserBackendHome.h -) - -mad_module_libraries(UserBackendHome)
\ No newline at end of file diff --git a/src/modules/UserBackendHome/Module.cpp b/src/modules/UserBackendHome/Module.cpp deleted file mode 100644 index b6a1052..0000000 --- a/src/modules/UserBackendHome/Module.cpp +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Module.cpp - * - * Copyright (C) 2009 Matthias Schiffer <matthias@gamezock.de> - * - * This program 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 3 of the License, 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "Module.h" - -extern "C" { - -Mad::Common::Module* UserBackendHome_create(Mad::Common::Application *application) { - return new Mad::Modules::UserBackendHome::Module(application); -} - -} diff --git a/src/modules/UserBackendHome/Module.h b/src/modules/UserBackendHome/Module.h deleted file mode 100644 index da384bc..0000000 --- a/src/modules/UserBackendHome/Module.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Module.h - * - * Copyright (C) 2009 Matthias Schiffer <matthias@gamezock.de> - * - * This program 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 3 of the License, 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef MAD_MODULES_USERBACKENDHOME_MODULE_H_ -#define MAD_MODULES_USERBACKENDHOME_MODULE_H_ - -#include "UserBackendHome.h" - -#include <Common/Module.h> -#include <Common/UserManager.h> - -namespace Mad { -namespace Modules { -namespace UserBackendHome { - -class Module : public Common::Module { - private: - Common::Application *application; - - boost::shared_ptr<UserBackendHome> backend; - - public: - Module(Common::Application *application0) : application(application0), backend(new UserBackendHome(application)) { - application->getUserManager()->registerBackend(backend); - } - - virtual ~Module() { - application->getUserManager()->unregisterBackend(backend); - } -}; - -} -} -} - -#endif /* MAD_MODULES_USERBACKENDHOME_MODULE_H_ */ diff --git a/src/modules/UserBackendHome/UserBackendHome.cpp b/src/modules/UserBackendHome/UserBackendHome.cpp deleted file mode 100644 index 445af72..0000000 --- a/src/modules/UserBackendHome/UserBackendHome.cpp +++ /dev/null @@ -1,213 +0,0 @@ -/* - * UserBackendHome.cpp - * - * Copyright (C) 2009 Matthias Schiffer <matthias@gamezock.de> - * - * This program 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 3 of the License, 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "UserBackendHome.h" -#include <Core/ConfigEntry.h> -#include <Core/ConfigManager.h> - -#include <boost/filesystem.hpp> - -#include <unistd.h> -#include <sys/stat.h> -#include <sys/types.h> - -namespace Mad { -namespace Modules { -namespace UserBackendHome { - -bool UserBackendHome::handleConfigEntry(const Core::ConfigEntry &entry, bool /*handled*/) { - if(entry[0].getKey().matches("UserManager")) { - if(entry[1].getKey().matches("Skeleton")) { - if(entry[2].empty()) - skeleton = entry[1][0]; - } - else if(entry[1].getKey().matches("HomeDir")) { - if(entry[2].empty()) - homeDir = entry[1][0]; - } - else if(entry[1].getKey().matches("UserDirMode")) { - if(entry[2].empty()) { - if(entry[1][0].empty()) { - dirMode = 0755; - } - else { - char *endptr; - unsigned long val = std::strtoul(entry[1][0].c_str(), &endptr, 8); - if(*endptr || val > 07777) { - application->logf(Core::LoggerBase::WARNING, "UserBackendHome: Invalid configuration: DirMode '%s'", entry[1][0].c_str()); - } - else { - dirMode = val; - } - } - } - } - else if(!entry[1].empty()) - return false; - - return true; - } - - return false; -} - -void UserBackendHome::setOwnerAndCopyMode(const std::string &source, const std::string &dest, const Common::UserInfo &userInfo, bool isSymlink) { - if((isSymlink ? lchown : chown)(dest.c_str(), (uid_t)userInfo.getUid(), (gid_t)userInfo.getGid()) != 0) { - // TODO Error - } - - struct stat st; - if((isSymlink ? lstat : stat)(source.c_str(), &st) == 0) { - if((isSymlink ? lchmod : chmod)(dest.c_str(), st.st_mode & (S_IRWXU|S_IRWXG|S_IRWXO)) != 0) { - // TODO Error - } - } -} - -void UserBackendHome::migrateOwner(const std::string &path, const Common::UserInfo &oldUserInfo, const Common::UserInfo &userInfo, bool isSymlink) { - struct stat st; - if((isSymlink ? lstat : stat)(path.c_str(), &st) != 0) { - // TODO Error - return; - } - - uid_t uid = -1; - gid_t gid = -1; - - if(st.st_uid == oldUserInfo.getUid()) - uid = (uid_t)userInfo.getUid(); - - if(st.st_gid == oldUserInfo.getGid()) - gid = (gid_t)userInfo.getGid(); - - if(uid != (uid_t)-1 || gid != (gid_t)-1) { - if((isSymlink ? lchown : chown)(path.c_str(), uid, gid) != 0) { - // TODO Error - } - } -} - -void UserBackendHome::addUser(const Common::UserInfo &userInfo) throw(Core::Exception) { - boost::filesystem::path path(homeDir); - path /= userInfo.getUsername(); - - boost::filesystem::create_directories(path); - - std::string nativePath = path.directory_string(); - if(chown(nativePath.c_str(), (uid_t)userInfo.getUid(), (gid_t)userInfo.getGid()) != 0) { - // TODO Error - } - - if(chmod(nativePath.c_str(), (mode_t)dirMode)) { - // TODO Error - } - - boost::filesystem::path skeletonPath(skeleton); - if(!boost::filesystem::is_directory(skeletonPath)) - return; - - boost::filesystem::path oldPath = boost::filesystem::current_path(); - boost::filesystem::current_path(skeletonPath); - - boost::filesystem::recursive_directory_iterator end; - - for(boost::filesystem::recursive_directory_iterator it("."); it != end; ++it) { - boost::filesystem::path source = it->path(); - boost::filesystem::path dest = path / source; - - try { - if(boost::filesystem::is_symlink(it->symlink_status())) { - it.no_push(); - - std::string sourceStr = source.file_string(); - - char link[PATH_MAX]; - int ret = ::readlink(sourceStr.c_str(), link, PATH_MAX); - if(ret <= 0) - continue; - - boost::filesystem::create_symlink(boost::filesystem::path(std::string(link, ret)), dest); - setOwnerAndCopyMode(sourceStr, dest.file_string(), userInfo, true); - } - else if(boost::filesystem::is_directory(it->status())) { - boost::filesystem::create_directory(dest); - setOwnerAndCopyMode(source.directory_string(), dest.directory_string(), userInfo, false); - } - else { - boost::filesystem::copy_file(source, dest); - setOwnerAndCopyMode(source.file_string(), dest.file_string(), userInfo, false); - } - } - catch(...) {} - } - - boost::filesystem::current_path(oldPath); -} - -void UserBackendHome::updateUser(const Common::UserInfo &oldUserInfo, const Common::UserInfo &userInfo) throw(Core::Exception) { - boost::filesystem::path oldPath(homeDir); - oldPath /= oldUserInfo.getUsername(); - - boost::filesystem::path path(homeDir); - path /= userInfo.getUsername(); - - if(oldPath != path) { - try { - boost::filesystem::rename(oldPath, path); - } - catch(...) { - return; - } - } - - if(oldUserInfo.getUid() == userInfo.getUid() && oldUserInfo.getGid() == userInfo.getGid()) - return; - - std::string nativePath = path.directory_string(); - if(chown(nativePath.c_str(), (uid_t)userInfo.getUid(), (gid_t)userInfo.getGid()) != 0) { - // TODO Error - } - - boost::filesystem::recursive_directory_iterator end; - - for(boost::filesystem::recursive_directory_iterator it(path); it != end; ++it) { - if(boost::filesystem::is_symlink(it->symlink_status())) { - it.no_push(); - - migrateOwner(it->path().file_string(), oldUserInfo, userInfo, true); - } - else if(boost::filesystem::is_directory(it->status())) { - migrateOwner(it->path().directory_string(), oldUserInfo, userInfo, false); - } - else { - migrateOwner(it->path().file_string(), oldUserInfo, userInfo, false); - } - } -} - -void UserBackendHome::deleteUser(const Common::UserInfo &userInfo) throw(Core::Exception) { - boost::filesystem::path path(homeDir); - path /= userInfo.getUsername(); - - boost::filesystem::remove_all(path); -} - -} -} -} diff --git a/src/modules/UserBackendHome/UserBackendHome.h b/src/modules/UserBackendHome/UserBackendHome.h deleted file mode 100644 index 74fa2cb..0000000 --- a/src/modules/UserBackendHome/UserBackendHome.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * UserBackendMysql.h - * - * Copyright (C) 2008 Matthias Schiffer <matthias@gamezock.de> - * - * This program 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 3 of the License, 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef MAD_MODULES_USERBACKENDHOME_USERBACKENDHOME_H_ -#define MAD_MODULES_USERBACKENDHOME_USERBACKENDHOME_H_ - -#include <Common/UserConfigBackend.h> -#include <Common/Application.h> - -#include <Core/Configurable.h> -#include <Core/ConfigManager.h> - -#include <boost/thread/mutex.hpp> - -namespace Mad { -namespace Modules { -namespace UserBackendHome { - -class UserBackendHome : public Common::UserConfigBackend, private Core::Configurable, private boost::noncopyable { - private: - Common::Application *application; - - std::string skeleton; - std::string homeDir; - unsigned long dirMode; - - boost::mutex mutex; - - void setOwnerAndCopyMode(const std::string &source, const std::string &dest, const Common::UserInfo &userInfo, bool isSymlink); - - void migrateOwner(const std::string &path, const Common::UserInfo &oldUserInfo, const Common::UserInfo &userInfo, bool isSymlink); - - protected: - virtual bool handleConfigEntry(const Core::ConfigEntry &entry, bool handled); - - virtual void addUser(const Common::UserInfo &userInfo) throw(Core::Exception); - virtual void updateUser(const Common::UserInfo &oldUserInfo, const Common::UserInfo &userInfo) throw(Core::Exception); - virtual void deleteUser(const Common::UserInfo &userInfo) throw(Core::Exception); - - public: - UserBackendHome(Common::Application *application0) : application(application0), homeDir("/home"), dirMode(0755) { - application->getConfigManager()->registerConfigurable(this); - } - - virtual ~UserBackendHome() { - application->getConfigManager()->unregisterConfigurable(this); - } -}; - -} -} -} - -#endif /* MAD_MODULES_USERBACKENDHOME_USERBACKENDHOME_H_ */ |