# HG changeset patch
# User Heidi Eckhart <heidieck(a)linux.vnet.ibm.com>
# Date 1200405812 -3600
# Node ID a68e6445a09548ace93e2a191fead647e378d86c
# Parent b2a79064df2639a6b7ade2f2bbcb21af9c66a267
Add function to validate the client given object path of a ComputerSystem
Signed-off-by: Heidi Eckhart <heidieck(a)linux.vnet.ibm.com>
diff -r b2a79064df26 -r a68e6445a095 src/Virt_ComputerSystem.c
--- a/src/Virt_ComputerSystem.c Mon Jan 14 13:01:22 2008 -0800
+++ b/src/Virt_ComputerSystem.c Tue Jan 15 15:03:32 2008 +0100
@@ -285,7 +285,7 @@ CMPIInstance *instance_from_name(const C
dom = virDomainLookupByName(conn, name);
if (dom == NULL)
- return 0;
+ return NULL;
instance = get_typed_instance(broker,
pfx_from_conn(conn),
@@ -374,44 +374,57 @@ static CMPIStatus return_enum_domains(co
return s;
}
-static CMPIStatus get_domain(const CMPIObjectPath *reference,
- const CMPIResult *results,
- const char *name)
-{
- CMPIInstance *inst;
- CMPIStatus s;
+CMPIStatus get_domain(const CMPIBroker *broker,
+ const CMPIObjectPath *reference,
+ CMPIInstance **inst)
+{
+ CMPIInstance *_inst;
+ CMPIStatus s = {CMPI_RC_OK, NULL};
virConnectPtr conn = NULL;
- const char *prop = NULL;
-
- if (!provider_is_responsible(_BROKER, reference, &s)) {
- CMSetStatus(&s, CMPI_RC_ERR_NOT_FOUND);
+ const char *name;
+
+ if (!provider_is_responsible(broker, reference, &s))
return s;
- }
-
- conn = connect_by_classname(_BROKER, CLASSNAME(reference), &s);
+
+ if (cu_get_str_path(reference, "Name", &name) != CMPI_RC_OK) {
+ cu_statusf(broker, &s,
+ CMPI_RC_ERR_FAILED,
+ "No domain name specified");
+ return s;
+ }
+
+ conn = connect_by_classname(broker, CLASSNAME(reference), &s);
if (conn == NULL)
return s;
- inst = instance_from_name(_BROKER, conn, name, reference);
- if (inst == NULL) {
- cu_statusf(_BROKER, &s,
- CMPI_RC_ERR_FAILED,
- "Unable to find `%s'", name);
- goto out;
- }
-
- prop = cu_compare_ref(reference, inst);
- if (prop != NULL) {
- cu_statusf(_BROKER, &s,
+ _inst = instance_from_name(broker, conn, name, reference);
+ if (_inst == NULL) {
+ cu_statusf(broker, &s,
CMPI_RC_ERR_NOT_FOUND,
- "No such instance (%s)", prop);
- goto out;
- }
-
- CMReturnInstance(results, inst);
- CMSetStatus(&s, CMPI_RC_OK);
+ "No such instance (%s)", name);
+ goto out;
+ }
+
+ s = cu_validate_ref(broker, reference, _inst);
+
out:
virConnectClose(conn);
+ *inst = _inst;
+
+ return s;
+}
+
+static CMPIStatus return_domain(const CMPIObjectPath *reference,
+ const CMPIResult *results)
+{
+ CMPIStatus s = {CMPI_RC_OK, NULL};
+ CMPIInstance *inst;
+
+ s = get_domain(_BROKER, reference, &inst);
+ if (s.rc != CMPI_RC_OK)
+ return s;
+
+ CMReturnInstance(results, inst);
return s;
}
@@ -440,19 +453,7 @@ static CMPIStatus GetInstance(CMPIInstan
const CMPIObjectPath *reference,
const char **properties)
{
- const char *name;
-
- if (cu_get_str_path(reference, "Name", &name) != CMPI_RC_OK) {
- CMPIStatus s;
-
- cu_statusf(_BROKER, &s,
- CMPI_RC_ERR_FAILED,
- "No domain name specified");
-
- return s;
- }
-
- return get_domain(reference, results, name);
+ return return_domain(reference, results);
}
DEFAULT_CI();
diff -r b2a79064df26 -r a68e6445a095 src/Virt_ComputerSystem.h
--- a/src/Virt_ComputerSystem.h Mon Jan 14 13:01:22 2008 -0800
+++ b/src/Virt_ComputerSystem.h Tue Jan 15 15:03:32 2008 +0100
@@ -52,6 +52,19 @@ int enum_domains(const CMPIBroker *broke
const char *ns,
struct inst_list *instlist);
+/**
+ * Get domain instance specified by the client given domain
+ * object path
+ *
+ * @param broker A pointer to the current broker
+ * @param ref The client given object path
+ * @param inst In case of success the pointer to the instance
+ * @returns CMPIStatus
+ */
+CMPIStatus get_domain(const CMPIBroker *broker,
+ const CMPIObjectPath *reference,
+ CMPIInstance **inst);
+
#endif