[libvirt] [PATCHv2] leaseshelper: split out virLeaseNew
John Ferlan
jferlan at redhat.com
Tue Feb 9 11:11:07 UTC 2016
On 02/05/2016 11:49 AM, Ján Tomko wrote:
> For the actions ADD and OLD, split out creating the new lease object,
> as well as getting the environment variables that do not affect
> the parsing of command line arguments.
> ---
> v2: do not pass argc, argv to the function
>
> src/network/leaseshelper.c | 127 +++++++++++++++++++++++++++------------------
> 1 file changed, 77 insertions(+), 50 deletions(-)
>
> diff --git a/src/network/leaseshelper.c b/src/network/leaseshelper.c
> index f560206..2a0b18c 100644
> --- a/src/network/leaseshelper.c
> +++ b/src/network/leaseshelper.c
> @@ -285,10 +285,82 @@ virLeasePrintLeases(virJSONValuePtr leases_array_new,
> return ret;
> }
>
> +static int
> +virLeaseNew(virJSONValuePtr *lease_ret,
> + const char *mac,
> + const char *clientid,
> + const char *ip,
> + const char *hostname,
> + const char *iaid,
> + const char *server_duid)
Coverity complains - order of arguments appears swapped...
...iaid, server_duid)
[1]
> +{
> + virJSONValuePtr lease_new = NULL;
> + const char *exptime_tmp = virGetEnvAllowSUID("DNSMASQ_LEASE_EXPIRES");
> + long long expirytime = 0;
> + char *exptime = NULL;
> + int ret = -1;
> +
> + /* In case hostname is still unknown, use the last known one */
> + if (!hostname)
> + hostname = virGetEnvAllowSUID("DNSMASQ_OLD_HOSTNAME");
> +
> + if (!mac) {
> + ret = 0;
> + goto cleanup;
> + }
> +
> + if (exptime_tmp) {
> + if (VIR_STRDUP(exptime, exptime_tmp) < 0)
> + goto cleanup;
> +
> + /* Removed extraneous trailing space in DNSMASQ_LEASE_EXPIRES
> + * (dnsmasq < 2.52) */
> + if (exptime[strlen(exptime) - 1] == ' ')
> + exptime[strlen(exptime) - 1] = '\0';
> + }
> +
> + if (!exptime ||
> + virStrToLong_ll(exptime, NULL, 10, &expirytime) < 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Unable to convert lease expiry time to long long: %s"),
> + NULLSTR(exptime));
> + goto cleanup;
> + }
> +
> + /* Create new lease */
> + if (!(lease_new = virJSONValueNewObject())) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("failed to create json"));
> + goto cleanup;
> + }
> +
> + if (iaid && virJSONValueObjectAppendString(lease_new, "iaid", iaid) < 0)
> + goto cleanup;
> + if (ip && virJSONValueObjectAppendString(lease_new, "ip-address", ip) < 0)
> + goto cleanup;
> + if (mac && virJSONValueObjectAppendString(lease_new, "mac-address", mac) < 0)
> + goto cleanup;
> + if (hostname && virJSONValueObjectAppendString(lease_new, "hostname", hostname) < 0)
> + goto cleanup;
> + if (clientid && virJSONValueObjectAppendString(lease_new, "client-id", clientid) < 0)
> + goto cleanup;
> + if (server_duid && virJSONValueObjectAppendString(lease_new, "server-duid", server_duid) < 0)
> + goto cleanup;
> + if (expirytime && virJSONValueObjectAppendNumberLong(lease_new, "expiry-time", expirytime) < 0)
> + goto cleanup;
> +
> + ret = 0;
> + *lease_ret = lease_new;
> + lease_new = NULL;
> + cleanup:
> + VIR_FREE(exptime);
> + virJSONValueFree(lease_new);
> + return ret;
> +}
> +
> int
> main(int argc, char **argv)
> {
> - char *exptime = NULL;
> char *pid_file = NULL;
> char *custom_lease_file = NULL;
> const char *ip = NULL;
> @@ -297,10 +369,8 @@ main(int argc, char **argv)
> const char *iaid = virGetEnvAllowSUID("DNSMASQ_IAID");
> const char *clientid = virGetEnvAllowSUID("DNSMASQ_CLIENT_ID");
> const char *interface = virGetEnvAllowSUID("DNSMASQ_INTERFACE");
> - const char *exptime_tmp = virGetEnvAllowSUID("DNSMASQ_LEASE_EXPIRES");
> const char *hostname = virGetEnvAllowSUID("DNSMASQ_SUPPLIED_HOSTNAME");
> char *server_duid = NULL;
> - long long expirytime = 0;
> int action = -1;
> int pid_file_fd = -1;
> int rv = EXIT_FAILURE;
> @@ -362,20 +432,6 @@ main(int argc, char **argv)
> if (argc == 5)
> hostname = argv[4];
>
> - /* In case hostname is still unknown, use the last known one */
> - if (!hostname)
> - hostname = virGetEnvAllowSUID("DNSMASQ_OLD_HOSTNAME");
> -
> - if (exptime_tmp) {
> - if (VIR_STRDUP(exptime, exptime_tmp) < 0)
> - goto cleanup;
> -
> - /* Removed extraneous trailing space in DNSMASQ_LEASE_EXPIRES
> - * (dnsmasq < 2.52) */
> - if (exptime[strlen(exptime) - 1] == ' ')
> - exptime[strlen(exptime) - 1] = '\0';
> - }
> -
> /* Check if it is an IPv6 lease */
> if (iaid) {
> mac = virGetEnvAllowSUID("DNSMASQ_MAC");
> @@ -405,6 +461,9 @@ main(int argc, char **argv)
> switch ((enum virLeaseActionFlags) action) {
> case VIR_LEASE_ACTION_ADD:
> case VIR_LEASE_ACTION_OLD:
> + /* Create new lease */
> + if (virLeaseNew(&lease_new, mac, clientid, ip, hostname, server_duid, iaid) < 0)
While here it's ...server_duid, iaid)
John
> + goto cleanup;
> /* Custom ipv6 leases *will not* be created if the env-var DNSMASQ_MAC
> * is not set. In the special case, when the $(interface).status file
> * is not already present and dnsmasq is (re)started, the corresponding
> @@ -418,40 +477,9 @@ main(int argc, char **argv)
> * the new lease will be created irrespective of whether the MACID is
> * known or not.
> */
> - if (!mac)
> + if (!lease_new)
> break;
>
> - /* Create new lease */
> - if (!(lease_new = virJSONValueNewObject())) {
> - virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> - _("failed to create json"));
> - goto cleanup;
> - }
> -
> - if (!exptime ||
> - virStrToLong_ll(exptime, NULL, 10, &expirytime) < 0) {
> - virReportError(VIR_ERR_INTERNAL_ERROR,
> - _("Unable to convert lease expiry time to long long: %s"),
> - NULLSTR(exptime));
> - goto cleanup;
> - }
> -
> - if (iaid && virJSONValueObjectAppendString(lease_new, "iaid", iaid) < 0)
> - goto cleanup;
> - if (ip && virJSONValueObjectAppendString(lease_new, "ip-address", ip) < 0)
> - goto cleanup;
> - if (mac && virJSONValueObjectAppendString(lease_new, "mac-address", mac) < 0)
> - goto cleanup;
> - if (hostname && virJSONValueObjectAppendString(lease_new, "hostname", hostname) < 0)
> - goto cleanup;
> - if (clientid && virJSONValueObjectAppendString(lease_new, "client-id", clientid) < 0)
> - goto cleanup;
> - if (server_duid && virJSONValueObjectAppendString(lease_new, "server-duid", server_duid) < 0)
> - goto cleanup;
> - if (expirytime && virJSONValueObjectAppendNumberLong(lease_new, "expiry-time", expirytime) < 0)
> - goto cleanup;
> -
> -
> /* fallthrough */
> case VIR_LEASE_ACTION_DEL:
> /* Delete the corresponding lease, if it already exists */
> @@ -514,7 +542,6 @@ main(int argc, char **argv)
> virPidFileReleasePath(pid_file, pid_file_fd);
>
> VIR_FREE(pid_file);
> - VIR_FREE(exptime);
> VIR_FREE(server_duid);
> VIR_FREE(custom_lease_file);
> virJSONValueFree(lease_new);
>
More information about the libvir-list
mailing list