summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipdfmx/dvipdfmx-20110309
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvipdfmx/dvipdfmx-20110309')
-rw-r--r--Build/source/texk/dvipdfmx/dvipdfmx-20110309/ChangeLog16
-rwxr-xr-xBuild/source/texk/dvipdfmx/dvipdfmx-20110309/configure2
-rw-r--r--Build/source/texk/dvipdfmx/dvipdfmx-20110309/configure.in2
-rw-r--r--Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dpxfile.c2
-rw-r--r--Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvi.c57
-rw-r--r--Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvi.h5
-rw-r--r--Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvipdfmx.c33
-rw-r--r--Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/pdfencrypt.c49
-rw-r--r--Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/pdfencrypt.h6
-rw-r--r--Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/spc_pdfm.c3
10 files changed, 132 insertions, 43 deletions
diff --git a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/ChangeLog b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/ChangeLog
index 486c491605b..9a3b04b7040 100644
--- a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/ChangeLog
+++ b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/ChangeLog
@@ -1,8 +1,22 @@
-$Header: /home/cvsroot/dvipdfmx/ChangeLog,v 1.286 2011/03/05 02:07:33 chofchof Exp $
+$Header: /home/cvsroot/dvipdfmx/ChangeLog,v 1.289 2011/03/09 07:58:12 chofchof Exp $
ChangeLog: Changes for DVIPDFMx
===============================
+2011-03-09 Jin-Hwan Cho
+
+ * dpxfile.c, configure.in, man/extractbb.1:
+ Applied the patches for TeX Live 2011 by Peter Breitenlohner.
+
+2011-03-07 Matthias Franz
+
+ * dvi.c, dvi.h, dvipdfmx.c, pdfencrypt.c, pdfencrypt.h, spc_pdfm.c:
+ Added special pdf:encrypt to turn on document encryption from
+ within the DVI file (suggested by Michael Joyner). Format:
+ \special{pdf:encrypt ownerpw (abc) userpw (xyz) length 128 perm 252}
+ If a parameter is omitted, the default value / empty password
+ is used. The special must appear at the beginning of the file.
+
2011-03-05 Jin-Hwan Cho
* dpxfile.c:
Applied the secutiry patch written by Akira Kakuto
diff --git a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/configure b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/configure
index 3b0dd842b07..876e3c4f791 100755
--- a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/configure
+++ b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/configure
@@ -2321,7 +2321,7 @@ fi
# Define the identity of the package.
PACKAGE=dvipdfmx
- VERSION=20110305
+ VERSION=20110309
cat >>confdefs.h <<_ACEOF
diff --git a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/configure.in b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/configure.in
index 0ca6c72108e..b76ef10cf32 100644
--- a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/configure.in
+++ b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/configure.in
@@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT(src/dvipdfmx.c)
-AM_INIT_AUTOMAKE(dvipdfmx, 20110305)
+AM_INIT_AUTOMAKE(dvipdfmx, 20110309)
AM_CONFIG_HEADER(config.h)
AM_MAINTAINER_MODE
diff --git a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dpxfile.c b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dpxfile.c
index 67155401510..b8267374bb4 100644
--- a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dpxfile.c
+++ b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dpxfile.c
@@ -1,4 +1,4 @@
-/* $Header: /home/cvsroot/dvipdfmx/src/dpxfile.c,v 1.28 2011/03/06 03:06:59 chofchof Exp $
+/* $Header: /home/cvsroot/dvipdfmx/src/dpxfile.c,v 1.29 2011/03/09 07:55:19 chofchof Exp $
This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
diff --git a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvi.c b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvi.c
index 0270af88473..d497e38bda1 100644
--- a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvi.c
+++ b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvi.c
@@ -1,4 +1,4 @@
-/* $Header: /home/cvsroot/dvipdfmx/src/dvi.c,v 1.42 2011/03/06 03:14:14 chofchof Exp $
+/* $Header: /home/cvsroot/dvipdfmx/src/dvi.c,v 1.44 2011/03/08 20:25:52 matthias Exp $
This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
@@ -40,6 +40,7 @@
#include "pdfdev.h"
#include "pdfdoc.h"
#include "pdfparse.h"
+#include "pdfencrypt.h"
#include "fontmap.h"
@@ -1688,7 +1689,10 @@ read_length (double *vp, double mag, const char **pp, const char *endptr)
static int
-scan_special (double *wd, double *ht, double *xo, double *yo, char *lm, unsigned *minorversion, const char *buf, UNSIGNED_QUAD size)
+scan_special (double *wd, double *ht, double *xo, double *yo, char *lm,
+ unsigned *minorversion,
+ int *do_enc, unsigned *key_bits, unsigned *permission, char *owner_pw, char *user_pw,
+ const char *buf, UNSIGNED_QUAD size)
{
char *q;
const char *p = buf, *endptr;
@@ -1771,6 +1775,48 @@ scan_special (double *wd, double *ht, double *xo, double *yo, char *lm, unsigned
*minorversion = (unsigned)strtol(kv, NULL, 10);
RELEASE(kv);
}
+ } else if (ns_pdf && !strcmp(q, "encrypt") && do_enc) {
+ *do_enc = 1;
+ *owner_pw = *user_pw = 0;
+ while (!error && p < endptr) {
+ char *kp = parse_c_ident(&p, endptr);
+ if (!kp)
+ break;
+ else {
+ pdf_obj *obj;
+ skip_white(&p, endptr);
+ if (!strcmp(kp, "ownerpw")) {
+ if ((obj = parse_pdf_string(&p, endptr))) {
+ strncpy(owner_pw, pdf_string_value(obj), MAX_PWD_LEN);
+ pdf_release_obj(obj);
+ } else
+ error = -1;
+ } else if (!strcmp(kp, "userpw")) {
+ if ((obj = parse_pdf_string(&p, endptr))) {
+ strncpy(user_pw, pdf_string_value(obj), MAX_PWD_LEN);
+ pdf_release_obj(obj);
+ } else
+ error = -1;
+ } else if (!strcmp(kp, "length")) {
+ if ((obj = parse_pdf_number(&p, endptr)) && PDF_OBJ_NUMBERTYPE(obj)) {
+ *key_bits = (unsigned) pdf_number_value(obj);
+ } else
+ error = -1;
+ if (obj)
+ pdf_release_obj(obj);
+ } else if (!strcmp(kp, "perm")) {
+ if ((obj = parse_pdf_number(&p, endptr)) && PDF_OBJ_NUMBERTYPE(obj)) {
+ *permission = (unsigned) pdf_number_value(obj);
+ } else
+ error = -1;
+ if (obj)
+ pdf_release_obj(obj);
+ } else
+ error = -1;
+ RELEASE(kp);
+ }
+ skip_white(&p, endptr);
+ }
}
RELEASE(q);
}
@@ -1783,7 +1829,8 @@ void
dvi_scan_specials (unsigned page_no,
double *page_width, double *page_height,
double *x_offset, double *y_offset, char *landscape,
- unsigned *minorversion)
+ unsigned *minorversion,
+ int *do_enc, unsigned *key_bits, unsigned *permission, char *owner_pw, char *user_pw)
{
FILE *fp = dvi_file;
long offset;
@@ -1812,7 +1859,9 @@ dvi_scan_specials (unsigned page_no,
size = MIN(size, 1024);
if (fread(buf, sizeof(char), size, fp) != size)
ERROR("Reading DVI file failed!");
- scan_special(page_width, page_height, x_offset, y_offset, landscape, minorversion, buf, size);
+ if (scan_special(page_width, page_height, x_offset, y_offset, landscape,
+ minorversion, do_enc, key_bits, permission, owner_pw, user_pw, buf, size))
+ WARN("Reading special command failed: \"%.*s\"", size, buf);
continue;
}
diff --git a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvi.h b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvi.h
index 35873e9bd1c..e18e8b02388 100644
--- a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvi.h
+++ b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvi.h
@@ -1,4 +1,4 @@
-/* $Header: /home/cvsroot/dvipdfmx/src/dvi.h,v 1.15 2010/03/28 06:03:57 chofchof Exp $
+/* $Header: /home/cvsroot/dvipdfmx/src/dvi.h,v 1.16 2011/03/08 00:20:51 matthias Exp $
This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
@@ -73,7 +73,8 @@ extern void dvi_do_page (unsigned page_no,
extern void dvi_scan_specials (unsigned page_no,
double *width, double *height,
double *x_offset, double *y_offset,
- char *landscape, unsigned *minorversion);
+ char *landscape, unsigned *minorversion,
+ int *do_enc, unsigned *key_bits, unsigned *permission, char *owner_pw, char *user_pw);
extern int dvi_locate_font (const char *name, spt_t ptsize);
/* link or nolink:
diff --git a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvipdfmx.c b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvipdfmx.c
index 2e91b57e426..e576eea500d 100644
--- a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvipdfmx.c
+++ b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/dvipdfmx.c
@@ -1,4 +1,4 @@
-/* $Header: /home/cvsroot/dvipdfmx/src/dvipdfmx.c,v 1.84 2011/03/06 03:31:47 chofchof Exp $
+/* $Header: /home/cvsroot/dvipdfmx/src/dvipdfmx.c,v 1.85 2011/03/08 00:20:51 matthias Exp $
This is DVIPDFMx, an eXtended version of DVIPDFM by Mark A. Wicks.
@@ -171,7 +171,7 @@ show_usage (void)
fprintf(stdout, "\t\tAnd negative values replace old values.\n");
fprintf(stdout, "-D template\tPS->PDF conversion command line template [none]\n");
fprintf(stdout, "-E \t\tEnable DVIPDFM emulation mode\n");
- fprintf(stdout, "-K number\tEncryption key bits [40]\n");
+ fprintf(stdout, "-K number\tEncryption key length [40]\n");
fprintf(stdout, "-O number\tSet maximum depth of open bookmark items [0]\n");
fprintf(stdout, "-P number\tSet permission flags for PDF encryption [0x003C]\n");
fprintf(stdout, "-S \t\tEnable PDF encryption\n");
@@ -522,10 +522,10 @@ do_args (int argc, char *argv[])
do_encryption = 1;
break;
case 'K':
- CHECK_ARG(1, "encryption key bits");
+ CHECK_ARG(1, "encryption key length");
key_bits = (unsigned) atoi(argv[1]);
- if (key_bits < 40 || key_bits > 128)
- ERROR("Invalid encryption key bits specified: %s", argv[1]);
+ if (key_bits < 40 || key_bits > 128 || (key_bits & 0x7))
+ ERROR("Invalid encryption key length specified: %s", argv[1]);
POP_ARG();
break;
case 'P':
@@ -730,7 +730,7 @@ do_dvi_pages (void)
/* Users want to change page size even after page is started! */
w = page_width; h = page_height; lm = landscape_mode;
xo = x_offset; yo = y_offset;
- dvi_scan_specials(page_no, &w, &h, &xo, &yo, &lm, NULL);
+ dvi_scan_specials(page_no, &w, &h, &xo, &yo, &lm, NULL, NULL, NULL, NULL, NULL, NULL);
if (lm != landscape_mode) {
SWAP(w, h);
landscape_mode = lm;
@@ -902,7 +902,7 @@ main (int argc, char *argv[])
if (key_bits > 40 && pdf_get_version() < 4)
ERROR("Chosen key length requires at least PDF 1.4. "
"Use \"-V 4\" to change.");
- pdf_enc_set_passwd(key_bits, permission, dvi_filename, pdf_filename);
+ pdf_enc_set_passwd(key_bits, permission, NULL, NULL);
}
if (mp_mode) {
@@ -911,6 +911,7 @@ main (int argc, char *argv[])
dvi2pts = 0.01; /* dvi2pts controls accuracy. */
} else {
unsigned ver_minor = 0;
+ char owner_pw[MAX_PWD_LEN], user_pw[MAX_PWD_LEN];
/* Dependency between DVI and PDF side is rather complicated... */
dvi2pts = dvi_init(dvi_filename, mag);
if (dvi2pts == 0.0)
@@ -918,7 +919,23 @@ main (int argc, char *argv[])
pdf_doc_set_creator(dvi_comment());
- dvi_scan_specials(0, &paper_width, &paper_height, &x_offset, &y_offset, &landscape_mode, &ver_minor);
+ if (do_encryption)
+ /* command line takes precedence */
+ dvi_scan_specials(0, &paper_width, &paper_height, &x_offset, &y_offset, &landscape_mode,
+ &ver_minor, NULL, NULL, NULL, NULL, NULL);
+ else {
+ dvi_scan_specials(0, &paper_width, &paper_height, &x_offset, &y_offset, &landscape_mode,
+ &ver_minor, &do_encryption, &key_bits, &permission, owner_pw, user_pw);
+ if (do_encryption) {
+ if (key_bits < 40 || key_bits > 128 || (key_bits & 0x7))
+ ERROR("Invalid encryption key length specified: %u", key_bits);
+ else if (key_bits > 40 && pdf_get_version() < 4)
+ ERROR("Chosen key length requires at least PDF 1.4. "
+ "Use \"-V 4\" to change.");
+ do_encryption = 1;
+ pdf_enc_set_passwd(key_bits, permission, owner_pw, user_pw);
+ }
+ }
if (ver_minor >= PDF_VERSION_MIN && ver_minor <= PDF_VERSION_MAX) {
pdf_set_version(ver_minor);
}
diff --git a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/pdfencrypt.c b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/pdfencrypt.c
index 867396504ae..534711ba41a 100644
--- a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/pdfencrypt.c
+++ b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/pdfencrypt.c
@@ -1,4 +1,4 @@
-/* $Header: /home/cvsroot/dvipdfmx/src/pdfencrypt.c,v 1.15 2011/03/06 03:14:14 chofchof Exp $
+/* $Header: /home/cvsroot/dvipdfmx/src/pdfencrypt.c,v 1.16 2011/03/08 00:20:51 matthias Exp $
This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
@@ -46,7 +46,6 @@
#define MAX_KEY_LEN 16
#define MAX_STR_LEN 32
-#define MAX_PWD_LEN 128
static unsigned char algorithm, revision, key_size;
static long permission;
@@ -365,27 +364,33 @@ static char *getpass (const char *prompt)
}
#endif
-void pdf_enc_set_passwd (unsigned bits, unsigned perm, char *dviname, char *pdfname)
+void pdf_enc_set_passwd (unsigned bits, unsigned perm, const char *owner_pw, const char *user_pw)
{
- register char *retry_passwd;
-
- while (1) {
- strcpy(owner_passwd, getpass("Owner password: "));
- retry_passwd = getpass("Re-enter owner password: ");
- if (!strcmp(owner_passwd, retry_passwd))
- break;
- fputs("Password is not identical.\nTry again.\n", stderr);
- fflush(stderr);
- }
-
- while (1) {
- strcpy(user_passwd, getpass("User password: "));
- retry_passwd = getpass("Re-enter user password: ");
- if (!strcmp(user_passwd, retry_passwd))
- break;
- fputs("Password is not identical.\nTry again.\n", stderr);
- fflush(stderr);
- }
+ char *retry_passwd;
+
+ if (owner_pw) {
+ strncpy(owner_passwd, owner_pw, MAX_PWD_LEN);
+ } else
+ while (1) {
+ strncpy(owner_passwd, getpass("Owner password: "), MAX_PWD_LEN);
+ retry_passwd = getpass("Re-enter owner password: ");
+ if (!strncmp(owner_passwd, retry_passwd, MAX_PWD_LEN))
+ break;
+ fputs("Password is not identical.\nTry again.\n", stderr);
+ fflush(stderr);
+ }
+
+ if (user_pw) {
+ strncpy(user_passwd, user_pw, MAX_PWD_LEN);
+ } else
+ while (1) {
+ strncpy(user_passwd, getpass("User password: "), MAX_PWD_LEN);
+ retry_passwd = getpass("Re-enter user password: ");
+ if (!strncmp(user_passwd, retry_passwd, MAX_PWD_LEN))
+ break;
+ fputs("Password is not identical.\nTry again.\n", stderr);
+ fflush(stderr);
+ }
key_size = (unsigned char)(bits / 8);
algorithm = (key_size == 5 ? 1 : 2);
diff --git a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/pdfencrypt.h b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/pdfencrypt.h
index 7abdc433dad..7e3ae60a3a4 100644
--- a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/pdfencrypt.h
+++ b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/pdfencrypt.h
@@ -1,4 +1,4 @@
-/* $Header: /home/cvsroot/dvipdfmx/src/pdfencrypt.h,v 1.4 2010/02/07 12:53:44 chofchof Exp $
+/* $Header: /home/cvsroot/dvipdfmx/src/pdfencrypt.h,v 1.5 2011/03/08 00:20:51 matthias Exp $
This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
@@ -25,12 +25,14 @@
#include "pdfobj.h"
+#define MAX_PWD_LEN 128
+
extern void pdf_enc_set_verbose (void);
extern pdf_obj *pdf_enc_id_array (void);
extern void pdf_enc_compute_id_string (char *dviname, char *pdfname);
extern void pdf_enc_set_label (unsigned long label);
extern void pdf_enc_set_generation (unsigned generation);
-extern void pdf_enc_set_passwd (unsigned size, unsigned perm, char *dviname, char *pdfname);
+extern void pdf_enc_set_passwd (unsigned size, unsigned perm, const char *owner, const char *user);
extern void pdf_encrypt_data (unsigned char *data, unsigned long len);
extern pdf_obj *pdf_encrypt_obj (void);
diff --git a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/spc_pdfm.c b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/spc_pdfm.c
index 9501506755f..fac8ca255a9 100644
--- a/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/spc_pdfm.c
+++ b/Build/source/texk/dvipdfmx/dvipdfmx-20110309/src/spc_pdfm.c
@@ -1,4 +1,4 @@
-/* $Header: /home/cvsroot/dvipdfmx/src/spc_pdfm.c,v 1.53 2011/03/06 03:14:15 chofchof Exp $
+/* $Header: /home/cvsroot/dvipdfmx/src/spc_pdfm.c,v 1.54 2011/03/08 00:20:51 matthias Exp $
This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks.
@@ -1953,6 +1953,7 @@ static struct spc_handler pdfm_handlers[] = {
{"code", spc_handler_pdfm_code},
{"minorversion", spc_handler_pdfm_do_nothing},
+ {"encrypt", spc_handler_pdfm_do_nothing},
};
int