SmbClient(3pm)
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 provided
with Samba.
Since 3.0 release of this package, you need a least samba-3.0.2. For
prior release of Samba, use Filesys::SmbClient version 1.x.
For old and 2.x release, this library is available on Samba source, but
is not build by default. Do "make bin/libsmbclient.so" in sources
directory of Samba to build this libraries. Then copy
source/include/libsmbclient.h to /usr/local/samba/include and
source/bin/libsmbclient.so to /usr/local/samba/lib 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: 3.1 $
FONCTIONS
- new %hash
- Init connection Hash can have this keys:
- o username
- o password
- o workgroup
- o debug
- o flags : See set_flag
- 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); - set_flag
- Set flag for smb connection. See _SMBCCTX->flags in libsmclient.h
Flag can be: - SMB_CTX_FLAG_USE_KERBEROS
SMB_CTX_FLAG_FALLBACK_AFTER_KERBEROS
SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON - 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_LINKReturn 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 FILEHANDLEClose directory $fd.Filesstat FILENAMEStat a file FILENAME. Return a list with info on success, else an
empty list is return and $! is set.List is made with:o deviceo inodeo protectiono number of hard linkso user ID of ownero group ID of ownero device type (if inode device)o total size, in byteso blocksize for filesystem I/Oo number of blocks allocatedo time of last accesso time of last modificationo time of last changeExample:
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 FILEHANDLELike stat, but on a file handlerename OLDNAME,NEWNAMEChanges 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
o chown
o chmod
o open_print_job
o telldir
o 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:
- o browse workgroup ,share, dir
- o read file
- o upload file
- o create directory
- o unlink file, directory
COPYRIGHT
The Filesys-SmbClient module is Copyright (c) 1999-2003 Alain BARBET,
France, alian at cpan.org. All rights reserved.
- You may distribute under the terms of either the GNU General Public
License or the Artistic License, as specified in the Perl README file.