Add new package p5-Quota 1.6.7, perl bindings for quotas.
Originally from wip with netbsd-6 patches sketched by yours truly and finished/tested by Edgar Fuss. The Quota module provides access to file system quotas. The quotactl system call or ioctl is used to query or set quotas on the local host, or queries are submitted via RPC to a remote host. Mount tables can be parsed with getmntent and paths can be translated to device files (or whatever the actual quotactl implementations needs as argument) of the according file system.
This commit is contained in:
parent
24267673c0
commit
b104d324f3
6 changed files with 253 additions and 0 deletions
7
sysutils/p5-Quota/DESCR
Normal file
7
sysutils/p5-Quota/DESCR
Normal file
|
@ -0,0 +1,7 @@
|
|||
The Quota module provides access to file system quotas.
|
||||
|
||||
The quotactl system call or ioctl or libquota is used to query or set
|
||||
quotas on the local host, or queries are submitted via RPC to a remote
|
||||
host. Mount tables can be parsed with getmntent and paths can be
|
||||
translated to device files (or whatever the actual quotactl
|
||||
implementations needs as argument) of the according file system.
|
16
sysutils/p5-Quota/Makefile
Normal file
16
sysutils/p5-Quota/Makefile
Normal file
|
@ -0,0 +1,16 @@
|
|||
# $NetBSD: Makefile,v 1.1 2012/08/14 14:24:20 dholland Exp $
|
||||
|
||||
DISTNAME= Quota-1.6.7
|
||||
PKGNAME= p5-${DISTNAME}
|
||||
CATEGORIES= sysutils perl5
|
||||
MASTER_SITES= ${MASTER_SITE_PERL_CPAN:=Quota/}
|
||||
|
||||
COMMENT= Perl interface to filesystem quotas
|
||||
LICENSE= ${PERL5_LICENSE}
|
||||
|
||||
PKG_DESTDIR_SUPPORT= user-destdir
|
||||
|
||||
PERL5_PACKLIST= auto/Quota/.packlist
|
||||
|
||||
.include "../../lang/perl5/module.mk"
|
||||
.include "../../mk/bsd.pkg.mk"
|
8
sysutils/p5-Quota/distinfo
Normal file
8
sysutils/p5-Quota/distinfo
Normal file
|
@ -0,0 +1,8 @@
|
|||
$NetBSD: distinfo,v 1.1 2012/08/14 14:24:20 dholland Exp $
|
||||
|
||||
SHA1 (Quota-1.6.7.tar.gz) = b81f4df0f159d2fc807ff403bd4946acdb6a2b4f
|
||||
RMD160 (Quota-1.6.7.tar.gz) = 188fa10cd739797a404e2b57e534710bf565344d
|
||||
Size (Quota-1.6.7.tar.gz) = 48631 bytes
|
||||
SHA1 (patch-aa) = 8f413ca8ed6d3c0c7bf94285ea4fa16805f3d39d
|
||||
SHA1 (patch-ab) = c1645e1c9e8a8c59373b7041f0b9fe8e19e5cda3
|
||||
SHA1 (patch-ac) = 61ce522f305948584590289b55c30063a20496fc
|
35
sysutils/p5-Quota/patches/patch-aa
Normal file
35
sysutils/p5-Quota/patches/patch-aa
Normal file
|
@ -0,0 +1,35 @@
|
|||
$NetBSD: patch-aa,v 1.1 2012/08/14 14:24:20 dholland Exp $
|
||||
|
||||
Teach Makefile.PL about libquota.
|
||||
|
||||
--- Makefile.PL.orig 2011-11-13 16:21:52.000000000 +0100
|
||||
+++ Makefile.PL 2012-05-14 16:21:37.000000000 +0200
|
||||
@@ -33,6 +33,7 @@
|
||||
warn "WARNING: No appropriate hints found for this OS: '$os - see INSTALL'\n";
|
||||
}
|
||||
|
||||
+my $extralibs = "";
|
||||
|
||||
# check whether the Andrew File System (AFS) is installed and running
|
||||
|
||||
@@ -42,7 +43,7 @@
|
||||
$hasafs = '-DAFSQUOTA';
|
||||
$AFSHOME = -d "/usr/afsws" ? "/usr/afsws" : "/usr";
|
||||
$extrainc = "-I$AFSHOME/include -I$AFSHOME/include/afs";
|
||||
- $extralibs = "-L$AFSHOME/lib -L$AFSHOME/lib/afs -lsys -lrx -lrxkad -llwp";
|
||||
+ $extralibs .= " -L$AFSHOME/lib -L$AFSHOME/lib/afs -lsys -lrx -lrxkad -llwp";
|
||||
$afsquota = "afsquota.o";
|
||||
}
|
||||
}
|
||||
@@ -60,6 +61,11 @@
|
||||
# }
|
||||
}
|
||||
|
||||
+# check whether wee are using the NetBSD quota library
|
||||
+if ( ($os =~ /^NetBSD 6/) or ($os =~ /^NetBSD 5\.99\.(\d\d)/ and $1 >= 59) ) {
|
||||
+ $extralibs .= " -lquota";
|
||||
+}
|
||||
+
|
||||
#-----------------------------------------------------------------------------#
|
||||
|
||||
use ExtUtils::MakeMaker;
|
35
sysutils/p5-Quota/patches/patch-ab
Normal file
35
sysutils/p5-Quota/patches/patch-ab
Normal file
|
@ -0,0 +1,35 @@
|
|||
$NetBSD: patch-ab,v 1.1 2012/08/14 14:24:20 dholland Exp $
|
||||
|
||||
Extend hints/bsd.h to define NETBSD_LIBQUOTA and include <quota.h> on
|
||||
NetBSD >= 5.99.59.
|
||||
|
||||
--- hints/bsd.h.orig 2007-11-24 14:49:43.000000000 +0100
|
||||
+++ hints/bsd.h 2012-05-14 15:52:47.000000000 +0200
|
||||
@@ -9,6 +9,7 @@
|
||||
* and Jon Schewe <schewe@tcfreenet.org>
|
||||
* NetBSD mods and merge of *BSD-related hints provided by
|
||||
* Jaromir Dolecek <jdolecek@NetBSD.org>
|
||||
+ * NetBSD libquota mods by David Holland <dholland@netbsd.org>
|
||||
*/
|
||||
|
||||
/* See hints/none.h for a complete list of options with explanations */
|
||||
@@ -16,7 +17,19 @@
|
||||
#include <sys/param.h>
|
||||
#include <sys/mount.h>
|
||||
#include <fstab.h>
|
||||
+
|
||||
+#if defined(__NetBSD__) && __NetBSD_Version__ >= 599004800 && __NetBSD_Version__ < 599005900
|
||||
+#error "NetBSD 5.99 proplib-based quotas not supported"
|
||||
+#endif
|
||||
+
|
||||
+#if defined(__NetBSD__) && (__NetBSD_Version__ >= 599005900) /* NetBSD 5.99.59 */
|
||||
+#include <quota.h>
|
||||
+/* struct qblk needed for the way the XS handles NFS quota */
|
||||
+#include <ufs/ufs/quota1.h>
|
||||
+#define NETBSD_LIBQUOTA
|
||||
+#else
|
||||
#include <ufs/ufs/quota.h>
|
||||
+#endif
|
||||
|
||||
#if defined(__NetBSD__) && (__NetBSD_Version__ >= 299000900) /* NetBSD 2.99.9 */
|
||||
/* NetBSD 3.0 has no statfs anymore */
|
152
sysutils/p5-Quota/patches/patch-ac
Normal file
152
sysutils/p5-Quota/patches/patch-ac
Normal file
|
@ -0,0 +1,152 @@
|
|||
$NetBSD: patch-ac,v 1.1 2012/08/14 14:24:20 dholland Exp $
|
||||
|
||||
Extend Quota.xs to use the new NetBSD 6 libquota interface.
|
||||
|
||||
--- Quota.xs.orig 2011-01-02 18:25:40.000000000 +0100
|
||||
+++ Quota.xs 2012-05-15 12:00:50.000000000 +0200
|
||||
@@ -331,6 +331,12 @@
|
||||
struct dqblk dqblk;
|
||||
char *p = NULL;
|
||||
int err;
|
||||
+ int pushed = 0;
|
||||
+#ifdef NETBSD_LIBQUOTA
|
||||
+ struct quotahandle *qh;
|
||||
+ struct quotakey qk;
|
||||
+ struct quotaval qv;
|
||||
+#endif
|
||||
#ifdef USE_IOCTL
|
||||
struct quotactl qp;
|
||||
int fd = -1;
|
||||
@@ -411,6 +417,35 @@
|
||||
#endif /* NO_RPC */
|
||||
}
|
||||
else {
|
||||
+#ifdef NETBSD_LIBQUOTA
|
||||
+ err = 0;
|
||||
+ qh = quota_open(dev);
|
||||
+ if (qh != NULL) {
|
||||
+ qk.qk_idtype = kind ? QUOTA_IDTYPE_GROUP : QUOTA_IDTYPE_USER;
|
||||
+ qk.qk_id = uid;
|
||||
+ qk.qk_objtype = QUOTA_OBJTYPE_BLOCKS;
|
||||
+ if (quota_get(qh, &qk, &qv) >= 0) {
|
||||
+ pushed = 1;
|
||||
+ EXTEND(SP, 4);
|
||||
+ PUSHs(sv_2mortal(newSViv(Q_DIV(qv.qv_usage))));
|
||||
+ PUSHs(sv_2mortal(newSViv(Q_DIV(qv.qv_softlimit))));
|
||||
+ PUSHs(sv_2mortal(newSViv(Q_DIV(qv.qv_hardlimit))));
|
||||
+ PUSHs(sv_2mortal(newSViv(qv.qv_expiretime)));
|
||||
+ qk.qk_objtype = QUOTA_OBJTYPE_FILES;
|
||||
+ if (quota_get(qh, &qk, &qv) >= 0) {
|
||||
+ EXTEND(SP, 4);
|
||||
+ PUSHs(sv_2mortal(newSViv(qv.qv_usage)));
|
||||
+ PUSHs(sv_2mortal(newSViv(qv.qv_softlimit)));
|
||||
+ PUSHs(sv_2mortal(newSViv(qv.qv_hardlimit)));
|
||||
+ PUSHs(sv_2mortal(newSViv(qv.qv_expiretime)));
|
||||
+ }
|
||||
+ else err = -1;
|
||||
+ }
|
||||
+ else err = -1;
|
||||
+ quota_close(qh);
|
||||
+ }
|
||||
+ else err = -1;
|
||||
+#else /* not NETBSD_LIBQUOTA */
|
||||
#ifdef USE_IOCTL
|
||||
qp.op = Q_GETQUOTA;
|
||||
qp.uid = uid;
|
||||
@@ -457,8 +492,9 @@
|
||||
#endif /* not Q_CTL_V2 */
|
||||
#endif /* Q_CTL_V3 */
|
||||
#endif /* not USE_IOCTL */
|
||||
+#endif /* not NETBSD_LIBQUOTA */
|
||||
}
|
||||
- if(!err) {
|
||||
+ if(!err && !pushed) {
|
||||
EXTEND(SP, 8);
|
||||
PUSHs(sv_2mortal(newSViv(Q_DIV(dqblk.QS_BCUR))));
|
||||
PUSHs(sv_2mortal(newSViv(Q_DIV(dqblk.QS_BSOFT))));
|
||||
@@ -479,15 +515,21 @@
|
||||
setqlim(dev,uid,bs,bh,fs,fh,timelimflag=0,kind=0)
|
||||
char * dev
|
||||
int uid
|
||||
- long bs
|
||||
- long bh
|
||||
- long fs
|
||||
- long fh
|
||||
+ double bs
|
||||
+ double bh
|
||||
+ double fs
|
||||
+ double fh
|
||||
int timelimflag
|
||||
int kind
|
||||
CODE:
|
||||
{
|
||||
+#ifdef NETBSD_LIBQUOTA
|
||||
+ struct quotahandle *qh;
|
||||
+ struct quotakey qk;
|
||||
+ struct quotaval qv;
|
||||
+#else /* not NETBSD_LIBQUOTA */
|
||||
struct dqblk dqblk;
|
||||
+#endif /* NETBSD_LIBQUOTA */
|
||||
#ifdef USE_IOCTL
|
||||
struct quotactl qp;
|
||||
int fd;
|
||||
@@ -563,6 +605,33 @@
|
||||
else
|
||||
#endif /* HAVE_JFS2 */
|
||||
{
|
||||
+#ifdef NETBSD_LIBQUOTA
|
||||
+ qh = quota_open(dev);
|
||||
+ if (qh != NULL) {
|
||||
+ qk.qk_idtype = kind ? QUOTA_IDTYPE_GROUP : QUOTA_IDTYPE_USER;
|
||||
+ qk.qk_id = uid;
|
||||
+ qk.qk_objtype = QUOTA_OBJTYPE_BLOCKS;
|
||||
+
|
||||
+ qv.qv_usage = 0;
|
||||
+ qv.qv_hardlimit = Q_MUL(bh);
|
||||
+ qv.qv_softlimit = Q_MUL(bs);
|
||||
+ qv.qv_expiretime = timelimflag;
|
||||
+ qv.qv_grace = 0; /* XXX should be able to manipulate this */
|
||||
+ if (quota_put(qh, &qk, &qv) >= 0) {
|
||||
+ qk.qk_objtype = QUOTA_OBJTYPE_FILES;
|
||||
+
|
||||
+ qv.qv_usage = 0;
|
||||
+ qv.qv_hardlimit = fh;
|
||||
+ qv.qv_softlimit = fs;
|
||||
+ qv.qv_expiretime = timelimflag;
|
||||
+ qv.qv_grace = 0; /* XXX should be able to manipulate this */
|
||||
+ if (quota_put(qh, &qk, &qv) >= 0) {
|
||||
+ RETVAL = 0;
|
||||
+ } else RETVAL = -1;
|
||||
+ } else RETVAL = -1;
|
||||
+ quota_close(qh);
|
||||
+ } else RETVAL = -1;
|
||||
+#else /* not NETBSD_LIBQUOTA */
|
||||
memset(&dqblk, 0, sizeof(dqblk));
|
||||
dqblk.QS_BSOFT = Q_MUL(bs);
|
||||
dqblk.QS_BHARD = Q_MUL(bh);
|
||||
@@ -588,6 +657,7 @@
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
+#endif /* NETBSD_LIBQUOTA */
|
||||
}
|
||||
}
|
||||
OUTPUT:
|
||||
@@ -616,6 +686,9 @@
|
||||
}
|
||||
else
|
||||
#endif
|
||||
+#ifdef NETBSD_LIBQUOTA
|
||||
+ RETVAL = 0;
|
||||
+#else /* not NETBSD_LIBQUOTA */
|
||||
#ifdef USE_IOCTL
|
||||
{
|
||||
struct quotactl qp;
|
||||
@@ -698,6 +771,7 @@
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
+#endif /* NETBSD_LIBQUOTA */
|
||||
OUTPUT:
|
||||
RETVAL
|
||||
|
Loading…
Reference in a new issue