diff options
Diffstat (limited to 'cmds-send.c')
-rw-r--r-- | cmds-send.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/cmds-send.c b/cmds-send.c index fbb2f804..7aa4b36d 100644 --- a/cmds-send.c +++ b/cmds-send.c @@ -571,7 +571,20 @@ int cmd_send(int argc, char **argv) usage(cmd_send_usage); if (outname[0]) { - send.dump_fd = creat(outname, 0600); + int tmpfd; + + /* + * Try to use an existing file first. Even if send runs as + * root, it might not have permissions to create file (eg. on a + * NFS) but it should still be able to use a pre-created file. + */ + tmpfd = open(outname, O_WRONLY | O_TRUNC); + if (tmpfd < 0) { + if (errno == ENOENT) + tmpfd = open(outname, + O_CREAT | O_WRONLY | O_TRUNC, 0600); + } + send.dump_fd = tmpfd; if (send.dump_fd == -1) { ret = -errno; error("cannot create '%s': %s", outname, strerror(-ret)); |