提交 15b64ef0 编写于 作者: M Matthias Bolte

remote generator, client: Handle arguments with limited length

This adds length checks to all affected functions.
上级 b5041a49
......@@ -737,7 +737,6 @@ elsif ($opt_k) {
"DomainEventsRegisterAny",
"DomainMigratePrepareTunnel",
"DomainOpenConsole",
"DomainPinVcpu",
"DomainSetSchedulerParameters",
"DomainSetMemoryParameters",
"DomainSetBlkioParameters",
......@@ -751,19 +750,13 @@ elsif ($opt_k) {
"AuthSaslStep",
"AuthPolkit",
"CPUBaseline",
"DomainCreate",
"DomainDestroy",
"DomainMigrateFinish",
"NWFilterDefineXML", # public API and XDR protocol mismatch
"DomainMigratePerform",
"DomainMigrateFinish2",
"FindStoragePoolSources",
"IsSecure",
"SupportsFeature",
"NodeGetCellsFreeMemory",
"ListDomains",
"SecretSetValue",
"GetURI",
"NodeDeviceDettach",
"NodeDeviceReset",
......@@ -809,6 +802,7 @@ elsif ($opt_k) {
# handle arguments to the function
my @args_list = ();
my @vars_list = ();
my @args_check_list = ();
my @setters_list = ();
my $priv_src = "conn";
my $priv_name = "privateData";
......@@ -862,11 +856,30 @@ elsif ($opt_k) {
} elsif ($args_member =~ m/^remote_string (\S+);/) {
push(@args_list, "const char *$1");
push(@setters_list, "args.$1 = $1 ? (char **)&$1 : NULL;");
} elsif ($args_member =~ m/^remote_nonnull_string (\S+)<(\S+)>;/) {
push(@args_list, "const char **$1");
push(@args_list, "unsigned int ${1}len");
push(@setters_list, "args.$1.${1}_val = (char **)$1;");
push(@setters_list, "args.$1.${1}_len = ${1}len;");
push(@args_check_list, { name => "\"$1\"", arg => "${1}len", limit => $2 });
} elsif ($args_member =~ m/^remote_nonnull_string (\S+);/) {
push(@args_list, "const char *$1");
push(@setters_list, "args.$1 = (char *)$1;");
} elsif ($args_member =~ m/(\S+)<\S+>;/) {
# ignored for now
} elsif ($args_member =~ m/(\S+)<(\S+)>;/) {
if ($call->{ProcName} eq "SecretSetValue") {
push(@args_list, "const unsigned char *$1");
push(@args_list, "size_t ${1}len");
} elsif ($call->{ProcName} eq "DomainPinVcpu") {
push(@args_list, "unsigned char *$1");
push(@args_list, "int ${1}len");
} else {
push(@args_list, "const char *$1");
push(@args_list, "int ${1}len");
}
push(@setters_list, "args.$1.${1}_val = (char *)$1;");
push(@setters_list, "args.$1.${1}_len = ${1}len;");
push(@args_check_list, { name => "\"$1\"", arg => "${1}len", limit => $2 });
} elsif ($args_member =~ m/^(.*) (\S+);/) {
my $type_name = $1;
my $arg_name = $2;
......@@ -885,6 +898,9 @@ elsif ($opt_k) {
} elsif ($arg_name eq "nvcpus" and
$call->{ProcName} eq "DomainSetVcpus") {
$type_name = "unsigned int";
} elsif ($arg_name eq "vcpu" and
$call->{ProcName} eq "DomainPinVcpu") {
$type_name = "unsigned int";
}
}
......@@ -913,6 +929,11 @@ elsif ($opt_k) {
push(@args_list, "virConnectPtr conn");
}
if ($call->{ProcName} eq "NWFilterDefineXML") {
# fix public API and XDR protocol mismatch
push(@args_list, "unsigned int flags ATTRIBUTE_UNUSED");
}
# fix priv_name for the NumOf* functions
if ($priv_name eq "privateData" and
!($call->{ProcName} =~ m/(Domains|DomainSnapshot)/) and
......@@ -1086,6 +1107,16 @@ elsif ($opt_k) {
print "\n";
print " remoteDriverLock(priv);\n";
foreach my $args_check (@args_check_list) {
print "\n";
print " if ($args_check->{arg} > $args_check->{limit}) {\n";
print " remoteError(VIR_ERR_RPC,\n";
print " _(\"%s length greater than maximum: %d > %d\"),\n";
print " $args_check->{name}, (int)$args_check->{arg}, $args_check->{limit});\n";
print " goto done;\n";
print " }\n";
}
if ($single_ret_as_list) {
print "\n";
print " if ($single_ret_list_max_var > $single_ret_list_max_define) {\n";
......
......@@ -14,7 +14,40 @@
/* remoteDispatchClose has to be implemented manually */
/* remoteDispatchCPUBaseline has to be implemented manually */
static char *
remoteCPUBaseline(virConnectPtr conn, const char **xmlCPUs, unsigned int xmlCPUslen, unsigned int flags)
{
char *rv = NULL;
struct private_data *priv = conn->privateData;
remote_cpu_baseline_args args;
remote_cpu_baseline_ret ret;
remoteDriverLock(priv);
if (xmlCPUslen > REMOTE_CPU_BASELINE_MAX) {
remoteError(VIR_ERR_RPC,
_("%s length greater than maximum: %d > %d"),
"xmlCPUs", (int)xmlCPUslen, REMOTE_CPU_BASELINE_MAX);
goto done;
}
args.xmlCPUs.xmlCPUs_val = (char **)xmlCPUs;
args.xmlCPUs.xmlCPUs_len = xmlCPUslen;
args.flags = flags;
memset(&ret, 0, sizeof ret);
if (call(conn, priv, 0, REMOTE_PROC_CPU_BASELINE,
(xdrproc_t)xdr_remote_cpu_baseline_args, (char *)&args,
(xdrproc_t)xdr_remote_cpu_baseline_ret, (char *)&ret) == -1)
goto done;
rv = ret.cpu;
done:
remoteDriverUnlock(priv);
return rv;
}
static int
remoteCPUCompare(virConnectPtr conn, const char *xml, unsigned int flags)
......@@ -863,11 +896,118 @@ done:
/* remoteDispatchDomainMemoryStats has to be implemented manually */
/* remoteDispatchDomainMigrateFinish has to be implemented manually */
static virDomainPtr
remoteDomainMigrateFinish(virConnectPtr conn, const char *dname, const char *cookie, int cookielen, const char *uri, unsigned long flags)
{
virDomainPtr rv = NULL;
struct private_data *priv = conn->privateData;
remote_domain_migrate_finish_args args;
remote_domain_migrate_finish_ret ret;
remoteDriverLock(priv);
if (cookielen > REMOTE_MIGRATE_COOKIE_MAX) {
remoteError(VIR_ERR_RPC,
_("%s length greater than maximum: %d > %d"),
"cookie", (int)cookielen, REMOTE_MIGRATE_COOKIE_MAX);
goto done;
}
args.dname = (char *)dname;
args.cookie.cookie_val = (char *)cookie;
args.cookie.cookie_len = cookielen;
args.uri = (char *)uri;
args.flags = flags;
memset(&ret, 0, sizeof ret);
if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_FINISH,
(xdrproc_t)xdr_remote_domain_migrate_finish_args, (char *)&args,
(xdrproc_t)xdr_remote_domain_migrate_finish_ret, (char *)&ret) == -1)
goto done;
rv = get_nonnull_domain(conn, ret.ddom);
xdr_free((xdrproc_t)xdr_remote_domain_migrate_finish_ret, (char *)&ret);
done:
remoteDriverUnlock(priv);
return rv;
}
static virDomainPtr
remoteDomainMigrateFinish2(virConnectPtr conn, const char *dname, const char *cookie, int cookielen, const char *uri, unsigned long flags, int retcode)
{
virDomainPtr rv = NULL;
struct private_data *priv = conn->privateData;
remote_domain_migrate_finish2_args args;
remote_domain_migrate_finish2_ret ret;
remoteDriverLock(priv);
if (cookielen > REMOTE_MIGRATE_COOKIE_MAX) {
remoteError(VIR_ERR_RPC,
_("%s length greater than maximum: %d > %d"),
"cookie", (int)cookielen, REMOTE_MIGRATE_COOKIE_MAX);
goto done;
}
args.dname = (char *)dname;
args.cookie.cookie_val = (char *)cookie;
args.cookie.cookie_len = cookielen;
args.uri = (char *)uri;
args.flags = flags;
args.retcode = retcode;
memset(&ret, 0, sizeof ret);
if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_FINISH2,
(xdrproc_t)xdr_remote_domain_migrate_finish2_args, (char *)&args,
(xdrproc_t)xdr_remote_domain_migrate_finish2_ret, (char *)&ret) == -1)
goto done;
rv = get_nonnull_domain(conn, ret.ddom);
xdr_free((xdrproc_t)xdr_remote_domain_migrate_finish2_ret, (char *)&ret);
done:
remoteDriverUnlock(priv);
return rv;
}
static int
remoteDomainMigratePerform(virDomainPtr dom, const char *cookie, int cookielen, const char *uri, unsigned long flags, const char *dname, unsigned long resource)
{
int rv = -1;
struct private_data *priv = dom->conn->privateData;
remote_domain_migrate_perform_args args;
remoteDriverLock(priv);
if (cookielen > REMOTE_MIGRATE_COOKIE_MAX) {
remoteError(VIR_ERR_RPC,
_("%s length greater than maximum: %d > %d"),
"cookie", (int)cookielen, REMOTE_MIGRATE_COOKIE_MAX);
goto done;
}
make_nonnull_domain(&args.dom, dom);
args.cookie.cookie_val = (char *)cookie;
args.cookie.cookie_len = cookielen;
args.uri = (char *)uri;
args.flags = flags;
args.dname = dname ? (char **)&dname : NULL;
args.resource = resource;
if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_PERFORM,
(xdrproc_t)xdr_remote_domain_migrate_perform_args, (char *)&args,
(xdrproc_t)xdr_void, (char *)NULL) == -1)
goto done;
/* remoteDispatchDomainMigrateFinish2 has to be implemented manually */
rv = 0;
/* remoteDispatchDomainMigratePerform has to be implemented manually */
done:
remoteDriverUnlock(priv);
return rv;
}
/* remoteDispatchDomainMigratePrepare has to be implemented manually */
......@@ -927,7 +1067,38 @@ done:
/* remoteDispatchDomainOpenConsole has to be implemented manually */
/* remoteDispatchDomainPinVcpu has to be implemented manually */
static int
remoteDomainPinVcpu(virDomainPtr dom, unsigned int vcpu, unsigned char *cpumap, int cpumaplen)
{
int rv = -1;
struct private_data *priv = dom->conn->privateData;
remote_domain_pin_vcpu_args args;
remoteDriverLock(priv);
if (cpumaplen > REMOTE_CPUMAP_MAX) {
remoteError(VIR_ERR_RPC,
_("%s length greater than maximum: %d > %d"),
"cpumap", (int)cpumaplen, REMOTE_CPUMAP_MAX);
goto done;
}
make_nonnull_domain(&args.dom, dom);
args.vcpu = vcpu;
args.cpumap.cpumap_val = (char *)cpumap;
args.cpumap.cpumap_len = cpumaplen;
if (call(dom->conn, priv, 0, REMOTE_PROC_DOMAIN_PIN_VCPU,
(xdrproc_t)xdr_remote_domain_pin_vcpu_args, (char *)&args,
(xdrproc_t)xdr_void, (char *)NULL) == -1)
goto done;
rv = 0;
done:
remoteDriverUnlock(priv);
return rv;
}
static int
remoteDomainReboot(virDomainPtr dom, unsigned int flags)
......@@ -1343,7 +1514,7 @@ remoteDomainSnapshotListNames(virDomainPtr dom, char **const names, int maxnames
if (maxnames > REMOTE_DOMAIN_SNAPSHOT_LIST_NAMES_MAX) {
remoteError(VIR_ERR_RPC,
_("too many remote undefined names: %d > %d"),
_("too many remote undefineds: %d > %d"),
maxnames, REMOTE_DOMAIN_SNAPSHOT_LIST_NAMES_MAX);
goto done;
}
......@@ -1948,7 +2119,7 @@ remoteListDefinedDomains(virConnectPtr conn, char **const names, int maxnames)
if (maxnames > REMOTE_DOMAIN_NAME_LIST_MAX) {
remoteError(VIR_ERR_RPC,
_("too many remote undefined names: %d > %d"),
_("too many remote undefineds: %d > %d"),
maxnames, REMOTE_DOMAIN_NAME_LIST_MAX);
goto done;
}
......@@ -2008,7 +2179,7 @@ remoteListDefinedInterfaces(virConnectPtr conn, char **const names, int maxnames
if (maxnames > REMOTE_DEFINED_INTERFACE_NAME_LIST_MAX) {
remoteError(VIR_ERR_RPC,
_("too many remote undefined names: %d > %d"),
_("too many remote undefineds: %d > %d"),
maxnames, REMOTE_DEFINED_INTERFACE_NAME_LIST_MAX);
goto done;
}
......@@ -2068,7 +2239,7 @@ remoteListDefinedNetworks(virConnectPtr conn, char **const names, int maxnames)
if (maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
remoteError(VIR_ERR_RPC,
_("too many remote undefined names: %d > %d"),
_("too many remote undefineds: %d > %d"),
maxnames, REMOTE_NETWORK_NAME_LIST_MAX);
goto done;
}
......@@ -2128,7 +2299,7 @@ remoteListDefinedStoragePools(virConnectPtr conn, char **const names, int maxnam
if (maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
remoteError(VIR_ERR_RPC,
_("too many remote undefined names: %d > %d"),
_("too many remote undefineds: %d > %d"),
maxnames, REMOTE_STORAGE_POOL_NAME_LIST_MAX);
goto done;
}
......@@ -2190,7 +2361,7 @@ remoteListInterfaces(virConnectPtr conn, char **const names, int maxnames)
if (maxnames > REMOTE_INTERFACE_NAME_LIST_MAX) {
remoteError(VIR_ERR_RPC,
_("too many remote undefined names: %d > %d"),
_("too many remote undefineds: %d > %d"),
maxnames, REMOTE_INTERFACE_NAME_LIST_MAX);
goto done;
}
......@@ -2250,7 +2421,7 @@ remoteListNetworks(virConnectPtr conn, char **const names, int maxnames)
if (maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
remoteError(VIR_ERR_RPC,
_("too many remote undefined names: %d > %d"),
_("too many remote undefineds: %d > %d"),
maxnames, REMOTE_NETWORK_NAME_LIST_MAX);
goto done;
}
......@@ -2310,7 +2481,7 @@ remoteListNWFilters(virConnectPtr conn, char **const names, int maxnames)
if (maxnames > REMOTE_NWFILTER_NAME_LIST_MAX) {
remoteError(VIR_ERR_RPC,
_("too many remote undefined names: %d > %d"),
_("too many remote undefineds: %d > %d"),
maxnames, REMOTE_NWFILTER_NAME_LIST_MAX);
goto done;
}
......@@ -2370,7 +2541,7 @@ remoteListSecrets(virConnectPtr conn, char **const uuids, int maxuuids)
if (maxuuids > REMOTE_SECRET_UUID_LIST_MAX) {
remoteError(VIR_ERR_RPC,
_("too many remote undefined uuids: %d > %d"),
_("too many remote undefineds: %d > %d"),
maxuuids, REMOTE_SECRET_UUID_LIST_MAX);
goto done;
}
......@@ -2430,7 +2601,7 @@ remoteListStoragePools(virConnectPtr conn, char **const names, int maxnames)
if (maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
remoteError(VIR_ERR_RPC,
_("too many remote undefined names: %d > %d"),
_("too many remote undefineds: %d > %d"),
maxnames, REMOTE_STORAGE_POOL_NAME_LIST_MAX);
goto done;
}
......@@ -2905,7 +3076,7 @@ remoteNodeDeviceListCaps(virNodeDevicePtr dev, char **const names, int maxnames)
if (maxnames > REMOTE_NODE_DEVICE_CAPS_LIST_MAX) {
remoteError(VIR_ERR_RPC,
_("too many remote undefined names: %d > %d"),
_("too many remote undefineds: %d > %d"),
maxnames, REMOTE_NODE_DEVICE_CAPS_LIST_MAX);
goto done;
}
......@@ -3081,7 +3252,7 @@ remoteNodeListDevices(virConnectPtr conn, const char *cap, char **const names, i
if (maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX) {
remoteError(VIR_ERR_RPC,
_("too many remote undefined names: %d > %d"),
_("too many remote undefineds: %d > %d"),
maxnames, REMOTE_NODE_DEVICE_NAME_LIST_MAX);
goto done;
}
......@@ -3387,7 +3558,32 @@ done:
return rv;
}
/* remoteDispatchNWFilterDefineXML has to be implemented manually */
static virNWFilterPtr
remoteNWFilterDefineXML(virConnectPtr conn, const char *xml, unsigned int flags ATTRIBUTE_UNUSED)
{
virNWFilterPtr rv = NULL;
struct private_data *priv = conn->nwfilterPrivateData;
remote_nwfilter_define_xml_args args;
remote_nwfilter_define_xml_ret ret;
remoteDriverLock(priv);
args.xml = (char *)xml;
memset(&ret, 0, sizeof ret);
if (call(conn, priv, 0, REMOTE_PROC_NWFILTER_DEFINE_XML,
(xdrproc_t)xdr_remote_nwfilter_define_xml_args, (char *)&args,
(xdrproc_t)xdr_remote_nwfilter_define_xml_ret, (char *)&ret) == -1)
goto done;
rv = get_nonnull_nwfilter(conn, ret.nwfilter);
xdr_free((xdrproc_t)xdr_remote_nwfilter_define_xml_ret, (char *)&ret);
done:
remoteDriverUnlock(priv);
return rv;
}
static char *
remoteNWFilterGetXMLDesc(virNWFilterPtr nwfilter, unsigned int flags)
......@@ -3607,7 +3803,38 @@ done:
return rv;
}
/* remoteDispatchSecretSetValue has to be implemented manually */
static int
remoteSecretSetValue(virSecretPtr secret, const unsigned char *value, size_t valuelen, unsigned int flags)
{
int rv = -1;
struct private_data *priv = secret->conn->secretPrivateData;
remote_secret_set_value_args args;
remoteDriverLock(priv);
if (valuelen > REMOTE_SECRET_VALUE_MAX) {
remoteError(VIR_ERR_RPC,
_("%s length greater than maximum: %d > %d"),
"value", (int)valuelen, REMOTE_SECRET_VALUE_MAX);
goto done;
}
make_nonnull_secret(&args.secret, secret);
args.value.value_val = (char *)value;
args.value.value_len = valuelen;
args.flags = flags;
if (call(secret->conn, priv, 0, REMOTE_PROC_SECRET_SET_VALUE,
(xdrproc_t)xdr_remote_secret_set_value_args, (char *)&args,
(xdrproc_t)xdr_void, (char *)NULL) == -1)
goto done;
rv = 0;
done:
remoteDriverUnlock(priv);
return rv;
}
static int
remoteSecretUndefine(virSecretPtr secret)
......@@ -3932,7 +4159,7 @@ remoteStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int max
if (maxnames > REMOTE_STORAGE_VOL_NAME_LIST_MAX) {
remoteError(VIR_ERR_RPC,
_("too many remote undefined names: %d > %d"),
_("too many remote undefineds: %d > %d"),
maxnames, REMOTE_STORAGE_VOL_NAME_LIST_MAX);
goto done;
}
......
......@@ -2212,42 +2212,6 @@ done:
return rv;
}
static int
remoteDomainPinVcpu (virDomainPtr domain,
unsigned int vcpu,
unsigned char *cpumap,
int maplen)
{
int rv = -1;
remote_domain_pin_vcpu_args args;
struct private_data *priv = domain->conn->privateData;
remoteDriverLock(priv);
if (maplen > REMOTE_CPUMAP_MAX) {
remoteError(VIR_ERR_RPC,
_("map length greater than maximum: %d > %d"),
maplen, REMOTE_CPUMAP_MAX);
goto done;
}
make_nonnull_domain (&args.dom, domain);
args.vcpu = vcpu;
args.cpumap.cpumap_len = maplen;
args.cpumap.cpumap_val = (char *) cpumap;
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_PIN_VCPU,
(xdrproc_t) xdr_remote_domain_pin_vcpu_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
goto done;
rv = 0;
done:
remoteDriverUnlock(priv);
return rv;
}
static int
remoteDomainGetVcpus (virDomainPtr domain,
virVcpuInfoPtr info,
......@@ -2441,76 +2405,6 @@ done:
return rv;
}
static int
remoteDomainMigratePerform (virDomainPtr domain,
const char *cookie,
int cookielen,
const char *uri,
unsigned long flags,
const char *dname,
unsigned long resource)
{
int rv = -1;
remote_domain_migrate_perform_args args;
struct private_data *priv = domain->conn->privateData;
remoteDriverLock(priv);
make_nonnull_domain (&args.dom, domain);
args.cookie.cookie_len = cookielen;
args.cookie.cookie_val = (char *) cookie;
args.uri = (char *) uri;
args.flags = flags;
args.dname = dname == NULL ? NULL : (char **) &dname;
args.resource = resource;
if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_PERFORM,
(xdrproc_t) xdr_remote_domain_migrate_perform_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
goto done;
rv = 0;
done:
remoteDriverUnlock(priv);
return rv;
}
static virDomainPtr
remoteDomainMigrateFinish (virConnectPtr dconn,
const char *dname,
const char *cookie,
int cookielen,
const char *uri,
unsigned long flags)
{
virDomainPtr ddom = NULL;
remote_domain_migrate_finish_args args;
remote_domain_migrate_finish_ret ret;
struct private_data *priv = dconn->privateData;
remoteDriverLock(priv);
args.dname = (char *) dname;
args.cookie.cookie_len = cookielen;
args.cookie.cookie_val = (char *) cookie;
args.uri = (char *) uri;
args.flags = flags;
memset (&ret, 0, sizeof ret);
if (call (dconn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_FINISH,
(xdrproc_t) xdr_remote_domain_migrate_finish_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_migrate_finish_ret, (char *) &ret) == -1)
goto done;
ddom = get_nonnull_domain (dconn, ret.ddom);
xdr_free ((xdrproc_t) &xdr_remote_domain_migrate_finish_ret, (char *) &ret);
done:
remoteDriverUnlock(priv);
return ddom;
}
static int
remoteDomainMigratePrepare2 (virConnectPtr dconn,
char **cookie, int *cookielen,
......@@ -2569,43 +2463,6 @@ error:
goto done;
}
static virDomainPtr
remoteDomainMigrateFinish2 (virConnectPtr dconn,
const char *dname,
const char *cookie,
int cookielen,
const char *uri,
unsigned long flags,
int retcode)
{
virDomainPtr ddom = NULL;
remote_domain_migrate_finish2_args args;
remote_domain_migrate_finish2_ret ret;
struct private_data *priv = dconn->privateData;
remoteDriverLock(priv);
args.dname = (char *) dname;
args.cookie.cookie_len = cookielen;
args.cookie.cookie_val = (char *) cookie;
args.uri = (char *) uri;
args.flags = flags;
args.retcode = retcode;
memset (&ret, 0, sizeof ret);
if (call (dconn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_FINISH2,
(xdrproc_t) xdr_remote_domain_migrate_finish2_args, (char *) &args,
(xdrproc_t) xdr_remote_domain_migrate_finish2_ret, (char *) &ret) == -1)
goto done;
ddom = get_nonnull_domain (dconn, ret.ddom);
xdr_free ((xdrproc_t) &xdr_remote_domain_migrate_finish2_ret, (char *) &ret);
done:
remoteDriverUnlock(priv);
return ddom;
}
static int
remoteDomainCreate (virDomainPtr domain)
{
......@@ -3265,33 +3122,6 @@ remoteNWFilterClose(virConnectPtr conn)
return remoteGenericClose(conn, &conn->nwfilterPrivateData);
}
static virNWFilterPtr
remoteNWFilterDefineXML (virConnectPtr conn, const char *xmlDesc,
unsigned int flags ATTRIBUTE_UNUSED)
{
virNWFilterPtr net = NULL;
remote_nwfilter_define_xml_args args;
remote_nwfilter_define_xml_ret ret;
struct private_data *priv = conn->nwfilterPrivateData;
remoteDriverLock(priv);
args.xml = (char *) xmlDesc;
memset (&ret, 0, sizeof ret);
if (call (conn, priv, 0, REMOTE_PROC_NWFILTER_DEFINE_XML,
(xdrproc_t) xdr_remote_nwfilter_define_xml_args, (char *) &args,
(xdrproc_t) xdr_remote_nwfilter_define_xml_ret, (char *) &ret) == -1)
goto done;
net = get_nonnull_nwfilter (conn, ret.nwfilter);
xdr_free ((xdrproc_t) &xdr_remote_nwfilter_define_xml_ret, (char *) &ret);
done:
remoteDriverUnlock(priv);
return net;
}
/*----------------------------------------------------------------------*/
static int
......@@ -4298,33 +4128,6 @@ remoteSecretClose (virConnectPtr conn)
return remoteGenericClose(conn, &conn->secretPrivateData);
}
static int
remoteSecretSetValue (virSecretPtr secret, const unsigned char *value,
size_t value_size, unsigned int flags)
{
int rv = -1;
remote_secret_set_value_args args;
struct private_data *priv = secret->conn->secretPrivateData;
remoteDriverLock (priv);
make_nonnull_secret (&args.secret, secret);
args.value.value_len = value_size;
args.value.value_val = (char *) value;
args.flags = flags;
if (call (secret->conn, priv, 0, REMOTE_PROC_SECRET_SET_VALUE,
(xdrproc_t) xdr_remote_secret_set_value_args, (char *) &args,
(xdrproc_t) xdr_void, (char *) NULL) == -1)
goto done;
rv = 0;
done:
remoteDriverUnlock (priv);
return rv;
}
static unsigned char *
remoteSecretGetValue (virSecretPtr secret, size_t *value_size,
unsigned int flags)
......@@ -4901,36 +4704,6 @@ done:
return rv;
}
static char *
remoteCPUBaseline(virConnectPtr conn,
const char **xmlCPUs,
unsigned int ncpus,
unsigned int flags)
{
struct private_data *priv = conn->privateData;
remote_cpu_baseline_args args;
remote_cpu_baseline_ret ret;
char *cpu = NULL;
remoteDriverLock(priv);
args.xmlCPUs.xmlCPUs_len = ncpus;
args.xmlCPUs.xmlCPUs_val = (char **) xmlCPUs;
args.flags = flags;
memset(&ret, 0, sizeof (ret));
if (call(conn, priv, 0, REMOTE_PROC_CPU_BASELINE,
(xdrproc_t) xdr_remote_cpu_baseline_args, (char *) &args,
(xdrproc_t) xdr_remote_cpu_baseline_ret, (char *) &ret) == -1)
goto done;
cpu = ret.cpu;
done:
remoteDriverUnlock(priv);
return cpu;
}
static int remoteDomainEventRegisterAny(virConnectPtr conn,
virDomainPtr dom,
int eventID,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册