diff --git a/urbackup/ClientService.cpp b/urbackup/ClientService.cpp index 12e9e274..515e2b46 100644 --- a/urbackup/ClientService.cpp +++ b/urbackup/ClientService.cpp @@ -1231,6 +1231,8 @@ void ClientConnector::getBackupDirs(int version) std::string msg; for(size_t i=0;iConvertToUTF8(res[i][L"id"])+"\n"; if(version!=0) { @@ -1244,13 +1246,19 @@ void ClientConnector::getBackupDirs(int version) db->destroyAllQueries(); } -bool ClientConnector::saveBackupDirs(str_map &args) +bool ClientConnector::saveBackupDirs(str_map &args, bool server_default) { IDatabase *db=Server->getDatabase(Server->getThreadID(), URBACKUPDB_CLIENT); db->BeginTransaction(); db_results backupdirs=db->Prepare("SELECT name, path FROM backupdirs")->Read(); db->Prepare("DELETE FROM backupdirs")->Write(); - IQuery *q=db->Prepare("INSERT INTO backupdirs (name, path) VALUES (?, ?)"); + IQuery *q=db->Prepare("INSERT INTO backupdirs (name, path, server_default) VALUES (?, ? ,"+nconvert(server_default?1:0)+")"); + if(server_default==false) + { + q->Bind(L"*"); q->Bind(L"*");; + q->Write(); + q->Reset(); + } IQuery *q2=db->Prepare("SELECT id FROM backupdirs WHERE name=?"); std::wstring dir; size_t i=0; @@ -1498,6 +1506,39 @@ void ClientConnector::updateSettings(const std::string &pData) } } + IDatabase *db=Server->getDatabase(Server->getThreadID(), URBACKUPDB_CLIENT); + IQuery *q=db->Prepare("SELECT id FROM backupdirs WHERE server_default=0", false); + db_results res=q->Read(); + db->destroyQuery(q); + if(res.empty()) + { + std::wstring default_dirs; + if(!new_settings->getValue(L"default_dirs", &default_dirs) ) + new_settings->getValue(L"default_dirs_def", &default_dirs); + + if(!default_dirs.empty()) + { + std::vector def_dirs_toks; + Tokenize(default_dirs, def_dirs_toks, L";"); + str_map args; + for(size_t i=0;idestroy(curr_settings); Server->destroy(new_settings); @@ -1523,6 +1564,7 @@ void ClientConnector::updateSettings(const std::string &pData) void ClientConnector::replaceSettings(const std::string &pData) { ISettingsReader *new_settings=Server->createMemorySettingsReader(pData); + std::wstring ncname=new_settings->getValue(L"computername", L""); if(!ncname.empty() && ncname!=IndexThread::getFileSrv()->getServerName()) { @@ -1531,6 +1573,7 @@ void ClientConnector::replaceSettings(const std::string &pData) data.addVoidPtr(NULL); IndexThread::getMsgPipe()->Write(data.getDataPtr(), data.getDataSize()); } + Server->destroy(new_settings); IFile *sf=Server->openFile("urbackup/data/settings.cfg", MODE_WRITE); if(sf==NULL) diff --git a/urbackup/ClientService.h b/urbackup/ClientService.h index d8d9a79f..faf93cb3 100644 --- a/urbackup/ClientService.h +++ b/urbackup/ClientService.h @@ -29,7 +29,7 @@ public: private: bool checkPassword(const std::wstring &cmd); void getBackupDirs(int version=0); - bool saveBackupDirs(str_map &args); + bool saveBackupDirs(str_map &args, bool server_default=false); void updateLastBackup(void); void getBackupStatus(void); std::string replaceChars(std::string in); diff --git a/urbackup/clientdao.cpp b/urbackup/clientdao.cpp index 97e06b69..e480166f 100644 --- a/urbackup/clientdao.cpp +++ b/urbackup/clientdao.cpp @@ -211,7 +211,8 @@ std::vector ClientDAO::getBackupDirs(void) dir.tname=res[i][L"name"]; dir.path=res[i][L"path"]; - ret.push_back(dir); + if(dir.tname!=L"*") + ret.push_back(dir); } return ret; } diff --git a/urbackup/server_settings.cpp b/urbackup/server_settings.cpp index ec86ba1b..d72f63ba 100644 --- a/urbackup/server_settings.cpp +++ b/urbackup/server_settings.cpp @@ -38,6 +38,7 @@ std::vector getSettingsList(void) ret.push_back(L"backup_window"); ret.push_back(L"exclude_files"); ret.push_back(L"computername"); + ret.push_back(L"default_dirs"); return ret; } @@ -157,6 +158,7 @@ void ServerSettings::readSettingsDefault(void) settings.max_active_clients=settings_default->getValue("max_active_clients", 100); settings.max_sim_backups=settings_default->getValue("max_sim_backups", 10); settings.exclude_files=settings_default->getValue(L"exclude_files", L""); + settings.default_dirs=settings_default->getValue(L"default_dirs", L""); } void ServerSettings::readSettingsClient(void) @@ -215,6 +217,9 @@ void ServerSettings::readSettingsClient(void) swtmp=settings_client->getValue(L"exclude_files", L""); if(!swtmp.empty()) settings.exclude_files=swtmp; + swtmp=settings_client->getValue(L"default_dirs", L""); + if(!swtmp.empty()) + settings.default_dirs=swtmp; stmp=settings_client->getValue("overwrite", ""); if(!stmp.empty()) diff --git a/urbackup/server_settings.h b/urbackup/server_settings.h index b24d3375..fe7ff3ff 100644 --- a/urbackup/server_settings.h +++ b/urbackup/server_settings.h @@ -30,6 +30,7 @@ struct SSettings std::string backup_window; std::wstring computername; std::wstring exclude_files; + std::wstring default_dirs; }; struct STimeSpan diff --git a/urbackup/serverinterface/settings.cpp b/urbackup/serverinterface/settings.cpp index 9057083b..e7c6be69 100644 --- a/urbackup/serverinterface/settings.cpp +++ b/urbackup/serverinterface/settings.cpp @@ -42,6 +42,7 @@ JSON::Object getJSONClientSettings(ServerSettings &settings) ret.set("backup_window", settings.getSettings()->backup_window); ret.set("computername", settings.getSettings()->computername); ret.set("exclude_files", settings.getSettings()->exclude_files); + ret.set("default_dirs", settings.getSettings()->default_dirs); return ret; }