mirror of
https://github.com/vgough/encfs.git
synced 2025-06-20 03:37:50 +02:00
add annotation option. patch by Werner Koch
git-svn-id: http://encfs.googlecode.com/svn/trunk@68 db9cf616-1c43-0410-9cb8-a902689de0d6
This commit is contained in:
parent
f6e3639c98
commit
b20b71a97c
@ -1,3 +1,7 @@
|
|||||||
|
|
||||||
|
Tue Dec 7 2010 Valient Gough <vgough@pobox.com>
|
||||||
|
* add annotation option, patch by Werner Koch.
|
||||||
|
|
||||||
Sun Sep 5 2010 Valient Gough <vgough@pobox.com>
|
Sun Sep 5 2010 Valient Gough <vgough@pobox.com>
|
||||||
* fix mount failures when using certain options, due to changes in
|
* fix mount failures when using certain options, due to changes in
|
||||||
option passing mechanism in 1.7
|
option passing mechanism in 1.7
|
||||||
|
@ -314,14 +314,32 @@ std::string parentDirectory( const std::string &path )
|
|||||||
return path.substr(0, last);
|
return path.substr(0, last);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool userAllowMkdir( const char *path, mode_t mode )
|
bool userAllowMkdir(const char *path, mode_t mode )
|
||||||
|
{
|
||||||
|
return userAllowMkdir(0, path, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool userAllowMkdir(int promptno, const char *path, mode_t mode )
|
||||||
{
|
{
|
||||||
// TODO: can we internationalize the y/n names? Seems strange to prompt in
|
// TODO: can we internationalize the y/n names? Seems strange to prompt in
|
||||||
// their own language but then have to respond 'y' or 'n'.
|
// their own language but then have to respond 'y' or 'n'.
|
||||||
// xgroup(setup)
|
// xgroup(setup)
|
||||||
cerr << autosprintf( _("The directory \"%s\" does not exist. Should it be created? (y,n) "), path );
|
cerr << autosprintf( _("The directory \"%s\" does not exist. Should it be created? (y,n) "), path );
|
||||||
char answer[10];
|
char answer[10];
|
||||||
char *res = fgets( answer, sizeof(answer), stdin );
|
char *res;
|
||||||
|
|
||||||
|
switch (promptno)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
cerr << endl << "$PROMPT$ create_root_dir" << endl;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
cerr << endl << "$PROMPT$ create_mount_point" << endl;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
res = fgets( answer, sizeof(answer), stdin );
|
||||||
|
|
||||||
if(res != 0 && toupper(answer[0]) == 'Y')
|
if(res != 0 && toupper(answer[0]) == 'Y')
|
||||||
{
|
{
|
||||||
@ -976,6 +994,7 @@ RootPtr createV6Config( EncFS_Context *ctx,
|
|||||||
bool useStdin = opts->useStdin;
|
bool useStdin = opts->useStdin;
|
||||||
bool reverseEncryption = opts->reverseEncryption;
|
bool reverseEncryption = opts->reverseEncryption;
|
||||||
ConfigMode configMode = opts->configMode;
|
ConfigMode configMode = opts->configMode;
|
||||||
|
bool annotate = opts->annotate;
|
||||||
|
|
||||||
RootPtr rootInfo;
|
RootPtr rootInfo;
|
||||||
|
|
||||||
@ -994,6 +1013,9 @@ RootPtr createV6Config( EncFS_Context *ctx,
|
|||||||
" anything else, or an empty line will select standard mode.\n"
|
" anything else, or an empty line will select standard mode.\n"
|
||||||
"?> ");
|
"?> ");
|
||||||
|
|
||||||
|
if (annotate)
|
||||||
|
cerr << "$PROMPT$ config_option" << endl;
|
||||||
|
|
||||||
char *res = fgets( answer, sizeof(answer), stdin );
|
char *res = fgets( answer, sizeof(answer), stdin );
|
||||||
(void)res;
|
(void)res;
|
||||||
cout << "\n";
|
cout << "\n";
|
||||||
@ -1179,7 +1201,11 @@ RootPtr createV6Config( EncFS_Context *ctx,
|
|||||||
CipherKey userKey;
|
CipherKey userKey;
|
||||||
rDebug( "useStdin: %i", useStdin );
|
rDebug( "useStdin: %i", useStdin );
|
||||||
if(useStdin)
|
if(useStdin)
|
||||||
|
{
|
||||||
|
if (annotate)
|
||||||
|
cerr << "$PROMPT$ new_passwd" << endl;
|
||||||
userKey = config->getUserKey( useStdin );
|
userKey = config->getUserKey( useStdin );
|
||||||
|
}
|
||||||
else if(!passwordProgram.empty())
|
else if(!passwordProgram.empty())
|
||||||
userKey = config->getUserKey( passwordProgram, rootDir );
|
userKey = config->getUserKey( passwordProgram, rootDir );
|
||||||
else
|
else
|
||||||
@ -1618,6 +1644,8 @@ RootPtr initFS( EncFS_Context *ctx, const shared_ptr<EncFS_Opts> &opts )
|
|||||||
if(opts->passwordProgram.empty())
|
if(opts->passwordProgram.empty())
|
||||||
{
|
{
|
||||||
rDebug( "useStdin: %i", opts->useStdin );
|
rDebug( "useStdin: %i", opts->useStdin );
|
||||||
|
if (opts->annotate)
|
||||||
|
cerr << "$PROMPT$ passwd" << endl;
|
||||||
userKey = config->getUserKey( opts->useStdin );
|
userKey = config->getUserKey( opts->useStdin );
|
||||||
} else
|
} else
|
||||||
userKey = config->getUserKey( opts->passwordProgram, opts->rootDir );
|
userKey = config->getUserKey( opts->passwordProgram, opts->rootDir );
|
||||||
|
@ -36,7 +36,8 @@ std::string parentDirectory( const std::string &path );
|
|||||||
|
|
||||||
// ask the user for permission to create the directory. If they say ok, then
|
// ask the user for permission to create the directory. If they say ok, then
|
||||||
// do it and return true.
|
// do it and return true.
|
||||||
bool userAllowMkdir( const char *dirPath, mode_t mode );
|
bool userAllowMkdir(const char *dirPath, mode_t mode );
|
||||||
|
bool userAllowMkdir(int promptno, const char *dirPath, mode_t mode );
|
||||||
|
|
||||||
class Cipher;
|
class Cipher;
|
||||||
class DirNode;
|
class DirNode;
|
||||||
@ -72,6 +73,7 @@ struct EncFS_Opts
|
|||||||
|
|
||||||
std::string passwordProgram; // path to password program (or empty)
|
std::string passwordProgram; // path to password program (or empty)
|
||||||
bool useStdin; // read password from stdin rather then prompting
|
bool useStdin; // read password from stdin rather then prompting
|
||||||
|
bool annotate; // print annotation line prompt to stderr.
|
||||||
|
|
||||||
bool ownerCreate; // set owner of new files to caller
|
bool ownerCreate; // set owner of new files to caller
|
||||||
|
|
||||||
@ -87,6 +89,7 @@ struct EncFS_Opts
|
|||||||
checkKey = true;
|
checkKey = true;
|
||||||
forceDecode = false;
|
forceDecode = false;
|
||||||
useStdin = false;
|
useStdin = false;
|
||||||
|
annotate = false;
|
||||||
ownerCreate = false;
|
ownerCreate = false;
|
||||||
reverseEncryption = false;
|
reverseEncryption = false;
|
||||||
configMode = Config_Prompt;
|
configMode = Config_Prompt;
|
||||||
|
@ -693,7 +693,7 @@ static int cmd_showcruft( int argc, char **argv )
|
|||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int do_chpasswd( bool useStdin, int argc, char **argv )
|
static int do_chpasswd( bool useStdin, bool annotate, int argc, char **argv )
|
||||||
{
|
{
|
||||||
(void)argc;
|
(void)argc;
|
||||||
string rootDir = argv[1];
|
string rootDir = argv[1];
|
||||||
@ -721,6 +721,8 @@ static int do_chpasswd( bool useStdin, int argc, char **argv )
|
|||||||
|
|
||||||
// ask for existing password
|
// ask for existing password
|
||||||
cout << _("Enter current Encfs password\n");
|
cout << _("Enter current Encfs password\n");
|
||||||
|
if (annotate)
|
||||||
|
cerr << "$PROMPT$ passwd" << endl;
|
||||||
CipherKey userKey = config->getUserKey( useStdin );
|
CipherKey userKey = config->getUserKey( useStdin );
|
||||||
if(!userKey)
|
if(!userKey)
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
@ -742,7 +744,11 @@ static int do_chpasswd( bool useStdin, int argc, char **argv )
|
|||||||
config->kdfIterations = 0; // generate new
|
config->kdfIterations = 0; // generate new
|
||||||
|
|
||||||
if( useStdin )
|
if( useStdin )
|
||||||
|
{
|
||||||
|
if (annotate)
|
||||||
|
cerr << "$PROMPT$ new_passwd" << endl;
|
||||||
userKey = config->getUserKey( true );
|
userKey = config->getUserKey( true );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
userKey = config->getNewUserKey();
|
userKey = config->getNewUserKey();
|
||||||
|
|
||||||
@ -781,12 +787,12 @@ static int do_chpasswd( bool useStdin, int argc, char **argv )
|
|||||||
|
|
||||||
static int chpasswd( int argc, char **argv )
|
static int chpasswd( int argc, char **argv )
|
||||||
{
|
{
|
||||||
return do_chpasswd( false, argc, argv );
|
return do_chpasswd( false, false, argc, argv );
|
||||||
}
|
}
|
||||||
|
|
||||||
static int chpasswdAutomaticly( int argc, char **argv )
|
static int chpasswdAutomaticly( int argc, char **argv )
|
||||||
{
|
{
|
||||||
return do_chpasswd( true, argc, argv );
|
return do_chpasswd( true, false, argc, argv );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -104,6 +104,7 @@ struct EncFS_Args
|
|||||||
if(opts->forceDecode) ss << "(forceDecode) ";
|
if(opts->forceDecode) ss << "(forceDecode) ";
|
||||||
if(opts->ownerCreate) ss << "(ownerCreate) ";
|
if(opts->ownerCreate) ss << "(ownerCreate) ";
|
||||||
if(opts->useStdin) ss << "(useStdin) ";
|
if(opts->useStdin) ss << "(useStdin) ";
|
||||||
|
if(opts->annotate) ss << "(annotate) ";
|
||||||
if(opts->reverseEncryption) ss << "(reverseEncryption) ";
|
if(opts->reverseEncryption) ss << "(reverseEncryption) ";
|
||||||
if(opts->mountOnDemand) ss << "(mountOnDemand) ";
|
if(opts->mountOnDemand) ss << "(mountOnDemand) ";
|
||||||
for(int i=0; i<fuseArgc; ++i)
|
for(int i=0; i<fuseArgc; ++i)
|
||||||
@ -196,6 +197,7 @@ bool processArgs(int argc, char *argv[], const shared_ptr<EncFS_Args> &out)
|
|||||||
out->opts->forceDecode = false;
|
out->opts->forceDecode = false;
|
||||||
out->opts->ownerCreate = false;
|
out->opts->ownerCreate = false;
|
||||||
out->opts->useStdin = false;
|
out->opts->useStdin = false;
|
||||||
|
out->opts->annotate = false;
|
||||||
out->opts->reverseEncryption = false;
|
out->opts->reverseEncryption = false;
|
||||||
|
|
||||||
bool useDefaultFlags = true;
|
bool useDefaultFlags = true;
|
||||||
@ -223,6 +225,7 @@ bool processArgs(int argc, char *argv[], const shared_ptr<EncFS_Args> &out)
|
|||||||
{"extpass", 1, 0, 'p'}, // external password program
|
{"extpass", 1, 0, 'p'}, // external password program
|
||||||
// {"single-thread", 0, 0, 's'}, // single-threaded mode
|
// {"single-thread", 0, 0, 's'}, // single-threaded mode
|
||||||
{"stdinpass", 0, 0, 'S'}, // read password from stdin
|
{"stdinpass", 0, 0, 'S'}, // read password from stdin
|
||||||
|
{"annotate", 0, 0, 513}, // Print annotation lines to stderr
|
||||||
{"verbose", 0, 0, 'v'}, // verbose mode
|
{"verbose", 0, 0, 'v'}, // verbose mode
|
||||||
{"version", 0, 0, 'V'}, //version
|
{"version", 0, 0, 'V'}, //version
|
||||||
{"reverse", 0, 0, 'r'}, // reverse encryption
|
{"reverse", 0, 0, 'r'}, // reverse encryption
|
||||||
@ -263,6 +266,9 @@ bool processArgs(int argc, char *argv[], const shared_ptr<EncFS_Args> &out)
|
|||||||
case 'S':
|
case 'S':
|
||||||
out->opts->useStdin = true;
|
out->opts->useStdin = true;
|
||||||
break;
|
break;
|
||||||
|
case 513:
|
||||||
|
out->opts->annotate = true;
|
||||||
|
break;
|
||||||
case 'f':
|
case 'f':
|
||||||
out->isDaemon = false;
|
out->isDaemon = false;
|
||||||
// this option was added in fuse 2.x
|
// this option was added in fuse 2.x
|
||||||
@ -411,13 +417,15 @@ bool processArgs(int argc, char *argv[], const shared_ptr<EncFS_Args> &out)
|
|||||||
|
|
||||||
// check that the directories exist, or that we can create them..
|
// check that the directories exist, or that we can create them..
|
||||||
if(!isDirectory( out->opts->rootDir.c_str() ) &&
|
if(!isDirectory( out->opts->rootDir.c_str() ) &&
|
||||||
!userAllowMkdir( out->opts->rootDir.c_str() ,0700))
|
!userAllowMkdir( out->opts->annotate? 1:0,
|
||||||
|
out->opts->rootDir.c_str() ,0700))
|
||||||
{
|
{
|
||||||
rWarning(_("Unable to locate root directory, aborting."));
|
rWarning(_("Unable to locate root directory, aborting."));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(!isDirectory( out->mountPoint.c_str() ) &&
|
if(!isDirectory( out->mountPoint.c_str() ) &&
|
||||||
!userAllowMkdir( out->mountPoint.c_str(),0700))
|
!userAllowMkdir( out->opts->annotate? 2:0,
|
||||||
|
out->mountPoint.c_str(),0700))
|
||||||
{
|
{
|
||||||
rWarning(_("Unable to locate mount point, aborting."));
|
rWarning(_("Unable to locate mount point, aborting."));
|
||||||
return false;
|
return false;
|
||||||
@ -630,7 +638,10 @@ int main(int argc, char *argv[])
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
time_t startTime, endTime;
|
time_t startTime, endTime;
|
||||||
|
|
||||||
|
if (encfsArgs->opts->annotate)
|
||||||
|
cerr << "$STATUS$ fuse_main_start" << endl;
|
||||||
|
|
||||||
// FIXME: workaround for fuse_main returning an error on normal
|
// FIXME: workaround for fuse_main returning an error on normal
|
||||||
// exit. Only print information if fuse_main returned
|
// exit. Only print information if fuse_main returned
|
||||||
// immediately..
|
// immediately..
|
||||||
@ -642,6 +653,9 @@ int main(int argc, char *argv[])
|
|||||||
&encfs_oper, (void*)ctx);
|
&encfs_oper, (void*)ctx);
|
||||||
|
|
||||||
time( &endTime );
|
time( &endTime );
|
||||||
|
|
||||||
|
if (encfsArgs->opts->annotate)
|
||||||
|
cerr << "$STATUS$ fuse_main_end" << endl;
|
||||||
|
|
||||||
if(res == 0)
|
if(res == 0)
|
||||||
returnCode = EXIT_SUCCESS;
|
returnCode = EXIT_SUCCESS;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user