static int cmd_help(char *args[], int num, struct connman_option *options);
+static bool check_dbus_name(const char *name)
+{
+ /*
+ * Valid dbus chars should be [A-Z][a-z][0-9]_
+ * and should not start with number.
+ */
+ unsigned int i;
+
+ if (name == NULL || (name[0] >= '0' && name[0] <= '9'))
+ return false;
+
+ for (i = 0; i < strlen(name); i++)
+ if (!((name[i] >= 'A' && name[i] <= 'Z') ||
+ (name[i] >= 'a' && name[i] <= 'z') ||
+ (name[i] >= '0' && name[i] <= '9') ||
+ name[i] == '_'))
+ return false;
+
+ return true;
+}
+
static int parse_boolean(char *arg)
{
if (arg == NULL)
if (num < 2)
return -EINVAL;
+ if (check_dbus_name(args[1]) == false)
+ return -EINVAL;
+
if (strcmp(args[1], "offlinemode") == 0) {
tech = g_strdup(args[1]);
return __connmanctl_dbus_set_property(connection, "/",
if (num < 2)
return -EINVAL;
+ if (check_dbus_name(args[1]) == false)
+ return -EINVAL;
+
if (strcmp(args[1], "offlinemode") == 0) {
tech = g_strdup(args[1]);
return __connmanctl_dbus_set_property(connection, "/",
break;
}
+ if (check_dbus_name(service_name) == false)
+ return -EINVAL;
+
if (service_name == NULL) {
return __connmanctl_dbus_method_call(connection, "/",
"net.connman.Manager", "GetServices",
if (set_tethering == -1)
return -EINVAL;
+ if (check_dbus_name(args[1]) == false)
+ return -EINVAL;
+
return tether_set(args[1], set_tethering);
}
if (num < 2)
return -EINVAL;
+ if (check_dbus_name(args[1]) == false)
+ return -EINVAL;
+
path = g_strdup_printf("/net/connman/technology/%s", args[1]);
return __connmanctl_dbus_method_call(connection, path,
"net.connman.Technology", "Scan",
if (num < 2)
return -EINVAL;
+ if (check_dbus_name(args[1]) == false)
+ return -EINVAL;
+
path = g_strdup_printf("/net/connman/service/%s", args[1]);
return __connmanctl_dbus_method_call(connection, path,
"net.connman.Service", "Connect",
if (num < 2)
return -EINVAL;
+ if (check_dbus_name(args[1]) == false)
+ return -EINVAL;
+
path = g_strdup_printf("/net/connman/service/%s", args[1]);
return __connmanctl_dbus_method_call(connection, path,
"net.connman.Service", "Disconnect",
if (service_name == NULL)
return -EINVAL;
+ if (check_dbus_name(service_name) == false)
+ return -EINVAL;
+
while (index < num && args[index] != NULL) {
c = parse_args(args[index], options);
opt_start = &args[index + 1];