uint64 offset;
WFile *file;
int ret, shown_err = FALSE;
+ struct fxp_attrs attrs;
/*
* In recursive mode, see if we're dealing with a directory.
* subsequent FXP_OPEN will return a usable error message.)
*/
if (recurse) {
- struct fxp_attrs attrs;
int result;
sftp_register(req = fxp_stat_send(fname));
}
}
- sftp_register(req = fxp_open_send(fname, SSH_FXF_READ));
+ sftp_register(req = fxp_stat_send(fname));
+ rreq = sftp_find_request(pktin = sftp_recv());
+ assert(rreq == req);
+ if (!fxp_stat_recv(pktin, rreq, &attrs))
+ attrs.flags = 0;
+
+ sftp_register(req = fxp_open_send(fname, SSH_FXF_READ, NULL));
rreq = sftp_find_request(pktin = sftp_recv());
assert(rreq == req);
fh = fxp_open_recv(pktin, rreq);
if (restart) {
file = open_existing_wfile(outfname, NULL);
} else {
- file = open_new_file(outfname);
+ file = open_new_file(outfname, GET_PERMISSIONS(attrs));
}
if (!file) {
uint64 offset;
RFile *file;
int ret, err, eof;
+ struct fxp_attrs attrs;
+ long permissions;
/*
* In recursive mode, see if we're dealing with a directory.
* subsequent fopen will return an error message.)
*/
if (recurse && file_type(fname) == FILE_TYPE_DIRECTORY) {
- struct fxp_attrs attrs;
int result;
int nnames, namesize;
char *name, **ournames;
return 1;
}
- file = open_existing_file(fname, NULL, NULL, NULL);
+ file = open_existing_file(fname, NULL, NULL, NULL, &permissions);
if (!file) {
printf("local: unable to open %s\n", fname);
return 0;
}
+ attrs.flags = 0;
+ PUT_PERMISSIONS(attrs, permissions);
if (restart) {
- sftp_register(req = fxp_open_send(outfname, SSH_FXF_WRITE));
+ sftp_register(req = fxp_open_send(outfname, SSH_FXF_WRITE, &attrs));
} else {
sftp_register(req = fxp_open_send(outfname, SSH_FXF_WRITE |
- SSH_FXF_CREAT | SSH_FXF_TRUNC));
+ SSH_FXF_CREAT | SSH_FXF_TRUNC,
+ &attrs));
}
rreq = sftp_find_request(pktin = sftp_recv());
assert(rreq == req);