diff options
Diffstat (limited to 'extras')
-rw-r--r-- | extras/volume_id/Makefile.am | 27 | ||||
-rw-r--r-- | extras/volume_id/README | 66 | ||||
-rw-r--r-- | extras/volume_id/vol_id.c | 328 | ||||
-rw-r--r-- | extras/volume_id/vol_id.xml | 151 |
4 files changed, 0 insertions, 572 deletions
diff --git a/extras/volume_id/Makefile.am b/extras/volume_id/Makefile.am index 4a8ba94654..e4d2e7f1f1 100644 --- a/extras/volume_id/Makefile.am +++ b/extras/volume_id/Makefile.am @@ -2,30 +2,3 @@ include $(top_srcdir)/Makefile.am.inc SUBDIRS = \ lib - -udevhomedir = $(udev_prefix)/lib/udev -udevhome_PROGRAMS = \ - vol_id - -vol_id_SOURCES = \ - vol_id.c \ - ../../udev/lib/libudev.h \ - ../../udev/lib/libudev.c \ - ../../udev/lib/libudev-list.c \ - ../../udev/lib/libudev-util.c - -vol_id_LDADD = \ - lib/libvolume_id.la - -dist_man_MANS = \ - vol_id.8 - -EXTRA_DIST = \ - vol_id.xml - -%.7 %.8 : %.xml - $(XSLTPROC) -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< - -MAINTAINERCLEANFILES= \ - $(dist_man_MANS) - diff --git a/extras/volume_id/README b/extras/volume_id/README deleted file mode 100644 index 9459c880f8..0000000000 --- a/extras/volume_id/README +++ /dev/null @@ -1,66 +0,0 @@ -vol_id - probe filesystem and read label and uuid - -vol_id will only return with a non-zero exit code if the string asked for, -is not empty. All trailing whitespace will be removed, spaces replaced by -underscore and slashes ignored. -Unmangled values are available in the --export mode as hex-encoded strings -in *_ENC= keys. - - $ extras/volume_id/vol_id --export /dev/sda6 - ID_FS_USAGE=filesystem - ID_FS_TYPE=ext3 - ID_FS_VERSION=1.0 - ID_FS_UUID=3e999973-00c9-4917-9442-b7633bd95b9e - ID_FS_UUID_ENC=3e999973-00c9-4917-9442-b7633bd95b9e - ID_FS_LABEL=devel - ID_FS_LABEL_ENC=devel - - $ extras/volume_id/vol_id --label /dev/sda6 - devel - - $ extras/volume_id/vol_id --type /dev/sda6 - ext3 - - -fstype probe label uuid version --------------------------------------------------- -linux swap * * * * -btrfs * * * - -ext * * * * -reiserfs jr/3.5/3.6/4 * * * * -fat (12, 16, 32) * * * * -ntfs * * * * -jfs * * * - -xfs * * * - -hfs (plus, wrapped) * * * - -udf * * - - -iso9660 * * - - -ufs * - - - -cramfs * * - - -sysv * * - * -luks * - * - -hpfs * * - - -romfs * * - - -squashfs * - - - -minix * - - * -ocfs (1, 2) * * * * -vxfs * - - * -nss (netware) * - * * -gfs, gfs2 * * * - -oracleasm * * - - - -Raid members are detected to prevent the probing for a filesystem ------------------------------------------------------------------ -linux raid (md) * * * * -LVM 1 * - - - -LVM 2 * - - * -ddf * - * * -highpoint * - - - -isw_raid * - - - -lsi_raid * - - - -nvidia_raid * - - - -promise_raid * - - - -silicon_raid * - - - -via_raid * - - - -jmicron * - - - -adaptec * - - - diff --git a/extras/volume_id/vol_id.c b/extras/volume_id/vol_id.c deleted file mode 100644 index 3e44c3b069..0000000000 --- a/extras/volume_id/vol_id.c +++ /dev/null @@ -1,328 +0,0 @@ -/* - * vol_id - read filesystem label and uuid - * - * Copyright (C) 2005-2008 Kay Sievers <kay.sievers@vrfy.org> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE 1 -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <string.h> -#include <ctype.h> -#include <errno.h> -#include <pwd.h> -#include <grp.h> -#include <getopt.h> -#include <fcntl.h> -#include <sys/stat.h> -#include <inttypes.h> -#include <sys/ioctl.h> - -#include "../../udev/udev.h" -#include "lib/libvolume_id.h" - -#define BLKGETSIZE64 _IOR(0x12,114,size_t) - -static int debug; -struct udev *udev_ctx; - -static void log_fn(struct udev *udev, int priority, - const char *file, int line, const char *fn, - const char *format, va_list args) -{ - if (debug) { - fprintf(stderr, "%s: ", fn != NULL ? fn : file); - vfprintf(stderr, format, args); - } else { - vsyslog(priority, format, args); - } -} - -static void vid_log(int priority, const char *file, int line, const char *format, ...) -{ - va_list args; - - if (priority > udev_get_log_priority(udev_ctx)) - return; - va_start(args, format); - log_fn(udev_ctx, priority, file, line, NULL, format, args); - va_end(args); - return; -} - -static int all_probers(volume_id_probe_fn_t probe_fn, - struct volume_id *id, uint64_t off, uint64_t size, - void *data) -{ - const char *type; - - if (probe_fn(id, off, size) == 0) - if (volume_id_get_type(id, &type)) - printf("%s\n", type); - - return 0; -} - -int main(int argc, char *argv[]) -{ - static const struct option options[] = { - { "label", no_argument, NULL, 'l' }, - { "label-raw", no_argument, NULL, 'L' }, - { "uuid", no_argument, NULL, 'u' }, - { "type", no_argument, NULL, 't' }, - { "export", no_argument, NULL, 'x' }, - { "skip-raid", no_argument, NULL, 's' }, - { "size", required_argument, NULL, 'S' }, - { "probe-all", no_argument, NULL, 'a' }, - { "offset", optional_argument, NULL, 'o' }, - { "debug", no_argument, NULL, 'd' }, - { "help", no_argument, NULL, 'h' }, - {} - }; - - enum print_type { - PRINT_EXPORT, - PRINT_TYPE, - PRINT_LABEL, - PRINT_UUID, - PRINT_LABEL_RAW, - } print = PRINT_EXPORT; - - struct volume_id *vid = NULL; - char label_safe[256]; - char label_enc[256]; - char uuid_safe[256]; - char uuid_enc[256]; - char uuid_sub_enc[256]; - char type_enc[256]; - char type_version_enc[256]; - uint64_t size = 0; - int skip_raid = 0; - int probe_all = 0; - uint64_t offset = 0; - const char *node; - int fd; - const char *label, *uuid, *uuid_sub, *type, *type_version, *usage; - int retval; - int rc = 0; - - udev_ctx = udev_new(); - if (udev_ctx == NULL) - goto exit; - logging_init("vol_id"); - udev_set_log_fn(udev_ctx, log_fn); - - /* hook in our debug into libvolume_id */ - volume_id_log_fn = vid_log; - - while (1) { - int option; - - option = getopt_long(argc, argv, "lLutxsS:aodh", options, NULL); - if (option == -1) - break; - - switch (option) { - case 'd': - debug = 1; - if (udev_get_log_priority(udev_ctx) < LOG_INFO) - udev_set_log_priority(udev_ctx, LOG_INFO); - break; - case 'l': - print = PRINT_LABEL; - break; - case 'L': - print = PRINT_LABEL_RAW; - break; - case 'u': - print = PRINT_UUID; - break; - case 't': - print = PRINT_TYPE; - break; - case 'x': - print = PRINT_EXPORT; - break; - case 's': - skip_raid = 1; - break; - case 'a': - probe_all = 1; - break; - case 'S': - if (optarg[0] != '\0') - size = strtoull(optarg, NULL, 0); - break; - case 'o': - if (optarg[0] != '\0') - offset = strtoull(optarg, NULL, 0); - break; - case 'h': - printf("Usage: vol_id [options] <device>\n" - " --export export key/value pairs\n" - " --type filesystem type\n" - " --label filesystem label\n" - " --label-raw raw label\n" - " --uuid filesystem uuid\n" - " --skip-raid don't probe for raid\n" - " --probe-all find possibly conflicting signatures\n" - " --offset=<bytes> probe at the given offset\n" - " --size=<bytes> overwrite device size\n" - " --debug print debug output to stderr\n" - " --help\n\n"); - goto exit; - default: - retval = 1; - goto exit; - } - } - - node = argv[optind]; - if (!node) { - err(udev_ctx, "no device\n"); - fprintf(stderr, "no device\n"); - rc = 1; - goto exit; - } - - fd = open(node, O_RDONLY); - if (fd < 0) { - fprintf(stderr, "%s: error opening volume\n", node); - rc = 2; - goto exit; - } - - vid = volume_id_open_fd(fd); - if (vid == NULL) { - rc = 2; - goto exit; - } - - if (size == 0) { - if (ioctl(fd, BLKGETSIZE64, &size) == 0) { - info(udev_ctx, "BLKGETSIZE64=%" PRIu64 " (%" PRIu64 "GB)\n", size, size >> 30); - } else { - struct stat statbuf; - - if (fstat(fd, &statbuf) == 0 && S_ISREG(statbuf.st_mode)) - size = statbuf.st_size; - else - size = 0; - info(udev_ctx, "stat=%" PRIu64 " (%" PRIu64 "GB)\n", size, size >> 30); - } - } - - /* try to drop all privileges before reading disk content */ - if (getuid() == 0) { - struct passwd *pw; - - pw = getpwnam("nobody"); - if (pw != NULL && pw->pw_uid > 0 && pw->pw_gid > 0) { - if (setgroups(0, NULL) != 0 || - setgid(pw->pw_gid) != 0 || - setuid(pw->pw_uid) != 0) - info(udev_ctx, "unable to drop privileges: %s\n\n", strerror(errno)); - } - } - - if (probe_all) { - volume_id_all_probers(all_probers, vid, offset, size, NULL); - goto exit; - } - - if (skip_raid) - retval = volume_id_probe_filesystem(vid, offset, size); - else - retval = volume_id_probe_all(vid, offset, size); - if (retval != 0) { - fprintf(stderr, "unknown or non-unique volume type " - "(--probe-all lists possibly conflicting types)\n"); - rc = 4; - goto exit; - } - - if (!volume_id_get_label(vid, &label) || - !volume_id_get_usage(vid, &usage) || - !volume_id_get_type(vid, &type) || - !volume_id_get_type_version(vid, &type_version) || - !volume_id_get_uuid(vid, &uuid) || - !volume_id_get_uuid_sub(vid, &uuid_sub)) { - rc = 4; - goto exit; - } - - udev_util_replace_whitespace(label, label_safe, sizeof(label_safe)); - udev_util_replace_chars(label_safe, UDEV_ALLOWED_CHARS_INPUT); - volume_id_encode_string(label, label_enc, sizeof(label_enc)); - - udev_util_replace_whitespace(uuid, uuid_safe, sizeof(uuid_safe)); - udev_util_replace_chars(uuid_safe, UDEV_ALLOWED_CHARS_INPUT); - volume_id_encode_string(uuid, uuid_enc, sizeof(uuid_enc)); - - volume_id_encode_string(uuid_sub, uuid_sub_enc, sizeof(uuid_sub_enc)); - - volume_id_encode_string(type, type_enc, sizeof(type_enc)); - volume_id_encode_string(type_version, type_version_enc, sizeof(type_version_enc)); - - switch (print) { - case PRINT_EXPORT: - printf("ID_FS_USAGE=%s\n", usage); - printf("ID_FS_TYPE=%s\n", type_enc); - printf("ID_FS_VERSION=%s\n", type_version_enc); - printf("ID_FS_UUID=%s\n", uuid_safe); - printf("ID_FS_UUID_ENC=%s\n", uuid_enc); - if (uuid_sub_enc[0] != '\0') - printf("ID_FS_UUID_SUB_ENC=%s\n", uuid_sub_enc); - printf("ID_FS_LABEL=%s\n", label_safe); - printf("ID_FS_LABEL_ENC=%s\n", label_enc); - break; - case PRINT_TYPE: - printf("%s\n", type); - break; - case PRINT_LABEL: - if (label_safe[0] == '\0' || strcmp(usage, "raid") == 0) { - rc = 3; - goto exit; - } - printf("%s\n", label_safe); - break; - case PRINT_UUID: - if (uuid_enc[0] == '\0' || strcmp(usage, "raid") == 0) { - rc = 4; - goto exit; - } - printf("%s\n", uuid_enc); - break; - case PRINT_LABEL_RAW: - if (label[0] == '\0' || strcmp(usage, "raid") == 0) { - rc = 3; - goto exit; - } - printf("%s\n", label); - break; - } - -exit: - if (vid != NULL) - volume_id_close(vid); - udev_unref(udev_ctx); - logging_close(); - return rc; -} diff --git a/extras/volume_id/vol_id.xml b/extras/volume_id/vol_id.xml deleted file mode 100644 index 475e9bc389..0000000000 --- a/extras/volume_id/vol_id.xml +++ /dev/null @@ -1,151 +0,0 @@ -<?xml version='1.0'?> -<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" - "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> - -<article> - <section> - <title>vol_id</title> - <refentry> - <refentryinfo> - <title>vol_id</title> - <date>March 2006</date> - <productname>volume_id</productname> - </refentryinfo> - - <refmeta> - <refentrytitle>vol_id</refentrytitle> - <manvolnum>8</manvolnum> - <refmiscinfo class="version"></refmiscinfo> - </refmeta> - - <refnamediv> - <refname>vol_id</refname><refpurpose>probe filesystem type and read label and uuid</refpurpose> - </refnamediv> - - <refsynopsisdiv> - <cmdsynopsis> - <command>vol_id</command> - <arg><option>--export</option></arg> - <arg><option>--type</option></arg> - <arg><option>--label</option></arg> - <arg><option>--label-raw</option></arg> - <arg><option>--uuid</option></arg> - <arg><option>--skip-raid</option></arg> - <arg><option>--probe-all</option></arg> - <arg><option>--offset=<replaceable>bytes</replaceable></option></arg> - <arg><option>--debug</option></arg> - <arg><option>--help</option></arg> - <arg><replaceable>device</replaceable></arg> - </cmdsynopsis> - </refsynopsisdiv> - - <refsect1><title>DESCRIPTION</title> - <para><command>vol_id</command> is usually called from a udev rule, to - provide udev with the filesystem type, the label and the uuid of a - volume. It supports most of the common filesystem formats and detects - various raid setups to prevent the recognition of raid members - as a volume with a filesystem.</para> - </refsect1> - - <refsect1><title>OPTIONS</title> - <variablelist> - <varlistentry> - <term><option>--export</option></term> - <listitem> - <para>Print all values in key/value format to import them into the - environment.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--type</option></term> - <listitem> - <para>Print the filesystem type.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--label</option></term> - <listitem> - <para> - Print the safe version of volume label suitable for - use as filename. - </para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--label-raw</option></term> - <listitem> - <para> - Print the raw volume label. - </para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--uuid</option></term> - <listitem> - <para>Print the uuid of a volume.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--skip-raid</option></term> - <listitem> - <para>Skip detection of raid metadata.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--probe-all</option></term> - <listitem> - <para>Probe for all types and print all matches.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--offset=<replaceable>bytes</replaceable></option></term> - <listitem> - <para>Start probing at the given offset, instead of the beginning - of the volume. The offset value is specified in bytes.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--debug</option></term> - <listitem> - <para>Print debug messages to stderr.</para> - </listitem> - </varlistentry> - <varlistentry> - <term><option>--help</option></term> - <listitem> - <para>Print usage.</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1><title>ENVIRONMENT</title> - <variablelist> - <varlistentry> - <term><option>UDEV_LOG</option></term> - <listitem> - <para>Set the syslog priority.</para> - </listitem> - </varlistentry> - </variablelist> - </refsect1> - - <refsect1><title>EXIT STATUS</title> - <para><command>vol_id</command> will only return successful if the - value asked for is not empty. All trailing whitespace will be removed, - spaces replaced by underscore and slashes ignored.</para> - </refsect1> - - <refsect1><title>AUTHOR</title> - <para>Written by Kay Sievers <email>kay.sievers@vrfy.org</email></para> - </refsect1> - - <refsect1> - <title>SEE ALSO</title> - <para><citerefentry> - <refentrytitle>udev</refentrytitle><manvolnum>7</manvolnum> - </citerefentry></para> - </refsect1> - </refentry> - </section> -</article> |