mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-20 07:59:00 +00:00
remote generator, client: Handle arguments with limited length
This adds length checks to all affected functions.
This commit is contained in:
parent
b5041a49ec
commit
15b64ef0ed
@ -737,7 +737,6 @@ elsif ($opt_k) {
|
|||||||
"DomainEventsRegisterAny",
|
"DomainEventsRegisterAny",
|
||||||
"DomainMigratePrepareTunnel",
|
"DomainMigratePrepareTunnel",
|
||||||
"DomainOpenConsole",
|
"DomainOpenConsole",
|
||||||
"DomainPinVcpu",
|
|
||||||
"DomainSetSchedulerParameters",
|
"DomainSetSchedulerParameters",
|
||||||
"DomainSetMemoryParameters",
|
"DomainSetMemoryParameters",
|
||||||
"DomainSetBlkioParameters",
|
"DomainSetBlkioParameters",
|
||||||
@ -751,19 +750,13 @@ elsif ($opt_k) {
|
|||||||
"AuthSaslStep",
|
"AuthSaslStep",
|
||||||
"AuthPolkit",
|
"AuthPolkit",
|
||||||
|
|
||||||
"CPUBaseline",
|
|
||||||
"DomainCreate",
|
"DomainCreate",
|
||||||
"DomainDestroy",
|
"DomainDestroy",
|
||||||
"DomainMigrateFinish",
|
|
||||||
"NWFilterDefineXML", # public API and XDR protocol mismatch
|
|
||||||
"DomainMigratePerform",
|
|
||||||
"DomainMigrateFinish2",
|
|
||||||
"FindStoragePoolSources",
|
"FindStoragePoolSources",
|
||||||
"IsSecure",
|
"IsSecure",
|
||||||
"SupportsFeature",
|
"SupportsFeature",
|
||||||
"NodeGetCellsFreeMemory",
|
"NodeGetCellsFreeMemory",
|
||||||
"ListDomains",
|
"ListDomains",
|
||||||
"SecretSetValue",
|
|
||||||
"GetURI",
|
"GetURI",
|
||||||
"NodeDeviceDettach",
|
"NodeDeviceDettach",
|
||||||
"NodeDeviceReset",
|
"NodeDeviceReset",
|
||||||
@ -809,6 +802,7 @@ elsif ($opt_k) {
|
|||||||
# handle arguments to the function
|
# handle arguments to the function
|
||||||
my @args_list = ();
|
my @args_list = ();
|
||||||
my @vars_list = ();
|
my @vars_list = ();
|
||||||
|
my @args_check_list = ();
|
||||||
my @setters_list = ();
|
my @setters_list = ();
|
||||||
my $priv_src = "conn";
|
my $priv_src = "conn";
|
||||||
my $priv_name = "privateData";
|
my $priv_name = "privateData";
|
||||||
@ -862,11 +856,30 @@ elsif ($opt_k) {
|
|||||||
} elsif ($args_member =~ m/^remote_string (\S+);/) {
|
} elsif ($args_member =~ m/^remote_string (\S+);/) {
|
||||||
push(@args_list, "const char *$1");
|
push(@args_list, "const char *$1");
|
||||||
push(@setters_list, "args.$1 = $1 ? (char **)&$1 : NULL;");
|
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+);/) {
|
} elsif ($args_member =~ m/^remote_nonnull_string (\S+);/) {
|
||||||
push(@args_list, "const char *$1");
|
push(@args_list, "const char *$1");
|
||||||
push(@setters_list, "args.$1 = (char *)$1;");
|
push(@setters_list, "args.$1 = (char *)$1;");
|
||||||
} elsif ($args_member =~ m/(\S+)<\S+>;/) {
|
} elsif ($args_member =~ m/(\S+)<(\S+)>;/) {
|
||||||
# ignored for now
|
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+);/) {
|
} elsif ($args_member =~ m/^(.*) (\S+);/) {
|
||||||
my $type_name = $1;
|
my $type_name = $1;
|
||||||
my $arg_name = $2;
|
my $arg_name = $2;
|
||||||
@ -885,6 +898,9 @@ elsif ($opt_k) {
|
|||||||
} elsif ($arg_name eq "nvcpus" and
|
} elsif ($arg_name eq "nvcpus" and
|
||||||
$call->{ProcName} eq "DomainSetVcpus") {
|
$call->{ProcName} eq "DomainSetVcpus") {
|
||||||
$type_name = "unsigned int";
|
$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");
|
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
|
# fix priv_name for the NumOf* functions
|
||||||
if ($priv_name eq "privateData" and
|
if ($priv_name eq "privateData" and
|
||||||
!($call->{ProcName} =~ m/(Domains|DomainSnapshot)/) and
|
!($call->{ProcName} =~ m/(Domains|DomainSnapshot)/) and
|
||||||
@ -1086,6 +1107,16 @@ elsif ($opt_k) {
|
|||||||
print "\n";
|
print "\n";
|
||||||
print " remoteDriverLock(priv);\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) {
|
if ($single_ret_as_list) {
|
||||||
print "\n";
|
print "\n";
|
||||||
print " if ($single_ret_list_max_var > $single_ret_list_max_define) {\n";
|
print " if ($single_ret_list_max_var > $single_ret_list_max_define) {\n";
|
||||||
|
@ -14,7 +14,40 @@
|
|||||||
|
|
||||||
/* remoteDispatchClose has to be implemented manually */
|
/* 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
|
static int
|
||||||
remoteCPUCompare(virConnectPtr conn, const char *xml, unsigned int flags)
|
remoteCPUCompare(virConnectPtr conn, const char *xml, unsigned int flags)
|
||||||
@ -863,11 +896,118 @@ done:
|
|||||||
|
|
||||||
/* remoteDispatchDomainMemoryStats has to be implemented manually */
|
/* 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;
|
||||||
|
|
||||||
/* remoteDispatchDomainMigrateFinish2 has to be implemented manually */
|
remoteDriverLock(priv);
|
||||||
|
|
||||||
/* remoteDispatchDomainMigratePerform has to be implemented manually */
|
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;
|
||||||
|
|
||||||
|
rv = 0;
|
||||||
|
|
||||||
|
done:
|
||||||
|
remoteDriverUnlock(priv);
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
/* remoteDispatchDomainMigratePrepare has to be implemented manually */
|
/* remoteDispatchDomainMigratePrepare has to be implemented manually */
|
||||||
|
|
||||||
@ -927,7 +1067,38 @@ done:
|
|||||||
|
|
||||||
/* remoteDispatchDomainOpenConsole has to be implemented manually */
|
/* 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
|
static int
|
||||||
remoteDomainReboot(virDomainPtr dom, unsigned int flags)
|
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) {
|
if (maxnames > REMOTE_DOMAIN_SNAPSHOT_LIST_NAMES_MAX) {
|
||||||
remoteError(VIR_ERR_RPC,
|
remoteError(VIR_ERR_RPC,
|
||||||
_("too many remote undefined names: %d > %d"),
|
_("too many remote undefineds: %d > %d"),
|
||||||
maxnames, REMOTE_DOMAIN_SNAPSHOT_LIST_NAMES_MAX);
|
maxnames, REMOTE_DOMAIN_SNAPSHOT_LIST_NAMES_MAX);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -1948,7 +2119,7 @@ remoteListDefinedDomains(virConnectPtr conn, char **const names, int maxnames)
|
|||||||
|
|
||||||
if (maxnames > REMOTE_DOMAIN_NAME_LIST_MAX) {
|
if (maxnames > REMOTE_DOMAIN_NAME_LIST_MAX) {
|
||||||
remoteError(VIR_ERR_RPC,
|
remoteError(VIR_ERR_RPC,
|
||||||
_("too many remote undefined names: %d > %d"),
|
_("too many remote undefineds: %d > %d"),
|
||||||
maxnames, REMOTE_DOMAIN_NAME_LIST_MAX);
|
maxnames, REMOTE_DOMAIN_NAME_LIST_MAX);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -2008,7 +2179,7 @@ remoteListDefinedInterfaces(virConnectPtr conn, char **const names, int maxnames
|
|||||||
|
|
||||||
if (maxnames > REMOTE_DEFINED_INTERFACE_NAME_LIST_MAX) {
|
if (maxnames > REMOTE_DEFINED_INTERFACE_NAME_LIST_MAX) {
|
||||||
remoteError(VIR_ERR_RPC,
|
remoteError(VIR_ERR_RPC,
|
||||||
_("too many remote undefined names: %d > %d"),
|
_("too many remote undefineds: %d > %d"),
|
||||||
maxnames, REMOTE_DEFINED_INTERFACE_NAME_LIST_MAX);
|
maxnames, REMOTE_DEFINED_INTERFACE_NAME_LIST_MAX);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -2068,7 +2239,7 @@ remoteListDefinedNetworks(virConnectPtr conn, char **const names, int maxnames)
|
|||||||
|
|
||||||
if (maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
|
if (maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
|
||||||
remoteError(VIR_ERR_RPC,
|
remoteError(VIR_ERR_RPC,
|
||||||
_("too many remote undefined names: %d > %d"),
|
_("too many remote undefineds: %d > %d"),
|
||||||
maxnames, REMOTE_NETWORK_NAME_LIST_MAX);
|
maxnames, REMOTE_NETWORK_NAME_LIST_MAX);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -2128,7 +2299,7 @@ remoteListDefinedStoragePools(virConnectPtr conn, char **const names, int maxnam
|
|||||||
|
|
||||||
if (maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
|
if (maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
|
||||||
remoteError(VIR_ERR_RPC,
|
remoteError(VIR_ERR_RPC,
|
||||||
_("too many remote undefined names: %d > %d"),
|
_("too many remote undefineds: %d > %d"),
|
||||||
maxnames, REMOTE_STORAGE_POOL_NAME_LIST_MAX);
|
maxnames, REMOTE_STORAGE_POOL_NAME_LIST_MAX);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -2190,7 +2361,7 @@ remoteListInterfaces(virConnectPtr conn, char **const names, int maxnames)
|
|||||||
|
|
||||||
if (maxnames > REMOTE_INTERFACE_NAME_LIST_MAX) {
|
if (maxnames > REMOTE_INTERFACE_NAME_LIST_MAX) {
|
||||||
remoteError(VIR_ERR_RPC,
|
remoteError(VIR_ERR_RPC,
|
||||||
_("too many remote undefined names: %d > %d"),
|
_("too many remote undefineds: %d > %d"),
|
||||||
maxnames, REMOTE_INTERFACE_NAME_LIST_MAX);
|
maxnames, REMOTE_INTERFACE_NAME_LIST_MAX);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -2250,7 +2421,7 @@ remoteListNetworks(virConnectPtr conn, char **const names, int maxnames)
|
|||||||
|
|
||||||
if (maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
|
if (maxnames > REMOTE_NETWORK_NAME_LIST_MAX) {
|
||||||
remoteError(VIR_ERR_RPC,
|
remoteError(VIR_ERR_RPC,
|
||||||
_("too many remote undefined names: %d > %d"),
|
_("too many remote undefineds: %d > %d"),
|
||||||
maxnames, REMOTE_NETWORK_NAME_LIST_MAX);
|
maxnames, REMOTE_NETWORK_NAME_LIST_MAX);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -2310,7 +2481,7 @@ remoteListNWFilters(virConnectPtr conn, char **const names, int maxnames)
|
|||||||
|
|
||||||
if (maxnames > REMOTE_NWFILTER_NAME_LIST_MAX) {
|
if (maxnames > REMOTE_NWFILTER_NAME_LIST_MAX) {
|
||||||
remoteError(VIR_ERR_RPC,
|
remoteError(VIR_ERR_RPC,
|
||||||
_("too many remote undefined names: %d > %d"),
|
_("too many remote undefineds: %d > %d"),
|
||||||
maxnames, REMOTE_NWFILTER_NAME_LIST_MAX);
|
maxnames, REMOTE_NWFILTER_NAME_LIST_MAX);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -2370,7 +2541,7 @@ remoteListSecrets(virConnectPtr conn, char **const uuids, int maxuuids)
|
|||||||
|
|
||||||
if (maxuuids > REMOTE_SECRET_UUID_LIST_MAX) {
|
if (maxuuids > REMOTE_SECRET_UUID_LIST_MAX) {
|
||||||
remoteError(VIR_ERR_RPC,
|
remoteError(VIR_ERR_RPC,
|
||||||
_("too many remote undefined uuids: %d > %d"),
|
_("too many remote undefineds: %d > %d"),
|
||||||
maxuuids, REMOTE_SECRET_UUID_LIST_MAX);
|
maxuuids, REMOTE_SECRET_UUID_LIST_MAX);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -2430,7 +2601,7 @@ remoteListStoragePools(virConnectPtr conn, char **const names, int maxnames)
|
|||||||
|
|
||||||
if (maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
|
if (maxnames > REMOTE_STORAGE_POOL_NAME_LIST_MAX) {
|
||||||
remoteError(VIR_ERR_RPC,
|
remoteError(VIR_ERR_RPC,
|
||||||
_("too many remote undefined names: %d > %d"),
|
_("too many remote undefineds: %d > %d"),
|
||||||
maxnames, REMOTE_STORAGE_POOL_NAME_LIST_MAX);
|
maxnames, REMOTE_STORAGE_POOL_NAME_LIST_MAX);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -2905,7 +3076,7 @@ remoteNodeDeviceListCaps(virNodeDevicePtr dev, char **const names, int maxnames)
|
|||||||
|
|
||||||
if (maxnames > REMOTE_NODE_DEVICE_CAPS_LIST_MAX) {
|
if (maxnames > REMOTE_NODE_DEVICE_CAPS_LIST_MAX) {
|
||||||
remoteError(VIR_ERR_RPC,
|
remoteError(VIR_ERR_RPC,
|
||||||
_("too many remote undefined names: %d > %d"),
|
_("too many remote undefineds: %d > %d"),
|
||||||
maxnames, REMOTE_NODE_DEVICE_CAPS_LIST_MAX);
|
maxnames, REMOTE_NODE_DEVICE_CAPS_LIST_MAX);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -3081,7 +3252,7 @@ remoteNodeListDevices(virConnectPtr conn, const char *cap, char **const names, i
|
|||||||
|
|
||||||
if (maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX) {
|
if (maxnames > REMOTE_NODE_DEVICE_NAME_LIST_MAX) {
|
||||||
remoteError(VIR_ERR_RPC,
|
remoteError(VIR_ERR_RPC,
|
||||||
_("too many remote undefined names: %d > %d"),
|
_("too many remote undefineds: %d > %d"),
|
||||||
maxnames, REMOTE_NODE_DEVICE_NAME_LIST_MAX);
|
maxnames, REMOTE_NODE_DEVICE_NAME_LIST_MAX);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
@ -3387,7 +3558,32 @@ done:
|
|||||||
return rv;
|
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 *
|
static char *
|
||||||
remoteNWFilterGetXMLDesc(virNWFilterPtr nwfilter, unsigned int flags)
|
remoteNWFilterGetXMLDesc(virNWFilterPtr nwfilter, unsigned int flags)
|
||||||
@ -3607,7 +3803,38 @@ done:
|
|||||||
return rv;
|
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
|
static int
|
||||||
remoteSecretUndefine(virSecretPtr secret)
|
remoteSecretUndefine(virSecretPtr secret)
|
||||||
@ -3932,7 +4159,7 @@ remoteStoragePoolListVolumes(virStoragePoolPtr pool, char **const names, int max
|
|||||||
|
|
||||||
if (maxnames > REMOTE_STORAGE_VOL_NAME_LIST_MAX) {
|
if (maxnames > REMOTE_STORAGE_VOL_NAME_LIST_MAX) {
|
||||||
remoteError(VIR_ERR_RPC,
|
remoteError(VIR_ERR_RPC,
|
||||||
_("too many remote undefined names: %d > %d"),
|
_("too many remote undefineds: %d > %d"),
|
||||||
maxnames, REMOTE_STORAGE_VOL_NAME_LIST_MAX);
|
maxnames, REMOTE_STORAGE_VOL_NAME_LIST_MAX);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
@ -2212,42 +2212,6 @@ done:
|
|||||||
return rv;
|
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
|
static int
|
||||||
remoteDomainGetVcpus (virDomainPtr domain,
|
remoteDomainGetVcpus (virDomainPtr domain,
|
||||||
virVcpuInfoPtr info,
|
virVcpuInfoPtr info,
|
||||||
@ -2441,76 +2405,6 @@ done:
|
|||||||
return rv;
|
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
|
static int
|
||||||
remoteDomainMigratePrepare2 (virConnectPtr dconn,
|
remoteDomainMigratePrepare2 (virConnectPtr dconn,
|
||||||
char **cookie, int *cookielen,
|
char **cookie, int *cookielen,
|
||||||
@ -2569,43 +2463,6 @@ error:
|
|||||||
goto done;
|
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
|
static int
|
||||||
remoteDomainCreate (virDomainPtr domain)
|
remoteDomainCreate (virDomainPtr domain)
|
||||||
{
|
{
|
||||||
@ -3265,33 +3122,6 @@ remoteNWFilterClose(virConnectPtr conn)
|
|||||||
return remoteGenericClose(conn, &conn->nwfilterPrivateData);
|
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
|
static int
|
||||||
@ -4298,33 +4128,6 @@ remoteSecretClose (virConnectPtr conn)
|
|||||||
return remoteGenericClose(conn, &conn->secretPrivateData);
|
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 *
|
static unsigned char *
|
||||||
remoteSecretGetValue (virSecretPtr secret, size_t *value_size,
|
remoteSecretGetValue (virSecretPtr secret, size_t *value_size,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
@ -4901,36 +4704,6 @@ done:
|
|||||||
return rv;
|
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,
|
static int remoteDomainEventRegisterAny(virConnectPtr conn,
|
||||||
virDomainPtr dom,
|
virDomainPtr dom,
|
||||||
int eventID,
|
int eventID,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user