[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