setup->root_fd = safe_close(setup->root_fd);
/* Unmount mapped mount before we move the dir into place */
- if (setup->undo_mount) {
- r = umount_verbose(LOG_ERR, HOME_RUNTIME_WORK_DIR, UMOUNT_NOFOLLOW);
- if (r < 0)
- return r;
-
- setup->undo_mount = false;
- }
+ r = home_setup_undo_mount(setup, LOG_ERR);
+ if (r < 0)
+ return r;
if (rename(temporary, ip) < 0)
return log_error_errno(errno, "Failed to rename %s to %s: %m", temporary, ip);
log_debug("Dropped caches.");
}
+int home_setup_undo_mount(HomeSetup *setup, int level) {
+ int r;
+
+ assert(setup);
+
+ if (!setup->undo_mount)
+ return 0;
+
+ r = umount_verbose(level, HOME_RUNTIME_WORK_DIR, UMOUNT_NOFOLLOW);
+ if (r < 0)
+ return r;
+
+ setup->undo_mount = false;
+ return 1;
+}
+
int home_setup_done(HomeSetup *setup) {
int r = 0, q;
setup->root_fd = safe_close(setup->root_fd);
}
- if (setup->undo_mount) {
- q = umount_verbose(LOG_DEBUG, HOME_RUNTIME_WORK_DIR, UMOUNT_NOFOLLOW);
- if (q < 0)
- r = q;
- }
+ q = home_setup_undo_mount(setup, LOG_DEBUG);
+ if (q < 0)
+ r = q;
if (setup->undo_dm && setup->crypt_device && setup->dm_name) {
q = sym_crypt_deactivate_by_name(setup->crypt_device, setup->dm_name, 0);
int home_setup_done(HomeSetup *setup);
+int home_setup_undo_mount(HomeSetup *setup, int level);
+
int home_setup(UserRecord *h, HomeSetupFlags flags, PasswordCache *cache, HomeSetup *setup, UserRecord **ret_header_home);
int home_refresh(UserRecord *h, HomeSetup *setup, UserRecord *header_home, PasswordCache *cache, struct statfs *ret_statfs, UserRecord **ret_new_home);