uuidparse: add new command
This command will analyze and print information about UUID's. The command is based on libuuid/src/uuid_time.c but modified to use libsmartcol. [kzak@redhat.com: - minor coding style changes] Reference: http://marc.info/?l=util-linux-ng&m=149735980715600&w=2 Signed-off-by: Sami Kerola <kerolasa@iki.fi> Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
c3a4cfc579
commit
83893f2678
|
@ -165,6 +165,7 @@ ylwrap
|
||||||
/utmpdump
|
/utmpdump
|
||||||
/uuidd
|
/uuidd
|
||||||
/uuidgen
|
/uuidgen
|
||||||
|
/uuidparse
|
||||||
/vipw
|
/vipw
|
||||||
/wall
|
/wall
|
||||||
/wdctl
|
/wdctl
|
||||||
|
|
|
@ -1146,6 +1146,11 @@ UL_BUILD_INIT([uuidgen], [check])
|
||||||
UL_REQUIRES_BUILD([uuidgen], [libuuid])
|
UL_REQUIRES_BUILD([uuidgen], [libuuid])
|
||||||
AM_CONDITIONAL([BUILD_UUIDGEN], [test "x$build_uuidgen" = xyes])
|
AM_CONDITIONAL([BUILD_UUIDGEN], [test "x$build_uuidgen" = xyes])
|
||||||
|
|
||||||
|
UL_BUILD_INIT([uuidparse], [check])
|
||||||
|
UL_REQUIRES_BUILD([uuidparse], [libuuid])
|
||||||
|
UL_REQUIRES_BUILD([uuidparse], [libsmartcols])
|
||||||
|
AM_CONDITIONAL([BUILD_UUIDPARSE], [test "x$build_uuidparse" = xyes])
|
||||||
|
|
||||||
UL_BUILD_INIT([blkid], [check])
|
UL_BUILD_INIT([blkid], [check])
|
||||||
UL_REQUIRES_BUILD([blkid], [libblkid])
|
UL_REQUIRES_BUILD([blkid], [libblkid])
|
||||||
AM_CONDITIONAL([BUILD_BLKID], [test "x$build_blkid" = xyes])
|
AM_CONDITIONAL([BUILD_BLKID], [test "x$build_blkid" = xyes])
|
||||||
|
|
|
@ -88,6 +88,14 @@ uuidgen_LDADD = $(LDADD) libuuid.la
|
||||||
uuidgen_CFLAGS = $(AM_CFLAGS) -I$(ul_libuuid_incdir)
|
uuidgen_CFLAGS = $(AM_CFLAGS) -I$(ul_libuuid_incdir)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if BUILD_UUIDPARSE
|
||||||
|
usrbin_exec_PROGRAMS += uuidparse
|
||||||
|
dist_man_MANS += misc-utils/uuidparse.1
|
||||||
|
uuidparse_SOURCES = misc-utils/uuidparse.c
|
||||||
|
uuidparse_LDADD = $(LDADD) libcommon.la libuuid.la libsmartcols.la
|
||||||
|
uuidparse_CFLAGS = $(AM_CFLAGS) -I$(ul_libuuid_incdir) -I$(ul_libsmartcols_incdir)
|
||||||
|
endif
|
||||||
|
|
||||||
if BUILD_UUIDD
|
if BUILD_UUIDD
|
||||||
usrsbin_exec_PROGRAMS += uuidd
|
usrsbin_exec_PROGRAMS += uuidd
|
||||||
dist_man_MANS += misc-utils/uuidd.8
|
dist_man_MANS += misc-utils/uuidd.8
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
.\" Copyright (c) 2017 Sami Kerola
|
||||||
|
.\" The 3-Clause BSD License
|
||||||
|
.TH UUIDPARSE "1" "2017-06-18" "util-linux" "User Commands"
|
||||||
|
.SH NAME
|
||||||
|
uuidparse \- an utility to parse unique identifiers
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B uuidparse
|
||||||
|
[options]
|
||||||
|
.I uuid
|
||||||
|
.SH DESCRIPTION
|
||||||
|
This command will parse unique identifier inputs from either command line
|
||||||
|
arguments or standard input. The inputs are white-space separated.
|
||||||
|
.SH OUTPUT
|
||||||
|
.SS Variants
|
||||||
|
.TS
|
||||||
|
tab(:);
|
||||||
|
left l l.
|
||||||
|
NCS:Network Computing System identifier. These were the original UUIDs.
|
||||||
|
DCE:The Open Software Foundation's (OSF) Distributed Computing Environment UUIDs.
|
||||||
|
Microsoft:Microsoft Windows platform globally unique identifier (GUID).
|
||||||
|
other:Unknown variant. Usually invalid input data.
|
||||||
|
.TE
|
||||||
|
.SS Types
|
||||||
|
.TS
|
||||||
|
tab(:);
|
||||||
|
left l l.
|
||||||
|
nil:Special type for zero in type file.
|
||||||
|
time-based:The DCE time based.
|
||||||
|
DCE:The DCE time and MAC Address.
|
||||||
|
name-based:RFC 4122 md5sum hash.
|
||||||
|
random:RFC 4122 random.
|
||||||
|
sha1-based:RFC 4122 sha-1 hash.
|
||||||
|
unknown:Unknown type. Usually invalid input data.
|
||||||
|
.TE
|
||||||
|
.SH OPTIONS
|
||||||
|
.TP
|
||||||
|
\fB\-J\fR, \fB\-\-json\fR
|
||||||
|
Use JSON output format.
|
||||||
|
.TP
|
||||||
|
\fB\-n\fR, \fB\-\-noheadings\fR
|
||||||
|
Do not print a header line.
|
||||||
|
.TP
|
||||||
|
\fB\-o\fR, \fB\-\-output\fR
|
||||||
|
Specify which output columns to print. Use \-\-help to get a list of all
|
||||||
|
supported columns.
|
||||||
|
.TP
|
||||||
|
\fB\-r\fR, \fB\-\-raw\fR
|
||||||
|
Use the raw output format.
|
||||||
|
.TP
|
||||||
|
\fB\-V\fR, \fB\-\-version\fR
|
||||||
|
Display version information and exit.
|
||||||
|
.TP
|
||||||
|
\fB\-h\fR, \fB\-\-help\fR
|
||||||
|
Display help text and exit.
|
||||||
|
.SH AUTHORS
|
||||||
|
.MT kerolasa@iki.fi
|
||||||
|
Sami Kerola
|
||||||
|
.ME
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR uuidgen (1),
|
||||||
|
.BR libuuid (3),
|
||||||
|
.UR https://\:tools.ietf.org\:/html\:/rfc4122
|
||||||
|
RFC 4122
|
||||||
|
.UE
|
||||||
|
.SH AVAILABILITY
|
||||||
|
The example command is part of the util-linux package and is available from
|
||||||
|
.UR https://\:www.kernel.org\:/pub\:/linux\:/utils\:/util-linux/
|
||||||
|
Linux Kernel Archive
|
||||||
|
.UE .
|
|
@ -0,0 +1,354 @@
|
||||||
|
/*
|
||||||
|
* uuidparse.c --- Interpret uuid encoded information. This program
|
||||||
|
* violates the UUID abstraction barrier by reaching into the
|
||||||
|
* guts of a UUID.
|
||||||
|
*
|
||||||
|
* Based on libuuid/src/uuid_time.c
|
||||||
|
* Copyright (C) 1998, 1999 Theodore Ts'o.
|
||||||
|
*
|
||||||
|
* All alterations (C) 2017 Sami Kerola
|
||||||
|
* The 3-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, and the entire permission notice in its entirety,
|
||||||
|
* including the disclaimer of warranties.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. The name of the author may not be used to endorse or promote
|
||||||
|
* products derived from this software without specific prior
|
||||||
|
* written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
|
||||||
|
* WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||||
|
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||||
|
* USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
|
||||||
|
* DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
#include <libsmartcols.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "c.h"
|
||||||
|
#include "closestream.h"
|
||||||
|
#include "nls.h"
|
||||||
|
#include "optutils.h"
|
||||||
|
#include "strutils.h"
|
||||||
|
#include "timeutils.h"
|
||||||
|
#include "uuid.h"
|
||||||
|
#include "xalloc.h"
|
||||||
|
|
||||||
|
#define UUID_STR_LEN 37
|
||||||
|
|
||||||
|
/* column IDs */
|
||||||
|
enum {
|
||||||
|
COL_UUID = 0,
|
||||||
|
COL_VARIANT,
|
||||||
|
COL_TYPE,
|
||||||
|
COL_TIME
|
||||||
|
};
|
||||||
|
|
||||||
|
/* column names */
|
||||||
|
struct colinfo {
|
||||||
|
const char *name; /* header */
|
||||||
|
double whint; /* width hint (N < 1 is in percent of termwidth) */
|
||||||
|
int flags; /* SCOLS_FL_* */
|
||||||
|
const char *help;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* columns descriptions */
|
||||||
|
static const struct colinfo infos[] = {
|
||||||
|
[COL_UUID] = {"UUID", UUID_STR_LEN, 0, N_("unique identifier")},
|
||||||
|
[COL_VARIANT] = {"VARIANT", 9, 0, N_("variant name")},
|
||||||
|
[COL_TYPE] = {"TYPE", 10, 0, N_("type name")},
|
||||||
|
[COL_TIME] = {"TIME", 31, 0, N_("timestamp")}
|
||||||
|
};
|
||||||
|
|
||||||
|
static int columns[ARRAY_SIZE(infos) * 2];
|
||||||
|
static size_t ncolumns;
|
||||||
|
|
||||||
|
struct control {
|
||||||
|
unsigned int
|
||||||
|
json:1,
|
||||||
|
no_headings:1,
|
||||||
|
raw:1;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void __attribute__((__noreturn__)) usage(void)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
fputs(USAGE_HEADER, stdout);
|
||||||
|
fprintf(stdout, _(" %s [options] <uuid ...>\n"), program_invocation_short_name);
|
||||||
|
|
||||||
|
fputs(USAGE_OPTIONS, stdout);
|
||||||
|
fputs(_(" -J, --json use JSON output format\n"), stdout);
|
||||||
|
fputs(_(" -n, --noheadings don't print headings\n"), stdout);
|
||||||
|
fputs(_(" -o, --output <list> define which output columns to use\n"), stdout);
|
||||||
|
fputs(_(" -r, --raw use the raw output format\n"), stdout);
|
||||||
|
|
||||||
|
fputs(USAGE_SEPARATOR, stdout);
|
||||||
|
fputs(USAGE_HELP, stdout);
|
||||||
|
fputs(USAGE_VERSION, stdout);
|
||||||
|
|
||||||
|
fputs(USAGE_COLUMNS, stdout);
|
||||||
|
for (i = 0; i < ARRAY_SIZE(infos); i++)
|
||||||
|
fprintf(stdout, " %8s %s\n", infos[i].name, _(infos[i].help));
|
||||||
|
|
||||||
|
fprintf(stdout, USAGE_MAN_TAIL("uuidparse(1)"));
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int column_name_to_id(const char *name, size_t namesz)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
assert(name);
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(infos); i++) {
|
||||||
|
const char *cn = infos[i].name;
|
||||||
|
if (!strncasecmp(name, cn, namesz) && !*(cn + namesz))
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
warnx(_("unknown column: %s"), name);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get_column_id(size_t num)
|
||||||
|
{
|
||||||
|
assert(num < ncolumns);
|
||||||
|
assert(columns[num] < (int)ARRAY_SIZE(infos));
|
||||||
|
return columns[num];
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct colinfo *get_column_info(int num)
|
||||||
|
{
|
||||||
|
return &infos[get_column_id(num)];
|
||||||
|
}
|
||||||
|
|
||||||
|
static void fill_table_row(struct libscols_table *tb, char const *const uuid)
|
||||||
|
{
|
||||||
|
static struct libscols_line *ln;
|
||||||
|
size_t i;
|
||||||
|
uuid_t buf;
|
||||||
|
int invalid = 0;
|
||||||
|
int variant, type;
|
||||||
|
|
||||||
|
assert(tb);
|
||||||
|
assert(uuid);
|
||||||
|
|
||||||
|
ln = scols_table_new_line(tb, NULL);
|
||||||
|
if (!ln)
|
||||||
|
errx(EXIT_FAILURE, _("failed to allocate output line"));
|
||||||
|
|
||||||
|
if (uuid_parse(uuid, buf))
|
||||||
|
invalid = 1;
|
||||||
|
else {
|
||||||
|
variant = uuid_variant(buf);
|
||||||
|
type = uuid_type(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < ncolumns; i++) {
|
||||||
|
char *str = NULL;
|
||||||
|
|
||||||
|
switch (get_column_id(i)) {
|
||||||
|
case COL_UUID:
|
||||||
|
str = xstrdup(uuid);
|
||||||
|
break;
|
||||||
|
case COL_VARIANT:
|
||||||
|
if (invalid) {
|
||||||
|
str = xstrdup(_("invalid"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (variant) {
|
||||||
|
case UUID_VARIANT_NCS:
|
||||||
|
str = xstrdup("NCS");
|
||||||
|
break;
|
||||||
|
case UUID_VARIANT_DCE:
|
||||||
|
str = xstrdup("DCE");
|
||||||
|
break;
|
||||||
|
case UUID_VARIANT_MICROSOFT:
|
||||||
|
str = xstrdup("Microsoft");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
str = xstrdup(_("other"));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case COL_TYPE:
|
||||||
|
if (invalid) {
|
||||||
|
str = xstrdup(_("invalid"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (type) {
|
||||||
|
case 0:
|
||||||
|
str = xstrdup(_("nil"));
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
str = xstrdup(_("time-based"));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
str = xstrdup("DCE");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
str = xstrdup(_("name-based"));
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
str = xstrdup(_("random"));
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
str = xstrdup(_("sha1-based"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
str = xstrdup(_("unknown"));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case COL_TIME:
|
||||||
|
if (invalid) {
|
||||||
|
str = xstrdup(_("invalid"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (variant == UUID_VARIANT_DCE && type == 1) {
|
||||||
|
struct timeval tv;
|
||||||
|
char date_buf[ISO_8601_BUFSIZ + 4];
|
||||||
|
|
||||||
|
uuid_time(buf, &tv);
|
||||||
|
strtimeval_iso(&tv,
|
||||||
|
ISO_8601_DATE |
|
||||||
|
ISO_8601_TIME |
|
||||||
|
ISO_8601_COMMAUSEC |
|
||||||
|
ISO_8601_TIMEZONE |
|
||||||
|
ISO_8601_SPACE,
|
||||||
|
date_buf,
|
||||||
|
sizeof(date_buf));
|
||||||
|
str = xstrdup(date_buf);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
if (str && scols_line_refer_data(ln, i, str))
|
||||||
|
errx(EXIT_FAILURE, _("failed to add output data"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void print_output(struct control const *const ctrl, int argc,
|
||||||
|
char **argv)
|
||||||
|
{
|
||||||
|
struct libscols_table *tb;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
scols_init_debug(0);
|
||||||
|
tb = scols_new_table();
|
||||||
|
if (!tb)
|
||||||
|
err(EXIT_FAILURE, _("failed to allocate output table"));
|
||||||
|
|
||||||
|
scols_table_enable_json(tb, ctrl->json);
|
||||||
|
scols_table_enable_noheadings(tb, ctrl->no_headings);
|
||||||
|
scols_table_enable_raw(tb, ctrl->raw);
|
||||||
|
|
||||||
|
for (i = 0; i < ncolumns; i++) {
|
||||||
|
const struct colinfo *col = get_column_info(i);
|
||||||
|
|
||||||
|
if (!scols_table_new_column(tb, col->name, col->whint,
|
||||||
|
col->flags))
|
||||||
|
err(EXIT_FAILURE,
|
||||||
|
_("failed to initialize output column"));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < (size_t) argc; i++)
|
||||||
|
fill_table_row(tb, argv[i]);
|
||||||
|
|
||||||
|
if (i == 0) {
|
||||||
|
char uuid[UUID_STR_LEN];
|
||||||
|
|
||||||
|
while (scanf(" %" stringify_value(UUID_STR_LEN)
|
||||||
|
"[^ \t\n]%*c", uuid) && !feof(stdin))
|
||||||
|
fill_table_row(tb, uuid);
|
||||||
|
}
|
||||||
|
scols_print_table(tb);
|
||||||
|
scols_unref_table(tb);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct control ctrl = { 0 };
|
||||||
|
char *outarg = NULL;
|
||||||
|
int c;
|
||||||
|
|
||||||
|
static const struct option longopts[] = {
|
||||||
|
{"json", no_argument, NULL, 'J'},
|
||||||
|
{"noheadings", no_argument, NULL, 'n'},
|
||||||
|
{"output", required_argument, NULL, 'o'},
|
||||||
|
{"raw", no_argument, NULL, 'r'},
|
||||||
|
{"version", no_argument, NULL, 'V'},
|
||||||
|
{"help", no_argument, NULL, 'h'},
|
||||||
|
};
|
||||||
|
static const ul_excl_t excl[] = {
|
||||||
|
{'J', 'r'},
|
||||||
|
{0}
|
||||||
|
};
|
||||||
|
int excl_st[ARRAY_SIZE(excl)] = UL_EXCL_STATUS_INIT;
|
||||||
|
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
bindtextdomain(PACKAGE, LOCALEDIR);
|
||||||
|
textdomain(PACKAGE);
|
||||||
|
atexit(close_stdout);
|
||||||
|
|
||||||
|
while ((c = getopt_long(argc, argv, "Jno:rVh", longopts, NULL)) != -1) {
|
||||||
|
err_exclusive_options(c, longopts, excl, excl_st);
|
||||||
|
switch (c) {
|
||||||
|
case 'J':
|
||||||
|
ctrl.json = 1;
|
||||||
|
break;
|
||||||
|
case 'n':
|
||||||
|
ctrl.no_headings = 1;
|
||||||
|
break;
|
||||||
|
case 'o':
|
||||||
|
outarg = optarg;
|
||||||
|
break;
|
||||||
|
case 'r':
|
||||||
|
ctrl.raw = 1;
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
printf(UTIL_LINUX_VERSION);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
case 'h':
|
||||||
|
usage();
|
||||||
|
default:
|
||||||
|
errtryhelp(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
|
||||||
|
columns[ncolumns++] = COL_UUID;
|
||||||
|
columns[ncolumns++] = COL_VARIANT;
|
||||||
|
columns[ncolumns++] = COL_TYPE;
|
||||||
|
columns[ncolumns++] = COL_TIME;
|
||||||
|
|
||||||
|
if (outarg
|
||||||
|
&& string_add_to_idarray(outarg, columns, ARRAY_SIZE(columns),
|
||||||
|
&ncolumns, column_name_to_id) < 0)
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
|
||||||
|
print_output(&ctrl, argc, argv);
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
|
@ -93,6 +93,7 @@ TS_CMD_UMOUNT=${TS_CMD_UMOUNT:-"$top_builddir/umount"}
|
||||||
TS_CMD_UTMPDUMP=${TS_CMD_UTMPDUMP-"$top_builddir/utmpdump"}
|
TS_CMD_UTMPDUMP=${TS_CMD_UTMPDUMP-"$top_builddir/utmpdump"}
|
||||||
TS_CMD_UUIDD=${TS_CMD_UUIDD-"$top_builddir/uuidd"}
|
TS_CMD_UUIDD=${TS_CMD_UUIDD-"$top_builddir/uuidd"}
|
||||||
TS_CMD_UUIDGEN=${TS_CMD_UUIDGEN-"$top_builddir/uuidgen"}
|
TS_CMD_UUIDGEN=${TS_CMD_UUIDGEN-"$top_builddir/uuidgen"}
|
||||||
|
TS_CMD_UUIDPARSE=${TS_CMD_UUIDPARSE-"$top_builddir/uuidparse"}
|
||||||
TS_CMD_WHEREIS=${TS_CMD_WHEREIS-"$top_builddir/whereis"}
|
TS_CMD_WHEREIS=${TS_CMD_WHEREIS-"$top_builddir/whereis"}
|
||||||
TS_CMD_WIPEFS=${TS_CMD_WIPEFS-"$top_builddir/wipefs"}
|
TS_CMD_WIPEFS=${TS_CMD_WIPEFS-"$top_builddir/wipefs"}
|
||||||
TS_CMD_CHRT=${TS_CMD_CHRT-"$top_builddir/chrt"}
|
TS_CMD_CHRT=${TS_CMD_CHRT-"$top_builddir/chrt"}
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
UUID VARIANT TYPE TIME
|
||||||
|
00000000-0000-0000-0000-000000000000 NCS nil
|
||||||
|
00000000-0000-1000-0000-000000000000 NCS time-based
|
||||||
|
00000000-0000-2000-0000-000000000000 NCS DCE
|
||||||
|
00000000-0000-3000-0000-000000000000 NCS name-based
|
||||||
|
00000000-0000-4000-0000-000000000000 NCS random
|
||||||
|
00000000-0000-5000-0000-000000000000 NCS sha1-based
|
||||||
|
00000000-0000-6000-0000-000000000000 NCS unknown
|
||||||
|
00000000-0000-0000-8000-000000000000 DCE nil
|
||||||
|
00000000-0000-1000-8000-000000000000 DCE time-based 60038-03-11 05:36:10,955161+0000
|
||||||
|
00000000-0000-2000-8000-000000000000 DCE DCE
|
||||||
|
00000000-0000-3000-8000-000000000000 DCE name-based
|
||||||
|
00000000-0000-4000-8000-000000000000 DCE random
|
||||||
|
00000000-0000-5000-8000-000000000000 DCE sha1-based
|
||||||
|
00000000-0000-6000-8000-000000000000 DCE unknown
|
||||||
|
00000000-0000-0000-d000-000000000000 Microsoft nil
|
||||||
|
00000000-0000-1000-d000-000000000000 Microsoft time-based
|
||||||
|
00000000-0000-2000-d000-000000000000 Microsoft DCE
|
||||||
|
00000000-0000-3000-d000-000000000000 Microsoft name-based
|
||||||
|
00000000-0000-4000-d000-000000000000 Microsoft random
|
||||||
|
00000000-0000-5000-d000-000000000000 Microsoft sha1-based
|
||||||
|
00000000-0000-6000-d000-000000000000 Microsoft unknown
|
||||||
|
00000000-0000-0000-f000-000000000000 other nil
|
||||||
|
00000000-0000-1000-f000-000000000000 other time-based
|
||||||
|
00000000-0000-2000-f000-000000000000 other DCE
|
||||||
|
00000000-0000-3000-f000-000000000000 other name-based
|
||||||
|
00000000-0000-4000-f000-000000000000 other random
|
||||||
|
00000000-0000-5000-f000-000000000000 other sha1-based
|
||||||
|
00000000-0000-6000-f000-000000000000 other unknown
|
||||||
|
9b274c46-544a-11e7-a972-00037f500001 DCE time-based 2017-06-18 17:21:46,544647+0000
|
||||||
|
ffffffff-ffff-1fff-8fff-ffffffffffff DCE time-based 5236-03-31 21:21:00,684697+0000
|
||||||
|
invalid-input invalid invalid invalid
|
||||||
|
return value: 0
|
|
@ -0,0 +1,63 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This file is part of util-linux.
|
||||||
|
#
|
||||||
|
# This file 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 file 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.
|
||||||
|
|
||||||
|
TS_TOPDIR="${0%/*}/../.."
|
||||||
|
TS_DESC="uuidparse"
|
||||||
|
export TZ=GMT
|
||||||
|
|
||||||
|
. $TS_TOPDIR/functions.sh
|
||||||
|
ts_init "$*"
|
||||||
|
|
||||||
|
ts_check_test_command "$TS_CMD_UUIDPARSE"
|
||||||
|
|
||||||
|
echo '00000000-0000-0000-0000-000000000000
|
||||||
|
|
||||||
|
00000000-0000-1000-0000-000000000000
|
||||||
|
00000000-0000-2000-0000-000000000000
|
||||||
|
00000000-0000-3000-0000-000000000000
|
||||||
|
00000000-0000-4000-0000-000000000000
|
||||||
|
00000000-0000-5000-0000-000000000000
|
||||||
|
00000000-0000-6000-0000-000000000000
|
||||||
|
|
||||||
|
00000000-0000-0000-8000-000000000000
|
||||||
|
00000000-0000-1000-8000-000000000000
|
||||||
|
00000000-0000-2000-8000-000000000000
|
||||||
|
00000000-0000-3000-8000-000000000000
|
||||||
|
00000000-0000-4000-8000-000000000000
|
||||||
|
00000000-0000-5000-8000-000000000000
|
||||||
|
00000000-0000-6000-8000-000000000000
|
||||||
|
|
||||||
|
00000000-0000-0000-d000-000000000000
|
||||||
|
00000000-0000-1000-d000-000000000000
|
||||||
|
00000000-0000-2000-d000-000000000000
|
||||||
|
00000000-0000-3000-d000-000000000000
|
||||||
|
00000000-0000-4000-d000-000000000000
|
||||||
|
00000000-0000-5000-d000-000000000000
|
||||||
|
00000000-0000-6000-d000-000000000000
|
||||||
|
|
||||||
|
00000000-0000-0000-f000-000000000000
|
||||||
|
00000000-0000-1000-f000-000000000000
|
||||||
|
00000000-0000-2000-f000-000000000000
|
||||||
|
00000000-0000-3000-f000-000000000000
|
||||||
|
00000000-0000-4000-f000-000000000000
|
||||||
|
00000000-0000-5000-f000-000000000000
|
||||||
|
00000000-0000-6000-f000-000000000000
|
||||||
|
|
||||||
|
9b274c46-544a-11e7-a972-00037f500001
|
||||||
|
ffffffff-ffff-1fff-8fff-ffffffffffff
|
||||||
|
|
||||||
|
invalid-input' | $TS_CMD_UUIDPARSE 1>$TS_OUTPUT 2>&1
|
||||||
|
echo "return value: $?" >> $TS_OUTPUT
|
||||||
|
|
||||||
|
ts_finalize
|
Loading…
Reference in New Issue