Changeset 111


Ignore:
Timestamp:
05/01/08 00:06:22 (16 years ago)
Author:
tim
Message:

Switched license to GPLv3

Added early version of new tool, reglookup-recover

Many library changes made to support this new tool

Location:
trunk
Files:
2 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/LICENSE

    r17 r111  
     1
    12                    GNU GENERAL PUBLIC LICENSE
    2                        Version 2, June 1991
    3 
    4  Copyright (C) 1989, 1991 Free Software Foundation, Inc.
    5                        59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     3                       Version 3, 29 June 2007
     4
     5 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
    66 Everyone is permitted to copy and distribute verbatim copies
    77 of this license document, but changing it is not allowed.
     
    99                            Preamble
    1010
    11   The licenses for most software are designed to take away your
    12 freedom to share and change it.  By contrast, the GNU General Public
    13 License is intended to guarantee your freedom to share and change free
    14 software--to make sure the software is free for all its users.  This
    15 General Public License applies to most of the Free Software
    16 Foundation's software and to any other program whose authors commit to
    17 using it.  (Some other Free Software Foundation software is covered by
    18 the GNU Library General Public License instead.)  You can apply it to
     11  The GNU General Public License is a free, copyleft license for
     12software and other kinds of works.
     13
     14  The licenses for most software and other practical works are designed
     15to take away your freedom to share and change the works.  By contrast,
     16the GNU General Public License is intended to guarantee your freedom to
     17share and change all versions of a program--to make sure it remains free
     18software for all its users.  We, the Free Software Foundation, use the
     19GNU General Public License for most of our software; it applies also to
     20any other work released this way by its authors.  You can apply it to
    1921your programs, too.
    2022
     
    2224price.  Our General Public Licenses are designed to make sure that you
    2325have the freedom to distribute copies of free software (and charge for
    24 this service if you wish), that you receive source code or can get it
    25 if you want it, that you can change the software or use pieces of it
    26 in new free programs; and that you know you can do these things.
    27 
    28   To protect your rights, we need to make restrictions that forbid
    29 anyone to deny you these rights or to ask you to surrender the rights.
    30 These restrictions translate to certain responsibilities for you if you
    31 distribute copies of the software, or if you modify it.
     26them if you wish), that you receive source code or can get it if you
     27want it, that you can change the software or use pieces of it in new
     28free programs, and that you know you can do these things.
     29
     30  To protect your rights, we need to prevent others from denying you
     31these rights or asking you to surrender the rights.  Therefore, you have
     32certain responsibilities if you distribute copies of the software, or if
     33you modify it: responsibilities to respect the freedom of others.
    3234
    3335  For example, if you distribute copies of such a program, whether
    34 gratis or for a fee, you must give the recipients all the rights that
    35 you have.  You must make sure that they, too, receive or can get the
    36 source code.  And you must show them these terms so they know their
    37 rights.
    38 
    39   We protect your rights with two steps: (1) copyright the software, and
    40 (2) offer you this license which gives you legal permission to copy,
    41 distribute and/or modify the software.
    42 
    43   Also, for each author's protection and ours, we want to make certain
    44 that everyone understands that there is no warranty for this free
    45 software.  If the software is modified by someone else and passed on, we
    46 want its recipients to know that what they have is not the original, so
    47 that any problems introduced by others will not reflect on the original
    48 authors' reputations.
    49 
    50   Finally, any free program is threatened constantly by software
    51 patents.  We wish to avoid the danger that redistributors of a free
    52 program will individually obtain patent licenses, in effect making the
    53 program proprietary.  To prevent this, we have made it clear that any
    54 patent must be licensed for everyone's free use or not licensed at all.
     36gratis or for a fee, you must pass on to the recipients the same
     37freedoms that you received.  You must make sure that they, too, receive
     38or can get the source code.  And you must show them these terms so they
     39know their rights.
     40
     41  Developers that use the GNU GPL protect your rights with two steps:
     42(1) assert copyright on the software, and (2) offer you this License
     43giving you legal permission to copy, distribute and/or modify it.
     44
     45  For the developers' and authors' protection, the GPL clearly explains
     46that there is no warranty for this free software.  For both users' and
     47authors' sake, the GPL requires that modified versions be marked as
     48changed, so that their problems will not be attributed erroneously to
     49authors of previous versions.
     50
     51  Some devices are designed to deny users access to install or run
     52modified versions of the software inside them, although the manufacturer
     53can do so.  This is fundamentally incompatible with the aim of
     54protecting users' freedom to change the software.  The systematic
     55pattern of such abuse occurs in the area of products for individuals to
     56use, which is precisely where it is most unacceptable.  Therefore, we
     57have designed this version of the GPL to prohibit the practice for those
     58products.  If such problems arise substantially in other domains, we
     59stand ready to extend this provision to those domains in future versions
     60of the GPL, as needed to protect the freedom of users.
     61
     62  Finally, every program is threatened constantly by software patents.
     63States should not allow patents to restrict development and use of
     64software on general-purpose computers, but in those that do, we wish to
     65avoid the special danger that patents applied to a free program could
     66make it effectively proprietary.  To prevent this, the GPL assures that
     67patents cannot be used to render the program non-free.
    5568
    5669  The precise terms and conditions for copying, distribution and
    5770modification follow.
    5871
    59 
    60                     GNU GENERAL PUBLIC LICENSE
    61    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    62 
    63   0. This License applies to any program or other work which contains
    64 a notice placed by the copyright holder saying it may be distributed
    65 under the terms of this General Public License.  The "Program", below,
    66 refers to any such program or work, and a "work based on the Program"
    67 means either the Program or any derivative work under copyright law:
    68 that is to say, a work containing the Program or a portion of it,
    69 either verbatim or with modifications and/or translated into another
    70 language.  (Hereinafter, translation is included without limitation in
    71 the term "modification".)  Each licensee is addressed as "you".
    72 
    73 Activities other than copying, distribution and modification are not
    74 covered by this License; they are outside its scope.  The act of
    75 running the Program is not restricted, and the output from the Program
    76 is covered only if its contents constitute a work based on the
    77 Program (independent of having been made by running the Program).
    78 Whether that is true depends on what the Program does.
    79 
    80   1. You may copy and distribute verbatim copies of the Program's
    81 source code as you receive it, in any medium, provided that you
    82 conspicuously and appropriately publish on each copy an appropriate
    83 copyright notice and disclaimer of warranty; keep intact all the
    84 notices that refer to this License and to the absence of any warranty;
    85 and give any other recipients of the Program a copy of this License
    86 along with the Program.
    87 
    88 You may charge a fee for the physical act of transferring a copy, and
    89 you may at your option offer warranty protection in exchange for a fee.
    90 
    91   2. You may modify your copy or copies of the Program or any portion
    92 of it, thus forming a work based on the Program, and copy and
    93 distribute such modifications or work under the terms of Section 1
    94 above, provided that you also meet all of these conditions:
    95 
    96     a) You must cause the modified files to carry prominent notices
    97     stating that you changed the files and the date of any change.
    98 
    99     b) You must cause any work that you distribute or publish, that in
    100     whole or in part contains or is derived from the Program or any
    101     part thereof, to be licensed as a whole at no charge to all third
    102     parties under the terms of this License.
    103 
    104     c) If the modified program normally reads commands interactively
    105     when run, you must cause it, when started running for such
    106     interactive use in the most ordinary way, to print or display an
    107     announcement including an appropriate copyright notice and a
    108     notice that there is no warranty (or else, saying that you provide
    109     a warranty) and that users may redistribute the program under
    110     these conditions, and telling the user how to view a copy of this
    111     License.  (Exception: if the Program itself is interactive but
    112     does not normally print such an announcement, your work based on
    113     the Program is not required to print an announcement.)
    114 
    115 
    116 These requirements apply to the modified work as a whole.  If
    117 identifiable sections of that work are not derived from the Program,
    118 and can be reasonably considered independent and separate works in
    119 themselves, then this License, and its terms, do not apply to those
    120 sections when you distribute them as separate works.  But when you
    121 distribute the same sections as part of a whole which is a work based
    122 on the Program, the distribution of the whole must be on the terms of
    123 this License, whose permissions for other licensees extend to the
    124 entire whole, and thus to each and every part regardless of who wrote it.
    125 
    126 Thus, it is not the intent of this section to claim rights or contest
    127 your rights to work written entirely by you; rather, the intent is to
    128 exercise the right to control the distribution of derivative or
    129 collective works based on the Program.
    130 
    131 In addition, mere aggregation of another work not based on the Program
    132 with the Program (or with a work based on the Program) on a volume of
    133 a storage or distribution medium does not bring the other work under
    134 the scope of this License.
    135 
    136   3. You may copy and distribute the Program (or a work based on it,
    137 under Section 2) in object code or executable form under the terms of
    138 Sections 1 and 2 above provided that you also do one of the following:
    139 
    140     a) Accompany it with the complete corresponding machine-readable
    141     source code, which must be distributed under the terms of Sections
    142     1 and 2 above on a medium customarily used for software interchange; or,
    143 
    144     b) Accompany it with a written offer, valid for at least three
    145     years, to give any third party, for a charge no more than your
    146     cost of physically performing source distribution, a complete
    147     machine-readable copy of the corresponding source code, to be
    148     distributed under the terms of Sections 1 and 2 above on a medium
    149     customarily used for software interchange; or,
    150 
    151     c) Accompany it with the information you received as to the offer
    152     to distribute corresponding source code.  (This alternative is
    153     allowed only for noncommercial distribution and only if you
    154     received the program in object code or executable form with such
    155     an offer, in accord with Subsection b above.)
    156 
    157 The source code for a work means the preferred form of the work for
    158 making modifications to it.  For an executable work, complete source
    159 code means all the source code for all modules it contains, plus any
    160 associated interface definition files, plus the scripts used to
    161 control compilation and installation of the executable.  However, as a
    162 special exception, the source code distributed need not include
    163 anything that is normally distributed (in either source or binary
    164 form) with the major components (compiler, kernel, and so on) of the
    165 operating system on which the executable runs, unless that component
    166 itself accompanies the executable.
    167 
    168 If distribution of executable or object code is made by offering
    169 access to copy from a designated place, then offering equivalent
    170 access to copy the source code from the same place counts as
    171 distribution of the source code, even though third parties are not
    172 compelled to copy the source along with the object code.
    173 
    174 
    175   4. You may not copy, modify, sublicense, or distribute the Program
    176 except as expressly provided under this License.  Any attempt
    177 otherwise to copy, modify, sublicense or distribute the Program is
    178 void, and will automatically terminate your rights under this License.
    179 However, parties who have received copies, or rights, from you under
    180 this License will not have their licenses terminated so long as such
    181 parties remain in full compliance.
    182 
    183   5. You are not required to accept this License, since you have not
    184 signed it.  However, nothing else grants you permission to modify or
    185 distribute the Program or its derivative works.  These actions are
    186 prohibited by law if you do not accept this License.  Therefore, by
    187 modifying or distributing the Program (or any work based on the
    188 Program), you indicate your acceptance of this License to do so, and
    189 all its terms and conditions for copying, distributing or modifying
    190 the Program or works based on it.
    191 
    192   6. Each time you redistribute the Program (or any work based on the
    193 Program), the recipient automatically receives a license from the
    194 original licensor to copy, distribute or modify the Program subject to
    195 these terms and conditions.  You may not impose any further
    196 restrictions on the recipients' exercise of the rights granted herein.
    197 You are not responsible for enforcing compliance by third parties to
     72                       TERMS AND CONDITIONS
     73
     74  0. Definitions.
     75
     76  "This License" refers to version 3 of the GNU General Public License.
     77
     78  "Copyright" also means copyright-like laws that apply to other kinds of
     79works, such as semiconductor masks.
     80 
     81  "The Program" refers to any copyrightable work licensed under this
     82License.  Each licensee is addressed as "you".  "Licensees" and
     83"recipients" may be individuals or organizations.
     84
     85  To "modify" a work means to copy from or adapt all or part of the work
     86in a fashion requiring copyright permission, other than the making of an
     87exact copy.  The resulting work is called a "modified version" of the
     88earlier work or a work "based on" the earlier work.
     89
     90  A "covered work" means either the unmodified Program or a work based
     91on the Program.
     92
     93  To "propagate" a work means to do anything with it that, without
     94permission, would make you directly or secondarily liable for
     95infringement under applicable copyright law, except executing it on a
     96computer or modifying a private copy.  Propagation includes copying,
     97distribution (with or without modification), making available to the
     98public, and in some countries other activities as well.
     99
     100  To "convey" a work means any kind of propagation that enables other
     101parties to make or receive copies.  Mere interaction with a user through
     102a computer network, with no transfer of a copy, is not conveying.
     103
     104  An interactive user interface displays "Appropriate Legal Notices"
     105to the extent that it includes a convenient and prominently visible
     106feature that (1) displays an appropriate copyright notice, and (2)
     107tells the user that there is no warranty for the work (except to the
     108extent that warranties are provided), that licensees may convey the
     109work under this License, and how to view a copy of this License.  If
     110the interface presents a list of user commands or options, such as a
     111menu, a prominent item in the list meets this criterion.
     112
     113  1. Source Code.
     114
     115  The "source code" for a work means the preferred form of the work
     116for making modifications to it.  "Object code" means any non-source
     117form of a work.
     118
     119  A "Standard Interface" means an interface that either is an official
     120standard defined by a recognized standards body, or, in the case of
     121interfaces specified for a particular programming language, one that
     122is widely used among developers working in that language.
     123
     124  The "System Libraries" of an executable work include anything, other
     125than the work as a whole, that (a) is included in the normal form of
     126packaging a Major Component, but which is not part of that Major
     127Component, and (b) serves only to enable use of the work with that
     128Major Component, or to implement a Standard Interface for which an
     129implementation is available to the public in source code form.  A
     130"Major Component", in this context, means a major essential component
     131(kernel, window system, and so on) of the specific operating system
     132(if any) on which the executable work runs, or a compiler used to
     133produce the work, or an object code interpreter used to run it.
     134
     135  The "Corresponding Source" for a work in object code form means all
     136the source code needed to generate, install, and (for an executable
     137work) run the object code and to modify the work, including scripts to
     138control those activities.  However, it does not include the work's
     139System Libraries, or general-purpose tools or generally available free
     140programs which are used unmodified in performing those activities but
     141which are not part of the work.  For example, Corresponding Source
     142includes interface definition files associated with source files for
     143the work, and the source code for shared libraries and dynamically
     144linked subprograms that the work is specifically designed to require,
     145such as by intimate data communication or control flow between those
     146subprograms and other parts of the work.
     147
     148  The Corresponding Source need not include anything that users
     149can regenerate automatically from other parts of the Corresponding
     150Source.
     151
     152  The Corresponding Source for a work in source code form is that
     153same work.
     154
     155  2. Basic Permissions.
     156
     157  All rights granted under this License are granted for the term of
     158copyright on the Program, and are irrevocable provided the stated
     159conditions are met.  This License explicitly affirms your unlimited
     160permission to run the unmodified Program.  The output from running a
     161covered work is covered by this License only if the output, given its
     162content, constitutes a covered work.  This License acknowledges your
     163rights of fair use or other equivalent, as provided by copyright law.
     164
     165  You may make, run and propagate covered works that you do not
     166convey, without conditions so long as your license otherwise remains
     167in force.  You may convey covered works to others for the sole purpose
     168of having them make modifications exclusively for you, or provide you
     169with facilities for running those works, provided that you comply with
     170the terms of this License in conveying all material for which you do
     171not control copyright.  Those thus making or running the covered works
     172for you must do so exclusively on your behalf, under your direction
     173and control, on terms that prohibit them from making any copies of
     174your copyrighted material outside their relationship with you.
     175
     176  Conveying under any other circumstances is permitted solely under
     177the conditions stated below.  Sublicensing is not allowed; section 10
     178makes it unnecessary.
     179
     180  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
     181
     182  No covered work shall be deemed part of an effective technological
     183measure under any applicable law fulfilling obligations under article
     18411 of the WIPO copyright treaty adopted on 20 December 1996, or
     185similar laws prohibiting or restricting circumvention of such
     186measures.
     187
     188  When you convey a covered work, you waive any legal power to forbid
     189circumvention of technological measures to the extent such circumvention
     190is effected by exercising rights under this License with respect to
     191the covered work, and you disclaim any intention to limit operation or
     192modification of the work as a means of enforcing, against the work's
     193users, your or third parties' legal rights to forbid circumvention of
     194technological measures.
     195
     196  4. Conveying Verbatim Copies.
     197
     198  You may convey verbatim copies of the Program's source code as you
     199receive it, in any medium, provided that you conspicuously and
     200appropriately publish on each copy an appropriate copyright notice;
     201keep intact all notices stating that this License and any
     202non-permissive terms added in accord with section 7 apply to the code;
     203keep intact all notices of the absence of any warranty; and give all
     204recipients a copy of this License along with the Program.
     205
     206  You may charge any price or no price for each copy that you convey,
     207and you may offer support or warranty protection for a fee.
     208
     209  5. Conveying Modified Source Versions.
     210
     211  You may convey a work based on the Program, or the modifications to
     212produce it from the Program, in the form of source code under the
     213terms of section 4, provided that you also meet all of these conditions:
     214
     215    a) The work must carry prominent notices stating that you modified
     216    it, and giving a relevant date.
     217
     218    b) The work must carry prominent notices stating that it is
     219    released under this License and any conditions added under section
     220    7.  This requirement modifies the requirement in section 4 to
     221    "keep intact all notices".
     222
     223    c) You must license the entire work, as a whole, under this
     224    License to anyone who comes into possession of a copy.  This
     225    License will therefore apply, along with any applicable section 7
     226    additional terms, to the whole of the work, and all its parts,
     227    regardless of how they are packaged.  This License gives no
     228    permission to license the work in any other way, but it does not
     229    invalidate such permission if you have separately received it.
     230
     231    d) If the work has interactive user interfaces, each must display
     232    Appropriate Legal Notices; however, if the Program has interactive
     233    interfaces that do not display Appropriate Legal Notices, your
     234    work need not make them do so.
     235
     236  A compilation of a covered work with other separate and independent
     237works, which are not by their nature extensions of the covered work,
     238and which are not combined with it such as to form a larger program,
     239in or on a volume of a storage or distribution medium, is called an
     240"aggregate" if the compilation and its resulting copyright are not
     241used to limit the access or legal rights of the compilation's users
     242beyond what the individual works permit.  Inclusion of a covered work
     243in an aggregate does not cause this License to apply to the other
     244parts of the aggregate.
     245
     246  6. Conveying Non-Source Forms.
     247
     248  You may convey a covered work in object code form under the terms
     249of sections 4 and 5, provided that you also convey the
     250machine-readable Corresponding Source under the terms of this License,
     251in one of these ways:
     252
     253    a) Convey the object code in, or embodied in, a physical product
     254    (including a physical distribution medium), accompanied by the
     255    Corresponding Source fixed on a durable physical medium
     256    customarily used for software interchange.
     257
     258    b) Convey the object code in, or embodied in, a physical product
     259    (including a physical distribution medium), accompanied by a
     260    written offer, valid for at least three years and valid for as
     261    long as you offer spare parts or customer support for that product
     262    model, to give anyone who possesses the object code either (1) a
     263    copy of the Corresponding Source for all the software in the
     264    product that is covered by this License, on a durable physical
     265    medium customarily used for software interchange, for a price no
     266    more than your reasonable cost of physically performing this
     267    conveying of source, or (2) access to copy the
     268    Corresponding Source from a network server at no charge.
     269
     270    c) Convey individual copies of the object code with a copy of the
     271    written offer to provide the Corresponding Source.  This
     272    alternative is allowed only occasionally and noncommercially, and
     273    only if you received the object code with such an offer, in accord
     274    with subsection 6b.
     275
     276    d) Convey the object code by offering access from a designated
     277    place (gratis or for a charge), and offer equivalent access to the
     278    Corresponding Source in the same way through the same place at no
     279    further charge.  You need not require recipients to copy the
     280    Corresponding Source along with the object code.  If the place to
     281    copy the object code is a network server, the Corresponding Source
     282    may be on a different server (operated by you or a third party)
     283    that supports equivalent copying facilities, provided you maintain
     284    clear directions next to the object code saying where to find the
     285    Corresponding Source.  Regardless of what server hosts the
     286    Corresponding Source, you remain obligated to ensure that it is
     287    available for as long as needed to satisfy these requirements.
     288
     289    e) Convey the object code using peer-to-peer transmission, provided
     290    you inform other peers where the object code and Corresponding
     291    Source of the work are being offered to the general public at no
     292    charge under subsection 6d.
     293
     294  A separable portion of the object code, whose source code is excluded
     295from the Corresponding Source as a System Library, need not be
     296included in conveying the object code work.
     297
     298  A "User Product" is either (1) a "consumer product", which means any
     299tangible personal property which is normally used for personal, family,
     300or household purposes, or (2) anything designed or sold for incorporation
     301into a dwelling.  In determining whether a product is a consumer product,
     302doubtful cases shall be resolved in favor of coverage.  For a particular
     303product received by a particular user, "normally used" refers to a
     304typical or common use of that class of product, regardless of the status
     305of the particular user or of the way in which the particular user
     306actually uses, or expects or is expected to use, the product.  A product
     307is a consumer product regardless of whether the product has substantial
     308commercial, industrial or non-consumer uses, unless such uses represent
     309the only significant mode of use of the product.
     310
     311  "Installation Information" for a User Product means any methods,
     312procedures, authorization keys, or other information required to install
     313and execute modified versions of a covered work in that User Product from
     314a modified version of its Corresponding Source.  The information must
     315suffice to ensure that the continued functioning of the modified object
     316code is in no case prevented or interfered with solely because
     317modification has been made.
     318
     319  If you convey an object code work under this section in, or with, or
     320specifically for use in, a User Product, and the conveying occurs as
     321part of a transaction in which the right of possession and use of the
     322User Product is transferred to the recipient in perpetuity or for a
     323fixed term (regardless of how the transaction is characterized), the
     324Corresponding Source conveyed under this section must be accompanied
     325by the Installation Information.  But this requirement does not apply
     326if neither you nor any third party retains the ability to install
     327modified object code on the User Product (for example, the work has
     328been installed in ROM).
     329
     330  The requirement to provide Installation Information does not include a
     331requirement to continue to provide support service, warranty, or updates
     332for a work that has been modified or installed by the recipient, or for
     333the User Product in which it has been modified or installed.  Access to a
     334network may be denied when the modification itself materially and
     335adversely affects the operation of the network or violates the rules and
     336protocols for communication across the network.
     337
     338  Corresponding Source conveyed, and Installation Information provided,
     339in accord with this section must be in a format that is publicly
     340documented (and with an implementation available to the public in
     341source code form), and must require no special password or key for
     342unpacking, reading or copying.
     343
     344  7. Additional Terms.
     345
     346  "Additional permissions" are terms that supplement the terms of this
     347License by making exceptions from one or more of its conditions.
     348Additional permissions that are applicable to the entire Program shall
     349be treated as though they were included in this License, to the extent
     350that they are valid under applicable law.  If additional permissions
     351apply only to part of the Program, that part may be used separately
     352under those permissions, but the entire Program remains governed by
     353this License without regard to the additional permissions.
     354
     355  When you convey a copy of a covered work, you may at your option
     356remove any additional permissions from that copy, or from any part of
     357it.  (Additional permissions may be written to require their own
     358removal in certain cases when you modify the work.)  You may place
     359additional permissions on material, added by you to a covered work,
     360for which you have or can give appropriate copyright permission.
     361
     362  Notwithstanding any other provision of this License, for material you
     363add to a covered work, you may (if authorized by the copyright holders of
     364that material) supplement the terms of this License with terms:
     365
     366    a) Disclaiming warranty or limiting liability differently from the
     367    terms of sections 15 and 16 of this License; or
     368
     369    b) Requiring preservation of specified reasonable legal notices or
     370    author attributions in that material or in the Appropriate Legal
     371    Notices displayed by works containing it; or
     372
     373    c) Prohibiting misrepresentation of the origin of that material, or
     374    requiring that modified versions of such material be marked in
     375    reasonable ways as different from the original version; or
     376
     377    d) Limiting the use for publicity purposes of names of licensors or
     378    authors of the material; or
     379
     380    e) Declining to grant rights under trademark law for use of some
     381    trade names, trademarks, or service marks; or
     382
     383    f) Requiring indemnification of licensors and authors of that
     384    material by anyone who conveys the material (or modified versions of
     385    it) with contractual assumptions of liability to the recipient, for
     386    any liability that these contractual assumptions directly impose on
     387    those licensors and authors.
     388
     389  All other non-permissive additional terms are considered "further
     390restrictions" within the meaning of section 10.  If the Program as you
     391received it, or any part of it, contains a notice stating that it is
     392governed by this License along with a term that is a further
     393restriction, you may remove that term.  If a license document contains
     394a further restriction but permits relicensing or conveying under this
     395License, you may add to a covered work material governed by the terms
     396of that license document, provided that the further restriction does
     397not survive such relicensing or conveying.
     398
     399  If you add terms to a covered work in accord with this section, you
     400must place, in the relevant source files, a statement of the
     401additional terms that apply to those files, or a notice indicating
     402where to find the applicable terms.
     403
     404  Additional terms, permissive or non-permissive, may be stated in the
     405form of a separately written license, or stated as exceptions;
     406the above requirements apply either way.
     407
     408  8. Termination.
     409
     410  You may not propagate or modify a covered work except as expressly
     411provided under this License.  Any attempt otherwise to propagate or
     412modify it is void, and will automatically terminate your rights under
     413this License (including any patent licenses granted under the third
     414paragraph of section 11).
     415
     416  However, if you cease all violation of this License, then your
     417license from a particular copyright holder is reinstated (a)
     418provisionally, unless and until the copyright holder explicitly and
     419finally terminates your license, and (b) permanently, if the copyright
     420holder fails to notify you of the violation by some reasonable means
     421prior to 60 days after the cessation.
     422
     423  Moreover, your license from a particular copyright holder is
     424reinstated permanently if the copyright holder notifies you of the
     425violation by some reasonable means, this is the first time you have
     426received notice of violation of this License (for any work) from that
     427copyright holder, and you cure the violation prior to 30 days after
     428your receipt of the notice.
     429
     430  Termination of your rights under this section does not terminate the
     431licenses of parties who have received copies or rights from you under
     432this License.  If your rights have been terminated and not permanently
     433reinstated, you do not qualify to receive new licenses for the same
     434material under section 10.
     435
     436  9. Acceptance Not Required for Having Copies.
     437
     438  You are not required to accept this License in order to receive or
     439run a copy of the Program.  Ancillary propagation of a covered work
     440occurring solely as a consequence of using peer-to-peer transmission
     441to receive a copy likewise does not require acceptance.  However,
     442nothing other than this License grants you permission to propagate or
     443modify any covered work.  These actions infringe copyright if you do
     444not accept this License.  Therefore, by modifying or propagating a
     445covered work, you indicate your acceptance of this License to do so.
     446
     447  10. Automatic Licensing of Downstream Recipients.
     448
     449  Each time you convey a covered work, the recipient automatically
     450receives a license from the original licensors, to run, modify and
     451propagate that work, subject to this License.  You are not responsible
     452for enforcing compliance by third parties with this License.
     453
     454  An "entity transaction" is a transaction transferring control of an
     455organization, or substantially all assets of one, or subdividing an
     456organization, or merging organizations.  If propagation of a covered
     457work results from an entity transaction, each party to that
     458transaction who receives a copy of the work also receives whatever
     459licenses to the work the party's predecessor in interest had or could
     460give under the previous paragraph, plus a right to possession of the
     461Corresponding Source of the work from the predecessor in interest, if
     462the predecessor has it or can get it with reasonable efforts.
     463
     464  You may not impose any further restrictions on the exercise of the
     465rights granted or affirmed under this License.  For example, you may
     466not impose a license fee, royalty, or other charge for exercise of
     467rights granted under this License, and you may not initiate litigation
     468(including a cross-claim or counterclaim in a lawsuit) alleging that
     469any patent claim is infringed by making, using, selling, offering for
     470sale, or importing the Program or any portion of it.
     471
     472  11. Patents.
     473
     474  A "contributor" is a copyright holder who authorizes use under this
     475License of the Program or a work on which the Program is based.  The
     476work thus licensed is called the contributor's "contributor version".
     477
     478  A contributor's "essential patent claims" are all patent claims
     479owned or controlled by the contributor, whether already acquired or
     480hereafter acquired, that would be infringed by some manner, permitted
     481by this License, of making, using, or selling its contributor version,
     482but do not include claims that would be infringed only as a
     483consequence of further modification of the contributor version.  For
     484purposes of this definition, "control" includes the right to grant
     485patent sublicenses in a manner consistent with the requirements of
    198486this License.
    199487
    200   7. If, as a consequence of a court judgment or allegation of patent
    201 infringement or for any other reason (not limited to patent issues),
    202 conditions are imposed on you (whether by court order, agreement or
     488  Each contributor grants you a non-exclusive, worldwide, royalty-free
     489patent license under the contributor's essential patent claims, to
     490make, use, sell, offer for sale, import and otherwise run, modify and
     491propagate the contents of its contributor version.
     492
     493  In the following three paragraphs, a "patent license" is any express
     494agreement or commitment, however denominated, not to enforce a patent
     495(such as an express permission to practice a patent or covenant not to
     496sue for patent infringement).  To "grant" such a patent license to a
     497party means to make such an agreement or commitment not to enforce a
     498patent against the party.
     499
     500  If you convey a covered work, knowingly relying on a patent license,
     501and the Corresponding Source of the work is not available for anyone
     502to copy, free of charge and under the terms of this License, through a
     503publicly available network server or other readily accessible means,
     504then you must either (1) cause the Corresponding Source to be so
     505available, or (2) arrange to deprive yourself of the benefit of the
     506patent license for this particular work, or (3) arrange, in a manner
     507consistent with the requirements of this License, to extend the patent
     508license to downstream recipients.  "Knowingly relying" means you have
     509actual knowledge that, but for the patent license, your conveying the
     510covered work in a country, or your recipient's use of the covered work
     511in a country, would infringe one or more identifiable patents in that
     512country that you have reason to believe are valid.
     513 
     514  If, pursuant to or in connection with a single transaction or
     515arrangement, you convey, or propagate by procuring conveyance of, a
     516covered work, and grant a patent license to some of the parties
     517receiving the covered work authorizing them to use, propagate, modify
     518or convey a specific copy of the covered work, then the patent license
     519you grant is automatically extended to all recipients of the covered
     520work and works based on it.
     521
     522  A patent license is "discriminatory" if it does not include within
     523the scope of its coverage, prohibits the exercise of, or is
     524conditioned on the non-exercise of one or more of the rights that are
     525specifically granted under this License.  You may not convey a covered
     526work if you are a party to an arrangement with a third party that is
     527in the business of distributing software, under which you make payment
     528to the third party based on the extent of your activity of conveying
     529the work, and under which the third party grants, to any of the
     530parties who would receive the covered work from you, a discriminatory
     531patent license (a) in connection with copies of the covered work
     532conveyed by you (or copies made from those copies), or (b) primarily
     533for and in connection with specific products or compilations that
     534contain the covered work, unless you entered into that arrangement,
     535or that patent license was granted, prior to 28 March 2007.
     536
     537  Nothing in this License shall be construed as excluding or limiting
     538any implied license or other defenses to infringement that may
     539otherwise be available to you under applicable patent law.
     540
     541  12. No Surrender of Others' Freedom.
     542
     543  If conditions are imposed on you (whether by court order, agreement or
    203544otherwise) that contradict the conditions of this License, they do not
    204 excuse you from the conditions of this License.  If you cannot
    205 distribute so as to satisfy simultaneously your obligations under this
    206 License and any other pertinent obligations, then as a consequence you
    207 may not distribute the Program at all.  For example, if a patent
    208 license would not permit royalty-free redistribution of the Program by
    209 all those who receive copies directly or indirectly through you, then
    210 the only way you could satisfy both it and this License would be to
    211 refrain entirely from distribution of the Program.
    212 
    213 If any portion of this section is held invalid or unenforceable under
    214 any particular circumstance, the balance of the section is intended to
    215 apply and the section as a whole is intended to apply in other
    216 circumstances.
    217 
    218 It is not the purpose of this section to induce you to infringe any
    219 patents or other property right claims or to contest validity of any
    220 such claims; this section has the sole purpose of protecting the
    221 integrity of the free software distribution system, which is
    222 implemented by public license practices.  Many people have made
    223 generous contributions to the wide range of software distributed
    224 through that system in reliance on consistent application of that
    225 system; it is up to the author/donor to decide if he or she is willing
    226 to distribute software through any other system and a licensee cannot
    227 impose that choice.
    228 
    229 This section is intended to make thoroughly clear what is believed to
    230 be a consequence of the rest of this License.
    231 
    232 
    233   8. If the distribution and/or use of the Program is restricted in
    234 certain countries either by patents or by copyrighted interfaces, the
    235 original copyright holder who places the Program under this License
    236 may add an explicit geographical distribution limitation excluding
    237 those countries, so that distribution is permitted only in or among
    238 countries not thus excluded.  In such case, this License incorporates
    239 the limitation as if written in the body of this License.
    240 
    241   9. The Free Software Foundation may publish revised and/or new versions
    242 of the General Public License from time to time.  Such new versions will
     545excuse you from the conditions of this License.  If you cannot convey a
     546covered work so as to satisfy simultaneously your obligations under this
     547License and any other pertinent obligations, then as a consequence you may
     548not convey it at all.  For example, if you agree to terms that obligate you
     549to collect a royalty for further conveying from those to whom you convey
     550the Program, the only way you could satisfy both those terms and this
     551License would be to refrain entirely from conveying the Program.
     552
     553  13. Use with the GNU Affero General Public License.
     554
     555  Notwithstanding any other provision of this License, you have
     556permission to link or combine any covered work with a work licensed
     557under version 3 of the GNU Affero General Public License into a single
     558combined work, and to convey the resulting work.  The terms of this
     559License will continue to apply to the part which is the covered work,
     560but the special requirements of the GNU Affero General Public License,
     561section 13, concerning interaction through a network will apply to the
     562combination as such.
     563
     564  14. Revised Versions of this License.
     565
     566  The Free Software Foundation may publish revised and/or new versions of
     567the GNU General Public License from time to time.  Such new versions will
    243568be similar in spirit to the present version, but may differ in detail to
    244569address new problems or concerns.
    245570
    246 Each version is given a distinguishing version number.  If the Program
    247 specifies a version number of this License which applies to it and "any
    248 later version", you have the option of following the terms and conditions
    249 either of that version or of any later version published by the Free
    250 Software Foundation.  If the Program does not specify a version number of
    251 this License, you may choose any version ever published by the Free Software
    252 Foundation.
    253 
    254   10. If you wish to incorporate parts of the Program into other free
    255 programs whose distribution conditions are different, write to the author
    256 to ask for permission.  For software which is copyrighted by the Free
    257 Software Foundation, write to the Free Software Foundation; we sometimes
    258 make exceptions for this.  Our decision will be guided by the two goals
    259 of preserving the free status of all derivatives of our free software and
    260 of promoting the sharing and reuse of software generally.
    261 
    262                             NO WARRANTY
    263 
    264   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    265 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
    266 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    267 PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    268 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    269 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
    270 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
    271 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    272 REPAIR OR CORRECTION.
    273 
    274   12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    275 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    276 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    277 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    278 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    279 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    280 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    281 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    282 POSSIBILITY OF SUCH DAMAGES.
     571  Each version is given a distinguishing version number.  If the
     572Program specifies that a certain numbered version of the GNU General
     573Public License "or any later version" applies to it, you have the
     574option of following the terms and conditions either of that numbered
     575version or of any later version published by the Free Software
     576Foundation.  If the Program does not specify a version number of the
     577GNU General Public License, you may choose any version ever published
     578by the Free Software Foundation.
     579
     580  If the Program specifies that a proxy can decide which future
     581versions of the GNU General Public License can be used, that proxy's
     582public statement of acceptance of a version permanently authorizes you
     583to choose that version for the Program.
     584
     585  Later license versions may give you additional or different
     586permissions.  However, no additional obligations are imposed on any
     587author or copyright holder as a result of your choosing to follow a
     588later version.
     589
     590  15. Disclaimer of Warranty.
     591
     592  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
     593APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
     594HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
     595OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
     596THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     597PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
     598IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
     599ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
     600
     601  16. Limitation of Liability.
     602
     603  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
     604WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
     605THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
     606GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
     607USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
     608DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
     609PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
     610EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
     611SUCH DAMAGES.
     612
     613  17. Interpretation of Sections 15 and 16.
     614
     615  If the disclaimer of warranty and limitation of liability provided
     616above cannot be given local legal effect according to their terms,
     617reviewing courts shall apply local law that most closely approximates
     618an absolute waiver of all civil liability in connection with the
     619Program, unless a warranty or assumption of liability accompanies a
     620copy of the Program in return for a fee.
    283621
    284622                     END OF TERMS AND CONDITIONS
     623
     624            How to Apply These Terms to Your New Programs
     625
     626  If you develop a new program, and you want it to be of the greatest
     627possible use to the public, the best way to achieve this is to make it
     628free software which everyone can redistribute and change under these terms.
     629
     630  To do so, attach the following notices to the program.  It is safest
     631to attach them to the start of each source file to most effectively
     632state the exclusion of warranty; and each file should have at least
     633the "copyright" line and a pointer to where the full notice is found.
     634
     635    <one line to give the program's name and a brief idea of what it does.>
     636    Copyright (C) <year>  <name of author>
     637
     638    This program is free software: you can redistribute it and/or modify
     639    it under the terms of the GNU General Public License as published by
     640    the Free Software Foundation, either version 3 of the License, or
     641    (at your option) any later version.
     642
     643    This program is distributed in the hope that it will be useful,
     644    but WITHOUT ANY WARRANTY; without even the implied warranty of
     645    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     646    GNU General Public License for more details.
     647
     648    You should have received a copy of the GNU General Public License
     649    along with this program.  If not, see <http://www.gnu.org/licenses/>.
     650
     651Also add information on how to contact you by electronic and paper mail.
     652
     653  If the program does terminal interaction, make it output a short
     654notice like this when it starts in an interactive mode:
     655
     656    <program>  Copyright (C) <year>  <name of author>
     657    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
     658    This is free software, and you are welcome to redistribute it
     659    under certain conditions; type `show c' for details.
     660
     661The hypothetical commands `show w' and `show c' should show the appropriate
     662parts of the General Public License.  Of course, your program's commands
     663might be different; for a GUI interface, you would use an "about box".
     664
     665  You should also get your employer (if you work as a programmer) or school,
     666if any, to sign a "copyright disclaimer" for the program, if necessary.
     667For more information on this, and how to apply and follow the GNU GPL, see
     668<http://www.gnu.org/licenses/>.
     669
     670  The GNU General Public License does not permit incorporating your program
     671into proprietary programs.  If your program is a subroutine library, you
     672may consider it more useful to permit linking proprietary applications with
     673the library.  If this is what you want to do, use the GNU Lesser General
     674Public License instead of this License.  But first, please read
     675<http://www.gnu.org/philosophy/why-not-lgpl.html>.
     676
  • trunk/Makefile

    r98 r111  
    1111
    1212CC=gcc
    13 OPTS=-std=gnu89 -pedantic -Wall
     13OPTS=-std=gnu89 -pedantic -Wall -ggdb
    1414INC=-I/usr/local/include
    1515LIB=-L/usr/local/lib -lm
  • trunk/include/byteorder.h

    r30 r111  
    1111 * This program is free software; you can redistribute it and/or modify
    1212 * it under the terms of the GNU General Public License as published by
    13  * the Free Software Foundation; version 2 of the License.
     13 * the Free Software Foundation; version 3 of the License.
    1414 *
    1515 * This program is distributed in the hope that it will be useful,
  • trunk/include/regfi.h

    r110 r111  
    171171  uint16 flag;
    172172  uint16 unknown1;
     173  bool data_in_offset;
    173174} REGF_VK_REC;
    174175
     
    179180typedef struct _regf_sk_rec
    180181{
    181   REGF_HBIN* hbin;      /* pointer to HBIN record (in memory) containing
    182                          * this nk record
    183                          */
     182  uint32 offset;        /* Real file offset of this record */
     183  uint32 cell_size;     /* ((start_offset - end_offset) & 0xfffffff8) */
     184
    184185  SEC_DESC* sec_desc;
    185186  uint32 hbin_off;      /* offset from beginning of this hbin block */
    186   uint32 cell_size;     /* ((start_offset - end_offset) & 0xfffffff8) */
    187   uint32 offset;        /* Real file offset of this record */
    188187 
    189188  uint32 sk_off;        /* offset parsed from NK record used as a key
     
    389388                        uint32 length, bool strict);
    390389
     390REGF_SK_REC* regfi_parse_sk(REGF_FILE* file, uint32 offset, uint32 max_size, bool strict);
     391
    391392range_list* regfi_parse_unalloc_cells(REGF_FILE* file);
    392393
     394REGF_HBIN* regfi_lookup_hbin(REGF_FILE* file, uint32 offset);
     395
     396bool regfi_parse_cell(int fd, uint32 offset, uint8* hdr, uint32 hdr_len,
     397                      uint32* cell_length, bool* unalloc);
     398
    393399#endif  /* _REGFI_H */
  • trunk/include/smb_deps.h

    r84 r111  
    1010 * This program is free software; you can redistribute it and/or modify
    1111 * it under the terms of the GNU General Public License as published by
    12  * the Free Software Foundation; version 2 of the License.
     12 * the Free Software Foundation; version 3 of the License.
    1313 *
    1414 * This program is distributed in the hope that it will be useful,
  • trunk/include/void_stack.h

    r89 r111  
    44 * This program is free software; you can redistribute it and/or modify
    55 * it under the terms of the GNU General Public License as published by
    6  * the Free Software Foundation; version 2 of the License.
     6 * the Free Software Foundation; version 3 of the License.
    77 *
    88 * This program is distributed in the hope that it will be useful,
  • trunk/lib/lru_cache.c

    r108 r111  
    101101  lru_cache* ret_val;
    102102
    103   if(max_keys < 2)
    104     return NULL;
    105 
    106103  ret_val = (lru_cache*)malloc(sizeof(lru_cache));
    107104  if(ret_val == NULL)
    108105    return NULL;
    109106
    110   ret_val->num_buckets = max_keys/lru_cache_floor_log2(max_keys);
    111   if(ret_val->num_buckets < 1)
    112     ret_val->num_buckets = 1;
    113  
     107  if(max_keys == 0)
     108    ret_val->num_buckets = 2048;
     109  else
     110  {
     111    ret_val->num_buckets = max_keys/lru_cache_floor_log2(max_keys);
     112    if(ret_val->num_buckets < 1)
     113      ret_val->num_buckets = 1;
     114  }
     115
    114116  ret_val->table
    115117    = (lru_cache_element**)malloc(sizeof(lru_cache_element*)
     
    193195  { /* We didn't find an identical index. */
    194196   
    195     if(ht->num_keys >= ht->max_keys)
     197    if((ht->max_keys != 0) && (ht->num_keys >= ht->max_keys))
    196198    { /* Eliminate the least recently used item, but reuse the element
    197199       * structure to minimize reallocation.
  • trunk/lib/range_list.c

    r106 r111  
    2828#define RANGE_LIST_ALLOC_SIZE 256
    2929
    30 
     30#if 0
    3131static void range_list_print(const range_list* rl)
    3232{
     
    3838  fprintf(stderr, "\n");
    3939}
    40 
     40#endif
    4141
    4242/*
  • trunk/lib/regfi.c

    r110 r111  
    1111 * This program is free software; you can redistribute it and/or modify
    1212 * it under the terms of the GNU General Public License as published by
    13  * the Free Software Foundation; version 2 of the License.
     13 * the Free Software Foundation; version 3 of the License.
    1414 *
    1515 * This program is distributed in the hope that it will be useful,
     
    372372 *
    373373 *****************************************************************************/
    374 static bool regfi_parse_cell(int fd, uint32 offset, uint8* hdr, uint32 hdr_len,
    375                              uint32* cell_length, bool* unalloc)
     374bool regfi_parse_cell(int fd, uint32 offset, uint8* hdr, uint32 hdr_len,
     375                      uint32* cell_length, bool* unalloc)
    376376{
    377377  uint32 length;
     
    434434 * block for it.  NULL if one doesn't exist.
    435435 *******************************************************************/
    436 static REGF_HBIN* regfi_lookup_hbin(REGF_FILE* file, uint32 offset)
     436REGF_HBIN* regfi_lookup_hbin(REGF_FILE* file, uint32 offset)
    437437{
    438438  return (REGF_HBIN*)range_list_find_data(file->hbins, offset+REGF_BLOCKSIZE);
     
    565565
    566566  ret_val->offset = offset;
     567  /* TODO: is there a way to be more conservative (shorter) with
     568   *       cell length when cell is unallocated?
     569   */
    567570  ret_val->cell_size = cell_length;
    568571
     
    576579  }
    577580
    578 
    579581  ret_val->magic[0] = sk_header[0];
    580582  ret_val->magic[1] = sk_header[1];
    581583
     584  /* TODO: can additional validation be added here? */
    582585  ret_val->unknown_tag = SVAL(sk_header, 0x2);
    583586  ret_val->prev_sk_off = IVAL(sk_header, 0x4);
     
    621624
    622625
    623 
    624 /******************************************************************************
    625  TODO: not currently validating against max_size.
     626uint32* regfi_parse_valuelist(REGF_FILE* file, uint32 offset,
     627                              uint32 num_values, bool strict)
     628{
     629  uint32* ret_val;
     630  uint32 i, cell_length, length, read_len;
     631  bool unalloc;
     632
     633  if(!regfi_parse_cell(file->fd, offset, NULL, 0, &cell_length, &unalloc))
     634    return NULL;
     635
     636  if(cell_length != (cell_length & 0xFFFFFFF8))
     637  {
     638    if(strict)
     639      return NULL;
     640    cell_length = cell_length & 0xFFFFFFF8;
     641  }
     642  if((num_values * sizeof(uint32)) > cell_length-sizeof(uint32))
     643    return NULL;
     644
     645  read_len = num_values*sizeof(uint32);
     646  ret_val = (uint32*)malloc(read_len);
     647  if(ret_val == NULL)
     648    return NULL;
     649
     650  length = read_len;
     651  if((regfi_read(file->fd, (uint8*)ret_val, &length) != 0) || length != read_len)
     652  {
     653    free(ret_val);
     654    return NULL;
     655  }
     656 
     657  for(i=0; i < num_values; i++)
     658  {
     659    /* Fix endianness */
     660    ret_val[i] = IVAL(&ret_val[i], 0);
     661
     662    /* Validate the first num_values values to ensure they make sense */
     663    if(strict)
     664    {
     665      if((ret_val[i] + REGF_BLOCKSIZE > file->file_length)
     666         || ((ret_val[i] & 0xFFFFFFF8) != ret_val[i]))
     667      {
     668        free(ret_val);
     669        return NULL;
     670      }
     671    }
     672  }
     673
     674  return ret_val;
     675}
     676
     677
     678
     679/******************************************************************************
     680 * If !strict, the list may contain NULLs and VK records may point to NULL data.
    626681 ******************************************************************************/
    627682REGF_VK_REC** regfi_load_valuelist(REGF_FILE* file, uint32 offset,
     
    630685{
    631686  REGF_VK_REC** ret_val;
    632   REGF_HBIN* sub_hbin;
    633   uint8* buf;
    634   uint32 i, cell_length, vk_raw_offset, vk_offset, vk_max_length, buf_len;
    635   bool unalloc;
    636 
    637   buf_len = sizeof(uint8) * 4 * num_values;
    638   buf = (uint8*)zalloc(buf_len);
    639   if(buf == NULL)
    640     return NULL;
    641 
    642   if(!regfi_parse_cell(file->fd, offset, buf, buf_len, &cell_length, &unalloc))
    643   {
    644     free(buf);
    645     return NULL;
    646   }
     687  REGF_HBIN* hbin;
     688  uint32 i, vk_offset, vk_max_length;
     689  uint32* voffsets;
     690
     691  if((num_values+1) * sizeof(uint32) > max_size)
     692    return NULL;
     693
     694  /* TODO: For now, everything strict seems to make sense on this call.
     695   *       Maybe remove the parameter or use it for other things.
     696   */
     697  voffsets = regfi_parse_valuelist(file, offset, num_values, true);
     698  if(voffsets == NULL)
     699    return NULL;
    647700
    648701  ret_val = (REGF_VK_REC**)zalloc(sizeof(REGF_VK_REC*) * num_values);
    649702  if(ret_val == NULL)
    650703  {
    651     free(buf);
    652     return NULL;
    653   }
    654  
    655   for (i=0; i < num_values; i++)
    656   {
    657     vk_raw_offset = IVAL(buf, i*4);
    658    
    659     sub_hbin = regfi_lookup_hbin(file, vk_raw_offset);
    660     if (!sub_hbin)
    661     {
    662       free(buf);
     704    free(voffsets);
     705    return NULL;
     706  }
     707 
     708  for(i=0; i < num_values; i++)
     709  {
     710    hbin = regfi_lookup_hbin(file, voffsets[i]);
     711    if(!hbin)
     712    {
     713      free(voffsets);
    663714      free(ret_val);
    664715      return NULL;
    665716    }
    666717   
    667     vk_offset =  vk_raw_offset + REGF_BLOCKSIZE;
    668     vk_max_length = sub_hbin->block_size - vk_offset + sizeof(uint32);
    669     ret_val[i] = regfi_parse_vk(file, vk_offset, vk_max_length, true);
     718    vk_offset =  voffsets[i] + REGF_BLOCKSIZE;
     719    vk_max_length = hbin->block_size - vk_offset + sizeof(uint32);
     720    ret_val[i] = regfi_parse_vk(file, vk_offset, vk_max_length, strict);
    670721    if(ret_val[i] == NULL)
    671     {
    672       free(buf);
    673       free(ret_val);
    674       return NULL;     
    675     }
    676   }
    677 
    678   free(buf);
     722    { /* If we're being strict, throw out the whole list.
     723       * Otherwise, let it be NULL.
     724       */
     725      if(strict)
     726      {
     727        free(voffsets);
     728        free(ret_val);
     729        return NULL;
     730      }
     731    }
     732  }
     733
     734  free(voffsets);
    679735  return ret_val;
    680736}
     
    14601516  {
    14611517    /* TODO: deal with subkey-lists that reference other subkey-lists. */
    1462 printf("DEBUG: magic check failed! \"%c%c\"\n", nk_header[0x0], nk_header[0x1]);
    14631518    return NULL;
    14641519  }
     
    15741629                       &cell_length, &unalloc))
    15751630    return NULL;
    1576    
     1631
    15771632  ret_val = (REGF_VK_REC*)zalloc(sizeof(REGF_VK_REC));
    15781633  if(ret_val == NULL)
     
    15851640    ret_val->cell_size = max_size & 0xFFFFFFF8;
    15861641  if((ret_val->cell_size < REGFI_VK_MIN_LENGTH)
    1587      || (strict && ret_val->cell_size != (ret_val->cell_size & 0xFFFFFFF8)))
     1642     || ret_val->cell_size != (ret_val->cell_size & 0xFFFFFFF8))
    15881643  {
    15891644    free(ret_val);
     
    16021657  raw_data_size = IVAL(vk_header, 0x4);
    16031658  ret_val->data_size = raw_data_size & ~VK_DATA_IN_OFFSET;
     1659  ret_val->data_in_offset = (bool)(raw_data_size & VK_DATA_IN_OFFSET);
    16041660  ret_val->data_off = IVAL(vk_header, 0x8);
    16051661  ret_val->type = IVAL(vk_header, 0xC);
     
    16971753                         &cell_length, &unalloc))
    16981754      return NULL;
    1699    
    1700     if(cell_length < 8 || ((cell_length & 0xFFFFFFF8) != cell_length))
     1755
     1756    if((cell_length & 0xFFFFFFF8) != cell_length)
    17011757      return NULL;
    17021758
    17031759    if(cell_length - 4 < length)
    17041760    {
     1761      /* TODO: This strict condition has been triggered in multiple registries.
     1762       *       Not sure the cause, but the data length values are very large,
     1763       *       such as 53392.
     1764       */
    17051765      if(strict)
    17061766        return NULL;
  • trunk/lib/smb_deps.c

    r84 r111  
    1010 * This program is free software; you can redistribute it and/or modify
    1111 * it under the terms of the GNU General Public License as published by
    12  * the Free Software Foundation; version 2 of the License.
     12 * the Free Software Foundation; version 3 of the License.
    1313 *
    1414 * This program is distributed in the hope that it will be useful,
  • trunk/lib/void_stack.c

    r89 r111  
    88 * This program is free software; you can redistribute it and/or modify
    99 * it under the terms of the GNU General Public License as published by
    10  * the Free Software Foundation; version 2 of the License.
     10 * the Free Software Foundation; version 3 of the License.
    1111 *
    1212 * This program is distributed in the hope that it will be useful,
  • trunk/src/reglookup.c

    r110 r111  
    33 * Gerald Carter''s regfio interface.
    44 *
    5  * Copyright (C) 2005-2007 Timothy D. Morgan
     5 * Copyright (C) 2005-2008 Timothy D. Morgan
    66 * Copyright (C) 2002 Richard Sharpe, rsharpe@richardsharpe.com
    77 *
    88 * This program is free software; you can redistribute it and/or modify
    99 * it under the terms of the GNU General Public License as published by
    10  * the Free Software Foundation; version 2 of the License.
     10 * the Free Software Foundation; version 3 of the License.
    1111 *
    1212 * This program is distributed in the hope that it will be useful,
     
    2929#include <strings.h>
    3030#include <time.h>
    31 #include <iconv.h>
    3231#include "../include/regfi.h"
    3332#include "../include/void_stack.h"
     
    4544/* Other globals */
    4645REGF_FILE* f;
    47 const char* key_special_chars = ",\"\\/";
    48 const char* subfield_special_chars = ",\"\\|";
    49 const char* common_special_chars = ",\"\\";
    50 
    51 iconv_t conv_desc;
    52 
    53 
    54 void bailOut(int code, char* message)
    55 {
    56   fprintf(stderr, message);
    57   exit(code);
    58 }
    59 
    60 
    61 /* Returns a newly malloc()ed string which contains original buffer,
    62  * except for non-printable or special characters are quoted in hex
    63  * with the syntax '\xQQ' where QQ is the hex ascii value of the quoted
    64  * character.  A null terminator is added, since only ascii, not binary,
    65  * is returned.
     46
     47
     48/* TODO: a hack to share some functions with reglookup-recover.c.
     49 *       Should move these into a properly library at some point.
    6650 */
    67 static char* quote_buffer(const unsigned char* str,
    68                           unsigned int len, const char* special)
    69 {
    70   unsigned int i, added_len;
    71   unsigned int num_written = 0;
    72 
    73   unsigned int buf_len = sizeof(char)*(len+1);
    74   char* ret_val = malloc(buf_len);
    75   char* tmp_buf;
    76 
    77   if(ret_val == NULL)
    78     return NULL;
    79 
    80   for(i=0; i<len; i++)
    81   {
    82     if(buf_len <= (num_written+5))
    83     {
    84       /* Expand the buffer by the memory consumption rate seen so far
    85        * times the amount of input left to process.  The expansion is bounded
    86        * below by a minimum safety increase, and above by the maximum possible
    87        * output string length.  This should minimize both the number of
    88        * reallocs() and the amount of wasted memory.
    89        */
    90       added_len = (len-i)*num_written/(i+1);
    91       if((buf_len+added_len) > (len*4+1))
    92         buf_len = len*4+1;
    93       else
    94       {
    95         if (added_len < 5)
    96           buf_len += 5;
    97         else
    98           buf_len += added_len;
    99       }
    100 
    101       tmp_buf = realloc(ret_val, buf_len);
    102       if(tmp_buf == NULL)
    103       {
    104         free(ret_val);
    105         return NULL;
    106       }
    107       ret_val = tmp_buf;
    108     }
    109    
    110     if(str[i] < 32 || str[i] > 126 || strchr(special, str[i]) != NULL)
    111     {
    112       num_written += snprintf(ret_val + num_written, buf_len - num_written,
    113                               "\\x%.2X", str[i]);
    114     }
     51#include "common.c"
     52
     53
     54void printValue(const REGF_VK_REC* vk, char* prefix)
     55{
     56  char* quoted_value = NULL;
     57  char* quoted_name = NULL;
     58  char* conv_error = NULL;
     59  const char* str_type = NULL;
     60  uint32 size = vk->data_size;
     61
     62  /* Microsoft's documentation indicates that "available memory" is
     63   * the limit on value sizes.  Annoying.  We limit it to 1M which
     64   * should rarely be exceeded, unless the file is corrupt or
     65   * malicious. For more info, see:
     66   *   http://msdn2.microsoft.com/en-us/library/ms724872.aspx
     67   */
     68  if(size > VK_MAX_DATA_LENGTH)
     69  {
     70    fprintf(stderr, "WARNING: value data size %d larger than "
     71            "%d, truncating...\n", size, VK_MAX_DATA_LENGTH);
     72    size = VK_MAX_DATA_LENGTH;
     73  }
     74 
     75  quoted_name = quote_string(vk->valuename, key_special_chars);
     76  if (quoted_name == NULL)
     77  { /* Value names are NULL when we're looking at the "(default)" value.
     78     * Currently we just return a 0-length string to try an eliminate
     79     * ambiguity with a literal "(default)" value.  The data type of a line
     80     * in the output allows one to differentiate between the parent key and
     81     * this value.
     82     */
     83    quoted_name = malloc(1*sizeof(char));
     84    if(quoted_name == NULL)
     85      bailOut(EX_OSERR, "ERROR: Could not allocate sufficient memory.\n");
     86    quoted_name[0] = '\0';
     87  }
     88
     89  quoted_value = data_to_ascii(vk->data, size, vk->type, &conv_error);
     90  if(quoted_value == NULL)
     91  {
     92    if(conv_error == NULL)
     93      fprintf(stderr, "WARNING: Could not quote value for '%s/%s'.  "
     94              "Memory allocation failure likely.\n", prefix, quoted_name);
     95    else if(print_verbose)
     96      fprintf(stderr, "WARNING: Could not quote value for '%s/%s'.  "
     97              "Returned error: %s\n", prefix, quoted_name, conv_error);
     98  }
     99  /* XXX: should these always be printed? */
     100  else if(conv_error != NULL && print_verbose)
     101    fprintf(stderr, "VERBOSE: While quoting value for '%s/%s', "
     102            "warning returned: %s\n", prefix, quoted_name, conv_error);
     103
     104  str_type = regfi_type_val2str(vk->type);
     105  if(print_security)
     106  {
     107    if(str_type == NULL)
     108      printf("%s/%s,0x%.8X,%s,,,,,\n", prefix, quoted_name,
     109             vk->type, quoted_value);
    115110    else
    116       ret_val[num_written++] = str[i];
    117   }
    118   ret_val[num_written] = '\0';
    119 
    120   return ret_val;
    121 }
    122 
    123 
    124 /* Returns a newly malloc()ed string which contains original string,
    125  * except for non-printable or special characters are quoted in hex
    126  * with the syntax '\xQQ' where QQ is the hex ascii value of the quoted
    127  * character.
    128  */
    129 static char* quote_string(const char* str, const char* special)
    130 {
    131   unsigned int len;
    132 
    133   if(str == NULL)
    134     return NULL;
    135 
    136   len = strlen(str);
    137   return quote_buffer((const unsigned char*)str, len, special);
    138 }
    139 
    140 
    141 /*
    142  * Convert from UTF-16LE to ASCII.  Accepts a Unicode buffer, uni, and
    143  * it's length, uni_max.  Writes ASCII to the buffer ascii, whose size
    144  * is ascii_max.  Writes at most (ascii_max-1) bytes to ascii, and null
    145  * terminates the string.  Returns the length of the string stored in
    146  * ascii.  On error, returns a negative errno code.
    147  */
    148 static int uni_to_ascii(unsigned char* uni, char* ascii,
    149                         unsigned int uni_max, unsigned int ascii_max)
    150 {
    151   char* inbuf = (char*)uni;
    152   char* outbuf = ascii;
    153   size_t in_len = (size_t)uni_max;
    154   size_t out_len = (size_t)(ascii_max-1);
    155   int ret;
    156 
    157   /* Set up conversion descriptor. */
    158   conv_desc = iconv_open("US-ASCII", "UTF-16LE");
    159 
    160   ret = iconv(conv_desc, &inbuf, &in_len, &outbuf, &out_len);
    161   if(ret == -1)
    162   {
    163     iconv_close(conv_desc);
    164     return -errno;
    165   }
    166   *outbuf = '\0';
    167 
    168   iconv_close(conv_desc); 
    169   return strlen(ascii);
    170 }
    171 
    172 
    173 /*
    174  * Convert a data value to a string for display.  Returns NULL on error,
    175  * and the string to display if there is no error, or a non-fatal
    176  * error.  On any error (fatal or non-fatal) occurs, (*error_msg) will
    177  * be set to a newly allocated string, containing an error message.  If
    178  * a memory allocation failure occurs while generating the error
    179  * message, both the return value and (*error_msg) will be NULL.  It
    180  * is the responsibility of the caller to free both a non-NULL return
    181  * value, and a non-NULL (*error_msg).
    182  */
    183 static char* data_to_ascii(unsigned char *datap, uint32 len, uint32 type,
    184                            char** error_msg)
    185 {
    186   char* asciip;
    187   char* ascii;
    188   unsigned char* cur_str;
    189   char* cur_ascii;
    190   char* cur_quoted;
    191   char* tmp_err;
    192   const char* str_type;
    193   uint32 i;
    194   uint32 cur_str_len;
    195   uint32 ascii_max, cur_str_max;
    196   uint32 str_rem, cur_str_rem, alen;
    197   int ret_err;
    198   unsigned short num_nulls;
    199 
    200   *error_msg = NULL;
    201 
    202   switch (type)
    203   {
    204   case REG_SZ:
    205   case REG_EXPAND_SZ:
    206     /* REG_LINK is a symbolic link, stored as a unicode string. */
    207   case REG_LINK:
    208     ascii_max = sizeof(char)*(len+1);
    209     ascii = malloc(ascii_max);
    210     if(ascii == NULL)
    211       return NULL;
    212    
    213     /* Sometimes values have binary stored in them.  If the unicode
    214      * conversion fails, just quote it raw.
    215      */
    216     ret_err = uni_to_ascii(datap, ascii, len, ascii_max);
    217     if(ret_err < 0)
    218     {
    219       tmp_err = strerror(-ret_err);
    220       str_type = regfi_type_val2str(type);
    221       *error_msg = (char*)malloc(65+strlen(str_type)+strlen(tmp_err)+1);
    222       if(*error_msg == NULL)
    223       {
    224         free(ascii);
    225         return NULL;
    226       }
    227       sprintf(*error_msg, "Unicode conversion failed on %s field; "
    228                "printing as binary.  Error: %s", str_type, tmp_err);
    229      
    230       cur_quoted = quote_buffer(datap, len, common_special_chars);
    231     }
     111      printf("%s/%s,%s,%s,,,,,\n", prefix, quoted_name,
     112             str_type, quoted_value);
     113  }
     114  else
     115  {
     116    if(str_type == NULL)
     117      printf("%s/%s,0x%.8X,%s,\n", prefix, quoted_name,
     118             vk->type, quoted_value);
    232119    else
    233       cur_quoted = quote_string(ascii, common_special_chars);
    234     free(ascii);
    235     if(cur_quoted == NULL)
    236     {
    237       *error_msg = (char*)malloc(27+1);
    238       if(*error_msg != NULL)
    239         strcpy(*error_msg, "Buffer could not be quoted.");
    240     }
    241     return cur_quoted;
    242     break;
    243 
    244   case REG_DWORD:
    245     ascii_max = sizeof(char)*(8+2+1);
    246     ascii = malloc(ascii_max);
    247     if(ascii == NULL)
    248       return NULL;
    249 
    250     snprintf(ascii, ascii_max, "0x%.2X%.2X%.2X%.2X",
    251              datap[3], datap[2], datap[1], datap[0]);
    252     return ascii;
    253     break;
    254 
    255   case REG_DWORD_BE:
    256     ascii_max = sizeof(char)*(8+2+1);
    257     ascii = malloc(ascii_max);
    258     if(ascii == NULL)
    259       return NULL;
    260 
    261     snprintf(ascii, ascii_max, "0x%.2X%.2X%.2X%.2X",
    262              datap[0], datap[1], datap[2], datap[3]);
    263     return ascii;
    264     break;
    265 
    266   case REG_QWORD:
    267     ascii_max = sizeof(char)*(16+2+1);
    268     ascii = malloc(ascii_max);
    269     if(ascii == NULL)
    270       return NULL;
    271 
    272     snprintf(ascii, ascii_max, "0x%.2X%.2X%.2X%.2X%.2X%.2X%.2X%.2X",
    273              datap[7], datap[6], datap[5], datap[4],
    274              datap[3], datap[2], datap[1], datap[0]);
    275     return ascii;
    276     break;
    277    
    278 
    279   /* XXX: this MULTI_SZ parser is pretty inefficient.  Should be
    280    *      redone with fewer malloc calls and better string concatenation.
    281    *      Also, gives lame output when "\0\0" is the string.
    282    */
    283   case REG_MULTI_SZ:
    284     ascii_max = sizeof(char)*(len*4+1);
    285     cur_str_max = sizeof(char)*(len+1);
    286     cur_str = malloc(cur_str_max);
    287     cur_ascii = malloc(cur_str_max);
    288     ascii = malloc(ascii_max);
    289     if(ascii == NULL || cur_str == NULL || cur_ascii == NULL)
    290       return NULL;
    291 
    292     /* Reads until it reaches 4 consecutive NULLs,
    293      * which is two nulls in unicode, or until it reaches len, or until we
    294      * run out of buffer.  The latter should never happen, but we shouldn't
    295      * trust our file to have the right lengths/delimiters.
    296      */
    297     asciip = ascii;
    298     num_nulls = 0;
    299     str_rem = ascii_max;
    300     cur_str_rem = cur_str_max;
    301     cur_str_len = 0;
    302 
    303     for(i=0; (i < len) && str_rem > 0; i++)
    304     {
    305       *(cur_str+cur_str_len) = *(datap+i);
    306       if(*(cur_str+cur_str_len) == 0)
    307         num_nulls++;
    308       else
    309         num_nulls = 0;
    310       cur_str_len++;
    311 
    312       if(num_nulls == 2)
    313       {
    314         ret_err = uni_to_ascii(cur_str, cur_ascii, cur_str_len-1, cur_str_max);
    315         if(ret_err < 0)
    316         {
    317           /* XXX: should every sub-field error be enumerated? */
    318           if(*error_msg == NULL)
    319           {
    320             tmp_err = strerror(-ret_err);
    321             *error_msg = (char*)malloc(90+strlen(tmp_err)+1);
    322             if(*error_msg == NULL)
    323             {
    324               free(cur_str);
    325               free(cur_ascii);
    326               free(ascii);
    327               return NULL;
    328             }
    329             sprintf(*error_msg, "Unicode conversion failed on at least one "
    330                     "MULTI_SZ sub-field; printing as binary.  Error: %s",
    331                     tmp_err);
    332           }
    333           cur_quoted = quote_buffer(cur_str, cur_str_len-1,
    334                                     subfield_special_chars);
    335         }
    336         else
    337           cur_quoted = quote_string(cur_ascii, subfield_special_chars);
    338 
    339         alen = snprintf(asciip, str_rem, "%s", cur_quoted);
    340         asciip += alen;
    341         str_rem -= alen;
    342         free(cur_quoted);
    343 
    344         if(*(datap+i+1) == 0 && *(datap+i+2) == 0)
    345           break;
    346         else
    347         {
    348           if(str_rem > 0)
    349           {
    350             asciip[0] = '|';
    351             asciip[1] = '\0';
    352             asciip++;
    353             str_rem--;
    354           }
    355           memset(cur_str, 0, cur_str_max);
    356           cur_str_len = 0;
    357           num_nulls = 0;
    358           /* To eliminate leading nulls in subsequent strings. */
    359           i++;
    360         }
    361       }
    362     }
    363     *asciip = 0;
    364     free(cur_str);
    365     free(cur_ascii);
    366     return ascii;
    367     break;
    368 
    369   /* XXX: Dont know what to do with these yet, just print as binary... */
    370   default:
    371     fprintf(stderr, "WARNING: Unrecognized registry data type (0x%.8X); quoting as binary.\n", type);
    372    
    373   case REG_NONE:
    374   case REG_RESOURCE_LIST:
    375   case REG_FULL_RESOURCE_DESCRIPTOR:
    376   case REG_RESOURCE_REQUIREMENTS_LIST:
    377 
    378   case REG_BINARY:
    379     return quote_buffer(datap, len, common_special_chars);
    380     break;
    381   }
    382 
    383   return NULL;
    384 }
     120      printf("%s/%s,%s,%s,\n", prefix, quoted_name,
     121             str_type, quoted_value);
     122  }
     123
     124  if(quoted_value != NULL)
     125    free(quoted_value);
     126  if(quoted_name != NULL)
     127    free(quoted_name);
     128  if(conv_error != NULL)
     129    free(conv_error);
     130}
     131
    385132
    386133
     
    527274
    528275
    529 void printValue(const REGF_VK_REC* vk, char* prefix)
    530 {
    531   char* quoted_value = NULL;
    532   char* quoted_name = NULL;
    533   char* conv_error = NULL;
    534   const char* str_type = NULL;
    535   uint32 size;
    536 
    537   /* Microsoft's documentation indicates that "available memory" is
    538    * the limit on value sizes.  Annoying.  We limit it to 1M which
    539    * should rarely be exceeded, unless the file is corrupt or
    540    * malicious. For more info, see:
    541    *   http://msdn2.microsoft.com/en-us/library/ms724872.aspx
    542    */
    543   if(size > VK_MAX_DATA_LENGTH)
    544   {
    545     fprintf(stderr, "WARNING: value data size %d larger than "
    546             "%d, truncating...\n", size, VK_MAX_DATA_LENGTH);
    547     size = VK_MAX_DATA_LENGTH;
    548   }
    549  
    550   quoted_value = data_to_ascii(vk->data, vk->data_size,
    551                                vk->type, &conv_error);
    552 
    553  
    554   /* XXX: Sometimes value names can be NULL in registry.  Need to
    555    *      figure out why and when, and generate the appropriate output
    556    *      for that condition.
    557    */
    558   quoted_name = quote_string(vk->valuename, common_special_chars);
    559   if (quoted_name == NULL)
    560   {
    561     quoted_name = malloc(1*sizeof(char));
    562     if(quoted_name == NULL)
    563       bailOut(EX_OSERR, "ERROR: Could not allocate sufficient memory.\n");
    564     quoted_name[0] = '\0';
    565   }
    566 
    567   if(quoted_value == NULL)
    568   {
    569     if(conv_error == NULL)
    570       fprintf(stderr, "WARNING: Could not quote value for '%s/%s'.  "
    571               "Memory allocation failure likely.\n", prefix, quoted_name);
    572     else
    573       fprintf(stderr, "WARNING: Could not quote value for '%s/%s'.  "
    574               "Returned error: %s\n", prefix, quoted_name, conv_error);
    575   }
    576   /* XXX: should these always be printed? */
    577   else if(conv_error != NULL && print_verbose)
    578       fprintf(stderr, "VERBOSE: While quoting value for '%s/%s', "
    579               "warning returned: %s\n", prefix, quoted_name, conv_error);
    580 
    581   str_type = regfi_type_val2str(vk->type);
    582   if(print_security)
    583   {
    584     if(str_type == NULL)
    585       printf("%s/%s,0x%.8X,%s,,,,,\n", prefix, quoted_name,
    586              vk->type, quoted_value);
    587     else
    588       printf("%s/%s,%s,%s,,,,,\n", prefix, quoted_name,
    589              str_type, quoted_value);
    590   }
    591   else
    592   {
    593     if(str_type == NULL)
    594       printf("%s/%s,0x%.8X,%s,\n", prefix, quoted_name,
    595              vk->type, quoted_value);
    596     else
    597       printf("%s/%s,%s,%s,\n", prefix, quoted_name,
    598              str_type, quoted_value);
    599   }
    600 
    601   if(quoted_value != NULL)
    602     free(quoted_value);
    603   if(quoted_name != NULL)
    604     free(quoted_name);
    605   if(conv_error != NULL)
    606     free(conv_error);
    607 }
    608 
    609 
    610276void printValueList(REGFI_ITERATOR* i, char* prefix)
    611277{
     
    825491          " [-p <PATH_FILTER>] [-t <TYPE_FILTER>]"
    826492          " <REGISTRY_FILE>\n");
    827   fprintf(stderr, "Version: 0.4.0\n");
     493  fprintf(stderr, "Version: %s\n", REGLOOKUP_VERSION);
    828494  fprintf(stderr, "Options:\n");
    829495  fprintf(stderr, "\t-v\t sets verbose mode.\n");
Note: See TracChangeset for help on using the changeset viewer.