#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"
_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;
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:
}
/* [XML] PlayerMode <code>window</code> for a single window, <code>full</code> for full-screen and <code>dual</code> for full screen playback
- with controls on another monitor.
+ with separate (advanced) controls.
*/
switch (_player_mode) {
case PLAYER_MODE_WINDOW:
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()) {
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;
}