@@ -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