[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu Mar 17 03:32:03 UTC 2016


The branch, master has been updated
       via  44f3dde smbd: fix use after free via conn->fsp_fi_cache
       via  a16379c idmap_hash: only allow the hash module for default idmap config.
       via  4172491 idmap_hash: rename be_init() --> idmap_hash_initialize()
       via  4632ad9 s3:winbindd:idmap: check loadparm in domain_has_idmap_config() helper as well.
       via  55be1ee s3:winbindd:idmap_hash: skip domains that already have their own idmap configuration.
       via  fb80e11 s3:winbindd:idmap: add domain_has_idmap_config() helper function.
       via  228ab34 build: fix build when --without-quota specified
       via  67a29a8 smbd: remove quota support for some ancient OSs
      from  7d46ea4 samba3.blackbox.smbclient_auth.plain: Add new regression test case.

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 44f3dde85740d2b9462df2ed76da41dae0774470
Author: Michael Adam <obnox at samba.org>
Date:   Wed Mar 16 23:57:33 2016 +0100

    smbd: fix use after free via conn->fsp_fi_cache
    
    Some instrumentation of the the durable reconnect
    code uncovered a problem in the fsp_new, fsp_free pair:
    
    vfs_default_durable_reconnect():
      fsp_new() ==> this does DLIST_ADD(fsp->conn->sconn->files, fsp)
      if (fsp->oplock_type == LEASE_OPLOCK) {
        find_fsp_lease(fsp, &key, l) ==> this fills conn->fsp_fi_cache
        if (client guids not equal) {
          fsp_free(fsp) ==> this does DLIST_REMOVE(fsp->conn->sconn->files, fsp)
      }
    
    so after this code we have the fsp_fi_cache still pointing to the
    free'd memory. The next call to find_fsp_lease will use the cache
    and hence access the freed memory.
    
    The fix consists in invalidating the cache in fsp_free() instead
    of just in its wrapper file_free().
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=11799
    
    Pair-Programmed-With: Guenther Deschner <gd at samba.org>
    
    Signed-off-by: Michael Adam <obnox at samba.org>
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Mar 17 04:31:10 CET 2016 on sn-devel-144

commit a16379c585a6f6e9470a8745b6043be8171eb615
Author: Michael Adam <obnox at samba.org>
Date:   Mon Mar 14 17:07:34 2016 +0100

    idmap_hash: only allow the hash module for default idmap config.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=11786
    
    This module only makes sense as the default idmap config
    ("idmap config * : backend = hash" ...)
    
    Pair-Programmed-With: Guenther Deschner <gd at samba.org>
    
    Signed-off-by: Michael Adam <obnox at samba.org>
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 4172491cbe7bb8ad2a7089efe15fbe46fcc123fb
Author: Michael Adam <obnox at samba.org>
Date:   Mon Mar 14 17:06:34 2016 +0100

    idmap_hash: rename be_init() --> idmap_hash_initialize()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=11786
    
    Pair-Programmed-With: Guenther Deschner <gd at samba.org>
    
    Signed-off-by: Michael Adam <obnox at samba.org>
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 4632ad98c4af5a4e0a2723c0cf716439e376e61f
Author: Günther Deschner <gd at samba.org>
Date:   Thu Mar 10 12:21:52 2016 +0100

    s3:winbindd:idmap: check loadparm in domain_has_idmap_config() helper as well.
    
    Guenther
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=11786
    
    Pair-Programmed-With: Michael Adam <obnox at samba.org>
    
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Signed-off-by: Michael Adam <obnox at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 55be1ee69743c94d33f4244ade848517fc98e264
Author: Günther Deschner <gd at samba.org>
Date:   Thu Mar 10 10:39:15 2016 +0100

    s3:winbindd:idmap_hash: skip domains that already have their own idmap configuration.
    
    Check if the domain from the list is not already configured to use another idmap
    backend. Not checking this makes the idmap_hash module map IDs for *all* domains
    implicitly. This is quite dangeorous in multi-idmap-config setups.
    
    Guenther
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=11786
    
    Pair-Programmed-With: Michael Adam <obnox at samba.org>
    
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Signed-off-by: Michael Adam <obnox at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit fb80e1158bb1a14f2602e65464909a213296cde1
Author: Michael Adam <obnox at samba.org>
Date:   Thu Mar 10 10:38:29 2016 +0100

    s3:winbindd:idmap: add domain_has_idmap_config() helper function.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=11786
    
    Pair-Programmed-With: Guenther Deschner <gd at samba.org>
    
    Signed-off-by: Michael Adam <obnox at samba.org>
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 228ab3466d0e5af46313de200b5b976d46838378
Author: Uri Simchoni <uri at samba.org>
Date:   Wed Mar 16 20:20:02 2016 +0200

    build: fix build when --without-quota specified
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=11798
    
    Signed-off-by: Uri Simchoni <uri at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 67a29a8661ca965ffa86666aee7832ef9f33dadb
Author: Uri Simchoni <uri at samba.org>
Date:   Sun Mar 13 08:18:47 2016 +0200

    smbd: remove quota support for some ancient OSs
    
    Remove quota support for SunOS4 and VxFS on Solaris 2
    
    Signed-off-by: Uri Simchoni <uri at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/files.c                     |   9 +-
 source3/smbd/quotas.c                    | 200 +------------------------------
 source3/winbindd/idmap.c                 |  37 ++++++
 source3/winbindd/idmap_hash/idmap_hash.c |  32 ++++-
 source3/winbindd/winbindd_proto.h        |   1 +
 source3/wscript                          |   4 +-
 tests/oldquotas.c                        |  61 +---------
 7 files changed, 74 insertions(+), 270 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/files.c b/source3/smbd/files.c
index 8fefddd..3e2b3d7 100644
--- a/source3/smbd/files.c
+++ b/source3/smbd/files.c
@@ -478,6 +478,10 @@ void fsp_free(files_struct *fsp)
 {
 	struct smbd_server_connection *sconn = fsp->conn->sconn;
 
+	if (fsp == sconn->fsp_fi_cache.fsp) {
+		ZERO_STRUCT(sconn->fsp_fi_cache);
+	}
+
 	DLIST_REMOVE(sconn->files, fsp);
 	SMB_ASSERT(sconn->num_files > 0);
 	sconn->num_files--;
@@ -540,11 +544,6 @@ void file_free(struct smb_request *req, files_struct *fsp)
 		remove_smb2_chained_fsp(fsp);
 	}
 
-	/* Closing a file can invalidate the positive cache. */
-	if (fsp == sconn->fsp_fi_cache.fsp) {
-		ZERO_STRUCT(sconn->fsp_fi_cache);
-	}
-
 	/* Drop all remaining extensions. */
 	vfs_remove_all_fsp_extensions(fsp);
 
diff --git a/source3/smbd/quotas.c b/source3/smbd/quotas.c
index 8e41416..58d8460 100644
--- a/source3/smbd/quotas.c
+++ b/source3/smbd/quotas.c
@@ -40,32 +40,13 @@
 
 #ifdef WITH_QUOTAS
 
-#if defined(VXFS_QUOTA)
-
-/*
- * In addition to their native filesystems, some systems have Veritas VxFS.
- * Declare here, define at end: reduces likely "include" interaction problems.
- *	David Lee <T.D.Lee at durham.ac.uk>
- */
-bool disk_quotas_vxfs(const char *name, char *path, uint64_t *bsize, uint64_t *dfree, uint64_t *dsize);
-
-#endif /* VXFS_QUOTA */
-
-
-#if defined(SUNOS5) || defined(SUNOS4)
+#if defined(SUNOS5) /* Solaris */
 
 #include <fcntl.h>
 #include <sys/param.h>
-#if defined(SUNOS5)
 #include <sys/fs/ufs_quota.h>
 #include <sys/mnttab.h>
 #include <sys/mntent.h>
-#else /* defined(SUNOS4) */
-#include <ufs/quota.h>
-#include <mntent.h>
-#endif
-
-#if defined(SUNOS5)
 
 /****************************************************************************
  Allows querying of remote hosts for quotas on NFS mounted shares.
@@ -229,7 +210,6 @@ static bool nfs_quotas(char *nfspath, uid_t euser_id, uint64_t *bsize, uint64_t
 	DEBUG(10,("nfs_quotas: End of nfs_quotas\n" ));
 	return ret;
 }
-#endif
 
 /****************************************************************************
 try to get the disk space from disk quotas (SunOS & Solaris2 version)
@@ -242,13 +222,9 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
 	uid_t euser_id;
 	int ret;
 	struct dqblk D;
-#if defined(SUNOS5)
 	struct quotctl command;
 	int file;
 	struct mnttab mnt;
-#else /* SunOS4 */
-	struct mntent *mnt;
-#endif
 	char *name = NULL;
 	FILE *fd;
 	SMB_STRUCT_STAT sbuf;
@@ -264,7 +240,6 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
 	devno = sbuf.st_ex_dev ;
 	DEBUG(5,("disk_quotas: looking for path \"%s\" devno=%x\n",
 		path, (unsigned int)devno));
-#if defined(SUNOS5)
 	if ((fd = fopen(MNTTAB, "r")) == NULL) {
 		return false;
 	}
@@ -291,28 +266,6 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
 	}
 
 	fclose(fd);
-#else /* SunOS4 */
-	if ((fd = setmntent(MOUNTED, "r")) == NULL) {
-		return false;
-	}
-
-	while ((mnt = getmntent(fd)) != NULL) {
-		if (sys_stat(mnt->mnt_dir, &sbuf, false) == -1) {
-			continue;
-		}
-		DEBUG(5,("disk_quotas: testing \"%s\" devno=%x\n",
-					mnt->mnt_dir,
-					(unsigned int)sbuf.st_ex_dev));
-		if (sbuf.st_ex_dev == devno) {
-			found = true;
-			name = talloc_strdup(talloc_tos(),
-					mnt->mnt_fsname);
-			break;
-		}
-	}
-
-	endmntent(fd);
-#endif
 	if (!found) {
 		return false;
 	}
@@ -322,7 +275,6 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
 	}
 	become_root();
 
