mirror of
https://github.com/vgough/encfs.git
synced 2025-01-30 09:38:35 +01:00
add delaymount option which delays initial mount. Patch by Jeff King
git-svn-id: http://encfs.googlecode.com/svn/branches/1.x@113 db9cf616-1c43-0410-9cb8-a902689de0d6
This commit is contained in:
parent
2ea32dd296
commit
231ebe9239
@ -1641,6 +1641,14 @@ RootPtr initFS( EncFS_Context *ctx, const shared_ptr<EncFS_Opts> &opts )
|
||||
return rootInfo;
|
||||
}
|
||||
|
||||
if(opts->delayMount)
|
||||
{
|
||||
rootInfo = RootPtr( new EncFS_Root );
|
||||
rootInfo->cipher = cipher;
|
||||
rootInfo->root = shared_ptr<DirNode>();
|
||||
return rootInfo;
|
||||
}
|
||||
|
||||
// get user key
|
||||
CipherKey userKey;
|
||||
|
||||
|
@ -70,6 +70,7 @@ struct EncFS_Opts
|
||||
bool createIfNotFound; // create filesystem if not found
|
||||
bool idleTracking; // turn on idle monitoring of filesystem
|
||||
bool mountOnDemand; // mounting on-demand
|
||||
bool delayMount; // delay initial mount
|
||||
|
||||
bool checkKey; // check crypto key decoding
|
||||
bool forceDecode; // force decode on MAC block failures
|
||||
@ -89,6 +90,7 @@ struct EncFS_Opts
|
||||
createIfNotFound = true;
|
||||
idleTracking = false;
|
||||
mountOnDemand = false;
|
||||
delayMount = false;
|
||||
checkKey = true;
|
||||
forceDecode = false;
|
||||
useStdin = false;
|
||||
|
@ -19,7 +19,7 @@ B<encfs> [B<--version>] [B<-s>] [B<-f>] [B<-v>|B<--verbose>]
|
||||
[B<-i MINUTES>|B<--idle=MINUTES>] [B<--extpass=program>]
|
||||
[B<-S>|B<--stdinpass>] [B<--anykey>] [B<--forcedecode>]
|
||||
[B<-d>|B<--fuse-debug>] [B<--public>] [B<--no-default-flags>]
|
||||
[B<--ondemand>] [B<--reverse>] [B<--standard>]
|
||||
[B<--ondemand>] [B<--delaymount>] [B<--reverse>] [B<--standard>]
|
||||
[B<-o FUSE_OPTION>]
|
||||
I<rootdir> I<mountPoint>
|
||||
[B<--> [I<Fuse Mount Options>]]
|
||||
@ -115,6 +115,11 @@ internally dropping it's reference to it. If someone attempts to access the
|
||||
filesystem again, the extpass program is used to prompt the user for the
|
||||
password. If this succeeds, then the filesystem becomes available again.
|
||||
|
||||
=item B<--delaymount>
|
||||
|
||||
Do not mount the filesystem when encfs starts; instead, delay mounting until
|
||||
first use. This option only makes sense with B<--ondemand>.
|
||||
|
||||
=item B<--reverse>
|
||||
|
||||
Normally B<EncFS> provides a plaintext view of data on demand. Normally it
|
||||
|
@ -107,6 +107,7 @@ struct EncFS_Args
|
||||
if(opts->annotate) ss << "(annotate) ";
|
||||
if(opts->reverseEncryption) ss << "(reverseEncryption) ";
|
||||
if(opts->mountOnDemand) ss << "(mountOnDemand) ";
|
||||
if(opts->delayMount) ss << "(delayMount) ";
|
||||
for(int i=0; i<fuseArgc; ++i)
|
||||
ss << fuseArgv[i] << ' ';
|
||||
|
||||
@ -221,6 +222,7 @@ bool processArgs(int argc, char *argv[], const shared_ptr<EncFS_Args> &out)
|
||||
{"anykey", 0, 0, 'k'}, // skip key checks
|
||||
{"no-default-flags", 0, 0, 'N'}, // don't use default fuse flags
|
||||
{"ondemand", 0, 0, 'm'}, // mount on-demand
|
||||
{"delaymount", 0, 0, 'M'}, // delay initial mount until use
|
||||
{"public", 0, 0, 'P'}, // public mode
|
||||
{"extpass", 1, 0, 'p'}, // external password program
|
||||
// {"single-thread", 0, 0, 's'}, // single-threaded mode
|
||||
@ -296,6 +298,9 @@ bool processArgs(int argc, char *argv[], const shared_ptr<EncFS_Args> &out)
|
||||
case 'm':
|
||||
out->opts->mountOnDemand = true;
|
||||
break;
|
||||
case 'M':
|
||||
out->opts->delayMount = true;
|
||||
break;
|
||||
case 'N':
|
||||
useDefaultFlags = false;
|
||||
break;
|
||||
@ -406,6 +411,15 @@ bool processArgs(int argc, char *argv[], const shared_ptr<EncFS_Args> &out)
|
||||
}
|
||||
}
|
||||
|
||||
if(out->opts->delayMount && ! out->opts->mountOnDemand)
|
||||
{
|
||||
cerr <<
|
||||
// xgroup(usage)
|
||||
_("You must use mount-on-demand with delay-mount")
|
||||
<< endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
if(out->opts->mountOnDemand && out->opts->passwordProgram.empty())
|
||||
{
|
||||
cerr <<
|
||||
@ -602,6 +616,11 @@ int main(int argc, char *argv[])
|
||||
|
||||
if( rootInfo )
|
||||
{
|
||||
// turn off delayMount, as our prior call to initFS has already
|
||||
// respected any delay, and we want future calls to actually
|
||||
// mount.
|
||||
encfsArgs->opts->delayMount = false;
|
||||
|
||||
// set the globally visible root directory node
|
||||
ctx->setRoot( rootInfo->root );
|
||||
ctx->args = encfsArgs;
|
||||
|
Loading…
Reference in New Issue
Block a user