summaryrefslogtreecommitdiff
path: root/Build/source/texk/xdvipdfmx/src/pdfencrypt.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/xdvipdfmx/src/pdfencrypt.c')
-rw-r--r--Build/source/texk/xdvipdfmx/src/pdfencrypt.c48
1 files changed, 26 insertions, 22 deletions
diff --git a/Build/source/texk/xdvipdfmx/src/pdfencrypt.c b/Build/source/texk/xdvipdfmx/src/pdfencrypt.c
index d90c77c23e2..8edf21acb06 100644
--- a/Build/source/texk/xdvipdfmx/src/pdfencrypt.c
+++ b/Build/source/texk/xdvipdfmx/src/pdfencrypt.c
@@ -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 unsigned 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);
@@ -394,7 +399,6 @@ void pdf_enc_set_passwd (unsigned bits, unsigned perm, char *dviname, char *pdfn
if (revision == 3)
permission |= 0xFFFFF000;
- compute_id_string(dviname, pdfname);
compute_owner_password();
compute_user_password();
}