mirror of
https://github.com/samba-team/samba.git
synced 2025-03-09 08:58:35 +03:00
Added a VFS version return to init call. Allows smbd to fail an init if
versions don't match. Jeremy. (This used to be commit d0fbb4f5d999abade8930cc6fff231a2af6cccfb)
This commit is contained in:
parent
aae30b6799
commit
6d36edaf43
@ -33,6 +33,14 @@
|
||||
* structs in the vfs - then anyone writing a vfs must include includes.h...
|
||||
*/
|
||||
|
||||
/*
|
||||
* This next constant specifies the version number of the VFS interface
|
||||
* this smbd will load. Increment this if *ANY* changes are made to the
|
||||
* vfs_ops below. JRA.
|
||||
*/
|
||||
|
||||
#define SMB_VFS_INTERFACE_VERSION 1
|
||||
|
||||
/* VFS operations structure */
|
||||
|
||||
struct connection_struct;
|
||||
|
@ -485,6 +485,8 @@ connection_struct *make_connection(char *service,char *user,char *password, int
|
||||
/* Loadable object file */
|
||||
|
||||
if (!vfs_init_custom(conn)) {
|
||||
DEBUG(0, ("vfs_init failed\n"));
|
||||
conn_free(conn);
|
||||
return NULL;
|
||||
}
|
||||
#else
|
||||
|
@ -94,7 +94,8 @@ int vfs_init_default(connection_struct *conn)
|
||||
#ifdef HAVE_LIBDL
|
||||
BOOL vfs_init_custom(connection_struct *conn)
|
||||
{
|
||||
struct vfs_ops *ops, *(*fptr)(struct vfs_options *options);
|
||||
int vfs_version = -1;
|
||||
struct vfs_ops *ops, *(*init_fptr)(int *);
|
||||
|
||||
DEBUG(3, ("Initialising custom vfs hooks from %s\n",
|
||||
lp_vfsobj(SNUM(conn))));
|
||||
@ -108,22 +109,27 @@ BOOL vfs_init_custom(connection_struct *conn)
|
||||
|
||||
/* Get handle on vfs_init() symbol */
|
||||
|
||||
fptr = (struct vfs_ops *(*)(struct vfs_options *))
|
||||
dlsym(conn->dl_handle, "vfs_init");
|
||||
init_fptr = (struct vfs_ops *(*)(int *))dlsym(conn->dl_handle, "vfs_init");
|
||||
|
||||
if (fptr == NULL) {
|
||||
DEBUG(0, ("No vfs_init() symbol found in %s\n",
|
||||
if (init_fptr == NULL) {
|
||||
DEBUG(0, ("No vfs_init() symbol found in %s\n",
|
||||
lp_vfsobj(SNUM(conn))));
|
||||
return False;
|
||||
return False;
|
||||
}
|
||||
|
||||
/* Initialise vfs_ops structure */
|
||||
|
||||
if ((ops = fptr(NULL)) == NULL) {
|
||||
if ((ops = init_fptr(&vfs_version)) == NULL) {
|
||||
DEBUG(0, ("vfs_init function from %s failed\n", lp_vfsobj(SNUM(conn))));
|
||||
return False;
|
||||
return False;
|
||||
}
|
||||
|
||||
if (vfs_version != SMB_VFS_INTERFACE_VERSION) {
|
||||
DEBUG(0, ("vfs_init returned wrong interface version info (was %d, should be %d)\n",
|
||||
vfs_version, SMB_VFS_INTERFACE_VERSION ));
|
||||
return False;
|
||||
}
|
||||
|
||||
/* Fill in unused operations with default (disk based) ones.
|
||||
There's probably a neater way to do this then a whole bunch of
|
||||
if statements. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user