NAME
Filesys::SmbClient - Interface for access Samba filesystem with libsmclient.so
SYNOPSIS
use POSIX;
use Filesys::SmbClient;
my $smb = new Filesys::SmbClient(username => "alian",
password => "speed",
workgroup => "alian",
debug => 10);
# Read a file
my $fd = $smb->open("smb://jupiter/doc/general.css", '0666');
while (defined(my $l= $smb->read($fd,50))) {print $l; }
$smb->close(fd);
# ...
See section EXAMPLE for others scripts.
DESCRIPTION
Provide interface to access routine defined in libsmbclient.so.
On 2001/08/05, this library is available on Samba source, but is not build by default. (release 2.2.1). Do "make bin/libsmbclient.so" in sources directory of Samba to build this libraries. Then copy source/include/libsmbclient.h and source/bin/libsmbclient.so where you need them before install this module.
If you want to use filehandle with this module, you need Perl 5.6 or later.
When a path is used, his scheme is :
smb://server/share/rep/doc
VERSION
$Revision: 1.4 $
FONCTIONS
- new %hash
-
Init connection Hash can have this keys:
username
password
workgroup
debug
Return instance of Filesys::SmbClient on succes, die with error else.
Example:
my $smb = new Filesys::SmbClient(username => "alian", password => "speed", workgroup => "alian", debug => 10);
Tie Filesys::SmbClient filehandle
This didn't work before 5.005_64. Why, I don't know. When you have tied a filehandle with Filesys::SmbClient, you can call classic methods for filehandle: print, printf, seek, syswrite, getc, open, close, read. See perldoc for usage.
Example:
local *FD;
tie(*FD, 'Filesys::SmbClient');
open(FD,"smb://jupiter/doc/test")
or print "Can't open file:", $!, "\n";
while(<FD>) { print $_; }
close(FD);
or
local *FD;
tie(*FD, 'Filesys::SmbClient');
open(FD,">smb://jupiter/doc/test")
or print "Can't create file:", $!, "\n";
print FD "Samba test","\n";
printf FD "%s", "And that work !\n";
close(FD);
Directory
- mkdir FILENAME, MODE
-
Create directory $fname with permissions set to $mode. Return 1 on success, else 0 is return and errno and $! is set.
Example:
$smb->mkdir("smb://jupiter/doc/toto",'0666') or print "Error mkdir: ", $!, "\n";
- rmdir FILENAME
-
Erase directory $fname. Return 1 on success, else 0 is return and errno and $! is set. ($fname must be empty, else see rmdir_recurse).
Example:
$smb->rmdir("smb://jupiter/doc/toto") or print "Error rmdir: ", $!, "\n";
- rmdir_recurse FILENAME
-
Erase directory $fname. Return 1 on success, else 0 is return and errno and $! is set. Il $fname is not empty, all files and dir will be deleted.
Example:
$smb->rmdir_recurse("smb://jupiter/doc/toto") or print "Error rmdir_recurse: ", $!, "\n";
- opendir FILENAME
-
Open directory $fname. Return file descriptor on succes, else 0 is return and $! is set.
- readdir FILEHANDLE
-
Read a directory. In a list context, return the full content of the directory $fd, else return next element. Each elem is a name of a directory or files.
Return undef at end of directory.
Example:
my $fd = $smb->opendir("smb://jupiter/doc"); foreach my $n ($smb->readdir($fd)) {print $n,"\n";} close($fd);
- readdir_struct FILEHANDLE
-
Read a directory. In a list context, return the full content of the directory FILEHANDLE, else return next element. Each element is a ref to an array with type, name and comment. Type can be :
- SMBC_WORKGROUP
- SMBC_SERVER
- SMBC_FILE_SHARE
- SMBC_PRINTER_SHARE
- SMBC_COMMS_SHARE
- SMBC_IPC_SHARE
- SMBC_DIR
- SMBC_FILE
- SMBC_LINK
Return undef at end of directory.
Example:
my $fd = $smb->opendir("smb://jupiter/doc"); while (my $f = $smb->readdir_struct($fd)) { if ($f->[0] == SMBC_DIR) {print "Directory ",$f->[1],"\n";} elsif ($f->[0] == SMBC_FILE) {print "File ",$f->[1],"\n";} # ... } close($fd);
- closedir FILEHANDLE
-
Close directory $fd.
Files
- stat FILENAME
-
Stat a file FILENAME. Return a list with info on success, else an empty list is return and $! is set.
List is made with:
device
inode
protection
number of hard links
user ID of owner
group ID of owner
device type (if inode device)
total size, in bytes
blocksize for filesystem I/O
number of blocks allocated
time of last access
time of last modification
time of last change
Example:
my @tab = $smb->stat("smb://jupiter/doc/tata"); if ($#tab == 0) { print "Erreur in stat:", $!, "\n"; } else { for (10..12) {$tab[$_] = localtime($tab[$_]);} print join("\n",@tab); }
- fstat FILEHANDLE
-
Like stat, but on a file handle
- rename OLDNAME,NEWNAME
-
Changes the name of a file; an existing file NEWNAME will be clobbered. Returns true for success, false otherwise, with $! set.
Example:
$smb->rename("smb://jupiter/doc/toto","smb://jupiter/doc/tata") or print "Can't rename file:", $!, "\n";
- unlink FILENAME
-
Unlink FILENAME. Return 1 on success, else 0 is return and errno and $! is set.
Example:
$smb->unlink("smb://jupiter/doc/test") or print "Can't unlink file:", $!, "\n";
- open FILENAME
- open FILENAME, MODE
-
Open file $fname with perm $mode. Return file descriptor on success, else 0 is return and $! is set.
Example:
my $fd = $smb->open("smb://jupiter/doc/test", 0666) or print "Can't read file:", $!, "\n"; my $fd = $smb->open(">smb://jupiter/doc/test", 0666) or print "Can't create file:", $!, "\n"; my $fd = $smb->open(">>smb://jupiter/doc/test", 0666) or print "Can't append to file:", $!, "\n";
- read FILEHANDLE
- read FILEHANDLE, LENGTH
-
Read $count bytes of data on file descriptor $fd. It lenght is not set, 4096 bytes will be read.
Return buffer read on success, undef at end of file, -1 is return on error and $! is set.
FILEHANDLE must be open with open of this module.
- write FILEHANDLE, $buf
- write FILEHANDLE, @buf
-
Write $buf or @buf on file descriptor $fd. Return number of bytes wrote, else -1 is return and errno and $! is set.
Example:
my $fd = $smb->open(">smb://jupiter/doc/test", 0666) or print "Can't create file:", $!, "\n"; $smb->write($fd, "A test of write call") or print $!,"\n"; $smb->close($fd);
FILEHANDLE must be open with open of this module.
- seek FILEHANDLE, POS
-
Sets FILEHANDLE's position, just like the "fseek" call of "stdio". FILEHANDLE may be an expression whose value gives the name of the filehandle. The values for WHENCE is always SEEK_SET beacause others didn't work on libsmbclient.so
FILEHANDLE must be open with open of this module.
- close FILEHANDLE
-
Close file FILEHANDLE. Return 0 on success, else -1 is return and errno and $! is set.
Print method
- unlink_print_job PRINTER_URL, IDJOB
-
Remove job number IDJOB on printer PRINTER_URL
- print_file DOCUMENT_URL, PRINTER_URL
-
Print file DOCUMENT_URL on PRINTER_URL
TODO
chown
chmod
open_print_job
telldir
lseekdir
EXAMPLE
This module come with some scripts:
- t/*.t
-
Just for check that this module is ok :-)
- smb2www-2.cgi
-
A CGI interface with these features:
browse workgroup ,share, dir
read file
upload file
create directory
unlink file, directory
AUTHOR
Alain BARBET, alian@alianwebserver.com