The branch, master has been updated via cd93c7d waf: add tests for NFS quota stuff via 992908a waf: add test for HAVE_DQB_FSOFTLIMIT via 58f6247 waf: make checks for different XFS flavours via a7f0a07 s3:autoconf: look for irix xfs only when if we didn't find the Linux one before via abf98e3 s3:sysquota_nfs: fix build on Tru64 et alii via 0c0441b rpcserver: fix useless declaration warning via 31e58a1 s3:sysquota-test: include ufs/ufs/quota.h only when found via 5c3769b build: define _BSD_TYPES on IRIX to have types like u_short from ee2d6ae s3:quota: clean up and consolidate the xfs quota checks and defines
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit cd93c7d055232f1eb0d4de92066fd5eb5f9e5ff1 Author: Björn Jacke <b...@sernet.de> Date: Fri Sep 7 20:41:58 2012 +0200 waf: add tests for NFS quota stuff Autobuild-User(master): Björn Jacke <b...@sernet.de> Autobuild-Date(master): Fri Sep 7 22:21:55 CEST 2012 on sn-devel-104 commit 992908a3dabd9d3c966564db040f0e4f4f2cfe25 Author: Björn Jacke <b...@sernet.de> Date: Fri Sep 7 20:02:03 2012 +0200 waf: add test for HAVE_DQB_FSOFTLIMIT commit 58f6247c79de329ea19cdc1f131ed3f49f552fd7 Author: Björn Jacke <b...@sernet.de> Date: Fri Sep 7 19:49:25 2012 +0200 waf: make checks for different XFS flavours commit a7f0a07a05a38a371fef67f5611d2089713d4d4b Author: Björn Jacke <b...@sernet.de> Date: Fri Sep 7 19:28:12 2012 +0200 s3:autoconf: look for irix xfs only when if we didn't find the Linux one before commit abf98e32899194f6b8ce603e80596f39fee5cc2b Author: Björn Jacke <b...@sernet.de> Date: Fri Sep 7 17:35:41 2012 +0200 s3:sysquota_nfs: fix build on Tru64 et alii the old Unix world put the struct rquota directly into the getquota_rslt struct, the new Unix world puts a getquota_rslt_u union in between and they decided to rename the status struct member. commit 0c0441bd4550adb864baa0c36a201d273a24b75e Author: Björn Jacke <b...@sernet.de> Date: Fri Sep 7 16:19:52 2012 +0200 rpcserver: fix useless declaration warning issues by irix compiler commit 31e58a1fcea6e870eae1aa4b5dfb807bce97cf74 Author: Björn Jacke <b...@sernet.de> Date: Fri Sep 7 15:59:16 2012 +0200 s3:sysquota-test: include ufs/ufs/quota.h only when found commit 5c3769b056ee0e7c2243907dc87714587695ea2a Author: Björn Jacke <b...@sernet.de> Date: Fri Sep 7 15:56:15 2012 +0200 build: define _BSD_TYPES on IRIX to have types like u_short why the hell do IRIX systems headers like quota.h use types that are available only with such a define...? ----------------------------------------------------------------------- Summary of changes: lib/replace/libreplace_cc.m4 | 1 + lib/replace/wscript | 1 + source3/configure.in | 5 +++- source3/lib/sysquotas_nfs.c | 54 ++++++++++++++++++++++---------------- source3/rpc_server/rpc_server.h | 1 - source3/tests/sysquotas.c | 2 + source3/wscript | 32 +++++++++++++++++++++-- 7 files changed, 68 insertions(+), 28 deletions(-) mode change 100755 => 100644 source3/wscript Changeset truncated at 500 lines: diff --git a/lib/replace/libreplace_cc.m4 b/lib/replace/libreplace_cc.m4 index e316f8b..50cb735 100644 --- a/lib/replace/libreplace_cc.m4 +++ b/lib/replace/libreplace_cc.m4 @@ -64,6 +64,7 @@ dnl Add #include for broken IRIX header files case "$host_os" in *irix6*) AC_ADD_INCLUDE(<standards.h>) AC_N_DEFINE(_XOPEN_SOURCE,600) + AC_N_DEFINE(_BSD_TYPES) ;; *hpux*) # mmap on HPUX is completely broken... diff --git a/lib/replace/wscript b/lib/replace/wscript index e178cca..3dbbd2a 100644 --- a/lib/replace/wscript +++ b/lib/replace/wscript @@ -41,6 +41,7 @@ def configure(conf): # SCM_RIGHTS is only avail if _XOPEN_SOURCE iѕ defined on IRIX if conf.env['SYSTEM_UNAME_SYSNAME'] == 'IRIX': conf.DEFINE('_XOPEN_SOURCE', 600, add_to_cflags=True) + conf.DEFINE('_BSD_TYPES', 1, add_to_cflags=True) conf.CHECK_HEADERS('linux/types.h crypt.h locale.h acl/libacl.h compat.h') conf.CHECK_HEADERS('acl/libacl.h attr/xattr.h compat.h ctype.h dustat.h') diff --git a/source3/configure.in b/source3/configure.in index 0bae24b..e6a1310 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -4586,7 +4586,7 @@ AC_CHECK_HEADERS(sys/quota.h) AC_CHECK_HEADERS(ufs/ufs/quota.h) -if test x"$samba_cv_found_xfs_header" != x"yes"; then +if test x"$ac_cv_header_xfs_xqm_h" != x"yes"; then # if we have xfs quota support <sys/quota.h> (IRIX) we should use it AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [ AC_TRY_COMPILE([ @@ -4672,6 +4672,9 @@ AC_TRY_COMPILE([ if test x"$samba_cv_HAVE_NFS_QUOTAS" = x"yes"; then AC_DEFINE(HAVE_NFS_QUOTAS,1,[NFS quota support is available]) + AC_CHECK_MEMBER(struct getquota_rslt.getquota_rslt_u, + AC_DEFINE(HAVE_GETQUOTA_RSLT_GETQUOTA_RSLT_U, 1, [Defined if struct getquota_rslt has getquota_rslt_u]),, + [#include <rpcsvc/rquota.h>]) fi ################################################# diff --git a/source3/lib/sysquotas_nfs.c b/source3/lib/sysquotas_nfs.c index 043ab9f..6f87137 100644 --- a/source3/lib/sysquotas_nfs.c +++ b/source3/lib/sysquotas_nfs.c @@ -44,6 +44,14 @@ #endif #include <rpc/xdr.h> +#ifdef HAVE_GETQUOTA_RSLT_GETQUOTA_RSLT_U +#define GQR_RQUOTA getquota_rslt_u.gqr_rquota +#define GQR_STATUS status +#else +#define GQR_RQUOTA gqr_rquota +#define GQR_STATUS gqr_status +#endif + static int my_xdr_getquota_args(XDR *xdrsp, struct getquota_args *args) { if (!xdr_string(xdrsp, &args->gqa_pathp, RQ_PATHLEN )) @@ -63,23 +71,23 @@ static int my_xdr_getquota_rslt(XDR *xdrsp, struct getquota_rslt *gqr) } gqr->status = quotastat; - if (!xdr_int(xdrsp, &gqr->getquota_rslt_u.gqr_rquota.rq_bsize)) { + if (!xdr_int(xdrsp, &gqr->GQR_RQUOTA.rq_bsize)) { DEBUG(6,("nfs_quotas: Block size bad or zero\n")); return 0; } - if (!xdr_bool(xdrsp, &gqr->getquota_rslt_u.gqr_rquota.rq_active)) { + if (!xdr_bool(xdrsp, &gqr->GQR_RQUOTA.rq_active)) { DEBUG(6,("nfs_quotas: Active bad or zero\n")); return 0; } - if (!xdr_int(xdrsp, (int *)&gqr->getquota_rslt_u.gqr_rquota.rq_bhardlimit)) { + if (!xdr_int(xdrsp, (int *)&gqr->GQR_RQUOTA.rq_bhardlimit)) { DEBUG(6,("nfs_quotas: Hardlimit bad or zero\n")); return 0; } - if (!xdr_int(xdrsp, (int *)&gqr->getquota_rslt_u.gqr_rquota.rq_bsoftlimit)) { + if (!xdr_int(xdrsp, (int *)&gqr->GQR_RQUOTA.rq_bsoftlimit)) { DEBUG(6,("nfs_quotas: Softlimit bad or zero\n")); return 0; } - if (!xdr_int(xdrsp, (int *)&gqr->getquota_rslt_u.gqr_rquota.rq_curblocks)) { + if (!xdr_int(xdrsp, (int *)&gqr->GQR_RQUOTA.rq_curblocks)) { DEBUG(6,("nfs_quotas: Currentblocks bad or zero\n")); return 0; } @@ -186,17 +194,17 @@ int sys_get_nfs_quota(const char *path, const char *bdev, "curfiles : '%u'\n" "btimeleft : '%u'\n" "ftimeleft : '%u'\n", - gq_rslt.status, - gq_rslt.getquota_rslt_u.gqr_rquota.rq_bsize, - gq_rslt.getquota_rslt_u.gqr_rquota.rq_active?"yes":"no", - gq_rslt.getquota_rslt_u.gqr_rquota.rq_bhardlimit, - gq_rslt.getquota_rslt_u.gqr_rquota.rq_bsoftlimit, - gq_rslt.getquota_rslt_u.gqr_rquota.rq_curblocks, - gq_rslt.getquota_rslt_u.gqr_rquota.rq_fhardlimit, - gq_rslt.getquota_rslt_u.gqr_rquota.rq_fsoftlimit, - gq_rslt.getquota_rslt_u.gqr_rquota.rq_curfiles, - gq_rslt.getquota_rslt_u.gqr_rquota.rq_btimeleft, - gq_rslt.getquota_rslt_u.gqr_rquota.rq_ftimeleft)); + gq_rslt.GQR_STATUS, + gq_rslt.GQR_RQUOTA.rq_bsize, + gq_rslt.GQR_RQUOTA.rq_active?"yes":"no", + gq_rslt.GQR_RQUOTA.rq_bhardlimit, + gq_rslt.GQR_RQUOTA.rq_bsoftlimit, + gq_rslt.GQR_RQUOTA.rq_curblocks, + gq_rslt.GQR_RQUOTA.rq_fhardlimit, + gq_rslt.GQR_RQUOTA.rq_fsoftlimit, + gq_rslt.GQR_RQUOTA.rq_curfiles, + gq_rslt.GQR_RQUOTA.rq_btimeleft, + gq_rslt.GQR_RQUOTA.rq_ftimeleft)); /* * gqr.status returns @@ -206,19 +214,19 @@ int sys_get_nfs_quota(const char *path, const char *bdev, * 3 if no permission to get the quota. */ - switch (gq_rslt.status) { + switch (gq_rslt.GQR_STATUS) { case 0: DEBUG(3, ("sys_get_nfs_quotas: Remote Quotas Failed! " - "Error '%i'\n", gq_rslt.status)); + "Error '%i'\n", gq_rslt.GQR_STATUS)); ret = -1; goto out; case 1: DEBUG(10, ("sys_get_nfs_quotas: Good quota data\n")); - dp->bsize = (uint64_t)gq_rslt.getquota_rslt_u.gqr_rquota.rq_bsize; - dp->softlimit = gq_rslt.getquota_rslt_u.gqr_rquota.rq_bsoftlimit; - dp->hardlimit = gq_rslt.getquota_rslt_u.gqr_rquota.rq_bhardlimit; - dp->curblocks = gq_rslt.getquota_rslt_u.gqr_rquota.rq_curblocks; + dp->bsize = (uint64_t)gq_rslt.GQR_RQUOTA.rq_bsize; + dp->softlimit = gq_rslt.GQR_RQUOTA.rq_bsoftlimit; + dp->hardlimit = gq_rslt.GQR_RQUOTA.rq_bhardlimit; + dp->curblocks = gq_rslt.GQR_RQUOTA.rq_curblocks; break; case 2: @@ -234,7 +242,7 @@ int sys_get_nfs_quota(const char *path, const char *bdev, default: DEBUG(5, ("sys_get_nfs_quotas: Unknown remote quota status " - "code '%i'\n", gq_rslt.status)); + "code '%i'\n", gq_rslt.GQR_STATUS)); ret = -1; goto out; break; diff --git a/source3/rpc_server/rpc_server.h b/source3/rpc_server/rpc_server.h index 5d8ee6a..308354d 100644 --- a/source3/rpc_server/rpc_server.h +++ b/source3/rpc_server/rpc_server.h @@ -21,7 +21,6 @@ #define _RPC_SERVER_H_ struct pipes_struct; -enum dcerpc_transport_t; typedef bool (*dcerpc_ncacn_disconnect_fn)(struct pipes_struct *p); typedef void (named_pipe_termination_fn)(void *private_data); diff --git a/source3/tests/sysquotas.c b/source3/tests/sysquotas.c index e9a699c..68f8a1c 100644 --- a/source3/tests/sysquotas.c +++ b/source3/tests/sysquotas.c @@ -51,7 +51,9 @@ #include <sys/quota.h> #else /* *BSD */ #include <sys/types.h> +#ifdef HAVE_UFS_UFS_QUOTA_H #include <ufs/ufs/quota.h> +#endif #include <machine/param.h> #endif diff --git a/source3/wscript b/source3/wscript old mode 100755 new mode 100644 index a496aaa..61d3b9a --- a/source3/wscript +++ b/source3/wscript @@ -1188,13 +1188,39 @@ main() { if Options.options.with_quotas: # For quotas on Veritas VxFS filesystems conf.CHECK_HEADERS('sys/fs/vx_quota.h') - # For quotas on Linux XFS filesystems - conf.CHECK_HEADERS('xfs/xqm.h') # For sys/quota.h and linux/quota.h conf.CHECK_HEADERS('sys/quota.h') # For quotas on BSD systems conf.CHECK_HEADERS('ufs/ufs/quota.h') - + # For quotas on Linux XFS filesystems + if conf.CHECK_HEADERS('xfs/xqm.h'): + conf.DEFINE('HAVE_XFS_QUOTAS', '1') + else: + # For Irix XFS + conf.CHECK_CODE(''' + #include "confdefs.h" + #ifdef HAVE_SYS_TYPES_H + #include <sys/types.h> + #endif + #ifdef HAVE_ASM_TYPES_H + #include <asm/types.h> + #endif + #include <sys/quota.h> + int i = Q_XGETQUOTA;''', + define='HAVE_XFS_QUOTAS', + msg='for XFS QUOTA in <sys/quota.h>', + execute=False, + local_include=False) + + # For IRIX like dqb_isoftlimit instead of dqb_fsoftlimit in struc dqblk + conf.CHECK_STRUCTURE_MEMBER('struct dqblk', 'dqb_fsoftlimit', define='HAVE_DQB_FSOFTLIMIT', + headers='sys/quota.h') + + if conf.CHECK_HEADERS('rpcsvc/rquota.h'): + conf.DEFINE('HAVE_NFS_QUOTAS', '1') + conf.CHECK_STRUCTURE_MEMBER('struct getquota_rslt', 'getquota_rslt_u', + define='HAVE_GETQUOTA_RSLT_GETQUOTA_RSLT_U', + headers='rpcsvc/rquota.h') # # checking for clustering extensions (CTDB) -- Samba Shared Repository