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 - 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). 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. Propagate test mode to clvmd to skip activation and changes to held locks.
Defer writing PV labels to vg_write. 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; int i, num;
pid_t pid; pid_t pid;
char hostname[255]; char hostname[255];
char *p;
struct flock lock = { struct flock lock = {
.l_type = F_WRLCK, .l_type = F_WRLCK,
.l_whence = 0, .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", ""); log_sys_error("gethostname", "");
strcpy(hostname, "nohostname"); 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++) { for (i = 0; i < 20; i++, num++) {