Reverted (Some Info) implementation

This commit is contained in:
John Whitington 2019-10-26 14:10:03 +01:00
parent f86760c38f
commit ab729c5f41
1 changed files with 22 additions and 10 deletions

View File

@ -722,13 +722,19 @@ let rec decrypt_if_necessary (_, _, user_pw, owner_pw, was_dec_with_owner, _) op
pdf pdf
| _ -> | _ ->
if args.debugcrypt then Printf.printf "Couldn't decrypt with owner password %s\n" owner_pw; if args.debugcrypt then Printf.printf "Couldn't decrypt with owner password %s\n" owner_pw;
match Pdfcrypt.decrypt_pdf user_pw pdf with match
if args.debugcrypt then Printf.printf "call decrypt_pdf user\n";
let r = Pdfcrypt.decrypt_pdf user_pw pdf in
if args.debugcrypt then Printf.printf "returned from decrypt_pdf\n";
r
with
| Some pdf, permissions -> | Some pdf, permissions ->
if args.debugcrypt then Printf.printf "Managed to decrypt with user password\n"; if args.debugcrypt then Printf.printf "Managed to decrypt with user password\n";
if operation_allowed pdf permissions op if operation_allowed pdf permissions op
then pdf then pdf
else soft_error "User password cannot give permission for this operation" else soft_error "User password cannot give permission for this operation"
| _ -> | _ ->
if args.debugcrypt then Printf.printf "Failed to decrypt with user password: raising soft_error";
soft_error "Failed to decrypt file: wrong password?" soft_error "Failed to decrypt file: wrong password?"
let nobble pdf = let nobble pdf =
@ -3674,13 +3680,19 @@ let go () =
let pdf' = get_single_pdf (Some Clean) false in let pdf' = get_single_pdf (Some Clean) false in
write_pdf false pdf' write_pdf false pdf'
| Some Info -> | Some Info ->
let pdf = get_single_pdf ~decrypt:true (Some Info) true in let pdf, inname, input =
let inname = match args.inputs with (InFile x, _, _, _, _, _)::_ -> x | _ -> "" in match args.inputs with
| (InFile inname, _, u, o, _, _) as input::_ ->
pdfread_pdf_of_channel_lazy (optstring u) (optstring o) (open_in_bin inname), inname, input
| (StdIn, _, u, o, _, _) as input::_ -> pdf_of_stdin u o, "", input
| (AlreadyInMemory pdf, _, _, _, _, _) as input::_ -> pdf, "", input
| _ -> raise (Arg.Bad "cpdf: No input specified.\n")
in
Printf.printf "Encryption: %s\n" (getencryption pdf); Printf.printf "Encryption: %s\n" (getencryption pdf);
Printf.printf "Permissions: %s\n" (getpermissions pdf); Printf.printf "Permissions: %s\n" (getpermissions pdf);
if inname <> "" then if inname <> "" then
Printf.printf "Linearized: %b\n" (Pdfread.is_linearized (Pdfio.input_of_channel (open_in_bin inname))); Printf.printf "Linearized: %b\n" (Pdfread.is_linearized (Pdfio.input_of_channel (open_in_bin inname)));
let pdf = decrypt_if_necessary (List.hd args.inputs) (Some Info) pdf in let pdf = decrypt_if_necessary input (Some Info) pdf in
Cpdf.output_info args.encoding pdf; Cpdf.output_info args.encoding pdf;
Cpdf.output_xmp_info args.encoding pdf Cpdf.output_xmp_info args.encoding pdf
| Some PageInfo -> | Some PageInfo ->