gpg: Fix calc_header_length when LEN is 0 and improve documentation.
[gnupg.git] / g13 / encfs-1.7.3_annotate.diff
1 2010-11-10  Werner Koch  <wk@gnupg.org>
2
3         Port my patch for 1.5 dated 2009-10-14 to 1.7.3.
4
5         * encfs/main.cpp (processArgs): Add option --annotate.
6         (EncFS_Args, processArgs): Support annotate option.
7         (main): Print status messages.
8         * encfs/FileUtils.h (EncFS_Opts): Add field ANNOTATE.
9         * encfs/FileUtils.cpp (userAllowMkdir): Add arg PROMPTNO.
10         (createV6Config): Make use of ANNOTATE option.
11         (initFS): Ditto.
12         * encfs/encfsctl.cpp (cmd_export): Adjust call to userAllowMkdir.
13         (do_chpasswd): Add arg ANNOTATE.
14         (chpasswd, chpasswdAutomaticly): Pass false for ANNOTATE.
15
16
17 diff -urpN orig/encfs-1.7.3/encfs/FileUtils.cpp encfs-1.7.3/encfs/FileUtils.cpp
18 --- orig/encfs-1.7.3/encfs/FileUtils.cpp        2010-11-04 04:28:54.000000000 +0100
19 +++ encfs-1.7.3/encfs/FileUtils.cpp     2010-11-10 11:43:32.000000000 +0100
20 @@ -314,14 +314,27 @@ std::string parentDirectory( const std::
21         return path.substr(0, last);
22  }
23  
24 -bool userAllowMkdir( const char *path, mode_t mode )
25 +bool userAllowMkdir(int promptno, const char *path, mode_t mode )
26  {
27      // TODO: can we internationalize the y/n names?  Seems strange to prompt in
28      // their own language but then have to respond 'y' or 'n'.
29      // xgroup(setup)
30      cerr << autosprintf( _("The directory \"%s\" does not exist. Should it be created? (y,n) "), path );
31      char answer[10];
32 -    char *res = fgets( answer, sizeof(answer), stdin );
33 +    char *res;
34 +
35 +    switch (promptno)
36 +    {
37 +      case 1:
38 +        cerr << endl << "$PROMPT$ create_root_dir" << endl;
39 +        break;
40 +      case 2:
41 +        cerr << endl << "$PROMPT$ create_mount_point" << endl;
42 +        break;
43 +      default:
44 +        break;
45 +    }
46 +    res = fgets( answer, sizeof(answer), stdin );
47  
48      if(res != 0 && toupper(answer[0]) == 'Y')
49      {
50 @@ -976,6 +989,7 @@ RootPtr createV6Config( EncFS_Context *c
51      bool useStdin = opts->useStdin;
52      bool reverseEncryption = opts->reverseEncryption;
53      ConfigMode configMode = opts->configMode;
54 +    bool annotate = opts->annotate;
55      
56      RootPtr rootInfo;
57  
58 @@ -994,6 +1008,9 @@ RootPtr createV6Config( EncFS_Context *c
59                  " anything else, or an empty line will select standard mode.\n"
60                  "?> ");
61      
62 +        if (annotate)
63 +            cerr << "$PROMPT$ config_option" << endl;
64 +
65          char *res = fgets( answer, sizeof(answer), stdin );
66         (void)res;
67          cout << "\n";
68 @@ -1179,7 +1196,11 @@ RootPtr createV6Config( EncFS_Context *c
69      CipherKey userKey;
70      rDebug( "useStdin: %i", useStdin );
71      if(useStdin)
72 +    {
73 +        if (annotate)
74 +            cerr << "$PROMPT$ new_passwd" << endl;
75          userKey = config->getUserKey( useStdin );
76 +    }
77      else if(!passwordProgram.empty())
78          userKey = config->getUserKey( passwordProgram, rootDir );
79      else
80 @@ -1618,6 +1639,8 @@ RootPtr initFS( EncFS_Context *ctx, cons
81          if(opts->passwordProgram.empty())
82          {
83              rDebug( "useStdin: %i", opts->useStdin );
84 +            if (opts->annotate)
85 +                cerr << "$PROMPT$ passwd" << endl;
86              userKey = config->getUserKey( opts->useStdin );
87          } else
88              userKey = config->getUserKey( opts->passwordProgram, opts->rootDir );
89 diff -urpN orig/encfs-1.7.3/encfs/FileUtils.h encfs-1.7.3/encfs/FileUtils.h
90 --- orig/encfs-1.7.3/encfs/FileUtils.h  2010-09-05 22:47:01.000000000 +0200
91 +++ encfs-1.7.3/encfs/FileUtils.h       2010-11-10 11:45:16.000000000 +0100
92 @@ -36,7 +36,7 @@ std::string parentDirectory( const std::
93  
94  // ask the user for permission to create the directory.  If they say ok, then
95  // do it and return true.
96 -bool userAllowMkdir( const char *dirPath, mode_t mode );
97 +bool userAllowMkdir(int promptno, const char *dirPath, mode_t mode );
98  
99  class Cipher;
100  class DirNode;
101 @@ -72,6 +72,7 @@ struct EncFS_Opts
102  
103      std::string passwordProgram; // path to password program (or empty)
104      bool useStdin; // read password from stdin rather then prompting
105 +    bool annotate; // print annotation line prompt to stderr.
106  
107      bool ownerCreate; // set owner of new files to caller
108  
109 @@ -87,6 +88,7 @@ struct EncFS_Opts
110          checkKey = true;
111          forceDecode = false;
112          useStdin = false;
113 +        annotate = false;
114          ownerCreate = false;
115          reverseEncryption = false;
116          configMode = Config_Prompt;
117 diff -urpN orig/encfs-1.7.3/encfs/encfsctl.cpp encfs-1.7.3/encfs/encfsctl.cpp
118 --- orig/encfs-1.7.3/encfs/encfsctl.cpp 2010-08-30 08:27:49.000000000 +0200
119 +++ encfs-1.7.3/encfs/encfsctl.cpp      2010-11-10 11:53:36.000000000 +0100
120 @@ -616,7 +616,7 @@ static int cmd_export( int argc, char **
121  
122      string destDir = argv[2];
123      // if the dir doesn't exist, then create it (with user permission)
124 -    if(!checkDir(destDir) && !userAllowMkdir(destDir.c_str(), 0700))
125 +    if(!checkDir(destDir) && !userAllowMkdir(0, destDir.c_str(), 0700))
126         return EXIT_FAILURE;
127  
128      return traverseDirs(rootInfo, "/", destDir);
129 @@ -693,7 +693,7 @@ static int cmd_showcruft( int argc, char
130      return EXIT_SUCCESS;
131  }
132  
133 -static int do_chpasswd( bool useStdin, int argc, char **argv )
134 +static int do_chpasswd( bool useStdin, bool annotate, int argc, char **argv )
135  {
136      (void)argc;
137      string rootDir = argv[1];
138 @@ -721,6 +721,8 @@ static int do_chpasswd( bool useStdin, i
139  
140      // ask for existing password
141      cout << _("Enter current Encfs password\n");
142 +    if (annotate)
143 +        cerr << "$PROMPT$ passwd" << endl;
144      CipherKey userKey = config->getUserKey( useStdin );
145      if(!userKey)
146         return EXIT_FAILURE;
147 @@ -742,7 +744,11 @@ static int do_chpasswd( bool useStdin, i
148      config->kdfIterations = 0; // generate new
149  
150      if( useStdin )
151 +    {
152 +        if (annotate)
153 +            cerr << "$PROMPT$ new_passwd" << endl;
154          userKey = config->getUserKey( true );
155 +    }
156      else
157          userKey = config->getNewUserKey();
158  
159 @@ -781,12 +787,12 @@ static int do_chpasswd( bool useStdin, i
160  
161  static int chpasswd( int argc, char **argv )
162  {
163 -    return do_chpasswd( false, argc, argv );
164 +    return do_chpasswd( false, false, argc, argv );
165  }
166  
167  static int chpasswdAutomaticly( int argc, char **argv )
168  {
169 -    return do_chpasswd( true, argc, argv );
170 +    return do_chpasswd( true, false, argc, argv );
171  }
172  
173  
174 diff -urpN orig/encfs-1.7.3/encfs/main.cpp encfs-1.7.3/encfs/main.cpp
175 --- orig/encfs-1.7.3/encfs/main.cpp     2009-11-29 23:04:12.000000000 +0100
176 +++ encfs-1.7.3/encfs/main.cpp  2010-11-10 11:58:59.000000000 +0100
177 @@ -104,6 +104,7 @@ struct EncFS_Args
178         if(opts->forceDecode) ss << "(forceDecode) ";
179         if(opts->ownerCreate) ss << "(ownerCreate) ";
180         if(opts->useStdin) ss << "(useStdin) ";
181 +        if(opts->annotate) ss << "(annotate) ";
182         if(opts->reverseEncryption) ss << "(reverseEncryption) ";
183         if(opts->mountOnDemand) ss << "(mountOnDemand) ";
184         for(int i=0; i<fuseArgc; ++i)
185 @@ -196,6 +197,7 @@ bool processArgs(int argc, char *argv[],
186      out->opts->forceDecode = false;
187      out->opts->ownerCreate = false;
188      out->opts->useStdin = false;
189 +    out->opts->annotate = false;
190      out->opts->reverseEncryption = false;
191   
192      bool useDefaultFlags = true;
193 @@ -223,6 +225,7 @@ bool processArgs(int argc, char *argv[],
194         {"extpass", 1, 0, 'p'}, // external password program
195         // {"single-thread", 0, 0, 's'}, // single-threaded mode
196         {"stdinpass", 0, 0, 'S'}, // read password from stdin
197 +        {"annotate", 0, 0, 513}, // Print annotation lines to stderr
198         {"verbose", 0, 0, 'v'}, // verbose mode
199         {"version", 0, 0, 'V'}, //version
200         {"reverse", 0, 0, 'r'}, // reverse encryption
201 @@ -263,6 +266,9 @@ bool processArgs(int argc, char *argv[],
202         case 'S':
203             out->opts->useStdin = true;
204             break;
205 +        case 513:
206 +            out->opts->annotate = true;
207 +            break;
208         case 'f':
209             out->isDaemon = false;
210             // this option was added in fuse 2.x
211 @@ -411,13 +417,15 @@ bool processArgs(int argc, char *argv[],
212  
213      // check that the directories exist, or that we can create them..
214      if(!isDirectory( out->opts->rootDir.c_str() ) && 
215 -           !userAllowMkdir( out->opts->rootDir.c_str() ,0700))
216 +       !userAllowMkdir(out->opts->annotate? 1:0,
217 +                       out->opts->rootDir.c_str() ,0700))
218      {
219         rWarning(_("Unable to locate root directory, aborting."));
220         return false;
221      }
222      if(!isDirectory( out->mountPoint.c_str() ) && 
223 -           !userAllowMkdir( out->mountPoint.c_str(),0700))
224 +       !userAllowMkdir(out->opts->annotate? 2:0,
225 +                       out->mountPoint.c_str(),0700))
226      {
227         rWarning(_("Unable to locate mount point, aborting."));
228         return false;
229 @@ -631,6 +639,9 @@ int main(int argc, char *argv[])
230         {
231             time_t startTime, endTime;
232            
233 +            if (encfsArgs->opts->annotate)
234 +                cerr << "$STATUS$ fuse_main_start" << endl;
235 +
236             // FIXME: workaround for fuse_main returning an error on normal
237             // exit.  Only print information if fuse_main returned
238             // immediately..
239 @@ -643,6 +654,9 @@ int main(int argc, char *argv[])
240             
241             time( &endTime );
242  
243 +            if (encfsArgs->opts->annotate)
244 +                cerr << "$STATUS$ fuse_main_end" << endl;
245 +
246             if(res == 0)
247                 returnCode = EXIT_SUCCESS;
248  
249