From: Kern Sibbald Date: Thu, 1 Aug 2002 15:09:53 +0000 (+0000) Subject: Fix printing of filenames containing blank in bls.c X-Git-Tag: Release-1.24~26 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=16521aa0dbf7066e2e10c47c8275c0b7878d4957;p=bacula%2Fbacula Fix printing of filenames containing blank in bls.c git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@74 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/src/dird/query.sql b/bacula/src/dird/query.sql index d820acfc19..097abe8040 100644 --- a/bacula/src/dird/query.sql +++ b/bacula/src/dird/query.sql @@ -51,14 +51,16 @@ SELECT count(*) AS Jobs, sum(JobFiles) AS Files, AND JobMedia.MediaId=Media.MediaId GROUP by VolumeName; # -:List last 10 Full Backups for a Client: +:List last 20 Full Backups for a Client: *Enter Client name: -Select JobId,Client.Name as Client,StartTime,JobFiles,JobBytes - FROM Client,Job +Select Job.JobId,Client.Name as Client,StartTime,JobFiles,JobBytes, +JobMedia.StartFile as VolFile, VolumeName + FROM Client,Job,JobMedia,Media WHERE Client.Name="%1" AND Client.ClientId=Job.ClientId AND Level='F' AND JobStatus='T' - LIMIT 10; + AND JobMedia.JobId=Job.JobId AND JobMedia.MediaId=Media.MediaId + ORDER BY JobId DESC LIMIT 20; # :List Volumes used by selected JobId: *Enter JobId: @@ -75,6 +77,7 @@ SELECT Job.JobId,VolumeName CREATE TABLE temp (JobId INTEGER UNSIGNED NOT NULL, JobTDate BIGINT UNSIGNED, ClientId INTEGER UNSIGNED, + Level CHAR, StartTime TEXT, VolumeName TEXT, StartFile INTEGER UNSIGNED, @@ -83,30 +86,44 @@ CREATE TABLE temp (JobId INTEGER UNSIGNED NOT NULL, CREATE TABLE temp2 (JobId INTEGER UNSIGNED NOT NULL, StartTime TEXT, VolumeName TEXT, + Level CHAR, StartFile INTEGER UNSIGNED, VolSessionId INTEGER UNSIGNED, VolSessionTime INTEGER UNSIGNED); -INSERT INTO temp SELECT Job.JobId,MAX(JobTDate),Job.ClientId,StartTime,VolumeName, - JobMedia.StartFile,VolSessionId,VolSessionTime +# Select last Full save +INSERT INTO temp SELECT Job.JobId,JobTDate,Job.ClientId,Job.Level, + StartTime,VolumeName,JobMedia.StartFile,VolSessionId,VolSessionTime FROM Client,Job,JobMedia,Media WHERE Client.Name="%1" AND Client.ClientId=Job.ClientId AND Level='F' AND JobStatus='T' AND JobMedia.JobId=Job.JobId AND JobMedia.MediaId=Media.MediaId - GROUP BY Job.JobTDate LIMIT 1; -INSERT INTO temp2 SELECT JobId,StartTime,VolumeName,StartFile, + ORDER BY Job.JobTDate DESC LIMIT 1; +# Copy into temp 2 +INSERT INTO temp2 SELECT JobId,StartTime,VolumeName,Level,StartFile, VolSessionId,VolSessionTime FROM temp; +# Now add subsequent incrementals INSERT INTO temp2 SELECT Job.JobId,Job.StartTime,Media.VolumeName, - JobMedia.StartFile,Job.VolSessionId,Job.VolSessionTime + Job.Level,JobMedia.StartFile,Job.VolSessionId,Job.VolSessionTime FROM Job,temp,JobMedia,Media WHERE Job.JobTDate>temp.JobTDate AND Job.ClientId=temp.ClientId - AND Level='I' AND JobStatus='T' + AND Job.Level='I' AND JobStatus='T' AND JobMedia.JobId=Job.JobId AND JobMedia.MediaId=Media.MediaId GROUP BY Job.JobId; +# list results SELECT * from temp2; !DROP TABLE temp; !DROP TABLE temp2; # +:List where a File is saved: +*Enter Filename (no path): +SELECT Job.JobId as JobId, Client.Name as Client, + CONCAT(Path.Path,Filename.Name) as Name, + StartTime,Level,JobFiles,JobBytes + FROM Client,Job,File,Filename,Path WHERE Client.ClientId=Job.ClientId + AND JobStatus='T' AND Job.JobId=File.JobId + AND Path.PathId=File.PathId AND Filename.FilenameId=File.FilenameId + AND Filename.Name='%1' LIMIT 20; diff --git a/bacula/src/stored/bls.c b/bacula/src/stored/bls.c index 9d5f498ba3..ee73913dd3 100644 --- a/bacula/src/stored/bls.c +++ b/bacula/src/stored/bls.c @@ -471,16 +471,25 @@ Warning, this Volume is a continuation of Volume %s\n", /* File Attributes stream */ if (rec->Stream == STREAM_UNIX_ATTRIBUTES) { - char *ap; - sscanf(rec->data, "%ld %d %s", &record_file_index, &type, fname); + char *ap, *fp; + sscanf(rec->data, "%ld %d", &record_file_index, &type); if (record_file_index != rec->FileIndex) { Emsg2(M_ERROR_TERM, 0, "Record header file index %ld not equal record index %ld\n", rec->FileIndex, record_file_index); } ap = rec->data; - /* Skip to attributes */ - while (*ap++ != 0) + + while (*ap++ != ' ') /* skip record file index */ + ; + while (*ap++ != ' ') /* skip type */ ; + /* Save filename and position to attributes */ + fp = fname; + while (*ap != 0) { + *fp++ = *ap++; + } + *fp = *ap++; /* terminate filename & point to attribs */ + decode_stat(ap, &statp); /* Skip to link name */ while (*ap++ != 0)