r29126 - in /trunk/libquota-perl: CHANGES META.yml Quota.pm Quota.xs README contrib/test-64bit.pl debian/changelog hints/linux.h linuxapi.c
gregoa at users.alioth.debian.org
gregoa at users.alioth.debian.org
Thu Jan 1 21:51:28 UTC 2009
Author: gregoa
Date: Thu Jan 1 21:51:25 2009
New Revision: 29126
URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=29126
Log:
New upstream release.
Added:
trunk/libquota-perl/contrib/test-64bit.pl
- copied unchanged from r29125, branches/upstream/libquota-perl/current/contrib/test-64bit.pl
Modified:
trunk/libquota-perl/CHANGES
trunk/libquota-perl/META.yml
trunk/libquota-perl/Quota.pm
trunk/libquota-perl/Quota.xs
trunk/libquota-perl/README
trunk/libquota-perl/debian/changelog
trunk/libquota-perl/hints/linux.h
trunk/libquota-perl/linuxapi.c
Modified: trunk/libquota-perl/CHANGES
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libquota-perl/CHANGES?rev=29126&op=diff
==============================================================================
--- trunk/libquota-perl/CHANGES (original)
+++ trunk/libquota-perl/CHANGES Thu Jan 1 21:51:25 2009
@@ -1,3 +1,11 @@
+Changes in 1.6.3 (December 2008)
+- Fixed SEG fault for 32-bit Linux clients on top of 64-bit kernels
+ Thanks to Jani Ollikainen (pronetko.fi) for reporting and debugging this.
+ Thanks to Thomas Rzipa for reporting this issue, too.
+- Fixed setqlim to allow setting limits exceeding 2^32 blocks or files.
+ The current solution will work only for perl executables which support
+ 64-bit wide integers (e.g. x86-64)
+
Changes in 1.6.2 (January 2008)
- Fixed memory leak in RPC authentication
Thanks again to Kostik (koc at rol.ru)
Modified: trunk/libquota-perl/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libquota-perl/META.yml?rev=29126&op=diff
==============================================================================
--- trunk/libquota-perl/META.yml (original)
+++ trunk/libquota-perl/META.yml Thu Jan 1 21:51:25 2009
@@ -1,7 +1,7 @@
--- #YAML:1.0
name: Quota
abstract: Quota - Perl interface to file system quotas
-version: 1.6.2
+version: 1.6.3
author:
- Tom Zoerner <tomzo at users.sourceforge.net>
license: perl
Modified: trunk/libquota-perl/Quota.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libquota-perl/Quota.pm?rev=29126&op=diff
==============================================================================
--- trunk/libquota-perl/Quota.pm (original)
+++ trunk/libquota-perl/Quota.pm Thu Jan 1 21:51:25 2009
@@ -22,7 +22,7 @@
@ISA = qw(Exporter DynaLoader);
@EXPORT = ();
-$VERSION = '1.6.2';
+$VERSION = '1.6.3';
bootstrap Quota;
Modified: trunk/libquota-perl/Quota.xs
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libquota-perl/Quota.xs?rev=29126&op=diff
==============================================================================
--- trunk/libquota-perl/Quota.xs (original)
+++ trunk/libquota-perl/Quota.xs Thu Jan 1 21:51:25 2009
@@ -337,7 +337,7 @@
err = quotactl(QCMD(Q_XGETQUOTA, ((kind == 2) ? XQM_PRJQUOTA : ((kind == 1) ? XQM_GRPQUOTA : XQM_USRQUOTA))), dev+5, uid, CADR &xfs_dqblk);
#endif
if(!err) {
- EXTEND(sp, 8);
+ EXTEND(SP, 8);
PUSHs(sv_2mortal(newSViv(QX_DIV(xfs_dqblk.d_bcount))));
PUSHs(sv_2mortal(newSViv(QX_DIV(xfs_dqblk.d_blk_softlimit))));
PUSHs(sv_2mortal(newSViv(QX_DIV(xfs_dqblk.d_blk_hardlimit))));
@@ -355,7 +355,7 @@
struct vx_dqblk vxfs_dqb;
err = vx_quotactl(VX_GETQUOTA, dev+6, uid, CADR &vxfs_dqb);
if(!err) {
- EXTEND(sp,8);
+ EXTEND(SP,8);
PUSHs(sv_2mortal(newSViv(Q_DIV(vxfs_dqb.dqb_curblocks))));
PUSHs(sv_2mortal(newSViv(Q_DIV(vxfs_dqb.dqb_bsoftlimit))));
PUSHs(sv_2mortal(newSViv(Q_DIV(vxfs_dqb.dqb_bhardlimit))));
@@ -378,7 +378,7 @@
err = afs_getquota(dev + 5, &maxQuota, &blocksUsed);
if(!err) {
- EXTEND(sp, 8);
+ EXTEND(SP, 8);
PUSHs(sv_2mortal(newSViv(blocksUsed)));
PUSHs(sv_2mortal(newSViv(maxQuota)));
PUSHs(sv_2mortal(newSViv(maxQuota)));
@@ -452,7 +452,7 @@
#endif /* not USE_IOCTL */
}
if(!err) {
- EXTEND(sp, 8);
+ EXTEND(SP, 8);
PUSHs(sv_2mortal(newSViv(Q_DIV(dqblk.QS_BCUR))));
PUSHs(sv_2mortal(newSViv(Q_DIV(dqblk.QS_BSOFT))));
PUSHs(sv_2mortal(newSViv(Q_DIV(dqblk.QS_BHARD))));
@@ -472,10 +472,10 @@
setqlim(dev,uid,bs,bh,fs,fh,timelimflag=0,kind=0)
char * dev
int uid
- int bs
- int bh
- int fs
- int fh
+ long bs
+ long bh
+ long fs
+ long fh
int timelimflag
int kind
CODE:
@@ -705,7 +705,7 @@
#ifndef NO_RPC
struct dqblk dqblk;
if (getnfsquota(host, path, uid, kind, &dqblk) == 0) {
- EXTEND(sp, 8);
+ EXTEND(SP, 8);
PUSHs(sv_2mortal(newSViv(Q_DIV(dqblk.QS_BCUR))));
PUSHs(sv_2mortal(newSViv(Q_DIV(dqblk.QS_BSOFT))));
PUSHs(sv_2mortal(newSViv(Q_DIV(dqblk.QS_BHARD))));
@@ -844,7 +844,7 @@
if(mtab != NULL) {
mntp = getmntent(mtab);
if(mntp != NULL) {
- EXTEND(sp, 4);
+ EXTEND(SP, 4);
PUSHs(sv_2mortal(newSVpv(mntp->mnt_fsname, strlen(mntp->mnt_fsname))));
PUSHs(sv_2mortal(newSVpv(mntp->mnt_dir, strlen(mntp->mnt_dir))));
PUSHs(sv_2mortal(newSVpv(mntp->mnt_type, strlen(mntp->mnt_type))));
@@ -857,7 +857,7 @@
struct mnttab mntp;
if(mtab != NULL) {
if(getmntent(mtab, &mntp) == 0) {
- EXTEND(sp, 4);
+ EXTEND(SP, 4);
PUSHs(sv_2mortal(newSVpv(mntp.mnt_special, strlen(mntp.mnt_special))));
PUSHs(sv_2mortal(newSVpv(mntp.mnt_mountp, strlen(mntp.mnt_mountp))));
PUSHs(sv_2mortal(newSVpv(mntp.mnt_fstype, strlen(mntp.mnt_fstype))));
@@ -872,7 +872,7 @@
char *fstype = getvfsbynumber((int)mntp->f_type);
#endif
if((mtab != NULL) && mtab_size) {
- EXTEND(sp,4);
+ EXTEND(SP,4);
PUSHs(sv_2mortal(newSVpv(mntp->f_mntfromname, strlen(mntp->f_mntfromname))));
PUSHs(sv_2mortal(newSVpv(mntp->f_mntonname, strlen(mntp->f_mntonname))));
#ifdef OSF_QUOTA
@@ -913,7 +913,7 @@
vmp = (struct vmount *) cp;
aix_mtab_idx += 1;
- EXTEND(sp,4);
+ EXTEND(SP,4);
if ((vmp->vmt_gfstype != MNT_NFS) && (vmp->vmt_gfstype != MNT_NFS3)) {
cp = vmt2dataptr(vmp, VMT_OBJECT);
PUSHs(sv_2mortal(newSVpv(cp, strlen(cp))));
Modified: trunk/libquota-perl/README
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libquota-perl/README?rev=29126&op=diff
==============================================================================
--- trunk/libquota-perl/README (original)
+++ trunk/libquota-perl/README Thu Jan 1 21:51:25 2009
@@ -3,8 +3,8 @@
Author: Tom Zoerner (tomzo AT users.sourceforge.net)
-Version: 1.6.2
-Date: December 2007
+Version: 1.6.3
+Date: December 2008
DLSIP-Code:Rcdfg
- stable release
- C compiler required for installation
Modified: trunk/libquota-perl/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libquota-perl/debian/changelog?rev=29126&op=diff
==============================================================================
--- trunk/libquota-perl/debian/changelog (original)
+++ trunk/libquota-perl/debian/changelog Thu Jan 1 21:51:25 2009
@@ -1,4 +1,4 @@
-libquota-perl (1.6.2+dfsg-3) UNRELEASED; urgency=low
+libquota-perl (1.6.3+dfsg-1) UNRELEASED; urgency=low
[Franck Joncourt]
* Added get-orig-source target to allow users to get the debian tarball
@@ -9,12 +9,12 @@
http://lintian.debian.org/tags/debian-watch-file-should-dversionmangle\
-not-uversionmangle.html
- [ Gregor Herrmann ]
+ [ gregor herrmann ]
* Add debian/README.source to document quilt usage, as required by
Debian Policy since 3.8.0.
+ * debian/control: Added: ${misc:Depends} to Depends: field.
- [ gregor herrmann ]
- * debian/control: Added: ${misc:Depends} to Depends: field.
+ * New upstream release.
-- gregor herrmann <gregoa at debian.org> Wed, 06 Aug 2008 21:34:08 -0300
Modified: trunk/libquota-perl/hints/linux.h
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libquota-perl/hints/linux.h?rev=29126&op=diff
==============================================================================
--- trunk/libquota-perl/hints/linux.h (original)
+++ trunk/libquota-perl/hints/linux.h Thu Jan 1 21:51:25 2009
@@ -40,7 +40,7 @@
#define QCMD(cmd, type) (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
/* declare an internal version of the quota block struct */
-typedef unsigned int qsize_t;
+typedef u_int64_t qsize_t;
struct dqblk {
qsize_t dqb_ihardlimit; /* absolute limit on allocated inodes */
qsize_t dqb_isoftlimit; /* preferred inode limit */
Modified: trunk/libquota-perl/linuxapi.c
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libquota-perl/linuxapi.c?rev=29126&op=diff
==============================================================================
--- trunk/libquota-perl/linuxapi.c (original)
+++ trunk/libquota-perl/linuxapi.c Thu Jan 1 21:51:25 2009
@@ -59,17 +59,26 @@
** This is required to be able to compile with v1 kernel headers.
*/
-struct dqblk_v3 {
- u_int64_t dqb_bhardlimit;
- u_int64_t dqb_bsoftlimit;
- u_int64_t dqb_curspace;
- u_int64_t dqb_ihardlimit;
- u_int64_t dqb_isoftlimit;
- u_int64_t dqb_curinodes;
- u_int64_t dqb_btime;
- u_int64_t dqb_itime;
- u_int32_t dqb_valid;
+/*
+** Packed into wrapper for compatibility of 32-bit clients with 64-bit kernels:
+** 64-bit compilers add 4 padding bytes at the end of the struct, so a memcpy
+** corrupts the 4 bytes following the struct in the 32-bit clients userspace
+*/
+union dqblk_v3_wrap {
+ struct dqblk_v3 {
+ u_int64_t dqb_bhardlimit;
+ u_int64_t dqb_bsoftlimit;
+ u_int64_t dqb_curspace;
+ u_int64_t dqb_ihardlimit;
+ u_int64_t dqb_isoftlimit;
+ u_int64_t dqb_curinodes;
+ u_int64_t dqb_btime;
+ u_int64_t dqb_itime;
+ u_int32_t dqb_valid;
+ } dqblk;
+ u_int64_t foo[9];
};
+
struct dqstats_v2 {
u_int32_t lookups;
@@ -206,26 +215,28 @@
if (kernel_iface == IFACE_GENERIC)
{
- struct dqblk_v3 dqb3;
-
- ret = quotactl(QCMD(Q_V3_GETQUOTA, (isgrp ? GRPQUOTA : USRQUOTA)), dev, uid, (caddr_t) &dqb3);
+ union dqblk_v3_wrap dqb3;
+
+ ret = quotactl(QCMD(Q_V3_GETQUOTA, (isgrp ? GRPQUOTA : USRQUOTA)),
+ dev, uid, (caddr_t) &dqb3.dqblk);
if (ret == 0)
{
- dqb->dqb_bhardlimit = dqb3.dqb_bhardlimit;
- dqb->dqb_bsoftlimit = dqb3.dqb_bsoftlimit;
- dqb->dqb_curblocks = dqb3.dqb_curspace / DEV_QBSIZE;
- dqb->dqb_ihardlimit = dqb3.dqb_ihardlimit;
- dqb->dqb_isoftlimit = dqb3.dqb_isoftlimit;
- dqb->dqb_curinodes = dqb3.dqb_curinodes;
- dqb->dqb_btime = dqb3.dqb_btime;
- dqb->dqb_itime = dqb3.dqb_itime;
+ dqb->dqb_bhardlimit = dqb3.dqblk.dqb_bhardlimit;
+ dqb->dqb_bsoftlimit = dqb3.dqblk.dqb_bsoftlimit;
+ dqb->dqb_curblocks = dqb3.dqblk.dqb_curspace / DEV_QBSIZE;
+ dqb->dqb_ihardlimit = dqb3.dqblk.dqb_ihardlimit;
+ dqb->dqb_isoftlimit = dqb3.dqblk.dqb_isoftlimit;
+ dqb->dqb_curinodes = dqb3.dqblk.dqb_curinodes;
+ dqb->dqb_btime = dqb3.dqblk.dqb_btime;
+ dqb->dqb_itime = dqb3.dqblk.dqb_itime;
}
}
else if (kernel_iface == IFACE_VFSV0)
{
struct dqblk_v2 dqb2;
- ret = quotactl(QCMD(Q_V2_GETQUOTA, (isgrp ? GRPQUOTA : USRQUOTA)), dev, uid, (caddr_t) &dqb2);
+ ret = quotactl(QCMD(Q_V2_GETQUOTA, (isgrp ? GRPQUOTA : USRQUOTA)),
+ dev, uid, (caddr_t) &dqb2);
if (ret == 0)
{
dqb->dqb_bhardlimit = dqb2.dqb_bhardlimit;
@@ -242,7 +253,8 @@
{
struct dqblk_v1 dqb1;
- ret = quotactl(QCMD(Q_V1_GETQUOTA, (isgrp ? GRPQUOTA : USRQUOTA)), dev, uid, (caddr_t) &dqb1);
+ ret = quotactl(QCMD(Q_V1_GETQUOTA, (isgrp ? GRPQUOTA : USRQUOTA)),
+ dev, uid, (caddr_t) &dqb1);
if (ret == 0)
{
dqb->dqb_bhardlimit = dqb1.dqb_bhardlimit;
@@ -271,19 +283,20 @@
if (kernel_iface == IFACE_GENERIC)
{
- struct dqblk_v3 dqb3;
-
- dqb3.dqb_bhardlimit = dqb->dqb_bhardlimit;
- dqb3.dqb_bsoftlimit = dqb->dqb_bsoftlimit;
- dqb3.dqb_curspace = 0;
- dqb3.dqb_ihardlimit = dqb->dqb_ihardlimit;
- dqb3.dqb_isoftlimit = dqb->dqb_isoftlimit;
- dqb3.dqb_curinodes = 0;
- dqb3.dqb_btime = dqb->dqb_btime;
- dqb3.dqb_itime = dqb->dqb_itime;
- dqb3.dqb_valid = (QIF_BLIMITS | QIF_ILIMITS);
-
- ret = quotactl (QCMD(Q_V3_SETQUOTA, (isgrp ? GRPQUOTA : USRQUOTA)), dev, uid, (caddr_t) &dqb3);
+ union dqblk_v3_wrap dqb3;
+
+ dqb3.dqblk.dqb_bhardlimit = dqb->dqb_bhardlimit;
+ dqb3.dqblk.dqb_bsoftlimit = dqb->dqb_bsoftlimit;
+ dqb3.dqblk.dqb_curspace = 0;
+ dqb3.dqblk.dqb_ihardlimit = dqb->dqb_ihardlimit;
+ dqb3.dqblk.dqb_isoftlimit = dqb->dqb_isoftlimit;
+ dqb3.dqblk.dqb_curinodes = 0;
+ dqb3.dqblk.dqb_btime = dqb->dqb_btime;
+ dqb3.dqblk.dqb_itime = dqb->dqb_itime;
+ dqb3.dqblk.dqb_valid = (QIF_BLIMITS | QIF_ILIMITS);
+
+ ret = quotactl (QCMD(Q_V3_SETQUOTA, (isgrp ? GRPQUOTA : USRQUOTA)),
+ dev, uid, (caddr_t) &dqb3.dqblk);
}
else if (kernel_iface == IFACE_VFSV0)
{
@@ -298,7 +311,8 @@
dqb2.dqb_btime = dqb->dqb_btime;
dqb2.dqb_itime = dqb->dqb_itime;
- ret = quotactl (QCMD(Q_V2_SETQLIM, (isgrp ? GRPQUOTA : USRQUOTA)), dev, uid, (caddr_t) &dqb2);
+ ret = quotactl (QCMD(Q_V2_SETQLIM, (isgrp ? GRPQUOTA : USRQUOTA)),
+ dev, uid, (caddr_t) &dqb2);
}
else /* if (kernel_iface == IFACE_VFSOLD) */
{
@@ -313,7 +327,8 @@
dqb1.dqb_btime = dqb->dqb_btime;
dqb1.dqb_itime = dqb->dqb_itime;
- ret = quotactl (QCMD(Q_V1_SETQLIM, (isgrp ? GRPQUOTA : USRQUOTA)), dev, uid, (caddr_t) &dqb1);
+ ret = quotactl (QCMD(Q_V1_SETQLIM, (isgrp ? GRPQUOTA : USRQUOTA)),
+ dev, uid, (caddr_t) &dqb1);
}
return ret;
More information about the Pkg-perl-cvs-commits
mailing list