[libvirt] [libvirt-php 0/3] small improvements

Add some more libvirt functions support to binding. Also add some checks to prevent malloc SIZE_MAX memory in case of errors Vasiliy Tolstov (3): add some checks to prevent overflow add block_commit support and needed const add libvirt_domain_block_job_info src/libvirt-php.c | 152 ++++++++++++++++++++++++++++++++++++++++++++++++------ src/libvirt-php.h | 2 + 2 files changed, 138 insertions(+), 16 deletions(-) -- 2.7.0

Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru> --- src/libvirt-php.c | 50 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/src/libvirt-php.c b/src/libvirt-php.c index 57e1b83ffa2a..4034458e0e4f 100644 --- a/src/libvirt-php.c +++ b/src/libvirt-php.c @@ -6876,7 +6876,9 @@ PHP_FUNCTION(libvirt_storagepool_list_volumes) GET_STORAGEPOOL_FROM_ARGS("r",&zpool); - expectedcount=virStoragePoolNumOfVolumes (pool->pool); + if ((expectedcount=virStoragePoolNumOfVolumes (pool->pool)) < 0) + RETURN_FALSE; + DPRINTF("%s: virStoragePoolNumOfVolumes(%p) returned %d\n", PHPFUNC, pool->pool, expectedcount); names=(char **)emalloc(expectedcount*sizeof(char *)); @@ -7741,7 +7743,8 @@ PHP_FUNCTION(libvirt_list_storagepools) GET_CONNECTION_FROM_ARGS("r",&zconn); - expectedcount=virConnectNumOfStoragePools(conn->conn); + if ((expectedcount=virConnectNumOfStoragePools(conn->conn)) < 0) + RETURN_FALSE; names=(char **)emalloc(expectedcount*sizeof(char *)); count=virConnectListStoragePools(conn->conn,names,expectedcount); @@ -7761,7 +7764,8 @@ PHP_FUNCTION(libvirt_list_storagepools) efree(names); - expectedcount = virConnectNumOfDefinedStoragePools (conn->conn); + if ((expectedcount = virConnectNumOfDefinedStoragePools (conn->conn)) < 0) + RETURN_FALSE; names = (char **)emalloc (expectedcount * sizeof(char *)); count = virConnectListDefinedStoragePools (conn->conn, names, expectedcount); if ((count != expectedcount) || (count < 0)) @@ -7796,7 +7800,8 @@ PHP_FUNCTION(libvirt_list_active_storagepools) GET_CONNECTION_FROM_ARGS("r",&zconn); - expectedcount=virConnectNumOfStoragePools(conn->conn); + if ((expectedcount=virConnectNumOfStoragePools(conn->conn)) < 0) + RETURN_FALSE; names=(char **)emalloc(expectedcount*sizeof(char *)); count=virConnectListStoragePools(conn->conn,names,expectedcount); @@ -7833,7 +7838,9 @@ PHP_FUNCTION(libvirt_list_inactive_storagepools) GET_CONNECTION_FROM_ARGS("r",&zconn); - expectedcount = virConnectNumOfDefinedStoragePools (conn->conn); + if ((expectedcount = virConnectNumOfDefinedStoragePools (conn->conn)) < 0) + RETURN_FALSE; + names= (char **)emalloc (expectedcount * sizeof(char *)); count = virConnectListDefinedStoragePools (conn->conn, names, expectedcount); if ((count != expectedcount) || (count < 0)) @@ -7872,7 +7879,9 @@ PHP_FUNCTION(libvirt_list_domains) GET_CONNECTION_FROM_ARGS("r",&zconn); - expectedcount=virConnectNumOfDomains (conn->conn); + if ((expectedcount=virConnectNumOfDomains (conn->conn)) < 0) + RETURN_FALSE; + DPRINTF("%s: Found %d domains\n", PHPFUNC, expectedcount); ids=(int *)emalloc(sizeof(int)*expectedcount); @@ -7953,7 +7962,8 @@ PHP_FUNCTION(libvirt_list_domain_resources) GET_CONNECTION_FROM_ARGS("r",&zconn); - expectedcount=virConnectNumOfDomains (conn->conn); + if ((expectedcount=virConnectNumOfDomains (conn->conn)) < 0) + RETURN_FALSE; ids=(int *)emalloc(sizeof(int)*expectedcount); count=virConnectListDomains (conn->conn,ids,expectedcount); @@ -7981,7 +7991,9 @@ PHP_FUNCTION(libvirt_list_domain_resources) } efree(ids); - expectedcount=virConnectNumOfDefinedDomains (conn->conn); + if ((expectedcount=virConnectNumOfDefinedDomains (conn->conn)) < 0) + RETURN_FALSE; + names=(char **)emalloc(expectedcount*sizeof(char *)); count=virConnectListDefinedDomains (conn->conn,names ,expectedcount); if ((count != expectedcount) || (count<0)) @@ -8027,7 +8039,8 @@ PHP_FUNCTION(libvirt_list_active_domain_ids) GET_CONNECTION_FROM_ARGS("r",&zconn); - expectedcount=virConnectNumOfDomains (conn->conn); + if ((expectedcount=virConnectNumOfDomains (conn->conn)) < 0) + RETURN_FALSE; ids=(int *)emalloc(sizeof(int)*expectedcount); count=virConnectListDomains (conn->conn,ids,expectedcount); @@ -8064,7 +8077,8 @@ PHP_FUNCTION(libvirt_list_active_domains) GET_CONNECTION_FROM_ARGS("r",&zconn); - expectedcount=virConnectNumOfDomains (conn->conn); + if ((expectedcount=virConnectNumOfDomains (conn->conn)) <) + RETURN_FALSE; ids=(int *)emalloc(sizeof(int)*expectedcount); count=virConnectListDomains (conn->conn,ids,expectedcount); @@ -8115,7 +8129,8 @@ PHP_FUNCTION(libvirt_list_inactive_domains) GET_CONNECTION_FROM_ARGS("r",&zconn); - expectedcount=virConnectNumOfDefinedDomains (conn->conn); + if ((expectedcount=virConnectNumOfDefinedDomains (conn->conn)) < 0) + RETURN_FALSE; names=(char **)emalloc(expectedcount*sizeof(char *)); count=virConnectListDefinedDomains (conn->conn,names ,expectedcount); @@ -8156,7 +8171,9 @@ PHP_FUNCTION(libvirt_list_networks) array_init(return_value); if (flags & VIR_NETWORKS_ACTIVE) { - expectedcount=virConnectNumOfNetworks(conn->conn); + if ((expectedcount=virConnectNumOfNetworks(conn->conn)) < 0) + RETURN_FALSE; + names=(char **)emalloc(expectedcount*sizeof(char *)); count=virConnectListNetworks(conn->conn,names,expectedcount); if ((count != expectedcount) || (count<0)) @@ -8176,7 +8193,8 @@ PHP_FUNCTION(libvirt_list_networks) } if (flags & VIR_NETWORKS_INACTIVE) { - expectedcount=virConnectNumOfDefinedNetworks(conn->conn); + if ((expectedcount=virConnectNumOfDefinedNetworks(conn->conn)) < 0) + RETURN_FALSE; names=(char **)emalloc(expectedcount*sizeof(char *)); count=virConnectListDefinedNetworks(conn->conn,names,expectedcount); if ((count != expectedcount) || (count<0)) @@ -8219,7 +8237,8 @@ PHP_FUNCTION(libvirt_list_nodedevs) GET_CONNECTION_FROM_ARGS("r|s",&zconn,&cap,&cap_len); - expectedcount=virNodeNumOfDevices(conn->conn, cap, 0); + if ((expectedcount=virNodeNumOfDevices(conn->conn, cap, 0)) < 0) + RETURN_FALSE; names=(char **)emalloc(expectedcount*sizeof(char *)); count=virNodeListDevices(conn->conn, cap, names, expectedcount, 0); if ((count != expectedcount) || (count<0)) @@ -8290,7 +8309,8 @@ PHP_FUNCTION(libvirt_nodedev_capabilities) GET_NODEDEV_FROM_ARGS("r",&znodedev); - expectedcount=virNodeDeviceNumOfCaps(nodedev->device); + if ((expectedcount=virNodeDeviceNumOfCaps(nodedev->device)) < 0) + RETURN_FALSE; names=(char **)emalloc(expectedcount*sizeof(char *)); count=virNodeDeviceListCaps(nodedev->device, names, expectedcount); if ((count != expectedcount) || (count<0)) RETURN_FALSE; -- 2.7.0

On 07.03.2016 16:40, Vasiliy Tolstov wrote:
Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru> --- src/libvirt-php.c | 50 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 15 deletions(-)
diff --git a/src/libvirt-php.c b/src/libvirt-php.c index 57e1b83ffa2a..4034458e0e4f 100644 --- a/src/libvirt-php.c +++ b/src/libvirt-php.c @@ -6876,7 +6876,9 @@ PHP_FUNCTION(libvirt_storagepool_list_volumes)
GET_STORAGEPOOL_FROM_ARGS("r",&zpool);
- expectedcount=virStoragePoolNumOfVolumes (pool->pool); + if ((expectedcount=virStoragePoolNumOfVolumes (pool->pool)) < 0) + RETURN_FALSE; + DPRINTF("%s: virStoragePoolNumOfVolumes(%p) returned %d\n", PHPFUNC, pool->pool, expectedcount); names=(char **)emalloc(expectedcount*sizeof(char *));
@@ -7741,7 +7743,8 @@ PHP_FUNCTION(libvirt_list_storagepools)
GET_CONNECTION_FROM_ARGS("r",&zconn);
- expectedcount=virConnectNumOfStoragePools(conn->conn); + if ((expectedcount=virConnectNumOfStoragePools(conn->conn)) < 0) + RETURN_FALSE;
names=(char **)emalloc(expectedcount*sizeof(char *)); count=virConnectListStoragePools(conn->conn,names,expectedcount); @@ -7761,7 +7764,8 @@ PHP_FUNCTION(libvirt_list_storagepools) efree(names);
- expectedcount = virConnectNumOfDefinedStoragePools (conn->conn); + if ((expectedcount = virConnectNumOfDefinedStoragePools (conn->conn)) < 0) + RETURN_FALSE; names = (char **)emalloc (expectedcount * sizeof(char *)); count = virConnectListDefinedStoragePools (conn->conn, names, expectedcount); if ((count != expectedcount) || (count < 0)) @@ -7796,7 +7800,8 @@ PHP_FUNCTION(libvirt_list_active_storagepools)
GET_CONNECTION_FROM_ARGS("r",&zconn);
- expectedcount=virConnectNumOfStoragePools(conn->conn); + if ((expectedcount=virConnectNumOfStoragePools(conn->conn)) < 0) + RETURN_FALSE;
names=(char **)emalloc(expectedcount*sizeof(char *)); count=virConnectListStoragePools(conn->conn,names,expectedcount); @@ -7833,7 +7838,9 @@ PHP_FUNCTION(libvirt_list_inactive_storagepools)
GET_CONNECTION_FROM_ARGS("r",&zconn);
- expectedcount = virConnectNumOfDefinedStoragePools (conn->conn); + if ((expectedcount = virConnectNumOfDefinedStoragePools (conn->conn)) < 0) + RETURN_FALSE; + names= (char **)emalloc (expectedcount * sizeof(char *)); count = virConnectListDefinedStoragePools (conn->conn, names, expectedcount); if ((count != expectedcount) || (count < 0)) @@ -7872,7 +7879,9 @@ PHP_FUNCTION(libvirt_list_domains)
GET_CONNECTION_FROM_ARGS("r",&zconn);
- expectedcount=virConnectNumOfDomains (conn->conn); + if ((expectedcount=virConnectNumOfDomains (conn->conn)) < 0) + RETURN_FALSE; + DPRINTF("%s: Found %d domains\n", PHPFUNC, expectedcount);
ids=(int *)emalloc(sizeof(int)*expectedcount); @@ -7953,7 +7962,8 @@ PHP_FUNCTION(libvirt_list_domain_resources)
GET_CONNECTION_FROM_ARGS("r",&zconn);
- expectedcount=virConnectNumOfDomains (conn->conn); + if ((expectedcount=virConnectNumOfDomains (conn->conn)) < 0) + RETURN_FALSE;
ids=(int *)emalloc(sizeof(int)*expectedcount); count=virConnectListDomains (conn->conn,ids,expectedcount); @@ -7981,7 +7991,9 @@ PHP_FUNCTION(libvirt_list_domain_resources) } efree(ids);
- expectedcount=virConnectNumOfDefinedDomains (conn->conn); + if ((expectedcount=virConnectNumOfDefinedDomains (conn->conn)) < 0) + RETURN_FALSE; + names=(char **)emalloc(expectedcount*sizeof(char *)); count=virConnectListDefinedDomains (conn->conn,names ,expectedcount); if ((count != expectedcount) || (count<0)) @@ -8027,7 +8039,8 @@ PHP_FUNCTION(libvirt_list_active_domain_ids)
GET_CONNECTION_FROM_ARGS("r",&zconn);
- expectedcount=virConnectNumOfDomains (conn->conn); + if ((expectedcount=virConnectNumOfDomains (conn->conn)) < 0) + RETURN_FALSE;
ids=(int *)emalloc(sizeof(int)*expectedcount); count=virConnectListDomains (conn->conn,ids,expectedcount); @@ -8064,7 +8077,8 @@ PHP_FUNCTION(libvirt_list_active_domains)
GET_CONNECTION_FROM_ARGS("r",&zconn);
- expectedcount=virConnectNumOfDomains (conn->conn); + if ((expectedcount=virConnectNumOfDomains (conn->conn)) <)
There's something missing here.
+ RETURN_FALSE;
Even though it does not look like it, we tend to keep block separator 4 spaces wide.
ids=(int *)emalloc(sizeof(int)*expectedcount); count=virConnectListDomains (conn->conn,ids,expectedcount); @@ -8115,7 +8129,8 @@ PHP_FUNCTION(libvirt_list_inactive_domains)
GET_CONNECTION_FROM_ARGS("r",&zconn);
- expectedcount=virConnectNumOfDefinedDomains (conn->conn); + if ((expectedcount=virConnectNumOfDefinedDomains (conn->conn)) < 0) + RETURN_FALSE;
names=(char **)emalloc(expectedcount*sizeof(char *)); count=virConnectListDefinedDomains (conn->conn,names ,expectedcount); @@ -8156,7 +8171,9 @@ PHP_FUNCTION(libvirt_list_networks)
array_init(return_value); if (flags & VIR_NETWORKS_ACTIVE) { - expectedcount=virConnectNumOfNetworks(conn->conn); + if ((expectedcount=virConnectNumOfNetworks(conn->conn)) < 0) + RETURN_FALSE; + names=(char **)emalloc(expectedcount*sizeof(char *)); count=virConnectListNetworks(conn->conn,names,expectedcount); if ((count != expectedcount) || (count<0)) @@ -8176,7 +8193,8 @@ PHP_FUNCTION(libvirt_list_networks) }
if (flags & VIR_NETWORKS_INACTIVE) { - expectedcount=virConnectNumOfDefinedNetworks(conn->conn); + if ((expectedcount=virConnectNumOfDefinedNetworks(conn->conn)) < 0) + RETURN_FALSE; names=(char **)emalloc(expectedcount*sizeof(char *)); count=virConnectListDefinedNetworks(conn->conn,names,expectedcount); if ((count != expectedcount) || (count<0)) @@ -8219,7 +8237,8 @@ PHP_FUNCTION(libvirt_list_nodedevs)
GET_CONNECTION_FROM_ARGS("r|s",&zconn,&cap,&cap_len);
- expectedcount=virNodeNumOfDevices(conn->conn, cap, 0); + if ((expectedcount=virNodeNumOfDevices(conn->conn, cap, 0)) < 0) + RETURN_FALSE; names=(char **)emalloc(expectedcount*sizeof(char *)); count=virNodeListDevices(conn->conn, cap, names, expectedcount, 0); if ((count != expectedcount) || (count<0)) @@ -8290,7 +8309,8 @@ PHP_FUNCTION(libvirt_nodedev_capabilities)
GET_NODEDEV_FROM_ARGS("r",&znodedev);
- expectedcount=virNodeDeviceNumOfCaps(nodedev->device); + if ((expectedcount=virNodeDeviceNumOfCaps(nodedev->device)) < 0) + RETURN_FALSE; names=(char **)emalloc(expectedcount*sizeof(char *)); count=virNodeDeviceListCaps(nodedev->device, names, expectedcount); if ((count != expectedcount) || (count<0)) RETURN_FALSE;
Michal

Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru> --- src/libvirt-php.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/libvirt-php.h | 1 + 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/src/libvirt-php.c b/src/libvirt-php.c index 4034458e0e4f..8e03d86a811a 100644 --- a/src/libvirt-php.c +++ b/src/libvirt-php.c @@ -138,6 +138,7 @@ static zend_function_entry libvirt_functions[] = { PHP_FE(libvirt_domain_set_memory,NULL) PHP_FE(libvirt_domain_set_max_memory,NULL) PHP_FE(libvirt_domain_set_memory_flags,NULL) + PHP_FE(libvirt_domain_block_commit, NULL) PHP_FE(libvirt_domain_block_stats,NULL) PHP_FE(libvirt_domain_block_resize,NULL) PHP_FE(libvirt_domain_block_job_abort,NULL) @@ -1355,11 +1356,40 @@ PHP_MINIT_FUNCTION(libvirt) /* Job was aborted but it's not cleanup up yet */ REGISTER_LONG_CONSTANT("VIR_DOMAIN_JOB_CANCELLED", 5, CONST_CS | CONST_PERSISTENT); + + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_COMMIT_SHALLOW", VIR_DOMAIN_BLOCK_COMMIT_SHALLOW, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_COMMIT_DELETE", VIR_DOMAIN_BLOCK_COMMIT_DELETE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_COMMIT_ACTIVE", VIR_DOMAIN_BLOCK_COMMIT_ACTIVE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_COMMIT_RELATIVE", VIR_DOMAIN_BLOCK_COMMIT_RELATIVE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_COMMIT_BANDWIDTH_BYTES", VIR_DOMAIN_BLOCK_COMMIT_BANDWIDTH_BYTES, CONST_CS | CONST_PERSISTENT); + + + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_COPY_SHALLOW", VIR_DOMAIN_BLOCK_COPY_SHALLOW, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_COPY_REUSE_EXT", VIR_DOMAIN_BLOCK_COPY_REUSE_EXT, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC", VIR_DOMAIN_BLOCK_JOB_ABORT_ASYNC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT", VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_SPEED_BANDWIDTH_BYTES", VIR_DOMAIN_BLOCK_JOB_SPEED_BANDWIDTH_BYTES, CONST_CS | CONST_PERSISTENT); + + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN", VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_TYPE_PULL", VIR_DOMAIN_BLOCK_JOB_TYPE_PULL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_TYPE_COPY", VIR_DOMAIN_BLOCK_JOB_TYPE_COPY, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT", VIR_DOMAIN_BLOCK_JOB_TYPE_COMMIT, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT", VIR_DOMAIN_BLOCK_JOB_TYPE_ACTIVE_COMMIT, CONST_CS | CONST_PERSISTENT); + + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_PULL_BANDWIDTH_BYTES", VIR_DOMAIN_BLOCK_PULL_BANDWIDTH_BYTES, CONST_CS | CONST_PERSISTENT); + + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_REBASE_SHALLOW", VIR_DOMAIN_BLOCK_REBASE_SHALLOW, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_REBASE_REUSE_EXT", VIR_DOMAIN_BLOCK_REBASE_REUSE_EXT, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_REBASE_COPY_RAW", VIR_DOMAIN_BLOCK_REBASE_COPY_RAW, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_REBASE_COPY", VIR_DOMAIN_BLOCK_REBASE_COPY, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_REBASE_RELATIVE", VIR_DOMAIN_BLOCK_REBASE_RELATIVE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_REBASE_COPY_DEV", VIR_DOMAIN_BLOCK_REBASE_COPY_DEV, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_REBASE_BANDWIDTH_BYTES", VIR_DOMAIN_BLOCK_REBASE_BANDWIDTH_BYTES, CONST_CS | CONST_PERSISTENT); + + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_RESIZE_BYTES", VIR_DOMAIN_BLOCK_RESIZE_BYTES, CONST_CS | CONST_PERSISTENT); + /* Migration constants */ REGISTER_LONG_CONSTANT("VIR_MIGRATE_LIVE", 1, CONST_CS | CONST_PERSISTENT); /* direct source -> dest host control channel Note the less-common spelling that we're stuck with: */ @@ -6082,6 +6112,40 @@ PHP_FUNCTION(libvirt_domain_block_resize) } /* + * Function name: libvirt_domain_block_commit + * Since version: 0.5.2(-1) + * Description: Function is used to commit block job + * Arguments: @res [resource]: libvirt domain resource, e.g. from libvirt_domain_lookup_by_*() + * @disk [string]: path to the block device, or device shorthand + * @base [string]: path to backing file to merge into, or device shorthand, or NULL for default + * @top [string]: path to file within backing chain that contains data to be merged, or device shorthand, or NULL to merge all possible data + * @bandwidth [int]: (optional) specify bandwidth limit; flags determine the unit + * @flags [int]: bitwise-OR of VIR_DOMAIN_BLOCK_COMMIT_* + * Returns: true on success fail on error + */ +PHP_FUNCTION(libvirt_domain_block_commit) +{ + php_libvirt_domain *domain=NULL; + zval *zdomain; + int retval; + char *disk; + int disk_len; + char *base = NULL; + int base_len; + char *top = NULL; + int top_len; + long bandwidth = 0; + long flags = 0; + + GET_DOMAIN_FROM_ARGS("rsssll",&zdomain, &disk, &disk_len, &base, &base_len, &top, &top_len, &bandwidth, &flags); + + retval=virDomainBlockCommit(domain->domain, disk, base, top, bandwidth, flags); + if (retval == -1) RETURN_FALSE; + + RETURN_TRUE; +} + +/* * Function name: libvirt_domain_block_job_abort * Since version: 0.5.1(-1) * Description: Function is used to abort block job diff --git a/src/libvirt-php.h b/src/libvirt-php.h index eb4b7f4d0656..cb06c2d0b8a7 100644 --- a/src/libvirt-php.h +++ b/src/libvirt-php.h @@ -403,6 +403,7 @@ PHP_FUNCTION(libvirt_domain_set_memory_flags); PHP_FUNCTION(libvirt_domain_memory_peek); PHP_FUNCTION(libvirt_domain_memory_stats); PHP_FUNCTION(libvirt_domain_update_device); +PHP_FUNCTION(libvirt_domain_block_commit); PHP_FUNCTION(libvirt_domain_block_stats); PHP_FUNCTION(libvirt_domain_block_resize); PHP_FUNCTION(libvirt_domain_block_job_abort); -- 2.7.0

Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru> Signed-off-by: Yuriy Gromak <sewer@clodo.ru> --- src/libvirt-php.c | 36 ++++++++++++++++++++++++++++++++++++ src/libvirt-php.h | 1 + 2 files changed, 37 insertions(+) diff --git a/src/libvirt-php.c b/src/libvirt-php.c index 8e03d86a811a..1bc837b73e74 100644 --- a/src/libvirt-php.c +++ b/src/libvirt-php.c @@ -143,6 +143,7 @@ static zend_function_entry libvirt_functions[] = { PHP_FE(libvirt_domain_block_resize,NULL) PHP_FE(libvirt_domain_block_job_abort,NULL) PHP_FE(libvirt_domain_block_job_set_speed,NULL) + PHP_FE(libvirt_domain_block_job_info,NULL) PHP_FE(libvirt_domain_interface_stats,NULL) PHP_FE(libvirt_domain_get_connect, NULL) PHP_FE(libvirt_domain_migrate, NULL) @@ -1371,6 +1372,8 @@ PHP_MINIT_FUNCTION(libvirt) REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT", VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_SPEED_BANDWIDTH_BYTES", VIR_DOMAIN_BLOCK_JOB_SPEED_BANDWIDTH_BYTES, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_INFO_BANDWIDTH_BYTES", VIR_DOMAIN_BLOCK_JOB_INFO_BANDWIDTH_BYTES, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN", VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_TYPE_PULL", VIR_DOMAIN_BLOCK_JOB_TYPE_PULL, CONST_CS | CONST_PERSISTENT); @@ -6145,6 +6148,39 @@ PHP_FUNCTION(libvirt_domain_block_commit) RETURN_TRUE; } + +/* + * Function name: libvirt_domain_block_job_info + * Since version: 0.5.2(-1) + * Description: Function is used to request block job information for the given disk + * Arguments: @dom [resource]: libvirt domain resource, e.g. from libvirt_domain_lookup_by_*() + * @disk [string]: path to the block device, or device shorthand + * @flags [int]: bitwise-OR of VIR_DOMAIN_BLOCK_COMMIT_* + * Returns: Array with status virDomainGetBlockJobInfo and blockjob information. +*/ +PHP_FUNCTION(libvirt_domain_block_job_info) +{ + php_libvirt_domain *domain=NULL; + zval *zdomain; + int retval; + char *disk; + int disk_len; + long flags = 0; + virDomainBlockJobInfo info; + + GET_DOMAIN_FROM_ARGS("rs|l",&zdomain, &disk, &disk_len, &flags); + + retval=virDomainGetBlockJobInfo(domain->domain, disk, &info, flags); + + array_init(return_value); + add_assoc_long(return_value, "status", (int)retval); + add_assoc_long(return_value, "type", (int)info.type); + add_assoc_long(return_value, "bandwidth", (unsigned long)info.bandwidth); + add_assoc_long(return_value, "cur", (unsigned long long)info.cur); + add_assoc_long(return_value, "end", (unsigned long long)info.end); +} + + /* * Function name: libvirt_domain_block_job_abort * Since version: 0.5.1(-1) diff --git a/src/libvirt-php.h b/src/libvirt-php.h index cb06c2d0b8a7..a45b4bd62c64 100644 --- a/src/libvirt-php.h +++ b/src/libvirt-php.h @@ -408,6 +408,7 @@ PHP_FUNCTION(libvirt_domain_block_stats); PHP_FUNCTION(libvirt_domain_block_resize); PHP_FUNCTION(libvirt_domain_block_job_abort); PHP_FUNCTION(libvirt_domain_block_job_set_speed); +PHP_FUNCTION(libvirt_domain_block_job_info); PHP_FUNCTION(libvirt_domain_interface_stats); PHP_FUNCTION(libvirt_domain_get_connect); PHP_FUNCTION(libvirt_domain_migrate); -- 2.7.0

On 07.03.2016 16:40, Vasiliy Tolstov wrote:
Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru> Signed-off-by: Yuriy Gromak <sewer@clodo.ru> --- src/libvirt-php.c | 36 ++++++++++++++++++++++++++++++++++++ src/libvirt-php.h | 1 + 2 files changed, 37 insertions(+)
diff --git a/src/libvirt-php.c b/src/libvirt-php.c index 8e03d86a811a..1bc837b73e74 100644 --- a/src/libvirt-php.c +++ b/src/libvirt-php.c @@ -143,6 +143,7 @@ static zend_function_entry libvirt_functions[] = { PHP_FE(libvirt_domain_block_resize,NULL) PHP_FE(libvirt_domain_block_job_abort,NULL) PHP_FE(libvirt_domain_block_job_set_speed,NULL) + PHP_FE(libvirt_domain_block_job_info,NULL) PHP_FE(libvirt_domain_interface_stats,NULL) PHP_FE(libvirt_domain_get_connect, NULL) PHP_FE(libvirt_domain_migrate, NULL) @@ -1371,6 +1372,8 @@ PHP_MINIT_FUNCTION(libvirt) REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT", VIR_DOMAIN_BLOCK_JOB_ABORT_PIVOT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_SPEED_BANDWIDTH_BYTES", VIR_DOMAIN_BLOCK_JOB_SPEED_BANDWIDTH_BYTES, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_INFO_BANDWIDTH_BYTES", VIR_DOMAIN_BLOCK_JOB_INFO_BANDWIDTH_BYTES, CONST_CS | CONST_PERSISTENT); +
REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN", VIR_DOMAIN_BLOCK_JOB_TYPE_UNKNOWN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("VIR_DOMAIN_BLOCK_JOB_TYPE_PULL", VIR_DOMAIN_BLOCK_JOB_TYPE_PULL, CONST_CS | CONST_PERSISTENT); @@ -6145,6 +6148,39 @@ PHP_FUNCTION(libvirt_domain_block_commit) RETURN_TRUE; }
+ +/* + * Function name: libvirt_domain_block_job_info + * Since version: 0.5.2(-1) + * Description: Function is used to request block job information for the given disk + * Arguments: @dom [resource]: libvirt domain resource, e.g. from libvirt_domain_lookup_by_*() + * @disk [string]: path to the block device, or device shorthand + * @flags [int]: bitwise-OR of VIR_DOMAIN_BLOCK_COMMIT_* + * Returns: Array with status virDomainGetBlockJobInfo and blockjob information. +*/ +PHP_FUNCTION(libvirt_domain_block_job_info) +{ + php_libvirt_domain *domain=NULL; + zval *zdomain; + int retval; + char *disk; + int disk_len; + long flags = 0; + virDomainBlockJobInfo info; + + GET_DOMAIN_FROM_ARGS("rs|l",&zdomain, &disk, &disk_len, &flags); + + retval=virDomainGetBlockJobInfo(domain->domain, disk, &info, flags); + + array_init(return_value); + add_assoc_long(return_value, "status", (int)retval); + add_assoc_long(return_value, "type", (int)info.type); + add_assoc_long(return_value, "bandwidth", (unsigned long)info.bandwidth); + add_assoc_long(return_value, "cur", (unsigned long long)info.cur); + add_assoc_long(return_value, "end", (unsigned long long)info.end); +} + +
Some blanks at EOLs here and there.
/* * Function name: libvirt_domain_block_job_abort * Since version: 0.5.1(-1) diff --git a/src/libvirt-php.h b/src/libvirt-php.h index cb06c2d0b8a7..a45b4bd62c64 100644 --- a/src/libvirt-php.h +++ b/src/libvirt-php.h @@ -408,6 +408,7 @@ PHP_FUNCTION(libvirt_domain_block_stats); PHP_FUNCTION(libvirt_domain_block_resize); PHP_FUNCTION(libvirt_domain_block_job_abort); PHP_FUNCTION(libvirt_domain_block_job_set_speed); +PHP_FUNCTION(libvirt_domain_block_job_info); PHP_FUNCTION(libvirt_domain_interface_stats); PHP_FUNCTION(libvirt_domain_get_connect); PHP_FUNCTION(libvirt_domain_migrate);
Michal

2016-03-07 18:40 GMT+03:00 Vasiliy Tolstov <v.tolstov@selfip.ru>:
Add some more libvirt functions support to binding. Also add some checks to prevent malloc SIZE_MAX memory in case of errors
Vasiliy Tolstov (3): add some checks to prevent overflow add block_commit support and needed const add libvirt_domain_block_job_info
src/libvirt-php.c | 152 ++++++++++++++++++++++++++++++++++++++++++++++++------ src/libvirt-php.h | 2 + 2 files changed, 138 insertions(+), 16 deletions(-)
Ping.... -- Vasiliy Tolstov, e-mail: v.tolstov@selfip.ru

Le 18/03/2016 12:51, Vasiliy Tolstov a écrit :
2016-03-07 18:40 GMT+03:00 Vasiliy Tolstov <v.tolstov@selfip.ru>:
Add some more libvirt functions support to binding. Also add some checks to prevent malloc SIZE_MAX memory in case of errors
Vasiliy Tolstov (3): add some checks to prevent overflow add block_commit support and needed const add libvirt_domain_block_job_info
src/libvirt-php.c | 152 ++++++++++++++++++++++++++++++++++++++++++++++++------ src/libvirt-php.h | 2 + 2 files changed, 138 insertions(+), 16 deletions(-)
Ping....
I have abolutely no idea what going with libvirt-php, but FYI I have start a fork which is mostly ready and work with both PHP 5 and 7 If your patch is applied, sources will diverged, and it will be nightmare to update the fork. Perhaps you can open a pull request against the fork, so we'll have a single branch to merged upstream ? Your patch looks fine to me. Excepted missing: - arginfo - php 7 compat (using strsize_t and zend_long) Remi P.S.

On 22.03.2016 11:04, Remi Collet wrote:
Le 18/03/2016 12:51, Vasiliy Tolstov a écrit :
2016-03-07 18:40 GMT+03:00 Vasiliy Tolstov <v.tolstov@selfip.ru>:
Add some more libvirt functions support to binding. Also add some checks to prevent malloc SIZE_MAX memory in case of errors
Vasiliy Tolstov (3): add some checks to prevent overflow add block_commit support and needed const add libvirt_domain_block_job_info
src/libvirt-php.c | 152 ++++++++++++++++++++++++++++++++++++++++++++++++------ src/libvirt-php.h | 2 + 2 files changed, 138 insertions(+), 16 deletions(-)
Ping....
I have abolutely no idea what going with libvirt-php, but FYI I have start a fork which is mostly ready and work with both PHP 5 and 7
If your patch is applied, sources will diverged, and it will be nightmare to update the fork.
That's the trouble with forks. What led you to that decision? Does the fork have any patches on the top of bare libvirt-php? If so, can they be applied in the libvirt-php too?
Perhaps you can open a pull request against the fork, so we'll have a single branch to merged upstream ?
Where does the fork live? Michal

2016-03-22 13:04 GMT+03:00 Remi Collet <Remi@famillecollet.com>:
I have abolutely no idea what going with libvirt-php, but FYI I have start a fork which is mostly ready and work with both PHP 5 and 7
If your patch is applied, sources will diverged, and it will be nightmare to update the fork.
Perhaps you can open a pull request against the fork, so we'll have a single branch to merged upstream ?
Your patch looks fine to me. Excepted missing: - arginfo - php 7 compat (using strsize_t and zend_long)
Sorry, but i'm not understand why this happening? As i understand this is bacause files modified with my patches and your. Sometimes this list is slow, but i think that we need to cooperate and bring up-to-date binding... -- Vasiliy Tolstov, e-mail: v.tolstov@selfip.ru

On Tue, Mar 22, 2016 at 10:44 AM, Vasiliy Tolstov <v.tolstov@selfip.ru> wrote:
2016-03-22 13:04 GMT+03:00 Remi Collet <Remi@famillecollet.com>:
I have abolutely no idea what going with libvirt-php, but FYI I have start a fork which is mostly ready and work with both PHP 5 and 7
If your patch is applied, sources will diverged, and it will be nightmare to update the fork.
Perhaps you can open a pull request against the fork, so we'll have a single branch to merged upstream ?
Your patch looks fine to me. Excepted missing: - arginfo - php 7 compat (using strsize_t and zend_long)
Sorry, but i'm not understand why this happening? As i understand this is bacause files modified with my patches and your. Sometimes this list is slow, but i think that we need to cooperate and bring up-to-date binding...
Remi announced the patches to bring up libvirt-php to support php5 and php7 simultaneously available in a git repository[0] two days ago on this list[1]. I do not want to maintain a fork of libvirt-php, and would rather see Remi's commits merged into the mainline repository. Since there's no merge request model or any other useful mechanism to actionably hold on to patches while they sit in review-land, they are available in a repository that people can use and contribute to. PHP 7 is here, and libvirt-php needs to support it properly. Again, I definitely want to see these patches merged in, but I refuse to allow them to languish, too. [0]: https://gitlab.com/Conan_Kudo/libvirt-php7/commits/php7 [1]: https://www.redhat.com/archives/libvir-list/2016-March/msg00916.html -- 真実はいつも一つ!/ Always, there's only one truth!

On 07.03.2016 16:40, Vasiliy Tolstov wrote:
Add some more libvirt functions support to binding. Also add some checks to prevent malloc SIZE_MAX memory in case of errors
Vasiliy Tolstov (3): add some checks to prevent overflow add block_commit support and needed const add libvirt_domain_block_job_info
src/libvirt-php.c | 152 ++++++++++++++++++++++++++++++++++++++++++++++++------ src/libvirt-php.h | 2 + 2 files changed, 138 insertions(+), 16 deletions(-)
ACK series. I've fixed all the small nits I have found and pushed this. Sorry for such delay. I've noticed this just before leaving for holiday and the reviewer's bandwidth is limited. Michal

2016-03-22 13:19 GMT+03:00 Michal Privoznik <mprivozn@redhat.com>:
ACK series. I've fixed all the small nits I have found and pushed this. Sorry for such delay. I've noticed this just before leaving for holiday and the reviewer's bandwidth is limited.
No problem, thanks! -- Vasiliy Tolstov, e-mail: v.tolstov@selfip.ru
participants (4)
-
Michal Privoznik
-
Neal Gompa
-
Remi Collet
-
Vasiliy Tolstov