Merge with develop
--HG-- branch : feature-ryzom-installer
This commit is contained in:
commit
0fa672f5f5
7 changed files with 117 additions and 41 deletions
|
@ -806,7 +806,7 @@ bool launchProgram(const std::string &programName, const std::string &arguments,
|
||||||
|
|
||||||
#ifdef NL_OS_MAC
|
#ifdef NL_OS_MAC
|
||||||
// special OS X case with bundles
|
// special OS X case with bundles
|
||||||
if (toLower(programName).find(".app") != std::string::npos)
|
if (toLower(CFile::getExtension(programName)) == ".app")
|
||||||
{
|
{
|
||||||
// we need to open bundles with "open" command
|
// we need to open bundles with "open" command
|
||||||
std::string command = NLMISC::toString("open \"%s\"", programName.c_str());
|
std::string command = NLMISC::toString("open \"%s\"", programName.c_str());
|
||||||
|
@ -914,15 +914,17 @@ bool launchProgramArray (const std::string &programName, const std::vector<std::
|
||||||
|
|
||||||
#ifdef NL_OS_MAC
|
#ifdef NL_OS_MAC
|
||||||
// special OS X case with bundles
|
// special OS X case with bundles
|
||||||
if (toLower(programName).find(".app") != std::string::npos)
|
if (toLower(CFile::getExtension(programName)) == "app")
|
||||||
{
|
{
|
||||||
// we need to open bundles with "open" command
|
// we need to open bundles with "open" command
|
||||||
std::string command = NLMISC::toString("open \"%s\"", programName.c_str());
|
std::string command = NLMISC::toString("open \"%s\"", programName.c_str());
|
||||||
|
|
||||||
|
std::string argumentsJoined = joinArguments(arguments);
|
||||||
|
|
||||||
// append arguments if any
|
// append arguments if any
|
||||||
if (!arguments.empty())
|
if (!argumentsJoined.empty())
|
||||||
{
|
{
|
||||||
command += NLMISC::toString(" --args %s", joinArguments(arguments).c_str());
|
command += NLMISC::toString(" --args %s", argumentsJoined.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
int res = system(command.c_str());
|
int res = system(command.c_str());
|
||||||
|
@ -931,7 +933,7 @@ bool launchProgramArray (const std::string &programName, const std::vector<std::
|
||||||
|
|
||||||
if (log)
|
if (log)
|
||||||
{
|
{
|
||||||
nlwarning ("LAUNCH: Failed launched '%s' with arg '%s' return code %d", programName.c_str(), arguments.c_str(), res);
|
nlwarning ("LAUNCH: Failed launched '%s' with arg '%s' return code %d", programName.c_str(), argumentsJoined.c_str(), res);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
44
code/ryzom/client/macosx/upgd_nl.sh
Normal file
44
code/ryzom/client/macosx/upgd_nl.sh
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ -z "$ROOTPATH" ]
|
||||||
|
then
|
||||||
|
echo "upgd_nl.sh can only be launched from updt_nl.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# determine directory where all files reside
|
||||||
|
CONTENTSPATH=$(dirname "$ROOTPATH")
|
||||||
|
MACOSPATH=$(dirname "$RYZOM_CLIENT")
|
||||||
|
SIGNPATH=$CONTENTSPATH/_CodeSignature
|
||||||
|
|
||||||
|
# all files of original Bundle are in the same directory
|
||||||
|
# we have to copy them to the right location
|
||||||
|
|
||||||
|
# client_default.cfg and ryzom.icns are already in the right location
|
||||||
|
|
||||||
|
# PkgInfo usually doesn't change so don't copy it
|
||||||
|
|
||||||
|
# Info.plist contains updated version
|
||||||
|
cp -p "$ROOTPATH/Info.plist" "$CONTENTSPATH"
|
||||||
|
|
||||||
|
cp -p "$ROOTPATH/CodeResources" "$SIGNPATH"
|
||||||
|
|
||||||
|
# executable flag for all executables
|
||||||
|
chmod +x "$ROOTPATH/Ryzom"
|
||||||
|
chmod +x "$ROOTPATH/CrashReport"
|
||||||
|
chmod +x "$ROOTPATH/RyzomClientPatcher"
|
||||||
|
chmod +x "$ROOTPATH/RyzomConfiguration"
|
||||||
|
|
||||||
|
# remove previous executables
|
||||||
|
rm -f "$MACOSPATH/Ryzom"
|
||||||
|
rm -f "$MACOSPATH/CrashReport"
|
||||||
|
rm -f "$MACOSPATH/RyzomClientPatcher"
|
||||||
|
rm -f "$MACOSPATH/RyzomConfiguration"
|
||||||
|
|
||||||
|
# copy all binaries in MacOS directory
|
||||||
|
cp -p "$ROOTPATH/Ryzom" "$MACOSPATH"
|
||||||
|
cp -p "$ROOTPATH/CrashReport" "$MACOSPATH"
|
||||||
|
cp -p "$ROOTPATH/RyzomClientPatcher" "$MACOSPATH"
|
||||||
|
cp -p "$ROOTPATH/RyzomConfiguration" "$MACOSPATH"
|
||||||
|
|
||||||
|
exit 0
|
|
@ -275,20 +275,6 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
pump ();
|
pump ();
|
||||||
|
|
||||||
// Delete the .bat file because it s not useful anymore
|
|
||||||
if (NLMISC::CFile::fileExists("updt_nl.bat"))
|
|
||||||
NLMISC::CFile::deleteFile("updt_nl.bat");
|
|
||||||
if (NLMISC::CFile::fileExists("bug_report.exe"))
|
|
||||||
NLMISC::CFile::deleteFile("bug_report.exe");
|
|
||||||
if (NLMISC::CFile::fileExists("bug_report_r.exe"))
|
|
||||||
NLMISC::CFile::deleteFile("bug_report_r.exe");
|
|
||||||
if (NLMISC::CFile::fileExists("bug_report_rd.exe"))
|
|
||||||
NLMISC::CFile::deleteFile("bug_report_rd.exe");
|
|
||||||
if (NLMISC::CFile::fileExists("bug_report_df.exe"))
|
|
||||||
NLMISC::CFile::deleteFile("bug_report_df.exe");
|
|
||||||
if (NLMISC::CFile::fileExists("bug_report_d.exe"))
|
|
||||||
NLMISC::CFile::deleteFile("bug_report_d.exe");
|
|
||||||
|
|
||||||
// Delete all the .ttf file in the /data directory
|
// Delete all the .ttf file in the /data directory
|
||||||
{
|
{
|
||||||
vector<string> files;
|
vector<string> files;
|
||||||
|
@ -303,10 +289,6 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
// TODO for Linux : splashscreen
|
// TODO for Linux : splashscreen
|
||||||
|
|
||||||
// Delete the .sh file because it s not useful anymore
|
|
||||||
if (NLMISC::CFile::fileExists("updt_nl.sh"))
|
|
||||||
NLMISC::CFile::deleteFile("updt_nl.sh");
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// initialize patch manager and set the ryzom full path, before it's used
|
// initialize patch manager and set the ryzom full path, before it's used
|
||||||
|
|
|
@ -61,21 +61,31 @@ bool CCurlHttpClient::authenticate(const std::string &user, const std::string &p
|
||||||
|
|
||||||
const char *CAFilename = "ssl_ca_cert.pem"; // this is the certificate "Thawte Server CA"
|
const char *CAFilename = "ssl_ca_cert.pem"; // this is the certificate "Thawte Server CA"
|
||||||
|
|
||||||
|
// ***************************************************************************
|
||||||
static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
|
static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
|
||||||
{
|
{
|
||||||
|
// look for certificate in search paths
|
||||||
string path = CPath::lookup(CAFilename);
|
string path = CPath::lookup(CAFilename);
|
||||||
nldebug("Cert path '%s'", path.c_str());
|
nldebug("Cert path '%s'", path.c_str());
|
||||||
|
|
||||||
|
if (path.empty())
|
||||||
|
{
|
||||||
|
nlwarning("Unable to find %s", CAFilename);
|
||||||
|
return CURLE_SSL_CACERT;
|
||||||
|
}
|
||||||
|
|
||||||
CIFile file;
|
CIFile file;
|
||||||
|
|
||||||
if (!file.open(CAFilename))
|
// open certificate
|
||||||
|
if (!file.open(path))
|
||||||
{
|
{
|
||||||
nlwarning("Unable to open %s", CAFilename);
|
nlwarning("Unable to open %s", path.c_str());
|
||||||
return CURLE_SSL_CACERT;
|
return CURLE_SSL_CACERT;
|
||||||
}
|
}
|
||||||
|
|
||||||
CURLcode res = CURLE_OK;
|
CURLcode res = CURLE_OK;
|
||||||
|
|
||||||
|
// load certificate content into memory
|
||||||
std::vector<uint8> buffer(file.getFileSize());
|
std::vector<uint8> buffer(file.getFileSize());
|
||||||
file.serialBuffer(&buffer[0], file.getFileSize());
|
file.serialBuffer(&buffer[0], file.getFileSize());
|
||||||
|
|
||||||
|
@ -83,26 +93,34 @@ static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
|
||||||
BIO *bio = BIO_new_mem_buf(&buffer[0], file.getFileSize());
|
BIO *bio = BIO_new_mem_buf(&buffer[0], file.getFileSize());
|
||||||
|
|
||||||
if (bio)
|
if (bio)
|
||||||
{
|
|
||||||
// use it to read the PEM formatted certificate from memory into an X509
|
|
||||||
// structure that SSL can use
|
|
||||||
X509 *cert = NULL;
|
|
||||||
PEM_read_bio_X509(bio, &cert, 0, NULL);
|
|
||||||
|
|
||||||
if (cert)
|
|
||||||
{
|
{
|
||||||
// get a pointer to the X509 certificate store (which may be empty!)
|
// get a pointer to the X509 certificate store (which may be empty!)
|
||||||
X509_STORE *store = SSL_CTX_get_cert_store((SSL_CTX *)sslctx);
|
X509_STORE *store = SSL_CTX_get_cert_store((SSL_CTX *)sslctx);
|
||||||
|
|
||||||
|
// use it to read the PEM formatted certificate from memory into an X509
|
||||||
|
// structure that SSL can use
|
||||||
|
STACK_OF(X509_INFO) *info = PEM_X509_INFO_read_bio(bio, NULL, NULL, NULL);
|
||||||
|
|
||||||
|
if (info)
|
||||||
|
{
|
||||||
|
// iterate over all entries from the PEM file, add them to the x509_store one by one
|
||||||
|
for (sint i = 0; i < sk_X509_INFO_num(info); ++i)
|
||||||
|
{
|
||||||
|
X509_INFO *itmp = sk_X509_INFO_value(info, i);
|
||||||
|
|
||||||
|
if (itmp->x509)
|
||||||
|
{
|
||||||
// add our certificate to this store
|
// add our certificate to this store
|
||||||
if (X509_STORE_add_cert(store, cert) == 0)
|
if (X509_STORE_add_cert(store, itmp->x509) == 0)
|
||||||
{
|
{
|
||||||
nlwarning("Error adding certificate");
|
nlwarning("Error adding certificate");
|
||||||
res = CURLE_SSL_CACERT;
|
res = CURLE_SSL_CACERT;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// decrease reference counts
|
// cleanup
|
||||||
X509_free(cert);
|
sk_X509_INFO_pop_free(info, X509_INFO_free);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -113,9 +131,14 @@ static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
|
||||||
// decrease reference counts
|
// decrease reference counts
|
||||||
BIO_free(bio);
|
BIO_free(bio);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nlwarning("Unable to allocate BIO buffer for certificates");
|
||||||
|
res = CURLE_SSL_CACERT;
|
||||||
|
}
|
||||||
|
|
||||||
// all set to go
|
// all set to go
|
||||||
return CURLE_OK ;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ***************************************************************************
|
// ***************************************************************************
|
||||||
|
@ -125,7 +148,10 @@ bool CCurlHttpClient::verifyServer(bool verify)
|
||||||
curl_easy_setopt(_Curl, CURLOPT_SSL_VERIFYPEER, verify ? 1 : 0);
|
curl_easy_setopt(_Curl, CURLOPT_SSL_VERIFYPEER, verify ? 1 : 0);
|
||||||
curl_easy_setopt(_Curl, CURLOPT_SSLCERTTYPE, "PEM");
|
curl_easy_setopt(_Curl, CURLOPT_SSLCERTTYPE, "PEM");
|
||||||
// would allow to provide the CA in memory instead of using CURLOPT_CAINFO, but needs to include and link OpenSSL
|
// would allow to provide the CA in memory instead of using CURLOPT_CAINFO, but needs to include and link OpenSSL
|
||||||
curl_easy_setopt(_Curl, CURLOPT_SSL_CTX_FUNCTION, *sslctx_function);
|
if (curl_easy_setopt(_Curl, CURLOPT_SSL_CTX_FUNCTION, *sslctx_function) == CURLE_NOT_BUILT_IN)
|
||||||
|
{
|
||||||
|
nlwarning("Unable to support CURLOPT_SSL_CTX_FUNCTION, curl not compiled with OpenSSL ?");
|
||||||
|
}
|
||||||
// don't use that anymore, because CA can't be loaded from BNP and doesn't support UTF-8 under Windows
|
// don't use that anymore, because CA can't be loaded from BNP and doesn't support UTF-8 under Windows
|
||||||
// curl_easy_setopt(_Curl, CURLOPT_CAINFO, path.c_str());
|
// curl_easy_setopt(_Curl, CURLOPT_CAINFO, path.c_str());
|
||||||
curl_easy_setopt(_Curl, CURLOPT_CAPATH, NULL);
|
curl_easy_setopt(_Curl, CURLOPT_CAPATH, NULL);
|
||||||
|
@ -181,7 +207,7 @@ bool CCurlHttpClient::sendRequest(const std::string& methodWB, const std::string
|
||||||
curl_easy_getinfo(_Curl, CURLINFO_RESPONSE_CODE, &r);
|
curl_easy_getinfo(_Curl, CURLINFO_RESPONSE_CODE, &r);
|
||||||
if (verbose)
|
if (verbose)
|
||||||
{
|
{
|
||||||
nldebug("%u", r);
|
nldebug("%u", (uint)r);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -171,7 +171,7 @@ CPatchManager::CPatchManager() : State("t_state"), DataScanState("t_data_scan_st
|
||||||
ForceRemovePatchCategories.push_back("main_exedll_linux32");
|
ForceRemovePatchCategories.push_back("main_exedll_linux32");
|
||||||
ForceRemovePatchCategories.push_back("main_exedll_linux64");
|
ForceRemovePatchCategories.push_back("main_exedll_linux64");
|
||||||
ForceRemovePatchCategories.push_back("main_exedll_osx");
|
ForceRemovePatchCategories.push_back("main_exedll_osx");
|
||||||
#elif defined(NL_OS_APPLE)
|
#elif defined(NL_OS_MAC)
|
||||||
ForceRemovePatchCategories.push_back("main_exedll_win32");
|
ForceRemovePatchCategories.push_back("main_exedll_win32");
|
||||||
ForceRemovePatchCategories.push_back("main_exedll_win64");
|
ForceRemovePatchCategories.push_back("main_exedll_win64");
|
||||||
ForceRemovePatchCategories.push_back("main_exedll_linux32");
|
ForceRemovePatchCategories.push_back("main_exedll_linux32");
|
||||||
|
@ -195,6 +195,12 @@ void CPatchManager::setClientRootPath(const std::string& clientRootPath)
|
||||||
ClientRootPath = CPath::standardizePath(clientRootPath);
|
ClientRootPath = CPath::standardizePath(clientRootPath);
|
||||||
ClientPatchPath = CPath::standardizePath(ClientRootPath + "unpack");
|
ClientPatchPath = CPath::standardizePath(ClientRootPath + "unpack");
|
||||||
|
|
||||||
|
// Delete the .sh file because it's not useful anymore
|
||||||
|
std::string fullUpdateBatchFilename = ClientRootPath + UpdateBatchFilename;
|
||||||
|
|
||||||
|
if (NLMISC::CFile::fileExists(fullUpdateBatchFilename))
|
||||||
|
NLMISC::CFile::deleteFile(fullUpdateBatchFilename);
|
||||||
|
|
||||||
WritableClientDataPath = CPath::standardizePath(ClientRootPath + "data");
|
WritableClientDataPath = CPath::standardizePath(ClientRootPath + "data");
|
||||||
|
|
||||||
#ifdef NL_OS_MAC
|
#ifdef NL_OS_MAC
|
||||||
|
|
15
code/ryzom/client/unix/upgd_nl.sh
Normal file
15
code/ryzom/client/unix/upgd_nl.sh
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ -z "$ROOTPATH" ]
|
||||||
|
then
|
||||||
|
echo "upgd_nl.sh can only be launched from updt_nl.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# executable flag for all executables
|
||||||
|
chmod +x "$ROOTPATH/ryzom_client"
|
||||||
|
chmod +x "$ROOTPATH/crash_report"
|
||||||
|
chmod +x "$ROOTPATH/ryzom_client_patcher"
|
||||||
|
chmod +x "$ROOTPATH/ryzom_configuration"
|
||||||
|
|
||||||
|
exit 0
|
|
@ -137,6 +137,7 @@ struct CClientPatcherTranslations : public NLMISC::CI18N::ILoadProxy
|
||||||
"TheSagaOfRyzom [Ryzom]\n"
|
"TheSagaOfRyzom [Ryzom]\n"
|
||||||
"uiErrPatchApply [Error: Patch process ended but the patch has not been successfully applied.]\n"
|
"uiErrPatchApply [Error: Patch process ended but the patch has not been successfully applied.]\n"
|
||||||
"uiErrChecking [Error: Patch files failed - checking.]\n"
|
"uiErrChecking [Error: Patch files failed - checking.]\n"
|
||||||
|
"uiByte [B]\n"
|
||||||
"uiKb [KiB]\n"
|
"uiKb [KiB]\n"
|
||||||
"uiMb [MiB]\n"
|
"uiMb [MiB]\n"
|
||||||
"uiLoginGetFile [Getting File:]\n"
|
"uiLoginGetFile [Getting File:]\n"
|
||||||
|
|
Loading…
Reference in a new issue