X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=oldrecover-src%2Fset_commands.c;h=812e181c003742b5716328ca5722557c3e090cc7;hb=d3b2175e084f88c8736ad7073eacbf4670147aec;hp=48e655d602e5792ffa1a2d62b860a808c201f2d6;hpb=34197d9f46a5f4e944378cbb65fca32ee0eec7b9;p=debian%2Famanda diff --git a/oldrecover-src/set_commands.c b/oldrecover-src/set_commands.c index 48e655d..812e181 100644 --- a/oldrecover-src/set_commands.c +++ b/oldrecover-src/set_commands.c @@ -30,6 +30,7 @@ */ #include "amanda.h" +#include "util.h" #include "amrecover.h" #ifdef SAMBA_CLIENT @@ -81,6 +82,7 @@ set_host( struct hostent *hp; char **hostp; int found_host = 0; + char *uqhost = unquote_string(host); if (is_extract_list_nonempty()) { @@ -88,7 +90,7 @@ set_host( return; } - cmd = stralloc2("HOST ", host); + cmd = stralloc2("HOST ", uqhost); if (converse(cmd) == -1) exit(1); if (server_happy()) @@ -101,7 +103,7 @@ set_host( * Try converting the given host to a fully qualified name * and then try each of the aliases. */ - if ((hp = gethostbyname(host)) != NULL) { + if ((hp = gethostbyname(uqhost)) != NULL) { host = hp->h_name; printf("Trying host %s ...\n", host); cmd = newstralloc2(cmd, "HOST ", host); @@ -137,6 +139,7 @@ set_host( clear_dir_list(); } amfree(cmd); + amfree(uqhost); } @@ -157,6 +160,8 @@ set_disk( char * mtpt) { char *cmd = NULL; + char *uqdsk; + char *uqmtpt = NULL; if (is_extract_list_nonempty()) { @@ -165,14 +170,18 @@ set_disk( } /* if mount point specified, check it is valid */ - if ((mtpt != NULL) && (*mtpt != '/')) - { - printf("Mount point \"%s\" invalid - must start with /\n", mtpt); - return; + if (mtpt != NULL) { + uqmtpt = unquote_string(mtpt); + if (*mtpt != '/') { + printf("Mount point \"%s\" invalid - must start with /\n", uqmtpt); + amfree(uqmtpt); + return; + } } clear_dir_list(); - cmd = stralloc2("DISK ", dsk); + uqdsk = unquote_string(dsk); + cmd = stralloc2("DISK ", uqdsk); if (converse(cmd) == -1) exit(1); amfree(cmd); @@ -180,14 +189,14 @@ set_disk( if (!server_happy()) return; - disk_name = newstralloc(disk_name, dsk); + disk_name = newstralloc(disk_name, uqdsk); if (mtpt == NULL) { /* mount point not specified */ - if (*dsk == '/') + if (*uqdsk == '/') { /* disk specified by mount point, hence use it */ - mount_point = newstralloc(mount_point, dsk); + mount_point = newstralloc(mount_point, uqdsk); } else { @@ -198,7 +207,7 @@ set_disk( else { /* mount point specified */ - mount_point = newstralloc(mount_point, mtpt); + mount_point = newstralloc(mount_point, uqmtpt); } /* set the working directory to the mount point */ @@ -220,6 +229,8 @@ set_disk( disk_path = newstralloc(disk_path, "/"); /* fake it */ clear_dir_list(); } + amfree(uqmtpt); + amfree(uqdsk); } void @@ -227,9 +238,12 @@ list_disk( char * amdevice) { char *cmd = NULL; + char *uqamdevice; if(amdevice) { - cmd = stralloc2("LISTDISK ", amdevice); + uqamdevice = unquote_string(amdevice); + cmd = stralloc2("LISTDISK ", uqamdevice); + amfree(uqamdevice); if (converse(cmd) == -1) exit(1); amfree(cmd); @@ -242,6 +256,17 @@ list_disk( } } +void +local_cd( + char *dir) +{ + char *uqdir = unquote_string(dir); + if (chdir(uqdir) == -1) { + perror(uqdir); + } + amfree(uqdir); +} + void cd_glob( char * glob) @@ -249,6 +274,7 @@ cd_glob( char *regex; char *regex_path; char *s; + char *uqglob; char *path_on_disk = NULL; @@ -257,8 +283,9 @@ cd_glob( return; } - regex = glob_to_regex(glob); - dbprintf(("cd_glob (%s) -> %s\n", glob, regex)); + uqglob = unquote_string(glob); + regex = glob_to_regex(uqglob); + dbprintf(("cd_glob (%s) -> %s\n", uqglob, regex)); if ((s = validate_regexp(regex)) != NULL) { printf("\"%s\" is not a valid shell wildcard pattern: ", glob); puts(s); @@ -287,10 +314,11 @@ cd_glob( amfree(clean_disk_path); } - cd_dir(path_on_disk, glob); + cd_dir(path_on_disk, uqglob); amfree(regex_path); amfree(path_on_disk); + amfree(uqglob); } void @@ -298,6 +326,7 @@ cd_regex( char * regex) { char *s; + char *uqregex; char *path_on_disk = NULL; @@ -306,8 +335,10 @@ cd_regex( return; } - if ((s = validate_regexp(regex)) != NULL) { - printf("\"%s\" is not a valid regular expression: ", regex); + uqregex = unquote_string(regex); + if ((s = validate_regexp(uqregex)) != NULL) { + printf("\"%s\" is not a valid regular expression: ", uqregex); + amfree(uqregex); puts(s); return; } @@ -321,9 +352,10 @@ cd_regex( amfree(clean_disk_path); } - cd_dir(path_on_disk, regex); + cd_dir(path_on_disk, uqregex); amfree(path_on_disk); + amfree(uqregex); } void @@ -530,21 +562,22 @@ void set_tape( char * tape) { - char *tapedev = strchr(tape, ':'); + char *uqtape = unquote_string(tape); + char *tapedev = strchr(uqtape, ':'); if (tapedev) { - if (tapedev != tape) { + if (tapedev != uqtape) { if((strchr(tapedev+1, ':') == NULL) && - (strncmp(tape, "null:", 5) == 0 || - strncmp(tape, "rait:", 5) == 0 || - strncmp(tape, "file:", 5) == 0 || - strncmp(tape, "tape:", 5) == 0)) { - tapedev = tape; + (strncmp(uqtape, "null:", 5) == 0 || + strncmp(uqtape, "rait:", 5) == 0 || + strncmp(uqtape, "file:", 5) == 0 || + strncmp(uqtape, "tape:", 5) == 0)) { + tapedev = uqtape; } else { *tapedev = '\0'; - tape_server_name = newstralloc(tape_server_name, tape); + tape_server_name = newstralloc(tape_server_name, uqtape); ++tapedev; } } else { /* reset server_name if start with : */ @@ -552,7 +585,7 @@ set_tape( ++tapedev; } } else - tapedev = tape; + tapedev = uqtape; if (tapedev[0]) {