Bacula-users

Re: [Bacula-users] file listing?

2011-03-12 19:05:33
Subject: Re: [Bacula-users] file listing?
From: Dan Langille <dan AT langille DOT org>
To: ganiuszka <ganiuszka AT gmail DOT com>
Date: Sat, 12 Mar 2011 19:01:22 -0500
On 3/12/2011 9:29 AM, ganiuszka wrote:
> W dniu 11 marca 2011 21:45 użytkownik ganiuszka<ganiuszka AT gmail DOT com>  
> napisał:
>> Hi,
>> In my example jobid is putting in:
>> ... File.JobId=8...
>> but this "eight":
>>
>> base64_decode_lstat(8,File.LStat)
>>
>> is exactly eight field (encoded filesize field). I seem that you used
>> standard base64 decoder to decode eighth field. Am I right?
>>
>> Bacula lstat is encoded by using non-standard base64 algorithm. Your
>> decoded lstat shows like this:
>>
>> [dev] =>  89
>> [inodes] =>  1366434
>> [mode] =>  33200
>> [links] =>  1
>> [uid] =>  80
>> [gid] =>  91
>> [rdev] =>  5481898
>> [size] =>  315
>> [blksize] =>  16384
>> [blocks] =>  4
>> [atime] =>  1299770037
>> [mtime] =>  1299770037
>> [ctime] =>  1299770066
>> [LinkFl] =>  0
>> [flags] =>  0
>> [data] =>  2
>>
>> I do not understand every field, but most fields is clear. Now, I
>> wrote implementation of Bacula base64_decoder in PHP. I need finish it
>> and make WebGUI for this and I will share this decoder here. For this
>> I am using source code of base64 implementation in Bacula and this:
>>
>> http://old.nabble.com/The-File.LStat-field-td940366.html
>>
>> Regards.
>> gani
>>
>> 2011/3/11 Dan Langille<dan AT langille DOT org>:
>>> On 3/9/2011 5:36 PM, ganiuszka wrote:
>>>
>>>> 2011/3/9 Mike Eggleston<mikeegg1 AT mac DOT com>:
>>>>>
>>>>> Afternoon,
>>>>>
>>>>> I just noticed one of my clients had a huge incremental (level 2)
>>>>> backup. I want to see what file caused the huge increase. I tried 'list
>>>>> files jobid=20097' and though I'm shown the files, I'm not shown the
>>>>> size of each file. Is there a command or query that shows me the size
>>>>> of the file?
>>>>>
>>>>> Mike
>>>
>>>> Hi,
>>>> Here you have SQL function for PostgreSQL (I took it from bweb):
>>>>
>>>> CREATE PROCEDURAL LANGUAGE plpgsql;
>>>> BEGIN;
>>>>
>>>> CREATE OR REPLACE FUNCTION base64_decode_lstat(int4, varchar) RETURNS int8
>>>> AS $$
>>>> DECLARE
>>>> val int8;
>>>> b64 varchar(64);
>>>> size varchar(64);
>>>> i int;
>>>> BEGIN
>>>> size := split_part($2, ' ', $1);
>>>> b64 := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
>>>> val := 0;
>>>> FOR i IN 1..length(size) LOOP
>>>> val := val + (strpos(b64, substr(size, i, 1))-1) * (64^(length(size)-i));
>>>> END LOOP;
>>>> RETURN val;
>>>> END;
>>>> $$ language 'plpgsql';
>>>>
>>>> COMMIT;
>>>>
>>>> and this is a query which lists file path, filename and size in Bytes
>>>> (in this example for jobid=8):
>>>>
>>>> SELECT Path.Path, Filename.Name, base64_decode_lstat(8,File.LStat) AS
>>>> size FROM Filename, File, Path WHERE File.JobId=8 AND
>>>> File.PathId=Path.PathId AND Filename.FilenameId=File.FilenameId ORDER
>>>> BY size ASC;
>>>>
>>>> I tested it. It works.
>>>
>>> For the record:
>>>
>>> In this query, I see base64_decode_lstat(8,File.LStat)
>>>
>>> What is 8?  It is not jobid.  It is a field id.  This lstat value:
>>>
>>> BZ FNmi IGw B BQ Bb U6Wq E7 EAA E BNeOq1 BNeOq1 BNeOrS A A C
>>>
>>> The eight field, as defined by ' ', is E7.
>>>
>>> --
>>> Dan Langille - http://langille.org/
>>>
>
>
>


> Hi,
>
> I wrote the Bacula LStat decoder implementation in PHP. I made WebGUI
> for this also. Now online LStat decoder (beta version) is available on
> my page Bacula.pl:
>
> http://www.bacula.pl/bacula-lstat-decoder/
>
> In the near future I need to make description of fields.
>
> Here is Bacula LStat decoder function in PHP:
>
> function decode_bacula_lstat($lstat) {
>       $base64 = 
> 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
>       $lstat = trim($lstat);
>       $lstat_fields = explode(' ', $lstat);
>
>       if(count($lstat_fields) !== 16) {
>               die('Error! Number of lstat fields is invalid. Please make sure 
> that
> it is valid lstat string.');
>       }
>
>       list($dev, $inode, $mode, $links, $uid, $gid, $rdev, $size, $blksize,
> $blocks, $atime, $mtime, $ctime, $linkfi, $flags, $data) =
> $lstat_fields;
>       $encoded_values = array('dev' => $dev, 'inode' => $inode, 'mode' =>
> $mode, 'links' => $links, 'uid' => $uid, 'gid' => $gid, 'rdev' =>
> $rdev, 'size' => $size, 'blksize' => $blksize, 'blocks' => $blocks,
> 'atime' => $atime, 'mtime' => $mtime, 'ctime' => $ctime, 'linkfi' =>
> $linkfi, 'flags' => $flags, 'data' => $data);
>
>       $ret = array();
>       foreach($encoded_values as $key => $val) {
>               $result = 0;
>               $is_minus = false;
>               $start = 0;
>
>               if(substr($val, 0, 1) === '-') {
>                       $is_minus = true;
>                       $start++;
>               }
>
>               for($i = $start; $i < strlen($val); $i++) {
>                       $result <<= 6;
>                       $result +=  strpos($base64, substr($val, $i , 1));
>               }
>               $ret[$key] = ($is_minus === true) ? -$result : $result;
>       }
>       return $ret;
> }
>
> and here is usage for this:
>
> $lstat = 'gB DL+b IGg B A y A D5dZR BAA fN4 BNeR+z BNeR+7 BNeR+7 A A C';
> $decoded_lstat = decode_bacula_lstat($lstat);
> print_r($decoded_lstat);
>
> Any suggestions and modifications are welcome.
> Regards
> gani
>

I tried this function. I got an interesting value for:

   Bn bIgF IGk B Pp Pp BsZ/o Cp7/ZH EAA VQLA BNachF BNacW5 BNachH A A C

The PHP function returns:  -1443891641

The pgsql function returns:

bacula=# select base64_decode_lstat(8,'Bn bIgF IGk B Pp Pp BsZ/o Cp7/ZH 
EAA VQLA BNachF BNacW5 BNachH A A C')
bacula-# ;
  base64_decode_lstat
---------------------
           2851075655
(1 row)

bacula=#

Which is a more likely value....  FYI.

-- 
Dan Langille - http://langille.org/

------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
Bacula-users mailing list
Bacula-users AT lists.sourceforge DOT net
https://lists.sourceforge.net/lists/listinfo/bacula-users