smbd: remove quota support for some ancient OSs
authorUri Simchoni <uri@samba.org>
Sun, 13 Mar 2016 06:18:47 +0000 (08:18 +0200)
committerJeremy Allison <jra@samba.org>
Thu, 17 Mar 2016 00:08:32 +0000 (01:08 +0100)
Remove quota support for SunOS4 and VxFS on Solaris 2

Signed-off-by: Uri Simchoni <uri@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/quotas.c
tests/oldquotas.c

index 8e41416..58d8460 100644 (file)
 
 #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@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@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@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@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 *) &quotabuf;
-
-  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 */
 
index 0aacf23..54dc242 100644 (file)
 
 #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 *)&quotabuf;
-
-       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"