Browse Source

replace usage of potential dangerous mktemp with mkstemp

Avoid the warning "the use of `mktemp' is dangerous,
better use `mkstemp' or `mkdtemp'". It is not strictly necessary to
change the usage from a security point of view here, but mktemp is
also removed from the standard since POSIX.1-2008.

The mkostemp call returns a file descriptor the logic for
TemporaryFileName has been changed accordingly to get the same results.
The file permissions are corrected by using fchmod() as the default for
FileFd is 666 while mkstemp creates files with 600 by default.
debian/1.8.y
Angel Guzman Maeso 9 years ago
committed by David Kalnischkies
parent
commit
7335eebea6
  1. 24
      apt-pkg/contrib/fileutl.cc

24
apt-pkg/contrib/fileutl.cc

@ -946,9 +946,6 @@ bool FileFd::Open(string FileName,unsigned int const Mode,APT::Configuration::Co
if ((Mode & Atomic) == Atomic)
{
Flags |= Replace;
char *name = strdup((FileName + ".XXXXXX").c_str());
TemporaryFileName = string(mktemp(name));
free(name);
}
else if ((Mode & (Exclusive | Create)) == (Exclusive | Create))
{
@ -974,8 +971,25 @@ bool FileFd::Open(string FileName,unsigned int const Mode,APT::Configuration::Co
else if_FLAGGED_SET(Atomic, O_EXCL);
#undef if_FLAGGED_SET
if (TemporaryFileName.empty() == false)
iFd = open(TemporaryFileName.c_str(), fileflags, Perms);
if ((Mode & Atomic) == Atomic)
{
char *name = strdup((FileName + ".XXXXXX").c_str());
if((iFd = mkostemp(name, fileflags)) == -1)
{
free(name);
return FileFdErrno("mkostemp", "Could not create temporary file for %s", FileName.c_str());
}
TemporaryFileName = string(name);
if(fchmod(iFd, Perms) == -1)
{
free(name);
return FileFdErrno("fchmod", "Could not assign permissions to temporary file %s with error %s", FileName.c_str(), strerror(errno));
}
free(name);
}
else
iFd = open(FileName.c_str(), fileflags, Perms);

Loading…
Cancel
Save