diff options
author | Jiří Klimeš <jklimes@redhat.com> | 2013-10-01 18:45:26 +0200 |
---|---|---|
committer | Jiří Klimeš <jklimes@redhat.com> | 2013-10-02 11:48:07 +0200 |
commit | 9e9afdb25beedc7b456d919c672c54a055f8b931 (patch) | |
tree | 7599a93da653e039f79092a49e0d2ef3e4c6085d | |
parent | d3aae79e5c7ec24553b3d10bc640f418aceb65ef (diff) | |
download | NetworkManager-9e9afdb25beedc7b456d919c672c54a055f8b931.tar.gz |
cli: fix memory leaks on questionnaires
-rw-r--r-- | cli/src/connections.c | 221 |
1 files changed, 158 insertions, 63 deletions
diff --git a/cli/src/connections.c b/cli/src/connections.c index 7910112b36..a24926ed1c 100644 --- a/cli/src/connections.c +++ b/cli/src/connections.c @@ -2332,37 +2332,46 @@ do_questionnaire_ethernet (gboolean ethernet, char **mtu, char **mac, char **clo /* Ask for optional arguments */ printf (_("There are 3 optional arguments for '%s' connection type.\n"), type);; answer = nmc_get_user_input (_("Do you want to provide them? (yes/no) [yes] ")); - if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) + if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) { + g_free (answer); return; + } if (!*mtu) { do { *mtu = nmc_get_user_input (_("MTU [auto]: ")); once_more = !check_and_convert_mtu (*mtu, NULL, &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*mtu); + } } while (once_more); } if (!*mac) { do { *mac = nmc_get_user_input (_("MAC [none]: ")); once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_ETHER, "mac", &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*mac); + } } while (once_more); } if (!*cloned_mac) { do { *cloned_mac = nmc_get_user_input (_("Cloned MAC [none]: ")); once_more = !check_and_convert_mac (*cloned_mac, NULL, ARPHRD_ETHER, "cloned-mac", &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*cloned_mac); + } } while (once_more); } + g_free (answer); return; } @@ -2377,25 +2386,31 @@ do_questionnaire_infiniband (char **mtu, char **mac, char **mode, char **parent, /* Ask for optional arguments */ printf (_("There are 5 optional arguments for 'InfiniBand' connection type.\n")); answer = nmc_get_user_input (_("Do you want to provide them? (yes/no) [yes] ")); - if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) + if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) { + g_free (answer); return; + } if (!*mtu) { do { *mtu = nmc_get_user_input (_("MTU [auto]: ")); once_more = !check_and_convert_mtu (*mtu, NULL, &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*mtu); + } } while (once_more); } if (!*mac) { do { *mac = nmc_get_user_input (_("MAC [none]: ")); once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_INFINIBAND, "mac", &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*mac); + } } while (once_more); } if (!*mode) { @@ -2404,35 +2419,42 @@ do_questionnaire_infiniband (char **mtu, char **mac, char **mode, char **parent, if (!*mode) *mode = g_strdup ("datagram"); once_more = !check_infiniband_mode (*mode, &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*mode); + } } while (once_more); } if (!*parent) { do { *parent = nmc_get_user_input (_("Parent interface [none]: ")); once_more = !check_infiniband_parent (*parent, &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*parent); + } } while (once_more); } if (!*p_key) { do { *p_key = nmc_get_user_input (_("P_KEY [none]: ")); once_more = !check_infiniband_p_key (*p_key, NULL, &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*p_key); + } /* If parent is specified, so has to be P_KEY */ - if (*parent && !*p_key) { + if (!once_more && *parent && !*p_key) { once_more = TRUE; printf (_("Error: 'p-key' is mandatory when 'parent' is specified.\n")); } } while (once_more); } + g_free (answer); return; } @@ -2454,19 +2476,24 @@ do_questionnaire_wimax (char **mac) /* Ask for optional 'wimax' arguments. */ printf (_("There is 1 optional argument for 'WiMax' connection type.\n")); answer = nmc_get_user_input (_("Do you want to provide it? (yes/no) [yes] ")); - if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) + if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) { + g_free (answer); return; + } if (!*mac) { do { *mac = nmc_get_user_input (_("MAC [none]: ")); once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_ETHER, "mac", &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*mac); + } } while (once_more); } + g_free (answer); return; } @@ -2479,14 +2506,17 @@ do_questionnaire_mobile (char **user, char **password) /* Ask for optional 'gsm' or 'cdma' arguments. */ printf (_("There are 2 optional arguments for 'mobile broadband' connection type.\n")); answer = nmc_get_user_input (_("Do you want to provide them? (yes/no) [yes] ")); - if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) + if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) { + g_free (answer); return; + } if (!*user) *user = nmc_get_user_input (_("Username [none]: ")); if (!*password) *password = nmc_get_user_input (_("Password [none]: ")); + g_free (answer); return; } @@ -2500,8 +2530,10 @@ do_questionnaire_bluetooth (char **bt_type) /* Ask for optional 'bluetooth' arguments. */ printf (_("There is 1 optional argument for 'bluetooth' connection type.\n")); answer = nmc_get_user_input (_("Do you want to provide it? (yes/no) [yes] ")); - if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) + if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) { + g_free (answer); return; + } if (!*bt_type) { do { @@ -2512,11 +2544,14 @@ do_questionnaire_bluetooth (char **bt_type) && strcmp (*bt_type, NM_SETTING_BLUETOOTH_TYPE_DUN"-gsm") && strcmp (*bt_type, NM_SETTING_BLUETOOTH_TYPE_DUN"-cdma") && strcmp (*bt_type, NM_SETTING_BLUETOOTH_TYPE_PANU); - if (once_more) + if (once_more) { printf (_("Error: 'bt-type': '%s' is not a valid bluetooth type.\n"), *bt_type); + g_free (*bt_type); + } } while (once_more); } + g_free (answer); return; } @@ -2531,46 +2566,57 @@ do_questionnaire_vlan (char **mtu, char **flags, char **ingress, char **egress) /* Ask for optional 'vlan' arguments. */ printf (_("There are 4 optional arguments for 'VLAN' connection type.\n")); answer = nmc_get_user_input (_("Do you want to provide them? (yes/no) [yes] ")); - if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) + if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) { + g_free (answer); return; + } if (!*mtu) { do { *mtu = nmc_get_user_input (_("MTU [auto]: ")); once_more = !check_and_convert_mtu (*mtu, NULL, &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*mtu); + } } while (once_more); } if (!*flags) { do { *flags = nmc_get_user_input (_("VLAN flags (<0-7>) [none]: ")); once_more = !check_and_convert_vlan_flags (*flags, NULL, &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*flags); + } } while (once_more); } if (!*ingress) { do { *ingress = nmc_get_user_input (_("Ingress priority maps [none]: ")); once_more = !check_and_convert_vlan_prio_maps (*ingress, NM_VLAN_INGRESS_MAP, NULL, &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*ingress); + } } while (once_more); } if (!*egress) { do { *egress = nmc_get_user_input (_("Egress priority maps [none]: ")); once_more = !check_and_convert_vlan_prio_maps (*egress, NM_VLAN_EGRESS_MAP, NULL, &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*egress); + } } while (once_more); } + g_free (answer); return; } @@ -2587,8 +2633,10 @@ do_questionnaire_bond (char **mode, char **miimon, char **downdelay, char **upde /* Ask for optional 'bond' arguments. */ printf (_("There are 6 optional arguments for 'bond' connection type.\n")); answer = nmc_get_user_input (_("Do you want to provide them? (yes/no) [yes] ")); - if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) + if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) { + g_free (answer); return; + } if (!*mode) { const char *mode_tmp; @@ -2597,48 +2645,57 @@ do_questionnaire_bond (char **mode, char **miimon, char **downdelay, char **upde if (!*mode) *mode = g_strdup ("balance-rr"); mode_tmp = nmc_bond_validate_mode (*mode, &error); + g_free (*mode); if (mode_tmp) { - g_free (*mode); *mode = g_strdup (mode_tmp); - } else + } else { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + } } while (!mode_tmp); } if (!*miimon) { do { *miimon = nmc_get_user_input (_("Bonding miimon [100]): ")); once_more = *miimon && !nmc_string_to_uint (*miimon, TRUE, 0, G_MAXUINT32, &tmp); - if (once_more) + if (once_more) { printf (_("Error: 'miimon': '%s' is not a valid number <0-%u>.\n"), *miimon, G_MAXUINT32); + g_free (*miimon); + } } while (once_more); } if (!*downdelay) { do { *downdelay = nmc_get_user_input (_("Bonding downdelay [0]): ")); once_more = *downdelay && !nmc_string_to_uint (*downdelay, TRUE, 0, G_MAXUINT32, &tmp); - if (once_more) + if (once_more) { printf (_("Error: 'downdelay': '%s' is not a valid number <0-%u>.\n"), *downdelay, G_MAXUINT32); + g_free (*downdelay); + } } while (once_more); } if (!*updelay) { do { *updelay = nmc_get_user_input (_("Bonding updelay [0]): ")); once_more = *updelay && !nmc_string_to_uint (*updelay, TRUE, 0, G_MAXUINT32, &tmp); - if (once_more) + if (once_more) { printf (_("Error: 'updelay': '%s' is not a valid number <0-%u>.\n"), *updelay, G_MAXUINT32); + g_free (*updelay); + } } while (once_more); } if (!*arpinterval) { do { *arpinterval = nmc_get_user_input (_("Bonding arp-interval [0]): ")); once_more = *arpinterval && !nmc_string_to_uint (*arpinterval, TRUE, 0, G_MAXUINT32, &tmp); - if (once_more) + if (once_more) { printf (_("Error: 'arp-interval': '%s' is not a valid number <0-%u>.\n"), *arpinterval, G_MAXUINT32); + g_free (*arpinterval); + } } while (once_more); } if (!*arpiptarget) { @@ -2646,6 +2703,7 @@ do_questionnaire_bond (char **mode, char **miimon, char **downdelay, char **upde *arpiptarget = nmc_get_user_input (_("Bonding arp-ip-target [none]): ")); } + g_free (answer); return; } @@ -2662,8 +2720,10 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, /* Ask for optional 'bridge' arguments. */ printf (_("There are 6 optional arguments for 'bridge' connection type.\n")); answer = nmc_get_user_input (_("Do you want to provide them? (yes/no) [yes] ")); - if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) + if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) { + g_free (answer); return; + } if (!*stp) { gboolean stp_bool; @@ -2671,9 +2731,11 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, *stp = nmc_get_user_input (_("Enable STP (yes/no) [yes]: ")); *stp = *stp ? *stp : g_strdup ("yes"); once_more = !nmc_string_to_bool (*stp, &stp_bool, &error); - if (once_more) + if (once_more) { printf (_("Error: 'stp': '%s'.\n"), error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*stp); + } } while (once_more); } if (!*priority) { @@ -2681,9 +2743,11 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, *priority = nmc_get_user_input (_("STP priority [128]): ")); *priority = *priority ? *priority : g_strdup ("128"); once_more = !nmc_string_to_uint (*priority, TRUE, 0, G_MAXUINT16, &tmp); - if (once_more) + if (once_more) { printf (_("Error: 'priority': '%s' is not a valid number <0-%d>.\n"), *priority, G_MAXUINT16); + g_free (*priority); + } } while (once_more); } if (!*fwd_delay) { @@ -2691,9 +2755,11 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, *fwd_delay = nmc_get_user_input (_("Forward delay [15]): ")); *fwd_delay = *fwd_delay ? *fwd_delay : g_strdup ("15"); once_more = !nmc_string_to_uint (*fwd_delay, TRUE, 2, 30, &tmp); - if (once_more) + if (once_more) { printf (_("Error: 'forward-delay': '%s' is not a valid number <2-30>.\n"), *fwd_delay); + g_free (*fwd_delay); + } } while (once_more); } @@ -2702,9 +2768,11 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, *hello_time = nmc_get_user_input (_("Hello time [2]): ")); *hello_time = *hello_time ? *hello_time : g_strdup ("2"); once_more = !nmc_string_to_uint (*hello_time, TRUE, 1, 10, &tmp); - if (once_more) + if (once_more) { printf (_("Error: 'hello-time': '%s' is not a valid number <1-10>.\n"), *hello_time); + g_free (*hello_time); + } } while (once_more); } if (!*max_age) { @@ -2712,9 +2780,11 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, *max_age = nmc_get_user_input (_("Max age [20]): ")); *max_age = *max_age ? *max_age : g_strdup ("20"); once_more = !nmc_string_to_uint (*max_age, TRUE, 6, 40, &tmp); - if (once_more) + if (once_more) { printf (_("Error: 'max-age': '%s' is not a valid number <6-40>.\n"), *max_age); + g_free (*max_age); + } } while (once_more); } if (!*ageing_time) { @@ -2722,12 +2792,15 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, *ageing_time = nmc_get_user_input (_("MAC address ageing time [300]): ")); *ageing_time = *ageing_time ? *ageing_time : g_strdup ("300"); once_more = !nmc_string_to_uint (*ageing_time, TRUE, 0, 1000000, &tmp); - if (once_more) + if (once_more) { printf (_("Error: 'ageing-time': '%s' is not a valid number <0-1000000>.\n"), *ageing_time); + g_free (*ageing_time); + } } while (once_more); } + g_free (answer); return; } @@ -2743,8 +2816,10 @@ do_questionnaire_bridge_slave (char **priority, char **path_cost, char **hairpin /* Ask for optional 'bridge-slave' arguments. */ printf (_("There are 3 optional arguments for 'bridge-slave' connection type.\n")); answer = nmc_get_user_input (_("Do you want to provide them? (yes/no) [yes] ")); - if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) + if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) { + g_free (answer); return; + } if (!*priority) { do { @@ -2752,9 +2827,11 @@ do_questionnaire_bridge_slave (char **priority, char **path_cost, char **hairpin *priority = *priority ? *priority : g_strdup ("32"); once_more = !bridge_prop_string_to_uint (*priority, "priority", NM_TYPE_SETTING_BRIDGE_PORT, NM_SETTING_BRIDGE_PORT_PRIORITY, &tmp, &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*priority); + } } while (once_more); } if (!*path_cost) { @@ -2763,9 +2840,11 @@ do_questionnaire_bridge_slave (char **priority, char **path_cost, char **hairpin *path_cost = *path_cost ? *path_cost : g_strdup ("100"); once_more = !bridge_prop_string_to_uint (*path_cost, "path-cost", NM_TYPE_SETTING_BRIDGE_PORT, NM_SETTING_BRIDGE_PORT_PATH_COST, &tmp, &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*path_cost); + } } while (once_more); } if (!*hairpin) { @@ -2774,12 +2853,15 @@ do_questionnaire_bridge_slave (char **priority, char **path_cost, char **hairpin *hairpin = nmc_get_user_input (_("Hairpin (yes/no) [yes]: ")); *hairpin = *hairpin ? *hairpin : g_strdup ("yes"); once_more = !nmc_string_to_bool (*hairpin, &hairpin_bool, &error); - if (once_more) + if (once_more) { printf (_("Error: 'hairpin': '%s'.\n"), error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*hairpin); + } } while (once_more); } + g_free (answer); return; } @@ -2792,12 +2874,15 @@ do_questionnaire_vpn (char **user) /* Ask for optional 'vpn' arguments. */ printf (_("There is 1 optional argument for 'VPN' connection type.\n")); answer = nmc_get_user_input (_("Do you want to provide it? (yes/no) [yes] ")); - if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) + if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) { + g_free (answer); return; + } if (!*user) *user = nmc_get_user_input (_("Username [none]: ")); + g_free (answer); return; } @@ -2813,28 +2898,35 @@ do_questionnaire_olpc (char **channel, char **dhcp_anycast) /* Ask for optional 'olpc' arguments. */ printf (_("There are 2 optional arguments for 'OLPC Mesh' connection type.\n")); answer = nmc_get_user_input (_("Do you want to provide them? (yes/no) [yes] ")); - if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) + if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) { + g_free (answer); return; + } if (!*channel) { do { *channel = nmc_get_user_input (_("OLPC Mesh channel [1]): ")); once_more = *channel && !nmc_string_to_uint (*channel, TRUE, 1, 13, &tmp); - if (once_more) + if (once_more) { printf (_("Error: 'channel': '%s' is not a valid number <1-13>.\n"), *channel); + g_free (*channel); + } } while (once_more); } if (!*dhcp_anycast) { do { *dhcp_anycast = nmc_get_user_input (_("DHCP anycast MAC address [none]: ")); once_more = !check_and_convert_mac (*dhcp_anycast, NULL, ARPHRD_ETHER, "dhcp-anycast", &error); - if (once_more) + if (once_more) { printf ("%s\n", error->message); - g_clear_error (&error); + g_clear_error (&error); + g_free (*dhcp_anycast); + } } while (once_more); } + g_free (answer); return; } @@ -2917,14 +3009,17 @@ do_questionnaire_ip (NMConnection *connection) /* Ask for IP addresses */ answer = nmc_get_user_input (_("Do you want to add IP addresses? (yes/no) [yes] ")); - if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) + if (answer && (!nmc_string_to_bool (answer, &answer_bool, NULL) || !answer_bool)) { + g_free (answer); return; + } printf (_("Press <Enter> to finish adding addresses.\n")); ask_for_ip_addresses (connection, 4); ask_for_ip_addresses (connection, 6); + g_free (answer); return; } |