1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-06-17 20:27:03 +02:00

* g10.c: New options --[no-]mangle-dos-filenames.

* options.h (opt): Added mangle-dos-filenames.
* openfile.c (open_outfile) [USE_ONLY_8DOT3]: Truncate the
filename only when this option is set; this is the default.

NOT YET TESTED!
This commit is contained in:
Werner Koch 2002-12-05 15:21:17 +00:00
parent 1ae9261ef6
commit 9a34b607ab
4 changed files with 101 additions and 83 deletions

View File

@ -1,3 +1,10 @@
2002-12-05 Werner Koch <wk@gnupg.org>
* g10.c: New options --[no-]mangle-dos-filenames.
* options.h (opt): Added mangle-dos-filenames.
* openfile.c (open_outfile) [USE_ONLY_8DOT3]: Truncate the
filename only when this option is set; this is the default.
2002-12-04 David Shaw <dshaw@jabberwocky.com> 2002-12-04 David Shaw <dshaw@jabberwocky.com>
* main.h, keyedit.c, keygen.c: Back out previous (2002-12-01) * main.h, keyedit.c, keygen.c: Back out previous (2002-12-01)

View File

@ -149,13 +149,9 @@ enum cmd_and_opt_values { aNull = 0,
oDebug, oDebug,
oDebugAll, oDebugAll,
oStatusFD, oStatusFD,
#ifdef __riscos__ oStatusFile, /* only used with risc os */
oStatusFile,
#endif /* __riscos__ */
oAttributeFD, oAttributeFD,
#ifdef __riscos__ oAttributeFile, /* only used with risc os */
oAttributeFile,
#endif /* __riscos__ */
oSKComments, oSKComments,
oNoSKComments, oNoSKComments,
oNoVersion, oNoVersion,
@ -179,13 +175,9 @@ enum cmd_and_opt_values { aNull = 0,
oCertDigestAlgo, oCertDigestAlgo,
oCompressAlgo, oCompressAlgo,
oPasswdFD, oPasswdFD,
#ifdef __riscos__ oPasswdFile, /* only used with risc os */
oPasswdFile,
#endif /* __riscos__ */
oCommandFD, oCommandFD,
#ifdef __riscos__ oCommandFile, /* only used with risc os */
oCommandFile,
#endif /* __riscos__ */
oQuickRandom, oQuickRandom,
oNoVerbose, oNoVerbose,
oTrustDBName, oTrustDBName,
@ -251,9 +243,7 @@ enum cmd_and_opt_values { aNull = 0,
oEncryptTo, oEncryptTo,
oNoEncryptTo, oNoEncryptTo,
oLoggerFD, oLoggerFD,
#ifdef __riscos__ oLoggerFile, /* only used with risc os */
oLoggerFile,
#endif /* __riscos__ */
oUtf8Strings, oUtf8Strings,
oNoUtf8Strings, oNoUtf8Strings,
oDisableCipherAlgo, oDisableCipherAlgo,
@ -304,6 +294,8 @@ enum cmd_and_opt_values { aNull = 0,
oGroup, oGroup,
oStrict, oStrict,
oNoStrict, oNoStrict,
oMangleDosFilenames,
oNoMangleDosFilenames,
aTest }; aTest };
@ -597,6 +589,8 @@ static ARGPARSE_OPTS opts[] = {
{ oGroup, "group", 2, "@" }, { oGroup, "group", 2, "@" },
{ oStrict, "strict", 0, "@" }, { oStrict, "strict", 0, "@" },
{ oNoStrict, "no-strict", 0, "@" }, { oNoStrict, "no-strict", 0, "@" },
{ oMangleDosFilenames, "mangle-dos-filenames", 0, "@" },
{ oNoMangleDosFilenames, "no-mangle-dos-filenames", 0, "@" },
{0} }; {0} };
@ -1112,6 +1106,7 @@ main( int argc, char **argv )
EXPORT_INCLUDE_NON_RFC|EXPORT_INCLUDE_ATTRIBUTES; EXPORT_INCLUDE_NON_RFC|EXPORT_INCLUDE_ATTRIBUTES;
opt.keyserver_options.include_subkeys=1; opt.keyserver_options.include_subkeys=1;
opt.keyserver_options.include_revoked=1; opt.keyserver_options.include_revoked=1;
opt.mangle_dos_filenames = 1;
#if defined (__MINGW32__) #if defined (__MINGW32__)
set_homedir ( read_w32_registry_string( NULL, set_homedir ( read_w32_registry_string( NULL,
"Software\\GNU\\GnuPG", "HomeDir" )); "Software\\GNU\\GnuPG", "HomeDir" ));
@ -1685,6 +1680,10 @@ main( int argc, char **argv )
case oGroup: add_group(pargs.r.ret_str); break; case oGroup: add_group(pargs.r.ret_str); break;
case oStrict: /* noop */ break; case oStrict: /* noop */ break;
case oNoStrict: /* noop */ break; case oNoStrict: /* noop */ break;
case oMangleDosFilenames: opt.mangle_dos_filenames = 1; break;
case oNoMangleDosFilenames: opt.mangle_dos_filenames = 0; break;
default : pargs.err = configfp? 1:2; break; default : pargs.err = configfp? 1:2; break;
} }
} }

