Allow use of debug flag names for all tools.
[gnupg.git] / g13 / encfs-1.5_annotate.diff
1 2009-10-14  Werner Koch  <wk@gnupg.org>
2
3         * encfs/main.cpp (processArgs): Add option --annotate.
4         (EncFS_Args, processArgs): Support annotate option.
5         (main): Print status messages.
6         * encfs/FileUtils.h (EncFS_Opts): Add field ANNOTATE.
7         * encfs/FileUtils.cpp (userAllowMkdir): Add arg PROMPTNO.
8         (createV6Config): Add arg ANNOTATE.
9         (initFS): Pass it down.
10         * encfs/encfsctl.cpp (cmd_export): Adjust call to userAllowMkdir.
11         (do_chpasswd): Add arg ANNOTATE.
12         (chpasswd, chpasswdAutomaticly): Pass false for ANNOTATE.
13
14         * encfs/SSL_Cipher.cpp (TimedPBKDF2, newKey): Solve build
15         problems by using const_cast for SALT.  Suggested by Valient.
16
17
18 diff -urp encfs-1.5.2.orig/encfs/FileUtils.cpp encfs-1.5.2/encfs/FileUtils.cpp
19 --- encfs-1.5.2.orig/encfs/FileUtils.cpp        2008-09-10 07:53:58.000000000 +0200
20 +++ encfs-1.5.2/encfs/FileUtils.cpp     2009-10-12 19:29:12.000000000 +0200
21 @@ -280,13 +280,24 @@ std::string parentDirectory( const std::
22         return path.substr(0, last);
23  }
24  
25 -bool userAllowMkdir( const char *path, mode_t mode )
26 +bool userAllowMkdir(int promptno, const char *path, mode_t mode )
27  {
28      // TODO: can we internationalize the y/n names?  Seems strange to prompt in
29      // their own language but then have to respond 'y' or 'n'.
30      // xgroup(setup)
31      cerr << autosprintf( _("The directory \"%s\" does not exist. Should it be created? (y,n) "), path );
32      char answer[10];
33 +    switch (promptno)
34 +    {
35 +      case 1:
36 +        cerr << endl << "$PROMPT$ create_root_dir" << endl;
37 +        break;
38 +      case 2:
39 +        cerr << endl << "$PROMPT$ create_mount_point" << endl;
40 +        break;
41 +      default:
42 +        break;
43 +    }
44      fgets( answer, sizeof(answer), stdin );
45  
46      if(toupper(answer[0]) == 'Y')
47 @@ -934,7 +945,7 @@ bool selectZeroBlockPassThrough()
48  RootPtr createV6Config( EncFS_Context *ctx, const std::string &rootDir, 
49         bool enableIdleTracking, bool forceDecode,
50         const std::string &passwordProgram,
51 -       bool useStdin, bool reverseEncryption )
52 +        bool useStdin, bool annotate, bool reverseEncryption )
53  {
54      RootPtr rootInfo;
55  
56 @@ -949,7 +960,10 @@ RootPtr createV6Config( EncFS_Context *c
57                " enter \"p\" for pre-configured paranoia mode,\n"
58                " anything else, or an empty line will select standard mode.\n"
59                "?> ");
60 -    
61 +
62 +    if (annotate)
63 +      cerr << "$PROMPT$ config_option" << endl;
64 +
65      char answer[10] = {0};
66      fgets( answer, sizeof(answer), stdin );
67      cout << "\n";
68 @@ -1135,7 +1149,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 @@ -1585,6 +1603,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 @@ -1649,7 +1669,7 @@ RootPtr initFS( EncFS_Context *ctx, cons
90             // creating a new encrypted filesystem
91             rootInfo = createV6Config( ctx, opts->rootDir, opts->idleTracking,
92                     opts->forceDecode, opts->passwordProgram, opts->useStdin,
93 -                   opts->reverseEncryption );
94 +                    opts->annotate, opts->reverseEncryption );
95         }
96      }
97         
98 diff -urp encfs-1.5.2.orig/encfs/FileUtils.h encfs-1.5.2/encfs/FileUtils.h
99 --- encfs-1.5.2.orig/encfs/FileUtils.h  2008-08-23 23:48:12.000000000 +0200
100 +++ encfs-1.5.2/encfs/FileUtils.h       2009-10-12 19:29:55.000000000 +0200
101 @@ -35,8 +35,9 @@ const char *lastPathElement( const char 
102  std::string parentDirectory( const std::string &path );
103  
104  // ask the user for permission to create the directory.  If they say ok, then
105 -// do it and return true.
106 -bool userAllowMkdir( const char *dirPath, mode_t mode );
107 +// do it and return true.  If PROMPTNO is 1 show a prompt asking for
108 +// the root directory, if 2 ask for the mount point.
109 +bool userAllowMkdir(int promptno, const char *dirPath, mode_t mode );
110  
111  enum ConfigType
112  {
113 @@ -155,6 +156,7 @@ struct EncFS_Opts
114  
115      std::string passwordProgram; // path to password program (or empty)
116      bool useStdin; // read password from stdin rather then prompting
117 +    bool annotate; // print annotation lines prompt to stderr.
118  
119      bool ownerCreate; // set owner of new files to caller
120  
121 @@ -167,6 +169,7 @@ struct EncFS_Opts
122         checkKey = true;
123         forceDecode = false;
124         useStdin = false;
125 +        annotate = false;
126         ownerCreate = false;
127         reverseEncryption = false;
128      }
129 diff -urp encfs-1.5.2.orig/encfs/SSL_Cipher.cpp encfs-1.5.2/encfs/SSL_Cipher.cpp
130 --- encfs-1.5.2.orig/encfs/SSL_Cipher.cpp       2008-08-23 23:48:12.000000000 +0200
131 +++ encfs-1.5.2/encfs/SSL_Cipher.cpp    2009-10-12 11:23:25.000000000 +0200
132 @@ -144,8 +144,10 @@ int TimedPBKDF2(const char *pass, int pa
133      for(;;)
134      {
135          gettimeofday( &start, 0 );
136 -        int res = PKCS5_PBKDF2_HMAC_SHA1(pass, passlen, salt, saltlen, 
137 -                                    iter, keylen, out);
138 +        int res = PKCS5_PBKDF2_HMAC_SHA1(pass, passlen, 
139 +                                         const_cast<unsigned char*>(salt), 
140 +                                         saltlen, 
141 +                                         iter, keylen, out);
142          if(res != 1)
143              return -1;
144  
145 @@ -423,9 +425,10 @@ CipherKey SSL_Cipher::newKey(const char 
146      } else
147      {
148          // known iteration length
149 -        if(PKCS5_PBKDF2_HMAC_SHA1(password, passwdLength, salt, saltLen, 
150 -                    iterationCount, _keySize + _ivLength, 
151 -                    KeyData(key)) != 1)
152 +        if(PKCS5_PBKDF2_HMAC_SHA1(password, passwdLength,
153 +                                  const_cast<unsigned char*>(salt), saltLen, 
154 +                                  iterationCount, _keySize + _ivLength, 
155 +                                  KeyData(key)) != 1)
156          {
157              rWarning("openssl error, PBKDF2 failed");
158              return CipherKey();
159
160
161 diff -urp encfs-1.5.2.orig/encfs/encfsctl.cpp encfs-1.5.2/encfs/encfsctl.cpp
162 --- encfs-1.5.2.orig/encfs/encfsctl.cpp 2008-08-23 23:48:12.000000000 +0200
163 +++ encfs-1.5.2/encfs/encfsctl.cpp      2009-10-12 19:29:11.000000000 +0200
164 @@ -564,7 +564,7 @@ static int cmd_export( int argc, char **
165  
166      string destDir = argv[2];
167      // if the dir doesn't exist, then create it (with user permission)
168 -    if(!checkDir(destDir) && !userAllowMkdir(destDir.c_str(), 0700))
169 +    if(!checkDir(destDir) && !userAllowMkdir(0, destDir.c_str(), 0700))
170         return EXIT_FAILURE;
171  
172      return traverseDirs(rootInfo, "/", destDir);
173 @@ -641,7 +641,7 @@ static int cmd_showcruft( int argc, char
174      return EXIT_SUCCESS;
175  }
176  
177 -static int do_chpasswd( bool useStdin, int argc, char **argv )
178 +static int do_chpasswd( bool useStdin, bool annotate, int argc, char **argv )
179  {
180      (void)argc;
181      string rootDir = argv[1];
182 @@ -669,6 +669,8 @@ static int do_chpasswd( bool useStdin, i
183  
184      // ask for existing password
185      cout << _("Enter current Encfs password\n");
186 +    if (annotate)
187 +      cerr << "$PROMPT$ passwd" << endl;
188      CipherKey userKey = config.getUserKey( useStdin );
189      if(!userKey)
190         return EXIT_FAILURE;
191 @@ -690,7 +692,11 @@ static int do_chpasswd( bool useStdin, i
192      config.kdfIterations = 0; // generate new
193  
194      if( useStdin )
195 +    {
196 +        if (annotate)
197 +            cerr << "$PROMPT$ new_passwd" << endl;
198         userKey = config.getUserKey( true );
199 +    }
200      else
201         userKey = config.getNewUserKey();
202  
203 @@ -729,12 +735,12 @@ static int do_chpasswd( bool useStdin, i
204  
205  static int chpasswd( int argc, char **argv )
206  {
207 -    return do_chpasswd( false, argc, argv );
208 +    return do_chpasswd( false, false, argc, argv );
209  }
210  
211  static int chpasswdAutomaticly( int argc, char **argv )
212  {
213 -    return do_chpasswd( true, argc, argv );
214 +    return do_chpasswd( true, false, argc, argv );
215  }
216  
217  
218 diff -urp encfs-1.5.2.orig/encfs/main.cpp encfs-1.5.2/encfs/main.cpp
219 --- encfs-1.5.2.orig/encfs/main.cpp     2008-08-06 08:36:13.000000000 +0200
220 +++ encfs-1.5.2/encfs/main.cpp  2009-10-14 14:19:09.000000000 +0200
221 @@ -104,6 +104,7 @@ struct EncFS_Args
222         if(opts->forceDecode) ss << "(forceDecode) ";
223         if(opts->ownerCreate) ss << "(ownerCreate) ";
224         if(opts->useStdin) ss << "(useStdin) ";
225 +       if(opts->annotate) ss << "(annotate) ";
226         if(opts->reverseEncryption) ss << "(reverseEncryption) ";
227         if(opts->mountOnDemand) ss << "(mountOnDemand) ";
228         for(int i=0; i<fuseArgc; ++i)
229 @@ -196,6 +197,7 @@ bool processArgs(int argc, char *argv[],
230      out->opts->forceDecode = false;
231      out->opts->ownerCreate = false;
232      out->opts->useStdin = false;
233 +    out->opts->annotate = false;
234      out->opts->reverseEncryption = false;
235   
236      bool useDefaultFlags = true;
237 @@ -223,6 +225,7 @@ bool processArgs(int argc, char *argv[],
238         {"extpass", 1, 0, 'p'}, // external password program
239         // {"single-thread", 0, 0, 's'}, // single-threaded mode
240         {"stdinpass", 0, 0, 'S'}, // read password from stdin
241 +       {"annotate", 0, 0, 513}, // Print annotation lines to stderr
242         {"verbose", 0, 0, 'v'}, // verbose mode
243         {"version", 0, 0, 'V'}, //version
244         {"reverse", 0, 0, 'r'}, // reverse encryption
245 @@ -255,6 +258,9 @@ bool processArgs(int argc, char *argv[],
246         case 'S':
247             out->opts->useStdin = true;
248             break;
249 +        case 513:
250 +            out->opts->annotate = true;
251 +            break;
252         case 'f':
253             out->isDaemon = false;
254             // this option was added in fuse 2.x
255 @@ -403,13 +409,15 @@ bool processArgs(int argc, char *argv[],
256  
257      // check that the directories exist, or that we can create them..
258      if(!isDirectory( out->opts->rootDir.c_str() ) && 
259 -           !userAllowMkdir( out->opts->rootDir.c_str() ,0700))
260 +       !userAllowMkdir(out->opts->annotate? 1:0,
261 +                       out->opts->rootDir.c_str() ,0700))
262      {
263         rWarning(_("Unable to locate root directory, aborting."));
264         return false;
265      }
266      if(!isDirectory( out->mountPoint.c_str() ) && 
267 -           !userAllowMkdir( out->mountPoint.c_str(),0700))
268 +       !userAllowMkdir(out->opts->annotate? 2:0,
269 +                       out->mountPoint.c_str(), 0700))
270      {
271         rWarning(_("Unable to locate mount point, aborting."));
272         return false;
273 @@ -610,6 +618,9 @@ int main(int argc, char *argv[])
274         {
275             time_t startTime, endTime;
276            
277 +            if (encfsArgs->opts->annotate)
278 +              cerr << "$STATUS$ fuse_main_start" << endl;
279 +
280             // FIXME: workaround for fuse_main returning an error on normal
281             // exit.  Only print information if fuse_main returned
282             // immediately..
283 @@ -622,6 +633,9 @@ int main(int argc, char *argv[])
284             
285             time( &endTime );
286  
287 +            if (encfsArgs->opts->annotate)
288 +              cerr << "$STATUS$ fuse_main_end" << endl;
289 +
290             if(res == 0)
291                 returnCode = EXIT_SUCCESS;
292  
293