summaryrefslogtreecommitdiffstats
path: root/source/smbd/quotas.c
diff options
context:
space:
mode:
authorSamba Release Account <samba-bugs@samba.org>1997-08-19 19:22:26 +0000
committerSamba Release Account <samba-bugs@samba.org>1997-08-19 19:22:26 +0000
commitbf1c79f7fd7f9beec4f9f4e58337cadceeb1cb38 (patch)
tree8213c5af20c00416c27ab46d1191701a3c581870 /source/smbd/quotas.c
parent3ede2a2b8caf8b44bf78f9b4307515dbf36b4ecc (diff)
downloadsamba-bf1c79f7fd7f9beec4f9f4e58337cadceeb1cb38.tar.gz
samba-bf1c79f7fd7f9beec4f9f4e58337cadceeb1cb38.tar.xz
samba-bf1c79f7fd7f9beec4f9f4e58337cadceeb1cb38.zip
Makefile: Changed for HPUX10 tidyup.
includes.h: Changed for HPUX10 tidyup. ipc.c: Fixed bug where getting local server list from NT browsers would fail. nmbsync.c: Fixed bug where getting local server list from NT browsers would fail. proto.h: Changed for crash bug on SCO with USE_MMAP. quotas.c: Added OSF quotas (patch from Bret Giddings <bret@essex.ac.uk>). Rolled back solaris uid change - I think it was wrong. reply.c: Changed for crash bug on SCO with USE_MMAP. server.c: Removed Lukes changes. Changed for crash bug on SCO with USE_MMAP. smb.h: Changed for crash bug on SCO with USE_MMAP. smbpasswd.c:Fixed crash bug with Lukes changes. uid.c: Removed Lukes changes. util.c: Fixed I18N bug with extended char filenames and widelinks = no. Jeremy (jallison@whistle.com)
Diffstat (limited to 'source/smbd/quotas.c')
-rw-r--r--source/smbd/quotas.c45
1 files changed, 43 insertions, 2 deletions
diff --git a/source/smbd/quotas.c b/source/smbd/quotas.c
index 883c2c050de..d19d386e273 100644
--- a/source/smbd/quotas.c
+++ b/source/smbd/quotas.c
@@ -331,8 +331,8 @@ BOOL disk_quotas(char *path, int *bsize, int *dfree, int *dsize)
ret = quotactl(Q_GETQUOTA, name, euser_id, &D);
#endif
- seteuid(euser_id); /* Restore the original uid status. */
- setuid(user_id);
+ setuid(user_id); /* Restore the original uid status. */
+ seteuid(euser_id);
if (ret < 0) {
DEBUG(2,("disk_quotas ioctl (Solaris) failed\n"));
@@ -363,6 +363,47 @@ DEBUG(5,("disk_quotas for path \"%s\" returning bsize %d, dfree %d, dsize %d\n"
return(True);
}
+
+#elif defined(OSF1)
+#include <ufs/quota.h>
+
+/****************************************************************************
+try to get the disk space from disk quotas - OFS1 version
+****************************************************************************/
+BOOL disk_quotas(char *path, int *bsize, int *dfree, int *dsize)
+{
+ uid_t user_id, euser_id;
+ int r;
+ struct dqblk D;
+ struct stat S;
+
+ euser_id = geteuid();
+ user_id = getuid();
+
+ setreuid(euser_id, euser_id);
+ r= quotactl(path,QCMD(Q_GETQUOTA, USRQUOTA),euser_id,(char *) &D);
+ if (setreuid(user_id, euser_id) == -1)
+ DEBUG(5,("Unable to reset uid to %d\n", user_id));
+
+ *bsize = DEV_BSIZE;
+
+ if (r)
+ return(False);
+
+ /* Use softlimit to determine disk space, except when it has been exceeded */
+
+ if (D.dqb_bsoftlimit==0)
+ return(False);
+
+ if ((D.dqb_curblocks>D.dqb_bsoftlimit)) {
+ *dfree = 0;
+ *dsize = D.dqb_curblocks;
+ } else {
+ *dfree = D.dqb_bsoftlimit - D.dqb_curblocks;
+ *dsize = D.dqb_bsoftlimit;
+ }
+ return (True);
+}
#else
#ifdef __FreeBSD__