diff --git a/core/src/dird/migrate.cc b/core/src/dird/migrate.cc index 28e2662a876..fb938c16ad5 100644 --- a/core/src/dird/migrate.cc +++ b/core/src/dird/migrate.cc @@ -66,7 +66,7 @@ namespace directordaemon { /* Commands sent to other storage daemon */ static char replicatecmd[] = - "replicate Job=%s address=%s port=%d ssl=%d Authorization=%s\n"; + "replicate JobId=%d Job=%s address=%s port=%d ssl=%d Authorization=%s\n"; /** * Get Job names in Pool @@ -1549,7 +1549,7 @@ static inline bool DoActualMigration(JobControlRecord *jcr) char *connection_target_address = StorageAddressToContact(rstore, wstore); - Mmsg(command, replicatecmd, mig_jcr->Job, connection_target_address, + Mmsg(command, replicatecmd, mig_jcr->JobId, mig_jcr->Job, connection_target_address, wstore->SDDport, tls_need, mig_jcr->sd_auth_key); if (!jcr->store_bsock->fsend(command.c_str())) { diff --git a/core/src/dird/sd_cmds.cc b/core/src/dird/sd_cmds.cc index 22a98e46eaa..58c8e62994d 100644 --- a/core/src/dird/sd_cmds.cc +++ b/core/src/dird/sd_cmds.cc @@ -41,6 +41,7 @@ #include "dird/ua_server.h" #include "lib/bnet.h" #include "lib/edit.h" +#include "lib/qualified_resource_name_type_converter.h" namespace directordaemon { @@ -137,6 +138,20 @@ bool ConnectToStorageDaemon(JobControlRecord *jcr, int retry_interval, } jcr->store_bsock = sd; + std::string qualified_resource_name; + if (!my_config->GetQualifiedResourceNameTypeConverter()->ResourceToString(me->hdr.name, my_config->r_own_, + qualified_resource_name)) { + Dmsg0(100, "Could not generate qualified resource name for a storage resource\n"); + return false; + } + + TlsResource *tls_configuration = dynamic_cast(store); + if (!sd->DoTlsHandshake(4, tls_configuration, false, qualified_resource_name.c_str(), + tls_configuration->password.value, jcr)) { + Dmsg0(100, "Could not DoTlsHandshake() with storagedaemon\n"); + return false; + } + if (!AuthenticateWithStorageDaemon(jcr, store)) { sd->close(); delete jcr->store_bsock; diff --git a/core/src/stored/dir_cmd.cc b/core/src/stored/dir_cmd.cc index c7ca5f52174..27bb6f9f8aa 100644 --- a/core/src/stored/dir_cmd.cc +++ b/core/src/stored/dir_cmd.cc @@ -102,7 +102,7 @@ static char releasecmd[] = static char readlabelcmd[] = "readlabel %127s Slot=%hd drive=%hd"; static char replicatecmd[] = - "replicate Job=%127s address=%s port=%d ssl=%d Authorization=%100s"; + "replicate JobId=%d Job=%127s address=%s port=%d ssl=%d Authorization=%100s"; static char passiveclientcmd[] = "passive client address=%s port=%d ssl=%d"; static char resolvecmd[] = @@ -1582,6 +1582,7 @@ static bool ReplicateCmd(JobControlRecord *jcr) int enable_ssl; /* enable ssl to sd */ char JobName[MAX_NAME_LENGTH]; char stored_addr[MAX_NAME_LENGTH]; + uint32_t JobId = 0; PoolMem sd_auth_key(PM_MESSAGE); BareosSocket *dir = jcr->dir_bsock; BareosSocket *sd; /* storage daemon bsock */ @@ -1595,7 +1596,7 @@ static bool ReplicateCmd(JobControlRecord *jcr) Dmsg1(100, "ReplicateCmd: %s", dir->msg); sd_auth_key.check_size(dir->message_length); - if (sscanf(dir->msg, replicatecmd, JobName, stored_addr, &stored_port, + if (sscanf(dir->msg, replicatecmd, &JobId, JobName, stored_addr, &stored_port, &enable_ssl, sd_auth_key.c_str()) != 5) { dir->fsend(BADcmd, "replicate", dir->msg); goto bail_out; @@ -1639,7 +1640,7 @@ static bool ReplicateCmd(JobControlRecord *jcr) Dmsg0(110, "Connection OK to SD.\n"); if (!my_config->GetQualifiedResourceNameTypeConverter()->ResourceToString( - jcr->Job, R_JOB, jcr->JobId, qualified_resource_name)) { + JobName, R_JOB, JobId, qualified_resource_name)) { goto bail_out; }