diff --git a/src/exception.hpp b/src/exception.hpp index 815fd1d4..41e113ac 100644 --- a/src/exception.hpp +++ b/src/exception.hpp @@ -415,6 +415,22 @@ public: }; +/** Illegal operation: cannot run this operation on the object. + */ + +class illegal_operation : public messaging_exception +{ +public: + + illegal_operation(const string& msg = "") + : messaging_exception(msg.empty() + ? "Illegal operation." + : "Illegal operation: " + msg + "." + ) {} + ~illegal_operation() throw() {} +}; + + /** Command error: operation failed (this is specific to the underlying protocol). */ diff --git a/src/messaging/IMAPFolder.cpp b/src/messaging/IMAPFolder.cpp index 4aef1afe..7544dc2c 100644 --- a/src/messaging/IMAPFolder.cpp +++ b/src/messaging/IMAPFolder.cpp @@ -1228,6 +1228,8 @@ void IMAPFolder::rename(const folder::path& newPath) throw exceptions::illegal_state("Store disconnected"); else if (isOpen()) throw exceptions::illegal_state("Folder open"); + else if (m_path.getSize() == 1 && m_name.getBuffer() == "INBOX") + throw exceptions::illegal_operation("Cannot rename 'INBOX' folder"); // Build the request text std::ostringstream command;