Print this page
*** NO COMMENTS ***

*** 62,72 **** #include <aes/aes_impl.h> #include <des/des_impl.h> #include <blowfish/blowfish_impl.h> static const char USAGE[] = ! "Usage: %s -a file [ device ] " " [-c aes-128-cbc|aes-192-cbc|aes-256-cbc|des3-cbc|blowfish-cbc]" " [-e] [-k keyfile] [-T [token]:[manuf]:[serial]:key]\n" " %s -d file | device\n" " %s -C [gzip|gzip-6|gzip-9|lzma] [-s segment_size] file\n" " %s -U file\n" --- 62,72 ---- #include <aes/aes_impl.h> #include <des/des_impl.h> #include <blowfish/blowfish_impl.h> static const char USAGE[] = ! "Usage: %s [-r] -a file [ device ] " " [-c aes-128-cbc|aes-192-cbc|aes-256-cbc|des3-cbc|blowfish-cbc]" " [-e] [-k keyfile] [-T [token]:[manuf]:[serial]:key]\n" " %s -d file | device\n" " %s -C [gzip|gzip-6|gzip-9|lzma] [-s segment_size] file\n" " %s -U file\n"
*** 362,375 **** * Add a device association. If devicename is NULL, let the driver * pick a device. */ static void add_mapping(int lfd, const char *devicename, const char *filename, ! mech_alias_t *cipher, const char *rkey, size_t rksz) { struct lofi_ioctl li; li.li_crypto_enabled = B_FALSE; if (cipher != NULL) { /* set up encryption for mapped file */ li.li_crypto_enabled = B_TRUE; (void) strlcpy(li.li_cipher, cipher->name, --- 362,377 ---- * Add a device association. If devicename is NULL, let the driver * pick a device. */ static void add_mapping(int lfd, const char *devicename, const char *filename, ! mech_alias_t *cipher, const char *rkey, size_t rksz, boolean_t rdonly) { struct lofi_ioctl li; + li.li_readonly = rdonly; + li.li_crypto_enabled = B_FALSE; if (cipher != NULL) { /* set up encryption for mapped file */ li.li_crypto_enabled = B_TRUE; (void) strlcpy(li.li_cipher, cipher->name,
*** 495,505 **** { struct lofi_ioctl li; int minor; int maxminor; char path[MAXPATHLEN]; ! char options[MAXPATHLEN]; li.li_minor = 0; if (ioctl(fd, LOFI_GET_MAXMINOR, &li) == -1) { die("ioctl"); } --- 497,507 ---- { struct lofi_ioctl li; int minor; int maxminor; char path[MAXPATHLEN]; ! char options[MAXPATHLEN] = { 0 }; li.li_minor = 0; if (ioctl(fd, LOFI_GET_MAXMINOR, &li) == -1) { die("ioctl"); }
*** 515,534 **** warn("ioctl"); break; } (void) snprintf(path, sizeof (path), "/dev/%s/%d", LOFI_BLOCK_NAME, minor); /* * Encrypted lofi and compressed lofi are mutually exclusive. */ if (li.li_crypto_enabled) (void) snprintf(options, sizeof (options), gettext("Encrypted")); else if (li.li_algorithm[0] != '\0') (void) snprintf(options, sizeof (options), gettext("Compressed(%s)"), li.li_algorithm); ! else (void) snprintf(options, sizeof (options), "-"); (void) printf(FORMAT, path, li.li_filename, options); } } --- 517,549 ---- warn("ioctl"); break; } (void) snprintf(path, sizeof (path), "/dev/%s/%d", LOFI_BLOCK_NAME, minor); + + options[0] = '\0'; + /* * Encrypted lofi and compressed lofi are mutually exclusive. */ if (li.li_crypto_enabled) (void) snprintf(options, sizeof (options), gettext("Encrypted")); else if (li.li_algorithm[0] != '\0') (void) snprintf(options, sizeof (options), gettext("Compressed(%s)"), li.li_algorithm); ! if (li.li_readonly) { ! if (strlen(options) != 0) { ! (void) strlcat(options, ",", sizeof (options)); ! (void) strlcat(options, "Readonly", ! sizeof (options)); ! } else { ! (void) snprintf(options, sizeof (options), ! gettext("Readonly")); ! } ! } ! if (strlen(options) == 0) (void) snprintf(options, sizeof (options), "-"); (void) printf(FORMAT, path, li.li_filename, options); } }
*** 1787,1796 **** --- 1802,1812 ---- static char *lofictl = "/dev/" LOFI_CTL_NAME; boolean_t force = B_FALSE; const char *pname; boolean_t errflag = B_FALSE; boolean_t addflag = B_FALSE; + boolean_t rdflag = B_FALSE; boolean_t deleteflag = B_FALSE; boolean_t ephflag = B_FALSE; boolean_t compressflag = B_FALSE; boolean_t uncompressflag = B_FALSE; /* the next two work together for -c, -k, -T, -e options only */
*** 1806,1816 **** pname = getpname(argv[0]); (void) setlocale(LC_ALL, ""); (void) textdomain(TEXT_DOMAIN); ! while ((c = getopt(argc, argv, "a:c:Cd:efk:o:s:T:U")) != EOF) { switch (c) { case 'a': addflag = B_TRUE; if ((filename = realpath(optarg, realfilename)) == NULL) die("%s", optarg); --- 1822,1832 ---- pname = getpname(argv[0]); (void) setlocale(LC_ALL, ""); (void) textdomain(TEXT_DOMAIN); ! while ((c = getopt(argc, argv, "a:c:Cd:efk:o:rs:T:U")) != EOF) { switch (c) { case 'a': addflag = B_TRUE; if ((filename = realpath(optarg, realfilename)) == NULL) die("%s", optarg);
*** 1861,1870 **** --- 1877,1889 ---- case 'k': keyfile = optarg; need_crypto = B_TRUE; cipher_only = B_FALSE; /* need to unset cipher_only */ break; + case 'r': + rdflag = B_TRUE; + break; case 's': segsize = convert_to_num(optarg); if (segsize < DEV_BSIZE || !ISP2(segsize)) die(gettext("segment size %s is invalid " "or not a multiple of minimum block "
*** 1891,1900 **** --- 1910,1920 ---- } /* Check for mutually exclusive combinations of options */ if (errflag || (addflag && deleteflag) || + (rdflag && !addflag) || (!addflag && need_crypto) || ((compressflag || uncompressflag) && (addflag || deleteflag))) usage(pname); /* ephemeral key, and key from either file or token are incompatible */
*** 2007,2017 **** /* * Now to the real work. */ if (addflag) ! add_mapping(lfd, devicename, filename, cipher, rkey, rksz); else if (compressflag) lofi_compress(&lfd, filename, compress_index, segsize); else if (uncompressflag) lofi_uncompress(lfd, filename); else if (deleteflag) --- 2027,2038 ---- /* * Now to the real work. */ if (addflag) ! add_mapping(lfd, devicename, filename, cipher, rkey, rksz, ! rdflag); else if (compressflag) lofi_compress(&lfd, filename, compress_index, segsize); else if (uncompressflag) lofi_uncompress(lfd, filename); else if (deleteflag)