* libmisc/copydir.c (remove_tree): As we always use remove_tree
followed by rmdir to remove the directory itself, delete also the root directory in remove_tree. * src/userdel.c, src/usermod.c: Do not call rmdir after remove_tree.
This commit is contained in:
parent
9c41a8ad38
commit
6124b59aff
@ -1,3 +1,11 @@
|
|||||||
|
2008-05-24 Nicolas François <nicolas.francois@centraliens.net>
|
||||||
|
|
||||||
|
* libmisc/copydir.c (remove_tree): As we always use remove_tree
|
||||||
|
followed by rmdir to remove the directory itself, delete also the
|
||||||
|
root directory in remove_tree.
|
||||||
|
* src/userdel.c, src/usermod.c: Do not call rmdir after
|
||||||
|
remove_tree.
|
||||||
|
|
||||||
2008-05-24 Nicolas François <nicolas.francois@centraliens.net>
|
2008-05-24 Nicolas François <nicolas.francois@centraliens.net>
|
||||||
|
|
||||||
* libmisc/copydir.c (remove_tree): Make sure unlink is successful
|
* libmisc/copydir.c (remove_tree): Make sure unlink is successful
|
||||||
|
@ -557,10 +557,11 @@ static int copy_file (const char *src, const char *dst,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* remove_tree - remove files in a directory tree
|
* remove_tree - delete a directory tree
|
||||||
*
|
*
|
||||||
* remove_tree() walks a directory tree and deletes all the files
|
* remove_tree() walks a directory tree and deletes all the files
|
||||||
* and directories.
|
* and directories.
|
||||||
|
* At the end, it deletes the root directory itself.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int remove_tree (const char *root)
|
int remove_tree (const char *root)
|
||||||
@ -617,20 +618,17 @@ int remove_tree (const char *root)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (S_ISDIR (sb.st_mode)) {
|
if (S_ISDIR (sb.st_mode)) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Recursively delete this directory.
|
* Recursively delete this directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (remove_tree (new_name) != 0) {
|
if (remove_tree (new_name) != 0) {
|
||||||
err = -1;
|
err = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (rmdir (new_name) != 0) {
|
|
||||||
err = -1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
|
/*
|
||||||
|
* Delete the file.
|
||||||
|
*/
|
||||||
if (unlink (new_name) != 0) {
|
if (unlink (new_name) != 0) {
|
||||||
err = -1;
|
err = -1;
|
||||||
break;
|
break;
|
||||||
@ -639,6 +637,12 @@ int remove_tree (const char *root)
|
|||||||
}
|
}
|
||||||
(void) closedir (dir);
|
(void) closedir (dir);
|
||||||
|
|
||||||
|
if (0 == err) {
|
||||||
|
if (rmdir (root) != 0) {
|
||||||
|
err = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -794,8 +794,7 @@ int main (int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (rflg) {
|
if (rflg) {
|
||||||
if (remove_tree (user_home)
|
if (remove_tree (user_home) != 0) {
|
||||||
|| rmdir (user_home)) {
|
|
||||||
fprintf (stderr,
|
fprintf (stderr,
|
||||||
_("%s: error removing directory %s\n"),
|
_("%s: error removing directory %s\n"),
|
||||||
Prog, user_home);
|
Prog, user_home);
|
||||||
|
@ -1288,12 +1288,12 @@ static void move_home (void)
|
|||||||
if (copy_tree (user_home, user_newhome,
|
if (copy_tree (user_home, user_newhome,
|
||||||
uflg ? (long int)user_newid : -1,
|
uflg ? (long int)user_newid : -1,
|
||||||
gflg ? (long int)user_newgid : -1) == 0) {
|
gflg ? (long int)user_newgid : -1) == 0) {
|
||||||
if (remove_tree (user_home) != 0 ||
|
if (remove_tree (user_home) != 0) {
|
||||||
rmdir (user_home) != 0)
|
|
||||||
fprintf (stderr,
|
fprintf (stderr,
|
||||||
_
|
_
|
||||||
("%s: warning: failed to completely remove old home directory %s"),
|
("%s: warning: failed to completely remove old home directory %s"),
|
||||||
Prog, user_home);
|
Prog, user_home);
|
||||||
|
}
|
||||||
#ifdef WITH_AUDIT
|
#ifdef WITH_AUDIT
|
||||||
audit_logger (AUDIT_USER_CHAUTHTOK,
|
audit_logger (AUDIT_USER_CHAUTHTOK,
|
||||||
Prog,
|
Prog,
|
||||||
@ -1304,8 +1304,9 @@ static void move_home (void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* TODO: do some cleanup if the copy
|
||||||
|
* was started */
|
||||||
(void) remove_tree (user_newhome);
|
(void) remove_tree (user_newhome);
|
||||||
(void) rmdir (user_newhome);
|
|
||||||
}
|
}
|
||||||
fprintf (stderr,
|
fprintf (stderr,
|
||||||
_
|
_
|
||||||
|
Loading…
x
Reference in New Issue
Block a user