Example #1
0
def main():
    usage = "%prog olefile sid"
    description = "\n".join([
        "Displays statistics about entries in an OLE compound file.",
        "",
        "If file is '-' then stdin is read."
        ])

    parser = OptionParser(
        usage=usage, description=description, version=VERSION_STR
    )

    (options, args) = parser.parse_args()

    if len(args) < 2:
        parser.error("Must specify both a file and stream identifier")
    # end if

    if args[0] == "-":
        cfb = CompoundFile(ByteIStream(sys.stdin.buffer.read()))
    else:
        cfb = CompoundFile(RawIStream(args[0]))
    # end if

    sid = int(args[1])

    last_sid = len(cfb.dir_entries)
    header_sid = last_sid + 0
    difat_sid = last_sid + 1
    fat_sid = last_sid + 2
    mini_fat_sid = last_sid + 3

    if sid in cfb.dir_entries:
        entry = cfb.dir_entries[sid]
        if cfb.is_valid_dir_entry(entry):
            output = format_entry(cfb, sid)
        else:
            print("Invalid sid {0}".format(sid), file=sys.stderr)
            sys.exit(-2)
        # end if
    elif sid == header_sid:
        output = format_header(cfb)
    elif sid == difat_sid:
        output = format_di_fat(cfb)
    elif sid == fat_sid:
        output = format_fat(cfb)
    elif sid == mini_fat_sid:
        output = format_mini_fat(cfb)
    else:
        print("Invalid sid {0}".format(sid), file=sys.stderr)
        sys.exit(-3)
    # end if

    print ("\n".join(output))
Example #2
0
def main():
    usage = "%prog [options] olefile [dir. entry #]"
    description = "\n".join([
        "Lists entries in an OLE compound file.",
        "",
        "If file is '-', then stdin is read.",
        "If a directory entry number is not specified, root is assumed."
    ])

    parser = OptionParser(
        usage=usage, description=description, version=VERSION_STR
    )

    parser.add_option(
        "-D",
        dest="only_dirs",
        action="store_true",
        help="Display only directories (storages)",
        default=False
    )

    parser.add_option(
        "-F",
        dest="only_files",
        action="store_true",
        help="Display only files (streams)",
        default=False
    )

    parser.add_option(
        "-l",
        dest="long_output",
        action="store_true",
        help="Display details in long format",
        default=False
    )

    parser.add_option(
        "-m",
        metavar="PATH",
        dest="mactime_filename",
        action="store",
        help="Display details in mactime format (prefixed by PATH)"
    )

    parser.add_option(
        "-p",
        dest="display_full_path",
        action="store_true",
        help="Display full path when recursing",
        default=False
    )

    parser.add_option(
        "-r",
        dest="recurse",
        action="store_true",
        help="Recurse into sub-directories",
        default=False
    )

    (options, args) = parser.parse_args()

    if options.only_dirs and options.only_files:
        parser.error("Can't specify both -D and -F")
    elif options.long_output and options.mactime_filename:
        parser.error("Can't specify both -l and -m")
    # end if

    if (len(args) < 1) or (len(args) > 2):
        parser.error("Invalid number of arguments")
        sys.exit(-1)
    # end if

    if args[0] == "-":
        cfb = CompoundFile(ByteIStream(sys.stdin.buffer.read()))
    else:
        cfb = CompoundFile(RawIStream(args[0]))
    # end if

    if len(args) == 1:
        start_sid = DEFAULT_START_SID
    else:
        start_sid = int(args[1])
    # end if

    if start_sid in cfb.dir_entries:
        entry = cfb.dir_entries[start_sid]
        if cfb.is_valid_dir_entry(entry):
            entries = enumerate_entries(cfb, start_sid, options)

            if options.mactime_filename:
                path = "".join([options.mactime_filename, "/"])
            else:
                path = ""
            # end if

            output = format_output(cfb, entries, options, path)
        else:
            print("Invalid directory {0}".format(start_sid), file=sys.stderr)
            sys.exit(-2)
        # end if
    else:
        print("Invalid directory {0}".format(start_sid), file=sys.stderr)
        sys.exit(-3)
    # end if

    print("\n".join(output))
Example #3
0
def main():
    usage = "%prog [options] olefile [dir. entry #]"
    description = "\n".join([
        "Lists entries in an OLE compound file.", "",
        "If file is '-', then stdin is read.",
        "If a directory entry number is not specified, root is assumed."
    ])

    parser = OptionParser(usage=usage,
                          description=description,
                          version=VERSION_STR)

    parser.add_option("-D",
                      dest="only_dirs",
                      action="store_true",
                      help="Display only directories (storages)",
                      default=False)

    parser.add_option("-F",
                      dest="only_files",
                      action="store_true",
                      help="Display only files (streams)",
                      default=False)

    parser.add_option("-l",
                      dest="long_output",
                      action="store_true",
                      help="Display details in long format",
                      default=False)

    parser.add_option(
        "-m",
        metavar="PATH",
        dest="mactime_filename",
        action="store",
        help="Display details in mactime format (prefixed by PATH)")

    parser.add_option("-p",
                      dest="display_full_path",
                      action="store_true",
                      help="Display full path when recursing",
                      default=False)

    parser.add_option("-r",
                      dest="recurse",
                      action="store_true",
                      help="Recurse into sub-directories",
                      default=False)

    (options, args) = parser.parse_args()

    if options.only_dirs and options.only_files:
        parser.error("Can't specify both -D and -F")
    elif options.long_output and options.mactime_filename:
        parser.error("Can't specify both -l and -m")
    # end if

    if (len(args) < 1) or (len(args) > 2):
        parser.error("Invalid number of arguments")
        sys.exit(-1)
    # end if

    if args[0] == "-":
        cfb = CompoundFile(ByteIStream(sys.stdin.buffer.read()))
    else:
        cfb = CompoundFile(RawIStream(args[0]))
    # end if

    if len(args) == 1:
        start_sid = DEFAULT_START_SID
    else:
        start_sid = int(args[1])
    # end if

    if start_sid in cfb.dir_entries:
        entry = cfb.dir_entries[start_sid]
        if cfb.is_valid_dir_entry(entry):
            entries = enumerate_entries(cfb, start_sid, options)

            if options.mactime_filename:
                path = "".join([options.mactime_filename, "/"])
            else:
                path = ""
            # end if

            output = format_output(cfb, entries, options, path)
        else:
            print("Invalid directory {0}".format(start_sid), file=sys.stderr)
            sys.exit(-2)
        # end if
    else:
        print("Invalid directory {0}".format(start_sid), file=sys.stderr)
        sys.exit(-3)
    # end if

    print("\n".join(output))