qvm-copy-to-vm: implement --ignore-symlinks option
Can be useful when copying to VM which doesn't support symlinks (or user doesn't have privilege to create it).
This commit is contained in:
parent
099971dcd5
commit
3cfd7f57b4
@ -18,6 +18,8 @@ enum {
|
|||||||
PROGRESS_FLAG_DONE
|
PROGRESS_FLAG_DONE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int ignore_symlinks = 0;
|
||||||
|
|
||||||
unsigned long crc32_sum;
|
unsigned long crc32_sum;
|
||||||
int write_all_with_crc(int fd, void *buf, int size)
|
int write_all_with_crc(int fd, void *buf, int size)
|
||||||
{
|
{
|
||||||
@ -143,7 +145,7 @@ int single_file_processor(char *filename, struct stat *st)
|
|||||||
hdr.filelen = 0;
|
hdr.filelen = 0;
|
||||||
write_headers(&hdr, filename);
|
write_headers(&hdr, filename);
|
||||||
}
|
}
|
||||||
if (S_ISLNK(mode)) {
|
if (S_ISLNK(mode) && !ignore_symlinks) {
|
||||||
char name[st->st_size + 1];
|
char name[st->st_size + 1];
|
||||||
if (readlink(filename, name, sizeof(name)) != st->st_size)
|
if (readlink(filename, name, sizeof(name)) != st->st_size)
|
||||||
gui_fatal("readlink %s", filename);
|
gui_fatal("readlink %s", filename);
|
||||||
@ -227,6 +229,11 @@ int main(int argc, char **argv)
|
|||||||
crc32_sum = 0;
|
crc32_sum = 0;
|
||||||
cwd = getcwd(NULL, 0);
|
cwd = getcwd(NULL, 0);
|
||||||
for (i = 1; i < argc; i++) {
|
for (i = 1; i < argc; i++) {
|
||||||
|
if (strcmp(argv[i], "--ignore-symlinks")==0) {
|
||||||
|
ignore_symlinks = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
entry = get_abs_path(cwd, argv[i]);
|
entry = get_abs_path(cwd, argv[i]);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
@ -37,7 +37,7 @@ VM="$1"
|
|||||||
shift
|
shift
|
||||||
|
|
||||||
if [ $PROGRESS_TYPE = console ] ; then
|
if [ $PROGRESS_TYPE = console ] ; then
|
||||||
export FILECOPY_TOTAL_SIZE=$(du --apparent-size -c "$@" | tail -1 | cut -f 1)
|
export FILECOPY_TOTAL_SIZE=$(du --apparent-size -c -- "$@" 2> /dev/null | tail -1 | cut -f 1)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exec /usr/lib/qubes/qrexec-client-vm $VM qubes.Filecopy /usr/lib/qubes/qfile-agent "$@"
|
exec /usr/lib/qubes/qrexec-client-vm $VM qubes.Filecopy /usr/lib/qubes/qfile-agent "$@"
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
VM=$(qvm-mru-entry --title="File Copy" --text="Enter the destination domain name:" --mrufile "qvm-mru-filecopy")
|
VM=$(qvm-mru-entry --title="File Copy" --text="Enter the destination domain name:" --mrufile "qvm-mru-filecopy")
|
||||||
if [ X$VM = X ] ; then exit 0 ; fi
|
if [ X$VM = X ] ; then exit 0 ; fi
|
||||||
|
|
||||||
SIZE=$(du --apparent-size -c "$@" | tail -1 | cut -f 1)
|
SIZE=$(du --apparent-size -c -- "$@" 2>/dev/null | tail -1 | cut -f 1)
|
||||||
|
|
||||||
export PROGRESS_TYPE=gui
|
export PROGRESS_TYPE=gui
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
VM=$(kdialog -inputbox "Enter the VM name to send files to:")
|
VM=$(kdialog -inputbox "Enter the VM name to send files to:")
|
||||||
if [ X$VM = X ] ; then exit 0 ; fi
|
if [ X$VM = X ] ; then exit 0 ; fi
|
||||||
|
|
||||||
SIZE=$(du --apparent-size -c "$@" | tail -1 | cut -f 1)
|
SIZE=$(du --apparent-size -c -- "$@" 2> /dev/null | tail -1 | cut -f 1)
|
||||||
REF=$(kdialog --progressbar "Copy progress")
|
REF=$(kdialog --progressbar "Copy progress")
|
||||||
qdbus $REF org.freedesktop.DBus.Properties.Set "" maximum $SIZE
|
qdbus $REF org.freedesktop.DBus.Properties.Set "" maximum $SIZE
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user