diff --git a/src/pool/PoolObjectSQL.cc b/src/pool/PoolObjectSQL.cc index 5d7cce9425..69e3441d5b 100644 --- a/src/pool/PoolObjectSQL.cc +++ b/src/pool/PoolObjectSQL.cc @@ -593,6 +593,11 @@ bool PoolObjectSQL::name_is_valid(const string& obj_name, int PoolObjectSQL::lock_db(const int owner, const int req_id, const int level) { + if ( level < ST_NONE || level > ST_ADMIN ) + { + return -1; + } + locked = static_cast(level); lock_time = time(0); lock_owner = owner; @@ -626,18 +631,23 @@ int PoolObjectSQL::unlock_db(const int owner, const int req_id) string& PoolObjectSQL::lock_db_to_xml(string& xml) const { - ostringstream oss; - if (locked != LockStates::ST_NONE) + if (locked == LockStates::ST_NONE) { - oss << "" - << "" << static_cast(locked) << "" - << "" << lock_owner << "" - << "" - << "" << lock_req_id << "" - << ""; + xml.clear(); + return xml; } + ostringstream oss; + + oss << "" + << "" << static_cast(locked) << "" + << "" << lock_owner << "" + << "" + << "" << lock_req_id << "" + << ""; + xml = oss.str(); + return xml; } @@ -648,17 +658,25 @@ int PoolObjectSQL::lock_db_from_xml() { int rc = 0; int locked_int; + vector content; - if (ObjectXML::get_nodes("/*/LOCK/LOCKED", content) > 0) - { - rc += xpath(locked_int, "/*/LOCK/LOCKED", 0); - rc += xpath(lock_req_id, "/*/LOCK/REQ_ID", -1); - rc += xpath(lock_owner, "/*/LOCK/OWNER", -1); - xpath(lock_time, "/*/LOCK/TIME", time(0)); + ObjectXML::get_nodes("/*/LOCK/LOCKED", content); - locked = static_cast(locked_int); + if ( content.empty() ) + { + return 0; } + rc += xpath(locked_int, "/*/LOCK/LOCKED", 0); + rc += xpath(lock_req_id, "/*/LOCK/REQ_ID", -1); + rc += xpath(lock_owner, "/*/LOCK/OWNER", -1); + + xpath(lock_time, "/*/LOCK/TIME", time(0)); + + locked = static_cast(locked_int); + + ObjectXML::free_nodes(content); + return rc; }