2003-08-13 01:53:07 +00:00
/*
Unix SMB / CIFS implementation .
default IPC $ NTVFS backend
Copyright ( C ) Andrew Tridgell 2003
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
the Free Software Foundation ; either version 2 of the License , or
( 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
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
/*
this implements the IPC $ backend , called by the NTVFS subsystem to
handle requests on IPC $ shares
*/
# include "includes.h"
/*
connect to a share - always works
*/
static NTSTATUS ipc_connect ( struct request_context * req , const char * sharename )
{
struct tcon_context * conn = req - > conn ;
conn - > fs_type = talloc_strdup ( conn - > mem_ctx , " IPC " ) ;
conn - > dev_type = talloc_strdup ( conn - > mem_ctx , " IPC " ) ;
return NT_STATUS_OK ;
}
/*
disconnect from a share
*/
static NTSTATUS ipc_disconnect ( struct tcon_context * tcon )
{
return NT_STATUS_OK ;
}
/*
delete a file
*/
static NTSTATUS ipc_unlink ( struct request_context * req , struct smb_unlink * unl )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
ioctl interface - we don ' t do any
*/
static NTSTATUS ipc_ioctl ( struct request_context * req , struct smb_ioctl * io )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
check if a directory exists
*/
static NTSTATUS ipc_chkpath ( struct request_context * req , struct smb_chkpath * cp )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
return info on a pathname
*/
static NTSTATUS ipc_qpathinfo ( struct request_context * req , union smb_fileinfo * info )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
set info on a pathname
*/
static NTSTATUS ipc_setpathinfo ( struct request_context * req , union smb_setfileinfo * st )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
open a file
*/
static NTSTATUS ipc_open ( struct request_context * req , union smb_open * oi )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
create a directory
*/
static NTSTATUS ipc_mkdir ( struct request_context * req , union smb_mkdir * md )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
remove a directory
*/
static NTSTATUS ipc_rmdir ( struct request_context * req , struct smb_rmdir * rd )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
rename a set of files
*/
2003-08-13 16:04:21 +00:00
static NTSTATUS ipc_rename ( struct request_context * req , union smb_rename * ren )
2003-08-13 01:53:07 +00:00
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
copy a set of files
*/
static NTSTATUS ipc_copy ( struct request_context * req , struct smb_copy * cp )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
read from a file
*/
static NTSTATUS ipc_read ( struct request_context * req , union smb_read * rd )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
write to a file
*/
static NTSTATUS ipc_write ( struct request_context * req , union smb_write * wr )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
seek in a file
*/
static NTSTATUS ipc_seek ( struct request_context * req , struct smb_seek * io )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
flush a file
*/
static NTSTATUS ipc_flush ( struct request_context * req , struct smb_flush * io )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
close a file
*/
static NTSTATUS ipc_close ( struct request_context * req , union smb_close * io )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
exit - closing files ?
*/
static NTSTATUS ipc_exit ( struct request_context * req )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
lock a byte range
*/
static NTSTATUS ipc_lock ( struct request_context * req , union smb_lock * lck )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
set info on a open file
*/
static NTSTATUS ipc_setfileinfo ( struct request_context * req , union smb_setfileinfo * info )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
query info on a open file
*/
static NTSTATUS ipc_qfileinfo ( struct request_context * req , union smb_fileinfo * info )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
return filesystem info
*/
static NTSTATUS ipc_fsinfo ( struct request_context * req , union smb_fsinfo * fs )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
return print queue info
*/
static NTSTATUS ipc_lpq ( struct request_context * req , union smb_lpq * lpq )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
list files in a directory matching a wildcard pattern
*/
NTSTATUS ipc_search_first ( struct request_context * req , union smb_search_first * io ,
void * search_private ,
BOOL ( * callback ) ( void * , union smb_search_data * ) )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
continue listing files in a directory
*/
NTSTATUS ipc_search_next ( struct request_context * req , union smb_search_next * io ,
void * search_private ,
BOOL ( * callback ) ( void * , union smb_search_data * ) )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
end listing files in a directory
*/
NTSTATUS ipc_search_close ( struct request_context * req , union smb_search_close * io )
{
return NT_STATUS_ACCESS_DENIED ;
}
/*
initialialise the IPC backend , registering ourselves with the ntvfs subsystem
*/
2003-11-25 03:15:26 +00:00
NTSTATUS ntvfs_ipc_init ( void )
2003-08-13 01:53:07 +00:00
{
2003-11-25 03:15:26 +00:00
NTSTATUS ret ;
2003-08-13 01:53:07 +00:00
struct ntvfs_ops ops ;
ZERO_STRUCT ( ops ) ;
/* fill in all the operations */
2003-11-25 03:15:26 +00:00
ops . name = " ipc " ;
ops . type = NTVFS_IPC ;
2003-08-13 01:53:07 +00:00
ops . connect = ipc_connect ;
ops . disconnect = ipc_disconnect ;
ops . unlink = ipc_unlink ;
ops . chkpath = ipc_chkpath ;
ops . qpathinfo = ipc_qpathinfo ;
ops . setpathinfo = ipc_setpathinfo ;
ops . open = ipc_open ;
ops . mkdir = ipc_mkdir ;
ops . rmdir = ipc_rmdir ;
ops . rename = ipc_rename ;
ops . copy = ipc_copy ;
ops . ioctl = ipc_ioctl ;
ops . read = ipc_read ;
ops . write = ipc_write ;
ops . seek = ipc_seek ;
ops . flush = ipc_flush ;
ops . close = ipc_close ;
ops . exit = ipc_exit ;
ops . lock = ipc_lock ;
ops . setfileinfo = ipc_setfileinfo ;
ops . qfileinfo = ipc_qfileinfo ;
ops . fsinfo = ipc_fsinfo ;
ops . lpq = ipc_lpq ;
ops . search_first = ipc_search_first ;
ops . search_next = ipc_search_next ;
ops . search_close = ipc_search_close ;
/* register ourselves with the NTVFS subsystem. */
2003-11-25 03:15:26 +00:00
ret = register_backend ( " ntvfs " , & ops ) ;
2003-08-13 01:53:07 +00:00
2003-11-25 03:15:26 +00:00
if ( ! NT_STATUS_IS_OK ( ret ) ) {
2003-08-13 01:53:07 +00:00
DEBUG ( 0 , ( " Failed to register IPC backend! \n " ) ) ;
2003-11-25 03:15:26 +00:00
return ret ;
2003-08-13 01:53:07 +00:00
}
2003-11-25 03:15:26 +00:00
return ret ;
2003-08-13 01:53:07 +00:00
}