1*03c79f70Snicm /* $OpenBSD: duid.c,v 1.2 2012/07/09 14:26:40 nicm Exp $ */
2*03c79f70Snicm
3cf1d0975Sjsing /*
4cf1d0975Sjsing * Copyright (c) 2010 Joel Sing <jsing@openbsd.org>
5cf1d0975Sjsing *
6cf1d0975Sjsing * Permission to use, copy, modify, and distribute this software for any
7cf1d0975Sjsing * purpose with or without fee is hereby granted, provided that the above
8cf1d0975Sjsing * copyright notice and this permission notice appear in all copies.
9cf1d0975Sjsing *
10cf1d0975Sjsing * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11cf1d0975Sjsing * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12cf1d0975Sjsing * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13cf1d0975Sjsing * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14cf1d0975Sjsing * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15cf1d0975Sjsing * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16cf1d0975Sjsing * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17cf1d0975Sjsing */
18cf1d0975Sjsing
19cf1d0975Sjsing #include <string.h>
20cf1d0975Sjsing
21cf1d0975Sjsing #include "util.h"
22cf1d0975Sjsing
23cf1d0975Sjsing int
isduid(const char * duid,int dflags)24cf1d0975Sjsing isduid(const char *duid, int dflags)
25cf1d0975Sjsing {
26cf1d0975Sjsing char c;
27cf1d0975Sjsing int i;
28cf1d0975Sjsing
29cf1d0975Sjsing /* Basic format check. */
30cf1d0975Sjsing if (!((strlen(duid) == 16 && (dflags & OPENDEV_PART)) ||
31cf1d0975Sjsing (strlen(duid) == 18 && duid[16] == '.')))
32cf1d0975Sjsing return 0;
33cf1d0975Sjsing
34cf1d0975Sjsing /* Check UID. */
35cf1d0975Sjsing for (i = 0; i < 16; i++) {
36cf1d0975Sjsing c = duid[i];
37cf1d0975Sjsing if ((c < '0' || c > '9') && (c < 'a' || c > 'f'))
38cf1d0975Sjsing return 0;
39cf1d0975Sjsing }
40cf1d0975Sjsing
41cf1d0975Sjsing return 1;
42cf1d0975Sjsing }
43