}
+static gchar *
+subst_str_and_escape (const gchar *str,
+ const gchar *from,
+ const gchar *to)
+{
+ gchar *escaped;
+ gchar *quoted_and_escaped;
+ gchar *ret;
+ escaped = g_strescape (to, NULL);
+ quoted_and_escaped = g_strconcat ("\"", escaped, "\"", NULL);
+ ret = subst_str (str, from, quoted_and_escaped);
+ g_free (quoted_and_escaped);
+ g_free (escaped);
+ return ret;
+}
+
/* ---------------------------------------------------------------------------------------------------- */
typedef struct
UDisksCleanup *cleanup;
const gchar *action_id;
const FSInfo *fs_info;
- const gchar *label;
- gchar *escaped_label = NULL;
gchar *command = NULL;
gchar *tmp;
gchar *error_message;
gboolean take_ownership = FALSE;
gchar *encrypt_passphrase = NULL;
gchar *mapped_name = NULL;
+ const gchar *label = NULL;
+ gchar *escaped_device = NULL;
error = NULL;
object = udisks_daemon_util_dup_object (block, &error);
daemon = udisks_linux_block_object_get_daemon (UDISKS_LINUX_BLOCK_OBJECT (object));
cleanup = udisks_daemon_get_cleanup (daemon);
- escaped_label = g_shell_quote("");
command = NULL;
error_message = NULL;
error = NULL;
g_variant_lookup (options, "take-ownership", "b", &take_ownership);
g_variant_lookup (options, "encrypt.passphrase", "s", &encrypt_passphrase);
+ escaped_device = g_strescape (udisks_block_get_device (block), NULL);
+
/* First wipe the device */
wait_data = g_new0 (FormatWaitData, 1);
wait_data->object = object;
&status,
&error_message,
NULL, /* input_string */
- "wipefs -a %s",
- udisks_block_get_device (block)))
+ "wipefs -a \"%s\"",
+ escaped_device))
{
g_dbus_method_invocation_return_error (invocation,
UDISKS_ERROR,
&status,
&error_message,
encrypt_passphrase, /* input_string */
- "cryptsetup luksFormat %s",
- udisks_block_get_device (block)))
+ "cryptsetup luksFormat \"%s\"",
+ escaped_device))
{
g_dbus_method_invocation_return_error (invocation,
UDISKS_ERROR,
&status,
&error_message,
encrypt_passphrase, /* input_string */
- "cryptsetup luksOpen %s %s",
- udisks_block_get_device (block),
+ "cryptsetup luksOpen \"%s\" %s",
+ escaped_device,
mapped_name))
{
g_dbus_method_invocation_return_error (invocation,
type);
goto out;
}
-
- g_free (escaped_label);
- escaped_label = g_shell_quote (label);
}
/* Build and run mkfs shell command */
- tmp = subst_str (fs_info->command_create_fs, "$DEVICE", udisks_block_get_device (block_to_mkfs));
- command = subst_str (tmp, "$LABEL", escaped_label);
+ tmp = subst_str_and_escape (fs_info->command_create_fs, "$DEVICE", udisks_block_get_device (block_to_mkfs));
+ command = subst_str_and_escape (tmp, "$LABEL", label != NULL ? label : "");
g_free (tmp);
if (!udisks_daemon_launch_spawned_job_sync (daemon,
object_to_mkfs,
udisks_block_complete_format (block, invocation);
out:
+ g_free (escaped_device);
g_free (mapped_name);
- g_free (escaped_label);
g_free (command);
g_free (encrypt_passphrase);
g_clear_object (&cleartext_object);
UDisksLinuxDrive *drive = UDISKS_LINUX_DRIVE (_drive);
UDisksLinuxDriveObject *object;
UDisksLinuxBlockObject *block_object = NULL;
- UDisksBlock *block;
- UDisksDaemon *daemon;
+ UDisksBlock *block = NULL;
+ UDisksDaemon *daemon = NULL;
const gchar *action_id;
- gchar *error_message;
- GError *error;
-
- daemon = NULL;
- block = NULL;
- error_message = NULL;
+ gchar *error_message = NULL;
+ GError *error = NULL;
+ gchar *escaped_device = NULL;
- error = NULL;
object = udisks_daemon_util_dup_object (drive, &error);
if (object == NULL)
{
invocation))
goto out;
+ escaped_device = g_strescape (udisks_block_get_device (block), NULL);
+
if (!udisks_daemon_launch_spawned_job_sync (daemon,
UDISKS_OBJECT (object),
NULL, /* GCancellable */
&error_message,
NULL, /* input_string */
"eject \"%s\"",
- udisks_block_get_device (block)))
+ escaped_device))
{
g_dbus_method_invocation_return_error (invocation,
UDISKS_ERROR,
udisks_drive_complete_eject (UDISKS_DRIVE (drive), invocation);
out:
+ g_free (escaped_device);
g_clear_object (&block_object);
g_free (error_message);
g_clear_object (&object);
const gchar *passphrase,
GVariant *options)
{
- UDisksObject *object;
+ UDisksObject *object = NULL;
UDisksBlock *block;
UDisksDaemon *daemon;
UDisksCleanup *cleanup;
- gchar *error_message;
- gchar *name;
- gchar *escaped_name;
- UDisksObject *cleartext_object;
+ gchar *error_message = NULL;
+ gchar *name = NULL;
+ gchar *escaped_name = NULL;
+ UDisksObject *cleartext_object = NULL;
UDisksBlock *cleartext_block;
- GUdevDevice *udev_cleartext_device;
- GError *error;
+ GUdevDevice *udev_cleartext_device = NULL;
+ GError *error = NULL;
uid_t caller_uid;
const gchar *action_id;
gboolean is_in_crypttab = FALSE;
gchar *crypttab_name = NULL;
gchar *crypttab_passphrase = NULL;
gchar *crypttab_options = NULL;
+ gchar *escaped_device = NULL;
- object = NULL;
- error_message = NULL;
- name = NULL;
- escaped_name = NULL;
- udev_cleartext_device = NULL;
- cleartext_object = NULL;
-
- error = NULL;
object = udisks_daemon_util_dup_object (encrypted, &error);
if (object == NULL)
{
passphrase = crypttab_passphrase;
}
+ escaped_device = g_strescape (udisks_block_get_device (block), NULL);
+
/* TODO: support a 'readonly' option */
if (!udisks_daemon_launch_spawned_job_sync (daemon,
object,
&error_message,
passphrase, /* input_string */
"cryptsetup luksOpen \"%s\" \"%s\"",
- udisks_block_get_device (block),
+ escaped_device,
escaped_name))
{
g_dbus_method_invocation_return_error (invocation,
g_dbus_object_get_object_path (G_DBUS_OBJECT (cleartext_object)));
out:
+ g_free (escaped_device);
g_free (crypttab_name);
g_free (crypttab_passphrase);
g_free (crypttab_options);
uid_t caller_uid;
const gchar *action_id;
gchar *passphrases = NULL;
- GError *error;
+ GError *error = NULL;
+ gchar *escaped_device = NULL;
- error = NULL;
object = udisks_daemon_util_dup_object (encrypted, &error);
if (object == NULL)
{
invocation))
goto out;
+ escaped_device = g_strescape (udisks_block_get_device (block), NULL);
+
passphrases = g_strdup_printf ("%s\n%s", passphrase, new_passphrase);
if (!udisks_daemon_launch_spawned_job_sync (daemon,
object,
&error_message,
passphrases, /* input_string */
"cryptsetup luksChangeKey \"%s\"",
- udisks_block_get_device (block)))
+ escaped_device))
{
g_dbus_method_invocation_return_error (invocation,
UDISKS_ERROR,
udisks_encrypted_complete_change_passphrase (encrypted, invocation);
out:
+ g_free (escaped_device);
g_free (passphrases);
g_free (error_message);
g_clear_object (&object);
return result;
}
+static gchar *
+subst_str_and_escape (const gchar *str,
+ const gchar *from,
+ const gchar *to)
+{
+ gchar *escaped;
+ gchar *quoted_and_escaped;
+ gchar *ret;
+ escaped = g_strescape (to, NULL);
+ quoted_and_escaped = g_strconcat ("\"", escaped, "\"", NULL);
+ ret = subst_str (str, from, quoted_and_escaped);
+ g_free (quoted_and_escaped);
+ g_free (escaped);
+ return ret;
+}
+
/* ---------------------------------------------------------------------------------------------------- */
/*
GError *error;
const gchar *action_id;
gboolean system_managed;
+ gchar *escaped_device = NULL;
object = NULL;
error_message = NULL;
escaped_fs_type_to_use = g_strescape (fs_type_to_use, NULL);
escaped_mount_options_to_use = g_strescape (mount_options_to_use, NULL);
escaped_mount_point_to_use = g_strescape (mount_point_to_use, NULL);
+ escaped_device = g_strescape (udisks_block_get_device (block), NULL);
/* run mount(8) */
if (!udisks_daemon_launch_spawned_job_sync (daemon,
"mount -t \"%s\" -o \"%s\" \"%s\" \"%s\"",
escaped_fs_type_to_use,
escaped_mount_options_to_use,
- udisks_block_get_device (block),
+ escaped_device,
escaped_mount_point_to_use))
{
/* ugh, something went wrong.. we need to clean up the created mount point */
udisks_filesystem_complete_mount (filesystem, invocation, mount_point_to_use);
out:
+ g_free (escaped_device);
g_free (error_message);
g_free (escaped_fs_type_to_use);
g_free (escaped_mount_options_to_use);
gboolean rc;
gboolean system_managed;
gboolean fstab_mounted;
+ gchar *escaped_device = NULL;
mount_point = NULL;
fstab_mount_options = NULL;
goto out;
}
+ escaped_device = g_strescape (udisks_block_get_device (block), NULL);
+
/* otherwise go ahead and unmount the filesystem */
if (mount_point != NULL)
{
NULL, /* input_string */
"umount %s \"%s\"",
opt_force ? "-l" : "",
- udisks_block_get_device (block));
+ escaped_device);
}
if (!rc)
udisks_filesystem_complete_unmount (filesystem, invocation);
out:
+ g_free (escaped_device);
g_free (error_message);
g_free (escaped_mount_point);
g_free (mount_point);
const gchar *probed_fs_type;
const FSInfo *fs_info;
UDisksBaseJob *job;
- gchar *escaped_label;
const gchar *action_id;
gchar *command;
gchar *tmp;
object = NULL;
daemon = NULL;
- escaped_label = NULL;
command = NULL;
error = NULL;
invocation))
goto out;
- escaped_label = g_shell_quote (label);
-
if (fs_info->command_clear_label != NULL && strlen (label) == 0)
{
- command = subst_str (fs_info->command_clear_label, "$DEVICE", udisks_block_get_device (block));
+ command = subst_str_and_escape (fs_info->command_clear_label, "$DEVICE", udisks_block_get_device (block));
}
else
{
- tmp = subst_str (fs_info->command_change_label, "$DEVICE", udisks_block_get_device (block));
- command = subst_str (tmp, "$LABEL", escaped_label);
+ tmp = subst_str_and_escape (fs_info->command_change_label, "$DEVICE", udisks_block_get_device (block));
+ command = subst_str_and_escape (tmp, "$LABEL", label);
g_free (tmp);
}
invocation);
out:
- g_free (escaped_label);
g_free (command);
g_clear_object (&object);
return TRUE; /* returning TRUE means that we handled the method invocation */
UDisksBlock *block;
UDisksBaseJob *job;
GError *error;
+ gchar *escaped_device = NULL;
error = NULL;
object = udisks_daemon_util_dup_object (swapspace, &error);
invocation))
goto out;
+ escaped_device = g_strescape (udisks_block_get_device (block), NULL);
+
job = udisks_daemon_launch_spawned_job (daemon,
object,
NULL, /* cancellable */
0, /* uid_t run_as_uid */
0, /* uid_t run_as_euid */
NULL, /* input_string */
- "swapon %s",
- udisks_block_get_device (block));
+ "swapon \"%s\"",
+ escaped_device);
g_signal_connect (job,
"completed",
G_CALLBACK (swapspace_start_on_job_completed),
invocation);
out:
+ g_free (escaped_device);
g_clear_object (&object);
return TRUE;
}
UDisksDaemon *daemon;
UDisksBlock *block;
UDisksBaseJob *job;
+ gchar *escaped_device = NULL;
object = UDISKS_OBJECT (g_dbus_interface_get_object (G_DBUS_INTERFACE (swapspace)));
daemon = udisks_linux_block_object_get_daemon (UDISKS_LINUX_BLOCK_OBJECT (object));
invocation))
goto out;
+ escaped_device = g_strescape (udisks_block_get_device (block), NULL);
+
job = udisks_daemon_launch_spawned_job (daemon,
object,
NULL, /* cancellable */
0, /* uid_t run_as_uid */
0, /* uid_t run_as_euid */
NULL, /* input_string */
- "swapoff %s",
- udisks_block_get_device (block));
+ "swapoff \"%s\"",
+ escaped_device);
g_signal_connect (job,
"completed",
G_CALLBACK (swapspace_stop_on_job_completed),
invocation);
out:
+ g_free (escaped_device);
return TRUE;
}