use getpwuid in addition to getlogin to get user name, and some cleanup
[unix-history] / usr / src / sys / ufs / ffs / quota.h
CommitLineData
da7c5cc6 1/*
1810611d 2 * Copyright (c) 1982, 1986 Regents of the University of California.
da7c5cc6
KM
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 *
1810611d 6 * @(#)quota.h 7.1 (Berkeley) %G%
da7c5cc6 7 */
187ee005
RE
8
9/*
95222a8a 10 * MELBOURNE DISC QUOTAS
187ee005 11 *
95222a8a
SL
12 * Various junk to do with various quotas (etc) imposed upon
13 * the average user (big brother finally hits UNIX).
187ee005 14 *
95222a8a
SL
15 * The following structure exists in core for each logged on user.
16 * It contains global junk relevant to that user's quotas.
17 *
18 * The u_quota field of each user struct contains a pointer to
19 * the quota struct relevant to the current process, this is changed
20 * by 'setuid' sys call, &/or by the Q_SETUID quota() call.
187ee005 21 */
187ee005 22struct quota {
a9abb9eb 23 struct quota *q_forw, *q_back; /* hash chain, MUST be first */
187ee005 24 short q_cnt; /* ref count (# processes) */
adc65074 25 uid_t q_uid; /* real uid of owner */
95222a8a 26 int q_flags; /* struct management flags */
a9abb9eb
SL
27#define Q_LOCK 0x01 /* quota struct locked (for disc i/o) */
28#define Q_WANT 0x02 /* issue a wakeup when lock goes off */
29#define Q_NEW 0x04 /* new quota - no proc1 msg sent yet */
30#define Q_NDQ 0x08 /* account has NO disc quota */
31 struct quota *q_freef, **q_freeb;
187ee005
RE
32 struct dquot *q_dq[NMOUNT]; /* disc quotas for mounted filesys's */
33};
187ee005 34
95222a8a
SL
35#define NOQUOTA ((struct quota *) 0)
36
54cc5e32 37#if defined(KERNEL) && defined(QUOTA)
a9abb9eb 38struct quota *quota, *quotaNQUOTA;
187ee005 39int nquota;
a9abb9eb 40struct quota *getquota(), *qfind();
187ee005
RE
41#endif
42
187ee005 43/*
95222a8a
SL
44 * The following structure defines the format of the disc quota file
45 * (as it appears on disc) - the file is an array of these structures
46 * indexed by user number. The setquota sys call establishes the inode
47 * for each quota file (a pointer is retained in the mount structure).
187ee005 48 *
95222a8a
SL
49 * The following constants define the number of warnings given a user
50 * before the soft limits are treated as hard limits (usually resulting
51 * in an allocation failure). The warnings are normally manipulated
52 * each time a user logs in through the Q_DOWARN quota call. If
53 * the user logs in and is under the soft limit the warning count
54 * is reset to MAX_*_WARN, otherwise a message is printed and the
55 * warning count is decremented. This makes MAX_*_WARN equivalent to
56 * the number of logins before soft limits are treated as hard limits.
187ee005 57 */
a9abb9eb 58#define MAX_IQ_WARN 3
187ee005 59#define MAX_DQ_WARN 3
95222a8a
SL
60
61struct dqblk {
62 u_long dqb_bhardlimit; /* absolute limit on disc blks alloc */
63 u_long dqb_bsoftlimit; /* preferred limit on disc blks */
64 u_long dqb_curblocks; /* current block count */
65 u_short dqb_ihardlimit; /* maximum # allocated inodes + 1 */
66 u_short dqb_isoftlimit; /* preferred inode limit */
67 u_short dqb_curinodes; /* current # allocated inodes */
68 u_char dqb_bwarn; /* # warnings left about excessive disc use */
69 u_char dqb_iwarn; /* # warnings left about excessive inodes */
a9abb9eb 70};
187ee005
RE
71
72/*
95222a8a
SL
73 * The following structure records disc usage for a user on a filesystem.
74 * There is one allocated for each quota that exists on any filesystem
75 * for the current user. A cache is kept of other recently used entries.
187ee005 76 */
187ee005 77struct dquot {
a9abb9eb 78 struct dquot *dq_forw, *dq_back;/* MUST be first entry */
187ee005 79 union {
a9abb9eb
SL
80 struct quota *Dq_own; /* the quota that points to this */
81 struct { /* free list */
82 struct dquot *Dq_freef, **Dq_freeb;
187ee005
RE
83 } dq_f;
84 } dq_u;
95222a8a 85 short dq_flags;
a9abb9eb
SL
86#define DQ_LOCK 0x01 /* this quota locked (no MODS) */
87#define DQ_WANT 0x02 /* wakeup on unlock */
88#define DQ_MOD 0x04 /* this quota modified since read */
89#define DQ_FAKE 0x08 /* no limits here, just usage */
90#define DQ_BLKS 0x10 /* has been warned about blk limit */
91#define DQ_INODS 0x20 /* has been warned about inode limit */
187ee005 92 short dq_cnt; /* count of active references */
adc65074 93 uid_t dq_uid; /* user this applies to */
187ee005
RE
94 dev_t dq_dev; /* filesystem this relates to */
95 struct dqblk dq_dqb; /* actual usage & quotas */
96};
d6185698 97
187ee005
RE
98#define dq_own dq_u.Dq_own
99#define dq_freef dq_u.dq_f.Dq_freef
100#define dq_freeb dq_u.dq_f.Dq_freeb
95222a8a
SL
101#define dq_bhardlimit dq_dqb.dqb_bhardlimit
102#define dq_bsoftlimit dq_dqb.dqb_bsoftlimit
103#define dq_curblocks dq_dqb.dqb_curblocks
104#define dq_ihardlimit dq_dqb.dqb_ihardlimit
105#define dq_isoftlimit dq_dqb.dqb_isoftlimit
106#define dq_curinodes dq_dqb.dqb_curinodes
107#define dq_bwarn dq_dqb.dqb_bwarn
187ee005 108#define dq_iwarn dq_dqb.dqb_iwarn
95222a8a 109
187ee005
RE
110#define NODQUOT ((struct dquot *) 0)
111#define LOSTDQUOT ((struct dquot *) 1)
112
54cc5e32 113#if defined(KERNEL) && defined(QUOTA)
a9abb9eb 114struct dquot *dquot, *dquotNDQUOT;
187ee005 115int ndquot;
a9abb9eb 116struct dquot *discquota(), *inoquota(), *dqalloc(), *dqp();
187ee005
RE
117#endif
118
187ee005 119/*
95222a8a 120 * Definitions for the 'quota' system call.
187ee005
RE
121 */
122#define Q_SETDLIM 1 /* set disc limits & usage */
123#define Q_GETDLIM 2 /* get disc limits & usage */
124#define Q_SETDUSE 3 /* set disc usage only */
95222a8a 125#define Q_SYNC 4 /* update disc copy of quota usages */
187ee005 126#define Q_SETUID 16 /* change proc to use quotas for uid */
187ee005
RE
127#define Q_SETWARN 25 /* alter inode/block warning counts */
128#define Q_DOWARN 26 /* warn user about excessive space/inodes */
95222a8a
SL
129
130/*
131 * Used in Q_SETDUSE.
132 */
133struct dqusage {
134 u_short du_curinodes;
135 u_long du_curblocks;
136};
137
138/*
139 * Used in Q_SETWARN.
140 */
141struct dqwarn {
142 u_char dw_bwarn;
143 u_char dw_iwarn;
144};