aboutsummaryrefslogtreecommitdiffstats
path: root/g10/openfile.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2004-10-14 07:11:57 +0000
committerWerner Koch <[email protected]>2004-10-14 07:11:57 +0000
commit35774ec5682ae54f4cd71275b8055eef2aa64cb1 (patch)
tree21e91fabb1bb0b2f261290dfa3c4fb080f3c7df7 /g10/openfile.c
parent* armor.c (fake_packet): Allow arbitrary dash-escaped lines as per (diff)
downloadgnupg-35774ec5682ae54f4cd71275b8055eef2aa64cb1.tar.gz
gnupg-35774ec5682ae54f4cd71275b8055eef2aa64cb1.zip
* misc.c (is_secured_filename): New.
* keydb.c (maybe_create_keyring) * tdbio.c (tdbio_set_dbname) * plaintext.c (handle_plaintext) * openfile.c (copy_options_file, open_outfile) * exec.c (exec_write) * keygen.c (do_generate_keypair, gen_card_key_with_backup) * sign.c (sign_file, clearsign_file) * keyring.c (create_tmp_file, do_copy): Check for secured files before creating them. * keygen.c (print_status_key_created): s/unsigned char/byte/ due to a strange typedef for RISC OS. Noted by Stefan.
Diffstat (limited to '')
-rw-r--r--g10/openfile.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/g10/openfile.c b/g10/openfile.c
index 9c305a2f2..59e19a485 100644
--- a/g10/openfile.c
+++ b/g10/openfile.c
@@ -175,8 +175,9 @@ open_outfile( const char *iname, int mode, IOBUF *a )
*a = NULL;
if( iobuf_is_pipe_filename (iname) && !opt.outfile ) {
- if( !(*a = iobuf_create(NULL)) ) {
- log_error(_("%s: can't open: %s\n"), "[stdout]", strerror(errno) );
+ *a = iobuf_create(NULL);
+ if( !*a ) {
+ log_error(_("can't open `%s': %s\n"), "[stdout]", strerror(errno) );
rc = G10ERR_CREATE_FILE;
}
else if( opt.verbose )
@@ -244,9 +245,16 @@ open_outfile( const char *iname, int mode, IOBUF *a )
if( !rc )
{
- if( !(*a = iobuf_create( name )) )
+ if (is_secured_filename (name) )
{
- log_error(_("%s: can't create: %s\n"), name, strerror(errno) );
+ *a = NULL;
+ errno = EPERM;
+ }
+ else
+ *a = iobuf_create( name );
+ if( !*a )
+ {
+ log_error(_("can't create `%s': %s\n"), name, strerror(errno) );
rc = G10ERR_CREATE_FILE;
}
else if( opt.verbose )
@@ -322,16 +330,22 @@ copy_options_file( const char *destdir )
errno = EPERM;
}
if( !src ) {
- log_error(_("%s: can't open: %s\n"), fname, strerror(errno) );
+ log_error(_("can't open `%s': %s\n"), fname, strerror(errno) );
m_free(fname);
return;
}
strcpy(stpcpy(fname, destdir), DIRSEP_S "gpg" EXTSEP_S "conf" );
oldmask=umask(077);
- dst = fopen( fname, "w" );
+ if ( is_secured_filename (fname) )
+ {
+ dst = NULL;
+ errno = EPERM;
+ }
+ else
+ dst = fopen( fname, "w" );
umask(oldmask);
if( !dst ) {
- log_error(_("%s: can't create: %s\n"), fname, strerror(errno) );
+ log_error(_("can't create `%s': %s\n"), fname, strerror(errno) );
fclose( src );
m_free(fname);
return;
@@ -389,10 +403,10 @@ try_make_homedir( const char *fname )
&& !compare_filenames( fname, defhome ) )
) {
if( mkdir( fname, S_IRUSR|S_IWUSR|S_IXUSR ) )
- log_fatal( _("%s: can't create directory: %s\n"),
+ log_fatal( _("can't create directory `%s': %s\n"),
fname, strerror(errno) );
else if( !opt.quiet )
- log_info( _("%s: directory created\n"), fname );
+ log_info( _("directory `%s' created\n"), fname );
copy_options_file( fname );
/* log_info(_("you have to start GnuPG again, " */
/* "so it can read the new configuration file\n") ); */