2001-05-17 06:29:00 +04:00
/*
2003-01-23 02:50:14 +03:00
Unix SMB / CIFS implementation .
2001-05-17 06:29:00 +04:00
SMB client library test program
Copyright ( C ) Andrew Tridgell 1998
Copyright ( C ) Richard Sharpe 2000
Copyright ( C ) John Terpsra 2000
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
2007-07-09 23:25:36 +04:00
the Free Software Foundation ; either version 3 of the License , or
2001-05-17 06:29:00 +04:00
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
2007-07-10 04:57:11 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2001-05-17 06:29:00 +04:00
*/
# include <stdio.h>
# include <errno.h>
2009-03-28 01:03:00 +03:00
# include <time.h>
2001-05-17 06:29:00 +04:00
# include <sys/time.h>
# include <string.h>
# include <unistd.h>
# include <stdlib.h>
2008-03-04 02:13:33 +03:00
# include "libsmbclient.h"
2005-03-31 09:06:04 +04:00
# include "get_auth_data_fn.h"
2001-05-17 06:29:00 +04:00
int main ( int argc , char * argv [ ] )
{
2012-02-20 12:37:39 +04:00
int err , fd , dh1 , dsize , dirc ;
2001-05-17 06:29:00 +04:00
const char * file = " smb://samba/public/testfile.txt " ;
const char * file2 = " smb://samba/public/testfile2.txt " ;
char buff [ 256 ] ;
char dirbuf [ 512 ] ;
char * dirp ;
struct stat st1 , st2 ;
2005-03-31 09:06:04 +04:00
err = smbc_init ( get_auth_data_fn , 10 ) ; /* Initialize things */
2001-05-17 06:29:00 +04:00
if ( err < 0 ) {
fprintf ( stderr , " Initializing the smbclient library ...: %s \n " , strerror ( errno ) ) ;
}
if ( argc > 1 ) {
2003-01-23 02:50:14 +03:00
if ( ( dh1 = smbc_opendir ( argv [ 1 ] ) ) < 1 ) {
2001-05-17 06:29:00 +04:00
2003-01-23 02:50:14 +03:00
fprintf ( stderr , " Could not open directory: %s: %s \n " ,
argv [ 1 ] , strerror ( errno ) ) ;
2001-05-17 06:29:00 +04:00
exit ( 1 ) ;
}
2012-02-20 12:37:39 +04:00
fprintf ( stdout , " Directory handle: %u \n " , dh1 ) ;
2001-05-17 06:29:00 +04:00
/* Now, list those directories, but in funny ways ... */
dirp = ( char * ) dirbuf ;
if ( ( dirc = smbc_getdents ( dh1 , ( struct smbc_dirent * ) dirp ,
sizeof ( dirbuf ) ) ) < 0 ) {
fprintf ( stderr , " Problems getting directory entries: %s \n " ,
strerror ( errno ) ) ;
exit ( 1 ) ;
}
/* Now, process the list of names ... */
fprintf ( stdout , " Directory listing, size = %u \n " , dirc ) ;
while ( dirc > 0 ) {
dsize = ( ( struct smbc_dirent * ) dirp ) - > dirlen ;
fprintf ( stdout , " Dir Ent, Type: %u, Name: %s, Comment: %s \n " ,
( ( struct smbc_dirent * ) dirp ) - > smbc_type ,
( ( struct smbc_dirent * ) dirp ) - > name ,
( ( struct smbc_dirent * ) dirp ) - > comment ) ;
dirp + = dsize ;
2005-03-29 04:42:51 +04:00
dirc - = dsize ;
2001-05-17 06:29:00 +04:00
}
dirp = ( char * ) dirbuf ;
exit ( 1 ) ;
}
/* For now, open a file on a server that is hard coded ... later will
* read from the command line . . .
*/
fd = smbc_open ( file , O_RDWR | O_CREAT | O_TRUNC , 0666 ) ;
if ( fd < 0 ) {
fprintf ( stderr , " Creating file: %s: %s \n " , file , strerror ( errno ) ) ;
exit ( 0 ) ;
}
fprintf ( stdout , " Opened or created file: %s \n " , file ) ;
/* Now, write some date to the file ... */
2012-02-20 12:27:13 +04:00
memset ( buff , ' \0 ' , sizeof ( buff ) ) ;
2016-03-17 01:09:12 +03:00
snprintf ( buff , sizeof ( buff ) , " %s " , " Some test data for the moment ... " ) ;
2001-05-17 06:29:00 +04:00
err = smbc_write ( fd , buff , sizeof ( buff ) ) ;
if ( err < 0 ) {
fprintf ( stderr , " writing file: %s: %s \n " , file , strerror ( errno ) ) ;
exit ( 0 ) ;
}
2009-03-28 01:03:00 +03:00
fprintf ( stdout , " Wrote %lu bytes to file: %s \n " ,
( unsigned long ) sizeof ( buff ) , buff ) ;
2001-05-17 06:29:00 +04:00
/* Now, seek the file back to offset 0 */
err = smbc_lseek ( fd , SEEK_SET , 0 ) ;
if ( err < 0 ) {
fprintf ( stderr , " Seeking file: %s: %s \n " , file , strerror ( errno ) ) ;
exit ( 0 ) ;
}
fprintf ( stdout , " Completed lseek on file: %s \n " , file ) ;
/* Now, read the file contents back ... */
err = smbc_read ( fd , buff , sizeof ( buff ) ) ;
if ( err < 0 ) {
fprintf ( stderr , " Reading file: %s: %s \n " , file , strerror ( errno ) ) ;
exit ( 0 ) ;
}
fprintf ( stdout , " Read file: %s \n " , buff ) ; /* Should check the contents */
fprintf ( stdout , " Now fstat'ing file: %s \n " , file ) ;
err = smbc_fstat ( fd , & st1 ) ;
if ( err < 0 ) {
fprintf ( stderr , " Fstat'ing file: %s: %s \n " , file , strerror ( errno ) ) ;
exit ( 0 ) ;
}
/* Now, close the file ... */
err = smbc_close ( fd ) ;
if ( err < 0 ) {
fprintf ( stderr , " Closing file: %s: %s \n " , file , strerror ( errno ) ) ;
}
/* Now, rename the file ... */
err = smbc_rename ( file , file2 ) ;
if ( err < 0 ) {
fprintf ( stderr , " Renaming file: %s to %s: %s \n " , file , file2 , strerror ( errno ) ) ;
}
fprintf ( stdout , " Renamed file %s to %s \n " , file , file2 ) ;
/* Now, create a file and delete it ... */
fprintf ( stdout , " Now, creating file: %s so we can delete it. \n " , file ) ;
fd = smbc_open ( file , O_RDWR | O_CREAT , 0666 ) ;
if ( fd < 0 ) {
fprintf ( stderr , " Creating file: %s: %s \n " , file , strerror ( errno ) ) ;
exit ( 0 ) ;
}
fprintf ( stdout , " Opened or created file: %s \n " , file ) ;
err = smbc_close ( fd ) ;
if ( err < 0 ) {
fprintf ( stderr , " Closing file: %s: %s \n " , file , strerror ( errno ) ) ;
exit ( 0 ) ;
}
/* Now, delete the file ... */
fprintf ( stdout , " File %s created, now deleting ... \n " , file ) ;
err = smbc_unlink ( file ) ;
if ( err < 0 ) {
fprintf ( stderr , " Deleting file: %s: %s \n " , file , strerror ( errno ) ) ;
exit ( 0 ) ;
}
/* Now, stat the file, file 2 ... */
fprintf ( stdout , " Now stat'ing file: %s \n " , file ) ;
err = smbc_stat ( file2 , & st2 ) ;
if ( err < 0 ) {
fprintf ( stderr , " Stat'ing file: %s: %s \n " , file , strerror ( errno ) ) ;
exit ( 0 ) ;
}
fprintf ( stdout , " Stat'ed file: %s. Size = %d, mode = %04X \n " , file2 ,
2012-02-20 12:23:30 +04:00
( int ) st2 . st_size , ( unsigned int ) st2 . st_mode ) ;
2001-05-17 06:29:00 +04:00
fprintf ( stdout , " time: %s \n " , ctime ( & st2 . st_atime ) ) ;
fprintf ( stdout , " Earlier stat: %s, Size = %d, mode = %04X \n " , file ,
2012-02-20 12:23:30 +04:00
( int ) st1 . st_size , ( unsigned int ) st1 . st_mode ) ;
2001-05-17 06:29:00 +04:00
fprintf ( stdout , " time: %s \n " , ctime ( & st1 . st_atime ) ) ;
/* Now, make a directory ... */
fprintf ( stdout , " Making directory smb://samba/public/make-dir \n " ) ;
if ( smbc_mkdir ( " smb://samba/public/make-dir " , 0666 ) < 0 ) {
fprintf ( stderr , " Error making directory: smb://samba/public/make-dir: %s \n " ,
strerror ( errno ) ) ;
if ( errno = = EEXIST ) { /* Try to delete the directory */
fprintf ( stdout , " Trying to delete directory: smb://samba/public/make-dir \n " ) ;
if ( smbc_rmdir ( " smb://samba/public/make-dir " ) < 0 ) { /* Error */
fprintf ( stderr , " Error removing directory: smb://samba/public/make-dir: %s \n " , strerror ( errno ) ) ;
exit ( 0 ) ;
}
fprintf ( stdout , " Making directory: smb://samba/public/make-dir \n " ) ;
if ( smbc_mkdir ( " smb://samba/public/make-dir " , 666 ) < 0 ) {
fprintf ( stderr , " Error making directory: smb://samba/public/make-dir: %s \n " ,
strerror ( errno ) ) ;
fprintf ( stderr , " I give up! \n " ) ;
exit ( 1 ) ;
}
}
exit ( 0 ) ;
}
fprintf ( stdout , " Made dir: make-dir \n " ) ;
return 0 ;
}