-#if defined(SUNOS5)
 	if (strcmp(mnt.mnt_fstype, "nfs") == 0) {
 		bool retval;
 		DEBUG(5,("disk_quotas: looking for mountpath (NFS) \"%s\"\n",
@@ -343,10 +295,6 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
 	command.addr = (caddr_t) &D;
 	ret = ioctl(file, Q_QUOTACTL, &command);
 	close(file);
-#else
-	DEBUG(5,("disk_quotas: trying quotactl on device \"%s\"\n", name));
-	ret = quotactl(Q_GETQUOTA, name, euser_id, &D);
-#endif
 
 	unbecome_root();
 
@@ -354,19 +302,7 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
 		DEBUG(5,("disk_quotas ioctl (Solaris) failed. Error = %s\n",
 					strerror(errno) ));
 
-#if defined(SUNOS5) && defined(VXFS_QUOTA)
-		/* If normal quotactl() fails, try vxfs private calls */
-		set_effective_uid(euser_id);
-		DEBUG(5,("disk_quotas: mount type \"%s\"\n", mnt.mnt_fstype));
-		if ( 0 == strcmp ( mnt.mnt_fstype, "vxfs" )) {
-			bool retval;
-			retval = disk_quotas_vxfs(name, path,
-					bsize, dfree, dsize);
-			return retval;
-		}
-#else
 		return false;
-#endif
 	}
 
 	/* If softlimit is zero, set it equal to hardlimit.
@@ -403,7 +339,7 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
 }
 
 
-#else
+#else /* not Solaris */
 
 #if           AIX
 /* AIX quota patch from Ole Holm Nielsen <ohnielse at fysik.dtu.dk> */
@@ -523,137 +459,7 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
   return (True);
 }
 
-#endif
-
-#if defined(VXFS_QUOTA)
-
-/****************************************************************************
-Try to get the disk space from Veritas disk quotas.
-    David Lee <T.D.Lee at durham.ac.uk> August 1999.
-
-Background assumptions:
-    Potentially under many Operating Systems.  Initially Solaris 2.
-
-    My guess is that Veritas is largely, though not entirely,
-    independent of OS.  So I have separated it out.
-
-    There may be some details.  For example, OS-specific "include" files.
-
-    It is understood that HPUX 10 somehow gets Veritas quotas without
-    any special effort; if so, this routine need not be compiled in.
-        Dirk De Wachter <Dirk.DeWachter at rug.ac.be>
-
-Warning:
-    It is understood that Veritas do not publicly support this ioctl interface.
-    Rather their preference would be for the user (us) to call the native
-    OS and then for the OS itself to call through to the VxFS filesystem.
-    Presumably HPUX 10, see above, does this.
-
-Hints for porting:
-    Add your OS to "IFLIST" below.
-    Get it to compile successfully:
-        Almost certainly "include"s require attention: see SUNOS5.
-    In the main code above, arrange for it to be called: see SUNOS5.
-    Test!
-    
-****************************************************************************/
-
-/* "IFLIST"
- * This "if" is a list of ports:
- *	if defined(OS1) || defined(OS2) || ...
- */
-#if defined(SUNOS5)
-
-#if defined(SUNOS5)
-#include <sys/fs/vx_solaris.h>
-#endif
-#include <sys/fs/vx_machdep.h>
-#include <sys/fs/vx_layout.h>
-#include <sys/fs/vx_quota.h>
-#include <sys/fs/vx_aioctl.h>
-#include <sys/fs/vx_ioctl.h>
-
-bool disk_quotas_vxfs(const char *name, char *path, uint64_t *bsize, uint64_t *dfree, uint64_t *dsize)
-{
-  uid_t user_id, euser_id;
-  int ret;
-  struct vx_dqblk D;
-  struct vx_quotctl quotabuf;
-  struct vx_genioctl genbuf;
-  char *qfname;
-  int file;
-
-  /*
-   * "name" may or may not include a trailing "/quotas".
-   * Arranging consistency of calling here in "quotas.c" may not be easy and
-   * it might be easier to examine and adjust it here.
-   * Fortunately, VxFS seems not to mind at present.
-   */
-  qfname = talloc_strdup(talloc_tos(), name);
-  if (!qfname) {
-	  return false;
-  }
-  /* pstrcat(qfname, "/quotas") ; */	/* possibly examine and adjust "name" */
-
-  euser_id = geteuid();
-  set_effective_uid(0);
-
-  DEBUG(5,("disk_quotas: looking for VxFS quotas file \"%s\"\n", qfname));
-  if((file=open(qfname, O_RDONLY,0))<0) {
-    set_effective_uid(euser_id);
-    return(False);
-  }
-  genbuf.ioc_cmd = VX_QUOTACTL;
-  genbuf.ioc_up = (void *) "abuf;
-
-  quotabuf.cmd = VX_GETQUOTA;
-  quotabuf.uid = euser_id;
-  quotabuf.addr = (caddr_t) &D;
-  ret = ioctl(file, VX_ADMIN_IOCTL, &genbuf);
-  close(file);
-
-  set_effective_uid(euser_id);
-
-  if (ret < 0) {
-    DEBUG(5,("disk_quotas ioctl (VxFS) failed. Error = %s\n", strerror(errno) ));
-    return(False);
-  }
-
-  /* If softlimit is zero, set it equal to hardlimit.
-   */
-
-  if (D.dqb_bsoftlimit==0)
-    D.dqb_bsoftlimit = D.dqb_bhardlimit;
-
-  /* Use softlimit to determine disk space. A user exceeding the quota is told
-   * that there's no space left. Writes might actually work for a bit if the
-   * hardlimit is set higher than softlimit. Effectively the disk becomes
-   * made of rubber latex and begins to expand to accommodate the user :-)
-   */
-  DEBUG(5,("disk_quotas for path \"%s\" block c/s/h %ld/%ld/%ld; file c/s/h %ld/%ld/%ld\n",
-         path, D.dqb_curblocks, D.dqb_bsoftlimit, D.dqb_bhardlimit,
-         D.dqb_curfiles, D.dqb_fsoftlimit, D.dqb_fhardlimit));
-
-  if (D.dqb_bsoftlimit==0)
-    return(False);
-  *bsize = DEV_BSIZE;
-  *dsize = D.dqb_bsoftlimit;
-
-  if (D.dqb_curblocks > D.dqb_bsoftlimit) {
-     *dfree = 0;
-     *dsize = D.dqb_curblocks;
-  } else
-    *dfree = D.dqb_bsoftlimit - D.dqb_curblocks;
-      
-  DEBUG(5,("disk_quotas for path \"%s\" returning  bsize %.0f, dfree %.0f, dsize %.0f\n",
-         path,(double)*bsize,(double)*dfree,(double)*dsize));
-
-  return(True);
-}
-
-#endif /* SUNOS5 || ... */
-
-#endif /* VXFS_QUOTA */
+#endif /* Solaris */
 
 #else /* WITH_QUOTAS */
 
diff --git a/source3/winbindd/idmap.c b/source3/winbindd/idmap.c
index 4012e70..faf0df2 100644
--- a/source3/winbindd/idmap.c
+++ b/source3/winbindd/idmap.c
@@ -120,6 +120,43 @@ static bool idmap_init(void)
 	return true;
 }
 
