]> git.ipfire.org Git - thirdparty/snapper.git/commitdiff
- work on dbus interface
authorArvin Schnell <aschnell@suse.de>
Thu, 2 Aug 2012 13:06:51 +0000 (15:06 +0200)
committerArvin Schnell <aschnell@suse.de>
Thu, 2 Aug 2012 13:06:51 +0000 (15:06 +0200)
client/snapper.cc
server/Client.h
server/snapperd.cc

index 6542a9500ffbe0d8059916e20d7aff80d328a924..8a128f7fd0174f2e8b41eead5a146c96e57ae8d8 100644 (file)
@@ -1201,6 +1201,8 @@ main(int argc, char** argv)
            cerr << _("Config is locked.") << endl;
        else if (name == "error.config_in_use")
            cerr << _("Config is in use.") << endl;
+       else if (name == "error.unknown_file_use")
+           cerr << _("Unknown file.") << endl;
        else
            cerr << _("Failure") << " (" << name << ")." << endl;
        exit(EXIT_FAILURE);
index 10ccf53d1020276fe04dc8a9bbbfa9020b2a4e1e..2b925b1045ad2bfc29f215ba4ef7e395fa802bdb 100644 (file)
@@ -42,6 +42,9 @@ using namespace std;
 using namespace snapper;
 
 
+class MetaSnapper;
+
+
 struct NoComparison : public std::exception
 {
     explicit NoComparison() throw() {}
@@ -55,6 +58,12 @@ public:
 
     static void introspect(DBus::Connection& conn, DBus::Message& msg);
 
+    void check_permission(DBus::Connection& conn, DBus::Message& msg) const;
+    void check_permission(DBus::Connection& conn, DBus::Message& msg,
+                         const MetaSnapper& meta_snapper) const;
+    void check_lock(DBus::Connection& conn, DBus::Message& msg, const string& config_name) const;
+    void check_in_use(const MetaSnapper& meta_snapper) const;
+
     void signal_config_created(DBus::Connection& conn, const string& config_name);
     void signal_config_deleted(DBus::Connection& conn, const string& config_name);
     void signal_snapshot_created(DBus::Connection& conn, const string& config_name,
index 643e0547f7445f95e960230652d95d6c6e8d822a..31a0299f87ddccb92314dde87a08db42fe2e0172 100644 (file)
@@ -253,7 +253,7 @@ struct Permissions : public std::exception
 
 
 void
-check_permission(DBus::Connection& conn, DBus::Message& msg)
+Client::check_permission(DBus::Connection& conn, DBus::Message& msg) const
 {
     unsigned long uid = conn.get_unix_userid(msg);
     if (uid == 0)
@@ -264,7 +264,8 @@ check_permission(DBus::Connection& conn, DBus::Message& msg)
 
 
 void
-check_permission(DBus::Connection& conn, DBus::Message& msg, const MetaSnapper& meta_snapper)
+Client::check_permission(DBus::Connection& conn, DBus::Message& msg,
+                        const MetaSnapper& meta_snapper) const
 {
     unsigned long uid = conn.get_unix_userid(msg);
     if (uid == 0)
@@ -285,11 +286,11 @@ struct Lock : public std::exception
 
 
 void
-check_lock(DBus::Connection& conn, DBus::Message& msg, const string& config_name)
+Client::check_lock(DBus::Connection& conn, DBus::Message& msg, const string& config_name) const
 {
     for (Clients::const_iterator it = clients.begin(); it != clients.end(); ++it)
     {
-       if (it->zombie || it->name == msg.get_sender())
+       if (it->zombie || &*it == this)
            continue;
 
        if (it->has_lock(config_name))
@@ -306,7 +307,7 @@ struct InUse : public std::exception
 
 
 void
-check_in_use(const MetaSnapper& meta_snapper)
+Client::check_in_use(const MetaSnapper& meta_snapper) const
 {
     if (meta_snapper.use_count() != 0)
        throw InUse();
@@ -363,6 +364,13 @@ Client::signal_snapshots_deleted(DBus::Connection& conn, const string& config_na
 }
 
 
+struct UnknownFile : public std::exception
+{
+    explicit UnknownFile() throw() {}
+    virtual const char* what() const throw() { return "unknown config"; }
+};
+
+
 void
 Client::list_configs(DBus::Connection& conn, DBus::Message& msg)
 {
@@ -946,7 +954,8 @@ Client::get_diff(DBus::Connection& conn, DBus::Message& msg)
     Files& files = comparison->getFiles();
 
     Files::iterator it3 = files.find(filename);
-    assert(it3 != files.end());
+    if (it3 == files.end())
+       throw UnknownFile();
 
     lock.unlock();
 
@@ -988,8 +997,10 @@ Client::set_undo(DBus::Connection& conn, DBus::Message& msg)
     for (list<Undo>::const_iterator it2 = undos.begin(); it2 != undos.end(); ++it2)
     {
        Files::iterator it3 = files.find(it2->filename);
-       if (it3 != files.end())
-           it3->setUndo(it2->undo);
+       if (it3 == files.end())
+           throw UnknownFile();
+
+       it3->setUndo(it2->undo);
     }
 
     DBus::MessageMethodReturn reply(msg);
@@ -1248,6 +1259,11 @@ Client::dispatch(DBus::Connection& conn, DBus::Message& msg)
        DBus::MessageError reply(msg, "error.illegal_snapshot", DBUS_ERROR_FAILED);
        conn.send(reply);
     }
+    catch (const UnknownFile& e)
+    {
+       DBus::MessageError reply(msg, "error.unknown_file", DBUS_ERROR_FAILED);
+       conn.send(reply);
+    }
     catch (const InvalidUserdataException& e)
     {
        DBus::MessageError reply(msg, "error.invalid_userdata", DBUS_ERROR_FAILED);