pxar: implement feature flag support for device nodes, fifos and sockets
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
This commit is contained in:
committed by
Dietmar Maurer
parent
8abc95a145
commit
81a9905e0a
@ -809,11 +809,26 @@ impl <'a, W: Write> Encoder<'a, W> {
|
||||
Err(err) => bail!("readlink {:?} failed - {}", self.full_path(), err),
|
||||
}
|
||||
} else if is_block_dev(&stat) || is_char_dev(&stat) {
|
||||
self.write_filename(&filename)?;
|
||||
self.encode_device(&stat)?;
|
||||
} else if is_fifo(&stat) || is_socket(&stat) {
|
||||
self.write_filename(&filename)?;
|
||||
self.encode_special(&stat)?;
|
||||
if self.has_features(CA_FORMAT_WITH_DEVICE_NODES) {
|
||||
self.write_filename(&filename)?;
|
||||
self.encode_device(&stat)?;
|
||||
} else {
|
||||
eprintln!("skip device node: {:?}", self.full_path());
|
||||
}
|
||||
} else if is_fifo(&stat) {
|
||||
if self.has_features(CA_FORMAT_WITH_FIFOS) {
|
||||
self.write_filename(&filename)?;
|
||||
self.encode_special(&stat)?;
|
||||
} else {
|
||||
eprintln!("skip fifo: {:?}", self.full_path());
|
||||
}
|
||||
} else if is_socket(&stat) {
|
||||
if self.has_features(CA_FORMAT_WITH_SOCKETS) {
|
||||
self.write_filename(&filename)?;
|
||||
self.encode_special(&stat)?;
|
||||
} else {
|
||||
eprintln!("skip socket: {:?}", self.full_path());
|
||||
}
|
||||
} else {
|
||||
bail!("unsupported file type (mode {:o} {:?})", stat.st_mode, self.full_path());
|
||||
}
|
||||
|
@ -508,6 +508,9 @@ impl <'a, R: Read, F: Fn(&Path) -> Result<(), Error>> SequentialDecoder<'a, R, F
|
||||
entry: &CaFormatEntry,
|
||||
filename: &OsStr
|
||||
) -> Result<(), Error> {
|
||||
if !self.has_features(CA_FORMAT_WITH_SOCKETS) {
|
||||
return Ok(());
|
||||
}
|
||||
if let Some(fd) = parent_fd {
|
||||
self.restore_socket_at(fd, filename)?;
|
||||
self.restore_mode_at(&entry, fd, filename)?;
|
||||
@ -524,6 +527,9 @@ impl <'a, R: Read, F: Fn(&Path) -> Result<(), Error>> SequentialDecoder<'a, R, F
|
||||
entry: &CaFormatEntry,
|
||||
filename: &OsStr
|
||||
) -> Result<(), Error> {
|
||||
if !self.has_features(CA_FORMAT_WITH_FIFOS) {
|
||||
return Ok(());
|
||||
}
|
||||
if let Some(fd) = parent_fd {
|
||||
self.restore_fifo_at(fd, filename)?;
|
||||
self.restore_mode_at(&entry, fd, filename)?;
|
||||
@ -545,6 +551,9 @@ impl <'a, R: Read, F: Fn(&Path) -> Result<(), Error>> SequentialDecoder<'a, R, F
|
||||
bail!("got unknown header type inside device entry {:016x}", head.htype);
|
||||
}
|
||||
let device: CaFormatDevice = self.read_item()?;
|
||||
if !self.has_features(CA_FORMAT_WITH_DEVICE_NODES) {
|
||||
return Ok(());
|
||||
}
|
||||
if let Some(fd) = parent_fd {
|
||||
self.restore_device_at(&entry, fd, filename, &device)?;
|
||||
self.restore_mode_at(&entry, fd, filename)?;
|
||||
|
Reference in New Issue
Block a user