+bool domain_has_idmap_config(const char *domname)
+{
+	int i;
+	char *config_option;
+	const char *range = NULL;
+	const char *backend = NULL;
+
+	idmap_init();
+
+	for (i=0; i<num_domains; i++) {
+		if (strequal(idmap_domains[i]->name, domname)) {
+			return true;
+		}
+	}
+
+	/* fallback: also check loadparm */
+
+	config_option = talloc_asprintf(talloc_tos(), "idmap config %s",
+					domname);
+	if (config_option == NULL) {
+		DEBUG(0, ("out of memory\n"));
+		return false;
+	}
+
+	range = lp_parm_const_string(-1, config_option, "range", NULL);
+	backend = lp_parm_const_string(-1, config_option, "backend", NULL);
+	if (range != NULL && backend != NULL) {
+		DEBUG(5, ("idmap configuration specified for domain '%s'\n",
+			domname));
+		TALLOC_FREE(config_option);
+		return true;
+	}
+
+	TALLOC_FREE(config_option);
+	return false;
+}
+
 static bool idmap_found_domain_backend(
 	const char *string, regmatch_t matches[], void *private_data)
 {
diff --git a/source3/winbindd/idmap_hash/idmap_hash.c b/source3/winbindd/idmap_hash/idmap_hash.c
index 51bbf5b..0aba36c 100644
--- a/source3/winbindd/idmap_hash/idmap_hash.c
+++ b/source3/winbindd/idmap_hash/idmap_hash.c
@@ -104,7 +104,7 @@ static void separate_hashes(uint32_t id,
 /*********************************************************************
  ********************************************************************/
 
-static NTSTATUS be_init(struct idmap_domain *dom)
+static NTSTATUS idmap_hash_initialize(struct idmap_domain *dom)
 {
 	struct sid_hash_table *hashed_domains;
 	NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
@@ -112,6 +112,13 @@ static NTSTATUS be_init(struct idmap_domain *dom)
 	size_t num_domains = 0;
 	int i;
 
+	if (!strequal(dom->name, "*")) {
+		DBG_ERR("Error: idmap_hash configured for domain '%s'. "
+			"But the hash module can only be used for the default "
+			"idmap configuration.\n", dom->name);
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
 	/* If the domain SID hash table has been initialized, assume
 	   that we completed this function previously */
 
@@ -137,13 +144,26 @@ static NTSTATUS be_init(struct idmap_domain *dom)
 
 		if (is_null_sid(&dom_list[i].sid))
 			continue;
+
+		/*
+		 * Check if the domain from the list is not already configured
+		 * to use another idmap backend. Not checking this makes the
+		 * idmap_hash module map IDs for *all* domains implicitly.  This
+		 * is quite dangerous in setups that use multiple idmap
+		 * configurations.
+		 */
+
+		if (domain_has_idmap_config(dom_list[i].domain_name)) {
+			continue;
+		}
+
 		if ((hash = hash_domain_sid(&dom_list[i].sid)) == 0)
 			continue;
 
-		DEBUG(5,("hash:be_init() Adding %s (%s) -> %d\n",
+		DBG_INFO("Adding %s (%s) -> %d\n",
 			 dom_list[i].domain_name,
 			 sid_string_dbg(&dom_list[i].sid),
-			 hash));
+			 hash);
 
 		hashed_domains[hash].sid = talloc(hashed_domains, struct dom_sid);
 		sid_copy(hashed_domains[hash].sid, &dom_list[i].sid);
@@ -176,7 +196,7 @@ static NTSTATUS unixids_to_sids(struct idmap_domain *dom,
 		ids[i]->status = ID_UNKNOWN;
 	}
 
-	nt_status = be_init(dom);
+	nt_status = idmap_hash_initialize(dom);
 	BAIL_ON_NTSTATUS_ERROR(nt_status);
 
 	for (i=0; ids[i]; i++) {
@@ -226,7 +246,7 @@ static NTSTATUS sids_to_unixids(struct idmap_domain *dom,
 		ids[i]->status = ID_UNKNOWN;
 	}
 
-	nt_status = be_init(dom);
+	nt_status = idmap_hash_initialize(dom);
 	BAIL_ON_NTSTATUS_ERROR(nt_status);
 
 	for (i=0; ids[i]; i++) {
@@ -347,7 +367,7 @@ static NTSTATUS nss_hash_close(void)
 ********************************************************************/
 
 static struct idmap_methods hash_idmap_methods = {
-	.init            = be_init,
+	.init            = idmap_hash_initialize,
 	.unixids_to_sids = unixids_to_sids,
 	.sids_to_unixids = sids_to_unixids,
 };
diff --git a/source3/winbindd/winbindd_proto.h b/source3/winbindd/winbindd_proto.h
index dd389c2..12629ff 100644
--- a/source3/winbindd/winbindd_proto.h
+++ b/source3/winbindd/winbindd_proto.h
@@ -330,6 +330,7 @@ void init_idmap_child(void);
 struct winbindd_child *idmap_child(void);
 struct idmap_domain *idmap_find_domain_with_sid(const char *domname,
 						const struct dom_sid *sid);
+bool domain_has_idmap_config(const char *domname);
 
 /* The following definitions come from winbindd/winbindd_locator.c  */
 
diff --git a/source3/wscript b/source3/wscript
index c23f621..9b73bfc 100644
--- a/source3/wscript
+++ b/source3/wscript
@@ -1375,6 +1375,7 @@ main() {
     conf.CHECK_FUNCS_IN('getspnam', 'security')
     conf.CHECK_FUNCS_IN('getspnam', 'sec')
 
+    legacy_quota_libs = ''
     if Options.options.with_quotas:
         # For quotas on Veritas VxFS filesystems
         conf.CHECK_HEADERS('sys/fs/vx_quota.h')
@@ -1459,7 +1460,6 @@ main() {
         # check if Legacy quota code can be brought in
         # if standard interfaces are not supported
         #
-        legacy_quota_libs = ''
         if not conf.CONFIG_SET('WITH_QUOTAS'):
             if host_os.rfind('sunos5') > -1:
                 conf.DEFINE('SUNOS5', '1')
@@ -1477,7 +1477,7 @@ main() {
                             addmain=False)
             if not conf.CONFIG_SET('WITH_QUOTAS'):
                 legacy_quota_libs = ''
-        conf.env['legacy_quota_libs'] = legacy_quota_libs
+    conf.env['legacy_quota_libs'] = legacy_quota_libs
 
     #
     # cluster support (CTDB)
diff --git a/tests/oldquotas.c b/tests/oldquotas.c
index 0aacf23..54dc242 100644
--- a/tests/oldquotas.c
+++ b/tests/oldquotas.c
@@ -12,27 +12,13 @@
 
 #ifdef WITH_QUOTAS
 
-#if defined(VXFS_QUOTA) /* Veritas VxFS for Solaris 2 */
-
-bool disk_quotas_vxfs(const char *name, char *path, uint64_t *bsize,
-		      uint64_t *dfree, uint64_t *dsize);
-
-#endif /* VXFS_QUOTA */
-
-#if defined(SUNOS5) || defined(SUNOS4)
+#if defined(SUNOS5) /* Solaris */


-- 
Samba Shared Repository



More information about the samba-cvs mailing list