From 0321b46a28dc73fb393453a0b08445d7638a1513 Mon Sep 17 00:00:00 2001 From: Robert Nelson Date: Wed, 11 Oct 2006 09:11:55 +0000 Subject: [PATCH] Fix Windows' daemons so that messages print to stdout if not running as a service. Add daemon name to trace file name (eg bacula-dir.trace). Fix environment variable expansion in directory names on Windows. Fix autochanger support in fill command. Update SQL scripts. Fix daemon usage displays. Cleanup bacula-dir.conf template. Install openssl.cnf. git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@3543 91ce42f0-d328-0410-95d8-f526ca767f89 --- .../win32/cats/create_postgresql_database.sql | 2 +- bacula/src/win32/cats/drop_mysql_tables.sql | 3 +- .../cats/grant_postgresql_privileges.sql | 64 +++--- bacula/src/win32/cats/make_mysql_tables.sql | 198 ++++++++++-------- bacula/src/win32/cats/update_mysql_tables.cmd | 15 +- bacula/src/win32/cats/update_mysql_tables.sql | 57 +++-- bacula/src/win32/dird/dird.vcproj | 168 +++++++-------- bacula/src/win32/dird/winbacula.h | 11 +- bacula/src/win32/dird/winmain.cpp | 61 +++--- bacula/src/win32/filed/baculafd.vcproj | 60 +++--- bacula/src/win32/filed/winmain.cpp | 63 +++--- bacula/src/win32/installer/bacula-dir.conf.in | 29 +-- bacula/src/win32/installer/winbacula.nsi | 9 + bacula/src/win32/libwin32/winbacula.h | 8 +- bacula/src/win32/stored/baculasd/winbacula.h | 8 +- bacula/src/win32/stored/baculasd/winmain.cpp | 63 +++--- 16 files changed, 418 insertions(+), 401 deletions(-) diff --git a/bacula/src/win32/cats/create_postgresql_database.sql b/bacula/src/win32/cats/create_postgresql_database.sql index 2dec4e48c3..bebc25138d 100644 --- a/bacula/src/win32/cats/create_postgresql_database.sql +++ b/bacula/src/win32/cats/create_postgresql_database.sql @@ -1,2 +1,2 @@ -CREATE DATABASE bacula $ENCODING; +CREATE DATABASE bacula ENCODING 'SQL_ASCII'; ALTER DATABASE bacula SET datestyle TO 'ISO, YMD'; diff --git a/bacula/src/win32/cats/drop_mysql_tables.sql b/bacula/src/win32/cats/drop_mysql_tables.sql index 562a50b237..b57d7e5029 100644 --- a/bacula/src/win32/cats/drop_mysql_tables.sql +++ b/bacula/src/win32/cats/drop_mysql_tables.sql @@ -9,7 +9,6 @@ DROP TABLE IF EXISTS File; DROP TABLE IF EXISTS Client; DROP TABLE IF EXISTS Job; DROP TABLE IF EXISTS Media; -DROP TABLE IF EXISTS MAC; DROP TABLE IF EXISTS JobMedia; DROP TABLE IF EXISTS Pool; DROP TABLE IF EXISTS MultiVolume; @@ -22,4 +21,6 @@ DROP TABLE IF EXISTS UnsavedFiles; DROP TABLE IF EXISTS CDImages; DROP TABLE IF EXISTS Status; DROP TABLE IF EXISTS MAC; +DROP TABLE IF EXISTS Log; DROP TABLE IF EXISTS Location; +DROP TABLE IF EXISTS LocationLog; diff --git a/bacula/src/win32/cats/grant_postgresql_privileges.sql b/bacula/src/win32/cats/grant_postgresql_privileges.sql index 2737efcc02..3a73f6d2c5 100644 --- a/bacula/src/win32/cats/grant_postgresql_privileges.sql +++ b/bacula/src/win32/cats/grant_postgresql_privileges.sql @@ -1,37 +1,37 @@ -create user ${USER}; +create user bacula; -- for tables -grant all on unsavedfiles to ${USER}; -grant all on basefiles to ${USER}; -grant all on jobmedia to ${USER}; -grant all on file to ${USER}; -grant all on job to ${USER}; -grant all on media to ${USER}; -grant all on client to ${USER}; -grant all on pool to ${USER}; -grant all on fileset to ${USER}; -grant all on path to ${USER}; -grant all on filename to ${USER}; -grant all on counters to ${USER}; -grant all on version to ${USER}; -grant all on cdimages to ${USER}; -grant all on mediatype to ${USER}; -grant all on storage to ${USER}; -grant all on device to ${USER}; -grant all on status to ${USER}; +grant all on unsavedfiles to bacula; +grant all on basefiles to bacula; +grant all on jobmedia to bacula; +grant all on file to bacula; +grant all on job to bacula; +grant all on media to bacula; +grant all on client to bacula; +grant all on pool to bacula; +grant all on fileset to bacula; +grant all on path to bacula; +grant all on filename to bacula; +grant all on counters to bacula; +grant all on version to bacula; +grant all on cdimages to bacula; +grant all on mediatype to bacula; +grant all on storage to bacula; +grant all on device to bacula; +grant all on status to bacula; -- for sequences on those tables -grant select, update on filename_filenameid_seq to ${USER}; -grant select, update on path_pathid_seq to ${USER}; -grant select, update on fileset_filesetid_seq to ${USER}; -grant select, update on pool_poolid_seq to ${USER}; -grant select, update on client_clientid_seq to ${USER}; -grant select, update on media_mediaid_seq to ${USER}; -grant select, update on job_jobid_seq to ${USER}; -grant select, update on file_fileid_seq to ${USER}; -grant select, update on jobmedia_jobmediaid_seq to ${USER}; -grant select, update on basefiles_baseid_seq to ${USER}; -grant select, update on storage_storageid_seq to ${USER}; -grant select, update on mediatype_mediatypeid_seq to ${USER}; -grant select, update on device_deviceid_seq to ${USER}; +grant select, update on filename_filenameid_seq to bacula; +grant select, update on path_pathid_seq to bacula; +grant select, update on fileset_filesetid_seq to bacula; +grant select, update on pool_poolid_seq to bacula; +grant select, update on client_clientid_seq to bacula; +grant select, update on media_mediaid_seq to bacula; +grant select, update on job_jobid_seq to bacula; +grant select, update on file_fileid_seq to bacula; +grant select, update on jobmedia_jobmediaid_seq to bacula; +grant select, update on basefiles_baseid_seq to bacula; +grant select, update on storage_storageid_seq to bacula; +grant select, update on mediatype_mediatypeid_seq to bacula; +grant select, update on device_deviceid_seq to bacula; diff --git a/bacula/src/win32/cats/make_mysql_tables.sql b/bacula/src/win32/cats/make_mysql_tables.sql index 2d2e7fc5dc..4f6833f1fe 100644 --- a/bacula/src/win32/cats/make_mysql_tables.sql +++ b/bacula/src/win32/cats/make_mysql_tables.sql @@ -22,13 +22,13 @@ CREATE TABLE Path ( CREATE TABLE File ( FileId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - FileIndex INTEGER UNSIGNED NOT NULL DEFAULT 0, + FileIndex INTEGER UNSIGNED DEFAULT 0, JobId INTEGER UNSIGNED NOT NULL REFERENCES Job, PathId INTEGER UNSIGNED NOT NULL REFERENCES Path, FilenameId INTEGER UNSIGNED NOT NULL REFERENCES Filename, - MarkId INTEGER UNSIGNED NOT NULL DEFAULT 0, + MarkId INTEGER UNSIGNED DEFAULT 0, LStat TINYBLOB NOT NULL, - MD5 TINYBLOB NOT NULL, + MD5 TINYBLOB, PRIMARY KEY(FileId), INDEX (JobId), INDEX (JobId, PathId, FilenameId) @@ -62,8 +62,8 @@ CREATE TABLE Storage ( CREATE TABLE Device ( DeviceId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Name TINYBLOB NOT NULL, - MediaTypeId INTEGER UNSIGNED NOT NULL REFERENCES MediaType, - StorageId INTEGER UNSIGNED NOT NULL REFERENCES Storage, + MediaTypeId INTEGER UNSIGNED DEFAULT 0 REFERENCES MediaType, + StorageId INTEGER UNSIGNED DEFAULT 0 REFERENCES Storage, DevMounts INTEGER UNSIGNED DEFAULT 0, DevReadBytes BIGINT UNSIGNED DEFAULT 0, DevWriteBytes BIGINT UNSIGNED DEFAULT 0, @@ -85,50 +85,56 @@ CREATE TABLE Job ( Name TINYBLOB NOT NULL, Type BINARY(1) NOT NULL, Level BINARY(1) NOT NULL, - ClientId INTEGER NULL REFERENCES Client, + ClientId INTEGER DEFAULT 0 REFERENCES Client, JobStatus BINARY(1) NOT NULL, - SchedTime DATETIME NOT NULL, - StartTime DATETIME NULL, - EndTime DATETIME NULL, - JobTDate BIGINT UNSIGNED NOT NULL, - VolSessionId INTEGER UNSIGNED NOT NULL DEFAULT 0, - VolSessionTime INTEGER UNSIGNED NOT NULL DEFAULT 0, - JobFiles INTEGER UNSIGNED NOT NULL DEFAULT 0, - JobBytes BIGINT UNSIGNED NOT NULL DEFAULT 0, - JobErrors INTEGER UNSIGNED NOT NULL DEFAULT 0, - JobMissingFiles INTEGER UNSIGNED NOT NULL DEFAULT 0, - PoolId INTEGER UNSIGNED NULL REFERENCES Pool, - FileSetId INTEGER UNSIGNED NULL REFERENCES FileSet, - PurgedFiles TINYINT NOT NULL DEFAULT 0, - HasBase TINYINT NOT NULL DEFAULT 0, + SchedTime DATETIME DEFAULT 0, + StartTime DATETIME DEFAULT 0, + EndTime DATETIME DEFAULT 0, + RealEndTime DATETIME DEFAULT 0, + JobTDate BIGINT UNSIGNED DEFAULT 0, + VolSessionId INTEGER UNSIGNED DEFAULT 0, + VolSessionTime INTEGER UNSIGNED DEFAULT 0, + JobFiles INTEGER UNSIGNED DEFAULT 0, + JobBytes BIGINT UNSIGNED DEFAULT 0, + JobErrors INTEGER UNSIGNED DEFAULT 0, + JobMissingFiles INTEGER UNSIGNED DEFAULT 0, + PoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool, + FileSetId INTEGER UNSIGNED DEFAULT 0 REFERENCES FileSet, + PriorJobId INTEGER UNSIGNED DEFAULT 0 REFERENCES Job, + PurgedFiles TINYINT DEFAULT 0, + HasBase TINYINT DEFAULT 0, PRIMARY KEY(JobId), INDEX (Name(128)) ); -CREATE TABLE MAC ( - JobId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - OriginalJobId INTEGER UNSIGNED NOT NULL, - JobType BINARY(1) NOT NULL, - JobLevel BINARY(1) NOT NULL, - SchedTime DATETIME NOT NULL, - StartTime DATETIME NOT NULL, - EndTime DATETIME NOT NULL, - JobTDate BIGINT UNSIGNED NOT NULL, - PRIMARY KEY(JobId) - ); CREATE TABLE Location ( LocationId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Location TINYBLOB NOT NULL, + Cost INTEGER DEFAULT 0, + Enabled TINYINT, PRIMARY KEY(LocationId) ); +CREATE TABLE LocationLog ( + LocLogId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + Date DATETIME DEFAULT 0, + Comment BLOB NOT NULL, + MediaId INTEGER UNSIGNED DEFAULT 0 REFERENCES Media, + LocationId INTEGER UNSIGNED DEFAULT 0 REFERENCES Location, + NewVolStatus ENUM('Full', 'Archive', 'Append', 'Recycle', 'Purged', + 'Read-Only', 'Disabled', 'Error', 'Busy', 'Used', 'Cleaning') NOT NULL, + NewEnabled TINYINT, + PRIMARY KEY(LocLogId) +); + + # CREATE TABLE FileSet ( FileSetId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, FileSet TINYBLOB NOT NULL, - MD5 TINYBLOB NOT NULL, - CreateTime DATETIME NOT NULL, + MD5 TINYBLOB, + CreateTime DATETIME DEFAULT 0, PRIMARY KEY(FileSetId) ); @@ -136,15 +142,15 @@ CREATE TABLE JobMedia ( JobMediaId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, JobId INTEGER UNSIGNED NOT NULL REFERENCES Job, MediaId INTEGER UNSIGNED NOT NULL REFERENCES Media, - FirstIndex INTEGER UNSIGNED NOT NULL DEFAULT 0, - LastIndex INTEGER UNSIGNED NOT NULL DEFAULT 0, - StartFile INTEGER UNSIGNED NOT NULL DEFAULT 0, - EndFile INTEGER UNSIGNED NOT NULL DEFAULT 0, - StartBlock INTEGER UNSIGNED NOT NULL DEFAULT 0, - EndBlock INTEGER UNSIGNED NOT NULL DEFAULT 0, - VolIndex INTEGER UNSIGNED NOT NULL DEFAULT 0, - Copy INTEGER UNSIGNED NOT NULL DEFAULT 0, - Stripe INTEGER UNSIGNED NOT NULL DEFAULT 0, + FirstIndex INTEGER UNSIGNED DEFAULT 0, + LastIndex INTEGER UNSIGNED DEFAULT 0, + StartFile INTEGER UNSIGNED DEFAULT 0, + EndFile INTEGER UNSIGNED DEFAULT 0, + StartBlock INTEGER UNSIGNED DEFAULT 0, + EndBlock INTEGER UNSIGNED DEFAULT 0, + VolIndex INTEGER UNSIGNED DEFAULT 0, + Copy INTEGER UNSIGNED DEFAULT 0, + Stripe INTEGER UNSIGNED DEFAULT 0, PRIMARY KEY(JobMediaId), INDEX (JobId, MediaId) ); @@ -153,44 +159,46 @@ CREATE TABLE JobMedia ( CREATE TABLE Media ( MediaId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, VolumeName TINYBLOB NOT NULL, - Slot INTEGER NOT NULL DEFAULT 0, - PoolId INTEGER UNSIGNED NOT NULL REFERENCES Pool, + Slot INTEGER DEFAULT 0, + PoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool, MediaType TINYBLOB NOT NULL, - MediaTypeId INTEGER UNSIGNED NOT NULL REFERENCES MediaType, - LabelType TINYINT NOT NULL DEFAULT 0, - FirstWritten DATETIME NULL, - LastWritten DATETIME NULL, - LabelDate DATETIME NULL, - VolJobs INTEGER UNSIGNED NOT NULL DEFAULT 0, - VolFiles INTEGER UNSIGNED NOT NULL DEFAULT 0, - VolBlocks INTEGER UNSIGNED NOT NULL DEFAULT 0, - VolMounts INTEGER UNSIGNED NOT NULL DEFAULT 0, - VolBytes BIGINT UNSIGNED NOT NULL DEFAULT 0, - VolParts INTEGER UNSIGNED NOT NULL DEFAULT 0, - VolErrors INTEGER UNSIGNED NOT NULL DEFAULT 0, - VolWrites INTEGER UNSIGNED NOT NULL DEFAULT 0, - VolCapacityBytes BIGINT UNSIGNED NOT NULL, + MediaTypeId INTEGER UNSIGNED DEFAULT 0 REFERENCES MediaType, + LabelType TINYINT DEFAULT 0, + FirstWritten DATETIME DEFAULT 0, + LastWritten DATETIME DEFAULT 0, + LabelDate DATETIME DEFAULT 0, + VolJobs INTEGER UNSIGNED DEFAULT 0, + VolFiles INTEGER UNSIGNED DEFAULT 0, + VolBlocks INTEGER UNSIGNED DEFAULT 0, + VolMounts INTEGER UNSIGNED DEFAULT 0, + VolBytes BIGINT UNSIGNED DEFAULT 0, + VolParts INTEGER UNSIGNED DEFAULT 0, + VolErrors INTEGER UNSIGNED DEFAULT 0, + VolWrites INTEGER UNSIGNED DEFAULT 0, + VolCapacityBytes BIGINT UNSIGNED DEFAULT 0, VolStatus ENUM('Full', 'Archive', 'Append', 'Recycle', 'Purged', 'Read-Only', 'Disabled', 'Error', 'Busy', 'Used', 'Cleaning') NOT NULL, - Recycle TINYINT NOT NULL DEFAULT 0, - VolRetention BIGINT UNSIGNED NOT NULL DEFAULT 0, - VolUseDuration BIGINT UNSIGNED NOT NULL DEFAULT 0, - MaxVolJobs INTEGER UNSIGNED NOT NULL DEFAULT 0, - MaxVolFiles INTEGER UNSIGNED NOT NULL DEFAULT 0, - MaxVolBytes BIGINT UNSIGNED NOT NULL DEFAULT 0, - InChanger TINYINT NOT NULL DEFAULT 0, - StorageId INTEGER UNSIGNED NOT NULL REFERENCES Storage, - DeviceId INTEGER UNSIGNED NOT NULL REFERENCES Device, - MediaAddressing TINYINT NOT NULL DEFAULT 0, - VolReadTime BIGINT UNSIGNED NOT NULL DEFAULT 0, - VolWriteTime BIGINT UNSIGNED NOT NULL DEFAULT 0, - EndFile INTEGER UNSIGNED NOT NULL DEFAULT 0, - EndBlock INTEGER UNSIGNED NOT NULL DEFAULT 0, - LocationId INTEGER UNSIGNED NOT NULL REFERENCES Location, + Enabled TINYINT DEFAULT 1, + Recycle TINYINT DEFAULT 0, + VolRetention BIGINT UNSIGNED DEFAULT 0, + VolUseDuration BIGINT UNSIGNED DEFAULT 0, + MaxVolJobs INTEGER UNSIGNED DEFAULT 0, + MaxVolFiles INTEGER UNSIGNED DEFAULT 0, + MaxVolBytes BIGINT UNSIGNED DEFAULT 0, + InChanger TINYINT DEFAULT 0, + StorageId INTEGER UNSIGNED DEFAULT 0 REFERENCES Storage, + DeviceId INTEGER UNSIGNED DEFAULT 0 REFERENCES Device, + MediaAddressing TINYINT DEFAULT 0, + VolReadTime BIGINT UNSIGNED DEFAULT 0, + VolWriteTime BIGINT UNSIGNED DEFAULT 0, + EndFile INTEGER UNSIGNED DEFAULT 0, + EndBlock INTEGER UNSIGNED DEFAULT 0, + LocationId INTEGER UNSIGNED DEFAULT 0 REFERENCES Location, RecycleCount INTEGER UNSIGNED DEFAULT 0, - InitialWrite DATETIME NULL, + InitialWrite DATETIME DEFAULT 0, ScratchPoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool, RecyclePoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool, + Comment BLOB, PRIMARY KEY(MediaId), INDEX (PoolId) ); @@ -202,20 +210,20 @@ CREATE INDEX inx8 ON Media (PoolId); CREATE TABLE Pool ( PoolId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, Name TINYBLOB NOT NULL, - NumVols INTEGER UNSIGNED NOT NULL DEFAULT 0, - MaxVols INTEGER UNSIGNED NOT NULL DEFAULT 0, - UseOnce TINYINT NOT NULL, - UseCatalog TINYINT NOT NULL, + NumVols INTEGER UNSIGNED DEFAULT 0, + MaxVols INTEGER UNSIGNED DEFAULT 0, + UseOnce TINYINT DEFAULT 0, + UseCatalog TINYINT DEFAULT 0, AcceptAnyVolume TINYINT DEFAULT 0, - VolRetention BIGINT UNSIGNED NOT NULL, - VolUseDuration BIGINT UNSIGNED NOT NULL, - MaxVolJobs INTEGER UNSIGNED NOT NULL DEFAULT 0, - MaxVolFiles INTEGER UNSIGNED NOT NULL DEFAULT 0, - MaxVolBytes BIGINT UNSIGNED NOT NULL, + VolRetention BIGINT UNSIGNED DEFAULT 0, + VolUseDuration BIGINT UNSIGNED DEFAULT 0, + MaxVolJobs INTEGER UNSIGNED DEFAULT 0, + MaxVolFiles INTEGER UNSIGNED DEFAULT 0, + MaxVolBytes BIGINT UNSIGNED DEFAULT 0, AutoPrune TINYINT DEFAULT 0, Recycle TINYINT DEFAULT 0, PoolType ENUM('Backup', 'Copy', 'Cloned', 'Archive', 'Migration', 'Scratch') NOT NULL, - LabelType TINYINT NOT NULL DEFAULT 0, + LabelType TINYINT DEFAULT 0, LabelFormat TINYBLOB, Enabled TINYINT DEFAULT 1, ScratchPoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool, @@ -234,12 +242,22 @@ CREATE TABLE Client ( Name TINYBLOB NOT NULL, Uname TINYBLOB NOT NULL, /* full uname -a of client */ AutoPrune TINYINT DEFAULT 0, - FileRetention BIGINT UNSIGNED NOT NULL, - JobRetention BIGINT UNSIGNED NOT NULL, + FileRetention BIGINT UNSIGNED DEFAULT 0, + JobRetention BIGINT UNSIGNED DEFAULT 0, UNIQUE (Name(128)), PRIMARY KEY(ClientId) ); +CREATE TABLE Log ( + LogId INTEGER UNSIGNED AUTO_INCREMENT, + JobId INTEGER UNSIGNED DEFAULT 0 REFERENCES Job, + Time DATETIME DEFAULT 0, + LogText BLOB NOT NULL, + PRIMARY KEY(LogId), + INDEX (JobId) + ); + + CREATE TABLE BaseFiles ( BaseId INTEGER UNSIGNED AUTO_INCREMENT, BaseJobId INTEGER UNSIGNED NOT NULL REFERENCES Job, @@ -261,9 +279,9 @@ CREATE TABLE UnsavedFiles ( CREATE TABLE Counters ( Counter TINYBLOB NOT NULL, - MinValue INTEGER, - MaxValue INTEGER, - CurrentValue INTEGER, + MinValue INTEGER DEFAULT 0, + MaxValue INTEGER DEFAULT 0, + CurrentValue INTEGER DEFAULT 0, WrapCounter TINYBLOB NOT NULL, PRIMARY KEY (Counter(128)) ); @@ -306,4 +324,4 @@ CREATE TABLE Version ( ); -- Initialize Version -INSERT INTO Version (VersionId) VALUES (9); +INSERT INTO Version (VersionId) VALUES (10); diff --git a/bacula/src/win32/cats/update_mysql_tables.cmd b/bacula/src/win32/cats/update_mysql_tables.cmd index e94a3ab98d..3baf987091 100644 --- a/bacula/src/win32/cats/update_mysql_tables.cmd +++ b/bacula/src/win32/cats/update_mysql_tables.cmd @@ -1,18 +1,19 @@ +@echo off rem rem Script to update MySQL tables from version 1.38 to 1.39 rem -echo " " -echo "This script will update a Bacula MySQL database from version 9 to 9" -echo "Depending on the size of your database," -echo "this script may take several minutes to run." -echo " " +echo. +echo This script will update a Bacula MySQL database from version 9 to 10 +echo Depending on the size of your database, +echo this script may take several minutes to run. +echo. -if %SQL_BINDIR%/mysql $* -f < update_mysql_tables.sql +"%SQL_BINDIR%\mysql" %* -f -u bacula --password=bacula bacula < update_mysql_tables.sql set RESULT=%ERRORLEVEL% if %RESULT% GTR 0 goto :ERROR echo "Update of Bacula MySQL tables succeeded." exit /b 0 :ERROR -echo "Update of Bacula MySQL tables failed." +echo Update of Bacula MySQL tables failed. exit /b %RESULT% diff --git a/bacula/src/win32/cats/update_mysql_tables.sql b/bacula/src/win32/cats/update_mysql_tables.sql index c758097df5..b48b885ec9 100644 --- a/bacula/src/win32/cats/update_mysql_tables.sql +++ b/bacula/src/win32/cats/update_mysql_tables.sql @@ -1,5 +1,39 @@ USE bacula; +DROP TABLE IF EXISTS MAC; +DROP TABLE IF EXISTS Log; +DROP TABLE IF EXISTS Location; +DROP TABLE IF EXISTS LocationLog; + +CREATE TABLE Log ( + LogId INTEGER UNSIGNED AUTO_INCREMENT, + JobId INTEGER UNSIGNED DEFAULT 0 REFERENCES Job, + Time DATETIME DEFAULT 0, + LogText BLOB NOT NULL, + PRIMARY KEY(LogId), + INDEX (JobId) + ); + +CREATE TABLE Location ( + LocationId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + Location TINYBLOB NOT NULL, + Cost INTEGER DEFAULT 0, + Enabled TINYINT, + PRIMARY KEY(LocationId) + ); + +CREATE TABLE LocationLog ( + LocLogId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + Date DATETIME DEFAULT 0, + Comment BLOB, + MediaId INTEGER UNSIGNED DEFAULT 0 REFERENCES Media, + LocationId INTEGER UNSIGNED DEFAULT 0 REFERENCES Location, + NewVolStatus ENUM('Full', 'Archive', 'Append', 'Recycle', 'Purged', + 'Read-Only', 'Disabled', 'Error', 'Busy', 'Used', 'Cleaning') NOT NULL, + NewEnabled TINYINT, + PRIMARY KEY(LocLogId) +); + ALTER TABLE Media ADD COLUMN MediaTypeId INTEGER UNSIGNED DEFAULT 0 REFERENCES MediaType; ALTER TABLE Media ADD COLUMN DeviceId INTEGER UNSIGNED DEFAULT 0 REFERENCES Device; ALTER TABLE Media ADD COLUMN LocationId INTEGER UNSIGNED DEFAULT 0 REFERENCES Location; @@ -7,26 +41,15 @@ ALTER TABLE Media ADD COLUMN RecycleCount INTEGER UNSIGNED DEFAULT 0; ALTER TABLE Media ADD COLUMN InitialWrite DATETIME DEFAULT 0; ALTER TABLE Media ADD COLUMN ScratchPoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool; ALTER TABLE Media ADD COLUMN RecyclePoolId INTEGER UNSIGNED DEFAULT 0 REFERENCES Pool; +ALTER TABLE Media ADD COLUMN Enabled TINYINT DEFAULT 1; +ALTER TABLE Media ADD COLUMN Comment BLOB; +ALTER TABLE JobMedia DROP COLUMN Stripe; -CREATE TABLE MAC ( - JobId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - OriginalJobId INTEGER UNSIGNED NOT NULL, - JobType BINARY(1) NOT NULL, - JobLevel BINARY(1) NOT NULL, - SchedTime DATETIME NOT NULL, - StartTime DATETIME NOT NULL, - EndTime DATETIME NOT NULL, - JobTDate BIGINT UNSIGNED NOT NULL, - PRIMARY KEY(JobId) - ); +ALTER TABLE Job ADD COLUMN PriorJobId INTEGER UNSIGNED DEFAULT 0 REFERENCES Job; +ALTER TABLE Job ADD COLUMN RealEndTime DATETIME DEFAULT 0; -CREATE TABLE Location ( - LocationId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, - Location TINYBLOB NOT NULL, - PRIMARY KEY(LocationId) - ); DELETE FROM Version; -INSERT INTO Version (VersionId) VALUES (9); +INSERT INTO Version (VersionId) VALUES (10); diff --git a/bacula/src/win32/dird/dird.vcproj b/bacula/src/win32/dird/dird.vcproj index c50661d15c..5882733306 100644 --- a/bacula/src/win32/dird/dird.vcproj +++ b/bacula/src/win32/dird/dird.vcproj @@ -51,8 +51,8 @@ UsePrecompiledHeader="0" BrowseInformation="1" WarningLevel="3" - Detect64BitPortabilityProblems="false" SuppressStartupBanner="true" + Detect64BitPortabilityProblems="false" DebugInformationFormat="4" /> + + diff --git a/bacula/src/win32/filed/winmain.cpp b/bacula/src/win32/filed/winmain.cpp index a6bf960348..85b941cc94 100644 --- a/bacula/src/win32/filed/winmain.cpp +++ b/bacula/src/win32/filed/winmain.cpp @@ -57,6 +57,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char *szCmdLine = CmdLine; char *wordPtr, *tempPtr; int i, quote; + DWORD dwCharsWritten; /* Save the application instance and main thread id */ hAppInstance = hInstance; @@ -135,7 +136,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, /* * Now process Windows command line options */ - bool argfound = false; for (i = 0; i < (int)strlen(szCmdLine); i++) { if (szCmdLine[i] <= ' ') { continue; @@ -145,85 +145,80 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, break; } - argfound = true; - /* Now check for command-line arguments */ /* /silent install quietly -- no prompts */ - if (strnicmp(&szCmdLine[i], "/silent", strlen("/silent")) == 0) { + if (strnicmp(&szCmdLine[i], BaculaSilent, sizeof(BaculaSilent) - 1) == 0) { silent = true; - i += strlen("/silent"); + i += sizeof(BaculaSilent) - 1; continue; } /* /service start service */ - if (strnicmp(&szCmdLine[i], BaculaRunService, strlen(BaculaRunService)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaRunService, sizeof(BaculaRunService) - 1) == 0) { /* Run Bacula as a service */ return bacService::BaculaServiceMain(); } /* /run (this is the default if no command line arguments) */ - if (strnicmp(&szCmdLine[i], BaculaRunAsUserApp, strlen(BaculaRunAsUserApp)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaRunAsUserApp, sizeof(BaculaRunAsUserApp) - 1) == 0) { /* Bacula is being run as a user-level program */ + if (!AttachConsole(ATTACH_PARENT_PROCESS)) { + AllocConsole(); + } + WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "\r\n", 2, &dwCharsWritten, NULL); + return BaculaAppMain(); } /* /install */ - if (strnicmp(&szCmdLine[i], BaculaInstallService, strlen(BaculaInstallService)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaInstallService, sizeof(BaculaInstallService) - 1) == 0) { /* Install Bacula as a service */ - bacService::InstallService(&szCmdLine[i + strlen(BaculaInstallService)]); - i += strlen(BaculaInstallService); - continue; + return bacService::InstallService(&szCmdLine[i + sizeof(BaculaInstallService) - 1]); } /* /remove */ - if (strnicmp(&szCmdLine[i], BaculaRemoveService, strlen(BaculaRemoveService)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaRemoveService, sizeof(BaculaRemoveService) - 1) == 0) { /* Remove the Bacula service */ - bacService::RemoveService(); - i += strlen(BaculaRemoveService); - continue; + return bacService::RemoveService(); } /* /about */ - if (strnicmp(&szCmdLine[i], BaculaShowAbout, strlen(BaculaShowAbout)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaShowAbout, sizeof(BaculaShowAbout) - 1) == 0) { /* Show Bacula's about box */ - bacService::ShowAboutBox(); - i += strlen(BaculaShowAbout); - continue; + return bacService::ShowAboutBox(); } /* /status */ - if (strnicmp(&szCmdLine[i], BaculaShowStatus, strlen(BaculaShowStatus)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaShowStatus, sizeof(BaculaShowStatus) - 1) == 0) { /* Show Bacula's status box */ - bacService::ShowStatus(); - i += strlen(BaculaShowStatus); - continue; + return bacService::ShowStatus(); } /* /kill */ - if (strnicmp(&szCmdLine[i], BaculaKillRunningCopy, strlen(BaculaKillRunningCopy)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaKillRunningCopy, sizeof(BaculaKillRunningCopy) - 1) == 0) { /* Kill running copy of Bacula */ - bacService::KillRunningCopy(); - i += strlen(BaculaKillRunningCopy); - continue; + return bacService::KillRunningCopy(); } /* /help */ - if (strnicmp(&szCmdLine[i], BaculaShowHelp, strlen(BaculaShowHelp)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaShowHelp, sizeof(BaculaShowHelp) - 1) == 0) { MessageBox(NULL, BaculaUsageText, _("Bacula Usage"), MB_OK|MB_ICONINFORMATION); - i += strlen(BaculaShowHelp); - continue; + return 0; } MessageBox(NULL, szCmdLine, _("Bad Command Line Options"), MB_OK); /* Show the usage dialog */ MessageBox(NULL, BaculaUsageText, _("Bacula Usage"), MB_OK | MB_ICONINFORMATION); - break; + + return 1; } /* If no arguments were given then just run */ - if (!argfound) { - BaculaAppMain(); + if (!AttachConsole(ATTACH_PARENT_PROCESS)) { + AllocConsole(); } - return 0; + WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "\r\n", 2, &dwCharsWritten, NULL); + + return BaculaAppMain(); } diff --git a/bacula/src/win32/installer/bacula-dir.conf.in b/bacula/src/win32/installer/bacula-dir.conf.in index 52a6d64922..0ed0dfae33 100644 --- a/bacula/src/win32/installer/bacula-dir.conf.in +++ b/bacula/src/win32/installer/bacula-dir.conf.in @@ -39,7 +39,7 @@ JobDefs { # # Define the main nightly save backup job -# By default, this job will back up to disk in /tmp +# By default, this job will back up to disk in C:/tmp Job { Name = "Client1" JobDefs = "DefaultJob" @@ -48,7 +48,7 @@ Job { #Job { # Name = "Client2" -# Client = @client_address@2-fd +# Client = @client_name@2 # JobDefs = "DefaultJob" # Write Bootstrap = "@working_dir@\\Client2.bsr" #} @@ -61,9 +61,9 @@ Job { FileSet="Catalog" Schedule = "WeeklyCycleAfterBackup" # This creates an ASCII copy of the catalog - RunBeforeJob = "@bin_dir@\\make_catalog_backup bacula bacula" + RunBeforeJob = "\"@bin_dir@\\make_catalog_backup\" bacula bacula" # This deletes the copy of the catalog - RunAfterJob = "@bin_dir@\\delete_catalog_backup" + RunAfterJob = "\"@bin_dir@\\delete_catalog_backup\"" Write Bootstrap = "@working_dir@\\BackupCatalog.bsr" Priority = 11 # run after main backup } @@ -80,7 +80,7 @@ Job { Storage = File Pool = Default Messages = Standard - Where = /tmp/bacula-restores + Where = C:\\tmp\\bacula-restores } @@ -179,7 +179,7 @@ Client { # Definition of file storage device Storage { Name = File -# Do not use "localhost" here +# Do not use "localhost" here Address = @storage_address@ # N.B. Use a fully qualified name here SDPort = @storage_port@ Password = "@storage_password@" @@ -212,17 +212,6 @@ Storage { # MediaType = "8mm" #} -# Definition of DVD storage device -#Storage { -# Name = "DVD" -# Do not use "localhost" here -# Address = @storage_address@ # N.B. Use a fully qualified name here -# SDPort = @storage_port@ -# Password = "@storage_password@" -# Device = "DVD Writer" -# MediaType = "DVD" -#} - # Generic catalog service Catalog { @@ -239,8 +228,8 @@ Messages { # to replace the %r in the from field (-f part) with a single valid # email address in both the mailcommand and the operatorcommand. # - mailcommand = "@bin_dir@\\bsmtp -h @smtp_host@ -f \"\(Bacula\) %r\" -s \"Bacula: %t %e of %c %l\" %r" - operatorcommand = "@bin_dir@\\bsmtp -h @smtp_host@ -f \"\(Bacula\) %r\" -s \"Bacula: Intervention needed for %j\" %r" + mailcommand = "\"@bin_dir@\\bsmtp\" -h @smtp_host@ -f \"\(Bacula\) %r\" -s \"Bacula: %t %e of %c %l\" %r" + operatorcommand = "\"@bin_dir@\\bsmtp\" -h @smtp_host@ -f \"\(Bacula\) %r\" -s \"Bacula: Intervention needed for %j\" %r" mail = @job_email@ = all, !skipped operator = @job_email@ = mount console = all, !skipped, !saved @@ -257,7 +246,7 @@ Messages { # Message delivery for daemon messages (no job). Messages { Name = Daemon - mailcommand = "@bin_dir@\\bsmtp -h @smtp_host@ -f \"\(Bacula\) %r\" -s \"Bacula daemon message\" %r" + mailcommand = "\"@bin_dir@\\bsmtp\" -h @smtp_host@ -f \"\(Bacula\) %r\" -s \"Bacula daemon message\" %r" mail = @job_email@ = all, !skipped console = all, !skipped, !saved append = "@working_dir@\\log" = all, !skipped diff --git a/bacula/src/win32/installer/winbacula.nsi b/bacula/src/win32/installer/winbacula.nsi index c403c810c0..565076f9e7 100644 --- a/bacula/src/win32/installer/winbacula.nsi +++ b/bacula/src/win32/installer/winbacula.nsi @@ -345,6 +345,10 @@ Function InstallCommonFiles File "${DEPKGS_BIN}\pthreadVCE.dll" !endif !if "${BUILD_TOOLS}" == "VC8_DEBUG" + File "${VC_REDIST_DIR}\msvcm80.dll" + File "${VC_REDIST_DIR}\msvcp80.dll" + File "${VC_REDIST_DIR}\msvcr80.dll" + File "${VC_REDIST_DIR}\Microsoft.VC80.CRT.manifest" File "${VC_REDIST_DIR}\msvcm80d.dll" File "${VC_REDIST_DIR}\msvcp80d.dll" File "${VC_REDIST_DIR}\msvcr80d.dll" @@ -360,9 +364,14 @@ Function InstallCommonFiles File "${DEPKGS_BIN}\zlib1.dll" !if "${BUILD_TOOLS}" == "VC8" File "${DEPKGS_BIN}\zlib1.dll.manifest" + File "/oname=$INSTDIR\openssl.cnf" "${DEPKGS_BIN}\..\openssl.cnf" !endif !If "${BUILD_TOOLS}" == "VC8_DEBUG" File "${DEPKGS_BIN}\zlib1.dll.manifest" + File "/oname=$INSTDIR\openssl.cnf" "${DEPKGS_BIN}\..\openssl.cnf" +!endif +!if "${BUILD_TOOLS}" == "MinGW" + File "/oname=$INSTDIR\openssl.cnf" "${DEPKGS_BIN}\..\ssl\openssl.cnf" !endif File "${DEPKGS_BIN}\openssl.exe" File "${BACULA_BIN}\bsleep.exe" diff --git a/bacula/src/win32/libwin32/winbacula.h b/bacula/src/win32/libwin32/winbacula.h index 22c655f602..7968b1da6a 100644 --- a/bacula/src/win32/libwin32/winbacula.h +++ b/bacula/src/win32/libwin32/winbacula.h @@ -49,22 +49,22 @@ extern int BaculaAppMain(); extern void LogErrorMsg(char *msg); // Standard command-line flag definitions +const char BaculaSilent[] = "/silent"; + const char BaculaRunService[] = "/service"; -const char BaculaRunServiceHelper[] = "/servicehelper"; const char BaculaRunAsUserApp[] = "/run"; +const char BaculaKillRunningCopy[] = "/kill"; const char BaculaInstallService[] = "/install"; const char BaculaRemoveService[] = "/remove"; const char BaculaShowAbout[] = "/about"; const char BaculaShowStatus[] = "/status"; -const char BaculaShowEvents[] = "/events"; -const char BaculaKillRunningCopy[] = "/kill"; const char BaculaShowHelp[] = "/help"; // Usage string -const char BaculaUsageText[] = "Bacula [/run] [/kill] [/install] [/remove] [/about] [/status] [/events]\n"; +const char BaculaUsageText[] = "Bacula [/silent] [/service] [/run] [/kill] [/install] [/remove] [/about] [/status] [/help]\n"; void LogErrorMsg(char *msg, char *fname, int lineno); #define log_error_message(msg) LogErrorMsg((msg), __FILE__, __LINE__) diff --git a/bacula/src/win32/stored/baculasd/winbacula.h b/bacula/src/win32/stored/baculasd/winbacula.h index 22c655f602..7968b1da6a 100644 --- a/bacula/src/win32/stored/baculasd/winbacula.h +++ b/bacula/src/win32/stored/baculasd/winbacula.h @@ -49,22 +49,22 @@ extern int BaculaAppMain(); extern void LogErrorMsg(char *msg); // Standard command-line flag definitions +const char BaculaSilent[] = "/silent"; + const char BaculaRunService[] = "/service"; -const char BaculaRunServiceHelper[] = "/servicehelper"; const char BaculaRunAsUserApp[] = "/run"; +const char BaculaKillRunningCopy[] = "/kill"; const char BaculaInstallService[] = "/install"; const char BaculaRemoveService[] = "/remove"; const char BaculaShowAbout[] = "/about"; const char BaculaShowStatus[] = "/status"; -const char BaculaShowEvents[] = "/events"; -const char BaculaKillRunningCopy[] = "/kill"; const char BaculaShowHelp[] = "/help"; // Usage string -const char BaculaUsageText[] = "Bacula [/run] [/kill] [/install] [/remove] [/about] [/status] [/events]\n"; +const char BaculaUsageText[] = "Bacula [/silent] [/service] [/run] [/kill] [/install] [/remove] [/about] [/status] [/help]\n"; void LogErrorMsg(char *msg, char *fname, int lineno); #define log_error_message(msg) LogErrorMsg((msg), __FILE__, __LINE__) diff --git a/bacula/src/win32/stored/baculasd/winmain.cpp b/bacula/src/win32/stored/baculasd/winmain.cpp index f40b947b5c..a42e029220 100644 --- a/bacula/src/win32/stored/baculasd/winmain.cpp +++ b/bacula/src/win32/stored/baculasd/winmain.cpp @@ -56,6 +56,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char *szCmdLine = CmdLine; char *wordPtr, *tempPtr; int i, quote; + DWORD dwCharsWritten; /* Save the application instance and main thread id */ hAppInstance = hInstance; @@ -84,7 +85,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, if (*szCmdLine != '"' && *wordPtr == '"') { szCmdLine = wordPtr + 1; } -// MessageBox(NULL, szCmdLine, "Cmdline", MB_OK); /* Build Unix style argc *argv[] */ @@ -134,7 +134,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, /* * Now process Windows command line options */ - bool argfound = false; for (i = 0; i < (int)strlen(szCmdLine); i++) { if (szCmdLine[i] <= ' ') { continue; @@ -144,85 +143,79 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, break; } - argfound = true; - /* Now check for command-line arguments */ /* /silent install quietly -- no prompts */ - if (strnicmp(&szCmdLine[i], "/silent", strlen("/silent")) == 0) { + if (strnicmp(&szCmdLine[i], BaculaSilent, sizeof(BaculaSilent) - 1) == 0) { silent = true; - i += strlen("/silent"); + i += sizeof(BaculaSilent) - 1; continue; } /* /service start service */ - if (strnicmp(&szCmdLine[i], BaculaRunService, strlen(BaculaRunService)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaRunService, sizeof(BaculaRunService) - 1) == 0) { /* Run Bacula as a service */ return bacService::BaculaServiceMain(); } /* /run (this is the default if no command line arguments) */ - if (strnicmp(&szCmdLine[i], BaculaRunAsUserApp, strlen(BaculaRunAsUserApp)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaRunAsUserApp, sizeof(BaculaRunAsUserApp) - 1) == 0) { /* Bacula is being run as a user-level program */ + if (!AttachConsole(ATTACH_PARENT_PROCESS)) { + AllocConsole(); + } + WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "\r\n", 2, &dwCharsWritten, NULL); + return BaculaAppMain(); } /* /install */ - if (strnicmp(&szCmdLine[i], BaculaInstallService, strlen(BaculaInstallService)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaInstallService, sizeof(BaculaInstallService) - 1) == 0) { /* Install Bacula as a service */ - bacService::InstallService(&szCmdLine[i + strlen(BaculaInstallService)]); - i += strlen(BaculaInstallService); - continue; + return bacService::InstallService(&szCmdLine[i + sizeof(BaculaInstallService) - 1]); } /* /remove */ - if (strnicmp(&szCmdLine[i], BaculaRemoveService, strlen(BaculaRemoveService)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaRemoveService, sizeof(BaculaRemoveService) - 1) == 0) { /* Remove the Bacula service */ - bacService::RemoveService(); - i += strlen(BaculaRemoveService); - continue; + return bacService::RemoveService(); } /* /about */ - if (strnicmp(&szCmdLine[i], BaculaShowAbout, strlen(BaculaShowAbout)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaShowAbout, sizeof(BaculaShowAbout) - 1) == 0) { /* Show Bacula's about box */ - bacService::ShowAboutBox(); - i += strlen(BaculaShowAbout); - continue; + return bacService::ShowAboutBox(); } /* /status */ - if (strnicmp(&szCmdLine[i], BaculaShowStatus, strlen(BaculaShowStatus)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaShowStatus, sizeof(BaculaShowStatus) - 1) == 0) { /* Show Bacula's status box */ - bacService::ShowStatus(); - i += strlen(BaculaShowStatus); - continue; + return bacService::ShowStatus(); } /* /kill */ - if (strnicmp(&szCmdLine[i], BaculaKillRunningCopy, strlen(BaculaKillRunningCopy)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaKillRunningCopy, sizeof(BaculaKillRunningCopy) - 1) == 0) { /* Kill running copy of Bacula */ - bacService::KillRunningCopy(); - i += strlen(BaculaKillRunningCopy); - continue; + return bacService::KillRunningCopy(); } /* /help */ - if (strnicmp(&szCmdLine[i], BaculaShowHelp, strlen(BaculaShowHelp)) == 0) { + if (strnicmp(&szCmdLine[i], BaculaShowHelp, sizeof(BaculaShowHelp) - 1) == 0) { MessageBox(NULL, BaculaUsageText, _("Bacula Usage"), MB_OK|MB_ICONINFORMATION); - i += strlen(BaculaShowHelp); - continue; + return 0; } MessageBox(NULL, szCmdLine, _("Bad Command Line Options"), MB_OK); /* Show the usage dialog */ MessageBox(NULL, BaculaUsageText, _("Bacula Usage"), MB_OK | MB_ICONINFORMATION); - break; + return 1; } /* If no arguments were given then just run */ - if (!argfound) { - BaculaAppMain(); + if (!AttachConsole(ATTACH_PARENT_PROCESS)) { + AllocConsole(); } - return 0; + WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), "\r\n", 2, &dwCharsWritten, NULL); + + return BaculaAppMain(); } -- 2.39.5