[PATCH] remove quota support for SunOS4 and Solaris 2 + VxFS

Uri Simchoni uri at samba.org
Sun Mar 13 06:29:06 UTC 2016


Remove support for SunOS4 and Veritas VxFS on Solaris2 from the legacy 
quota code (because it has a myriad of #ifdefs to support operating 
systems which probably are not in use today).

The intent is not to change one line of code for other OS's because we 
have little testing ability, yet here and there there are users for this 
code.

Review appreciated,
Uri.
-------------- next part --------------
From 512859c03ca7291cc98d59a2cf93be7771262c6c Mon Sep 17 00:00:00 2001
From: Uri Simchoni <uri at samba.org>
Date: Sun, 13 Mar 2016 08:18:47 +0200
Subject: [PATCH] smbd: remove quota support for some ancient OSs

Remove quota support for SunOS4 and VxFS on Solaris 2

Signed-off-by: Uri Simchoni <uri at samba.org>
---
 source3/smbd/quotas.c | 200 +-------------------------------------------------
 tests/oldquotas.c     |  61 +--------------
 2 files changed, 4 insertions(+), 257 deletions(-)

diff --git a/source3/smbd/quotas.c b/source3/smbd/quotas.c
index 8e41416..58d8460 100644
--- a/source3/smbd/quotas.c
+++ b/source3/smbd/quotas.c
@@ -40,32 +40,13 @@
 
 #ifdef WITH_QUOTAS
 
-#if defined(VXFS_QUOTA)
-
-/*
- * In addition to their native filesystems, some systems have Veritas VxFS.
- * Declare here, define at end: reduces likely "include" interaction problems.
- *	David Lee <T.D.Lee at durham.ac.uk>
- */
-bool disk_quotas_vxfs(const char *name, char *path, uint64_t *bsize, uint64_t *dfree, uint64_t *dsize);
-
-#endif /* VXFS_QUOTA */
-
-
-#if defined(SUNOS5) || defined(SUNOS4)
+#if defined(SUNOS5) /* Solaris */
 
 #include <fcntl.h>
 #include <sys/param.h>
-#if defined(SUNOS5)
 #include <sys/fs/ufs_quota.h>
 #include <sys/mnttab.h>
 #include <sys/mntent.h>
-#else /* defined(SUNOS4) */
-#include <ufs/quota.h>
-#include <mntent.h>
-#endif
-
-#if defined(SUNOS5)
 
 /****************************************************************************
  Allows querying of remote hosts for quotas on NFS mounted shares.
@@ -229,7 +210,6 @@ static bool nfs_quotas(char *nfspath, uid_t euser_id, uint64_t *bsize, uint64_t
 	DEBUG(10,("nfs_quotas: End of nfs_quotas\n" ));
 	return ret;
 }
-#endif
 
 /****************************************************************************
 try to get the disk space from disk quotas (SunOS & Solaris2 version)
@@ -242,13 +222,9 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
 	uid_t euser_id;
 	int ret;
 	struct dqblk D;
-#if defined(SUNOS5)
 	struct quotctl command;
 	int file;
 	struct mnttab mnt;
-#else /* SunOS4 */
-	struct mntent *mnt;
-#endif
 	char *name = NULL;
 	FILE *fd;
 	SMB_STRUCT_STAT sbuf;
@@ -264,7 +240,6 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
 	devno = sbuf.st_ex_dev ;
 	DEBUG(5,("disk_quotas: looking for path \"%s\" devno=%x\n",
 		path, (unsigned int)devno));
-#if defined(SUNOS5)
 	if ((fd = fopen(MNTTAB, "r")) == NULL) {
 		return false;
 	}
@@ -291,28 +266,6 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
 	}
 
 	fclose(fd);
