On 05/28/2013 02:39 AM, Osier Yang wrote: > Without the flag VIR_SECRET_GET_VALUE_INTERNAL_CALL, there is no > way to get the value of private secret. And error out if the > secret value is not found. > --- > src/storage/storage_backend_rbd.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > Is this patch separatable? That is - is it required for this set of changes or is it "out of band" enough to be its own patch. > diff --git a/src/storage/storage_backend_rbd.c b/src/storage/storage_backend_rbd.c > index 953a8ee..d66d3f9 100644 > --- a/src/storage/storage_backend_rbd.c > +++ b/src/storage/storage_backend_rbd.c > @@ -23,6 +23,7 @@ > > #include <config.h> > > +#include "datatypes.h" > #include "virerror.h" > #include "storage_backend_rbd.h" > #include "storage_conf.h" > @@ -88,7 +89,17 @@ static int virStorageBackendRBDOpenRADOSConn(virStorageBackendRBDStatePtr *ptr, > goto cleanup; > } > > - secret_value = virSecretGetValue(secret, &secret_value_size, 0); > + secret_value = conn->secretDriver->secretGetValue(secret, &secret_value_size, 0, > + VIR_SECRET_GET_VALUE_INTERNAL_CALL); > + There are callers to this function that have set ATTRIBUTE_UNUSED on the 'conn' parameter. Now this code uses it - so it seems you have some more checking to do. See virStorageBackendRBDRefreshPool() and virStorageBackendRBDResizeVol() Using the same logic as before I see that storage_driver.c and storageDriverAutostart() will call the backend->refreshPool with NULL and that will cause you issues in this code. John > + if (!secret_value) { > + virReportError(VIR_ERR_INTERNAL_ERROR, > + _("could not get the value of the secret " > + "for username %s"), > + pool->def->source.auth.cephx.username); > + goto cleanup; > + } > + > base64_encode_alloc((char *)secret_value, > secret_value_size, &rados_key); > memset(secret_value, 0, secret_value_size); > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list