Simplify MD/swap signature detection in pvcreate and allow aborting.
Remove assumption that --yes must be used only in --force mode.
Fix file descriptor leak in swap signature detection error path.
+ Detect and allow abort in pvcreate if LUKS signature is detected.
Version 2.02.73 - 18th August 2010
==================================
--- /dev/null
+/*
+ * Copyright (C) 2010 Red Hat, Inc. All rights reserved.
+ *
+ * This file is part of LVM2.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License v.2.1.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "lib.h"
+#include "metadata.h"
+
+#define LUKS_SIGNATURE "LUKS\xba\xbe"
+#define LUKS_SIGNATURE_SIZE 6
+
+int dev_is_luks(struct device *dev, uint64_t *signature)
+{
+ char buf[LUKS_SIGNATURE_SIZE];
+ int ret = -1;
+
+ if (!dev_open(dev)) {
+ stack;
+ return -1;
+ }
+
+ *signature = 0;
+
+ if (!dev_read(dev, 0, LUKS_SIGNATURE_SIZE, buf))
+ goto_out;
+
+ ret = memcmp(buf, LUKS_SIGNATURE, LUKS_SIGNATURE_SIZE) ? 0 : 1;
+
+out:
+ if (!dev_close(dev))
+ stack;
+
+ return ret;
+}
/* Does device contain md superblock? If so, where? */
int dev_is_md(struct device *dev, uint64_t *sb);
int dev_is_swap(struct device *dev, uint64_t *signature);
+int dev_is_luks(struct device *dev, uint64_t *signature);
unsigned long dev_md_stripe_width(const char *sysfs_dir, struct device *dev);
int is_partitioned_dev(struct device *dev);
if (!_wipe_sb(dev, "swap signature", name, 10, pp, dev_is_swap))
return 0;
+ if (!_wipe_sb(dev, "LUKS signature", name, 8, pp, dev_is_luks))
+ return 0;
+
if (sigint_caught())
return 0;