-#else /* SunOS4 */
-	if ((fd = setmntent(MOUNTED, "r")) == NULL) {
-		return false;
-	}
-
-	while ((mnt = getmntent(fd)) != NULL) {
-		if (sys_stat(mnt->mnt_dir, &sbuf, false) == -1) {
-			continue;
-		}
-		DEBUG(5,("disk_quotas: testing \"%s\" devno=%x\n",
-					mnt->mnt_dir,
-					(unsigned int)sbuf.st_ex_dev));
-		if (sbuf.st_ex_dev == devno) {
-			found = true;
-			name = talloc_strdup(talloc_tos(),
-					mnt->mnt_fsname);
-			break;
-		}
-	}
-
-	endmntent(fd);
-#endif
 	if (!found) {
 		return false;
 	}
@@ -322,7 +275,6 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
 	}
 	become_root();
 
-#if defined(SUNOS5)
 	if (strcmp(mnt.mnt_fstype, "nfs") == 0) {
 		bool retval;
 		DEBUG(5,("disk_quotas: looking for mountpath (NFS) \"%s\"\n",
@@ -343,10 +295,6 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
 	command.addr = (caddr_t) &D;
 	ret = ioctl(file, Q_QUOTACTL, &command);
 	close(file);
-#else
-	DEBUG(5,("disk_quotas: trying quotactl on device \"%s\"\n", name));
-	ret = quotactl(Q_GETQUOTA, name, euser_id, &D);
-#endif
 
 	unbecome_root();
 
@@ -354,19 +302,7 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
 		DEBUG(5,("disk_quotas ioctl (Solaris) failed. Error = %s\n",
 					strerror(errno) ));
 
-#if defined(SUNOS5) && defined(VXFS_QUOTA)
-		/* If normal quotactl() fails, try vxfs private calls */
-		set_effective_uid(euser_id);
-		DEBUG(5,("disk_quotas: mount type \"%s\"\n", mnt.mnt_fstype));
-		if ( 0 == strcmp ( mnt.mnt_fstype, "vxfs" )) {
-			bool retval;
-			retval = disk_quotas_vxfs(name, path,
-					bsize, dfree, dsize);
-			return retval;
-		}
-#else
 		return false;
-#endif
 	}
 
 	/* If softlimit is zero, set it equal to hardlimit.
@@ -403,7 +339,7 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
 }
 
 
-#else
+#else /* not Solaris */
 
 #if           AIX
 /* AIX quota patch from Ole Holm Nielsen <ohnielse at fysik.dtu.dk> */
@@ -523,137 +459,7 @@ bool disk_quotas(connection_struct *conn, const char *path, uint64_t *bsize,
   return (True);
 }
 
-#endif
-
-#if defined(VXFS_QUOTA)
-
-/****************************************************************************
-Try to get the disk space from Veritas disk quotas.
-    David Lee <T.D.Lee at durham.ac.uk> August 1999.
-
-Background assumptions:
-    Potentially under many Operating Systems.  Initially Solaris 2.
-
-    My guess is that Veritas is largely, though not entirely,
-    independent of OS.  So I have separated it out.
-
-    There may be some details.  For example, OS-specific "include" files.
-
-    It is understood that HPUX 10 somehow gets Veritas quotas without
-    any special effort; if so, this routine need not be compiled in.
-        Dirk De Wachter <Dirk.DeWachter at rug.ac.be>
-
-Warning:
-    It is understood that Veritas do not publicly support this ioctl interface.
-    Rather their preference would be for the user (us) to call the native
-    OS and then for the OS itself to call through to the VxFS filesystem.
-    Presumably HPUX 10, see above, does this.
-
-Hints for porting:
-    Add your OS to "IFLIST" below.
-    Get it to compile successfully:
-        Almost certainly "include"s require attention: see SUNOS5.
-    In the main code above, arrange for it to be called: see SUNOS5.
-    Test!
-    
-****************************************************************************/
-
-/* "IFLIST"
- * This "if" is a list of ports:
- *	if defined(OS1) || defined(OS2) || ...
- */
-#if defined(SUNOS5)
-
-#if defined(SUNOS5)
-#include <sys/fs/vx_solaris.h>
-#endif
-#include <sys/fs/vx_machdep.h>
-#include <sys/fs/vx_layout.h>
-#include <sys/fs/vx_quota.h>
-#include <sys/fs/vx_aioctl.h>
-#include <sys/fs/vx_ioctl.h>
-
-bool disk_quotas_vxfs(const char *name, char *path, uint64_t *bsize, uint64_t *dfree, uint64_t *dsize)
-{
-  uid_t user_id, euser_id;
-  int ret;
-  struct vx_dqblk D;
-  struct vx_quotctl quotabuf;
-  struct vx_genioctl genbuf;
-  char *qfname;
-  int file;
-
-  /*
-   * "name" may or may not include a trailing "/quotas".
-   * Arranging consistency of calling here in "quotas.c" may not be easy and
-   * it might be easier to examine and adjust it here.
-   * Fortunately, VxFS seems not to mind at present.
-   */
-  qfname = talloc_strdup(talloc_tos(), name);
-  if (!qfname) {
-	  return false;
-  }
-  /* pstrcat(qfname, "/quotas") ; */	/* possibly examine and adjust "name" */
-
-  euser_id = geteuid();
-  set_effective_uid(0);
-
-  DEBUG(5,("disk_quotas: looking for VxFS quotas file \"%s\"\n", qfname));
-  if((file=open(qfname, O_RDONLY,0))<0) {
-    set_effective_uid(euser_id);
-    return(False);
-  }
-  genbuf.ioc_cmd = VX_QUOTACTL;
-  genbuf.ioc_up = (void *) "abuf;
-
-  quotabuf.cmd = VX_GETQUOTA;
-  quotabuf.uid = euser_id;
-  quotabuf.addr = (caddr_t) &D;
-  ret = ioctl(file, VX_ADMIN_IOCTL, &genbuf);
-  close(file);
-
-  set_effective_uid(euser_id);
-
-  if (ret < 0) {
-    DEBUG(5,("disk_quotas ioctl (VxFS) failed. Error = %s\n", strerror(errno) ));
-    return(False);
-  }
-
-  /* If softlimit is zero, set it equal to hardlimit.
-   */
-
-  if (D.dqb_bsoftlimit==0)
-    D.dqb_bsoftlimit = D.dqb_bhardlimit;
-
-  /* Use softlimit to determine disk space. A user exceeding the quota is told
-   * that there's no space left. Writes might actually work for a bit if the
-   * hardlimit is set higher than softlimit. Effectively the disk becomes
-   * made of rubber latex and begins to expand to accommodate the user :-)
-   */
-  DEBUG(5,("disk_quotas for path \"%s\" block c/s/h %ld/%ld/%ld; file c/s/h %ld/%ld/%ld\n",
-         path, D.dqb_curblocks, D.dqb_bsoftlimit, D.dqb_bhardlimit,
-         D.dqb_curfiles, D.dqb_fsoftlimit, D.dqb_fhardlimit));
-
-  if (D.dqb_bsoftlimit==0)
-    return(False);
-  *bsize = DEV_BSIZE;
-  *dsize = D.dqb_bsoftlimit;
-
-  if (D.dqb_curblocks > D.dqb_bsoftlimit) {
-     *dfree = 0;
-     *dsize = D.dqb_curblocks;
-  } else
-    *dfree = D.dqb_bsoftlimit - D.dqb_curblocks;
-      
-  DEBUG(5,("disk_quotas for path \"%s\" returning  bsize %.0f, dfree %.0f, dsize %.0f\n",
-         path,(double)*bsize,(double)*dfree,(double)*dsize));
-
-  return(True);
-}
-
-#endif /* SUNOS5 || ... */
-
-#endif /* VXFS_QUOTA */
+#endif /* Solaris */
 
 #else /* WITH_QUOTAS */
 
diff --git a/tests/oldquotas.c b/tests/oldquotas.c
index 0aacf23..54dc242 100644
--- a/tests/oldquotas.c
+++ b/tests/oldquotas.c
@@ -12,27 +12,13 @@
 
 #ifdef WITH_QUOTAS
 
-#if defined(VXFS_QUOTA) /* Veritas VxFS for Solaris 2 */
-
-bool disk_quotas_vxfs(const char *name, char *path, uint64_t *bsize,
-		      uint64_t *dfree, uint64_t *dsize);
-
-#endif /* VXFS_QUOTA */
-
-#if defined(SUNOS5) || defined(SUNOS4)
+#if defined(SUNOS5) /* Solaris */
 
 #include <fcntl.h>
 #include <sys/param.h>
-#if defined(SUNOS5) /* Solaris */
 #include <sys/fs/ufs_quota.h>
 #include <sys/mnttab.h>
 #include <sys/mntent.h>
-#else /* SunOS4 */
-#include <ufs/quota.h>
-#include <mntent.h>
-#endif /* Solaris */
-
-#if defined(SUNOS5) /* Solaris */
 
 /****************************************************************************
  Allows querying of remote hosts for quotas on NFS mounted shares.
@@ -53,7 +39,6 @@ static bool nfs_quotas(char *nfspath, uid_t euser_id, uint64_t *bsize,
 	clnt = clnt_create("host", RQUOTAPROG, RQUOTAVERS, "udp");
 	return true;
 }
-#endif /* Solaris */
 
 /****************************************************************************
 try to get the disk space from disk quotas (SunOS & Solaris2 version)
@@ -64,25 +49,14 @@ bool disk_quotas(const char *path, uint64_t *bsize, uint64_t *dfree,
 		 uint64_t *dsize)
 {
 	int ret;
-#if defined(SUNOS5) /* Solaris */
 	struct quotctl command;
-#else /* SunOS4 */
-	struct mntent *mnt;
-#endif /* Solaris */
-#if defined(SUNOS5) /* Solaris */
 	nfs_quotas("", 0, bsize, dfree, dsize);
 
 	command.op = Q_GETQUOTA;
 	command.uid = 0;
 	command.addr = NULL;
 	ret = ioctl(1, Q_QUOTACTL, &command);
-#else /* SunOS4 */
-	ret = quotactl(Q_GETQUOTA, "", 0, NULL);
-#endif /* Solaris */
 
-#if defined(SUNOS5) && defined(VXFS_QUOTA) /* Solaris 2 VxFS */
-	disk_quotas_vxfs("", path, bsize, dfree, dsize);
-#endif /* Solaris 2 VxFS */
 	return true;
 }
 
@@ -126,39 +100,6 @@ bool disk_quotas(const char *path, uint64_t *bsize, uint64_t *dfree,
 
 #endif /* SunOS / Solaris */
 
-#if defined(VXFS_QUOTA) /* Veritas for Solaris 2 */
-
-#if defined(SUNOS5)
-
-#include <sys/fs/vx_solaris.h>
-#include <sys/fs/vx_machdep.h>
-#include <sys/fs/vx_layout.h>
-#include <sys/fs/vx_quota.h>
-#include <sys/fs/vx_aioctl.h>
-#include <sys/fs/vx_ioctl.h>
-
-bool disk_quotas_vxfs(const char *name, char *path, uint64_t *bsize,
-		      uint64_t *dfree, uint64_t *dsize)
-{
-	struct vx_dqblk D;
-	struct vx_quotctl quotabuf;
-	struct vx_genioctl genbuf;
-
-	genbuf.ioc_cmd = VX_QUOTACTL;
-	genbuf.ioc_up = (void *)"abuf;
-
-	quotabuf.cmd = VX_GETQUOTA;
-	quotabuf.uid = 0;
-	quotabuf.addr = (caddr_t)&D;
-	ret = ioctl(1, VX_ADMIN_IOCTL, &genbuf);
-
-	return true;
-}
-
-#endif /* SUNOS5 */
-
-#endif /* VXFS_QUOTA */
-
 #else /* WITH_QUOTAS */
 
 #error "This test should be called with WITH_QUOTAS defined"
-- 
2.5.0



More information about the samba-technical mailing list