Skip to content

Commit

Permalink
add delaymount option which delays initial mount. Patch by Jeff King
Browse files Browse the repository at this point in the history
git-svn-id: http://encfs.googlecode.com/svn/trunk@115 db9cf616-1c43-0410-9cb8-a902689de0d6
  • Loading branch information
vgough committed Oct 3, 2013
1 parent 0b6fabf commit e2b912c
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 1 deletion.
7 changes: 6 additions & 1 deletion encfs/encfs.pod
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,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>]]
Expand Down Expand Up @@ -106,6 +106,11 @@ internally dropping its 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
Expand Down
18 changes: 18 additions & 0 deletions encfs/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,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] << ' ';

Expand Down Expand Up @@ -219,6 +220,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
Expand Down Expand Up @@ -294,6 +296,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;
Expand Down Expand Up @@ -404,6 +409,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 <<
Expand Down Expand Up @@ -594,6 +608,10 @@ 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;
Expand Down
8 changes: 8 additions & 0 deletions fs/FileUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1609,6 +1609,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;

Expand Down
2 changes: 2 additions & 0 deletions fs/FileUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,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
Expand All @@ -91,6 +92,7 @@ struct EncFS_Opts
createIfNotFound = true;
idleTracking = false;
mountOnDemand = false;
delayMount = false;
checkKey = true;
forceDecode = false;
useStdin = false;
Expand Down

0 comments on commit e2b912c

Please sign in to comment.