]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Reject zfs send -RI with nonexistent fromsnap
authorRich Ercolani <214141+rincebrain@users.noreply.github.com>
Mon, 4 Oct 2021 17:17:30 +0000 (13:17 -0400)
committerGitHub <noreply@github.com>
Mon, 4 Oct 2021 17:17:30 +0000 (10:17 -0700)
Right now, zfs send -I dataset@nonexistent dataset@existent fails, but
zfs send -RI dataset@nonexistent dataset@existent does not.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Rich Ercolani <rincebrain@gmail.com>
Closes #12574
Closes #12575

lib/libzfs/libzfs_sendrecv.c

index bee0aff4b49c5994d852a0465fe7aa8c67c54e0a..fb15f871a46a3a703a37c7c4dd0b902e15704a9a 100644 (file)
@@ -2144,6 +2144,23 @@ zfs_send(zfs_handle_t *zhp, const char *fromsnap, const char *tosnap,
                return (zfs_error(zhp->zfs_hdl, EZFS_NOENT, errbuf));
        }
 
+       if (fromsnap) {
+               char full_fromsnap_name[ZFS_MAX_DATASET_NAME_LEN];
+               if (snprintf(full_fromsnap_name, sizeof (full_fromsnap_name),
+                   "%s@%s", zhp->zfs_name, fromsnap) >=
+                   sizeof (full_fromsnap_name)) {
+                       err = EINVAL;
+                       goto stderr_out;
+               }
+               zfs_handle_t *fromsnapn = zfs_open(zhp->zfs_hdl,
+                   full_fromsnap_name, ZFS_TYPE_SNAPSHOT);
+               if (fromsnapn == NULL) {
+                       err = -1;
+                       goto err_out;
+               }
+               zfs_close(fromsnapn);
+       }
+
        if (flags->replicate || flags->doall || flags->props ||
            flags->holds || flags->backup) {
                char full_tosnap_name[ZFS_MAX_DATASET_NAME_LEN];