While trying to compile the VFS modules for Samba 2.2.4 under
FreeBSD 4.5-STABLE, I encountered several problems:

1. Missing include directory, unable to find popt.h if using bundled popt library.

2. Undefined Symbols when smbd loads a VFS module.
        - defined DYNEXP for the *bsd* case

3. Recycle VFS Module SIG 11 when deleting files size is > 0
        - caused by incorrect pointer useage

Attached is the patch that corrects these problems.

Scot W. Hetzel

diff -ruN samba-2.2.4.orig/examples/VFS/Makefile samba-2.2.4/examples/VFS/Makefile
--- samba-2.2.4.orig/examples/VFS/Makefile      Thu May  2 20:02:11 2002
+++ samba-2.2.4/examples/VFS/Makefile   Fri May 10 10:16:04 2002
@@ -10,9 +10,10 @@
 
 SAMBA_SRC = ../../source
 SAMBA_INCL = ../../source/include
+POPT_INCL = ../../source/popt
 UBIQX_SRC = ../../source/ubiqx
 SMBWR_SRC = ../../source/smbwrapper
-CFLAGS = -I$(SAMBA_SRC) -I$(SAMBA_INCL) -I$(UBIQX_SRC) -I$(SMBWR_SRC) -Wall -g
+CFLAGS = -I$(SAMBA_SRC) -I$(SAMBA_INCL) -I$(UBIQX_SRC) -I$(SMBWR_SRC) -I${POPT_INCL} 
+-Wall -g
 VFS_OBJS = audit.so skel.so recycle.so
 
 # Default target
diff -ruN samba-2.2.4.orig/examples/VFS/recycle.c samba-2.2.4/examples/VFS/recycle.c
--- samba-2.2.4.orig/examples/VFS/recycle.c     Tue Apr 30 08:43:30 2002
+++ samba-2.2.4/examples/VFS/recycle.c  Fri May 10 10:15:43 2002
@@ -238,15 +238,18 @@
                return default_vfs_ops.unlink(conn,fname);
        }
 
-       base = strrchr(fname, '/') + 1;
-       if(base == (char*)1)
-               ext = strrchr(fname, '.');
-       else
-               ext = strrchr(base, '.');
-
+       base = strrchr(fname, '/');
        pstrcpy(bin, recycle_bin);
        pstrcat(bin, "/");
-       pstrcat(bin, base);
+
+       if(base == NULL) {
+               ext = strrchr(fname, '.');
+               pstrcat(bin, fname);
+       } else {
+               ext = strrchr(base, '.');
+               pstrcat(bin, base+1);
+       }
+       DEBUG(3, ("recycle bin: base %s, ext %s, fname %s, bin %s\n", base, ext, 
+fname, bin));
 
        if(strcmp(fname,bin) == 0) {
                DEBUG(3, ("recycle bin: file %s exists, purging...\n", fname));
@@ -254,6 +257,8 @@
        }
 
        len = strlen(bin);
+       if ( ext != NULL)
+               len = len - strlen(ext);
        addlen = sizeof(pstring)-len-1;
        while(recycle_file_exist(conn,bin)) {
                slprintf(bin+len, addlen, " (Copy #%d)", i++);
diff -ruN samba-2.2.4.orig/source/configure.in samba-2.2.4/source/configure.in
--- samba-2.2.4.orig/source/configure.in        Thu May  2 20:02:46 2002
+++ samba-2.2.4/source/configure.in     Fri May 10 10:21:24 2002
@@ -870,6 +870,7 @@
                ;;
                *bsd*)  BLDSHARED="true"
                        LDSHFLAGS="-shared"
+                       DYNEXP="-Wl,--export-dynamic"
                        SONAMEFLAG="-Wl,-soname,"
                        PICFLAG="-fPIC"
                        AC_DEFINE(STAT_ST_BLOCKSIZE,512)

Reply via email to