Parent

Class/Module Index [+]

Quicksearch

Rex::Zip::Archive

This represents an entire archive.

Attributes

entries[R]

An array of the Entry objects stored in this Archive.

Public Class Methods

new(compmeth=CM_DEFLATE) click to toggle source
# File lib/rex/zip/archive.rb, line 17
def initialize(compmeth=CM_DEFLATE)
        @compmeth = compmeth
        @entries = []
end

Public Instance Methods

add_file(fname, fdata=nil, xtra=nil, comment=nil) click to toggle source

Create a new Entry and add it to the archive.

# File lib/rex/zip/archive.rb, line 26
def add_file(fname, fdata=nil, xtra=nil, comment=nil)
        if (not fdata)
                begin
                        st = File.stat(fname)
                rescue
                        return nil
                end

                ts = st.mtime
                if (st.directory?)
                        attrs = EFA_ISDIR
                        fname += '/'
                else
                        f = File.open(fname, 'rb')
                        fdata = f.read(f.stat.size)
                        f.close
                end
        end

        @entries << Entry.new(fname, fdata, @compmeth, ts, attrs, xtra, comment)
end
inspect() click to toggle source
# File lib/rex/zip/archive.rb, line 101
def inspect
        "#<#{self.class} entries = [#{@entries.map{|e| e.name}.join(",")}]>"
end
pack() click to toggle source

Compress this archive and return the resulting zip file as a String.

# File lib/rex/zip/archive.rb, line 67
def pack
        ret = ''

        # save the offests
        offsets = []

        # file 1 .. file n
        @entries.each { |ent|
                offsets << ret.length
                ret << ent.pack
        }

        # archive decryption header (unsupported)
        # archive extra data record (unsupported)

        # central directory
        cfd_offset = ret.length
        idx = 0
        @entries.each { |ent|
                cfd = CentralDir.new(ent, offsets[idx])
                ret << cfd.pack
                idx += 1
        }

        # zip64 end of central dir record (unsupported)
        # zip64 end of central dir locator (unsupported)

        # end of central directory record
        cur_offset = ret.length - cfd_offset
        ret << CentralDirEnd.new(@entries.length, cur_offset, cfd_offset, @comment).pack

        ret
end
save_to(fname) click to toggle source

Write the compressed file to fname.

# File lib/rex/zip/archive.rb, line 57
def save_to(fname)
        f = File.open(fname, 'wb')
        f.write(pack)
        f.close
end
set_comment(comment) click to toggle source
# File lib/rex/zip/archive.rb, line 49
def set_comment(comment)
        @comment = comment
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.