Hi, First, many thanks for your feedback.
I researched that behaviour with filesize of your lstat field ( -1443891641). Yes, I made mistake with using shift bitwise operator. >From PHP documentation: "Warning! Don't right shift for more than 32 bits on 32 bits systems. Don't left shift in case it results to number longer than 32 bits." (source: http://php.net/manual/en/language.operators.bitwise.php) Repairing this bug is replacing the line: $result <<= 6; to this line: $result = bcmul($result, bcpow(2,6)); It should work properly. Thanks. gani W dniu 13 marca 2011 01:01 użytkownik Dan Langille <d...@langille.org> napisał: > On 3/12/2011 9:29 AM, ganiuszka wrote: >> >> W dniu 11 marca 2011 21:45 użytkownik ganiuszka<ganius...@gmail.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<d...@langille.org>: >>>> >>>> On 3/9/2011 5:36 PM, ganiuszka wrote: >>>> >>>>> 2011/3/9 Mike Eggleston<mikee...@mac.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/ > -- "Większej miłości nikt nie ma nad tę, jak gdy kto życie swoje kładzie za przyjaciół swoich." Jezus Chrystus ------------------------------------------------------------------------------ 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@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bacula-users