version 1.173, 2023/09/08 05:56:13 |
version 1.174, 2023/09/08 06:10:02 |
|
|
SFTP_DIRENT **dir_entries; |
SFTP_DIRENT **dir_entries; |
char *filename, *new_from_path = NULL, *new_to_path = NULL; |
char *filename, *new_from_path = NULL, *new_to_path = NULL; |
mode_t mode = 0777; |
mode_t mode = 0777; |
Attrib curdir, ldirattrib, newdir; |
Attrib *a, curdir, ldirattrib, newdir, lsym; |
|
|
debug2_f("crossload dir src \"%s\" to dst \"%s\"", from_path, to_path); |
debug2_f("crossload dir src \"%s\" to dst \"%s\"", from_path, to_path); |
|
|
|
|
new_from_path = sftp_path_append(from_path, filename); |
new_from_path = sftp_path_append(from_path, filename); |
new_to_path = sftp_path_append(to_path, filename); |
new_to_path = sftp_path_append(to_path, filename); |
|
|
if (S_ISDIR(dir_entries[i]->a.perm)) { |
a = &dir_entries[i]->a; |
|
if (S_ISLNK(a->perm)) { |
|
if (!follow_link_flag) { |
|
logit("%s: not a regular file", filename); |
|
continue; |
|
} |
|
/* Replace the stat contents with the symlink target */ |
|
if (sftp_stat(from, new_from_path, 1, &lsym) != 0) { |
|
logit("remote stat \"%s\" failed", |
|
new_from_path); |
|
ret = -1; |
|
continue; |
|
} |
|
a = &lsym; |
|
} |
|
if (S_ISDIR(a->perm)) { |
if (strcmp(filename, ".") == 0 || |
if (strcmp(filename, ".") == 0 || |
strcmp(filename, "..") == 0) |
strcmp(filename, "..") == 0) |
continue; |
continue; |
if (crossload_dir_internal(from, to, |
if (crossload_dir_internal(from, to, |
new_from_path, new_to_path, |
new_from_path, new_to_path, |
depth + 1, &(dir_entries[i]->a), preserve_flag, |
depth + 1, a, preserve_flag, |
print_flag, follow_link_flag) == -1) |
print_flag, follow_link_flag) == -1) |
ret = -1; |
ret = -1; |
} else if (S_ISREG(dir_entries[i]->a.perm) || |
} else if (S_ISREG(a->perm)) { |
(follow_link_flag && S_ISLNK(dir_entries[i]->a.perm))) { |
if (sftp_crossload(from, to, new_from_path, |
/* |
new_to_path, a, preserve_flag) == -1) { |
* If this is a symlink then don't send the link's |
|
* Attrib. sftp_download() will do a FXP_STAT operation |
|
* and get the link target's attributes. |
|
*/ |
|
if (sftp_crossload(from, to, new_from_path, new_to_path, |
|
S_ISLNK(dir_entries[i]->a.perm) ? NULL : |
|
&(dir_entries[i]->a), preserve_flag) == -1) { |
|
error("crossload \"%s\" to \"%s\" failed", |
error("crossload \"%s\" to \"%s\" failed", |
new_from_path, new_to_path); |
new_from_path, new_to_path); |
ret = -1; |
ret = -1; |