head 1.4; access; symbols pkgsrc-2020Q1:1.3.0.44 pkgsrc-2020Q1-base:1.3 pkgsrc-2019Q4:1.3.0.66 pkgsrc-2019Q4-base:1.3 pkgsrc-2019Q3:1.3.0.62 pkgsrc-2019Q3-base:1.3 pkgsrc-2019Q2:1.3.0.60 pkgsrc-2019Q2-base:1.3 pkgsrc-2019Q1:1.3.0.58 pkgsrc-2019Q1-base:1.3 pkgsrc-2018Q4:1.3.0.56 pkgsrc-2018Q4-base:1.3 pkgsrc-2018Q3:1.3.0.54 pkgsrc-2018Q3-base:1.3 pkgsrc-2018Q2:1.3.0.52 pkgsrc-2018Q2-base:1.3 pkgsrc-2018Q1:1.3.0.50 pkgsrc-2018Q1-base:1.3 pkgsrc-2017Q4:1.3.0.48 pkgsrc-2017Q4-base:1.3 pkgsrc-2017Q3:1.3.0.46 pkgsrc-2017Q3-base:1.3 pkgsrc-2017Q2:1.3.0.42 pkgsrc-2017Q2-base:1.3 pkgsrc-2017Q1:1.3.0.40 pkgsrc-2017Q1-base:1.3 pkgsrc-2016Q4:1.3.0.38 pkgsrc-2016Q4-base:1.3 pkgsrc-2016Q3:1.3.0.36 pkgsrc-2016Q3-base:1.3 pkgsrc-2016Q2:1.3.0.34 pkgsrc-2016Q2-base:1.3 pkgsrc-2016Q1:1.3.0.32 pkgsrc-2016Q1-base:1.3 pkgsrc-2015Q4:1.3.0.30 pkgsrc-2015Q4-base:1.3 pkgsrc-2015Q3:1.3.0.28 pkgsrc-2015Q3-base:1.3 pkgsrc-2015Q2:1.3.0.26 pkgsrc-2015Q2-base:1.3 pkgsrc-2015Q1:1.3.0.24 pkgsrc-2015Q1-base:1.3 pkgsrc-2014Q4:1.3.0.22 pkgsrc-2014Q4-base:1.3 pkgsrc-2014Q3:1.3.0.20 pkgsrc-2014Q3-base:1.3 pkgsrc-2014Q2:1.3.0.18 pkgsrc-2014Q2-base:1.3 pkgsrc-2014Q1:1.3.0.16 pkgsrc-2014Q1-base:1.3 pkgsrc-2013Q4:1.3.0.14 pkgsrc-2013Q4-base:1.3 pkgsrc-2013Q3:1.3.0.12 pkgsrc-2013Q3-base:1.3 pkgsrc-2013Q2:1.3.0.10 pkgsrc-2013Q2-base:1.3 pkgsrc-2013Q1:1.3.0.8 pkgsrc-2013Q1-base:1.3 pkgsrc-2012Q4:1.3.0.6 pkgsrc-2012Q4-base:1.3 pkgsrc-2012Q3:1.3.0.4 pkgsrc-2012Q3-base:1.3 pkgsrc-2012Q2:1.3.0.2 pkgsrc-2012Q2-base:1.3 pkgsrc-2012Q1:1.1.0.50 pkgsrc-2012Q1-base:1.1 pkgsrc-2011Q4:1.1.0.48 pkgsrc-2011Q4-base:1.1 pkgsrc-2011Q3:1.1.0.46 pkgsrc-2011Q3-base:1.1 pkgsrc-2011Q2:1.1.0.44 pkgsrc-2011Q2-base:1.1 pkgsrc-2011Q1:1.1.0.42 pkgsrc-2011Q1-base:1.1 pkgsrc-2010Q4:1.1.0.40 pkgsrc-2010Q4-base:1.1 pkgsrc-2010Q3:1.1.0.38 pkgsrc-2010Q3-base:1.1 pkgsrc-2010Q2:1.1.0.36 pkgsrc-2010Q2-base:1.1 pkgsrc-2010Q1:1.1.0.34 pkgsrc-2010Q1-base:1.1 pkgsrc-2009Q4:1.1.0.32 pkgsrc-2009Q4-base:1.1 pkgsrc-2009Q3:1.1.0.30 pkgsrc-2009Q3-base:1.1 pkgsrc-2009Q2:1.1.0.28 pkgsrc-2009Q2-base:1.1 pkgsrc-2009Q1:1.1.0.26 pkgsrc-2009Q1-base:1.1 pkgsrc-2008Q4:1.1.0.24 pkgsrc-2008Q4-base:1.1 pkgsrc-2008Q3:1.1.0.22 pkgsrc-2008Q3-base:1.1 cube-native-xorg:1.1.0.20 cube-native-xorg-base:1.1 pkgsrc-2008Q2:1.1.0.18 pkgsrc-2008Q2-base:1.1 cwrapper:1.1.0.16 pkgsrc-2008Q1:1.1.0.14 pkgsrc-2008Q1-base:1.1 pkgsrc-2007Q4:1.1.0.12 pkgsrc-2007Q4-base:1.1 pkgsrc-2007Q3:1.1.0.10 pkgsrc-2007Q3-base:1.1 pkgsrc-2007Q2:1.1.0.8 pkgsrc-2007Q2-base:1.1 pkgsrc-2007Q1:1.1.0.6 pkgsrc-2007Q1-base:1.1 pkgsrc-2006Q4:1.1.0.4 pkgsrc-2006Q4-base:1.1 pkgsrc-2006Q3:1.1.0.2 pkgsrc-2006Q3-base:1.1; locks; strict; comment @# @; 1.4 date 2020.05.25.11.55.51; author nia; state dead; branches; next 1.3; commitid d7KZk3XNjrTUhC9C; 1.3 date 2012.04.08.05.11.13; author dholland; state Exp; branches; next 1.2; 1.2 date 2012.04.08.04.43.51; author dholland; state Exp; branches; next 1.1; 1.1 date 2006.09.22.19.44.01; author joerg; state Exp; branches 1.1.50.1; next ; 1.1.50.1 date 2012.04.09.18.34.58; author spz; state Exp; branches; next ; desc @@ 1.4 log @net: remove wu-ftpd old insecure version (~2005), fails to build, and upstream is gone plenty of other ftp daemons still exist @ text @$NetBSD: patch-ap,v 1.3 2012/04/08 05:11:13 dholland Exp $ - support netbsd-6 libquota API - avoid build failure on netbsd 5.99 proplib quotas - support dragonfly quotas --- src/extensions.c.orig 2000-07-01 18:17:38.000000000 +0000 +++ src/extensions.c @@@@ -55,7 +55,9 @@@@ #include #include -#ifdef HAVE_SYS_FS_UFS_QUOTA_H +#if defined(HAVE_QUOTA_H) +#include +#elif defined(HAVE_SYS_FS_UFS_QUOTA_H) #include #elif defined(HAVE_UFS_UFS_QUOTA_H) #include @@@@ -67,6 +69,15 @@@@ #include #endif +#ifdef HAVE_QUOTA_H +/* NetBSD quota_open() API and library */ +#define HAVE_NETBSD_LIBQUOTA +#endif + +#if defined(__DragonFly__) && __DragonFly_version >= 160000 +#define dqblk ufs_dqblk +#endif + #if defined(HAVE_STATVFS) #include #elif defined(HAVE_SYS_VFS) @@@@ -91,8 +102,18 @@@@ #include "support/ftw.h" #endif +#if defined(HAVE_UFS_UFS_QUOTA_H) && defined(UFS_QUOTA_ENTRY_NAMES) +/* netbsd 5.99 proplib quota interface (march 2011-january 2012) - punt */ +#undef QUOTA +#endif + #ifdef QUOTA +#ifdef HAVE_NETBSD_LIBQUOTA +#undef QUOTA_DEVICE +struct quotaval quota_blocks, quota_files; +#else struct dqblk quota; +#endif char *time_quota(long curstate, long softlimit, long timelimit, char *timeleft); #endif @@@@ -252,6 +272,11 @@@@ void msg_massage(const char *inbuf, char char *outptr = outbuf; #ifdef QUOTA char timeleft[80]; +#ifdef HAVE_NETBSD_LIBQUOTA + uint64_t quotaval; +#else + long quotaval; +#endif #endif char buffer[MAXPATHLEN]; time_t curtime; @@@@ -372,67 +397,101 @@@@ void msg_massage(const char *inbuf, char #ifdef QUOTA case 'B': +#ifdef HAVE_NETBSD_LIBQUOTA + quotaval = quota_blocks.qv_hardlimit; +#else + quotaval = quota.dqb_bhardlimit; +#endif #ifdef QUOTA_BLOCKS /* 1024-blocks instead of 512-blocks */ snprintf(outptr, outlen, "%ld", quota.dqb_bhardlimit % 2 ? - (long) (quota.dqb_bhardlimit / 2 + 1) : (long) (quota.dqb_bhardlimit / 2)); + (quotaval / 2 + 1) : (quotaval / 2)); #else - snprintf(outptr, outlen, "%ld", (long) quota.dqb_bhardlimit); + snprintf(outptr, outlen, "%ld", quotaval); #endif break; case 'b': +#ifdef HAVE_NETBSD_LIBQUOTA + quotaval = quota_blocks.qv_softlimit; +#else + quotaval = quota.dqb_bsoftlimit; +#endif #ifdef QUOTA_BLOCKS /* 1024-blocks instead of 512-blocks */ - snprintf(outptr, outlen, "%ld", quota.dqb_bsoftlimit % 2 ? - (long) (quota.dqb_bsoftlimit / 2 + 1) : (long) (quota.dqb_bsoftlimit / 2)); + snprintf(outptr, outlen, "%ld", quotaval % 2 ? + (quotaval / 2 + 1) : (quotaval / 2)); #else - snprintf(outptr, outlen, "%ld", (long) quota.dqb_bsoftlimit); + snprintf(outptr, outlen, "%ld", quotaval); #endif break; case 'Q': +#ifdef HAVE_NETBSD_LIBQUOTA + quotaval = quota_blocks.qv_usage; +#else + quotaval = quota.dqb_curblocks; +#endif #ifdef QUOTA_BLOCKS /* 1024-blocks instead of 512-blocks */ - snprintf(outptr, outlen, "%ld", quota.dqb_curblocks % 2 ? - (long) (quota.dqb_curblocks / 2 + 1) : (long) (quota.dqb_curblocks / 2)); + snprintf(outptr, outlen, "%ld", quotaval % 2 ? + (quotaval / 2 + 1) : (quotaval / 2)); #else - snprintf(outptr, outlen, "%ld", quota.dqb_curblocks); + snprintf(outptr, outlen, "%ld", quotaval); #endif break; case 'I': -#if defined(QUOTA_INODE) - snprintf(outptr, outlen, "%d", quota.dqb_ihardlimit); +#ifdef HAVE_NETBSD_LIBQUOTA + quotaval = quota_files.qv_hardlimit; +#elif defined(QUOTA_INODE) + quotaval = quota.dqb_ihardlimit; #else - snprintf(outptr, outlen, "%ld", (long) quota.dqb_fhardlimit); + quotaval = quota.dqb_fhardlimit; #endif + snprintf(outptr, outlen, "%ld", quotaval); break; case 'i': -#if defined(QUOTA_INODE) - snprintf(outptr, outlen, "%d", quota.dqb_isoftlimit); +#ifdef HAVE_NETBSD_LIBQUOTA + quotaval = quota_files.qv_softlimit; +#elif defined(QUOTA_INODE) + quotaval = quota.dqb_isoftlimit; #else - snprintf(outptr, outlen, "%ld", (long) quota.dqb_fsoftlimit); + quotaval = quota.dqb_fsoftlimit; #endif + snprintf(outptr, outlen, "%ld", quotaval); break; case 'q': -#if defined(QUOTA_INODE) - snprintf(outptr, outlen, "%d", quota.dqb_curinodes); +#ifdef HAVE_NETBSD_LIBQUOTA + quotaval = quota_files.qv_usage; +#elif defined(QUOTA_INODE) + quotaval = quota.dqb_curinodes; #else - snprintf(outptr, outlen, "%ld", (long) quota.dqb_curfiles); + quotaval = quota.dqb_curfiles; #endif + snprintf(outptr, outlen, "%ld", quotaval); break; case 'H': +#ifdef HAVE_NETBSD_LIBQUOTA + time_quota(quota_blocks.qv_usage, quota_blocks.qv_softlimit, + quota_blocks.qv_expiretime, timeleft); +#else time_quota(quota.dqb_curblocks, quota.dqb_bsoftlimit, #if defined(QUOTA_INODE) quota.dqb_btime, timeleft); #else quota.dqb_btimelimit, timeleft); #endif +#endif strncpy(outptr, timeleft, outlen); + outptr[outlen] = 0; break; case 'h': +#ifdef HAVE_NETBSD_LIBQUOTA + time_quota(quota_files.qv_usage, quota_files.qv_softlimit, + quota_files.qv_expiretime, timeleft); +#else #if defined(QUOTA_INODE) time_quota(quota.dqb_curinodes, quota.dqb_isoftlimit, quota.dqb_itime, timeleft); @@@@ -440,7 +499,9 @@@@ void msg_massage(const char *inbuf, char time_quota(quota.dqb_curfiles, quota.dqb_fsoftlimit, quota.dqb_ftimelimit, timeleft); #endif +#endif strncpy(outptr, timeleft, outlen); + outptr[outlen] = 0; break; #endif /* QUOTA */ @@@@ -1888,12 +1949,35 @@@@ int path_to_device(char *pathname, char } return 1; } -#endif +#endif /* QUOTA_DEVICE */ void get_quota(char *fs, int uid) { char mnt_fsname[MNTMAXSTR]; -#ifdef HAS_NO_QUOTACTL + +#if defined(HAVE_NETBSD_LIBQUOTA) + struct quotahandle *qh; + struct quotakey qk; + + qh = quota_open(fs); + if (qh == NULL) { + quotaval_clear("a_blocks); + quotaval_clear("a_files); + return; + } + qk.qk_idtype = QUOTA_IDTYPE_USER; + qk.qk_id = uid; + qk.qk_objtype = QUOTA_OBJTYPE_BLOCKS; + if (quota_get(qh, &qk, "a_blocks)) { + quotaval_clear("a_blocks); + } + qk.qk_objtype = QUOTA_OBJTYPE_FILES; + if (quota_get(qh, &qk, "a_files)) { + quotaval_clear("a_files); + } + quota_close(qh); + +#elif defined(HAS_NO_QUOTACTL) int dirfd; struct quotctl qp; @@@@ -1905,19 +1989,18 @@@@ void get_quota(char *fs, int uid) ioctl(dirfd, Q_QUOTACTL, &qp); close(dirfd); } -#else -#ifdef QUOTA_DEVICE +#elif defined(QUOTA_DEVICE) if (path_to_device(fs, mnt_fsname)) #ifdef QCMD quotactl(QCMD(Q_GETQUOTA, USRQUOTA), mnt_fsname, uid, (char *) "a); #else quotactl(Q_GETQUOTA, mnt_fsname, uid, (char *) "a); #endif -#else + +#else /* base case */ quotactl(fs, QCMD(Q_GETQUOTA, USRQUOTA), uid, (char *) "a); #endif -#endif /* HAS_NO_QUOTACTL */ } char *time_quota(long curstate, long softlimit, long timelimit, char *timeleft) @ 1.3 log @Third time's the charm. I hope. autoconf can bite me. @ text @d1 1 a1 1 $NetBSD: patch-ap,v 1.2 2012/04/08 04:43:51 dholland Exp $ @ 1.2 log @Fix quota handling on NetBSD. If the new exists, use it. If all that exists is the 5.99 proplib quotas, disable quota support. @ text @d1 1 a1 1 $NetBSD: patch-ap,v 1.1 2006/09/22 19:44:01 joerg Exp $ d36 1 a36 1 @@@@ -91,8 +102,17 @@@@ d47 1 d208 1 a208 1 +#if defined(HAS_NETBSD_LIBQUOTA) d221 1 a221 1 + if (quota_get(qh, "a_blocks)) { d225 1 a225 1 + if (quota_get(qh, "a_files)) { @ 1.1 log @Fix build on DragonFly 1.6+. @ text @d1 1 a1 1 $NetBSD$ d3 5 a7 1 --- src/extensions.c.orig 2006-09-22 21:22:18.000000000 +0000 d9 12 a20 1 @@@@ -67,6 +67,10 @@@@ d24 5 d36 220 @ 1.1.50.1 log @Pullup ticket #3721 - requested by dholland net/wu-ftpd: build fix Revisions pulled up: - net/wu-ftpd/distinfo 1.18-1.20 - net/wu-ftpd/patches/patch-ai 1.11 - net/wu-ftpd/patches/patch-aj 1.8 - net/wu-ftpd/patches/patch-ao 1.2-1.3 - net/wu-ftpd/patches/patch-ap 1.2-1.3 - net/wu-ftpd/patches/patch-configure_in 1.1-1.2 ------------------------------------------------------------------- Module Name: pkgsrc Committed By: dholland Date: Sun Apr 8 04:43:51 UTC 2012 Modified Files: pkgsrc/net/wu-ftpd: distinfo pkgsrc/net/wu-ftpd/patches: patch-ai patch-ao patch-ap Added Files: pkgsrc/net/wu-ftpd/patches: patch-configure_in Log Message: Fix quota handling on NetBSD. If the new exists, use it. If all that exists is the 5.99 proplib quotas, disable quota support. To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 pkgsrc/net/wu-ftpd/distinfo cvs rdiff -u -r1.10 -r1.11 pkgsrc/net/wu-ftpd/patches/patch-ai cvs rdiff -u -r1.1 -r1.2 pkgsrc/net/wu-ftpd/patches/patch-ao \ pkgsrc/net/wu-ftpd/patches/patch-ap cvs rdiff -u -r0 -r1.1 pkgsrc/net/wu-ftpd/patches/patch-configure_in ------------------------------------------------------------------- Module Name: pkgsrc Committed By: dholland Date: Sun Apr 8 04:49:57 UTC 2012 Modified Files: pkgsrc/net/wu-ftpd: distinfo pkgsrc/net/wu-ftpd/patches: patch-aj Log Message: whoops, forgot one To generate a diff of this commit: cvs rdiff -u -r1.18 -r1.19 pkgsrc/net/wu-ftpd/distinfo cvs rdiff -u -r1.7 -r1.8 pkgsrc/net/wu-ftpd/patches/patch-aj ------------------------------------------------------------------- Module Name: pkgsrc Committed By: dholland Date: Sun Apr 8 05:11:13 UTC 2012 Modified Files: pkgsrc/net/wu-ftpd: distinfo pkgsrc/net/wu-ftpd/patches: patch-ao patch-ap patch-configure_in Log Message: Third time's the charm. I hope. autoconf can bite me. To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 pkgsrc/net/wu-ftpd/distinfo cvs rdiff -u -r1.2 -r1.3 pkgsrc/net/wu-ftpd/patches/patch-ao \ pkgsrc/net/wu-ftpd/patches/patch-ap cvs rdiff -u -r1.1 -r1.2 pkgsrc/net/wu-ftpd/patches/patch-configure_in @ text @d3 1 a3 5 - support netbsd-6 libquota API - avoid build failure on netbsd 5.99 proplib quotas - support dragonfly quotas --- src/extensions.c.orig 2000-07-01 18:17:38.000000000 +0000 d5 1 a5 12 @@@@ -55,7 +55,9 @@@@ #include #include -#ifdef HAVE_SYS_FS_UFS_QUOTA_H +#if defined(HAVE_QUOTA_H) +#include +#elif defined(HAVE_SYS_FS_UFS_QUOTA_H) #include #elif defined(HAVE_UFS_UFS_QUOTA_H) #include @@@@ -67,6 +69,15 @@@@ a8 5 +#ifdef HAVE_QUOTA_H +/* NetBSD quota_open() API and library */ +#define HAVE_NETBSD_LIBQUOTA +#endif + a15 221 @@@@ -91,8 +102,18 @@@@ #include "support/ftw.h" #endif +#if defined(HAVE_UFS_UFS_QUOTA_H) && defined(UFS_QUOTA_ENTRY_NAMES) +/* netbsd 5.99 proplib quota interface (march 2011-january 2012) - punt */ +#undef QUOTA +#endif + #ifdef QUOTA +#ifdef HAVE_NETBSD_LIBQUOTA +#undef QUOTA_DEVICE +struct quotaval quota_blocks, quota_files; +#else struct dqblk quota; +#endif char *time_quota(long curstate, long softlimit, long timelimit, char *timeleft); #endif @@@@ -252,6 +272,11 @@@@ void msg_massage(const char *inbuf, char char *outptr = outbuf; #ifdef QUOTA char timeleft[80]; +#ifdef HAVE_NETBSD_LIBQUOTA + uint64_t quotaval; +#else + long quotaval; +#endif #endif char buffer[MAXPATHLEN]; time_t curtime; @@@@ -372,67 +397,101 @@@@ void msg_massage(const char *inbuf, char #ifdef QUOTA case 'B': +#ifdef HAVE_NETBSD_LIBQUOTA + quotaval = quota_blocks.qv_hardlimit; +#else + quotaval = quota.dqb_bhardlimit; +#endif #ifdef QUOTA_BLOCKS /* 1024-blocks instead of 512-blocks */ snprintf(outptr, outlen, "%ld", quota.dqb_bhardlimit % 2 ? - (long) (quota.dqb_bhardlimit / 2 + 1) : (long) (quota.dqb_bhardlimit / 2)); + (quotaval / 2 + 1) : (quotaval / 2)); #else - snprintf(outptr, outlen, "%ld", (long) quota.dqb_bhardlimit); + snprintf(outptr, outlen, "%ld", quotaval); #endif break; case 'b': +#ifdef HAVE_NETBSD_LIBQUOTA + quotaval = quota_blocks.qv_softlimit; +#else + quotaval = quota.dqb_bsoftlimit; +#endif #ifdef QUOTA_BLOCKS /* 1024-blocks instead of 512-blocks */ - snprintf(outptr, outlen, "%ld", quota.dqb_bsoftlimit % 2 ? - (long) (quota.dqb_bsoftlimit / 2 + 1) : (long) (quota.dqb_bsoftlimit / 2)); + snprintf(outptr, outlen, "%ld", quotaval % 2 ? + (quotaval / 2 + 1) : (quotaval / 2)); #else - snprintf(outptr, outlen, "%ld", (long) quota.dqb_bsoftlimit); + snprintf(outptr, outlen, "%ld", quotaval); #endif break; case 'Q': +#ifdef HAVE_NETBSD_LIBQUOTA + quotaval = quota_blocks.qv_usage; +#else + quotaval = quota.dqb_curblocks; +#endif #ifdef QUOTA_BLOCKS /* 1024-blocks instead of 512-blocks */ - snprintf(outptr, outlen, "%ld", quota.dqb_curblocks % 2 ? - (long) (quota.dqb_curblocks / 2 + 1) : (long) (quota.dqb_curblocks / 2)); + snprintf(outptr, outlen, "%ld", quotaval % 2 ? + (quotaval / 2 + 1) : (quotaval / 2)); #else - snprintf(outptr, outlen, "%ld", quota.dqb_curblocks); + snprintf(outptr, outlen, "%ld", quotaval); #endif break; case 'I': -#if defined(QUOTA_INODE) - snprintf(outptr, outlen, "%d", quota.dqb_ihardlimit); +#ifdef HAVE_NETBSD_LIBQUOTA + quotaval = quota_files.qv_hardlimit; +#elif defined(QUOTA_INODE) + quotaval = quota.dqb_ihardlimit; #else - snprintf(outptr, outlen, "%ld", (long) quota.dqb_fhardlimit); + quotaval = quota.dqb_fhardlimit; #endif + snprintf(outptr, outlen, "%ld", quotaval); break; case 'i': -#if defined(QUOTA_INODE) - snprintf(outptr, outlen, "%d", quota.dqb_isoftlimit); +#ifdef HAVE_NETBSD_LIBQUOTA + quotaval = quota_files.qv_softlimit; +#elif defined(QUOTA_INODE) + quotaval = quota.dqb_isoftlimit; #else - snprintf(outptr, outlen, "%ld", (long) quota.dqb_fsoftlimit); + quotaval = quota.dqb_fsoftlimit; #endif + snprintf(outptr, outlen, "%ld", quotaval); break; case 'q': -#if defined(QUOTA_INODE) - snprintf(outptr, outlen, "%d", quota.dqb_curinodes); +#ifdef HAVE_NETBSD_LIBQUOTA + quotaval = quota_files.qv_usage; +#elif defined(QUOTA_INODE) + quotaval = quota.dqb_curinodes; #else - snprintf(outptr, outlen, "%ld", (long) quota.dqb_curfiles); + quotaval = quota.dqb_curfiles; #endif + snprintf(outptr, outlen, "%ld", quotaval); break; case 'H': +#ifdef HAVE_NETBSD_LIBQUOTA + time_quota(quota_blocks.qv_usage, quota_blocks.qv_softlimit, + quota_blocks.qv_expiretime, timeleft); +#else time_quota(quota.dqb_curblocks, quota.dqb_bsoftlimit, #if defined(QUOTA_INODE) quota.dqb_btime, timeleft); #else quota.dqb_btimelimit, timeleft); #endif +#endif strncpy(outptr, timeleft, outlen); + outptr[outlen] = 0; break; case 'h': +#ifdef HAVE_NETBSD_LIBQUOTA + time_quota(quota_files.qv_usage, quota_files.qv_softlimit, + quota_files.qv_expiretime, timeleft); +#else #if defined(QUOTA_INODE) time_quota(quota.dqb_curinodes, quota.dqb_isoftlimit, quota.dqb_itime, timeleft); @@@@ -440,7 +499,9 @@@@ void msg_massage(const char *inbuf, char time_quota(quota.dqb_curfiles, quota.dqb_fsoftlimit, quota.dqb_ftimelimit, timeleft); #endif +#endif strncpy(outptr, timeleft, outlen); + outptr[outlen] = 0; break; #endif /* QUOTA */ @@@@ -1888,12 +1949,35 @@@@ int path_to_device(char *pathname, char } return 1; } -#endif +#endif /* QUOTA_DEVICE */ void get_quota(char *fs, int uid) { char mnt_fsname[MNTMAXSTR]; -#ifdef HAS_NO_QUOTACTL + +#if defined(HAVE_NETBSD_LIBQUOTA) + struct quotahandle *qh; + struct quotakey qk; + + qh = quota_open(fs); + if (qh == NULL) { + quotaval_clear("a_blocks); + quotaval_clear("a_files); + return; + } + qk.qk_idtype = QUOTA_IDTYPE_USER; + qk.qk_id = uid; + qk.qk_objtype = QUOTA_OBJTYPE_BLOCKS; + if (quota_get(qh, &qk, "a_blocks)) { + quotaval_clear("a_blocks); + } + qk.qk_objtype = QUOTA_OBJTYPE_FILES; + if (quota_get(qh, &qk, "a_files)) { + quotaval_clear("a_files); + } + quota_close(qh); + +#elif defined(HAS_NO_QUOTACTL) int dirfd; struct quotctl qp; @@@@ -1905,19 +1989,18 @@@@ void get_quota(char *fs, int uid) ioctl(dirfd, Q_QUOTACTL, &qp); close(dirfd); } -#else -#ifdef QUOTA_DEVICE +#elif defined(QUOTA_DEVICE) if (path_to_device(fs, mnt_fsname)) #ifdef QCMD quotactl(QCMD(Q_GETQUOTA, USRQUOTA), mnt_fsname, uid, (char *) "a); #else quotactl(Q_GETQUOTA, mnt_fsname, uid, (char *) "a); #endif -#else + +#else /* base case */ quotactl(fs, QCMD(Q_GETQUOTA, USRQUOTA), uid, (char *) "a); #endif -#endif /* HAS_NO_QUOTACTL */ } char *time_quota(long curstate, long softlimit, long timelimit, char *timeleft) @