X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fconfig.cc;h=7b4d67822736c9e9146b65560d52392e61c0a2d2;hb=4cb737852e5f1db699a3cede57788a65db0edc6d;hp=3366a2bbc018015ca119fee015aa3f0134747329;hpb=e8d05ab1c7c8ea1cc9d653540bf3cf2acb2c9669;p=dcpomatic.git diff --git a/src/lib/config.cc b/src/lib/config.cc index 3366a2bbc..7b4d67822 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -25,7 +25,6 @@ #include "config.h" #include "constants.h" #include "cross.h" -#include "crypto.h" #include "dcp_content_type.h" #include "dkdm_recipient.h" #include "dkdm_wrapper.h" @@ -106,7 +105,7 @@ Config::set_defaults () _language = optional (); _default_still_length = 10; _default_dcp_content_type = DCPContentType::from_isdcf_name ("FTR"); - _default_dcp_audio_channels = 6; + _default_dcp_audio_channels = 8; _default_j2k_bandwidth = 150000000; _default_audio_delay = 0; _default_interop = false; @@ -188,9 +187,15 @@ Config::set_defaults () _custom_languages.clear (); _initial_paths.clear(); _initial_paths["AddFilesPath"] = boost::none; + _initial_paths["AddKDMPath"] = boost::none; _initial_paths["AddDKDMPath"] = boost::none; _initial_paths["SelectCertificatePath"] = boost::none; _initial_paths["AddCombinerInputPath"] = boost::none; + _initial_paths["ExportSubtitlesPath"] = boost::none; + _initial_paths["ExportVideoPath"] = boost::none; + _initial_paths["DebugLogPath"] = boost::none; + _initial_paths["CinemaDatabasePath"] = boost::none; + _initial_paths["ConfigFilePath"] = boost::none; _use_isdcf_name_by_default = true; _write_kdms_to_disk = true; _email_kdms = false; @@ -291,7 +296,7 @@ Config::read_config() try { cxml::Document f ("Config"); - f.read_file (config_read_file()); + f.read_file(dcp::filesystem::fix_long_path(config_read_file())); auto version = f.optional_number_child ("Version"); if (version && *version < _current_version) { @@ -501,6 +506,7 @@ try case BAD_SIGNER_UTF8_STRINGS: case BAD_SIGNER_INCONSISTENT: case BAD_SIGNER_VALIDITY_TOO_LONG: + case BAD_SIGNER_DN_QUALIFIER: _signer_chain = create_certificate_chain (); break; case BAD_DECRYPTION_INCONSISTENT: @@ -654,10 +660,10 @@ catch (...) { void Config::read_cinemas() { - if (boost::filesystem::exists (_cinemas_file)) { + if (dcp::filesystem::exists(_cinemas_file)) { try { cxml::Document f("Cinemas"); - f.read_file(_cinemas_file); + f.read_file(dcp::filesystem::fix_long_path(_cinemas_file)); read_cinemas(f); } catch (...) { backup(); @@ -671,10 +677,10 @@ Config::read_cinemas() void Config::read_dkdm_recipients() { - if (boost::filesystem::exists (_dkdm_recipients_file)) { + if (dcp::filesystem::exists(_dkdm_recipients_file)) { try { cxml::Document f("DKDMRecipients"); - f.read_file(_dkdm_recipients_file); + f.read_file(dcp::filesystem::fix_long_path(_dkdm_recipients_file)); read_dkdm_recipients(f); } catch (...) { backup(); @@ -1043,7 +1049,7 @@ Config::write_config () const } /* [XML] PlayerMode window for a single window, full for full-screen and dual for full screen playback - with controls on another monitor. + with separate (advanced) controls. */ switch (_player_mode) { case PLAYER_MODE_WINDOW: @@ -1133,8 +1139,8 @@ Config::write_config () const } f.checked_write(s.c_str(), s.bytes()); f.close(); - boost::filesystem::remove (target); - boost::filesystem::rename (tmp, target); + dcp::filesystem::remove(target); + dcp::filesystem::rename(tmp, target); } catch (xmlpp::exception& e) { string s = e.what (); trim (s); @@ -1157,8 +1163,8 @@ write_file (string root_node, string node, string version, list> t try { doc.write_to_file_formatted (file.string() + ".tmp"); - boost::filesystem::remove (file); - boost::filesystem::rename (file.string() + ".tmp", file); + dcp::filesystem::remove(file); + dcp::filesystem::rename(file.string() + ".tmp", file); } catch (xmlpp::exception& e) { string s = e.what (); trim (s); @@ -1201,7 +1207,7 @@ Config::directory_or (optional dir, boost::filesystem:: } boost::system::error_code ec; - auto const e = boost::filesystem::exists (*dir, ec); + auto const e = dcp::filesystem::exists(*dir, ec); if (ec || !e) { return a; } @@ -1324,7 +1330,7 @@ Config::clean_history_internal (vector& h) h.clear (); for (auto i: old) { try { - if (boost::filesystem::is_directory(i)) { + if (dcp::filesystem::is_directory(i)) { h.push_back (i); } } catch (...) { @@ -1337,7 +1343,7 @@ Config::clean_history_internal (vector& h) bool Config::have_existing (string file) { - return boost::filesystem::exists (read_path(file)); + return dcp::filesystem::exists(read_path(file)); } @@ -1364,10 +1370,10 @@ Config::set_cinemas_file (boost::filesystem::path file) _cinemas_file = file; - if (boost::filesystem::exists (_cinemas_file)) { + if (dcp::filesystem::exists(_cinemas_file)) { /* Existing file; read it in */ cxml::Document f ("Cinemas"); - f.read_file (_cinemas_file); + f.read_file(dcp::filesystem::fix_long_path(_cinemas_file)); read_cinemas (f); } @@ -1396,12 +1402,12 @@ Config::save_template (shared_ptr film, string name) const list Config::templates () const { - if (!boost::filesystem::exists(read_path("templates"))) { + if (!dcp::filesystem::exists(read_path("templates"))) { return {}; } list n; - for (auto const& i: boost::filesystem::directory_iterator(read_path("templates"))) { + for (auto const& i: dcp::filesystem::directory_iterator(read_path("templates"))) { n.push_back (i.path().filename().string()); } return n; @@ -1410,7 +1416,7 @@ Config::templates () const bool Config::existing_template (string name) const { - return boost::filesystem::exists (template_read_path(name)); + return dcp::filesystem::exists(template_read_path(name)); } @@ -1431,13 +1437,13 @@ Config::template_write_path (string name) const void Config::rename_template (string old_name, string new_name) const { - boost::filesystem::rename (template_read_path(old_name), template_write_path(new_name)); + dcp::filesystem::rename(template_read_path(old_name), template_write_path(new_name)); } void Config::delete_template (string name) const { - boost::filesystem::remove (template_write_path(name)); + dcp::filesystem::remove(template_write_path(name)); } /** @return Path to the config.xml containing the actual settings, following a link if required */ @@ -1445,14 +1451,14 @@ boost::filesystem::path config_file (boost::filesystem::path main) { cxml::Document f ("Config"); - if (!boost::filesystem::exists (main)) { + if (!dcp::filesystem::exists(main)) { /* It doesn't exist, so there can't be any links; just return it */ return main; } /* See if there's a link */ try { - f.read_file (main); + f.read_file(dcp::filesystem::fix_long_path(main)); auto link = f.optional_string_child("Link"); if (link) { return *link; @@ -1506,7 +1512,7 @@ void Config::copy_and_link (boost::filesystem::path new_file) const { write (); - boost::filesystem::copy_file (config_read_file(), new_file, boost::filesystem::copy_option::overwrite_if_exists); + dcp::filesystem::copy_file(config_read_file(), new_file, boost::filesystem::copy_option::overwrite_if_exists); link (new_file); } @@ -1590,6 +1596,9 @@ Config::check_certificates () const if ((i.not_after().year() - i.not_before().year()) > 15) { bad = BAD_SIGNER_VALIDITY_TOO_LONG; } + if (dcp::escape_digest(i.subject_dn_qualifier()) != dcp::public_key_digest(i.public_key())) { + bad = BAD_SIGNER_DN_QUALIFIER; + } } if (!_signer_chain->chain_valid() || !_signer_chain->private_key_valid()) { @@ -1611,10 +1620,10 @@ save_all_config_as_zip (boost::filesystem::path zip_file) auto config = Config::instance(); zipper.add ("config.xml", dcp::file_to_string(config->config_read_file())); - if (boost::filesystem::exists(config->cinemas_file())) { + if (dcp::filesystem::exists(config->cinemas_file())) { zipper.add ("cinemas.xml", dcp::file_to_string(config->cinemas_file())); } - if (boost::filesystem::exists(config->dkdm_recipients_file())) { + if (dcp::filesystem::exists(config->dkdm_recipients_file())) { zipper.add ("dkdm_recipients.xml", dcp::file_to_string(config->dkdm_recipients_file())); } @@ -1636,7 +1645,9 @@ optional Config::initial_path(string id) const { auto iter = _initial_paths.find(id); - DCPOMATIC_ASSERT(iter != _initial_paths.end()); + if (iter == _initial_paths.end()) { + return {}; + } return iter->second; }