From 7b11944a5a6178be6d250e832879944f9abddcfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Mon, 2 Jan 2012 22:34:08 +0100 Subject: [PATCH] Get host permission attributes from Host object in RequestManagerVirtualMachine --- include/RequestManagerVirtualMachine.h | 6 ++-- src/rm/RequestManagerVirtualMachine.cc | 39 +++++++++++++++++--------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/include/RequestManagerVirtualMachine.h b/include/RequestManagerVirtualMachine.h index e05730a1a3..1f8c56e02a 100644 --- a/include/RequestManagerVirtualMachine.h +++ b/include/RequestManagerVirtualMachine.h @@ -48,11 +48,11 @@ protected: virtual void request_execute(xmlrpc_c::paramList const& _paramList, RequestAttributes& att) = 0; - bool vm_authorization(int id, int hid, ImageTemplate *tmpl, - RequestAttributes& att); + bool vm_authorization(int id, ImageTemplate *tmpl, + RequestAttributes& att, PoolObjectAuth* host_perms); int get_host_information(int hid, string& name, string& vmm, string& vnm, - string& tm, RequestAttributes& att); + string& tm, RequestAttributes& att, PoolObjectAuth* host_perms); int add_history(VirtualMachine * vm, int hid, diff --git a/src/rm/RequestManagerVirtualMachine.cc b/src/rm/RequestManagerVirtualMachine.cc index ff05ce730b..77656c4f11 100644 --- a/src/rm/RequestManagerVirtualMachine.cc +++ b/src/rm/RequestManagerVirtualMachine.cc @@ -21,9 +21,9 @@ /* -------------------------------------------------------------------------- */ bool RequestManagerVirtualMachine::vm_authorization(int oid, - int hid, ImageTemplate *tmpl, - RequestAttributes& att) + RequestAttributes& att, + PoolObjectAuth * host_perm) { PoolObjectSQL * object; PoolObjectAuth * vm_perms; @@ -54,12 +54,8 @@ bool RequestManagerVirtualMachine::vm_authorization(int oid, delete vm_perms; - if (hid != -1) + if (host_perm != 0) { - PoolObjectAuth * host_perm = new PoolObjectAuth(); - host_perm->oid = hid; - host_perm->obj_type = AuthRequest::HOST; - ar.add_auth(AuthRequest::MANAGE, host_perm); delete host_perm; @@ -97,7 +93,8 @@ int RequestManagerVirtualMachine::get_host_information(int hid, string& vmm, string& vnm, string& tm, - RequestAttributes& att) + RequestAttributes& att, + PoolObjectAuth* host_perms) { Nebula& nd = Nebula::instance(); HostPool * hpool = nd.get_hpool(); @@ -120,6 +117,8 @@ int RequestManagerVirtualMachine::get_host_information(int hid, vnm = host->get_vnm_mad(); tm = host->get_tm_mad(); + host_perms = host->get_permissions(); + host->unlock(); return 0; @@ -194,7 +193,7 @@ void VirtualMachineAction::request_execute(xmlrpc_c::paramList const& paramList, Nebula& nd = Nebula::instance(); DispatchManager * dm = nd.get_dm(); - if ( vm_authorization(id,-1,0,att) == false ) + if ( vm_authorization(id,0,att,0) == false ) { return; } @@ -279,6 +278,7 @@ void VirtualMachineDeploy::request_execute(xmlrpc_c::paramList const& paramList, DispatchManager * dm = nd.get_dm(); VirtualMachine * vm; + PoolObjectAuth * host_perms = 0; string hostname; string vmm_mad; @@ -288,12 +288,17 @@ void VirtualMachineDeploy::request_execute(xmlrpc_c::paramList const& paramList, int id = xmlrpc_c::value_int(paramList.getInt(1)); int hid = xmlrpc_c::value_int(paramList.getInt(2)); - if ( vm_authorization(id,hid,0,att) == false ) + bool auth = false; + + if (get_host_information(hid,hostname,vmm_mad,vnm_mad,tm_mad, att, host_perms) != 0) { return; } - if (get_host_information(hid,hostname,vmm_mad,vnm_mad,tm_mad, att) != 0) + auth = vm_authorization(id,0,att,host_perms); + delete host_perms; + + if ( auth == false ) { return; } @@ -336,6 +341,7 @@ void VirtualMachineMigrate::request_execute(xmlrpc_c::paramList const& paramList DispatchManager * dm = nd.get_dm(); VirtualMachine * vm; + PoolObjectAuth * host_perms = 0; string hostname; string vmm_mad; @@ -346,12 +352,17 @@ void VirtualMachineMigrate::request_execute(xmlrpc_c::paramList const& paramList int hid = xmlrpc_c::value_int(paramList.getInt(2)); bool live = xmlrpc_c::value_boolean(paramList.getBoolean(3)); - if ( vm_authorization(id,hid,0,att) == false ) + bool auth = false; + + if (get_host_information(hid,hostname,vmm_mad,vnm_mad,tm_mad, att, host_perms) != 0) { return; } - if (get_host_information(hid,hostname,vmm_mad,vnm_mad,tm_mad,att) != 0) + auth = vm_authorization(id,0,att,host_perms); + delete host_perms; + + if ( auth == false ) { return; } @@ -437,7 +448,7 @@ void VirtualMachineSaveDisk::request_execute(xmlrpc_c::paramList const& paramLis // ------------------ Authorize the operation ------------------ - if ( vm_authorization(id,-1,itemplate,att) == false ) + if ( vm_authorization(id,itemplate,att,0) == false ) { return; }