@@ -55,28 +55,6 @@ static void edit_file(const struct passwd *pas, const char *file)
55
55
bb_perror_msg_and_die ("can't execute '%s'" , ptr );
56
56
}
57
57
58
- static int open_as_user (const struct passwd * pas , const char * file )
59
- {
60
- pid_t pid ;
61
- char c ;
62
-
63
- pid = xvfork ();
64
- if (pid ) { /* PARENT */
65
- if (wait4pid (pid ) == 0 ) {
66
- /* exitcode 0: child says it can read */
67
- return open (file , O_RDONLY );
68
- }
69
- return -1 ;
70
- }
71
-
72
- /* CHILD */
73
- /* initgroups, setgid, setuid */
74
- change_identity (pas );
75
- /* We just try to read one byte. If it works, file is readable
76
- * under this user. We signal that by exiting with 0. */
77
- _exit (safe_read (xopen (file , O_RDONLY ), & c , 1 ) < 0 );
78
- }
79
-
80
58
int crontab_main (int argc , char * * argv ) MAIN_EXTERNALLY_VISIBLE ;
81
59
int crontab_main (int argc UNUSED_PARAM , char * * argv )
82
60
{
@@ -137,10 +115,7 @@ int crontab_main(int argc UNUSED_PARAM, char **argv)
137
115
if (!argv [0 ])
138
116
bb_show_usage ();
139
117
if (NOT_LONE_DASH (argv [0 ])) {
140
- src_fd = open_as_user (pas , argv [0 ]);
141
- if (src_fd < 0 )
142
- bb_error_msg_and_die ("user %s cannot read %s" ,
143
- pas -> pw_name , argv [0 ]);
118
+ src_fd = xopen_as_uid_gid (argv [0 ], O_RDONLY , pas -> pw_uid , pas -> pw_gid );
144
119
}
145
120
}
146
121
0 commit comments