1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Fix create_temp_name to replace any '/' found in the hostname with '?'.

There's a possibility someone will use the '/' in the hostname. Since we
generate a temporary file name (path) including the hostname, any '/' would
be ambiguous.

We can always set such hostname using 'sethostname' from unistd.h. But the
'hostname' command already includes the check and removes the '/' char.
However, some old versions still allow that.
See: https://bugzilla.redhat.com/show_bug.cgi?id=711445.

Since this is only a temporary name and the possibility of this error is
quite negligible, we don't need any complex escape sequence here, just a
simple char replace.
This commit is contained in:
Peter Rajnoha 2011-06-08 08:49:53 +00:00
parent bb056af3c9
commit afc8a3b104
2 changed files with 8 additions and 0 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.86 -
=================================
Fix create_temp_name to replace any '/' found in the hostname with '?'.
Always use append to file in lvmdump (selinux policy - no file truncation).
Propagate test mode to clvmd to skip activation and changes to held locks.
Defer writing PV labels to vg_write.

View File

@ -35,6 +35,7 @@ int create_temp_name(const char *dir, char *buffer, size_t len, int *fd,
int i, num;
pid_t pid;
char hostname[255];
char *p;
struct flock lock = {
.l_type = F_WRLCK,
.l_whence = 0,
@ -48,6 +49,12 @@ int create_temp_name(const char *dir, char *buffer, size_t len, int *fd,
log_sys_error("gethostname", "");
strcpy(hostname, "nohostname");
}
else {
/* Replace any '/' with '?' found in the hostname. */
p = hostname;
while ((p = strchr(p, '/')))
*p = '?';
}
for (i = 0; i < 20; i++, num++) {