static void _eeze_mount_unlock_mtab(void) { // DBG("Unlocking mlock: %s", mnt_lock_get_linkfile(_eeze_mtab_lock)); if (_mtab_locked) mnt_unlock_file(_eeze_mtab_lock); _mtab_locked = EINA_FALSE; }
static int update_modify_target(struct libmnt_update *upd, struct libmnt_lock *lc) { struct libmnt_table *tb = NULL; int rc = 0; DBG(UPDATE, mnt_debug_h(upd, "%s: modify target", upd->filename)); if (lc) rc = mnt_lock_file(lc); if (rc) return rc; tb = __mnt_new_table_from_file(upd->filename, upd->userspace_only ? MNT_FMT_UTAB : MNT_FMT_MTAB); if (tb) { struct libmnt_fs *cur = mnt_table_find_target(tb, mnt_fs_get_srcpath(upd->fs), MNT_ITER_BACKWARD); if (cur) { rc = mnt_fs_set_target(cur, mnt_fs_get_target(upd->fs)); if (!rc) rc = update_table(upd, tb); } } if (lc) mnt_unlock_file(lc); mnt_free_table(tb); return rc; }
static int update_remove_entry(struct libmnt_update *upd, struct libmnt_lock *lc) { struct libmnt_table *tb; int rc = 0; assert(upd); assert(upd->target); DBG(UPDATE, mnt_debug_h(upd, "%s: remove entry", upd->filename)); if (lc) rc = mnt_lock_file(lc); if (rc) return rc; tb = __mnt_new_table_from_file(upd->filename, upd->userspace_only ? MNT_FMT_UTAB : MNT_FMT_MTAB); if (tb) { struct libmnt_fs *rem = mnt_table_find_target(tb, upd->target, MNT_ITER_BACKWARD); if (rem) { mnt_table_remove_fs(tb, rem); rc = update_table(upd, tb); mnt_free_fs(rem); } } if (lc) mnt_unlock_file(lc); mnt_free_table(tb); return rc; }
static int update_add_entry(struct libmnt_update *upd, struct libmnt_lock *lc) { struct libmnt_table *tb; int rc = 0; assert(upd); assert(upd->fs); DBG(UPDATE, mnt_debug_h(upd, "%s: add entry", upd->filename)); if (lc) rc = mnt_lock_file(lc); if (rc) return rc; tb = __mnt_new_table_from_file(upd->filename, upd->userspace_only ? MNT_FMT_UTAB : MNT_FMT_MTAB); if (tb) { struct libmnt_fs *fs = mnt_copy_fs(NULL, upd->fs); if (!fs) rc = -ENOMEM; else { mnt_table_add_fs(tb, fs); rc = update_table(upd, tb); } } if (lc) mnt_unlock_file(lc); mnt_free_table(tb); return rc; }
int zuluCrypRemoveEntryFromMtab( const char * m_point ) { #if USE_NEW_LIBMOUNT_API struct libmnt_lock * lock ; #else mnt_lock * lock ; #endif struct mntent * mt ; FILE * f ; FILE * g ; size_t dir_len = strlen( m_point ) ; int h ; lock = mnt_new_lock( "/etc/mtab~",getpid() ) ; f = setmntent( "/etc/mtab","r" ) ; if( mnt_lock_file( lock ) != 0 ){ h = 4 ; }else{ g = setmntent( "/etc/mtab-zuluCrypt","w" ) ; while( ( mt = getmntent( f ) ) != NULL ){ if( StringPrefixMatch( mt->mnt_dir,m_point,dir_len ) ){ /* * an entry we want to delete,skip it */ ; }else{ addmntent( g,mt ) ; } } endmntent( g ) ; rename( "/etc/mtab-zuluCrypt","/etc/mtab" ) ; chown( "/etc/mtab",0,0 ) ; chmod( "/etc/mtab",S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH ) ; mnt_unlock_file( lock ) ; h = 0 ; } endmntent( f ) ; mnt_free_lock( lock ) ; return h ; }
static int update_modify_options(struct libmnt_update *upd, struct libmnt_lock *lc) { struct libmnt_table *tb = NULL; int rc = 0; struct libmnt_fs *fs; assert(upd); assert(upd->fs); DBG(UPDATE, mnt_debug_h(upd, "%s: modify options", upd->filename)); fs = upd->fs; if (lc) rc = mnt_lock_file(lc); if (rc) return rc; tb = __mnt_new_table_from_file(upd->filename, upd->userspace_only ? MNT_FMT_UTAB : MNT_FMT_MTAB); if (tb) { struct libmnt_fs *cur = mnt_table_find_target(tb, mnt_fs_get_target(fs), MNT_ITER_BACKWARD); if (cur) { if (upd->userspace_only) rc = mnt_fs_set_attributes(cur, mnt_fs_get_attributes(fs)); if (!rc) rc = mnt_fs_set_options(cur, mnt_fs_get_options(fs)); if (!rc) rc = update_table(upd, tb); } } if (lc) mnt_unlock_file(lc); mnt_free_table(tb); return rc; }