View File

@ -193,6 +193,8 @@ open_outfile( const char *iname, int mode, IOBUF *a )
name = opt.outfile; name = opt.outfile;
else { else {
#ifdef USE_ONLY_8DOT3 #ifdef USE_ONLY_8DOT3
if (opt.mangle_dos_filenames)
{
/* It is quite common DOS system to have only one dot in a /* It is quite common DOS system to have only one dot in a
* a filename So if we have something like this, we simple * a filename So if we have something like this, we simple
* replace the suffix execpt in cases where the suffix is * replace the suffix execpt in cases where the suffix is
@ -208,25 +210,31 @@ open_outfile( const char *iname, int mode, IOBUF *a )
strcpy(buf,iname); strcpy(buf,iname);
dot = strchr(buf, '.' ); dot = strchr(buf, '.' );
if ( dot && dot > buf && dot[1] && strlen(dot) <= 4 if ( dot && dot > buf && dot[1] && strlen(dot) <= 4
&& CMP_FILENAME(newsfx, dot) ) { && CMP_FILENAME(newsfx, dot) )
{
strcpy(dot, newsfx ); strcpy(dot, newsfx );
} }
else if ( dot && !dot[1] ) /* don't duplicate a dot */ else if ( dot && !dot[1] ) /* don't duplicate a dot */
strcpy( dot, newsfx+1 ); strcpy( dot, newsfx+1 );
else else
strcat ( buf, newsfx ); strcat ( buf, newsfx );
#else }
if (!buf)
#endif /* USE_ONLY_8DOT3 */
{
buf = m_alloc(strlen(iname)+4+1); buf = m_alloc(strlen(iname)+4+1);
strcpy(stpcpy(buf,iname), mode==1 ? EXTSEP_S "asc" : strcpy(stpcpy(buf,iname), mode==1 ? EXTSEP_S "asc" :
mode==2 ? EXTSEP_S "sig" : EXTSEP_S "gpg"); mode==2 ? EXTSEP_S "sig" : EXTSEP_S "gpg");
#endif }
name = buf; name = buf;
} }
rc = 0; rc = 0;
while( !overwrite_filep (name) ) { while( !overwrite_filep (name) )
{
char *tmp = ask_outfile_name (NULL, 0); char *tmp = ask_outfile_name (NULL, 0);
if ( !tmp || !*tmp ) { if ( !tmp || !*tmp )
{
m_free (tmp); m_free (tmp);
rc = G10ERR_FILE_EXISTS; rc = G10ERR_FILE_EXISTS;
break; break;
@ -235,8 +243,10 @@ open_outfile( const char *iname, int mode, IOBUF *a )
name = buf = tmp; name = buf = tmp;
} }
if( !rc ) { if( !rc )
if( !(*a = iobuf_create( name )) ) { {
if( !(*a = iobuf_create( name )) )
{
log_error(_("%s: can't create: %s\n"), name, strerror(errno) ); log_error(_("%s: can't create: %s\n"), name, strerror(errno) );
rc = G10ERR_CREATE_FILE; rc = G10ERR_CREATE_FILE;
} }
@ -245,6 +255,7 @@ open_outfile( const char *iname, int mode, IOBUF *a )
} }
m_free(buf); m_free(buf);
} }
return rc; return rc;
} }

View File

@ -178,6 +178,7 @@ struct {
int no_homedir_creation; int no_homedir_creation;
int show_keyring; int show_keyring;
struct groupitem *grouplist; struct groupitem *grouplist;
int mangle_dos_filenames;
} opt; } opt;