Skip to content

Commit 6748bdd

Browse files
committed
dma-mbox-create: refactor to use a /var/mail directory fd
Based on a patch to Capsicumize dma-mbox-create for FreeBSD by cem@FreeBSD.org, in https://reviews.freebsd.org/D7988
1 parent dceaf8c commit 6748bdd

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

dma-mbox-create.c

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,7 @@ main(int argc, char **argv)
8989
struct group *gr;
9090
uid_t user_uid;
9191
gid_t mail_gid;
92-
int error;
93-
char fn[PATH_MAX+1];
94-
int f;
92+
int f, maildirfd;
9593

9694
openlog("dma-mbox-create", 0, LOG_MAIL);
9795

@@ -131,26 +129,22 @@ main(int argc, char **argv)
131129
if (!pw)
132130
logfail(EX_NOUSER, "cannot find user `%s'", user);
133131

134-
user_uid = pw->pw_uid;
132+
maildirfd = open(_PATH_MAILDIR, O_RDONLY);
133+
if (maildirfd < 0)
134+
logfail(EX_NOINPUT, "cannot open maildir %s", _PATH_MAILDIR);
135135

136-
error = snprintf(fn, sizeof(fn), "%s/%s", _PATH_MAILDIR, user);
137-
if (error < 0 || (size_t)error >= sizeof(fn)) {
138-
if (error >= 0) {
139-
errno = 0;
140-
logfail(EX_USAGE, "mbox path too long");
141-
}
142-
logfail(EX_CANTCREAT, "cannot build mbox path for `%s/%s'", _PATH_MAILDIR, user);
143-
}
136+
user_uid = pw->pw_uid;
144137

145-
f = open(fn, O_RDONLY|O_CREAT|O_NOFOLLOW, 0600);
138+
f = openat(maildirfd, user, O_RDONLY|O_CREAT|O_NOFOLLOW, 0600);
146139
if (f < 0)
147-
logfail(EX_NOINPUT, "cannot open mbox `%s'", fn);
140+
logfail(EX_NOINPUT, "cannot open mbox `%s'", user);
148141

149142
if (fchown(f, user_uid, mail_gid))
150-
logfail(EX_OSERR, "cannot change owner of mbox `%s'", fn);
143+
logfail(EX_OSERR, "cannot change owner of mbox `%s'", user);
151144

152145
if (fchmod(f, 0620))
153-
logfail(EX_OSERR, "cannot change permissions of mbox `%s'", fn);
146+
logfail(EX_OSERR, "cannot change permissions of mbox `%s'",
147+
user);
154148

155149
/* file should be present with the right owner and permissions */
156150

0 commit comments

Comments
 (0)