ControlTarEntry

Struct ControlTarEntry 

Source
pub struct ControlTarEntry<'a> { /* private fields */ }
Expand description

A wrapper around tar::Entry for representing content in control.tar files.

Facilitates access to the raw tar::Entry as well as for obtaining a higher level type that decodes known files within control.tar files.

Implementations§

Source§

impl<'a> ControlTarEntry<'a>

Source

pub fn to_control_file(&mut self) -> Result<(&Header, ControlTarFile)>

Attempt to convert this tar entry to a ControlTarFile.

Methods from Deref<Target = Entry<'a, Box<dyn Read>>>§

Source

pub fn path(&self) -> Result<Cow<'_, Path>, Error>

Returns the path name for this entry.

This method may fail if the pathname is not valid Unicode and this is called on a Windows platform.

Note that this function will convert any \ characters to directory separators, and it will not always return the same value as self.header().path() as some archive formats have support for longer path names described in separate entries.

It is recommended to use this method instead of inspecting the header directly to ensure that various archive formats are handled correctly.

Source

pub fn path_bytes(&self) -> Cow<'_, [u8]>

Returns the raw bytes listed for this entry.

Note that this function will convert any \ characters to directory separators, and it will not always return the same value as self.header().path_bytes() as some archive formats have support for longer path names described in separate entries.

Returns the link name for this entry, if any is found.

This method may fail if the pathname is not valid Unicode and this is called on a Windows platform. Ok(None) being returned, however, indicates that the link name was not present.

Note that this function will convert any \ characters to directory separators, and it will not always return the same value as self.header().link_name() as some archive formats have support for longer path names described in separate entries.

It is recommended to use this method instead of inspecting the header directly to ensure that various archive formats are handled correctly.

Returns the link name for this entry, in bytes, if listed.

Note that this will not always return the same value as self.header().link_name_bytes() as some archive formats have support for longer path names described in separate entries.

Source

pub fn pax_extensions(&mut self) -> Result<Option<PaxExtensions<'_>>, Error>

Returns an iterator over the pax extensions contained in this entry.

Pax extensions are a form of archive where extra metadata is stored in key/value pairs in entries before the entry they’re intended to describe. For example this can be used to describe long file name or other metadata like atime/ctime/mtime in more precision.

The returned iterator will yield key/value pairs for each extension.

None will be returned if this entry does not indicate that it itself contains extensions, or if there were no previous extensions describing it.

Note that global pax extensions are intended to be applied to all archive entries.

Also note that this function will read the entire entry if the entry itself is a list of extensions.

Source

pub fn header(&self) -> &Header

Returns access to the header of this entry in the archive.

This provides access to the metadata for this entry in the archive.

Source

pub fn size(&self) -> u64

Returns access to the size of this entry in the archive.

In the event the size is stored in a pax extension, that size value will be referenced. Otherwise, the entry size will be stored in the header.

Source

pub fn raw_header_position(&self) -> u64

Returns the starting position, in bytes, of the header of this entry in the archive.

The header is always a contiguous section of 512 bytes, so if the underlying reader implements Seek, then the slice from header_pos to header_pos + 512 contains the raw header bytes.

Source

pub fn raw_file_position(&self) -> u64

Returns the starting position, in bytes, of the file of this entry in the archive.

If the file of this entry is continuous (e.g. not a sparse file), and if the underlying reader implements Seek, then the slice from file_pos to file_pos + entry_size contains the raw file bytes.

Source

pub fn unpack<P>(&mut self, dst: P) -> Result<Unpacked, Error>
where P: AsRef<Path>,

Writes this file to the specified location.

This function will write the entire contents of this file into the location specified by dst. Metadata will also be propagated to the path dst.

This function will create a file at the path dst, and it is required that the intermediate directories are created. Any existing file at the location dst will be overwritten.

Note: This function does not have as many sanity checks as Archive::unpack or Entry::unpack_in. As a result if you’re thinking of unpacking untrusted tarballs you may want to review the implementations of the previous two functions and perhaps implement similar logic yourself.

§Examples
use std::fs::File;
use tar::Archive;

let mut ar = Archive::new(File::open("foo.tar").unwrap());

for (i, file) in ar.entries().unwrap().enumerate() {
    let mut file = file.unwrap();
    file.unpack(format!("file-{}", i)).unwrap();
}
Source

pub fn unpack_in<P>(&mut self, dst: P) -> Result<bool, Error>
where P: AsRef<Path>,

Extracts this file under the specified path, avoiding security issues.

This function will write the entire contents of this file into the location obtained by appending the path of this file in the archive to dst, creating any intermediate directories if needed. Metadata will also be propagated to the path dst. Any existing file at the location dst will be overwritten.

This function carefully avoids writing outside of dst. If the file has a ‘..’ in its path, this function will skip it and return false.

§Examples
use std::fs::File;
use tar::Archive;

let mut ar = Archive::new(File::open("foo.tar").unwrap());

for (i, file) in ar.entries().unwrap().enumerate() {
    let mut file = file.unwrap();
    file.unpack_in("target").unwrap();
}
Source

pub fn set_mask(&mut self, mask: u32)

Set the mask of the permission bits when unpacking this entry.

The mask will be inverted when applying against a mode, similar to how umask works on Unix. In logical notation it looks like:

new_mode = old_mode & (~mask)

The mask is 0 by default and is currently only implemented on Unix.

Source

pub fn set_unpack_xattrs(&mut self, unpack_xattrs: bool)

Indicate whether extended file attributes (xattrs on Unix) are preserved when unpacking this entry.

This flag is disabled by default and is currently only implemented on Unix using xattr support. This may eventually be implemented for Windows, however, if other archive implementations are found which do this as well.

Source

pub fn set_preserve_permissions(&mut self, preserve: bool)

Indicate whether extended permissions (like suid on Unix) are preserved when unpacking this entry.

This flag is disabled by default and is currently only implemented on Unix.

Source

pub fn set_preserve_mtime(&mut self, preserve: bool)

Indicate whether access time information is preserved when unpacking this entry.

This flag is enabled by default.

Trait Implementations§

Source§

impl<'a> Deref for ControlTarEntry<'a>

Source§

type Target = Entry<'a, Box<dyn Read>>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<'a> DerefMut for ControlTarEntry<'a>

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.

Auto Trait Implementations§

§

impl<'a> Freeze for ControlTarEntry<'a>

§

impl<'a> !RefUnwindSafe for ControlTarEntry<'a>

§

impl<'a> !Send for ControlTarEntry<'a>

§

impl<'a> !Sync for ControlTarEntry<'a>

§

impl<'a> Unpin for ControlTarEntry<'a>

§

impl<'a> !UnwindSafe for ControlTarEntry<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more