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 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/ >> -- "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