Date: Mon, 18 Mar 1996 14:50:09 -0500 From: henrich@msu.edu To: FreeBSD-gnats-submit@freebsd.org Subject: misc/1088: mail.local doesnt deal with quota's Message-ID: <199603181950.OAA06991@crh.cl.msu.edu> Resent-Message-ID: <199603182000.MAA29947@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 1088
>Category: misc
>Synopsis: mail.local will happily overfill a users mailbox putting them over quota
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Mar 18 12:00:01 PST 1996
>Last-Modified:
>Originator: Charles Henrich
>Organization:
Charles Henrich Michigan State University henrich@msu.edu
http://pilot.msu.edu/~henrich
>Release: FreeBSD 2.1-STABLE i386
>Environment:
2.1.0-RELEASE (all FreeBSD versions actually)
>Description:
mail.local runs with root permissions and as such can fill a users
mailbox endlessly. When quota's are turned on this causing no end
of problems with elm/pine and any other mailer. Its also a pain in
the ass when users are subscribed to a hundred mailling lists and
filling up your disk.
>How-To-Repeat:
Send email to a user w/ a quota.
>Fix:
Simple fix, seteuid() in mail.local before attempting delivery, then
seteuid() back when done. Patch follows:
*** mail.local.c Tue May 30 01:46:12 1995
--- /sup/usr/src/libexec/mail.local/mail.local.c Mon Mar 18 14:42:08 1996
***************
*** 199 ****
--- 200 ----
+ uid_t saveeuid;
***************
*** 234 ****
--- 236,237 ----
+
+ saveeuid=geteuid();
***************
*** 235 ****
--- 239 ----
+
***************
*** 246 ****
--- 251,259 ----
+
+ /* Now that the box is created and permissions are correct, we
+ close it and go back to the top so that we will come in
+ and write as the user. We dont seteuid() before the above
+ open, because we have to be root/bin to write in var/mail */
+
+ close(mbfd);
+ goto tryagain;
+
***************
*** 251 ****
--- 265,272 ----
+
+ /* Become the user, so quota enforcement will occur */
+
+ if(seteuid(pw->pw_uid) != 0) {
+ warn("Unable to setuid()");
+ return;
+ }
+
***************
*** 258 ****
--- 280 ----
+ seteuid(saveeuid);
***************
*** 262 ****
--- 285,286 ----
+ if(geteuid() == pw->pw_uid) seteuid(saveeuid);
+
***************
*** 285 ****
--- 310 ----
+
***************
*** 306 ****
--- 332 ----
+
>Audit-Trail:
>Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199603181950.OAA06991>
