@@ -89,9 +89,7 @@ main(int argc, char **argv)
89
89
struct group * gr ;
90
90
uid_t user_uid ;
91
91
gid_t mail_gid ;
92
- int error ;
93
- char fn [PATH_MAX + 1 ];
94
- int f ;
92
+ int f , maildirfd ;
95
93
96
94
openlog ("dma-mbox-create" , 0 , LOG_MAIL );
97
95
@@ -131,26 +129,22 @@ main(int argc, char **argv)
131
129
if (!pw )
132
130
logfail (EX_NOUSER , "cannot find user `%s'" , user );
133
131
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 );
135
135
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 ;
144
137
145
- f = open ( fn , O_RDONLY |O_CREAT |O_NOFOLLOW , 0600 );
138
+ f = openat ( maildirfd , user , O_RDONLY |O_CREAT |O_NOFOLLOW , 0600 );
146
139
if (f < 0 )
147
- logfail (EX_NOINPUT , "cannot open mbox `%s'" , fn );
140
+ logfail (EX_NOINPUT , "cannot open mbox `%s'" , user );
148
141
149
142
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 );
151
144
152
145
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 );
154
148
155
149
/* file should be present with the right owner and permissions */
156
150
0 commit comments