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