r29124 - in /branches/upstream/libquota-perl/current: CHANGES META.yml Quota.pm Quota.xs README contrib/test-64bit.pl hints/linux.h linuxapi.c
gregoa at users.alioth.debian.org
gregoa at users.alioth.debian.org
Thu Jan 1 21:49:51 UTC 2009
Author: gregoa
Date: Thu Jan 1 21:49:48 2009
New Revision: 29124
URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=29124
Log:
[svn-upgrade] Integrating new upstream version, libquota-perl (1.6.3+dfsg)
Added:
branches/upstream/libquota-perl/current/contrib/test-64bit.pl
Modified:
branches/upstream/libquota-perl/current/CHANGES
branches/upstream/libquota-perl/current/META.yml
branches/upstream/libquota-perl/current/Quota.pm
branches/upstream/libquota-perl/current/Quota.xs
branches/upstream/libquota-perl/current/README
branches/upstream/libquota-perl/current/hints/linux.h
branches/upstream/libquota-perl/current/linuxapi.c
Modified: branches/upstream/libquota-perl/current/CHANGES
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libquota-perl/current/CHANGES?rev=29124&op=diff
==============================================================================
--- branches/upstream/libquota-perl/current/CHANGES (original)
+++ branches/upstream/libquota-perl/current/CHANGES Thu Jan 1 21:49:48 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: branches/upstream/libquota-perl/current/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libquota-perl/current/META.yml?rev=29124&op=diff
==============================================================================
--- branches/upstream/libquota-perl/current/META.yml (original)
+++ branches/upstream/libquota-perl/current/META.yml Thu Jan 1 21:49:48 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: branches/upstream/libquota-perl/current/Quota.pm
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libquota-perl/current/Quota.pm?rev=29124&op=diff
==============================================================================
--- branches/upstream/libquota-perl/current/Quota.pm (original)
+++ branches/upstream/libquota-perl/current/Quota.pm Thu Jan 1 21:49:48 2009
@@ -22,7 +22,7 @@
@ISA = qw(Exporter DynaLoader);
@EXPORT = ();
-$VERSION = '1.6.2';
+$VERSION = '1.6.3';
bootstrap Quota;
Modified: branches/upstream/libquota-perl/current/Quota.xs
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libquota-perl/current/Quota.xs?rev=29124&op=diff
==============================================================================
--- branches/upstream/libquota-perl/current/Quota.xs (original)
+++ branches/upstream/libquota-perl/current/Quota.xs Thu Jan 1 21:49:48 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: branches/upstream/libquota-perl/current/README
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libquota-perl/current/README?rev=29124&op=diff
==============================================================================
--- branches/upstream/libquota-perl/current/README (original)
+++ branches/upstream/libquota-perl/current/README Thu Jan 1 21:49:48 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
Added: branches/upstream/libquota-perl/current/contrib/test-64bit.pl
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libquota-perl/current/contrib/test-64bit.pl?rev=29124&op=file
==============================================================================
--- branches/upstream/libquota-perl/current/contrib/test-64bit.pl (added)
+++ branches/upstream/libquota-perl/current/contrib/test-64bit.pl Thu Jan 1 21:49:48 2009
@@ -1,0 +1,23 @@
+#!/usr/bin/perl
+use blib;
+use Quota;
+
+$new_bs = 0xA00000000;
+$new_bh = 0xC00000000;
+
+# Get uid from username
+$uid=31979;
+# Get device from filesystem path
+$dev = Quota::getqcarg("/mnt");
+# Get quota for user
+($bc, $bs, $bh,$bt,$ic, $is, $ih, $it)=Quota::query($dev, $uid);
+print "CUR $uid - $dev - $bc - $bs - $bh - $bt\n";
+
+print "SET $uid - $dev - $new_bs - $new_bh\n";
+($bc, $bs, $bh,$bt,$ic, $is, $ih, $it)=Quota::query($dev, $uid);
+if (Quota::setqlim($dev, $uid, $new_bs, $new_bh, 10,12, 1) != 0) {
+ warn Quota::strerr,"\n";
+}
+
+($bc, $bs, $bh,$bt,$ic, $is, $ih, $it)=Quota::query($dev, $uid);
+print "NEW $uid - $dev - $bc - $bs - $bh - $bt\n";
Modified: branches/upstream/libquota-perl/current/hints/linux.h
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libquota-perl/current/hints/linux.h?rev=29124&op=diff
==============================================================================
--- branches/upstream/libquota-perl/current/hints/linux.h (original)
+++ branches/upstream/libquota-perl/current/hints/linux.h Thu Jan 1 21:49:48 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: branches/upstream/libquota-perl/current/linuxapi.c
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libquota-perl/current/linuxapi.c?rev=29124&op=diff
==============================================================================
--- branches/upstream/libquota-perl/current/linuxapi.c (original)
+++ branches/upstream/libquota-perl/current/linuxapi.c Thu Jan 1 21:49:48 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