version 1.33, 2011/08/29 14:34:59 |
version 1.33.8.2, 2013/06/23 06:28:50 |
Line 45 __RCSID("$NetBSD$"); |
|
Line 45 __RCSID("$NetBSD$"); |
|
#include <string.h> |
#include <string.h> |
#include <unistd.h> |
#include <unistd.h> |
#include <util.h> |
#include <util.h> |
|
#include <paths.h> |
|
#include <dirent.h> |
|
|
#include <sys/ioctl.h> |
#include <sys/ioctl.h> |
#include <sys/disklabel.h> |
#include <sys/disklabel.h> |
#include <sys/mman.h> |
#include <sys/mman.h> |
#include <sys/param.h> |
#include <sys/param.h> |
#include <sys/resource.h> |
#include <sys/resource.h> |
|
#include <sys/statvfs.h> |
|
#include <sys/bitops.h> |
|
|
#include <dev/cgdvar.h> |
#include <dev/cgdvar.h> |
|
|
|
|
ACTION_GENERATE_CONVERT, /* generate a ``dup'' paramsfile */ |
ACTION_GENERATE_CONVERT, /* generate a ``dup'' paramsfile */ |
ACTION_CONFIGALL, /* configure all from config file */ |
ACTION_CONFIGALL, /* configure all from config file */ |
ACTION_UNCONFIGALL, /* unconfigure all from config file */ |
ACTION_UNCONFIGALL, /* unconfigure all from config file */ |
ACTION_CONFIGSTDIN /* configure, key from stdin */ |
ACTION_CONFIGSTDIN, /* configure, key from stdin */ |
|
ACTION_LIST /* list configured devices */ |
}; |
}; |
|
|
/* if nflag is set, do not configure/unconfigure the cgd's */ |
/* if nflag is set, do not configure/unconfigure the cgd's */ |
Line 93 static int generate_convert(struct param |
|
Line 98 static int generate_convert(struct param |
|
static int unconfigure(int, char **, struct params *, int); |
static int unconfigure(int, char **, struct params *, int); |
static int do_all(const char *, int, char **, |
static int do_all(const char *, int, char **, |
int (*)(int, char **, struct params *, int)); |
int (*)(int, char **, struct params *, int)); |
|
static int do_list(int, char **); |
|
|
#define CONFIG_FLAGS_FROMALL 1 /* called from configure_all() */ |
#define CONFIG_FLAGS_FROMALL 1 /* called from configure_all() */ |
#define CONFIG_FLAGS_FROMMAIN 2 /* called from main() */ |
#define CONFIG_FLAGS_FROMMAIN 2 /* called from main() */ |
|
|
(void)fprintf(stderr, "usage: %s [-nv] [-V vmeth] cgd dev [paramsfile]\n", |
(void)fprintf(stderr, "usage: %s [-nv] [-V vmeth] cgd dev [paramsfile]\n", |
getprogname()); |
getprogname()); |
(void)fprintf(stderr, " %s -C [-nv] [-f configfile]\n", getprogname()); |
(void)fprintf(stderr, " %s -C [-nv] [-f configfile]\n", getprogname()); |
(void)fprintf(stderr, " %s -U [-nv] [-f configfile]\n", getprogname()); |
|
(void)fprintf(stderr, " %s -G [-nv] [-i ivmeth] [-k kgmeth] " |
(void)fprintf(stderr, " %s -G [-nv] [-i ivmeth] [-k kgmeth] " |
"[-o outfile] paramsfile\n", getprogname()); |
"[-o outfile] paramsfile\n", getprogname()); |
(void)fprintf(stderr, " %s -g [-nv] [-i ivmeth] [-k kgmeth] " |
(void)fprintf(stderr, " %s -g [-nv] [-i ivmeth] [-k kgmeth] " |
"[-o outfile] alg [keylen]\n", getprogname()); |
"[-o outfile] alg [keylen]\n", getprogname()); |
|
(void)fprintf(stderr, " %s -l\n", getprogname()); |
(void)fprintf(stderr, " %s -s [-nv] [-i ivmeth] cgd dev alg " |
(void)fprintf(stderr, " %s -s [-nv] [-i ivmeth] cgd dev alg " |
"[keylen]\n", getprogname()); |
"[keylen]\n", getprogname()); |
|
(void)fprintf(stderr, " %s -U [-nv] [-f configfile]\n", getprogname()); |
(void)fprintf(stderr, " %s -u [-nv] cgd\n", getprogname()); |
(void)fprintf(stderr, " %s -u [-nv] cgd\n", getprogname()); |
exit(EXIT_FAILURE); |
exit(EXIT_FAILURE); |
} |
} |
Line 188 main(int argc, char **argv) |
|
Line 195 main(int argc, char **argv) |
|
p = params_new(); |
p = params_new(); |
kg = NULL; |
kg = NULL; |
|
|
while ((ch = getopt(argc, argv, "CGUV:b:f:gi:k:no:spuv")) != -1) |
while ((ch = getopt(argc, argv, "CGUV:b:f:gi:k:lno:spuv")) != -1) |
switch (ch) { |
switch (ch) { |
case 'C': |
case 'C': |
set_action(&action, ACTION_CONFIGALL); |
set_action(&action, ACTION_CONFIGALL); |
Line 235 main(int argc, char **argv) |
|
Line 242 main(int argc, char **argv) |
|
usage(); |
usage(); |
keygen_addlist(&p->keygen, kg); |
keygen_addlist(&p->keygen, kg); |
break; |
break; |
|
case 'l': |
|
set_action(&action, ACTION_LIST); |
|
break; |
case 'n': |
case 'n': |
nflag = 1; |
nflag = 1; |
break; |
break; |
Line 290 main(int argc, char **argv) |
|
Line 300 main(int argc, char **argv) |
|
return do_all(cfile, argc, argv, unconfigure); |
return do_all(cfile, argc, argv, unconfigure); |
case ACTION_CONFIGSTDIN: |
case ACTION_CONFIGSTDIN: |
return configure_stdin(p, argc, argv); |
return configure_stdin(p, argc, argv); |
|
case ACTION_LIST: |
|
return do_list(argc, argv); |
default: |
default: |
errx(EXIT_FAILURE, "undefined action"); |
errx(EXIT_FAILURE, "undefined action"); |
/* NOTREACHED */ |
/* NOTREACHED */ |
Line 497 configure(int argc, char **argv, struct |
|
Line 509 configure(int argc, char **argv, struct |
|
int ret; |
int ret; |
char cgdname[PATH_MAX]; |
char cgdname[PATH_MAX]; |
|
|
if (argc == 2) { |
if (argc == 2) { |
char *pfile; |
char *pfile; |
|
|
if (asprintf(&pfile, "%s/%s", |
if (asprintf(&pfile, "%s/%s", |
Line 976 do_all(const char *cfile, int argc, char |
|
Line 988 do_all(const char *cfile, int argc, char |
|
return ret; |
return ret; |
} |
} |
|
|
|
static const char * |
|
iv_method(int mode) |
|
{ |
|
|
|
switch (mode) { |
|
case CGD_CIPHER_CBC_ENCBLKNO8: |
|
return "encblkno8"; |
|
case CGD_CIPHER_CBC_ENCBLKNO1: |
|
return "encblkno1"; |
|
default: |
|
return "unknown"; |
|
} |
|
} |
|
|
|
|
|
static void |
|
show(const char *dev) { |
|
char path[64]; |
|
struct cgd_user cgu; |
|
int fd; |
|
|
|
fd = opendisk(dev, O_RDONLY, path, sizeof(path), 0); |
|
if (fd == -1) { |
|
warn("open: %s", dev); |
|
return; |
|
} |
|
|
|
cgu.cgu_unit = -1; |
|
if (prog_ioctl(fd, CGDIOCGET, &cgu) == -1) { |
|
close(fd); |
|
err(1, "CGDIOCGET"); |
|
} |
|
|
|
printf("%s: ", dev); |
|
|
|
if (cgu.cgu_dev == 0) { |
|
printf("not in use"); |
|
goto out; |
|
} |
|
|
|
dev = devname(cgu.cgu_dev, S_IFBLK); |
|
if (dev != NULL) |
|
printf("%s ", dev); |
|
else |
|
printf("dev %llu,%llu ", (unsigned long long)major(cgu.cgu_dev), |
|
(unsigned long long)minor(cgu.cgu_dev)); |
|
|
|
if (verbose) |
|
printf("%s ", cgu.cgu_alg); |
|
if (verbose > 1) { |
|
printf("keylen %d ", cgu.cgu_keylen); |
|
printf("blksize %zd ", cgu.cgu_blocksize); |
|
printf("%s ", iv_method(cgu.cgu_mode)); |
|
} |
|
|
|
out: |
|
putchar('\n'); |
|
close(fd); |
|
} |
|
|
|
static int |
|
do_list(int argc, char **argv) |
|
{ |
|
|
|
if (argc != 0 && argc != 1) |
|
usage(); |
|
|
|
if (argc) { |
|
show(argv[0]); |
|
return 0; |
|
} |
|
|
|
DIR *dirp; |
|
struct dirent *dp; |
|
__BITMAP_TYPE(, uint32_t, 65536) bm; |
|
|
|
__BITMAP_ZERO(&bm); |
|
|
|
if ((dirp = opendir(_PATH_DEV)) == NULL) |
|
err(1, "opendir: %s", _PATH_DEV); |
|
|
|
while ((dp = readdir(dirp)) != NULL) { |
|
char *ep; |
|
if (strncmp(dp->d_name, "rcgd", 4) != 0) |
|
continue; |
|
errno = 0; |
|
int n = (int)strtol(dp->d_name + 4, &ep, 0); |
|
if (ep == dp->d_name + 4 || errno != 0) { |
|
warnx("bad name %s", dp->d_name); |
|
continue; |
|
} |
|
*ep = '\0'; |
|
if (__BITMAP_ISSET(n, &bm)) |
|
continue; |
|
__BITMAP_SET(n, &bm); |
|
show(dp->d_name + 1); |
|
} |
|
|
|
closedir(dirp); |
|
return 0; |
|
} |
|
|
static void |
static void |
eliminate_cores(void) |
eliminate_cores(void) |
{ |
{ |