VFS Linking errors

Paul Weaver paul.weaver at bbc.co.uk
Mon Oct 6 14:09:34 GMT 2008


From: Gerald (Jerry) Carter [mailto:jerry at samba.org]
Sent: 18 September 2008 22:44
> > Paul Weaver wrote:
> >> After successful tests on a linux machine, we're trying to
> deploy a
> >> VFS module onto a solaris x64 machine.
> >>
> >> Initial problem was we couldn't compile. Downloaded the source for 
> >> 3.0.28, ran through configure and make. The VFS object
> compiled fine,
> >> but then wouldn't connect
> >>
> >> /usr/sfw/sbin/smbd --version
> >> Version 3.0.28
> >>
> >> [2008/09/18 15:18:26, 0] smbd/vfs.c:(66)
> >>   Failed to register vfs module.
> >>   The module was compiled against
> SMB_VFS_INTERFACE_VERSION 134502736,
> >>   current SMB_VFS_INTERFACE_VERSION is 21.
> >>   Please recompile against the current Samba Version!
> > 
> > 
> > I think you had an uninitialized version number variable,
> as 134502736
> > sounds bizzare!
> 
> The only time I have seen such an error was on Solaris 10u5 amd64 when

> running Sun's version of Samba compiled with the Sun Studio suite and 
> the plugin compiled using gcc.  They don't mix well.

That sounds about right, u5 default samba installation that came on the
box, I later removed it and compiled from scratch, which is fine -- I'm
from a gnu background, and I'm not a developer. The gnu toolchain is
what I'm used to. 

Having compiled sabma from scratch, I can compile VFS modules and have
them run. It's the unsafe_string issue that's throwing the problem.

Having worked through safe_string.h and dotted my vfs module with DEBUG
statements, I've found the problem in 
Safe_strcpy_fn2
Which seems to call CHECK_STRING_SIZE(d, max_len+1)

d is "d->d_name", with "d" being defined as
 SMB_STRUCT_DIRENT* d =  NULL;
 d = SMB_VFS_NEXT_READDIR(handle, dirInfo->dirstream)

And dirInfo is a "mh_dirinfo_struct" defined with
 pstring dirpath
 BOOL isInMediaFiles
 fstring clientMDB
 fstring clientPMR
 fstring clientCreating
 SMB_STRUCT_DIR* dirstream

A bit more DEBUG macros reveals that sizeof(d) is "1" on the 64 bit
solaris machine, and "256" on my 32 bit linux machine

On both the solaris box and the linux SMB_STRUCT_DIRENT is defined as
dirent64 -- which is a bit confusing at first glance as I've got a 32bit
linux distro


--
Paul Weaver	
Systems Development Engineer
News Production Facilities, BBC News



More information about the samba-technical mailing list