X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fconfig.cc;h=384db5cde137be48177afc3cb3ceca8df95f090f;hb=9d843365fb77e00dd31c03d1e8ea49126ab550f2;hp=063fbcab9b16f922151485045c44ec88a6f5e17b;hpb=96f50dd5e600925488fdd9db1580aa01b026269b;p=dcpomatic.git diff --git a/src/lib/config.cc b/src/lib/config.cc index 063fbcab9..384db5cde 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" @@ -33,6 +32,7 @@ #include "filter.h" #include "log.h" #include "ratio.h" +#include "unzipper.h" #include "zipper.h" #include #include @@ -188,9 +188,16 @@ 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; + _initial_paths["Preferences"] = boost::none; _use_isdcf_name_by_default = true; _write_kdms_to_disk = true; _email_kdms = false; @@ -501,6 +508,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: @@ -1043,7 +1051,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: @@ -1213,7 +1221,7 @@ void Config::drop () { delete _instance; - _instance = 0; + _instance = nullptr; } void @@ -1590,6 +1598,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()) { @@ -1622,6 +1633,38 @@ save_all_config_as_zip (boost::filesystem::path zip_file) } +void +Config::load_from_zip(boost::filesystem::path zip_file) +{ + Unzipper unzipper(zip_file); + dcp::write_string_to_file(unzipper.get("config.xml"), config_write_file()); + + try { + dcp::write_string_to_file(unzipper.get("cinemas.xml"), cinemas_file()); + dcp::write_string_to_file(unzipper.get("dkdm_recipient.xml"), dkdm_recipients_file()); + } catch (std::runtime_error&) {} + + read(); + + changed(Property::USE_ANY_SERVERS); + changed(Property::SERVERS); + changed(Property::CINEMAS); + changed(Property::DKDM_RECIPIENTS); + changed(Property::SOUND); + changed(Property::SOUND_OUTPUT); + changed(Property::PLAYER_CONTENT_DIRECTORY); + changed(Property::PLAYER_PLAYLIST_DIRECTORY); + changed(Property::PLAYER_DEBUG_LOG); + changed(Property::HISTORY); + changed(Property::SHOW_EXPERIMENTAL_AUDIO_PROCESSORS); + changed(Property::AUDIO_MAPPING); + changed(Property::AUTO_CROP_THRESHOLD); + changed(Property::ALLOW_SMPTE_BV20); + changed(Property::ISDCF_NAME_PART_LENGTH); + changed(Property::OTHER); +} + + void Config::set_initial_path(string id, boost::filesystem::path path) { @@ -1636,7 +1679,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; }