diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..7103e74 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,5476 @@ +# Generate automatically. Do not edit. + +commit 3cb711aef7c7bbb1217697948bf2aa6c224b4ac9 +Merge: 0926aae 96d0476 +Author: Watson Yuuma Sato +Date: 2020-06-02 + + Merge pull request #117 from matejak/updated_rhel8 + + Introduce the 1.1.1 release. + +commit 96d047605b8bc452560ee66290154b15837cf873 +Author: Matěj Týč +Date: 2020-06-02 + + Introduce the 1.1.1 release. + + - Update the .pot file properly + - Put the right version number in the Makefile. + + Makefile | 2 +- + po/oscap-anaconda-addon.pot | 48 ++++++++++++++++++++++----------------------- + 2 files changed, 25 insertions(+), 25 deletions(-) + +commit 0926aaeb85e8e2a6c39d0ca0f029e03df17181bc +Merge: 63132f1 a012680 +Author: Watson Yuuma Sato +Date: 2020-06-01 + + Merge pull request #115 from matejak/updated_rhel8 + + Update the rhel8-branch with master commits + +commit a01268037bd97f86ca031087dc93a050a3a52536 +Author: Matěj Týč +Date: 2020-06-01 + + Updated the compatibility info. + + README.md | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6d6ed1bbabea9b7bdbc813e5cd26e447a94479d4 +Author: Matěj Týč +Date: 2020-06-01 + + Updated potfile for the release. + + po/oscap-anaconda-addon.pot | 91 ++++++++++++++++++++++++--------------------- + 1 file changed, 48 insertions(+), 43 deletions(-) + +commit b3e04367de7877625f7f02079acde61bf67bb3f2 +Author: Matěj Týč +Date: 2020-05-26 + + Improve the OAA UX. + + - Set minimal height to profile view and to the changes view. + + Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1781790 + + org_fedora_oscap/gui/spokes/oscap.glade | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +commit 00472976e9802c163842d611799209c0460eeaba +Author: Matěj Týč +Date: 2020-05-25 + + Fix compatibility with Anaconda 32. + + org_fedora_oscap/common.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit eeb410e803c20b357bcf1c0374d82fdfc8cad82b +Author: Matěj Týč +Date: 2020-05-25 + + Added a comment about changes in unit tests. + + tests/test_rule_handling.py | 3 +++ + 1 file changed, 3 insertions(+) + +commit 7541e71fe681e3df3255cda4aeb5fa3fe3be40c8 +Author: Matěj Týč +Date: 2020-05-25 + + Bumped the schematron version to match the SCAP version. + + testing_files/testing_ds.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d155d46d421cd57552e7ad54bd45273856e20628 +Author: Vendula Poncova +Date: 2020-03-17 + + Fix unit tests that use the Storage module + + Set up and check the mocked DBus objects of the Storage module. + + tests/test_rule_handling.py | 93 ++++++++++++++++++++++++--------------------- + 1 file changed, 50 insertions(+), 43 deletions(-) + +commit 86aec6124e4d643f93a1c3cb69af306ac616509f +Author: Vendula Poncova +Date: 2020-03-16 + + Replace invalid patches with a new fixture for the DBus proxies + + The fixture proxy_getter patches the method get_proxy of the Anaconda's DBus + object. The fixture creates mocked DBus proxies of the requested DBus objects. + The proxies are kept in a cache and reused when possible. On the first call, + the fixture will call the function set_dbus_defaults that will initialize some + of these mocks. + + tests/test_rule_handling.py | 96 +++++++++++++++++++++++++-------------------- + 1 file changed, 53 insertions(+), 43 deletions(-) + +commit 05f93583381e539d05263695673d2a654f2caf8b +Author: Vendula Poncova +Date: 2020-03-13 + + Don't use Anaconda's flags + + Use the Anaconda's configuration object instead. + + org_fedora_oscap/data_fetch.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 05dcebee0c9cdae14633138ab61e03ab3a96fa7f +Author: Vendula Poncova +Date: 2020-02-23 + + Replace getSysroot with conf.target.system_root + + The function getSysroot was removed from Anaconda. Use the value + from the Anaconda configuration instead. + + org_fedora_oscap/ks/oscap.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 24e1ee99693eda777b0359ab1f83b9387620ff06 +Author: Vendula Poncova +Date: 2020-02-23 + + Use the DBus Storage module + + The local storage object is no longer available. Use the DBus module instead. + + org_fedora_oscap/rule_handling.py | 31 ++++++++++++++++++++----------- + oscap-anaconda-addon.spec | 4 ++-- + 2 files changed, 22 insertions(+), 13 deletions(-) + +commit b02b7fad3af1280f67b2ff65afca2764bbbb6b42 +Author: Matěj Týč +Date: 2019-08-15 + + Updated Anaconda no use network proxy instead of deprecated functionality. + + README.md | 2 +- + org_fedora_oscap/common.py | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit fe4b21529550ca1410a4f9201e9ddce256043e2e +Author: Watson Sato +Date: 2019-01-14 + + Add compatible version of anaconda to master README + + README.md | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 126df25916d266f8e5eb63e7b91c5132066da08a +Author: Vendula Poncova +Date: 2018-12-06 + + Remove install classes + + Anaconda removes the install classes from the code. They are + replaced with cofiguration files. + + org_fedora_oscap/gui/spokes/oscap.py | 6 ++---- + org_fedora_oscap/ks/oscap.py | 6 ++---- + oscap-anaconda-addon.spec | 4 ++-- + 3 files changed, 6 insertions(+), 10 deletions(-) + +commit 63132f1c1dab2d42d1d29c60c50159b5b2701d0c +Merge: 8190abc 2f97f43 +Author: Matěj Týč +Date: 2019-08-22 + + Merge pull request #107 from rvykydal/do-not-use-capitals-for-the-spoke-title + + Do not use capitals for spoke title. + +commit 2f97f43a4194263e47d4747e39c22b8287a659b3 +Author: Radek Vykydal +Date: 2019-08-21 + + Do not use capitals for spoke title. + + Resolves: rhbz#1744185 + + To be consistent with other spokes. + + org_fedora_oscap/gui/spokes/oscap.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8190abcf8340910ffb58b5d2d813e631060e0d5d +Merge: 26e5dc9 3a306f7 +Author: Watson Sato +Date: 2019-02-08 + + Merge branch 'rhel7-branch' into rhel8-branch + +commit 3a306f793fc41beeff7f142c9df7ba3ea7b42f04 +Merge: 4177741 c88dba4 +Author: Watson Yuuma Sato +Date: 2019-02-08 + + Merge pull request #104 from dahaic/fix_hub_translation + + Hack hub title to show translated. + +commit c88dba4b9deeb78158bf2e239e4b7118a9e8b39f +Author: Marek Haicman +Date: 2019-02-07 + + Hack hub title to show translated. + + org_fedora_oscap/gui/spokes/oscap.py | 2 ++ + 1 file changed, 2 insertions(+) + +commit 26e5dc9112d85a3e16d829ad8941966f8c4b55e5 +Merge: a92e58b 19ec348 +Author: Matěj Týč +Date: 2019-01-18 + + Merge pull request #83 from yuumasato/test_rpm_extraction + + Test rpm extraction + +commit a92e58b826d6e1ba7986b0975b165ed0ce13f0ab +Merge: df3129f 44a643f +Author: Jan Černý +Date: 2019-01-18 + + Merge pull request #103 from matejak/fix_rootpw + + Updated the code to use the up-to-date Anaconda API. + +commit 44a643f4c115d638d42f19f668cef1c220aab1b6 +Author: Matěj Týč +Date: 2019-01-17 + + Updated the code to use the up-to-date Anaconda API. + + Fixes RHBZ#1665551 + + org_fedora_oscap/gui/spokes/oscap.py | 29 ++++++++++++++++++++--------- + 1 file changed, 20 insertions(+), 9 deletions(-) + +commit df3129fc8aa5c67cb17007492b278167657a654f +Merge: 6b53029 1e275a0 +Author: Jan Černý +Date: 2019-01-17 + + Merge pull request #101 from matejak/password_set + + Updated code to comply to the Bootloader proxy API. + +commit 1e275a0da36595dd921732e0f60510171cdbe75c +Author: Matěj Týč +Date: 2019-01-15 + + Updated code to comply to the Bootloader proxy API. + + org_fedora_oscap/rule_handling.py | 4 ++-- + tests/test_rule_handling.py | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 6b5302944ac72189b8d28c2a1493ab6dd07802cb +Merge: d8020c8 3e62bc3 +Author: Jan Černý +Date: 2019-01-17 + + Merge pull request #99 from matejak/rhel8-branch + + Merge rhel7-branch to rhel8-branch + +commit 3e62bc3326aca0ae5adb299ccb994fc201fc04dd +Merge: d8020c8 4177741 +Author: Matěj Týč +Date: 2019-01-16 + + Merge branch 'rhel7-branch' into rhel8-branch + +commit 4177741e6651037ceaf99c175b394ce248602b64 +Merge: ce64a6e fd16843 +Author: Watson Yuuma Sato +Date: 2019-01-16 + + Merge pull request #100 from matejak/mode-rb + + Fixed the checksum function to use forward-compatible rb mode. + +commit d8020c869089519d1730c092646f540419b71251 +Merge: 32e3c15 cbc9af5 +Author: Jan Černý +Date: 2019-01-16 + + Merge pull request #97 from yuumasato/anaconda_version_rhel8 + + Add compatible version of anaconda to rhel8 README + +commit fd1684358e212521abaf3ec7662aa97181868c0a +Author: Matěj Týč +Date: 2019-01-15 + + Fixed the checksum function to use forward-compatible rb mode. + + On python3, there is a problem as contents of r-opened file is string, + but they are treated as bytes later. rb mode is fully python2-compatible. + + org_fedora_oscap/utils.py | 4 ++-- + tests/data/file | 1 + + tests/test_utils.py | 12 ++++++++++++ + 3 files changed, 15 insertions(+), 2 deletions(-) + +commit cbc9af5ded28db94c8129a259d6a5158e2f6c6ce +Author: Watson Sato +Date: 2019-01-14 + + Add compatible version of anaconda to rhel8 README + + README.md | 2 ++ + 1 file changed, 2 insertions(+) + +commit ce64a6e1cf3729d5d55c07d0d4c7d5f87f9ff64b +Merge: 1ccc135 fe443fd +Author: Jan Černý +Date: 2019-01-14 + + Merge pull request #96 from yuumasato/anaconda_version_rhel7 + + Add compatible version of anaconda to rhel7 README + +commit fe443fd2923d2067101de75c9be6fffdedbef791 +Author: Watson Sato +Date: 2019-01-14 + + Add compatible version of anaconda to rhel7 README + + README.md | 2 ++ + 1 file changed, 2 insertions(+) + +commit 1ccc135c7a82417129e219382bbff1f962951023 +Merge: 30d912d fced8ba +Author: Watson Yuuma Sato +Date: 2019-01-14 + + Merge pull request #95 from jan-cerny/remove_spec + + Remove spec file from upstream repository + +commit fced8ba0b124f8040791693cbf0553e53afe5da5 +Author: Jan Černý +Date: 2019-01-14 + + Remove spec file from upstream repository + + Consumers of the spec file should refer to Fedora packaging repository + where the packaging information can be found: + https://src.fedoraproject.org/rpms/oscap-anaconda-addon/blob/master/f/oscap-anaconda-addon.spec + You can also refer to the specfiles shipped in Red Hat Enterprise Linux. + We learned through history that maintaining the same spec file in + multiple repositories was a tedious job. There were multiple reasons why + the specfiles diverged from each other. We already removed upstream spec + files from OpenSCAP GitHub repository in past. + + oscap-anaconda-addon.spec | 276 ---------------------------------------------- + 1 file changed, 276 deletions(-) + +commit 32e3c15474648148b85111e913203b08a71e2424 +Merge: ec2c106 edc15ae +Author: Matěj Týč +Date: 2019-01-11 + + Merge pull request #93 from jan-cerny/update_unit_tests + + Update unit tests after upgrading code to latest Anaconda code + +commit edc15ae187769575ffe6b40b0d94becf2161bc0c +Author: Jan Černý +Date: 2019-01-11 + + Fix PEP8 problems + + Addressing: + Line 415:1: E302 expected 2 blank lines, found 1 + Line 477:100: E501 line too long (110 > 99 characters) + + tests/test_rule_handling.py | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 02d8e7af5509a0e2a2eedb28937a1e37bdd1782c +Author: Jan Černý +Date: 2019-01-10 + + Update unit tests after upgrading code to latest Anaconda code + + In some of the `rule_handling` methods that handle kickstart rules we + recently started to use new Anaconda API that uses DBUS proxy. See + https://github.com/OpenSCAP/oscap-anaconda-addon/pull/81 However, after + this change our upstream tests started to fail. The problem with + upstream tests was that they don't replace the DBus proxy by a mock + object and also that they mocked the old classes that aren't used in the + SUT. This PR updates our unit test by mocking the DBus proxy. We keep + the mock object that is returned by DBus.get_proxy, modify its values + and then run the code that uses these values. The test update is + inspired by: + https://github.com/rhinstaller/anaconda/blob/master/tests/nosetests/pyanaconda_tests/partitioning_test.py#L48 + + tests/test_rule_handling.py | 201 ++++++++++++++++++++++++++------------------ + 1 file changed, 118 insertions(+), 83 deletions(-) + +commit 30d912df2044ffd26a803d7ce55a4604f9faecac +Merge: d42b9e2 df9add6 +Author: Watson Yuuma Sato +Date: 2019-01-10 + + Merge pull request #92 from jan-cerny/find_lang + + Remove translations from upstream CI + +commit df9add663056c2d5a44922f9f339ec12bdc5313e +Author: Jan Černý +Date: 2019-01-07 + + Remove translations from upstream CI + + Pulling from Zanata every time there is a PR update is useless waste, + so tests for the upstream CI should be modified. The rpmbuild is a part + of CI, therefore we need to modify the spec file that is used. + + oscap-anaconda-addon.spec | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit d42b9e21d418b4970e6de7fd913419d4ce0d2597 +Merge: 2fdd3a0 7af8540 +Author: Jan Černý +Date: 2019-01-04 + + Merge pull request #87 from ggbecker/rhel7-branch + + Enhance zanata's dependency interoperability. + +commit 2fdd3a0789458b0cd2c18ed9a2e4c97eff9537c1 +Merge: cc3ecfc 338bef0 +Author: Jan Černý +Date: 2019-01-04 + + Merge pull request #90 from ggbecker/remove-outdated-makefile-help-rhel7-branch + + Remove outdated Makefile help usage and update development guide. + +commit cc3ecfc1a56e03eead73769e7864aeb63c20a1db +Merge: c83a51c 3477910 +Author: Jan Černý +Date: 2019-01-04 + + Merge pull request #89 from ggbecker/fix-typos-rhel7-branch-v2 + + Fix typos in developer guide documentation. + +commit 338bef0533358be90fc7b1f4b50eacfb49cdd71b +Author: Gabriel Becker +Date: 2019-01-03 + + Remove outdated Makefile help usage and update development guide. + + Update development guide with available Makefile commands. + + Makefile | 4 ---- + docs/manual/developer_guide.adoc | 27 ++++++++++++++++++++++++++- + po/Makefile | 1 + + 3 files changed, 27 insertions(+), 5 deletions(-) + +commit 34779104a3f2e9df343bf687321c8d55081b5b7b +Author: Gabriel Becker +Date: 2019-01-04 + + Fix typos in developer guide documentation. + + docs/manual/developer_guide.adoc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 7af85406814c19bd1e7ba99fda5e3e32e10424e8 +Author: Gabriel Becker +Date: 2019-01-02 + + Enhance zanata's dependency interoperability. + + Package name has changed in some newer distros and causes error when + trying to pull translations. + + Makefile | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit c83a51c0065a7aca0a8358246b8872f5284ff46c +Merge: 5340076 356189c +Author: Gabriel Gaspar Becker +Date: 2019-01-02 + + Merge pull request #86 from matejak/lang-patch + + Added script for generation of translation patches. + +commit 356189c7718cd5f67c89d6f0c52cfaee83344ddf +Author: Matěj Týč +Date: 2019-01-02 + + Small language option improvements. + + - Removed the -l option from languages. + - Added a hint to language option help message. + + tools/make-language-patch | 13 +++++-------- + 1 file changed, 5 insertions(+), 8 deletions(-) + +commit 456e2644386dfc59e01c23e7b7468924dbaa32e5 +Author: Matěj Týč +Date: 2018-12-20 + + Improved the patch-crafting script so it can be called from another directory. + + And also added the -l option for the local content. + + tools/make-language-patch | 23 +++++++++++++++-------- + 1 file changed, 15 insertions(+), 8 deletions(-) + +commit b7d8750205ef60d73f698867be7ae76a68b58804 +Author: Matěj Týč +Date: 2018-12-14 + + Added script for generation of translation patches. + + docs/manual/developer_guide.adoc | 7 ++ + tools/make-language-patch | 213 +++++++++++++++++++++++++++++++++++++++ + 2 files changed, 220 insertions(+) + +commit 19ec34835d2635489a2dae776f1cbf6e87c3a103 +Author: Watson Sato +Date: 2018-11-14 + + Add tests for extraction of tailoring rpm + + Includes an rpm file whose file listing we know. + + .../ssg-fedora-ds-tailoring-1-1.noarch.rpm | Bin 0 -> 313168 bytes + tests/test_common.py | 50 +++++++++++++++++++++ + 2 files changed, 50 insertions(+) + +commit 7df5ad6fefbfec0895bb5144efc9c8f32059f8d3 +Author: Watson Sato +Date: 2018-11-13 + + Fix extraction of data from ssg like rpm + + Paths that should be directory were being extracted as an empty file. + + org_fedora_oscap/common.py | 2 ++ + 1 file changed, 2 insertions(+) + +commit 8195b97d64792e81bdcfa104d4967c7b2ba47a6a +Author: Watson Sato +Date: 2018-11-13 + + Add tests for extraction of ssg rpm + + Includes an rpm file whose file listing we know. + + testing_files/scap-security-guide.noarch.rpm | Bin 0 -> 673184 bytes + tests/test_common.py | 73 +++++++++++++++++++++++++++ + 2 files changed, 73 insertions(+) + +commit ec2c10682bdbd5cff0da70ff5e89aa574f592ad6 +Merge: 23576d5 ccd4e2f +Author: Matěj Týč +Date: 2018-10-11 + + Merge pull request #82 from M4rtinK/patch-2 + + Set help id for the OSCAP addon provided spoke (#1638068) + +commit ccd4e2f078d00fa4570d2bd56802c726286d1020 +Author: Martin Kolman +Date: 2018-10-10 + + Set help id for the OSCAP addon provided spoke (#1638068) + + The new Anaconda help system now operates on help ids instead of pointing to + individual files. + + So drop the old property and replace it with a proper help_id. + + Resolves: rhbz#1638068 + + org_fedora_oscap/gui/spokes/oscap.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 23576d522b459b26e045038941f08f411657ca35 +Merge: dc343ec 9b81d01 +Author: Watson Yuuma Sato +Date: 2018-10-10 + + Merge pull request #81 from matejak/anaconda_update + + Updated the code to work with current devel Anaconda. + +commit 9b81d0180572dea10f9306de1a819d4a70fe5020 +Author: Matěj Týč +Date: 2018-10-09 + + Added a test skip if import fail. + + In transitional phases, where the rhel-devel branch doesn't exist in + the latest stable Fedora neither in latest RHEL, getting the Anaconda + dependency right may be nearly impossible. + + tests/test_ks_oscap.py | 9 +++++++-- + tests/test_rule_handling.py | 7 ++++++- + 2 files changed, 13 insertions(+), 3 deletions(-) + +commit 9a9df25c4c23797bdf014d4e498c7f4d05d4cb72 +Author: Matěj Týč +Date: 2018-10-09 + + Updated the code to work with current devel Anaconda. + + org_fedora_oscap/rule_handling.py | 117 ++++++++++++++++++++++++-------------- + 1 file changed, 74 insertions(+), 43 deletions(-) + +commit dc343ec1f94aab208ec58fbace614f16a38b2dcb +Merge: fa593e1 977cd82 +Author: Matus Marhefka +Date: 2018-08-14 + + Merge pull request #75 from matejak/merge-tests + + Merge branch 'rhel7-branch' into master. + +commit 977cd82d2b6c27fd6acf7a782d2efe26f810c58e +Merge: b1ea9d9 5340076 +Author: Matěj Týč +Date: 2018-08-13 + + Merge developer guide updates into master. + +commit 534007690f10d835c1b0a867335ee267dfb20ca2 +Merge: cb6e1b7 8e86235 +Author: Martin Preisler +Date: 2018-08-13 + + Merge pull request #78 from matejak/docs-update + + Update of documentation. + +commit b1ea9d93aae6482e70ff26584cb29df8da449b2c +Author: Matěj Týč +Date: 2018-08-13 + + Improved documentation part of the merge. + + docs/manual/developer_guide.adoc | 16 ++++++++-------- + oscap-anaconda-addon.spec | 2 +- + 2 files changed, 9 insertions(+), 9 deletions(-) + +commit 8e86235da4b5b80b9b951b35306ebb6871b97804 +Author: Matěj Týč +Date: 2018-08-13 + + Update of documentation. + + docs/manual/developer_guide.adoc | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 9e7fae4b5f5ec9fc4ddf227dc82931fd89099682 +Merge: 370f155 cb6e1b7 +Author: Matěj Týč +Date: 2018-07-31 + + Merged developer documentation and updated the spec file. + +commit cb6e1b75be3b13400d5673974a363ce55ed0ae00 +Merge: cff3bb9 9e6b428 +Author: Alexander Scheel +Date: 2018-07-30 + + Merge pull request #76 from matejak/update-spec + + Replaced the spec file with spec file closer to the RHEL7 spec. + +commit cff3bb934022b5c158e6a9076515094b71949e02 +Merge: 0b25707 0021f6b +Author: Matěj Týč +Date: 2018-07-27 + + Merge pull request #77 from jan-cerny/asciidoc + + Fix developer guide to support asciidoc + +commit 0021f6b959a96bee3c9d55e92bb17df1ace74fce +Author: Jan Černý +Date: 2018-07-27 + + Fix developer guide to support asciidoc + + We previously tried only asciidoctor, but we need to be able to + use asciidoc. + + docs/manual/developer_guide.adoc | 27 +++++++++++++++------------ + 1 file changed, 15 insertions(+), 12 deletions(-) + +commit 9e6b428924a026f3409425dbd0ca4311696708ce +Author: Matěj Týč +Date: 2018-07-24 + + Replaced the spec file with spec file closer to the RHEL7 spec. + + oscap-anaconda-addon.spec | 280 +++++++++++++++++++++++++++++----------------- + 1 file changed, 178 insertions(+), 102 deletions(-) + +commit 370f1557d3bda05823a44b663cb279463638e7e2 +Merge: fa593e1 0b25707 +Author: Matěj Týč +Date: 2018-07-23 + + Merge branch 'rhel7-branch' into master. + + * Merged developer documentation. + * Merged conversion of tests to the pytest framework. + +commit 0b25707258f9b56e548a89e3fc2fb8f30a803418 +Merge: 8617a0f c45093d +Author: Jan Černý +Date: 2018-07-18 + + Merge pull request #74 from matejak/pytest-continue + + Added pytest conversion of the content handling test. + +commit c45093dd6dcc7957767b4908ce47b80e20dd2f33 +Author: Matěj Týč +Date: 2018-07-11 + + Added content handling test. + + tests/test_content_handling.py | 86 ++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 86 insertions(+) + +commit 8617a0ff499b3375b09a76387d918b451a7d5bc0 +Merge: 00726c1 a1a388b +Author: Marek Haičman +Date: 2018-07-10 + + Merge pull request #72 from matejak/refactors + + Refactored tests + +commit a1a388b5654c2ef416e3c9294205a0304322cad9 +Author: Matěj Týč +Date: 2018-07-10 + + Made the password length test more robust. + + tests/test_rule_handling.py | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +commit 9b3bd603122d781c824544d04a370e5a006885ba +Author: Matěj Týč +Date: 2018-07-10 + + Improved structure of partition tests. + + tests/test_rule_handling.py | 65 ++++++++++++++++++++++++++++++--------------- + 1 file changed, 44 insertions(+), 21 deletions(-) + +commit 508c9254e80b9b6b3d58cb5861a7a4b745f8fd55 +Author: Matěj Týč +Date: 2018-07-10 + + Added data fetch test. + + tests/test_data_fetch.py | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit 174ca9346b793988989343e02eddc943092829e2 +Author: Matěj Týč +Date: 2018-07-03 + + Added missed rule_handling tests. + + tests/test_rule_handling.py | 109 ++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 109 insertions(+) + +commit eee01774f5e3e1510f44c75291a98da62bab4fed +Author: Matěj Týč +Date: 2018-06-26 + + RHEL7-specific fixes. + + tests/test_common.py | 2 +- + tests/test_utils.py | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 573440fc7dce774e1f695470b2387d84aaf85352 +Author: Matěj Týč +Date: 2018-06-21 + + Updated the build system to use pytest for tests. + + Makefile | 4 ++-- + docs/manual/developer_guide.adoc | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit 1aac0c04680d2817c0ea6a3448670d6b252cbc93 +Author: Matěj Týč +Date: 2018-06-20 + + Converted the rest of the tests. + + tests/content_handling_test.py | 102 ----------------------------- + tests/data_fetch_test.py | 35 ---------- + tests/test_utils.py | 145 +++++++++++++++++++++++++++++++++++++++++ + tests/utils_test.py | 144 ---------------------------------------- + 4 files changed, 145 insertions(+), 281 deletions(-) + +commit 75cb7f8689d48fdc71f9bc7c0312a70e73aee36b +Author: Matěj Týč +Date: 2018-06-20 + + Refactored ks_oscap tests. + + tests/ks_oscap_test.py | 383 ------------------------------------------------- + tests/test_ks_oscap.py | 317 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 317 insertions(+), 383 deletions(-) + +commit 04dca1995ab2bae422b0b1beb1ab88b16459213a +Author: Matěj Týč +Date: 2018-06-18 + + Refactored rule handling. + + tests/rule_handling_test.py | 717 -------------------------------------------- + tests/test_rule_handling.py | 560 ++++++++++++++++++++++++++++++++++ + 2 files changed, 560 insertions(+), 717 deletions(-) + +commit c99384c3018ea25f8b38ff986cdefb34dcbbe9af +Author: Matěj Týč +Date: 2018-06-15 + + Refactored test common module. + + tests/common_test.py | 157 --------------------------------------------------- + tests/test_common.py | 145 +++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 145 insertions(+), 157 deletions(-) + +commit fa593e130189dfef70ac7dcbc634677455028c76 +Author: Matěj Týč +Date: 2018-07-02 + + Post-release version bump. + + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 67a35649718fd4a5e8c02b5066773d3c4bf67437 +Author: Matěj Týč +Date: 2018-07-02 + + The 1.0 release. + + Makefile | 2 +- + po/oscap-anaconda-addon.pot | 52 ++++++++++++++++++++++----------------------- + 2 files changed, 27 insertions(+), 27 deletions(-) + +commit 7dbfb0a491c87c5ec9222685e338d5f50eb8797b +Merge: 30f5015 f482ed0 +Author: Marek Haičman +Date: 2018-07-02 + + Merge pull request #73 from matejak/create-image-ux-improv + + Improved UX of the create image script. + +commit f482ed02d988b450e76dca03b54cbb5095490ee8 +Author: Matěj Týč +Date: 2018-07-02 + + Improved UX of the create image script. + + The script aborts the image creation procedure and prints + a meaningful message whenever a step fails. + + create_update_image.sh | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +commit 30f5015dc89ed34b32333b08ffd0820de1dd875e +Merge: d462aa1 be147fe +Author: Watson Yuuma Sato +Date: 2018-06-20 + + Merge pull request #68 from matejak/merge7 + + Merge rhel7 branch into master. + +commit be147fe39c5674495d3393d7beedd61bb655ad8f +Author: Matěj Týč +Date: 2018-06-20 + + Updated tests to reflect Python3 changes. + + Process stderr/stdout now return bytes, not strings. + + tests/common_test.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 635b6b6fbad15ea6d33fe24cb3894811b3ff8abe +Author: Matěj Týč +Date: 2018-06-20 + + Refactored subprocess executions. + + org_fedora_oscap/common.py | 80 +++++++++++++++++++++++----------------------- + 1 file changed, 40 insertions(+), 40 deletions(-) + +commit 14633a9a9540df7506ec2c89e50997f57bf7e3d2 +Author: Matěj Týč +Date: 2018-06-20 + + Added releasever option to the image creation script. + + create_update_image.sh | 44 +++++++++++++++++++++++++++++--------------- + 1 file changed, 29 insertions(+), 15 deletions(-) + +commit 670e98aa8fc56fbc95d4e8d499d0c0c7320cf090 +Author: Matěj Týč +Date: 2018-06-14 + + Fixed bugs, improved debugging, added tests. + + - Fixed a couple of bytes vs strings issues. + - Improved logging output. + - Added a test for remote content retreival. + + org_fedora_oscap/common.py | 8 +++--- + org_fedora_oscap/content_handling.py | 9 ++++--- + org_fedora_oscap/data_fetch.py | 2 +- + org_fedora_oscap/gui/spokes/oscap.py | 9 +++++-- + tests/test_data_fetch.py | 49 ++++++++++++++++++++++++++++++++++++ + 5 files changed, 68 insertions(+), 9 deletions(-) + +commit 3f4bd903ef7bd0ac0323ad8488aa46b583243d57 +Author: Matěj Týč +Date: 2018-06-13 + + Improve usability of OAA support tooling on Fedora. + + Makefile | 3 +- + create_update_image.sh | 189 +++++++++++++++++++++++++++++++++++++-- + docs/manual/developer_guide.adoc | 18 +++- + 3 files changed, 197 insertions(+), 13 deletions(-) + +commit 00726c1b18270c1c2da6b05f12101b2a7be7e0a8 +Merge: 7d59da5 e954b54 +Author: Martin Preisler +Date: 2018-06-18 + + Merge pull request #71 from matejak/zip_fix_backport + + Zipfile handling fix backport + +commit e954b549057336748843991f6c2e4cec1c82ef23 +Author: Dardo D Kleiner +Date: 2018-06-13 + + fix use-after-close of zipfile and tfile + + org_fedora_oscap/common.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit d462aa1c4000c68fa2fd619a0154ac76a7748841 +Merge: c53b68b c9f78f2 +Author: Matěj Týč +Date: 2018-06-13 + + Merge pull request #69 from dardok/fix-archive-extraction + + fix use-after-close of zipfile and tfile + +commit c9f78f2425ed5bcf24255c8c54b8c8eb380d54c6 +Author: Dardo D Kleiner +Date: 2018-06-13 + + fix use-after-close of zipfile and tfile + + org_fedora_oscap/common.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 473d908ee233ae30c91a6d496ecc96bd6cd8b8d8 +Author: Matěj Týč +Date: 2018-06-13 + + Updated the code, so it works with latest Anaconda. + + - Copied implementation of GtkActionList, which has been removed from Anaconda. + - Renamed gtk_action_wait to async_action_wait + + org_fedora_oscap/gui/spokes/oscap.py | 64 +++++++++++++++++++++++++----------- + 1 file changed, 44 insertions(+), 20 deletions(-) + +commit 9b3305e286bf290590c724c33393bb7cfe6adfbe +Author: Matěj Týč +Date: 2018-06-12 + + Fixed Py3 patterns. + + - Fixed exception messages extraction. + - Fixed internationalization support to mimick actual pyanaconda source. + + org_fedora_oscap/common.py | 19 ++++++++++++++++--- + org_fedora_oscap/gui/spokes/oscap.py | 8 ++++---- + org_fedora_oscap/ks/oscap.py | 9 +++------ + org_fedora_oscap/rule_handling.py | 4 ++-- + tests/content_handling_test.py | 8 ++++---- + 5 files changed, 29 insertions(+), 19 deletions(-) + +commit 8f7d5b8b4e25901ea95f5c862de338bd0182b091 +Author: Matěj Týč +Date: 2018-06-12 + + Updated imports to work with new anaconda. + + Courtesy of Yuuma Sato wsato@redhat.com + + org_fedora_oscap/common.py | 4 ++-- + org_fedora_oscap/content_handling.py | 2 +- + org_fedora_oscap/gui/spokes/oscap.py | 2 +- + org_fedora_oscap/ks/oscap.py | 4 ++-- + 4 files changed, 6 insertions(+), 6 deletions(-) + +commit 4de0b0608e447e73c7e7c701939068b07846a6a9 +Merge: c53b68b 7d59da5 +Author: Matěj Týč +Date: 2018-06-12 + + Merge branch 'rhel7-branch' + +commit 7d59da5a80c633de027bb4d737ed4b6c4b67e32b +Merge: 5232be8 6b08d4b +Author: Martin Preisler +Date: 2018-06-04 + + Merge pull request #67 from yuumasato/update_for_release + + Update version and translation files for release + +commit 6b08d4be982c0864e6223671f4e1a3c0b64d4fae +Author: Watson Sato +Date: 2018-06-04 + + Updates version and translation files for release + + - Bump version in makefile and specfile + - Generate potfile + + Makefile | 2 +- + oscap-anaconda-addon.spec | 2 +- + po/oscap-anaconda-addon.pot | 138 ++++++++++++++++++++++++++++++-------------- + 3 files changed, 97 insertions(+), 45 deletions(-) + +commit 5232be8fd443d84a313023866244aa5dfd726a74 +Author: Gabe +Date: 2018-04-23 + + Fix typos in firewall rule_handling.py + + org_fedora_oscap/rule_handling.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit d9974fbe7852ecbd79d3d5a0444cbde8f6c9bc05 +Author: Gabe +Date: 2018-04-11 + + Add firewall rules + + - Fixes #19 + + org_fedora_oscap/rule_handling.py | 287 +++++++++++++++++++++++++++++++++++++- + 1 file changed, 286 insertions(+), 1 deletion(-) + +commit 2ef8e5db89f37437252c831f2f69e5dd803f881b +Merge: 5d13ba4 4a6c81c +Author: Martin Preisler +Date: 2018-04-30 + + Merge pull request #66 from matejak/improve-docs + + Expanded the 'how to test' document. + +commit 4a6c81c5025100f39c0e08155daff012ab0245ee +Author: Matěj Týč +Date: 2018-04-30 + + Expanded the 'how to test' document. + + docs/manual/developer_guide.adoc | 49 +++++++++++++++++++++++++++++++--------- + 1 file changed, 38 insertions(+), 11 deletions(-) + +commit c53b68bc68f59ef3e0929ea4e7031102eeff95cf +Merge: e72acc0 5d13ba4 +Author: Martin Preisler +Date: 2018-04-23 + + Merge branch 'rhel7-branch' + +commit 5d13ba4da9687482e3806050342011657080dbd2 +Merge: 92a02a3 6fd1958 +Author: Martin Preisler +Date: 2018-04-20 + + Merge pull request #65 from matejak/pep8 + + Added PEP8 99-width config. + +commit 6fd195886ac1d2a3cc4b041b0da64a8f93a67e06 +Author: Matěj Týč +Date: 2018-04-20 + + Added PEP8 99-width config. + + .pep8speaks.yml | 2 ++ + 1 file changed, 2 insertions(+) + +commit 92a02a3690d5dd8ef13caaf52e13b4204fc18bf5 +Merge: 6b7ced8 7f6cf03 +Author: Matěj Týč +Date: 2018-04-11 + + Merge pull request #63 from redhatrises/add_kdump_addon_handling + + Add new kdump --disable rule handling + +commit 7f6cf03e2e5389555b69c2aec9a30867889f1362 +Author: Gabe +Date: 2018-04-10 + + Update if-else to use is instead of == and fix kdump_enabled logic + + org_fedora_oscap/rule_handling.py | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit 3df75d37fa2e31ac461bc5af73d7bff6166245f1 +Author: Gabe +Date: 2018-04-05 + + Simplify logic in Kdump revert_changes function + + org_fedora_oscap/rule_handling.py | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +commit b7c397c2d9e68ab1d9850763655f768ae6308e59 +Author: Gabe +Date: 2018-04-03 + + Simplify if logic in kdump_enabled function + + org_fedora_oscap/rule_handling.py | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit 646dfce5baeeb359fb4904aaf19eed325b903127 +Author: Gabe +Date: 2018-03-29 + + Handle Kdump Addon default setting + + org_fedora_oscap/rule_handling.py | 19 ++++++++++++++----- + 1 file changed, 14 insertions(+), 5 deletions(-) + +commit faefcabba927c1b7e9776c85611845dbdcb94ca1 +Author: Gabe +Date: 2018-03-29 + + Fix kdump if logic + + org_fedora_oscap/rule_handling.py | 26 ++++++++++++-------------- + 1 file changed, 12 insertions(+), 14 deletions(-) + +commit d46efdaf6dd5ab891e8a5143536d34d54f9a8d73 +Author: Gabe +Date: 2018-03-29 + + Update Kdump revert_changes to handle missing addon + + org_fedora_oscap/rule_handling.py | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +commit 881a39519ee95f65f985836d6a97ade001300e84 +Author: Gabe +Date: 2018-03-29 + + Refactor some of the code handling for KdumpRules + + org_fedora_oscap/rule_handling.py | 47 ++++++++++++++++++++++++++------------- + 1 file changed, 31 insertions(+), 16 deletions(-) + +commit 14c3d2c1ba11062619788068e3e03efc87ed8704 +Author: Gabe +Date: 2018-03-27 + + Add default for Kdump arg + + org_fedora_oscap/rule_handling.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 66feeeff6e7b9719994a2ddda8b586d8c2c49097 +Author: Gabe +Date: 2018-03-27 + + Reset dump rule_handling to defaults in KdumpRules.revert_changes + + org_fedora_oscap/rule_handling.py | 2 ++ + 1 file changed, 2 insertions(+) + +commit 5b93fbeed7d63515fd345efa6d4e2aca4dcd8892 +Author: Gabe +Date: 2018-03-27 + + Add new kdump --disable rule handling + + - Adds new `kdump --disable` handling that can be added to anaconda scripts + to be able to disable kdump from OSCAP content + + org_fedora_oscap/rule_handling.py | 61 +++++++++++++++++++++++++++++++++++++++ + 1 file changed, 61 insertions(+) + +commit 6b7ced8ab74e6200edf61afea7c621e8a9a186fa +Merge: 93bbb94 82494d3 +Author: Marek Haičman +Date: 2018-03-27 + + Merge pull request #62 from redhatrises/clarify_part_msg + + Clarify that missing partitions need to be created before selecting profile + +commit 82494d3ab5ef727bffde57a8283623361c227779 +Author: Gabe +Date: 2018-03-27 + + Fix phrasing and translation string for mountpoint + + org_fedora_oscap/rule_handling.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit ef8f02ab0a718abeeb86cf4ccb24c687413f6e55 +Author: Gabe +Date: 2018-03-26 + + Clarify that missing partitions need to be created before selecting profile + + org_fedora_oscap/rule_handling.py | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 93bbb94ff0ef99e11f6b11a70e25a4ee4d8a6fde +Merge: 64f9b03 84fbbe4 +Author: Marek Haičman +Date: 2018-02-06 + + Merge pull request #61 from yuumasato/setup_translation_domain + + Define translation domain in OSCAPSpoke + +commit 84fbbe4a72073ec9077ee6c5a389f637c8f7e634 +Author: Watson Sato +Date: 2018-02-01 + + Define translation domain in OSCAPSpoke + + UI doesn't show translations if translation domain is not defined. + + org_fedora_oscap/gui/spokes/oscap.glade | 2 +- + org_fedora_oscap/gui/spokes/oscap.py | 3 +++ + 2 files changed, 4 insertions(+), 1 deletion(-) + +commit 64f9b03b50458d5f4625b08977b96ab78b0a3daf +Merge: da041d0 e7ac4c1 +Author: Marek Haičman +Date: 2018-01-09 + + Merge pull request #58 from yuumasato/add_tests_datastream_handler + + Add tests datastream handler + +commit e7ac4c1e655f9e705b6803b0d53123484a88befa +Author: Watson Sato +Date: 2018-01-09 + + Include testing_files in dist tarball + + Testing content testing_ds.xml, testing_ks.cfg, and xccdf.xml + are used to test DataStreamHandler. + + Makefile | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit da041d01499d0dfadbc1d9f7688dcf9ed36f1c24 +Merge: 4758e9d 25a9e11 +Author: Marek Haičman +Date: 2018-01-05 + + Merge pull request #57 from yuumasato/improve_password_report_only_test + + Improve test for password rule when report only is True + +commit fcc46fc900210cf48f780cff2f176548ef61d5b1 +Author: Watson Sato +Date: 2017-12-21 + + Free OSCAP session only if it exists + + When DataStreamHandler constructor receives invalid path to content, + no OSCAP session is created. + So, check if exists before deleting. + + org_fedora_oscap/content_handling.py | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit dc1ab98d6e96bd962f94166099a180e324cbdf4e +Author: Watson Sato +Date: 2017-12-21 + + Add tests for DataStreamHandler + + - tests for invalid path and content on object creation + - test for fetching datastream ids + test for fetching checklist ids + - test for fetching profile ids + + tests/content_handling_test.py | 102 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 102 insertions(+) + +commit 25a9e11eee764c4f8d0ad373f9de3cdf52529bf6 +Author: Watson Sato +Date: 2017-12-20 + + Improve password rule report only test + + Add asserts for other relevant values which should not be changed + when report only is True. + + tests/rule_handling_test.py | 23 ++++++++++++++++++++--- + 1 file changed, 20 insertions(+), 3 deletions(-) + +commit 4758e9d8caf64ca5601c7eb08cba1c15eaa2eb87 +Merge: 2808849 99138ca +Author: Marek Haičman +Date: 2017-12-12 + + Merge pull request #56 from jan-cerny/rhbz1520276 + + Fix a traceback in os.path.exists + +commit 99138cad106f2686c1327d03ca295e5a5e8cc2b4 +Author: Jan Černý +Date: 2017-12-12 + + Fix a traceback in os.path.exists + + Fixes rhbz #1520276. Addressing: + Traceback (most recent call first): + File "/usr/lib64/python2.7/genericpath.py", line 18, in exists + os.stat(path) + File "/usr/share/anaconda/addons/org_fedora_oscap/ks/oscap.py", line 546, in execute + if os.path.exists(self.preinst_tailoring_path): + File "/usr/lib64/python2.7/site-packages/pyanaconda/addons.py", line 88, in execute + v.execute(storage, ksdata, instClass, users, payload) + File "/usr/lib64/python2.7/site-packages/pyanaconda/install.py", line 109, in doConfiguration + ksdata.addons.execute(storage, ksdata, instClass, u, payload) + File "/usr/lib64/python2.7/threading.py", line 765, in run + self.__target(*self.__args, **self.__kwargs) + File "/usr/lib64/python2.7/site-packages/pyanaconda/threads.py", line 227, in run + threading.Thread.run(self, *args, **kwargs) + TypeError: coercing to Unicode: need string or buffer, NoneType found + + org_fedora_oscap/ks/oscap.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 280884976a356ed554c7f235479cb7f98d2ae3d2 +Merge: d4e2a86 acc6cb7 +Author: Martin Preisler +Date: 2017-11-15 + + Merge pull request #55 from jan-cerny/new_test + + Add unittest for report_only parameter + +commit d4e2a867bf593806d47bb000b6ea6f7c8cd3283c +Author: Martin Preisler +Date: 2017-11-14 + + Updated .gitignore + + .gitignore | 3 +++ + 1 file changed, 3 insertions(+) + +commit acc6cb7538dc4a70111a9d45218d09c3d8d4e699 +Author: Jan Černý +Date: 2017-11-14 + + Add unittest for report_only parameter + + This test should be part of PR #53, but that was already merged. + + tests/rule_handling_test.py | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + +commit 6c31b34a9da4aac05821cd0625124c4078832f1d +Merge: 37c08de 05fff47 +Author: Matus Marhefka +Date: 2017-11-14 + + Merge pull request #54 from jan-cerny/unit_test_doc + + Describe unit tests in Developer Guide + +commit 05fff4727870e5858a5bb79656f56c1694e8d597 +Author: Jan Černý +Date: 2017-11-14 + + Describe unit tests in Developer Guide + + I had a problem with dependencies of unit tests. Documentation + of unit tests was missing. + + docs/manual/developer_guide.adoc | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +commit 37c08de227f2bf94ce2cb47545706560a512f50e +Author: Martin Preisler +Date: 2017-11-13 + + Bumped version to 0.8 + + Makefile | 2 +- + oscap-anaconda-addon.spec | 17 ++++++++++++++--- + 2 files changed, 15 insertions(+), 4 deletions(-) + +commit 0a496f779010e34d4437fcd787a60c4fdf25f1e0 +Merge: 9e3a10a 9ad7d8e +Author: Marek Haičman +Date: 2017-11-13 + + Merge pull request #53 from jan-cerny/password_reset + + Fix password rules cleaning + +commit 9ad7d8e17e1e810b75630648a96dfc04862154d7 +Author: Jan Černý +Date: 2017-11-07 + + Fix password rules cleaning + + During manual installation when profile affecting password was selected, + selection of another profile did not clear the password requirements. + The method revert_changes didn't work because the saved old password + length was overwritten each time when eval_rules was invoked. + Saved old password length should be overwritten only if the eval_rules + method is called with report_only set to False. + Fixes rhbz #1374181 and issue #52. + + org_fedora_oscap/rule_handling.py | 3 +++ + 1 file changed, 3 insertions(+) + +commit 9e3a10a5a57dc8f3ecf6713eab3a0652dcfbd4aa +Merge: 9bd3cc6 ff5824b +Author: Matus Marhefka +Date: 2017-10-27 + + Merge pull request #51 from jan-cerny/keyerror + + Catch KeyError + +commit ff5824bae6f83798275939ba3c205455e64aa7a4 +Author: Jan Černý +Date: 2017-10-27 + + Catch KeyError + + Make sure it checks for empty actions dictionary. + + org_fedora_oscap/rule_handling.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9bd3cc66c67796e0455229a5bd0e36f23058362b +Merge: 1e8e358 bfa04d6 +Author: Matus Marhefka +Date: 2017-10-25 + + Merge pull request #49 from jan-cerny/rhbz1452667 + + RHBZ#1452667: Catch Anaconda Remediations parsing errors + +commit 1e8e3582dacf07e254d64756bbbc341b01211636 +Merge: 8e9401a 6e90963 +Author: redhatrises +Date: 2017-10-24 + + Merge pull request #50 from jan-cerny/improve_guide + + Improve developer guide formating + +commit 6e90963683bfd779cb06dcfd5299525211e86ee7 +Author: Jan Černý +Date: 2017-10-24 + + Improve developer guide formating + + The organization od the document was confused + + docs/manual/developer_guide.adoc | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +commit bfa04d607f73df491ea2aa5e5cd291dfcaff88a9 +Author: Jan Černý +Date: 2017-10-24 + + RHBZ#1452667: Catch Anaconda Remediations parsing errors + + The parser won't exit if it encouters something unexpected + in Ananconda remediations. Instead it will report a warning to log. + + Log this incident instead. + + org_fedora_oscap/rule_handling.py | 28 ++++++++++++++++++++-------- + 1 file changed, 20 insertions(+), 8 deletions(-) + +commit 8e9401ae2c6ea4cc0e42a1185931b33f8b091ac9 +Merge: b010f95 c4980f3 +Author: Marek Haičman +Date: 2017-09-27 + + Merge pull request #48 from yuumasato/ssg-use-ds-by-default + + When using content from SSG, use the DataStream by default + +commit b010f95b3de288b55efca66aa2d4cbf1ffbb2153 +Merge: c8d3d6e 383cc01 +Author: redhatrises +Date: 2017-09-26 + + Merge pull request #39 from jan-cerny/issue36 + + Don't forget to copy tailoring to new path + +commit c4980f356690768858780d5e81490230b0e04381 +Author: Watson Sato +Date: 2017-09-26 + + Fix parsing test for content-path + + tests/ks_oscap_test.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit eacd5e35ac9676e5018bfb4012bb67d7b52d6f11 +Author: Watson Sato +Date: 2017-09-26 + + Name constant for SSG default content SSG_CONTENT + + org_fedora_oscap/common.py | 8 ++++---- + org_fedora_oscap/gui/spokes/oscap.py | 4 ++-- + org_fedora_oscap/ks/oscap.py | 2 +- + 3 files changed, 7 insertions(+), 7 deletions(-) + +commit db32780339c586ee92ce1b24fa19dd3729e9cf6e +Author: Watson Sato +Date: 2017-09-26 + + Add tests for content-path + + Change ParsingTest to use and expect content-path instead of xccdf-path. + Add BackwardCompatibilityParsingTest, which uses xccdf-path but expects + content-path. + OAA still accepts xccdf-path, but will use content-path internally. + + tests/ks_oscap_test.py | 34 ++++++++++++++++++++++++++++++++-- + 1 file changed, 32 insertions(+), 2 deletions(-) + +commit 1d97304abc9fe7e670cdef12faf6c47bc2587bbc +Author: Watson Sato +Date: 2017-09-26 + + Add new key content-path + + Use of 'xccdf-path' to point to DataStream can be confusing, so + introduce 'content-path' to specify path of content files. + 'content-path' can point to a XCCDF or DataStream file. + + 'xccdf-path' still works as usual, for backwards compatibility. + + org_fedora_oscap/gui/spokes/oscap.py | 8 ++++---- + org_fedora_oscap/ks/oscap.py | 27 ++++++++++++++------------- + tests/ks_oscap_test.py | 8 ++++---- + 3 files changed, 22 insertions(+), 21 deletions(-) + +commit f8e6f7096004675a43d17506dd090997600a53e2 +Author: Watson Sato +Date: 2017-09-26 + + Load DataStream when using content from SSG + + Instead of loading XCCDF files from SSG load DataStream. + + DataStreams carry everything needed bundled within, including CPE + dictionary, and OVAL definitions. + + This fixes problem with Rules returning notapplicable when it applies to + CPE "cpe:/a:machine". + + org_fedora_oscap/common.py | 8 ++++---- + org_fedora_oscap/gui/spokes/oscap.py | 4 ++-- + org_fedora_oscap/ks/oscap.py | 2 +- + 3 files changed, 7 insertions(+), 7 deletions(-) + +commit e72acc092a1d8833488dcb7e240ddbf1afccda11 +Merge: f32e614 701ac1f +Author: Jan Černý +Date: 2017-09-15 + + Merge pull request #45 from redhatrises/master_python3 + + [master] Update to python3 + +commit 701ac1fc629043f6cb6f27654327a13dc0335b85 +Author: Gabe +Date: 2017-09-13 + + [master] Fix some python3 pep8 complaints + + org_fedora_oscap/content_handling.py | 11 +++++++---- + org_fedora_oscap/rule_handling.py | 15 +++++++++------ + tests/ks_oscap_test.py | 14 +++++++------- + 3 files changed, 23 insertions(+), 17 deletions(-) + +commit 44c67eb4f877f49d15e414e90ebc8013e560e793 +Author: Gabe +Date: 2017-09-13 + + Update next assert to check for __next__ instead of next + + tests/utils_test.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 96caa41366528c695e98efc2adc9b4a29262ae83 +Author: Gabe +Date: 2017-09-13 + + [master] Update to python3 + + - Update code and tests to support python3 + + org_fedora_oscap/content_handling.py | 2 +- + org_fedora_oscap/gui/spokes/oscap.py | 6 +++--- + org_fedora_oscap/rule_handling.py | 6 +++--- + tests/common_test.py | 10 +++++----- + tests/ks_oscap_test.py | 14 +++++++------- + tests/utils_test.py | 6 +++--- + 6 files changed, 22 insertions(+), 22 deletions(-) + +commit f32e614fcc95d1adaa267613c21881b5145d48b5 +Merge: c92fe04 c8d3d6e +Author: Gabe +Date: 2017-09-11 + + Merge branch 'rhel7-branch' + +commit c8d3d6ea652a9615e38789b41dea33ddc39f7911 +Merge: 9ee8987 6347191 +Author: Jan Černý +Date: 2017-09-11 + + Merge pull request #46 from redhatrises/pep8_fixes + + More PEP8 fixes + +commit 63471914ce6b829132201633c1c4359fec178484 +Author: Gabe +Date: 2017-09-09 + + More PEP8 fixes + + org_fedora_oscap/content_handling.py | 45 ++++++++----- + org_fedora_oscap/data_fetch.py | 8 +++ + org_fedora_oscap/gui/spokes/oscap.py | 87 ++++++++++++++----------- + org_fedora_oscap/ks/oscap.py | 68 +++++++++++--------- + org_fedora_oscap/rule_handling.py | 70 ++++++++++++-------- + org_fedora_oscap/utils.py | 10 ++- + tests/data_fetch_test.py | 1 + + tests/ks_oscap_test.py | 33 ++++++---- + tests/rule_handling_test.py | 121 ++++++++++++++++++++++------------- + tests/utils_test.py | 3 + + 10 files changed, 278 insertions(+), 168 deletions(-) + +commit 9ee8987349ad5f68b9c8eef4587992da1586b5d4 +Merge: e0eed5f e306acb +Author: Marek Haičman +Date: 2017-09-09 + + Merge pull request #44 from redhatrises/update_spec_file + + Update .spec file + +commit e0eed5f0b4f9f7158fbd6dc0c7e42a2357ddd4d6 +Merge: c0de920 3bf3df5 +Author: Marek Haičman +Date: 2017-09-09 + + Merge pull request #43 from redhatrises/makefile_python_versions + + Update Makefile to handle python2 and python3 tests + +commit c92fe04d114b2b5487cc26ad739860174449820b +Merge: de40517 c0de920 +Author: Gabe +Date: 2017-09-08 + + Merge branch 'rhel7-branch' + +commit e306acb208aa5e8e5aed0344cc1b048e947c6fc1 +Author: Gabe +Date: 2017-09-08 + + Update Makefile to use README.md + + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c0de9203bae98080ee0331818b5486acefc5f752 +Merge: 1f5611e 297030b +Author: Marek Haičman +Date: 2017-09-09 + + Merge pull request #42 from redhatrises/fix_dynamic_product + + Use pyanaconda constants module instead of product module + +commit cd1185750ab451f9f29ffa2c81e43f4fe47ea76a +Author: Gabe +Date: 2017-09-08 + + Update .spec file + + - Update .spec file to handle both python2 and python3 for RHEL and Fedora + + oscap-anaconda-addon.spec | 36 +++++++++++++++++++++++++++--------- + 1 file changed, 27 insertions(+), 9 deletions(-) + +commit 3bf3df5e63e1b8ff7be3a6dafa50dccdc96b721b +Author: Gabe +Date: 2017-09-08 + + Update Makefile to handle python2 and python3 tests + + - Makefile checks if OS is Red Hat Enterprise Linux 7 for python2 tests. If not, uses python3 tests + + Makefile | 17 ++++++++++++----- + 1 file changed, 12 insertions(+), 5 deletions(-) + +commit 297030b53a31be44c17aa4dd9fa55a3e36b758f5 +Author: Gabe +Date: 2017-09-08 + + Use pyanaconda constants module instead of product module + + - pyanaconda constants module gets the product shortname whereas the product module + uses the full product name + - Fixes #38 + + org_fedora_oscap/common.py | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +commit 383cc012155a107543c35a52cb2ea5de57e9ae0f +Author: Jan Černý +Date: 2017-09-07 + + Don't forget to copy tailoring to new path + + Fixes #36. + We copy the XCCDF, but tailoring is needed as well. + + org_fedora_oscap/ks/oscap.py | 2 ++ + 1 file changed, 2 insertions(+) + +commit 1f5611ebb55678d6a4db82d9bd818a1c0a788a9a +Merge: fa76fc0 2504e98 +Author: Marek Haičman +Date: 2017-09-08 + + Merge pull request #35 from redhatrises/fix_args_tests + + Fix some failing tests and pep8 complaints + +commit 2504e9800dd812ca2a806a0d758a8cd9ba8b0545 +Author: Gabe +Date: 2017-09-07 + + Ignore %end in KS string_test + + tests/ks_oscap_test.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 26112feb73e9b572d95fc5b8c9d14d5d1476fda8 +Author: Gabe +Date: 2017-09-07 + + Handle double newline in KS test + + tests/ks_oscap_test.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit f8e35685401465ab99b1145cb114afee54664b7b +Author: Gabe +Date: 2017-09-06 + + Passwords are no longer cleared as this breaks graphical and non-graphical installs + + - Fix passwd_minlen_short_passwd_test to pass without password being cleared + - Change revert_password_changes_test to revert_password_policy_changes_test + as passwords are no longer cleared. + - Add FIXME to revert_password_policy_changes_test for future test of password + policy changes + + tests/rule_handling_test.py | 50 ++++++++------------------------------------- + 1 file changed, 9 insertions(+), 41 deletions(-) + +commit c3546fa07be82c8101bfe54e28ab2a26a8df3aaa +Author: Gabe +Date: 2017-08-31 + + Update tests to match code change for FATAL message with root password being too short + + tests/rule_handling_test.py | 56 ++++++++++++++++++++++++--------------------- + 1 file changed, 30 insertions(+), 26 deletions(-) + +commit 9d3a59b0350862132e13c7bbe1ce202a498a0a9a +Author: Gabe +Date: 2017-08-31 + + Remove unknown nosetest argument and fix chroot dirname + + tests/common_test.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 3696be7bf0598f541b9748138c1fd9390d533522 +Author: Gabe +Date: 2017-08-31 + + Fix some failing tests and pep8 complaints + + - Add '--reports' to expected args in tests + - Fix various pep8 complaints + + tests/common_test.py | 32 ++++++++++++++++++++------------ + tests/ks_oscap_test.py | 13 ++++++++++--- + 2 files changed, 30 insertions(+), 15 deletions(-) + +commit fa76fc069e4fd478be5386c3ccca1eaf5c525ff5 +Merge: 8db6c56 32ac9a1 +Author: Jan Černý +Date: 2017-09-07 + + Merge pull request #34 from redhatrises/fix_readme_link + + Move README to README.md + +commit 32ac9a13e7d1bba0e65dd5031320139164227313 +Author: Gabe +Date: 2017-08-31 + + Remove SSG reference in link + + README.md | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 74192120f533d9b2481a3561ab0ed44274939602 +Author: Gabe +Date: 2017-08-31 + + Move README to README.md + + - This makes README Markdown compliant so that it can be rendered correctly in GitHub + + README => README.md | 0 + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 8db6c56ab72a2cad59cc74ebf8f33543bc88b5eb +Merge: 6e9e74d 9e0725a +Author: redhatrises +Date: 2017-08-31 + + Merge pull request #32 from jan-cerny/mention_script + + Mention create_update_image.sh in Developer Guide + +commit 9e0725a50e92b339c9cebcc526634b15202efddd +Author: Jan Černý +Date: 2017-08-31 + + Mention create_update_image.sh in Developer Guide + + The code here was moved to an executable script + create_update_image.sh in pull request #30. + + docs/manual/developer_guide.adoc | 17 ++--------------- + 1 file changed, 2 insertions(+), 15 deletions(-) + +commit 6e9e74dab53060da8e98025dcc26ce5900f859d6 +Merge: 0639949 630af25 +Author: redhatrises +Date: 2017-08-31 + + Merge pull request #33 from jan-cerny/fix_title + + Fix title of developer guide + +commit 630af257cb207c61fbf889372673dabf53ec5a76 +Author: Jan Černý +Date: 2017-08-31 + + Fix title of developer guide + + docs/manual/developer_guide.adoc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit de40517c287f5d61446cc6e804b780b117dd7ca4 +Merge: b180a77 0639949 +Author: Martin Preisler +Date: 2017-08-30 + + Merge branch 'rhel7-branch' + +commit 0639949a885df9997d432ef8d7b4e34d94ae3ffb +Merge: c8a273c 485e854 +Author: Martin Preisler +Date: 2017-08-30 + + Merge pull request #28 from redhatrises/add_product_detection + + Dynamically handle product and product version for both RHEL and Fedora systems + +commit 485e85455778b4e811084173bf6adc9498b1852e +Author: Gabe +Date: 2017-08-30 + + Fix some pep8 complaints in common.py + + org_fedora_oscap/common.py | 63 ++++++++++++++++++++++++++++++---------------- + 1 file changed, 41 insertions(+), 22 deletions(-) + +commit 30879c2bbf94aee6e174a7ce7a3b9978a4bb4b22 +Author: Gabe +Date: 2017-08-30 + + Dynamically handle product and product version for both RHEL and Fedora systems + + org_fedora_oscap/common.py | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit b180a773634a2a73f86ba40c842e917cfec57445 +Merge: 3cc77ca c8a273c +Author: Martin Preisler +Date: 2017-08-30 + + Merge branch 'rhel7-branch' + +commit c8a273ce7646cadb1d81bb255bd4924cc4504fe5 +Merge: c029988 294a071 +Author: Martin Preisler +Date: 2017-08-30 + + Merge pull request #30 from jan-cerny/create_update_image + + Add a script to build an update image + +commit 3cc77cac908a3d4731a0ef331aaae12ab8a8fb8c +Merge: 4ebe9b6 c029988 +Author: Martin Preisler +Date: 2017-08-30 + + Merge branch 'rhel7-branch' + +commit c02998851a4a004a1060c6e550bd99c842bd6b90 +Merge: 47c8a47 908b480 +Author: Martin Preisler +Date: 2017-08-30 + + Merge pull request #26 from redhatrises/add_developer_guide + + Add Developer Guide + +commit 47c8a475363489a2b869b282b9ae0b1b05c4b678 +Merge: 8a7ba65 2668ec4 +Author: Martin Preisler +Date: 2017-08-29 + + Merge pull request #27 from redhatrises/add_cherry_pick_changes + + Allow using a file:// url for any SCAP guides pushed on the media or via an updates.img + +commit 8a7ba65a571f0fbf2c60f7f9e95524712fb896c3 +Merge: 64dcb53 f5143f0 +Author: Martin Preisler +Date: 2017-08-29 + + Merge pull request #25 from redhatrises/add_html_report + + Add HTML reports + +commit 64dcb53e5870834d23eafd3b4c3779fced6b3b63 +Merge: 2af42ed 4236221 +Author: Martin Preisler +Date: 2017-08-29 + + Merge pull request #31 from jan-cerny/gitignore + + Add .idea to .gitignore + +commit 4236221a7ef44b8613a9e8380ef80d093d7bda1e +Author: Jan Černý +Date: 2017-08-29 + + Add .idea to .gitignore + + .idea is used by PyCharm + + .gitignore | 1 + + 1 file changed, 1 insertion(+) + +commit 294a07116322b88fa80ee9fbc20c51debce85acf +Author: Jan Černý +Date: 2017-08-29 + + Add a script to build an update image + + This is a copy paste from the wiki. + https://github.com/OpenSCAP/oscap-anaconda-addon/wiki/How-to-test-oscap-anaconda-addon + You won't need to copy paste the code from wiki anymore + if we have this code in the repository. + + create_update_image.sh | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +commit 2668ec441527e30c3514bb26d01e75b5ec34b852 +Author: Pat Riehecky +Date: 2015-12-29 + + Allow using a file:// url for any SCAP guides pushed on the media + or via an updates.img + + org_fedora_oscap/data_fetch.py | 22 ++++++++++++++++------ + 1 file changed, 16 insertions(+), 6 deletions(-) + +commit 908b48026f1a01e9a4dc82b51d61ac08f757d09f +Author: Gabe +Date: 2017-08-25 + + Add Developer Guide + + README | 2 +- + docs/manual/developer_guide.adoc | 76 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 77 insertions(+), 1 deletion(-) + +commit f5143f0ba6bf182b3e185f37473c36b8faca25d2 +Author: Gabe +Date: 2017-08-25 + + Add HTML reports + + - Fixes #22 + + org_fedora_oscap/common.py | 2 ++ + 1 file changed, 2 insertions(+) + +commit 2af42edd71949e4494b24e7bb6957c9eb2294dcb +Merge: 079f5fc 7f70a11 +Author: Martin Preisler +Date: 2017-06-13 + + Merge pull request #21 from yuumasato/parse_html_tags_from_content + + Parse HTML tags from SCAP content + +commit 7f70a1167399ad7f8ce50e83cd78f43b0b6ca653 +Author: Watson Sato +Date: 2017-06-13 + + Parse HTML tags from SCAP content + + Some Profile descriptions contains HTML tags to structure and format the + content and oscap-anaconda-addon has problems interpreting them. + + This patch removes all HTML tags, while also trying to maintain + readability of content. + + org_fedora_oscap/content_handling.py | 51 +++++++++++++++++++++++++++++++++--- + 1 file changed, 48 insertions(+), 3 deletions(-) + +commit 079f5fcd249afa8c5b69811dd930135d4cfdd22f +Merge: 5f7ce92 8d24858 +Author: Martin Preisler +Date: 2017-03-31 + + Merge pull request #20 from poncovka/rhel7-branch-gtk_warnings + + Gtk: Fix gtk warning (#1437106) + +commit 8d2485856131cda7ccfafc75fddfb2156b48fe21 +Author: Vendula Poncova +Date: 2017-03-30 + + Gtk: Remove app_paintable from a nav box (#1437106) + + The app_paintable property suppressed drawing of the upper bar's + background. + + Resolves: rhbz#1437106 + + org_fedora_oscap/gui/spokes/oscap.glade | 1 - + 1 file changed, 1 deletion(-) + +commit b8e617cce89159b172260896ad2404009e6efa01 +Author: Vendula Poncova +Date: 2017-03-30 + + Gtk: Fix overriding tab label for notebook (#1437106) + + The gtk warning was caused by an empty page in the notebook. + The page was removed. + + Resolves: rhbz#1437106 + + org_fedora_oscap/gui/spokes/oscap.glade | 27 ++++++++++++--------------- + 1 file changed, 12 insertions(+), 15 deletions(-) + +commit 5f7ce927743c539686f54f134fae3d534c7d2dab +Merge: 34e33a1 a62c496 +Author: Martin Preisler +Date: 2017-03-08 + + Merge pull request #13 from ybznek/rhel7-branch-readme + + README: Reference wiki page + +commit 34e33a156dc37581f294b40beea996f191e786d9 +Author: Jiri Konecny +Date: 2017-02-13 + + Update oscap-anaconda-addon.spec + + It is no longer hosted on fedorahosted so fix the link. + + oscap-anaconda-addon.spec | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +commit e90b9cd4c424f13629c7264508c762caf0409046 +Merge: 1a8a07b 0a21382 +Author: Martin Preisler +Date: 2017-03-08 + + Merge pull request #18 from M4rtinK/rhel7-branch-use_init_done_signal + + Use the init_done signal instead of wait_all() (#1380224) + +commit 0a21382a7e76ce06bd484add725be3c5e41b216a +Author: Martin Kolman +Date: 2017-02-23 + + Use the init_done signal instead of wait_all() (#1380224) + + Using the wait_all() function provided by the Anaconda thread manager + singleton can result in unexpected behavior, as there might still be + threads unrelated to spoke initialization still running when the + function is called. This might result in unnecessary delay before the + OSCAP addon spoke becomes ready and installation can continue. + + So use the init_done signal, which is the proper way to wait for + Anaconda spokes to finish initialization. + + Also bump the Anaconda version to one that provides the init_done + signal. + + Resolves: rhbz#1380224 + + org_fedora_oscap/gui/spokes/oscap.py | 14 +++++++++++++- + oscap-anaconda-addon.spec | 4 ++-- + 2 files changed, 15 insertions(+), 3 deletions(-) + +commit a62c496acf5777cb5b635b5e9939f0b869af60e6 +Author: Zbynek Moravec +Date: 2016-10-26 + + README: Reference wiki page + + README | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 1a8a07b0325767e9892a95eb3118570d35354704 +Merge: 4886dd3 8b69608 +Author: Martin Preisler +Date: 2016-10-19 + + Merge pull request #11 from ybznek/rhel7-branch-default + + Hide "Default" profile if contains no selected rules + +commit 4886dd39aab18badc8c3b09aad757367935c25fb +Merge: a0fefee 2c33621 +Author: Martin Preisler +Date: 2016-10-19 + + Merge pull request #10 from ybznek/rhel7-branch-log-error + + Log OpenSCAP errors + +commit 2c336213212887c53f639c2c05ad6d61ef6f303a +Author: Zbynek Moravec +Date: 2016-10-18 + + Add correct prefix to log message + + org_fedora_oscap/common.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 8b696089163d83d465221646fc26ed44819cf9fd +Author: Zbynek Moravec +Date: 2016-10-16 + + Hide "Default" profile if contains no rules + + Resolves: rhbz#1256879 + + org_fedora_oscap/content_handling.py | 29 +++++++++++++++++++++-------- + 1 file changed, 21 insertions(+), 8 deletions(-) + +commit 03a5496508b1b18fb98950dc6f50b8b561b42661 +Author: Zbynek Moravec +Date: 2016-10-17 + + Log OpenSCAP errors + + org_fedora_oscap/common.py | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +commit a0fefee2daa21062bb7c96d4c0d80271803b01dd +Merge: fb9c485 b32afed +Author: Martin Preisler +Date: 2016-09-13 + + Merge pull request #9 from M4rtinK/rhel7-branch-log_pwpolicy_changes + + Log password policy changes + +commit b32afeda0f19149389631b5fa9777ff6d5470782 +Author: Martin Kolman +Date: 2016-09-12 + + Log password policy changes + + Log changes to password policy done by the OSCAP addon + and also log content of the password policy list. + + Related: rhbz#1365032 + + org_fedora_oscap/rule_handling.py | 4 ++++ + 1 file changed, 4 insertions(+) + +commit fb9c485418e59cfead3ab28d8ff8cfb7a19bba48 +Author: Vratislav Podzimek +Date: 2016-08-23 + + Don't require blank stderr when running the oscap tool + + It may report some warnings and complete successfully. It should be safe for us + to rely on the exit code. + + Resolves: rhbz#1355756 + + org_fedora_oscap/common.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit caa5b6a14c6c8175a3f4639df0863271564d16b2 +Author: Vratislav Podzimek +Date: 2016-08-23 + + Beware of the invalid profiles + + If a profile we cannot get pre-installation rules for is chosen we need to just + inform the user instead of crashing. + + Resolves: rhbz#1365130 + + org_fedora_oscap/gui/spokes/oscap.py | 28 ++++++++++++++++------------ + 1 file changed, 16 insertions(+), 12 deletions(-) + +commit 1d9bfd13145273c14aac475fccc6b50b9957bc4b +Author: Vratislav Podzimek +Date: 2016-08-23 + + Properly set the seen property for root passwords + + It is the property of the whole kickstart command object not the password + string. + + Resolves: rhbz#1357603 + + org_fedora_oscap/gui/spokes/oscap.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit bb3034ff76daeba590c6a206c75b99720f506a2c +Author: Vratislav Podzimek +Date: 2016-06-30 + + Clear spoke's info before setting an error (#1349446) + + Otherwise the previous error message is shown (if any) instead of the new one. + + org_fedora_oscap/gui/spokes/oscap.py | 1 + + 1 file changed, 1 insertion(+) + +commit 0499f43419a234f0c7bc77f1ed4ad93e096afec0 +Merge: 545720b 52abf43 +Author: Vratislav Podzimek +Date: 2016-05-31 + + Merge pull request #6 from M4rtinK/rhel7-branch-use_security_category_from_anaconda + + Use the System hub category provided by Anaconda + +commit 52abf43ad1869bf1f0893f70a8c05b0b13d477e1 +Author: Martin Kolman +Date: 2016-05-17 + + Use the System hub category provided by Anaconda + + Use the Anaconda provides System category - that way the + OSCAP addon the more efficiently fit on the screen, + especially on low resolution displays. + + Also remove the Security category as it is no longer used anywhere. + + Related: rhbz#1269211 + + org_fedora_oscap/categories/__init__.py | 0 + org_fedora_oscap/categories/security.py | 39 --------------------------------- + org_fedora_oscap/gui/spokes/oscap.py | 4 ++-- + 3 files changed, 2 insertions(+), 41 deletions(-) + +commit 545720b9ac10d82d79b29128545d2592716ebb57 +Author: Vratislav Podzimek +Date: 2016-05-30 + + Wait for Anaconda to settle before evaluation + + Otherwise we may win the race and evaluate the configuration before it's + actually setup "discovering" issues that don't exist in the end. + + Resolves: rhbz#1265552 + + org_fedora_oscap/gui/spokes/oscap.py | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 5f512f6e9e72c10a4ad32a08b1bab095014c9057 +Author: Vratislav Podzimek +Date: 2016-05-26 + + Make the changes overview scrollable and smaller + + There might possibly be many changes which would cause the view to overflow the + screen or push some elements outside of the screen resulting in permanent damage + to Anaconda's UI. Let's prevent this from happening by making the view + scrollable. The 'automatic' policy should make sure there are no scrollbars + unless needed. Disabling the horizontal expand makes sure that the changes view + doesn't take too much space from the screen when not needed. + + Related: rhbz#1263582 + + org_fedora_oscap/gui/spokes/oscap.glade | 46 +++++++++++++++++++-------------- + 1 file changed, 26 insertions(+), 20 deletions(-) + +commit 582a39f0bd5bab5be2f72a8b6178b4bc1dacecd3 +Author: Vratislav Podzimek +Date: 2016-05-25 + + Make the list of profiles scrollable + + This prevents really weird things from happening in case there are many profiles + or even just a few with long descriptions. + + Resolves: rhbz#1263582 + + org_fedora_oscap/gui/spokes/oscap.glade | 69 ++++++++++++++++++--------------- + 1 file changed, 38 insertions(+), 31 deletions(-) + +commit b4b856cf69d43a8018061453ec881757c81ba389 +Author: Vratislav Podzimek +Date: 2016-05-25 + + Do not try to create a single file multiple times + + When extracting the archive, we may apparently get into a situation when we try + to extract a file or directory, that's already extracted/existing. Just skip + such a file/directory instead of causing a failure of the extraction process. + + Related: rhbz#1263315 + + org_fedora_oscap/common.py | 2 ++ + 1 file changed, 2 insertions(+) + +commit 7c4ffe3b7dc35f6ceb2f97b985f6d6f9b25ba4c0 +Author: Vratislav Podzimek +Date: 2016-05-25 + + Avoid crashes on extraction errors + + If there is an IOError or some problem with the cpio archive, we need to + transform the exception into our own so that it is properly caught and processed + in the best possible way in the UI layer. + + Resolves: rhbz#1263315 + + org_fedora_oscap/common.py | 21 ++++++++++++--------- + 1 file changed, 12 insertions(+), 9 deletions(-) + +commit f8e5c1c38ef7a8813bbeaca15265f338ecdeb8aa +Author: Vratislav Podzimek +Date: 2016-05-25 + + Disable GPG checks when installing content to the system + + When we are installing the SCAP content as an RPM package we are likely to be + missing some GPG keys. And since there are other means how to check the content + integrity and authenticity plus the fact we have already used the content for the + installation phase, the GPG check can be just turned off to prevent issues like + the one described in the bug. + + Resolves: rhbz#1263216 + + org_fedora_oscap/ks/oscap.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5e7a6e648c85cf923093ebac6448be82ba032448 +Author: Vratislav Podzimek +Date: 2016-05-25 + + Allow fixing root password in graphical installations + + If the root password from kickstart is too short we can give users a chance to + enter a new (better) one in case of graphical installation. Text mode doesn't + allow for this because the root password configuration happens before the SCAP + content is evaluated. + + Resolves: rhbz#1265116 + + org_fedora_oscap/common.py | 3 ++- + org_fedora_oscap/gui/spokes/oscap.py | 39 +++++++++++++++++++++++++++++++----- + org_fedora_oscap/rule_handling.py | 29 ++++++++++++++++----------- + 3 files changed, 53 insertions(+), 18 deletions(-) + +commit 62d2e9832561d590fdcfbcab8bd03f5cb31fd5d1 +Author: Vratislav Podzimek +Date: 2016-05-25 + + Enforce the minimal root password length + + With Anaconda supporting the pwpolicy command putting restrictions on (among the + other things) root password minimal length we can actually enforce the policy + given in the SCAP content in interactive installations. + + Resolves: rhbz#1238281 + + org_fedora_oscap/rule_handling.py | 50 ++++++++++++++++++++++++++++++++++----- + 1 file changed, 44 insertions(+), 6 deletions(-) + +commit f3659640664657ef8c7649ed1a0ebf858b5a5c5a +Merge: 0e3bfd1 377eec1 +Author: Vratislav Podzimek +Date: 2016-05-25 + + Merge pull request #5 from jkonecny12/rhel7-new-method-signature + + Use new method signature with payload class + +commit 0e3bfd1eb771802edab0d5f72dc7a9e8538f2fa7 +Author: Vratislav Podzimek +Date: 2016-05-17 + + Just report misconfiguration instead of crashing in text mode + + User should get to know what happened, but crashing and showing a traceback is + not really a great way to do it. Showing a text "dialog" with all the + information we have is much better. + + Resolves: rhbz#1263207 + + org_fedora_oscap/ks/oscap.py | 26 ++++++++++++++++++++++---- + 1 file changed, 22 insertions(+), 4 deletions(-) + +commit 8fd9cbf91bb7190450531b25a3806c5b7f69744e +Author: Vratislav Podzimek +Date: 2016-05-17 + + Do not verify SSL if inst.noverifyssl was given + + inst.noverifyssl is a boot/cmdline option which should take precedence over + everything specified in the kickstart or UI. + + Resolves: rhbz#1263257 + + org_fedora_oscap/data_fetch.py | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +commit 91b72ed3c71dbe1fe6a475f412b9290ebfb6e9c5 +Author: Vratislav Podzimek +Date: 2016-05-17 + + Also catch data_fetch.DataFetchError when trying to get content + + Otherwise everything crashes and a traceback is shown to the user instead of a + dialog (TUI) or proper error message (cmdline mode). + + Resolves: rhbz#1263239 + + org_fedora_oscap/ks/oscap.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 377eec1071b6a9e50973ba61fc1b0f5e23ec043d +Author: Jiri Konecny +Date: 2016-04-25 + + Use new method signature with payload class (#1288636) + + You can now use payload class in setup() and execute() methods. + + Related: rhbz#1288636 + + org_fedora_oscap/ks/oscap.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 4ebe9b6ce3a0c24192981acdec723aebe2ae25fe +Merge: 2553af2 16680eb +Author: Vratislav Podzimek +Date: 2016-01-07 + + Merge pull request #4 from jcpunk/fileurl + + Allow using a file:// url for any SCAP guides pushed on the media + +commit 16680eb999584317b37020c2b4ab5de936209a30 +Author: Pat Riehecky +Date: 2015-12-29 + + Allow using a file:// url for any SCAP guides pushed on the media + or via an updates.img + + org_fedora_oscap/data_fetch.py | 22 ++++++++++++++++------ + 1 file changed, 16 insertions(+), 6 deletions(-) + +commit 2553af2fbe25df703b957774ea923cb5aaaed78e +Merge: b36b882 d59fc89 +Author: Vratislav Podzimek +Date: 2016-01-05 + + Merge pull request #3 from jcpunk/dynamic-product + + Determine product automatically for selecting SCAP guide + +commit d59fc894576e1a650e8697188f8117a8b75a524b +Author: Pat Riehecky +Date: 2015-12-29 + + Using anaconda's knowledge of what product and version this is + we can dynamically select a more intelligent default SCAP guide. + + org_fedora_oscap/common.py | 4 ++++ + 1 file changed, 4 insertions(+) + +commit ae19eb551eb6733ea7a4cf7a4e526371971f1663 +Author: Vratislav Podzimek +Date: 2015-09-16 + + Do not remove the root password behind user's back (#1263254) + + If the chosen profile requires a longer password than what was set in kickstart, + consider it a misconfiguration like any other such issue instead of silently + removing the password and going on. Removing password brings two problems: + + 1) in text mode it causes a system with no (empty) root password to be installed + + 2) in graphical mode it causes the installation with a complete kickstart to + hang waiting for a new root password + + org_fedora_oscap/rule_handling.py | 29 ++++++----------------------- + 1 file changed, 6 insertions(+), 23 deletions(-) + +commit d8b146ef85662677ac661e1606cb62e7b74d7d81 +Author: Vratislav Podzimek +Date: 2015-09-04 + + Completely skip the execute() part if no profile is selected (#1254973) + + If user didn't select any profile in the GUI we shouldn't create the + /root/openscap_data directory and shouldn't do any extra steps as those are not + necessary and could cause confusion. + + org_fedora_oscap/ks/oscap.py | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 47bda76d8a951b095c464931f5e9f81ee04fa2a9 +Author: Vratislav Podzimek +Date: 2015-08-24 + + Only allow DS and XCCDF ID selection if it makes sense (#1254876) + + If there's only one DS and a single XCCDF in it, there's no point in showing the + combo boxes that allow user to select the DS and XCCDF. + + org_fedora_oscap/gui/spokes/oscap.py | 30 +++++++++++++++++++++++------- + 1 file changed, 23 insertions(+), 7 deletions(-) + +commit d78f6866ffcbaa47a06b2bdc204d5be2cae478b9 +Author: Vratislav Podzimek +Date: 2015-08-24 + + Skip files unrecognized by the 'oscap info' command (#1255075) + + If a file is unrecognized by the 'oscap info' command (not a SCAP document), it + returns a non-zero exit code. Such files are not important for us, so let's just + ignore them. + + org_fedora_oscap/content_handling.py | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +commit f137590aeca6ed2c8222c0a3bce956af98c89dac +Author: Vratislav Podzimek +Date: 2015-08-19 + + Specify the name of the help content file (#1254884) + + Otherwise no help would be shown if the Help! button is clicked. + + org_fedora_oscap/gui/spokes/oscap.py | 3 +++ + 1 file changed, 3 insertions(+) + +commit 5d96c21e7735a35eff5301c98cc552aa7d5a2e82 +Author: Vratislav Podzimek +Date: 2015-08-04 + + Make sure DS and XCCDF ID lists are correctly refreshed (#1240946) + + Otherwise in cases like when a different content is loaded, the spoke gets into + a weird state almost always resulting in a traceback (like in the bug report). + + org_fedora_oscap/gui/spokes/oscap.py | 20 ++++++++++++++------ + 1 file changed, 14 insertions(+), 6 deletions(-) + +commit 4a06d7d4d8c480b0dd54c1e6be661851ffe9228e +Author: Vratislav Podzimek +Date: 2015-08-04 + + Make sure the DS and XCCDF ID combo boxes are visible for DS content (#1249951) + + Otherwise there's no way to change/select DS and XCCDF IDs. Also make sure they + are hidden when they are not supposed to be visible. + + org_fedora_oscap/gui/spokes/oscap.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 283cf8b21eba35a82a36989b16d52ec396bc8080 +Author: Vratislav Podzimek +Date: 2015-08-04 + + Try to load the OSCAP session early for DS content (#1247654) + + This gives us an easy way to handle invalid content early enough to prevent any + complicated recovery. + + Also, discard the session and create a new one when getting profiles for + particular DS ID - XCCDF ID combination because otherwise we would get wrong + results. + + org_fedora_oscap/content_handling.py | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit 28aa3ea6325b43e6a12815457f431a49167898e3 +Author: Vratislav Podzimek +Date: 2015-08-04 + + Test preinst_content_path before raw_preinst_content_path (#1249937) + + If the SSG content is used, the content is already prepared for processing and + thus there's already valid content on the preinst_content_path so we need to + check for that before using the check of raw_preinst_content_path to decide + whether content download is needed or not. + + org_fedora_oscap/gui/spokes/oscap.py | 1 + + org_fedora_oscap/ks/oscap.py | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +commit 010a079417d75cebc059798fcf3d1044453759e0 +Author: Vratislav Podzimek +Date: 2015-08-03 + + Clear any error if switching to the dry-run mode + + Nothing is done by the addon in the dry-run mode so there cannot be any error. + + Related: rhbz#1247677 + + org_fedora_oscap/gui/spokes/oscap.py | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit d0a558b6e150e7d78caa16b33ca9029f2d4cfc1f +Author: Vratislav Podzimek +Date: 2015-08-03 + + Do not continue with and invalid profile ID (#1247677) + + If an invalid profile ID is given, we need to stop the installation and, report + an error and let user choose a different profile. + + org_fedora_oscap/gui/spokes/oscap.py | 46 ++++++++++++++++++++++++++++-------- + 1 file changed, 36 insertions(+), 10 deletions(-) + +commit 498ba60ff643991a4561ab86a63fc32e09486c30 +Author: Vratislav Podzimek +Date: 2015-08-03 + + Cover all potential places with a non-main thread changing Gtk stuff (#1240967) + + There were a few more places where a non-main thread manipulated the Gtk objects + which sometimes caused Gtk and the whole anaconda to hang due to deadlocks. Make + sure all such actions are done in the main thread. + + org_fedora_oscap/gui/spokes/oscap.py | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +commit 2b3cfce62d72e4154283e41e868a8430b7efc70c +Author: Vratislav Podzimek +Date: 2015-03-30 + + Fix the Zanata server URL + version and update the .pot file + + (ported commit b36b882c265d8e9ef4bdd87d48188aeff0437198 from master) + + po/oscap-anaconda-addon.pot | 80 ++++++++++++++++++++++++++++++--------------- + zanata.xml | 4 +-- + 2 files changed, 56 insertions(+), 28 deletions(-) + +commit 3f7833e9393c8ecf11ed1e914b879447c3aa9d4e +Author: Vratislav Podzimek +Date: 2015-03-24 + + Switch translations support to fedora.zanata.org + + (cherry-picked commit d7c77a66e90ac92098b716dc6ca5d203abd3f292 from master) + + .tx/config | 7 ---- + Makefile | 9 +++++- + zanata.xml | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 114 insertions(+), 8 deletions(-) + +commit 3f9938a45b2fd7705e6fd40ab41231a79aaf5861 +Author: Vratislav Podzimek +Date: 2015-07-21 + + Better handle and report erroneous states + + So that users have a chance to find out what happened and fix the issue. + + Resolves: rhbz#1241064 + + org_fedora_oscap/gui/spokes/oscap.py | 93 ++++++++++++++++++++++++------------ + 1 file changed, 62 insertions(+), 31 deletions(-) + +commit d65ef7fa809e9e5aa93051fc619906fe299aeeba +Author: Vratislav Podzimek +Date: 2015-07-21 + + Make sure (some more) GUI actions run in the main thread (#1240967) + + Otherwise weird things happen because multiple threads manipulate with the + thread-unsafe Gtk structures. + + org_fedora_oscap/gui/spokes/oscap.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit a0083e6c7fd03fd38c1fffbae63b2e547ef962f8 +Author: Vratislav Podzimek +Date: 2015-07-21 + + Beware of RPM->cpio entries' paths having absolute paths + + Otherwise the check for required files fails because the paths may be given as + relative. + + Related: rhbz#1241064 + + org_fedora_oscap/common.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 0d0f3f54b56565326f2320acef6586eddc06bd10 +Author: Vratislav Podzimek +Date: 2015-07-21 + + Only output the kickstart section with content and profile set + + There may be a default content used (e.g. the SCAP Security Guide) with no + profile selected. Nothing related to the addon should appear in the resulting + kickstart in such case. + + Resolves: rhbz#1241395 + + org_fedora_oscap/ks/oscap.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9cf9d865f9c51b7d7d82b3a768244bbed763731e +Author: Vratislav Podzimek +Date: 2015-07-08 + + Just report integrity check failure instead of traceback (#1240710) + + That way users can continue with the installation in some way or exit the + installation in a user-friendly way. + + org_fedora_oscap/gui/spokes/oscap.py | 15 +++++++++++++-- + org_fedora_oscap/ks/oscap.py | 22 ++++++++++++++++++++-- + 2 files changed, 33 insertions(+), 4 deletions(-) + +commit eb5c75eb590ff2eeac6b8c4e93d4589920cc3a9a +Author: Vratislav Podzimek +Date: 2015-07-07 + + Properly react on download/loading issues in text+kickstart mode + + Instead of raising an exception in case of content download or loading issues we + should let users know and give them a chance to continue anyway (if possible). + + Related: rhbz#1240710 + + org_fedora_oscap/ks/oscap.py | 31 +++++++++++++++++++++++++++++-- + 1 file changed, 29 insertions(+), 2 deletions(-) + +commit c899ac40c5793dc76e5c726d610ee17f9bc71d43 +Author: Vratislav Podzimek +Date: 2015-07-07 + + Fetch and process the content even if GUI doesn't take care of it (#1240625) + + We cannot rely on the GUI code fetching and loading the content because in text + kickstart installations it never gets a chance to do so. + + org_fedora_oscap/ks/oscap.py | 35 ++++++++++++++++++++++++++++++++++- + 1 file changed, 34 insertions(+), 1 deletion(-) + +commit 046b160cfce6521c2a126cad267a2b43a54b50db +Author: Vratislav Podzimek +Date: 2015-07-06 + + Do not output redundant/invalid fields for the SSG content (#1240285) + + The SSG content is specific and it doesn't require xccdf-path nor content-url + fields in the kickstart. Thus we should avoid putting them into the output that + may be later used as an input for more installations. + + org_fedora_oscap/ks/oscap.py | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 6f444b269f48dd3fa4e92d5ff8c17892558f7d63 +Author: Vratislav Podzimek +Date: 2015-07-06 + + Better handle unsupported URL types (#1232631) + + If a URL that is not supported by the addon is given, it needs to report that as + an issue instead of crashing. + + Unsupported URLs are either incomplete or not starting with a recognized and + supported protocol type. + + org_fedora_oscap/gui/spokes/oscap.py | 15 +++++++++++++++ + org_fedora_oscap/ks/oscap.py | 8 +++++++- + 2 files changed, 22 insertions(+), 1 deletion(-) + +commit 3f2ae1112b66ec1ec205d355ba2253d8fa30885d +Author: Vratislav Podzimek +Date: 2015-07-06 + + React better on network issues (#1236657) + + Instead of raising an exception we should let users know that there was a + network error. + + org_fedora_oscap/gui/spokes/oscap.py | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +commit bdd43cf791634bd1be3375263fd6dc956a6fda13 +Author: Vratislav Podzimek +Date: 2015-07-06 + + Improve the description of the default profile (#1238080) + + The default profile usually contains no rules so we should reflect that in its + description. + + org_fedora_oscap/content_handling.py | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 157dbd4c4eff0543a60205e7be2939a9c1124780 +Author: Vratislav Podzimek +Date: 2015-07-06 + + Use the openscap-scanner package instead of openscap-utils (#1240249) + + openscap-utils pulls openscap-scanner as a dependency and openscap-scanner is + enough to perform the scan on the installed system. + + org_fedora_oscap/ks/oscap.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1a2f4f4db12bd45dd9b172be270db61f6766b589 +Author: Vratislav Podzimek +Date: 2015-07-06 + + Better handle the case with no profile selected (#1235750) + + We need to let user know that no profile is selected and avoid doing things that + are only needed when some profile *is* selected (like installing extra packages, + etc.). + + org_fedora_oscap/gui/spokes/oscap.py | 3 +++ + org_fedora_oscap/ks/oscap.py | 9 +++++---- + 2 files changed, 8 insertions(+), 4 deletions(-) + +commit b1e985b2cb489cc72637dde0590256cf0a7c5633 +Author: Vratislav Podzimek +Date: 2015-07-06 + + Add newline and one blank line after the %addon section (#1238267) + + Otherwise invalid kickstarts are produced when multiple addons are in the game + (as reported in the bug). + + org_fedora_oscap/ks/oscap.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 67482a17a42efa67efaa6249711e31a4779f4b34 +Author: Vratislav Podzimek +Date: 2015-06-30 + + Word-wrap profile descriptions (#1236644) + + Otherwise the description is not fully displayed and what's more, Gtk+SPICE can + go crazy and shrink the screen. + + org_fedora_oscap/gui/spokes/oscap.glade | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit 0f563b27a37c4005e619c74c4ed0d89033cc078a +Author: Vratislav Podzimek +Date: 2015-06-30 + + Change paths to use RHEL 7's SSG instead of the Fedora's one + + org_fedora_oscap/common.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit b36b882c265d8e9ef4bdd87d48188aeff0437198 +Author: Vratislav Podzimek +Date: 2015-03-30 + + Fix the Zanata server URL and update the .pot file + + po/oscap-anaconda-addon.pot | 36 ++++++++++++++++++------------------ + zanata.xml | 2 +- + 2 files changed, 19 insertions(+), 19 deletions(-) + +commit d7c77a66e90ac92098b716dc6ca5d203abd3f292 +Author: Vratislav Podzimek +Date: 2015-03-24 + + Switch translations support to fedora.zanata.org + + .tx/config | 7 ---- + Makefile | 9 +++++- + zanata.xml | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 114 insertions(+), 8 deletions(-) + +commit 22405248ded30b443541bb638284f8c614d4bd99 +Author: Vratislav Podzimek +Date: 2015-01-07 + + New version - 0.7 + + Makefile | 2 +- + oscap-anaconda-addon.spec | 16 +++++++++-- + po/oscap-anaconda-addon.pot | 68 ++++++++++++++++++++++++--------------------- + 3 files changed, 51 insertions(+), 35 deletions(-) + +commit a6ed866c1be965acd343a255fa0ee31c1952f6d5 +Author: Vratislav Podzimek +Date: 2015-01-07 + + Make sure fresh translation files are downloaded and used + + The 'tx' command only reliably replaces the old translation files when the -f + option is used. + + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3b54bd32bebde053b2828d5b9afbcb929d08d98f +Author: Vratislav Podzimek +Date: 2015-01-07 + + Adapt to changes in Anaconda + + Categories are now handled in a different way (shared by GUI and TUI), the + window widgets dropped some of their properties (in the .glade files) and the + ROOT_PATH constant was replaced by the getSysroot() function providing better + functionality. + + org_fedora_oscap/{gui => }/categories/__init__.py | 0 + org_fedora_oscap/{gui => }/categories/security.py | 6 +++--- + org_fedora_oscap/gui/spokes/oscap.glade | 8 +++----- + org_fedora_oscap/gui/spokes/oscap.py | 2 +- + org_fedora_oscap/ks/oscap.py | 11 +++++------ + oscap-anaconda-addon.spec | 4 ++-- + 6 files changed, 14 insertions(+), 17 deletions(-) + +commit 0a58ae92ce199ee1565bcd1103b33c6e62d31d04 +Author: Ville Skyttä +Date: 2014-03-27 + + Add *~ to EXCLUDES (#1081735) + + Makefile | 1 + + 1 file changed, 1 insertion(+) + +commit 8ac7cc532cc532b463e8bcb6219e8a7c0a2d1a60 +Author: Vratislav Podzimek +Date: 2014-03-27 + + Set active profile when doing refresh + + Fixes the issue with the previously chosen profile not chosen when the spoke is + reentered. + + org_fedora_oscap/gui/spokes/oscap.py | 2 ++ + 1 file changed, 2 insertions(+) + +commit 8242786bc588fa537ee4ddbac986d19e3e6cf60e +Author: Vratislav Podzimek +Date: 2014-03-26 + + Set fetching flag to False when content processing fails + + Content processing error means the content was fetched and processed, so + fetching+initialization no longer runs. + + org_fedora_oscap/gui/spokes/oscap.py | 3 +++ + 1 file changed, 3 insertions(+) + +commit 9e9f0ae10b718db94b8d682eb77f5eb0c889fb77 +Author: Vratislav Podzimek +Date: 2014-03-13 + + Fix the message when policy is not applied + + org_fedora_oscap/gui/spokes/oscap.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f87728979343eacfb785b2cd3b319cb46f498065 +Author: Vratislav Podzimek +Date: 2014-03-13 + + Change spoke's name to SECURITY POLICY + + It is about security policy, not only a security profile. + + org_fedora_oscap/gui/spokes/oscap.glade | 2 +- + org_fedora_oscap/gui/spokes/oscap.py | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 56559a4c429a31e2a55203738f595acc8acf9881 +Author: Vratislav Podzimek +Date: 2014-03-07 + + Define name of the spoke window + + Otherwise default "SPOKE NAME" appears in the GUI. + + org_fedora_oscap/gui/spokes/oscap.glade | 1 + + 1 file changed, 1 insertion(+) + +commit 47443085a0f2d7ede5589af2d274a6520174cdc7 +Author: Vratislav Podzimek +Date: 2014-03-07 + + Set fetching flag to False when extraction error happens + + Extraction error means the content was fetched and processed, so + fetching+initialization no longer runs. + + org_fedora_oscap/gui/spokes/oscap.py | 3 +++ + 1 file changed, 3 insertions(+) + +commit d22063180c17635556bce4ee20f8e4d7e0839c68 +Author: Vratislav Podzimek +Date: 2014-03-05 + + Remove code that was pushed to the anaconda's sources + + The two functions are useful for other addons and anaconda itself and were + accepted as part of the pyanaconda.ui.gui.utils module. + + org_fedora_oscap/gui/spokes/oscap.py | 43 ++---------------------------------- + 1 file changed, 2 insertions(+), 41 deletions(-) + +commit 39a37f693f68df52fa0376f8ebc38243cb98fa21 +Author: Vratislav Podzimek +Date: 2014-02-28 + + Update spec file from downstream + + Fixes building issues on Fedora. + + oscap-anaconda-addon.spec | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +commit ae3a3442a6456c04dcf1a2f71adf66160d5ddf08 +Author: Vratislav Podzimek +Date: 2014-02-28 + + New version - 0.6 + + Makefile | 2 +- + oscap-anaconda-addon.spec | 10 +++++++++- + po/oscap-anaconda-addon.pot | 30 +++++++++++++++--------------- + 3 files changed, 25 insertions(+), 17 deletions(-) + +commit 78fddf0933c3a3c529435ab24f7b24f43bc9f28a +Author: Vratislav Podzimek +Date: 2014-02-28 + + Getting status needs to run in the main thread + + The status property reads data from the message store and thus needs to run in + the same thread as the Gtk main loop. + + org_fedora_oscap/gui/spokes/oscap.py | 1 + + 1 file changed, 1 insertion(+) + +commit a2bb960dc90de4bb302ad54c9c7dd34bf7896272 +Author: Vratislav Podzimek +Date: 2014-02-28 + + Grab focus for the URL entry after switching notebook page + + Doing it in the oposite order results in the URL not having the focus in the + end. + + org_fedora_oscap/gui/spokes/oscap.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d91b361dc6e52a9ddea8565a41f08a6ccc3215c4 +Author: Vratislav Podzimek +Date: 2014-02-28 + + Clear rule data when unselecting profile + + Unselecting profile means that rule data is no longer valid. + + org_fedora_oscap/gui/spokes/oscap.py | 2 ++ + 1 file changed, 2 insertions(+) + +commit 3a60878087d336682381110d6bdccb11edeaaffa +Author: Vratislav Podzimek +Date: 2014-02-28 + + Update message as part of the initialization + + We need the message store to be up to date to determine spoke's status. + + org_fedora_oscap/gui/spokes/oscap.py | 3 +++ + 1 file changed, 3 insertions(+) + +commit 58c6afbb873ec0bbd086ac7c34e2c68be0b519b0 +Author: Vratislav Podzimek +Date: 2014-02-28 + + Add BuildRequires: gettext + + gettext is required for building translation files. + + oscap-anaconda-addon.spec | 1 + + 1 file changed, 1 insertion(+) + +commit 291365f8052c03091d65cbe5359a1980826dce7b +Author: Vratislav Podzimek +Date: 2014-02-28 + + Include translations in the tarball and RPM + + Makefile | 1 + + oscap-anaconda-addon.spec | 3 ++- + 2 files changed, 3 insertions(+), 1 deletion(-) + +commit 0fc11159aa822e02bf028433866c52f497e80ba2 +Author: Vratislav Podzimek +Date: 2014-02-27 + + New version - 0.5 + + Makefile | 2 +- + oscap-anaconda-addon.spec | 39 ++++++++++++++++++++++++++++++++++++++- + po/oscap-anaconda-addon.pot | 43 ++++++++++++++++++++++++++----------------- + 3 files changed, 65 insertions(+), 19 deletions(-) + +commit 156880306c3b60f46a69880f0edd2af300b59fd1 +Author: Vratislav Podzimek +Date: 2014-02-27 + + Allow users to change content + + If we default to SSG or users put in wrong URL and fetch wrong content, they + should have a chance to use different content. + + org_fedora_oscap/gui/spokes/oscap.glade | 1 + + org_fedora_oscap/gui/spokes/oscap.py | 5 +++++ + org_fedora_oscap/ks/oscap.py | 11 +++++++++-- + 3 files changed, 15 insertions(+), 2 deletions(-) + +commit 23244cf9a271c7d48642bc602b604fff0f5dbfff +Author: Vratislav Podzimek +Date: 2014-02-27 + + Show and hide control buttons properly + + org_fedora_oscap/gui/spokes/oscap.py | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit 6330594d2c7a7faf0252c933aed1b93cdb2bb262 +Author: Vratislav Podzimek +Date: 2014-02-27 + + Fix sensitivity of the URL entry and fetch button + + If no fetching is running and no content is specified, the URL entry and fetch + button should be made sensitive and proper focus should be set. + + org_fedora_oscap/gui/spokes/oscap.py | 17 +++++++++++------ + 1 file changed, 11 insertions(+), 6 deletions(-) + +commit 136095c92c8d7f09cf8d805433ab9edb81c09d47 +Author: Vratislav Podzimek +Date: 2014-02-27 + + Add the button allowing users to use SSG content if available + + org_fedora_oscap/gui/spokes/oscap.glade | 45 ++++++++++++++++++++++++++++++--- + org_fedora_oscap/gui/spokes/oscap.py | 25 ++++++++++++++++-- + 2 files changed, 64 insertions(+), 6 deletions(-) + +commit 300652734cd11199080c254dd7e7a77f48024420 +Author: Vratislav Podzimek +Date: 2014-02-27 + + Fix listing python sources when creating potfile and regenerate it + + Fixing an issues made when copying the Makefile from a different project. Now + the potfile contains a bunch of new strings that should be translated. + + po/Makefile | 2 +- + po/oscap-anaconda-addon.pot | 100 ++++++++++++++++++++++++++++++++++++++------ + 2 files changed, 89 insertions(+), 13 deletions(-) + +commit 46a8c7be05680b4dc9b7d6c7df9d9e682bef55fe +Author: Vratislav Podzimek +Date: 2014-02-27 + + Omit the %addon section from kickstart in dry-run mode + + Also fix the docstring. + + org_fedora_oscap/common.py | 6 ++++++ + org_fedora_oscap/ks/oscap.py | 8 ++++++-- + 2 files changed, 12 insertions(+), 2 deletions(-) + +commit e19a7b9e0bff1882e03d451b2d2ecffdc3e93c35 +Author: Vratislav Podzimek +Date: 2014-02-27 + + Implement the dry-run mode in the GUI (trac#2) + + We need to let users opt out when we provide the addon by default and use SSG by + default. + + org_fedora_oscap/common.py | 19 +++++ + org_fedora_oscap/gui/spokes/oscap.glade | 1 + + org_fedora_oscap/gui/spokes/oscap.py | 129 +++++++++++++++++++++++--------- + 3 files changed, 115 insertions(+), 34 deletions(-) + +commit d0519db5aea0ead8d2a30c70f8c7849db3d32015 +Author: Vratislav Podzimek +Date: 2014-02-27 + + Add UI elements for content changing and dry-run mode + + These are needed now that we default to SSG if no other content is specified. + + org_fedora_oscap/gui/spokes/oscap.glade | 59 +++++++++++++++++++++++++++++++-- + 1 file changed, 56 insertions(+), 3 deletions(-) + +commit b9e732cbed1fe4c77601f4c4ac9d6a1d9b0ba561 +Author: Vratislav Podzimek +Date: 2014-02-24 + + Check content_defined instead of content_url in the GUI code + + When using SSG content_url is an empty string, but the content is defined. + + (issue appeared after a messed up rebase) + + org_fedora_oscap/gui/spokes/oscap.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 121411a320a1811c5bb0993d62b80d863d42de6c +Author: Vratislav Podzimek +Date: 2014-02-24 + + First select the profile, then update the message store + + Otherwise, there will be a wrong message reporting that no profile is selected. + + org_fedora_oscap/gui/spokes/oscap.py | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 1e4196c06a09c8c02efaf493484124d14ec637d4 +Author: Vratislav Podzimek +Date: 2014-02-24 + + Remove unused import + + org_fedora_oscap/ks/oscap.py | 1 - + 1 file changed, 1 deletion(-) + +commit 68b9c7087fae97047e220580789f8779fcbabead +Author: Vratislav Podzimek +Date: 2014-02-23 + + Ignore some more temporary/backup files + + .gitignore | 3 +++ + 1 file changed, 3 insertions(+) + +commit 13254f3d8fa258bdc8f98bc19d1bee1acbdc9d3b +Author: Vratislav Podzimek +Date: 2014-02-23 + + If no content is specified and SSG is available, use it + + This is the expected behaviour on the SCAP-enabled composes. + + org_fedora_oscap/gui/spokes/oscap.py | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +commit 0a8aa9c9ef5bccd16bdfa98b01caa711a2411c14 +Author: Vratislav Podzimek +Date: 2014-02-23 + + New special content type -- SCAP Security Guide + + SCAP Security Guide is expected to be the default content on SCAP-enabled + composes and thus need a bit special treatment. + + org_fedora_oscap/common.py | 13 +++++++++++++ + org_fedora_oscap/gui/spokes/oscap.py | 16 +++++++++------- + org_fedora_oscap/ks/oscap.py | 34 ++++++++++++++++++++++++++++++---- + 3 files changed, 52 insertions(+), 11 deletions(-) + +commit c63589524318177af29a16e1af8aaf498a6a4fcf +Author: Vratislav Podzimek +Date: 2014-02-18 + + Fix name of the property used when doing fingerprint check + + org_fedora_oscap/gui/spokes/oscap.py | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 66b954328d3f478742b7b82bdbe2eb7095a98eb7 +Author: Vratislav Podzimek +Date: 2014-02-18 + + Get rid of an unused variable + + org_fedora_oscap/gui/spokes/oscap.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b312fd4a6f231d29ea0f0c3a08def2a2d3b26b74 +Author: Vratislav Podzimek +Date: 2014-02-18 + + Fix data fetch locking to work properly with kickstart installations + + Kickstart installations do not trigger data fetch by clicking the Fetch button. + + org_fedora_oscap/gui/spokes/oscap.py | 25 +++++++++++++++++-------- + 1 file changed, 17 insertions(+), 8 deletions(-) + +commit f8a7811640a273c2301b26c53197a3e88d36bbca +Author: Vratislav Podzimek +Date: 2014-02-17 + + Use 'anonymous:' if no username and password is given for FTP + + This is how FTP servers usually work. + + org_fedora_oscap/data_fetch.py | 5 +++++ + 1 file changed, 5 insertions(+) + +commit edaf603a06d8ddf29d1624dc4a7d7ef91ab0fdba +Author: Vratislav Podzimek +Date: 2014-02-17 + + Initial version of the translations template file + + po/oscap-anaconda-addon.pot | 102 ++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 102 insertions(+) + +commit ffbe21d9b31597e77aa6e4e551483e0791c3862f +Author: Vratislav Podzimek +Date: 2014-02-16 + + First steps to dry-run mode + + org_fedora_oscap/ks/oscap.py | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit a0e0782bc51819c99a0cdb7251a626bbd0b0b9c1 +Author: Vratislav Podzimek +Date: 2014-02-16 + + Fix main notebook tabs + + There are only two tabs and their names shouldn't be translated. + + org_fedora_oscap/gui/spokes/oscap.glade | 15 ++------------- + 1 file changed, 2 insertions(+), 13 deletions(-) + +commit 917b673999bccc6e083198e5cb0f47204666dc9b +Author: Vratislav Podzimek +Date: 2014-02-16 + + Make translations work + + org_fedora_oscap/gui/spokes/oscap.py | 8 ++++---- + org_fedora_oscap/rule_handling.py | 4 ++-- + 2 files changed, 6 insertions(+), 6 deletions(-) + +commit 5aa5ce8045ef46170ff31a8bb98e58da7e4d88aa +Author: Vratislav Podzimek +Date: 2014-02-16 + + Manipulation with the i18n related files + + .gitignore | 3 ++- + .tx/config | 7 ++++++ + Makefile | 10 ++++++++ + po/Makefile | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 99 insertions(+), 1 deletion(-) + +commit 4c9d26e03d998cc165621a005f564ccfb4422d80 +Author: Vratislav Podzimek +Date: 2014-02-16 + + If no profile is given, default to default + + That's how the oscap tool works. + + org_fedora_oscap/ks/oscap.py | 2 +- + tests/ks_oscap_test.py | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit e864eeb065022b4b8b25b3b37534adbe7eacfa65 +Author: Vratislav Podzimek +Date: 2014-02-16 + + Ignore updates.img and its auxiliary directory + + .gitignore | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit bfda07c6789adaaffa18ce9a36616c3e61d0c79d +Author: Vratislav Podzimek +Date: 2014-02-16 + + Catch only fetching errors from the fetching thread + + org_fedora_oscap/gui/spokes/oscap.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d912602e881651e392b6f919dc1a3c362ba142c9 +Author: Vratislav Podzimek +Date: 2014-02-16 + + Do not allow multiple simultaneous fetches/initializations + + org_fedora_oscap/gui/spokes/oscap.py | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +commit b7905a7f87b6807f35173367606cff8c9056231a +Author: Vratislav Podzimek +Date: 2014-02-16 + + Prevent user from changing the URL while we try to fetch from it + + Also behave consistently with invalid URL/content. + + org_fedora_oscap/gui/spokes/oscap.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit f6e7115cc283704d23582d68aed8cd75ef0e0162 +Author: Vratislav Podzimek +Date: 2014-02-14 + + Add support for the Default profile + + The SCAP documentation suggests a default profile to be always available. Either + it means all rules if no profile is created in the content or first profile in + the content, etc., but that's handled by the oscap tool. + + org_fedora_oscap/common.py | 8 ++++++-- + org_fedora_oscap/content_handling.py | 5 +++-- + 2 files changed, 9 insertions(+), 4 deletions(-) + +commit 100b659af03983116b989f540c68f99c6ed4b537 +Author: Vratislav Podzimek +Date: 2014-02-14 + + Support FTP as a content source (#1050980) + + Users may want to use FTP instead of HTTP(S). + + org_fedora_oscap/data_fetch.py | 30 ++++++++++++++++++++---------- + org_fedora_oscap/ks/oscap.py | 2 +- + 2 files changed, 21 insertions(+), 11 deletions(-) + +commit 7d772cb4fc44fd491c46fb0c6cf91a2a84f8dfcc +Author: Vratislav Podzimek +Date: 2014-02-14 + + React properly on archive extraction failure + + org_fedora_oscap/gui/spokes/oscap.py | 24 ++++++++++++++++++++---- + 1 file changed, 20 insertions(+), 4 deletions(-) + +commit 099050953ac8609af9f954ef733e5612c809e0a6 +Author: Vratislav Podzimek +Date: 2014-02-14 + + Refactor the code pre-processing the fetched content + + There's no need to pass callbacks as parameters, they are all methods of the + same class, we can call them directly. Also parts of the code can be reused as a + standalone method. + + org_fedora_oscap/gui/spokes/oscap.py | 63 ++++++++++++++++-------------------- + 1 file changed, 27 insertions(+), 36 deletions(-) + +commit ceff85a194ba4b745901482b95699a0fed2c9292 +Author: Vratislav Podzimek +Date: 2014-02-14 + + Unify exceptions from archive extraction + + This way it's easier to process them. + + org_fedora_oscap/common.py | 20 +++++++++++++++++--- + 1 file changed, 17 insertions(+), 3 deletions(-) + +commit db3a744c5c92c8fa6ac258fecc01d929a5fa7b45 +Author: Vratislav Podzimek +Date: 2014-01-23 + + Make pylint check mandatory to pass + + Also inform the caller about what's happening. + + Makefile | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +commit b8b1b551038279caf4e2e488f439bb5404e5c034 +Author: Vratislav Podzimek +Date: 2014-01-23 + + Support for hash based content integrity checking + + org_fedora_oscap/content_handling.py | 5 ++++ + org_fedora_oscap/gui/spokes/oscap.py | 9 +++++++ + org_fedora_oscap/ks/oscap.py | 35 +++++++++++++++++++++++-- + org_fedora_oscap/utils.py | 51 ++++++++++++++++++++++++++++++++++++ + tests/ks_oscap_test.py | 33 +++++++++++++++++++++++ + 5 files changed, 131 insertions(+), 2 deletions(-) + +commit 576bce486f12a24528ab7eb28074e4b525139bf3 +Author: Vratislav Podzimek +Date: 2014-01-14 + + It's now 2014, I know! + + oscap-anaconda-addon.spec | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fea5fefadda2d5c47ccb419e553ed89ce8cdff9d +Author: Vratislav Podzimek +Date: 2014-01-14 + + New version - 0.4 + + Makefile | 2 +- + oscap-anaconda-addon.spec | 23 ++++++++++++++++++++++- + 2 files changed, 23 insertions(+), 2 deletions(-) + +commit ae58d78e818526273ea9d158396f50a33abfca1c +Author: Vratislav Podzimek +Date: 2014-01-14 + + Beware of running Gtk actions from a non-main thread + + Otherwise weird things may happen. + + org_fedora_oscap/gui/spokes/oscap.py | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +commit bf7d82f4088ece4d53ac36dc7793587a6dbfad65 +Author: Vratislav Podzimek +Date: 2014-01-14 + + Fix path to the tailoring file when getting rules + + org_fedora_oscap/gui/spokes/oscap.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1afc030a046bed87a6c003c865d21716e9ed77a4 +Author: Vratislav Podzimek +Date: 2014-01-14 + + A git hook for running tests when pushing + + We don't want to push changes that break tests. + + tools/pre-push | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +commit 369257c73e278d0a864d4cf2902cfb87a562088d +Author: Vratislav Podzimek +Date: 2014-01-14 + + Inform user if no profile is selected + + It's not at all obvious, otherwise. + + org_fedora_oscap/gui/spokes/oscap.py | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +commit 1a2db56a03b6216655610f9c0d89ae19838d053f +Author: Vratislav Podzimek +Date: 2014-01-14 + + Visually mark the selected profile + + This simple thing improves UX. + + org_fedora_oscap/gui/spokes/oscap.glade | 13 ++++++++++++- + org_fedora_oscap/gui/spokes/oscap.py | 23 ++++++++++++++++++++++- + 2 files changed, 34 insertions(+), 2 deletions(-) + +commit 4ff25267621942130ea68a51aa207dcbb885d590 +Author: Vratislav Podzimek +Date: 2014-01-14 + + Better UX with content URL entry and progress label + + If there is an error with fetching or processing content, the info should be + shown in a visible way. Also the focus should go to the entry with its text + selected because it is about to be changed. + + org_fedora_oscap/gui/spokes/oscap.py | 24 ++++++++++++++++++------ + 1 file changed, 18 insertions(+), 6 deletions(-) + +commit 4f0be4614aded2c775c9bc929e1d20a661e62958 +Author: Vratislav Podzimek +Date: 2014-01-13 + + React on invalid content properly (#1032846) + + If we are given an invalid content, it's not fatal, we can simply let user enter + another URL. + + org_fedora_oscap/gui/spokes/oscap.py | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +commit 8fbc81e0d03fd6038a282ca2ff0dc76d9c6c0049 +Author: Vratislav Podzimek +Date: 2014-01-13 + + Stop spinner when data fetching is finished + + org_fedora_oscap/gui/spokes/oscap.py | 3 +++ + 1 file changed, 3 insertions(+) + +commit 3f896b8439108ad97d7974865ed70936f8a36a4d +Author: Vratislav Podzimek +Date: 2014-01-13 + + Make the data fetching thread non-fatal (#1049989) + + Failed data fetching is a non-fatal state we can easily recover from. + + org_fedora_oscap/common.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit b4122ca2c7340caadfa41e222d25df3edc9ee7fe +Author: Vratislav Podzimek +Date: 2014-01-13 + + Exit code 2 from the oscap tool is not an error for us (#1050913) + + 'man oscap' says: + Normally, the exit status is 0 when operation finished successfully and 1 + otherwise. In cases when oscap performs evaluation of the system it may + return 2 indicating success of the operation but incompliance of the assessed + system. + + Only the success of the operation is important for us in that phase. + + org_fedora_oscap/common.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 2412dab84855ec2c38bbcff74819ae629f4829f1 +Author: Vratislav Podzimek +Date: 2014-01-13 + + Be ready to work with archives/RPMs containing data streams + + If e.g. a tailoring file or CPE dictionary is used together with a data stream + file the whole content provided to the addon will likely be an archive or an + RPM. + + We need to explore the extracted content files a bit more, decide which + content handling class to use and remember that for further decisions. + + org_fedora_oscap/content_handling.py | 32 +++++++++++++++++++++++++------- + org_fedora_oscap/gui/spokes/oscap.py | 32 +++++++++++++++++--------------- + 2 files changed, 42 insertions(+), 22 deletions(-) + +commit ba6b3ffcfb9fa19665fb784ee56558d0b3672a4a +Author: Vratislav Podzimek +Date: 2014-01-13 + + Add unit tests for the keep_type_map function + + Heavy-duty non-trivial function, definitely deserves testing. + + tests/utils_test.py | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 63 insertions(+) + +commit 2e855214c85bb0ca35fb103a6873aed7b30686c1 +Author: Vratislav Podzimek +Date: 2014-01-13 + + Add support for namedtuples to keep_type_map + + Namedtuples are quite popular in modern Python coding style, we should support + them in such generic function. + + org_fedora_oscap/utils.py | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit 12cec4cbed4526f25bf74b2e26281964864cf5c0 +Author: Vratislav Podzimek +Date: 2014-01-13 + + Add target for running pylint check + + Sometimes there's no need to run unit tests and it's only pylint's error check + that is important. + + Makefile | 3 +++ + 1 file changed, 3 insertions(+) + +commit 8e49c976dad64d76617b1be77d70006dc3516cad +Author: Vratislav Podzimek +Date: 2014-01-13 + + Add target for running just unittests + + pylint is fine, but so slow. We need a way to run just unittests. + + Makefile | 3 +++ + 1 file changed, 3 insertions(+) + +commit 3bfc3fee630cb7a2eb078599f4c984f2fb310eb5 +Author: Vratislav Podzimek +Date: 2013-12-12 + + On the way to tailoring + + org_fedora_oscap/common.py | 17 +++++++++++---- + org_fedora_oscap/content_handling.py | 40 +++++++++++++++++++++++++++++------- + org_fedora_oscap/gui/spokes/oscap.py | 13 ++++++++---- + org_fedora_oscap/ks/oscap.py | 2 +- + testing_files/tailoring.xml | 13 ++++++++++++ + 5 files changed, 69 insertions(+), 16 deletions(-) + +commit 64bf3986fcfe2c0d5ff17900f611317d1162d977 +Author: Vratislav Podzimek +Date: 2013-12-11 + + Tests for kickstart XCCDF tailoring handling + + tests/ks_oscap_test.py | 38 +++++++++++++++++++++++++++++++++++--- + 1 file changed, 35 insertions(+), 3 deletions(-) + +commit f279b9fdafcd5f1b9a690b1936152bc7336106e6 +Author: Vratislav Podzimek +Date: 2013-12-11 + + Kickstart support for XCCDF tailoring + + In order to make XCCDF tailoring work we first need to parse, store and use the + values provided by user. + + org_fedora_oscap/ks/oscap.py | 34 +++++++++++++++++++++++++++++++++- + 1 file changed, 33 insertions(+), 1 deletion(-) + +commit 378d9f1c65cd7b8e784078a2ae391de0d8bc5f53 +Author: Vratislav Podzimek +Date: 2013-12-11 + + Check session validity also when using XCCDF benchmark + + This check is needed for data stream collection as well as for standalone + benchmarks. + + org_fedora_oscap/content_handling.py | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 1cff01577b68409a0a5962b56a973783be0f32a4 +Author: Vratislav Podzimek +Date: 2013-12-10 + + New version - 0.3 + + Makefile | 2 +- + oscap-anaconda-addon.spec | 35 ++++++++++++++++++++++++++++++++++- + 2 files changed, 35 insertions(+), 2 deletions(-) + +commit 6935776172186f2b03db00a04c83f88ef82fb087 +Author: Vratislav Podzimek +Date: 2013-12-10 + + Implement and use our own better function for joining paths + + The standard os.path.join function has weird behaviour in many cases. + + org_fedora_oscap/common.py | 6 +++--- + org_fedora_oscap/ks/oscap.py | 29 ++++++++++++++--------------- + org_fedora_oscap/utils.py | 22 +++++++++++++++++++++- + tests/utils_test.py | 19 +++++++++++++++++++ + 4 files changed, 57 insertions(+), 19 deletions(-) + +commit c5d66ed27826b07d484a6df99f1858250ff164bf +Author: Vratislav Podzimek +Date: 2013-12-10 + + The content entry should have focus if there is no content + + User is going to enter the content URL, so we may save them one predictable + click. + + org_fedora_oscap/gui/spokes/oscap.py | 3 +++ + 1 file changed, 3 insertions(+) + +commit e14b1101419f12d78cab3316148ccc8a694a281a +Author: Vratislav Podzimek +Date: 2013-12-10 + + RPM is just a weird archive in the pre-installation phase + + Instead of doing some magic around RPMs, we can simply treat them as archives in + the pre-installation phase. + + org_fedora_oscap/gui/spokes/oscap.py | 12 ++---------- + org_fedora_oscap/ks/oscap.py | 3 --- + 2 files changed, 2 insertions(+), 13 deletions(-) + +commit b04f50412ee6f7ab33d8a27c3f23c235a702271a +Author: Vratislav Podzimek +Date: 2013-12-10 + + Ignore RPM files as well + + They shouldn't appear in the repository unless they are temporary files used for + testing. + + .gitignore | 1 + + 1 file changed, 1 insertion(+) + +commit bfbfc13fda3b93a31a6c204c1e5c99898ab10efd +Author: Vratislav Podzimek +Date: 2013-12-10 + + Adapt tests to dir constants now ending with "/" + + tests/ks_oscap_test.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 716898ce956eb29a8993575a59497f30058299d8 +Author: Vratislav Podzimek +Date: 2013-12-10 + + CpioArchive cannot be created from a piped output + + It does seeks which don't work on pipes. Use temporary file instead. + + org_fedora_oscap/common.py | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +commit f0632f4fd8eec799a7d1bc70e1f99374a65018f4 +Author: Vratislav Podzimek +Date: 2013-12-04 + + Fix namespace definitions in the testing XCCDF file + + libxml2 is more strict now so we should drop unused namespaces to prevent + issues. + + testing_files/testing_xccdf.xml | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +commit d597248f4e53f6c8c9c529287c45ca10c4960f1d +Author: Vratislav Podzimek +Date: 2013-12-04 + + Prevent putting None into xccdf_session_is_sds + + Putting None (null) into xccdf_session_is_sds causes segmentation fault, so we + should instead check the session validity in advance. + + org_fedora_oscap/content_handling.py | 3 +++ + 1 file changed, 3 insertions(+) + +commit 4aabeb38836272f2c19cec7e102d68d4b933421f +Author: Vratislav Podzimek +Date: 2013-12-04 + + Fix the __all__ variable in the common module + + There are more functions that should be exported now. + + org_fedora_oscap/common.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 1c621ba95a33032295cff4eed158b86b008c4993 +Author: Vratislav Podzimek +Date: 2013-12-04 + + Strip content dir prefix when setting xccdf/cpe paths + + org_fedora_oscap/common.py | 26 ++++++++++++++++++++++++-- + org_fedora_oscap/gui/spokes/oscap.py | 6 ++++-- + org_fedora_oscap/utils.py | 32 ++++++++++++++++++++++++++++++++ + 3 files changed, 60 insertions(+), 4 deletions(-) + +commit e021966c286f7827541fcbdcd2e6658d5a93bf14 +Author: Vratislav Podzimek +Date: 2013-12-04 + + Inform user we now support archive URLs as well + + org_fedora_oscap/gui/spokes/oscap.glade | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit c4b7e5808bb5dba46a2d4346927217ba7d8c7f3e +Author: Vratislav Podzimek +Date: 2013-12-04 + + Ignore various file types in the git repository + + Ignore files that are typically just temporary files used for testing, editting, + etc. + + .gitignore | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 9d501deec4e9c949da9f3b30d3383cbd416ffcc3 +Author: Vratislav Podzimek +Date: 2013-12-04 + + Try to find content files in the fetched archive or RPM + + org_fedora_oscap/content_handling.py | 31 +++++++++++++++++++++++++++++++ + org_fedora_oscap/gui/spokes/oscap.py | 21 ++++++++++++++------- + 2 files changed, 45 insertions(+), 7 deletions(-) + +commit 62dde23a49488de240d6c40d026cc46cb89cc29a +Author: Vratislav Podzimek +Date: 2013-12-04 + + Run pylint -E as part of the test target + + Makefile | 2 ++ + org_fedora_oscap/gui/spokes/oscap.py | 1 + + 2 files changed, 3 insertions(+) + +commit 7ef1c2f7db52eee104d93f3eb7f0efc909ae5b7e +Author: Vratislav Podzimek +Date: 2013-12-04 + + Return list of extracted files/directories when extracting archive + + This information is needed for further processing to pick up the right content + files. + + org_fedora_oscap/common.py | 20 +++++++++++++++----- + 1 file changed, 15 insertions(+), 5 deletions(-) + +commit 32430e52a0c8818180a8d70bd75f7672e0ba5f0b +Author: Vratislav Podzimek +Date: 2013-12-04 + + Do not try to search for empty file paths in archives + + org_fedora_oscap/common.py | 3 +++ + 1 file changed, 3 insertions(+) + +commit 014327b06899cd763cda3b2f26f79e85a8f722a9 +Author: Vratislav Podzimek +Date: 2013-12-04 + + Properly set the content type based on the URL's suffix + + This is the first step to supporting interactive content fetching with anything + else than data streams. + + org_fedora_oscap/gui/spokes/oscap.py | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit f2345f810e492925b93c80572fa7743b562d0385 +Author: Vratislav Podzimek +Date: 2013-12-03 + + Switch profiles on double-click + + If a profile is double-clicked, we should switch to it. + + org_fedora_oscap/gui/spokes/oscap.glade | 4 +++- + org_fedora_oscap/gui/spokes/oscap.py | 15 +++++++++++++++ + 2 files changed, 18 insertions(+), 1 deletion(-) + +commit 60a4261e97d5ba8ee22460d01eca8ee64448f298 +Author: Vratislav Podzimek +Date: 2013-12-03 + + Hook urlEntry's activate signal to fetchButton click + + This makes hitting ENTER in the entry work the same way as clicking the fetch + button which simplifies keyboard navigation and speeds up work with the screen. + + org_fedora_oscap/gui/spokes/oscap.glade | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 6952e933a69ece236fd24eca056d1af6fbac75af +Author: Vratislav Podzimek +Date: 2013-12-03 + + Save the spoke's glade file with a new Glade + + org_fedora_oscap/gui/spokes/oscap.glade | 59 +++++++++++++++++---------------- + 1 file changed, 30 insertions(+), 29 deletions(-) + +commit b360f125c24b9017e43ccecf629d6c1a51000964 +Author: Vratislav Podzimek +Date: 2013-12-02 + + The addon now requires the python-cpio package + + oscap-anaconda-addon.spec | 2 ++ + 1 file changed, 2 insertions(+) + +commit a5f562ed457b5d4798a9a72cc679867cef34f060 +Author: Vratislav Podzimek +Date: 2013-12-02 + + Use really_hide for the UI elements for datastream-id and xccdf-id + + org_fedora_oscap/gui/spokes/oscap.py | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 5ffffbdc57ba7d892a59e50a4c2105dc5289e04c +Author: Vratislav Podzimek +Date: 2013-12-02 + + Support for RPM content in the GUI spoke + + org_fedora_oscap/gui/spokes/oscap.py | 4 ++++ + 1 file changed, 4 insertions(+) + +commit a83cd9d11f77a76fa2e74cc726b284839c82f0d1 +Author: Vratislav Podzimek +Date: 2013-12-02 + + RPM content support for kickstart processing + + org_fedora_oscap/ks/oscap.py | 18 ++++++++++++++++++ + tests/ks_oscap_test.py | 19 +++++++++++++++++++ + 2 files changed, 37 insertions(+) + +commit 7ec1d71933ca97c3efca1617f2c2855725a5ce10 +Author: Vratislav Podzimek +Date: 2013-12-02 + + Add property for the raw post-installation content path + + It is needed for RPM content processing. + + org_fedora_oscap/gui/spokes/oscap.py | 8 ++++---- + org_fedora_oscap/ks/oscap.py | 11 +++++++++-- + tests/ks_oscap_test.py | 19 ++++++++++++------- + 3 files changed, 25 insertions(+), 13 deletions(-) + +commit c01295c9db4cf53450a033b9cb01309480d048c7 +Author: Vratislav Podzimek +Date: 2013-12-02 + + Make content type case insensitive + + org_fedora_oscap/ks/oscap.py | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +commit f467cf62a5d988cb67123f2c53e6f4dca6dae08d +Author: Vratislav Podzimek +Date: 2013-12-02 + + Rest of the code needed for RPM extraction + + Plus a few pylint-suggested tweaks. + + org_fedora_oscap/common.py | 38 +++++++++++++++++++++++++++++--------- + 1 file changed, 29 insertions(+), 9 deletions(-) + +commit 9dfe8c318508a7d73735c5cf5597767023ca7ac0 +Author: Vratislav Podzimek +Date: 2013-11-21 + + Actually look for the file path in entry names + + org_fedora_oscap/common.py | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +commit b01bb043fccda2f4d04b0ca5812db5bab9dc8766 +Author: Vratislav Podzimek +Date: 2013-11-21 + + Basic stuff needed for the RPM content support + + org_fedora_oscap/common.py | 66 +++++++++++++++++++++++++----------- + org_fedora_oscap/gui/spokes/oscap.py | 2 +- + 2 files changed, 48 insertions(+), 20 deletions(-) + +commit e11e6b74de459a1bc23ac238307e240295eaec4c +Author: Vratislav Podzimek +Date: 2013-11-14 + + Run tests in paralel + + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 917aca4db553f05040b8b5e4e037e47ccfc8ea26 +Author: Vratislav Podzimek +Date: 2013-10-22 + + Specify files in a better way in spec + + oscap-anaconda-addon.spec | 12 +----------- + 1 file changed, 1 insertion(+), 11 deletions(-) + +commit 98f686b81a6a8ad494f2d0b274a1a0816f466658 +Author: Vratislav Podzimek +Date: 2013-10-21 + + First version to be built + + Makefile | 2 +- + oscap-anaconda-addon.spec | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit beabcd08b279f31d12d80d014b35bdd72a5f8dcc +Author: Vratislav Podzimek +Date: 2013-10-21 + + Add some more build requires + + oscap-anaconda-addon.spec | 2 ++ + 1 file changed, 2 insertions(+) + +commit 5b4142f6cef304322257cd663ec7478ee51fd715 +Author: Vratislav Podzimek +Date: 2013-10-21 + + Fix few things in the tarball + + oscap-anaconda-addon.spec | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +commit cd381a64dd987924f88b1c5a5ee47195901537c5 +Author: Vratislav Podzimek +Date: 2013-10-21 + + Include unit tests in the dist tarball + + Makefile | 2 ++ + 1 file changed, 2 insertions(+) + +commit e6435a92d65faf55e58c8160d4ad6b6e35d6f90b +Author: Vratislav Podzimek +Date: 2013-10-10 + + Very first version of the spec file + + oscap-anaconda-addon.spec | 45 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 45 insertions(+) + +commit e4796bbfb18378c52d35f47d6b71721e00336bfa +Author: Vratislav Podzimek +Date: 2013-10-10 + + Add Makefile targets for installation and uninstallation + + Makefile | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 55 insertions(+) + +commit 5ac620b27b94e4bb6a9c5cec25f614530e0b6f82 +Author: Vratislav Podzimek +Date: 2013-10-10 + + Add common files a good project should have + + COPYING | 339 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + README | 3 + + 2 files changed, 342 insertions(+) + +commit 7abfa5be20069e54479b29df6817767a12e955f4 +Author: Vratislav Podzimek +Date: 2013-06-22 + + Basic support for entering content URL in the GUI + + So far only valid data stream content is supported, anything else would cause + tracebacks. + + org_fedora_oscap/gui/spokes/oscap.glade | 404 ++++++++++++++++++++++---------- + org_fedora_oscap/gui/spokes/oscap.py | 100 +++++++- + 2 files changed, 363 insertions(+), 141 deletions(-) + +commit dac96cfa2d912326edf581fb9f6b85a015e88755 +Author: Vratislav Podzimek +Date: 2013-06-22 + + Make content_name a property + + Statically assigned value may cause problems when changing content_url outside + of parsing kickstart values. + + org_fedora_oscap/ks/oscap.py | 18 ++++++++++-------- + 1 file changed, 10 insertions(+), 8 deletions(-) + +commit b89ea6842305c12687588d18aa01cb9f2eb645da +Author: Vratislav Podzimek +Date: 2013-06-22 + + Add a function telling if we can fetch data from given URL + + org_fedora_oscap/data_fetch.py | 16 +++++++++++++++- + tests/data_fetch_test.py | 10 +++++++++- + 2 files changed, 24 insertions(+), 2 deletions(-) + +commit 74bb031b1ca10a3d3dce7ff3160e134e75881a7b +Author: Vratislav Podzimek +Date: 2013-06-22 + + Simple Makefile with a target for running tests + + Makefile | 2 ++ + 1 file changed, 2 insertions(+) + +commit 7fcd42ebff473522d209e9d6a47808f5b8c5873d +Author: Vratislav Podzimek +Date: 2013-05-13 + + Inform user if no pre-installation rules have been found + + If no pre-installation rules are found in the chosen profile, add a message + informing about that instead of leaving the store empty. + + org_fedora_oscap/gui/spokes/oscap.py | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit 8ef1e9489f432661328169388018fdd584c3b184 +Author: Vratislav Podzimek +Date: 2013-05-11 + + Testing files for non-datastream content + + testing_files/scap-mycheck-oval.xml | 33 +++++++++++++++++++++++++ + testing_files/xccdf.xml | 48 +++++++++++++++++++++++++++++++++++++ + 2 files changed, 81 insertions(+) + +commit 41dcdad9ce973d8a65f21906b4dbf8737bcd8264 +Author: Vratislav Podzimek +Date: 2013-05-11 + + Make GUI work with data streams or a plain benchmark + + org_fedora_oscap/gui/spokes/oscap.glade | 4 +- + org_fedora_oscap/gui/spokes/oscap.py | 113 ++++++++++++++++++++++---------- + 2 files changed, 82 insertions(+), 35 deletions(-) + +commit 4c1dd1408258d67d20208479440f4b8288444c59 +Author: Vratislav Podzimek +Date: 2013-05-11 + + Return True/False from the set_treeview_selection + + This may come handy for debugging. + + org_fedora_oscap/gui/spokes/oscap.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit deae874c5d692572f407eb23d73a8a8235560c73 +Author: Vratislav Podzimek +Date: 2013-05-11 + + Don't use the busied_cursor content manager + + It doesn't work. + + org_fedora_oscap/gui/spokes/oscap.py | 11 ++++------- + 1 file changed, 4 insertions(+), 7 deletions(-) + +commit 59e47e1ed757b71bd3c07ede3af687490fb298ac +Author: Vratislav Podzimek +Date: 2013-05-10 + + Add property for the raw downloaded content data + + Also document the other properties of the OSCAPdata class. + + org_fedora_oscap/ks/oscap.py | 11 +++++++++++ + tests/ks_oscap_test.py | 35 +++++++++++++++++++++++++++++++++++ + 2 files changed, 46 insertions(+) + +commit adca762bbecc54576667c6a0037c225b25882ed5 +Author: Vratislav Podzimek +Date: 2013-05-10 + + Pass datastream and xccdf IDs to run_oscap_remediate + + org_fedora_oscap/ks/oscap.py | 1 + + 1 file changed, 1 insertion(+) + +commit 1a93692a095afca9dd4c7a4bee378e264986c708 +Author: Vratislav Podzimek +Date: 2013-05-10 + + Define and use a property for the post-installation content path + + org_fedora_oscap/ks/oscap.py | 21 ++++++++++++--------- + tests/ks_oscap_test.py | 4 ++++ + 2 files changed, 16 insertions(+), 9 deletions(-) + +commit 5aa40af53961d4bba6c2ebd84b1370bb5a5ec3e5 +Author: Vratislav Podzimek +Date: 2013-05-10 + + Copy all content even if not using data stream + + org_fedora_oscap/ks/oscap.py | 20 ++++++++++++++------ + 1 file changed, 14 insertions(+), 6 deletions(-) + +commit cc015929c6108977006728c3ece7d759dfe026de +Author: Vratislav Podzimek +Date: 2013-05-10 + + Add universal function for copying files and directories + + org_fedora_oscap/utils.py | 32 ++++++++++++++++++++++++++++++++ + 1 file changed, 32 insertions(+) + +commit 8f88f0c586e932483d6bf48c60dff4031f92f907 +Author: Vratislav Podzimek +Date: 2013-05-10 + + preinst_content_path's value depends on the content type + + For a data stream it should return the path to the data stream file, for the + other types it should return the path to the XCCDF file. + + org_fedora_oscap/ks/oscap.py | 10 +++++++--- + tests/ks_oscap_test.py | 37 +++++++++++++++++++++++++++++++++++++ + 2 files changed, 44 insertions(+), 3 deletions(-) + +commit 5aea543cfc71e77d5bb134f05892641f526bea94 +Author: Vratislav Podzimek +Date: 2013-05-10 + + Allow content type to be "archive" + + Changes needed only for correct parsing and checking. + + org_fedora_oscap/common.py | 2 ++ + org_fedora_oscap/ks/oscap.py | 16 ++++++++++++---- + tests/ks_oscap_test.py | 31 +++++++++++++++++++++++++++++++ + 3 files changed, 45 insertions(+), 4 deletions(-) + +commit 53fa6a31e08d016c00a89a0c6b5d8ec6de267bf2 +Author: Vratislav Podzimek +Date: 2013-05-10 + + Check if the relative path exists in the archive + + Testing just for filename is not reliable. + + org_fedora_oscap/common.py | 18 ++++++++++++------ + 1 file changed, 12 insertions(+), 6 deletions(-) + +commit a874b03008bfc82f7b58898aa7010f5000bd9457 +Author: Vratislav Podzimek +Date: 2013-05-10 + + Support for plain, gzipped and bzipped tarballs + + org_fedora_oscap/common.py | 40 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 40 insertions(+) + +commit 43d102171887e4103d8cad63b4a483d8d951741f +Author: Vratislav Podzimek +Date: 2013-05-10 + + Rename the zf variable to zfile + + The new name follows the variable naming conventions. + + org_fedora_oscap/common.py | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit 75af0bd0783db918571a1ad66a4d0f6d717c2344 +Author: Vratislav Podzimek +Date: 2013-05-09 + + Add function for data extraction + + Only with the ZIP support for now, more archive types should follow later. + + org_fedora_oscap/common.py | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) + +commit 8a03c695e55e9f29d550ba30686aa034579dd28e +Author: Vratislav Podzimek +Date: 2013-05-09 + + Move constants and RuleData definition to the beginning + + org_fedora_oscap/common.py | 16 +++++++++------- + 1 file changed, 9 insertions(+), 7 deletions(-) + +commit ed9201bfbc9293afe6cb846df6aff449a08fdd32 +Author: Vratislav Podzimek +Date: 2013-05-09 + + Use XCCDF session instead of importing benchmark directly + + This should work better with CPE dictionaries and some other stuff. + + org_fedora_oscap/content_handling.py | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +commit 297d0a950666408de7df7b6bd78498b2807ebb3b +Author: Vratislav Podzimek +Date: 2013-05-08 + + Remove no longer used constant + + org_fedora_oscap/data_fetch.py | 2 -- + 1 file changed, 2 deletions(-) + +commit 4dd5ef1196714f9752916605e6eaf46b473450dc +Author: Vratislav Podzimek +Date: 2013-05-08 + + BenchmarkHandler for standalone XCCDF benchmarks + + First step to work with a content not bundled in a data stream. + + org_fedora_oscap/content_handling.py | 55 ++++++++++++++++++++++++++++++++++++ + 1 file changed, 55 insertions(+) + +commit aa02110462d3b71475f39a0ed10376f40f5fb594 +Author: Vratislav Podzimek +Date: 2013-05-08 + + Test if the file exists before trying to load it + + org_fedora_oscap/content_handling.py | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 186d989bcb2a9f56d6b55823069febbd0cc756f5 +Author: Vratislav Podzimek +Date: 2013-05-04 + + Add some more data to the testing data stream XML + + This is useful for GUI testing. + + testing_files/testing_ds.xml | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +commit 9af0501e331404c3630f74cece4a42a901c24035 +Author: Vratislav Podzimek +Date: 2013-05-04 + + Enhance and better hook up the GUI + + org_fedora_oscap/gui/spokes/oscap.glade | 25 ++++- + org_fedora_oscap/gui/spokes/oscap.py | 160 ++++++++++++++++++++++++++++---- + 2 files changed, 163 insertions(+), 22 deletions(-) + +commit 0afaad773180cee854ace2d04459c182803a6f2d +Author: Vratislav Podzimek +Date: 2013-05-04 + + Locally disable pylint in some places + + Also fix the comment above the OSCAPspoke's methods + + org_fedora_oscap/gui/spokes/oscap.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit c6a21f1b4f2d0c5928f44782f59934e1ae8c2ba1 +Author: Vratislav Podzimek +Date: 2013-05-04 + + Do nothing if reverting changes on a nonexisting mount point + + org_fedora_oscap/rule_handling.py | 4 ++++ + tests/rule_handling_test.py | 14 ++++++++++++++ + 2 files changed, 18 insertions(+) + +commit 06a187817889af43ed954320e217d5b00c46e71d +Author: Vratislav Podzimek +Date: 2013-05-03 + + Basic hooking up of the UI elements + + org_fedora_oscap/gui/spokes/oscap.glade | 6 +- + org_fedora_oscap/gui/spokes/oscap.py | 157 +++++++++++++++++++++++++++++++- + 2 files changed, 159 insertions(+), 4 deletions(-) + +commit cd7c9860696333d0742241e874417582b5a87e96 +Author: Vratislav Podzimek +Date: 2013-05-03 + + Return dict instead of list of pairs + + get_data_streams_checklists should return a dict instead of a list of pairs, + because a dict can be used more easily. + + org_fedora_oscap/content_handling.py | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +commit 0d8787a2242137339667d797cc2e91cda3335332 +Author: Vratislav Podzimek +Date: 2013-05-03 + + Minor tweaks of the gui.spokes.oscap module + + Mainly pylint suggestions and a better docstring for the OSCAPspoke class. + + org_fedora_oscap/gui/spokes/oscap.py | 23 ++++++++++++----------- + 1 file changed, 12 insertions(+), 11 deletions(-) + +commit eeb298842218bf46f0e19ccbaca9f5aa0adc44ac +Author: Vratislav Podzimek +Date: 2013-05-03 + + Use OrderedDict for the data stream IDs and checklist IDs + + People expect the ordering of the IDs be the same as in their documents. + + org_fedora_oscap/content_handling.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 9945ab027f237b68c60955406a4b3ff20838ed54 +Author: Vratislav Podzimek +Date: 2013-05-02 + + Add comboboxes for data streams and checklists + + Also add column for the profile ID. + + org_fedora_oscap/gui/spokes/oscap.glade | 129 ++++++++++++++++++++++++++++++-- + 1 file changed, 124 insertions(+), 5 deletions(-) + +commit 5aecf55f6285f6f95ccfe263a0315fc456bfdbc3 +Author: Vratislav Podzimek +Date: 2013-05-01 + + Add code for gathering items from the SCAP content + + For now only for datastreams, support for standalone benchmarks will be added + later. + + This will be needed by the GUI to allow users choose data stream, checklist and + profile interactively. + + org_fedora_oscap/content_handling.py | 220 +++++++++++++++++++++++++++++++++++ + 1 file changed, 220 insertions(+) + +commit 1ea8fe849d7bda538afdc89bd451e1c836fe5987 +Author: Vratislav Podzimek +Date: 2013-04-28 + + Add method for reverting changes to the RuleHandlers + + This is needed for switching from one profile to another one. All changes done + by the evaluation of the old profile's rules need to be reverted before the + rules from the new one can be evaluated. + + org_fedora_oscap/rule_handling.py | 163 +++++++++++++++++++++++++++++++++----- + tests/rule_handling_test.py | 143 +++++++++++++++++++++++++++++++-- + 2 files changed, 279 insertions(+), 27 deletions(-) + +commit f9ab31d0c64458a36ec7a5b0fd379ce6f5d487ed +Author: Vratislav Podzimek +Date: 2013-04-28 + + Fix the number of arguments in PasswdRules.eval_rules + + org_fedora_oscap/rule_handling.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 93f8c9368a559649cc2f8d371a94665acf02dd36 +Author: Vratislav Podzimek +Date: 2013-04-22 + + Add comma to the warning and don't confuse Anaconda + + We need to clear the seen flag for the root password. + + org_fedora_oscap/rule_handling.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 2d8d1398ce87e713539e5eaf3eeebd7cc51cb574 +Author: Vratislav Podzimek +Date: 2013-04-21 + + ensure_dir_exists shouldn't raise exception on empty string + + org_fedora_oscap/utils.py | 4 ++++ + tests/utils_test.py | 4 ++++ + 2 files changed, 8 insertions(+) + +commit d6b89b975e30661345e7d3c39ef71f7d732b646b +Author: Vratislav Podzimek +Date: 2013-04-21 + + Replace the custom magic code by pycurl + + There's no need to use our own buggy code when there is a working, tested and + fast library for that. + + org_fedora_oscap/data_fetch.py | 94 +++++++++++------------------------------- + tests/data_fetch_test.py | 23 +---------- + 2 files changed, 26 insertions(+), 91 deletions(-) + +commit 67217aa58e4cb1537c9a3bc14527ae2f5a19631c +Author: Vratislav Podzimek +Date: 2013-04-20 + + Evaluate boot loader rules (password requirement) + + org_fedora_oscap/rule_handling.py | 14 +++++++++++--- + tests/rule_handling_test.py | 21 +++++++++++++++++++++ + 2 files changed, 32 insertions(+), 3 deletions(-) + +commit 4266e479e423f6a907aaa6da123c4317069e206f +Author: Vratislav Podzimek +Date: 2013-04-20 + + Cover various cases that can happen with root password + + The warning should reflect whether the password was set but too short or whether + it was set but as already crypted or whether it is missing at all. + + org_fedora_oscap/rule_handling.py | 26 ++++++++++++-- + tests/rule_handling_test.py | 72 ++++++++++++++++++++++++++++++++++++++- + 2 files changed, 94 insertions(+), 4 deletions(-) + +commit aba27f758f54ac7d9502aff2daaa137f05934fc3 +Author: Vratislav Podzimek +Date: 2013-04-20 + + Report all mount points mentioned in the rules for now + + Until the revert_changes is implemented on all RuleHandlers, let's just report + all mount options mentioned in the rules. But still there should be no + duplicates added. + + org_fedora_oscap/rule_handling.py | 18 +++++++------ + tests/rule_handling_test.py | 56 ++++++++++++++++++++++++++++++++++----- + 2 files changed, 60 insertions(+), 14 deletions(-) + +commit f8598a585d0b0ea5ae9e58194a6a2fd10ea1e990 +Author: Vratislav Podzimek +Date: 2013-04-20 + + Add even more testing fixes for pre-installation phase + + testing_files/testing_ds.xml | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +commit a32b79b4dca1a940f522c3cdc7ccad489f299963 +Author: Vratislav Podzimek +Date: 2013-04-20 + + Add apostrophes around the mount options and packages + + This makes them more visible in the UI. + + org_fedora_oscap/rule_handling.py | 6 +++--- + tests/rule_handling_test.py | 24 ++++++++++++------------ + 2 files changed, 15 insertions(+), 15 deletions(-) + +commit debd5b7e927d3b77441c87355b43b5aeea8ece25 +Author: Vratislav Podzimek +Date: 2013-04-20 + + Use shlex to split rules into args + + Rule lines are based on the shell syntax so they should be parsed that way. + + org_fedora_oscap/rule_handling.py | 9 +++++---- + tests/rule_handling_test.py | 7 +++++++ + 2 files changed, 12 insertions(+), 4 deletions(-) + +commit eaf8667326fbc50cf49c6c55cfa1826c46b898f1 +Author: Vratislav Podzimek +Date: 2013-04-20 + + Move bootloader kickstart command up + + This leaves storage configuration trailing in the end of the section which makes + it easily distinguishable and modifiable. + + testing_files/testing_ks.cfg | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit d6e3db483fc3d5ada37fee132fbf529604a3e042 +Author: Vratislav Podzimek +Date: 2013-04-20 + + Test more features of the rule handling + + testing_files/testing_ds.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit f70173485540e7c955cbae5bfd461a708ea03f55 +Author: Vratislav Podzimek +Date: 2013-04-19 + + Add rule for testing rule pre-installation rule evaluation + + testing_files/testing_ds.xml | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit b3a5f8f41de841c327a756a5e84c8663f4217f74 +Author: Vratislav Podzimek +Date: 2013-04-19 + + Hook up the rule evaluation with GUI and kickstart + + GUI needs to evaluate rules to show errors, warnings and info messages and to + update the spoke's status and completion. kickstart needs to make sure there are + no errors remaining. + + org_fedora_oscap/gui/spokes/oscap.glade | 2 +- + org_fedora_oscap/gui/spokes/oscap.py | 59 +++++++++++++++++++++++++++++---- + org_fedora_oscap/ks/oscap.py | 22 +++++++++--- + 3 files changed, 71 insertions(+), 12 deletions(-) + +commit 8b81d37f1cd50c5ec887f8dd5d771e72e030c2ea +Author: Vratislav Podzimek +Date: 2013-04-19 + + Export the OSCAPaddonError from the common module + + org_fedora_oscap/common.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fc45d461ae7f65978edfa9ef411cc82524ee8952 +Author: Vratislav Podzimek +Date: 2013-04-19 + + Test no changes to mount options are made when just reporting + + tests/rule_handling_test.py | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 401fa33d933dc31870829512f2a933f7e2b974e6 +Author: Vratislav Podzimek +Date: 2013-04-19 + + Add code for rules evaluation + + org_fedora_oscap/rule_handling.py | 114 +++++++++++++++- + tests/rule_handling_test.py | 275 +++++++++++++++++++++++++++++++++++++- + 2 files changed, 381 insertions(+), 8 deletions(-) + +commit 73b5788492a55f9275ae508b261d4a50bafb8c2b +Author: Vratislav Podzimek +Date: 2013-04-19 + + Base class for rule handlers + + Abstract class for the rule handling classes that are expected to override the + method for rules evaluation. + + org_fedora_oscap/rule_handling.py | 35 ++++++++++++++++++++++++++++++----- + 1 file changed, 30 insertions(+), 5 deletions(-) + +commit 8b3992b01802f57f581f55210c152f62df3c9970 +Author: Vratislav Podzimek +Date: 2013-04-19 + + Define class for messages used in rule evaluation + + Also move message type contants to the common module. + + org_fedora_oscap/common.py | 12 ++++++++++++ + org_fedora_oscap/gui/spokes/oscap.py | 9 ++++----- + 2 files changed, 16 insertions(+), 5 deletions(-) + +commit bb3c793d3bf6c7539505567a75aa3b28b88e1a41 +Author: Vratislav Podzimek +Date: 2013-04-18 + + Add code for handling bootloader password rule + + A common rule in SCAP profiles is that boot loader should be password protected. + + org_fedora_oscap/rule_handling.py | 36 ++++++++++++++++++++++++++++++++++++ + tests/rule_handling_test.py | 5 +++++ + 2 files changed, 41 insertions(+) + +commit 49e3a766e35addad4464de479f54314019233739 +Author: Vratislav Podzimek +Date: 2013-04-13 + + Add some more lines to the testing kickstart + + This saves a lot of clicking in the GUI and fully automates the installation. + + testing_files/testing_ks.cfg | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit 4b89603dd324274ef2230519e96c505fbdca5101 +Author: Vratislav Podzimek +Date: 2013-04-13 + + Fix two places with self._data_subtree left over + + org_fedora_oscap/gui/spokes/oscap.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 8250928bb7cc088f632eec5804ede7993ea934e7 +Author: Vratislav Podzimek +Date: 2013-04-13 + + Add code for handling package rules + + Such rules appear in the SCAP content and dealing with them pre-install may + shorten the installation and remediation time. + + org_fedora_oscap/rule_handling.py | 67 +++++++++++++++++++++++++++++++++++++++ + tests/rule_handling_test.py | 9 ++++++ + 2 files changed, 76 insertions(+) + +commit 32d3ebe45c64128c52bd4f0a4cbc7311dee1d072 +Author: Vratislav Podzimek +Date: 2013-04-13 + + First steps of the pre-installation fixes hooking + + org_fedora_oscap/gui/spokes/oscap.py | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +commit fd239cd5a16ff0f5c1e9f5e90cf21cf66dbf0e8c +Author: Vratislav Podzimek +Date: 2013-04-13 + + Make code ready for non-network data fetching + + Also document the waiting function in a better way. + + org_fedora_oscap/gui/spokes/oscap.py | 21 +++++++++++---------- + 1 file changed, 11 insertions(+), 10 deletions(-) + +commit 8b42628e894ca064b1543cb94761501cd737499e +Author: Vratislav Podzimek +Date: 2013-04-13 + + Define a property for the pre-installation content path + + Also rename self._data_subtree to shorter and better self._addon_data and fix + typo in tests. + + org_fedora_oscap/gui/spokes/oscap.py | 9 +++------ + org_fedora_oscap/ks/oscap.py | 10 ++++++---- + tests/ks_oscap_test.py | 8 +++++++- + 3 files changed, 16 insertions(+), 11 deletions(-) + +commit 43f3ffeffa9bb7dd5ee0ec5d9d195e05e92dc60d +Author: Vratislav Podzimek +Date: 2013-04-12 + + Document the thread_name parameter + + Also remove one leftover line. + + org_fedora_oscap/gui/spokes/oscap.py | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit ae427830fa06a2651c3dcc06b881e3435976c49e +Author: Vratislav Podzimek +Date: 2013-04-09 + + Testing kickstart file + + testing_files/testing_ks.cfg | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +commit 6d1b9a956f5017795fe9c22cab2fa45b48fab49d +Author: Vratislav Podzimek +Date: 2013-04-09 + + Tests for the utils module + + tests/utils_test.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 55 insertions(+) + +commit 5d886c513a2dce402b93f6b2d4690805aebc477d +Author: Vratislav Podzimek +Date: 2013-04-08 + + Copy content to the target system and run remediation + + The content needs to be copied to the target system so that it can be used for + evaluation and remediation in chroot. + + org_fedora_oscap/common.py | 4 ++-- + org_fedora_oscap/ks/oscap.py | 23 +++++++++++++++++++++-- + 2 files changed, 23 insertions(+), 4 deletions(-) + +commit 58dca7ce68e009da69901625640c74a27d476158 +Author: Vratislav Podzimek +Date: 2013-04-08 + + Call os.chdir("/") after os.chroot + + This is what the chroot utility does and without it the oscap tool fails to + run in chroot. + + org_fedora_oscap/common.py | 1 + + 1 file changed, 1 insertion(+) + +commit 2b4105f327c41fa4a5713cc39150c22724bc1161 +Author: Vratislav Podzimek +Date: 2013-04-07 + + Parse, store and use the filename of the content + + org_fedora_oscap/gui/spokes/oscap.py | 3 +-- + org_fedora_oscap/ks/oscap.py | 12 ++++++++++++ + tests/ks_oscap_test.py | 1 + + 3 files changed, 14 insertions(+), 2 deletions(-) + +commit 85ee10f007e20a743014d035327ea172f2bfa54a +Author: Vratislav Podzimek +Date: 2013-04-07 + + Create ensure_dir_exists function in the utils module + + It is a code that is repeated in multiple places again and again. + + org_fedora_oscap/common.py | 4 ++-- + org_fedora_oscap/data_fetch.py | 5 +++-- + org_fedora_oscap/utils.py | 38 ++++++++++++++++++++++++++++++++++++++ + tests/common_test.py | 30 ++++++------------------------ + 4 files changed, 49 insertions(+), 28 deletions(-) + +commit 7928c795baff1b655af2fc33709ee14e977111e4 +Author: Vratislav Podzimek +Date: 2013-04-07 + + Use recv and sendall instead of read and write on a socket + + read and write are only methods of the SSL-wrapped socket. + + org_fedora_oscap/data_fetch.py | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit 85238f9bdc53cf42df60cbdac7202d8ed49c4a0f +Author: Vratislav Podzimek +Date: 2013-04-07 + + Allow enclosing values in quotes + + org_fedora_oscap/ks/oscap.py | 5 ++++- + tests/ks_oscap_test.py | 4 ++-- + 2 files changed, 6 insertions(+), 3 deletions(-) + +commit 7f7febb5420fbc986c17f66932e379280e543ec4 +Author: Vratislav Podzimek +Date: 2013-04-06 + + Change status when waiting for data fetching + + Also fix bug with spoke not being ready if no kickstart data is given and rename + the waiting function to have a more mnemonic name. + + org_fedora_oscap/gui/spokes/oscap.py | 18 +++++++++++------- + 1 file changed, 11 insertions(+), 7 deletions(-) + +commit 7a80809dc752b2e01f54608163ab967d5edda91b +Author: Vratislav Podzimek +Date: 2013-04-06 + + Start data fetching when the spoke is initialized + + And stay unready until data fetching finishes. + + org_fedora_oscap/common.py | 2 ++ + org_fedora_oscap/data_fetch.py | 3 ++ + org_fedora_oscap/gui/spokes/oscap.py | 62 +++++++++++++++++++++++++++++++++++- + 3 files changed, 66 insertions(+), 1 deletion(-) + +commit 9dfd7387f5fd81cc6eab3e390f5f52b738a1d362 +Author: Vratislav Podzimek +Date: 2013-04-06 + + Add function that waits for network connection and schedules data fetching + + org_fedora_oscap/common.py | 43 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 43 insertions(+) + +commit 521743a1d4d2bd569324b4e9c5be822bdd6a9f3e +Author: Vratislav Podzimek +Date: 2013-04-06 + + Create directory for the out_file in data_fetch + + If the directory doesn't exist it needs to be created. + + Also fix bug with nondefined exception class. + + org_fedora_oscap/data_fetch.py | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +commit 464ee10e0585113f45c29ed30f5757fded1751ff +Author: Vratislav Podzimek +Date: 2013-04-06 + + Change 'certificate' item to 'certificates' and parse it + + It should be a path to a file containing the whole CA certificates chain, + so not only one certificate. + + org_fedora_oscap/ks/oscap.py | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +commit 4a7a1f3f3872aeb7e1c1eb96a9e0746194619357 +Author: Vratislav Podzimek +Date: 2013-04-06 + + Move rule handling to a separate module + + org_fedora_oscap/common.py | 192 +-------------------------------- + org_fedora_oscap/rule_handling.py | 219 ++++++++++++++++++++++++++++++++++++++ + tests/common_test.py | 66 ------------ + tests/rule_handling_test.py | 91 ++++++++++++++++ + 4 files changed, 311 insertions(+), 257 deletions(-) + +commit 29ad977bbe2ef6b69bd3c5683a3b04d78eb249d3 +Author: Vratislav Podzimek +Date: 2013-04-06 + + Remove placeholder data + + org_fedora_oscap/gui/spokes/oscap.glade | 36 --------------------------------- + 1 file changed, 36 deletions(-) + +commit ad006a186d4ca06d638d1d27ac58fab4f42cf57a +Author: Vratislav Podzimek +Date: 2013-04-04 + + Add and export general fetch_data function + + Everything else should be private and used according to the protocol used + (begining of the URL). + + org_fedora_oscap/data_fetch.py | 31 ++++++++++++++++++++++++++++++- + 1 file changed, 30 insertions(+), 1 deletion(-) + +commit 2d6c56e33de2bb668d59c734ee32b055eaf3bdde +Author: Vratislav Podzimek +Date: 2013-04-04 + + Add tests for directory creation in run_oscap_remediate + + tests/common_test.py | 30 ++++++++++++++++++++++++++++++ + 1 file changed, 30 insertions(+) + +commit b188155f286a80c4bb7dc20dc3d4821b15c5b688 +Author: Vratislav Podzimek +Date: 2013-04-04 + + Add tests for the run_oscap_remediate function + + tests/common_test.py | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 110 insertions(+) + +commit 0b8d2097ce309f87208e103ed97a960448d9f9a1 +Author: Vratislav Podzimek +Date: 2013-04-04 + + Use docstring format the Sphinx tool requires + + org_fedora_oscap/common.py | 56 ++++++++++++++++++------------------ + org_fedora_oscap/data_fetch.py | 26 ++++++++--------- + org_fedora_oscap/gui/spokes/oscap.py | 32 ++++++++++----------- + org_fedora_oscap/ks/oscap.py | 28 +++++++++--------- + 4 files changed, 71 insertions(+), 71 deletions(-) + +commit 1e07d233b657dc0daf46a94b429bb5eceec679f5 +Author: Vratislav Podzimek +Date: 2013-04-03 + + Add function to get fix rules for the pre-install phase + + These are needed to inform user if his/her current configuration is + complying with the chosen profile. + + org_fedora_oscap/common.py | 62 +++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 61 insertions(+), 1 deletion(-) + +commit 38a792082aa70999bcfa4979beeac2e47c0bb3f0 +Author: Vratislav Podzimek +Date: 2013-04-03 + + Return oscap's stdout when running remediation + + It may be useful and the caller can always ignore it. + + org_fedora_oscap/common.py | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +commit 9500bf8fb28dd9891d66214512e63ce044e9c2ae +Author: Vratislav Podzimek +Date: 2013-04-02 + + Add a simple script simplifying the oscap tool invocation + + It's painful to write all the arguments again and again. + + testing_files/run_oscap_test.sh | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 372e9f1043b761c503fc6098f1444ce4d817e91a +Author: Vratislav Podzimek +Date: 2013-04-02 + + Add testing XCCDF using an SCE check + + testing_files/check.sh | 7 +++++++ + testing_files/testing_xccdf.xml | 17 +++++++++++++++++ + 2 files changed, 24 insertions(+) + +commit 9781f5dfa9bb8780577b4be98259de3e9c9d8f87 +Author: Vratislav Podzimek +Date: 2013-04-02 + + Add a function for running the oscap tool + + org_fedora_oscap/common.py | 73 ++++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 71 insertions(+), 2 deletions(-) + +commit 8c26da8c3f2419e849d91f49e2f82967fb98e341 +Author: Vratislav Podzimek +Date: 2013-04-02 + + Add a docstring to the finalize method + + org_fedora_oscap/ks/oscap.py | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 946cc3535fed512cf9e4e94cc2ebabf73119f823 +Author: Vratislav Podzimek +Date: 2013-04-02 + + Remove old tests at the ends of sources + + org_fedora_oscap/common.py | 21 --------------------- + org_fedora_oscap/ks/oscap.py | 29 ----------------------------- + 2 files changed, 50 deletions(-) + +commit 3305dd6e0cf197ea80cc338dff6c76d71f83090d +Author: Vratislav Podzimek +Date: 2013-04-02 + + Change 'rpm' to 'RPM' as content type and tests for it + + Also add some checks if the RPM content is used. + + org_fedora_oscap/ks/oscap.py | 18 ++++++---- + tests/ks_oscap_test.py | 82 ++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 93 insertions(+), 7 deletions(-) + +commit 65b90223c2507a61b6216c2d4a8ad047cd56b40b +Author: Vratislav Podzimek +Date: 2013-04-02 + + Add support for the xccdf-path and cpe-path kickstart lines + + org_fedora_oscap/ks/oscap.py | 16 ++++++++++++++++ + tests/ks_oscap_test.py | 6 ++++++ + 2 files changed, 22 insertions(+) + +commit daa0743cf9017ee757830fe6332cf59e601c3cea +Author: Vratislav Podzimek +Date: 2013-04-02 + + Use indent not ident for parameter affecting indentation + + org_fedora_oscap/ks/oscap.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit fefb81b7bf14311b91a6c539a561e40dfb0613eb +Author: Vratislav Podzimek +Date: 2013-04-01 + + First version of the module for data fetching + + Supports server certificate validation if HTTPS is used. Needs to cover more + URL formats (hda:, LABEL=XXXX:, etc.). + + org_fedora_oscap/data_fetch.py | 139 +++++++++++++++++++++++++++++++++++++++++ + tests/data_fetch_test.py | 47 ++++++++++++++ + 2 files changed, 186 insertions(+) + +commit 85c0c011b5d3e5d215e7a3e063aba1cfd923c9c8 +Author: Vratislav Podzimek +Date: 2013-03-31 + + Add test for the OSCAPdata's __str__ method + + Also check if the output is correctly parsed by another instance. + + tests/ks_oscap_test.py | 23 +++++++++++++++++++++-- + 1 file changed, 21 insertions(+), 2 deletions(-) + +commit ebb786d709940871ab9b68f6f1be2fbb2e6245f4 +Author: Vratislav Podzimek +Date: 2013-03-30 + + File for testing oscap feature to return fixes for the addon + + Also move testing files to a separate directory. + + testing_files/test_report_anaconda_fixes.xccdf.xml | 59 ++++++++++++++++++++++ + testing_ds.xml => testing_files/testing_ds.xml | 0 + 2 files changed, 59 insertions(+) + +commit 4af00cc2740d6448965a5f3d67abb0cb7113ea15 +Author: Vratislav Podzimek +Date: 2013-03-30 + + XML with a SCAP datastream for testing purposes + + An XML file with a datastream collection containing one datastream with two + checklists, one check and a profile with a rule using the check and having a fix + element for testing remediation. + + testing_ds.xml | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 84 insertions(+) + +commit 509aa99808e60d40cef752275cf556a662779bc0 +Author: Vratislav Podzimek +Date: 2013-03-29 + + Fix the names of the packages and move them to a better place + + OpenSCAP packages use 'openscap' prefix not 'oscap'. Also their should + live in a better place than in the middle of the code. + + org_fedora_oscap/ks/oscap.py | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit 78597534bedd8a061e36c976bf2611477546d04e +Author: Vratislav Podzimek +Date: 2013-03-29 + + Add a unittest for the basic kickstart parsing + + tests/ks_oscap_test.py | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +commit ed34f303e6ab80443c36e55d928e4079f4fc734e +Author: Vratislav Podzimek +Date: 2013-03-29 + + Return the whole %addon section in the __str__ method + + Anaconda won't add the begining nor the end of the section. + + Also be more clever with the newlines. + + org_fedora_oscap/ks/oscap.py | 21 ++++++++++----------- + 1 file changed, 10 insertions(+), 11 deletions(-) + +commit efdcc55eef6acf55f6fd10f6d177ea7235f9d400 +Author: Vratislav Podzimek +Date: 2013-03-29 + + Mark required packages for installation + + Some packages need to be installed to the target system + to allow remediation in chroot at the end of the installation + and also checks during first boot. + + org_fedora_oscap/ks/oscap.py | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +commit b677c203379f827521a644dae7fc99fb634332fc +Author: Vratislav Podzimek +Date: 2013-03-29 + + Add a set of unit tests and a target to run them + + tests/common_test.py | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 93 insertions(+) + +commit 2a34f4afd37db166735ef017995b90380ced1f77 +Author: Vratislav Podzimek +Date: 2013-03-28 + + Fix the way how new items in PartRules are created + + Creating an item in the __getitem__ really is not a good idea. + + org_fedora_oscap/common.py | 18 ++++++++++++------ + 1 file changed, 12 insertions(+), 6 deletions(-) + +commit 88b45803cca08d084ce26159c101a0d6e331a215 +Author: Vratislav Podzimek +Date: 2013-03-28 + + Include only the key that was searched to the exception + + This way it can be checked whether the first word was correctly parsed. + + org_fedora_oscap/common.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 06075bea1013b4985cb7ca8382374531818736e7 +Author: Vratislav Podzimek +Date: 2013-03-27 + + Add 'xccdf-id' item that is required in case of datastream + + org_fedora_oscap/ks/oscap.py | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +commit 1720e5616f06c3c245b8b5493022d5bdbf1192b2 +Author: Vratislav Podzimek +Date: 2013-03-27 + + Simple test for the kickstart parsing code and few fixes + + org_fedora_oscap/ks/oscap.py | 47 +++++++++++++++++++++++++++++++++++++++----- + 1 file changed, 42 insertions(+), 5 deletions(-) + +commit 0fe183c877e3bfc5dce12d9f8b4b5f0b2dfeab2e +Author: Vratislav Podzimek +Date: 2013-03-27 + + Add classes for parsing rules from XCCDF + + XCCDFs may contain tags with rules for the pre-installation phase + that need to be parsed and then enforced. + + org_fedora_oscap/common.py | 239 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 239 insertions(+) + +commit 9dcceceabfa11cbe5992de3ef72efd5417bd4b47 +Author: Vratislav Podzimek +Date: 2013-03-26 + + Add finalize method that checks we have all required data + + org_fedora_oscap/ks/oscap.py | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +commit 0c7d284873ca053f183c42ed508b463815bec435 +Author: Vratislav Podzimek +Date: 2013-03-24 + + Basics of the kickstart support + + Parsing data from the kickstart %addon section. + + org_fedora_oscap/ks/__init__.py | 0 + org_fedora_oscap/ks/oscap.py | 160 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 160 insertions(+) + +commit a71061f5fc9ddfcaa3e37b64799fe08fa4c1e625 +Author: Vratislav Podzimek +Date: 2013-02-22 + + Basics for the OpenSCAP Anaconda addon + + org_fedora_oscap/__init__.py | 0 + org_fedora_oscap/gui/__init__.py | 0 + org_fedora_oscap/gui/categories/__init__.py | 0 + org_fedora_oscap/gui/categories/security.py | 39 +++++ + org_fedora_oscap/gui/spokes/__init__.py | 0 + org_fedora_oscap/gui/spokes/oscap.glade | 220 ++++++++++++++++++++++++++++ + org_fedora_oscap/gui/spokes/oscap.py | 172 ++++++++++++++++++++++ + 7 files changed, 431 insertions(+) + +commit c1f45957f7838f72f24e7e9167e5bc25007f27ac +Author: Vratislav Podzimek +Date: 2012-10-31 + + Initial commit. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2c2059c --- /dev/null +++ b/Makefile @@ -0,0 +1,95 @@ +NAME = oscap-anaconda-addon + +VERSION = 1.1.1 + +ADDON = org_fedora_oscap +TESTS = tests \ + testing_files + +OSVERSION := $(shell grep -o " [0-9]\{1,\}" /etc/redhat-release | sed "s/ //g") +ifeq ($(OSVERSION),7) + PYVERSION = "" +else + PYVERSION = -3 +endif + +FILES = $(ADDON) \ + $(TESTS) \ + po \ + COPYING \ + Makefile \ + README.md + +EXCLUDES = \ + *~ \ + *.pyc + +ZANATA_PULL_ARGS = --transdir po/ +ZANATA_PUSH_ARGS = --srcdir po/ --push-type source --force + +all: + +DISTNAME = $(NAME)-$(VERSION) +ADDONDIR = /usr/share/anaconda/addons/ +DISTBALL = $(DISTNAME).tar.gz +NUM_PROCS = $$(getconf _NPROCESSORS_ONLN) + +install: + mkdir -p $(DESTDIR)$(ADDONDIR) + cp -rv $(ADDON) $(DESTDIR)$(ADDONDIR) + $(MAKE) install-po-files + +uninstall: + rm -rfv $(DESTDIR)$(ADDONDIR) + +dist: + rm -rf $(DISTNAME) + mkdir -p $(DISTNAME) + @if test -d ".git"; \ + then \ + echo Creating ChangeLog && \ + ( cd "$(top_srcdir)" && \ + echo '# Generate automatically. Do not edit.'; echo; \ + git log --stat --date=short ) > ChangeLog.tmp \ + && mv -f ChangeLog.tmp $(DISTNAME)/ChangeLog \ + || ( rm -f ChangeLog.tmp ; \ + echo Failed to generate ChangeLog >&2 ); \ + else \ + echo A git clone is required to generate a ChangeLog >&2; \ + fi + for file in $(FILES); do \ + cp -rpv $$file $(DISTNAME)/$$file; \ + done + for excl in $(EXCLUDES); do \ + find $(DISTNAME) -name "$$excl" -delete; \ + done + tar -czvf $(DISTBALL) $(DISTNAME) + rm -rf $(DISTNAME) + +potfile: + $(MAKE) -C po potfile + +po-pull: + @which zanata > /dev/null 2>&1 || echo "You may not have the Zanata client installed, don't be surprised if the operation fails." + zanata pull $(ZANATA_PULL_ARGS) + +push-pot: potfile + @which zanata > /dev/null 2>&1 || echo "You may not have the Zanata client installed, don't be surprised if the operation fails." + zanata push $(ZANATA_PUSH_ARGS) + +install-po-files: + $(MAKE) -C po install + +test: + @echo "***Running pylint$(PYVERSION) checks***" + @find . -name '*.py' -print|xargs -n1 --max-procs=$(NUM_PROCS) pylint$(PYVERSION) -E 2> /dev/null + @echo "[ OK ]" + @echo "***Running unittests checks***" + @PYTHONPATH=. py.test$(PYVERSION) --processes=-1 -vw tests/ + +runpylint: + @find . -name '*.py' -print|xargs -n1 --max-procs=$(NUM_PROCS) pylint$(PYVERSION) -E 2> /dev/null + @echo "[ OK ]" + +unittest: + PYTHONPATH=. py.test$(PYVERSION) -v tests/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..1b9b3e2 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +OSCAP Anaconda addon is an addon for the Anaconda installer that integrates +OpenSCAP to the installation process and allows installation of system following +some SCAP-defined restrictions and recommendations. + +The addon is compatible with Anaconda version >= 32 + +For testing and other development information, see the [OSCAP Anaconda Addon Developer Guide](https://github.com/OpenSCAP/oscap-anaconda-addon/blob/master/docs/manual/developer_guide.adoc). diff --git a/org_fedora_oscap/__init__.py b/org_fedora_oscap/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/org_fedora_oscap/__init__.py diff --git a/org_fedora_oscap/common.py b/org_fedora_oscap/common.py new file mode 100644 index 0000000..9b4b7bf --- /dev/null +++ b/org_fedora_oscap/common.py @@ -0,0 +1,536 @@ +# +# Copyright (C) 2013 Red Hat, Inc. +# +# This copyrighted material is made available to anyone wishing to use, +# modify, copy, or redistribute it subject to the terms and conditions of +# the GNU General Public License v.2, or (at your option) any later version. +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY expressed or implied, including the implied warranties of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. You should have received a copy of the +# GNU General Public License along with this program; if not, write to the +# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the +# source code or documentation are not subject to the GNU General Public +# License and may only be used or replicated with the express permission of +# Red Hat, Inc. +# +# Red Hat Author(s): Vratislav Podzimek +# + +""" +Module with various classes and functions needed by the OSCAP addon that are +not specific to any installation mode (tui, gui, ks). + +""" + +import os +import tempfile +import subprocess +import zipfile +import tarfile + +import cpioarchive +import re +import logging + +from collections import namedtuple +import gettext +from functools import wraps +from pyanaconda.core import constants +from pyanaconda.modules.common.constants.services import NETWORK +from pyanaconda.threading import threadMgr, AnacondaThread +from org_fedora_oscap import utils +from org_fedora_oscap.data_fetch import fetch_data + +log = logging.getLogger("anaconda") + + +# mimick pyanaconda/core/i18n.py +def _(string): + if string: + return gettext.translation("oscap-anaconda-addon", fallback=True).gettext(string) + else: + return "" + + +def N_(string): return string + + +# everything else should be private +__all__ = ["run_oscap_remediate", "get_fix_rules_pre", + "wait_and_fetch_net_data", "extract_data", "strip_content_dir", + "OSCAPaddonError"] + +INSTALLATION_CONTENT_DIR = "/tmp/openscap_data/" +TARGET_CONTENT_DIR = "/root/openscap_data/" + +SSG_DIR = "/usr/share/xml/scap/ssg/content/" +SSG_CONTENT = "ssg-rhel7-ds.xml" +if constants.shortProductName != 'anaconda': + if constants.shortProductName == 'fedora': + SSG_CONTENT = "ssg-fedora-ds.xml" + else: + SSG_CONTENT = "ssg-%s%s-ds.xml" % (constants.shortProductName, + constants.productVersion.strip(".")[0]) + +RESULTS_PATH = utils.join_paths(TARGET_CONTENT_DIR, + "eval_remediate_results.xml") +REPORT_PATH = utils.join_paths(TARGET_CONTENT_DIR, + "eval_remediate_report.html") + +PRE_INSTALL_FIX_SYSTEM_ATTR = "urn:redhat:anaconda:pre" + +THREAD_FETCH_DATA = "AnaOSCAPdataFetchThread" + +SUPPORTED_ARCHIVES = (".zip", ".tar", ".tar.gz", ".tar.bz2", ) + +# buffer size for reading and writing out data (in bytes) +IO_BUF_SIZE = 2 * 1024 * 1024 + + +class OSCAPaddonError(Exception): + """Exception class for OSCAP addon related errors.""" + + pass + + +class OSCAPaddonNetworkError(OSCAPaddonError): + """Exception class for OSCAP addon related network errors.""" + + pass + + +class ExtractionError(OSCAPaddonError): + """Exception class for the extraction errors.""" + + pass + + +MESSAGE_TYPE_FATAL = 0 +MESSAGE_TYPE_WARNING = 1 +MESSAGE_TYPE_INFO = 2 + +# namedtuple for messages returned from the rules evaluation +# origin -- class (inherited from RuleHandler) that generated the message +# type -- one of the MESSAGE_TYPE_* constants defined above +# text -- the actual message that should be displayed, logged, ... +RuleMessage = namedtuple("RuleMessage", ["origin", "type", "text"]) + + +class SubprocessLauncher(object): + def __init__(self, args): + self.args = args + self.stdout = "" + self.stderr = "" + self.messages = [] + self.returncode = None + + def execute(self, ** kwargs): + try: + proc = subprocess.Popen(self.args, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, ** kwargs) + except OSError as oserr: + msg = "Failed to run the oscap tool: %s" % oserr + raise OSCAPaddonError(msg) + + (stdout, stderr) = proc.communicate() + self.stdout = stdout.decode() + self.stderr = stderr.decode() + self.messages = re.findall(r'OpenSCAP Error:.*', self.stderr) + + self.returncode = proc.returncode + + def log_messages(self): + for message in self.messages: + log.warning("OSCAP addon: " + message) + + +def get_fix_rules_pre(profile, fpath, ds_id="", xccdf_id="", tailoring=""): + """ + Get fix rules for the pre-installation environment for a given profile in a + given datastream and checklist in a given file. + + :see: run_oscap_remediate + :see: _run_oscap_gen_fix + :return: fix rules for a given profile + :rtype: str + + """ + + return _run_oscap_gen_fix(profile, fpath, PRE_INSTALL_FIX_SYSTEM_ATTR, + ds_id=ds_id, xccdf_id=xccdf_id, + tailoring=tailoring) + + +def _run_oscap_gen_fix(profile, fpath, template, ds_id="", xccdf_id="", + tailoring=""): + """ + Run oscap tool on a given file to get the contents of fix elements with the + 'system' attribute equal to a given template for a given datastream, + checklist and profile. + + :see: run_oscap_remediate + :param template: the value of the 'system' attribute of the fix elements + :type template: str + :return: oscap tool's stdout + :rtype: str + + """ + + if not profile: + return "" + + args = ["oscap", "xccdf", "generate", "fix"] + args.append("--template=%s" % template) + + # oscap uses the default profile by default + if profile.lower() != "default": + args.append("--profile=%s" % profile) + if ds_id: + args.append("--datastream-id=%s" % ds_id) + if xccdf_id: + args.append("--xccdf-id=%s" % xccdf_id) + if tailoring: + args.append("--tailoring-file=%s" % tailoring) + + args.append(fpath) + + proc = SubprocessLauncher(args) + proc.execute() + proc.log_messages() + if proc.returncode != 0: + msg = "Failed to generate fix rules with the oscap tool: %s" % proc.stderr + raise OSCAPaddonError(msg) + + return proc.stdout + + +def run_oscap_remediate(profile, fpath, ds_id="", xccdf_id="", tailoring="", + chroot=""): + """ + Run the evaluation and remediation with the oscap tool on a given file, + doing the remediation as defined in a given profile defined in a given + checklist that is a part of a given datastream. If requested, run in + chroot. + + :param profile: id of the profile that will drive the remediation + :type profile: str + :param fpath: path to a file with SCAP content + :type fpath: str + :param ds_id: ID of the datastream that contains the checklist defining + the profile + :type ds_id: str + :param xccdf_id: ID of the checklist that defines the profile + :type xccdf_id: str + :param tailoring: path to a tailoring file + :type tailoring: str + :param chroot: path to the root the oscap tool should be run in + :type chroot: str + :return: oscap tool's stdout (summary of the rules, checks and fixes) + :rtype: str + + """ + + if not profile: + return "" + + def do_chroot(): + """Helper function doing the chroot if requested.""" + if chroot and chroot != "/": + os.chroot(chroot) + os.chdir("/") + + # make sure the directory for the results exists + results_dir = os.path.dirname(RESULTS_PATH) + if chroot: + results_dir = os.path.normpath(chroot + "/" + results_dir) + utils.ensure_dir_exists(results_dir) + + args = ["oscap", "xccdf", "eval"] + args.append("--remediate") + args.append("--results=%s" % RESULTS_PATH) + args.append("--report=%s" % REPORT_PATH) + + # oscap uses the default profile by default + if profile.lower() != "default": + args.append("--profile=%s" % profile) + if ds_id: + args.append("--datastream-id=%s" % ds_id) + if xccdf_id: + args.append("--xccdf-id=%s" % xccdf_id) + if tailoring: + args.append("--tailoring-file=%s" % tailoring) + + args.append(fpath) + + proc = SubprocessLauncher(args) + proc.execute(preexec_fn=do_chroot) + proc.log_messages() + + if proc.returncode not in (0, 2): + # 0 -- success; 2 -- no error, but checks/remediation failed + msg = "Content evaluation and remediation with the oscap tool "\ + "failed: %s" % proc.stderr + raise OSCAPaddonError(msg) + + return proc.stdout + + +def wait_and_fetch_net_data(url, out_file, ca_certs=None): + """ + Function that waits for network connection and starts a thread that fetches + data over network. + + :see: org_fedora_oscap.data_fetch.fetch_data + :return: the name of the thread running fetch_data + :rtype: str + + """ + + # get thread that tries to establish a network connection + nm_conn_thread = threadMgr.get(constants.THREAD_WAIT_FOR_CONNECTING_NM) + if nm_conn_thread: + # NM still connecting, wait for it to finish + nm_conn_thread.join() + + network_proxy = NETWORK.get_proxy() + if not network_proxy.Connected: + raise OSCAPaddonNetworkError("Network connection needed to fetch data.") + + fetch_data_thread = AnacondaThread(name=THREAD_FETCH_DATA, + target=fetch_data, + args=(url, out_file, ca_certs), + fatal=False) + + # register and run the thread + threadMgr.add(fetch_data_thread) + + return THREAD_FETCH_DATA + + +def extract_data(archive, out_dir, ensure_has_files=None): + """ + Fuction that extracts the given archive to the given output directory. It + tries to find out the archive type by the file name. + + :param archive: path to the archive file that should be extracted + :type archive: str + :param out_dir: output directory the archive should be extracted to + :type out_dir: str + :param ensure_has_files: relative paths to the files that must exist in the + archive + :type ensure_has_files: iterable of strings or None + :return: a list of files and directories extracted from the archive + :rtype: [str] + + """ + + # get rid of empty file paths + ensure_has_files = [fpath for fpath in ensure_has_files if fpath] + + if archive.endswith(".zip"): + # ZIP file + try: + zfile = zipfile.ZipFile(archive, "r") + except zipfile.BadZipfile as err: + raise ExtractionError(str(err)) + + # generator for the paths of the files found in the archive (dirs end + # with "/") + files = set(info.filename for info in zfile.filelist + if not info.filename.endswith("/")) + for fpath in ensure_has_files or (): + if fpath not in files: + msg = "File '%s' not found in the archive '%s'" % (fpath, + archive) + raise ExtractionError(msg) + + utils.ensure_dir_exists(out_dir) + zfile.extractall(path=out_dir) + result = [utils.join_paths(out_dir, info.filename) for info in zfile.filelist] + zfile.close() + return result + elif archive.endswith(".tar"): + # plain tarball + return _extract_tarball(archive, out_dir, ensure_has_files, None) + elif archive.endswith(".tar.gz"): + # gzipped tarball + return _extract_tarball(archive, out_dir, ensure_has_files, "gz") + elif archive.endswith(".tar.bz2"): + # bzipped tarball + return _extract_tarball(archive, out_dir, ensure_has_files, "bz2") + elif archive.endswith(".rpm"): + # RPM + return _extract_rpm(archive, out_dir, ensure_has_files) + # elif other types of archives + else: + raise ExtractionError("Unsuported archive type") + + +def _extract_tarball(archive, out_dir, ensure_has_files, alg): + """ + Extract the given TAR archive to the given output directory and make sure + the given file exists in the archive. + + :see: extract_data + :param alg: compression algorithm used for the tarball + :type alg: str (one of "gz", "bz2") or None + :return: a list of files and directories extracted from the archive + :rtype: [str] + + """ + + if alg and alg not in ("gz", "bz2",): + raise ExtractionError("Unsupported compression algorithm") + + mode = "r" + if alg: + mode += ":%s" % alg + + try: + tfile = tarfile.TarFile.open(archive, mode) + except tarfile.TarError as err: + raise ExtractionError(str(err)) + + # generator for the paths of the files found in the archive + files = set(member.path for member in tfile.getmembers() + if member.isfile()) + + for fpath in ensure_has_files or (): + if fpath not in files: + msg = "File '%s' not found in the archive '%s'" % (fpath, archive) + raise ExtractionError(msg) + + utils.ensure_dir_exists(out_dir) + tfile.extractall(path=out_dir) + result = [utils.join_paths(out_dir, member.path) for member in tfile.getmembers()] + tfile.close() + + return result + + +def _extract_rpm(rpm_path, root="/", ensure_has_files=None): + """ + Extract the given RPM into the directory tree given by the root argument + and make sure the given file exists in the archive. + + :param rpm_path: path to the RPM file that should be extracted + :type rpm_path: str + :param root: root of the directory tree the RPM should be extracted into + :type root: str + :param ensure_has_files: relative paths to the files that must exist in the + RPM + :type ensure_has_files: iterable of strings or None + :return: a list of files and directories extracted from the archive + :rtype: [str] + + """ + + # run rpm2cpio and process the output with the cpioarchive module + temp_fd, temp_path = tempfile.mkstemp(prefix="oscap_rpm") + proc = subprocess.Popen(["rpm2cpio", rpm_path], stdout=temp_fd) + proc.wait() + if proc.returncode != 0: + msg = "Failed to convert RPM '%s' to cpio archive" % rpm_path + raise ExtractionError(msg) + + os.close(temp_fd) + + try: + archive = cpioarchive.CpioArchive(temp_path) + except cpioarchive.CpioError as err: + raise ExtractionError(str(err)) + + # get entries from the archive (supports only iteration over entries) + entries = set(entry for entry in archive) + + # cpio entry names (paths) start with the dot + entry_names = [entry.name.lstrip(".") for entry in entries] + + for fpath in ensure_has_files or (): + # RPM->cpio entries have absolute paths + if fpath not in entry_names and \ + os.path.join("/", fpath) not in entry_names: + msg = "File '%s' not found in the archive '%s'" % (fpath, rpm_path) + raise ExtractionError(msg) + + try: + for entry in entries: + if entry.size == 0: + continue + dirname = os.path.dirname(entry.name.lstrip(".")) + out_dir = os.path.normpath(root + dirname) + utils.ensure_dir_exists(out_dir) + + out_fpath = os.path.normpath(root + entry.name.lstrip(".")) + if os.path.exists(out_fpath): + continue + with open(out_fpath, "wb") as out_file: + buf = entry.read(IO_BUF_SIZE) + while buf: + out_file.write(buf) + buf = entry.read(IO_BUF_SIZE) + except (IOError, cpioarchive.CpioError) as e: + raise ExtractionError(e) + + # cleanup + archive.close() + os.unlink(temp_path) + + return [os.path.normpath(root + name) for name in entry_names] + + +def strip_content_dir(fpaths, phase="preinst"): + """ + Strip content directory prefix from the file paths for either + pre-installation or post-installation phase. + + :param fpaths: iterable of file paths to strip content directory prefix + from + :type fpaths: iterable of strings + :param phase: specifies pre-installation or post-installation phase + :type phase: "preinst" or "postinst" + :return: the same iterable of file paths as given with the content + directory prefix stripped + :rtype: same type as fpaths + + """ + + if phase == "preinst": + remove_prefix = lambda x: x[len(INSTALLATION_CONTENT_DIR):] + else: + remove_prefix = lambda x: x[len(TARGET_CONTENT_DIR):] + + return utils.keep_type_map(remove_prefix, fpaths) + + +def ssg_available(root="/"): + """ + Tries to find the SCAP Security Guide under the given root. + + :return: True if SSG was found under the given root, False otherwise + + """ + + return os.path.exists(utils.join_paths(root, SSG_DIR + SSG_CONTENT)) + + +def dry_run_skip(func): + """ + Decorator that makes sure the decorated function is noop in the dry-run + mode. + + :param func: a decorated function that needs to have the first parameter an + object with the _addon_data attribute referencing the OSCAP + addon's ksdata + """ + + @wraps(func) + def decorated(self, *args, **kwargs): + if self._addon_data.dry_run: + return + else: + return func(self, *args, **kwargs) + + return decorated diff --git a/org_fedora_oscap/content_handling.py b/org_fedora_oscap/content_handling.py new file mode 100644 index 0000000..33bb1e0 --- /dev/null +++ b/org_fedora_oscap/content_handling.py @@ -0,0 +1,469 @@ +# +# Copyright (C) 2013 Red Hat, Inc. +# +# This copyrighted material is made available to anyone wishing to use, +# modify, copy, or redistribute it subject to the terms and conditions of +# the GNU General Public License v.2, or (at your option) any later version. +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY expressed or implied, including the implied warranties of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. You should have received a copy of the +# GNU General Public License along with this program; if not, write to the +# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the +# source code or documentation are not subject to the GNU General Public +# License and may only be used or replicated with the express permission of +# Red Hat, Inc. +# +# Red Hat Author(s): Vratislav Podzimek +# + +""" +Module with various classes for SCAP content processing and retrieving data +from it. + +""" + +import os.path + +from collections import namedtuple, OrderedDict +from openscap_api import OSCAP +from pyanaconda.core.util import execReadlines +try: + from html.parser import HTMLParser +except ImportError: + from HTMLParser import HTMLParser + + +class ContentHandlingError(Exception): + """Exception class for errors related to SCAP content handling.""" + + pass + + +class DataStreamHandlingError(ContentHandlingError): + """Exception class for errors related to data stream handling.""" + + pass + + +class BenchmarkHandlingError(ContentHandlingError): + """Exception class for errors related to benchmark handling.""" + + pass + + +class ContentCheckError(ContentHandlingError): + """Exception class for errors related to content (integrity,...) checking. + + """ + + pass + + +class ParseHTMLContent(HTMLParser): + """Parser class for HTML tags within content""" + + def __init__(self): + HTMLParser.__init__(self) + self.content = "" + + def handle_starttag(self, tag, attrs): + if tag == "html:ul": + self.content += "\n" + elif tag == "html:li": + self.content += "\n" + elif tag == "html:br": + self.content += "\n" + + def handle_endtag(self, tag): + if tag == "html:ul": + self.content += "\n" + elif tag == "html:li": + self.content += "\n" + + def handle_data(self, data): + self.content += data.strip() + + def get_content(self): + return self.content + + +def parse_HTML_from_content(content): + """This is a very simple HTML to text parser. + + HTML tags will be removed while trying to maintain readability + of content. + + :param content: content whose HTML tags will be parsed + :return: content without HTML tags + """ + + parser = ParseHTMLContent() + parser.feed(content) + return parser.get_content() + + +# namedtuple class (not a constant, pylint!) for info about a XCCDF profile +# pylint: disable-msg=C0103 +ProfileInfo = namedtuple("ProfileInfo", ["id", "title", "description"]) + +# namedtuple class for info about content files found +# pylint: disable-msg=C0103 +ContentFiles = namedtuple("ContentFiles", ["xccdf", "cpe", "tailoring"]) + + +def oscap_text_itr_get_text(itr): + """ + Helper function for getting a text from the oscap_text_iterator. + + :param itr: oscap_text_iterator to get the text from + :type itr: oscap_text_iterator + :return: text gotten from the iterator + :rtype: str + + """ + + ret = "" + while OSCAP.oscap_text_iterator_has_more(itr): + text_item = OSCAP.oscap_text_iterator_next(itr) + ret += OSCAP.oscap_text_get_text(text_item) + + return ret + + +def explore_content_files(fpaths): + """ + Function for finding content files in a list of file paths. SIMPLY PICKS + THE FIRST USABLE CONTENT FILE OF A PARTICULAR TYPE AND JUST PREFERS DATA + STREAMS OVER STANDALONE BENCHMARKS. + + :param fpaths: a list of file paths to search for content files in + :type fpaths: [str] + :return: a tuple containing the content handling class and an ContentFiles + instance containing the file names of the XCCDF file, CPE + dictionary and tailoring file or "" in place of those items if not + found + :rtype: (class, ContentFiles) + + """ + + def get_doc_type(file_path): + try: + for line in execReadlines("oscap", ["info", file_path]): + if line.startswith("Document type:"): + _prefix, _sep, type_info = line.partition(":") + return type_info.strip() + except OSError: + # 'oscap info' exitted with a non-zero exit code -> unknown doc + # type + return None + + xccdf_file = "" + cpe_file = "" + tailoring_file = "" + found_ds = False + content_class = None + + for fpath in fpaths: + doc_type = get_doc_type(fpath) + if not doc_type: + continue + + # prefer DS over standalone XCCDF + if doc_type == "Source Data Stream" and (not xccdf_file or not found_ds): + xccdf_file = fpath + content_class = DataStreamHandler + found_ds = True + elif doc_type == "XCCDF Checklist" and not xccdf_file: + xccdf_file = fpath + content_class = BenchmarkHandler + elif doc_type == "CPE Dictionary" and not cpe_file: + cpe_file = fpath + elif doc_type == "XCCDF Tailoring" and not tailoring_file: + tailoring_file = fpath + + # TODO: raise exception if no xccdf_file is found? + files = ContentFiles(xccdf_file, cpe_file, tailoring_file) + return (content_class, files) + + +class DataStreamHandler(object): + """ + Class for handling data streams in the data stream collection and + retrieving data from it. For example a list of data stream indices, + checklists in a given data stream of profiles. + + """ + + def __init__(self, dsc_file_path, tailoring_file_path=""): + """ + Constructor for the DataStreamHandler class. + + :param dsc_file_path: path to a file with a data stream collection + :type dsc_file_path: str + :param tailoring_file_path: path to a tailoring file + :type tailoring_file_path: str + + """ + + # is used to speed up getting lists of profiles + self._profiles_cache = dict() + + if not os.path.exists(dsc_file_path): + msg = "Invalid file path: '%s'" % dsc_file_path + raise DataStreamHandlingError(msg) + + self._dsc_file_path = dsc_file_path + + # create an XCCDF session for the file + self._session = OSCAP.xccdf_session_new(dsc_file_path) + if not self._session: + msg = "'%s' is not a valid SCAP content file" % dsc_file_path + raise DataStreamHandlingError(msg) + if OSCAP.xccdf_session_load(self._session) != 0: + raise DataStreamHandlingError(OSCAP.oscap_err_desc()) + + if tailoring_file_path: + OSCAP.xccdf_session_set_user_tailoring_file(self._session, + tailoring_file_path) + + if not OSCAP.xccdf_session_is_sds(self._session): + msg = "'%s' is not a data stream collection" % dsc_file_path + raise DataStreamHandlingError(msg) + + # dictionary holding the items gathered from DSC processing + self._items = OrderedDict() + + # create an sds index for the content + self._sds_idx = OSCAP.xccdf_session_get_sds_idx(self._session) + + # iterate over streams and get checklists from each stream + streams_itr = OSCAP.ds_sds_index_get_streams(self._sds_idx) + while OSCAP.ds_stream_index_iterator_has_more(streams_itr): + stream_idx = OSCAP.ds_stream_index_iterator_next(streams_itr) + + # will be used to store the checklists for streams + stream_id = OSCAP.ds_stream_index_get_id(stream_idx) + checklists = [] + + # iterate over checklists and append their ids to the list + chklist_itr = OSCAP.ds_stream_index_get_checklists(stream_idx) + while OSCAP.oscap_string_iterator_has_more(chklist_itr): + checklists.append(OSCAP.oscap_string_iterator_next(chklist_itr)) + + # store the list of checklist for the current stream + self._items[stream_id] = checklists + + OSCAP.oscap_string_iterator_free(chklist_itr) + + OSCAP.ds_stream_index_iterator_free(streams_itr) + + def __del__(self): + """Destructor for the DataStreamHandler class.""" + + if '_session' in locals(): + # we should free the session + OSCAP.xccdf_session_free(self._session) + + def get_data_streams(self): + """ + Method to get a list of data streams found in the data stream + collection. + + :return: list of data stream IDs + :rtype: list of strings + + """ + + return list(self._items.keys()) + + def get_data_streams_checklists(self): + """ + Method to get data streams and their checklists found in the data + stream collection. + + :return: a dictionary consisting of the IDs of the data streams as keys + and lists of their checklists' IDs as values + :rtype: dict(str -> list of strings) + + """ + + # easy, we already have exactly what should be returned, just create a + # copy, so that the caller cannot modify our internal attributes + return dict(self._items) + + def get_checklists(self, data_stream_id): + """ + Method to get a list of checklists found in the data stream given by + the data_stream_id. + + :param data_stream_id: ID of the data stream to get checklists from + :type data_stream_id: str + :return: list of checklist IDs found in the data stream given by the ID + :rtype: list of strings + + """ + + if data_stream_id not in self._items: + msg = "Invalid data stream id given: '%s'" % data_stream_id + raise DataStreamHandlingError(msg) + + return self._items[data_stream_id] + + def get_profiles(self, data_stream_id, checklist_id): + """ + Method to get a list of profiles defined in the checklist given by the + checklist_id that is defined in the data stream given by the + data_stream_id. + + :param data_stream_id: ID of the data stream to get checklists from + :type data_stream_id: str + :param checklist_id: ID of the checklist to get profiles from + :type checklist_id: str + :return: list of profiles found in the checklist + :rtype: list of ProfileInfo instances + + """ + + cache_id = "%s;%s" % (data_stream_id, checklist_id) + if cache_id in self._profiles_cache: + # found in cache, return the value + return self._profiles_cache[cache_id] + + # not found in the cache, needs to be gathered + + # set the data stream and component (checklist) for the session + OSCAP.xccdf_session_free(self._session) + + self._session = OSCAP.xccdf_session_new(self._dsc_file_path) + if not self._session: + msg = "'%s' is not a valid SCAP content file" % self._dsc_file_path + raise DataStreamHandlingError(msg) + + OSCAP.xccdf_session_set_datastream_id(self._session, data_stream_id) + OSCAP.xccdf_session_set_component_id(self._session, checklist_id) + if OSCAP.xccdf_session_load(self._session) != 0: + raise DataStreamHandlingError(OSCAP.oscap_err_desc()) + + # get the benchmark (checklist) + policy_model = OSCAP.xccdf_session_get_policy_model(self._session) + + default_policy = OSCAP.xccdf_policy_new(policy_model, None) + default_rules_count = OSCAP.xccdf_policy_get_selected_rules_count(default_policy) + + # will hold items for the profiles for the speficied DS and checklist + profiles = [] + + if default_rules_count > 0: + profiles.append(ProfileInfo("default", "Default", + "The implicit XCCDF profile. Usually, the default contains no rules.")) + + benchmark = OSCAP.xccdf_policy_model_get_benchmark(policy_model) + + # iterate over the profiles in the benchmark and store them + profile_itr = OSCAP.xccdf_benchmark_get_profiles(benchmark) + while OSCAP.xccdf_profile_iterator_has_more(profile_itr): + profile = OSCAP.xccdf_profile_iterator_next(profile_itr) + + id_ = OSCAP.xccdf_profile_get_id(profile) + title = oscap_text_itr_get_text(OSCAP.xccdf_profile_get_title(profile)) + desc = parse_HTML_from_content( + oscap_text_itr_get_text(OSCAP.xccdf_profile_get_description(profile))) + info = ProfileInfo(id_, title, desc) + + profiles.append(info) + + OSCAP.xccdf_profile_iterator_free(profile_itr) + + # cache the result + self._profiles_cache[cache_id] = profiles + + return profiles + + +class BenchmarkHandler(object): + """ + Class for handling XCCDF benchmark and retrieving data from it (mainly the + list of profiles). + + """ + + def __init__(self, xccdf_file_path, tailoring_file_path=""): + """ + Constructor for the BenchmarkHandler class. + + :param xccdf_file_path: path to a file with an XCCDF benchmark + :type xccdf_file_path: str + :param tailoring_file_path: path to a tailoring file + :type tailoring_file_path: str + """ + + if not os.path.exists(xccdf_file_path): + msg = "Invalid file path: '%s'" % xccdf_file_path + raise BenchmarkHandlingError(msg) + + session = OSCAP.xccdf_session_new(xccdf_file_path) + if not session: + msg = "'%s' is not a valid SCAP content file" % xccdf_file_path + raise BenchmarkHandlingError(msg) + + if tailoring_file_path: + OSCAP.xccdf_session_set_user_tailoring_file(session, + tailoring_file_path) + if OSCAP.xccdf_session_load(session) != 0: + raise BenchmarkHandlingError(OSCAP.oscap_err_desc()) + + # get the benchmark object + policy_model = OSCAP.xccdf_session_get_policy_model(session) + benchmark = OSCAP.xccdf_policy_model_get_benchmark(policy_model) + + default_policy = OSCAP.xccdf_policy_new(policy_model, None) + default_rules_count = OSCAP.xccdf_policy_get_selected_rules_count(default_policy) + + # stores a list of profiles in the benchmark + self._profiles = [] + + if default_rules_count > 0: + self._profiles.append( + ProfileInfo( + "default", "Default", + "The implicit XCCDF profile. Usually, the default contains no rules.")) + + if not benchmark: + msg = "Not a valid benchmark file: '%s'" % xccdf_file_path + raise BenchmarkHandlingError(msg) + + # iterate over the profiles in the benchmark and store them + profile_itr = OSCAP.xccdf_benchmark_get_profiles(benchmark) + while OSCAP.xccdf_profile_iterator_has_more(profile_itr): + profile = OSCAP.xccdf_profile_iterator_next(profile_itr) + + id_ = OSCAP.xccdf_profile_get_id(profile) + title = oscap_text_itr_get_text(OSCAP.xccdf_profile_get_title(profile)) + desc = parse_HTML_from_content(oscap_text_itr_get_text(OSCAP.xccdf_profile_get_description(profile))) + info = ProfileInfo(id_, title, desc) + + self._profiles.append(info) + + if tailoring_file_path: + tailoring = OSCAP.xccdf_policy_model_get_tailoring(policy_model) + profile_itr = OSCAP.xccdf_tailoring_get_profiles(tailoring) + while OSCAP.xccdf_profile_iterator_has_more(profile_itr): + profile = OSCAP.xccdf_profile_iterator_next(profile_itr) + + id_ = OSCAP.xccdf_profile_get_id(profile) + title = oscap_text_itr_get_text(OSCAP.xccdf_profile_get_title(profile)) + desc = parse_HTML_from_content(oscap_text_itr_get_text(OSCAP.xccdf_profile_get_description(profile))) + info = ProfileInfo(id_, title, desc) + + self._profiles.append(info) + + OSCAP.xccdf_profile_iterator_free(profile_itr) + OSCAP.xccdf_session_free(session) + + @property + def profiles(self): + """Property for the list of profiles defined in the benchmark.""" + + return self._profiles diff --git a/org_fedora_oscap/data_fetch.py b/org_fedora_oscap/data_fetch.py new file mode 100644 index 0000000..17e440e --- /dev/null +++ b/org_fedora_oscap/data_fetch.py @@ -0,0 +1,198 @@ +""" +Module for fetching files via HTTP and FTP. Directly or over SSL (HTTPS) with +server certificate validation. + +""" + +import re +import os +import os.path +import pycurl + +from pyanaconda.core.configuration.anaconda import conf + +from org_fedora_oscap import utils + +import logging +log = logging.getLogger("anaconda") + + +# everything else should be private +__all__ = ["fetch_data", "can_fetch_from"] + +# prefixes of the URLs that need network connection +NET_URL_PREFIXES = ("http", "https", "ftp") + +# prefixes of the URLs that may not need network connection +LOCAL_URL_PREFIXES = ("file",) + +# TODO: needs improvements +HTTP_URL_RE_STR = r"(https?)://(.*)" +HTTP_URL_RE = re.compile(HTTP_URL_RE_STR) + +FTP_URL_RE_STR = r"(ftp)://(.*)" +FTP_URL_RE = re.compile(FTP_URL_RE_STR) + +FILE_URL_RE_STR = r"(file)://(.*)" +FILE_URL_RE = re.compile(FILE_URL_RE_STR) + + +class DataFetchError(Exception): + """Parent class for the exception classes defined in this module.""" + + pass + + +class CertificateValidationError(DataFetchError): + """Class for the certificate validation related errors.""" + + pass + + +class WrongRequestError(DataFetchError): + """Class for the wrong combination of parameters errors.""" + + pass + + +class UnknownURLformatError(DataFetchError): + """Class for invalid URL cases.""" + + pass + + +class FetchError(DataFetchError): + """ + Class for the errors when fetching data. Usually due to I/O errors. + + """ + + pass + + +def can_fetch_from(url): + """ + Function telling whether the fetch_data function understands the type of + given URL or not. + + :param url: URL + :type url: str + :return: whether the type of the URL is supported or not + :rtype: str + + """ + resources = NET_URL_PREFIXES + LOCAL_URL_PREFIXES + return any(url.startswith(prefix) for prefix in resources) + + +def fetch_data(url, out_file, ca_certs=None): + """ + Fetch data from a given URL. If the URL starts with https://, ca_certs can + be a path to PEM file with CA certificate chain to validate server + certificate. + + :param url: URL of the data + :type url: str + :param out_file: path to the output file + :type out_file: str + :param ca_certs: path to a PEM file with CA certificate chain + :type ca_certs: str + :raise WrongRequestError: if a wrong combination of arguments is passed + (ca_certs file path given and url starting with + http://) or arguments don't have required format + :raise CertificateValidationError: if server certificate validation fails + :raise FetchError: if data fetching fails (usually due to I/O errors) + + """ + + # create the directory for the out_file if it doesn't exist + out_dir = os.path.dirname(out_file) + utils.ensure_dir_exists(out_dir) + + if can_fetch_from(url): + _curl_fetch(url, out_file, ca_certs) + else: + msg = "Cannot fetch data from '%s': unknown URL format" % url + raise UnknownURLformatError(msg) + + +def _curl_fetch(url, out_file, ca_certs=None): + """ + Function that fetches data and writes it out to the given file path. If a + path to the file with CA certificates is given and the url starts with + 'https', the server certificate is validated. + + :param url: url of the data that has to start with 'http://' or "https://" + :type url: str + :param out_file: path to the output file + :type out_file: str + :param ca_certs: path to the file with CA certificates for server + certificate validation + :type ca_certs: str + :raise WrongRequestError: if a wrong combination of arguments is passed + (ca_certs file path given and url starting with + http://) or arguments don't have required format + :raise CertificateValidationError: if server certificate validation fails + :raise FetchError: if data fetching fails (usually due to I/O errors) + + """ + + if url.startswith("ftp"): + match = FTP_URL_RE.match(url) + if not match: + msg = "Wrong url not matching '%s'" % FTP_URL_RE_STR + raise WrongRequestError(msg) + else: + protocol, path = match.groups() + if '@' not in path: + # no user:pass given -> use anonymous login to the FTP server + url = protocol + "://anonymous:@" + path + elif url.startswith("file"): + match = FILE_URL_RE.match(url) + if not match: + msg = "Wrong url not matching '%s'" % FILE_URL_RE_STR + raise WrongRequestError(msg) + else: + match = HTTP_URL_RE.match(url) + if not match: + msg = "Wrong url not matching '%s'" % HTTP_URL_RE_STR + raise WrongRequestError(msg) + + # the first group contains the protocol, the second one the rest + protocol = match.groups()[0] + + if not out_file: + raise WrongRequestError("out_file cannot be an empty string") + + if ca_certs and protocol != "https": + msg = "Cannot verify server certificate when using plain HTTP" + raise WrongRequestError(msg) + + curl = pycurl.Curl() + curl.setopt(pycurl.URL, url) + + if ca_certs and protocol == "https": + # the strictest verification + curl.setopt(pycurl.SSL_VERIFYHOST, 2) + curl.setopt(pycurl.SSL_VERIFYPEER, 1) + curl.setopt(pycurl.CAINFO, ca_certs) + + # may be turned off by flags (specified on command line, take precedence) + if not conf.payload.verify_ssl: + log.warning("Disabling SSL verification due to the noverifyssl flag") + curl.setopt(pycurl.SSL_VERIFYHOST, 0) + curl.setopt(pycurl.SSL_VERIFYPEER, 0) + + try: + with open(out_file, "wb") as fobj: + curl.setopt(pycurl.WRITEDATA, fobj) + curl.perform() + except pycurl.error as err: + # first arg is the error code + if err.args[0] == pycurl.E_SSL_CACERT: + msg = "Failed to connect to server and validate its "\ + "certificate: %s" % err + raise CertificateValidationError(msg) + else: + msg = "Failed to fetch data: %s" % err + raise FetchError(msg) diff --git a/org_fedora_oscap/gui/__init__.py b/org_fedora_oscap/gui/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/org_fedora_oscap/gui/__init__.py diff --git a/org_fedora_oscap/gui/spokes/__init__.py b/org_fedora_oscap/gui/spokes/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/org_fedora_oscap/gui/spokes/__init__.py diff --git a/org_fedora_oscap/gui/spokes/oscap.glade b/org_fedora_oscap/gui/spokes/oscap.glade new file mode 100644 index 0000000..e9e2fc0 --- /dev/null +++ b/org_fedora_oscap/gui/spokes/oscap.glade @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + True + True + SECURITY POLICY + + + + False + vertical + 6 + + + False + + + False + 6 + 6 + 6 + + + + + False + False + 0 + + + + + False + 0 + 0.75 + 0.75 + + + False + vertical + 6 + + + True + False + start + + + _Change content + True + True + True + True + + + + False + True + 0 + + + + + True + False + Apply security policy: + 0.85000002384185791 + + + False + True + 1 + + + + + True + True + start + center + True + + + + False + True + 2 + + + + + False + True + 0 + + + + + True + True + False + False + + + True + False + 6 + 6 + True + True + vertical + 4 + + + True + False + True + 6 + True + + + True + False + 6 + + + True + False + Data stream: + + + False + True + 0 + + + + + True + False + dsStore + + + + end + + + 0 + + + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + start + 6 + + + True + False + Checklist: + + + False + True + 0 + + + + + True + False + xccdfStore + + + + end + + + 0 + + + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + Choose profile below: + 0 + + + False + True + 1 + + + + + True + True + in + 160 + + + True + True + GDK_BUTTON_PRESS_MASK | GDK_STRUCTURE_MASK + True + True + profilesStore + False + False + 0 + + + + + + + + + Profile + True + + + 110 + word + 110 + 110 + + + 1 + + + + + + + Selected + + + + + + + + + + False + True + 2 + + + + + _Select profile + True + True + True + center + True + + + + + False + True + 3 + + + + + True + False + 20 + Changes that were done or need to be done: + 0 + + + False + True + 4 + + + + + True + True + in + 140 + + + True + True + True + changesStore + False + False + 0 + + + + + + + + + + + + + + + + 1 + + + + + + + + + False + True + 5 + + + + + + + True + False + Parameters + + + False + + + + + True + False + vertical + 3 + + + True + False + + + True + True + True + center + + + + True + False + _Use SCAP Security Guide + True + + + + + + + + + False + True + 0 + + + + + True + False + No content found. Please enter data stream content or archive URI below: + True + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + 6 + + + True + True + True + + + + + False + True + 0 + + + + + _Fetch + True + True + True + True + + + + False + True + 1 + + + + + False + True + 1 + + + + + True + False + 6 + + + True + False + + + False + True + 0 + + + + + True + False + Fetching content... + + + False + True + 1 + + + + + False + True + 2 + + + + + 1 + + + + + True + False + Fetch Content + + + 1 + False + + + + + False + True + 1 + + + + + + + True + True + 1 + + + + + + + + + diff --git a/org_fedora_oscap/gui/spokes/oscap.py b/org_fedora_oscap/gui/spokes/oscap.py new file mode 100644 index 0000000..f21f7d3 --- /dev/null +++ b/org_fedora_oscap/gui/spokes/oscap.py @@ -0,0 +1,1177 @@ +# +# Copyright (C) 2013 Red Hat, Inc. +# +# This copyrighted material is made available to anyone wishing to use, +# modify, copy, or redistribute it subject to the terms and conditions of +# the GNU General Public License v.2, or (at your option) any later version. +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY expressed or implied, including the implied warranties of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. You should have received a copy of the +# GNU General Public License along with this program; if not, write to the +# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the +# source code or documentation are not subject to the GNU General Public +# License and may only be used or replicated with the express permission of +# Red Hat, Inc. +# +# Red Hat Author(s): Vratislav Podzimek +# + +import threading +import logging +from functools import wraps + +# the path to addons is in sys.path so we can import things +# from org_fedora_oscap +from org_fedora_oscap import common +from org_fedora_oscap import data_fetch +from org_fedora_oscap import rule_handling +from org_fedora_oscap import content_handling +from org_fedora_oscap import utils +from org_fedora_oscap.common import dry_run_skip +from pyanaconda.threading import threadMgr, AnacondaThread +from pyanaconda.ui.gui.spokes import NormalSpoke +from pyanaconda.ui.communication import hubQ +from pyanaconda.ui.gui.utils import async_action_wait, really_hide, really_show +from pyanaconda.ui.gui.utils import set_treeview_selection, fire_gtk_action +from pyanaconda.ui.categories.system import SystemCategory +from pykickstart.errors import KickstartValueError + +from pyanaconda.modules.common.constants.services import USERS + +# pylint: disable-msg=E0611 +from gi.repository import Gdk + +log = logging.getLogger("anaconda") + +_ = common._ +N_ = common.N_ + +# export only the spoke, no helper functions, classes or constants +__all__ = ["OSCAPSpoke"] + +# pages in the main notebook +SET_PARAMS_PAGE = 0 +GET_CONTENT_PAGE = 1 + + +class GtkActionList(object): + """Class for scheduling Gtk actions to be all run at once.""" + + def __init__(self): + self._actions = [] + + def add_action(self, func, *args): + """Add Gtk action to be run later.""" + + @async_action_wait + def gtk_action(): + func(*args) + + self._actions.append(gtk_action) + + def fire(self): + """Run all scheduled Gtk actions.""" + + for action in self._actions: + action() + + self._actions = [] + + +# helper functions +def set_combo_selection(combo, item, unset_first=False): + """ + Set selected item of the combobox. + + :return: True if successfully set, False otherwise + :rtype: bool + + """ + + if unset_first: + combo.set_active_iter(None) + + model = combo.get_model() + if not model: + return False + + itr = model.get_iter_first() + while itr: + if model[itr][0] == item: + combo.set_active_iter(itr) + return True + + itr = model.iter_next(itr) + + return False + + +def get_combo_selection(combo): + """ + Get the selected item of the combobox. + + :return: selected item or None + + """ + + model = combo.get_model() + itr = combo.get_active_iter() + if not itr or not model: + return None + + return model[itr][0] + + +def render_message_type(column, renderer, model, itr, user_data=None): + # get message type from the first column + value = model[itr][0] + + if value == common.MESSAGE_TYPE_FATAL: + renderer.set_property("stock-id", "gtk-dialog-error") + elif value == common.MESSAGE_TYPE_WARNING: + renderer.set_property("stock-id", "gtk-dialog-warning") + elif value == common.MESSAGE_TYPE_INFO: + renderer.set_property("stock-id", "gtk-info") + else: + renderer.set_property("stock-id", "gtk-dialog-question") + + +def set_ready(func): + @wraps(func) + def decorated(self, *args, **kwargs): + ret = func(self, *args, **kwargs) + + self._unitialized_status = None + self._ready = True + # pylint: disable-msg=E1101 + hubQ.send_ready(self.__class__.__name__, True) + hubQ.send_message(self.__class__.__name__, self.status) + + return ret + + return decorated + + +class OSCAPSpoke(NormalSpoke): + """ + Main class of the OSCAP addon spoke that will appear in the Security + category on the Summary hub. It allows interactive choosing of the data + stream, checklist and profile driving the evaluation and remediation of the + available SCAP content in the installation process. + + :see: pyanaconda.ui.common.UIObject + :see: pyanaconda.ui.common.Spoke + :see: pyanaconda.ui.gui.GUIObject + + """ + + # class attributes defined by API # + + # list all top-level objects from the .glade file that should be exposed + # to the spoke or leave empty to extract everything + builderObjects = ["OSCAPspokeWindow", "profilesStore", "changesStore", + "dsStore", "xccdfStore", "profilesStore", + ] + + # the name of the main window widget + mainWidgetName = "OSCAPspokeWindow" + + # name of the .glade file in the same directory as this source + uiFile = "oscap.glade" + + # id of the help content for this spoke + help_id = "SecurityPolicySpoke" + + # domain of oscap-anaconda-addon translations + translationDomain = "oscap-anaconda-addon" + + # category this spoke belongs to + category = SystemCategory + + # spoke icon (will be displayed on the hub) + # preferred are the -symbolic icons as these are used in Anaconda's spokes + icon = "changes-prevent-symbolic" + + # title of the spoke (will be displayed on the hub) + title = N_("_Security Policy") + + # methods defined by API and helper methods # + def __init__(self, data, storage, payload): + """ + :see: pyanaconda.ui.common.Spoke.__init__ + :param data: data object passed to every spoke to load/store data + from/to it + :type data: pykickstart.base.BaseHandler + :param storage: object storing storage-related information + (disks, partitioning, bootloader, etc.) + :type storage: blivet.Blivet + :param payload: object storing packaging-related information + :type payload: pyanaconda.packaging.Payload + + """ + + NormalSpoke.__init__(self, data, storage, payload) + self._addon_data = self.data.addons.org_fedora_oscap + # workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1673071 + self.title = _(self.title) + self._storage = storage + self._ready = False + + # the first status provided + self._unitialized_status = _("Not ready") + + self._content_handler = None + self._content_handling_cls = None + self._ds_checklists = None + + # used for changing profiles, stored as self._addon_data.rule_data when + # leaving the spoke + self._rule_data = None + + # used for storing previously set root password if we need to remove it + # due to the chosen policy (so that we can put it back in case of + # revert) + self.__old_root_pw = None + + # used to check if the profile was changed or not + self._active_profile = None + + # prevent multiple simultaneous data fetches + self._fetching = False + self._fetch_flag_lock = threading.Lock() + + self._error = None + + # wait for all Anaconda spokes to initialiuze + self._anaconda_spokes_initialized = threading.Event() + self.initialization_controller.init_done.connect(self._all_anaconda_spokes_initialized) + + def _all_anaconda_spokes_initialized(self): + log.debug("OSCAP addon: Anaconda init_done signal triggered") + self._anaconda_spokes_initialized.set() + + def initialize(self): + """ + The initialize method that is called after the instance is created. + The difference between __init__ and this method is that this may take + a long time and thus could be called in a separated thread. + + :see: pyanaconda.ui.common.UIObject.initialize + + """ + + NormalSpoke.initialize(self) + column = self.builder.get_object("messageTypeColumn") + renderer = self.builder.get_object("messageTypeRenderer") + column.set_cell_data_func(renderer, render_message_type) + + # the main notebook containing two pages -- for settings parameters and + # for entering content URL + self._main_notebook = self.builder.get_object("mainNotebook") + + # the store that holds the messages that come from the rules evaluation + self._message_store = self.builder.get_object("changesStore") + + # stores with data streams, checklists and profiles + self._ds_store = self.builder.get_object("dsStore") + self._xccdf_store = self.builder.get_object("xccdfStore") + self._profiles_store = self.builder.get_object("profilesStore") + + # comboboxes for data streams and checklists + self._ids_box = self.builder.get_object("idsBox") + self._ds_combo = self.builder.get_object("dsCombo") + self._xccdf_combo = self.builder.get_object("xccdfCombo") + + # profiles view and selection + self._profiles_view = self.builder.get_object("profilesView") + self._profiles_selection = self.builder.get_object("profilesSelection") + selected_column = self.builder.get_object("selectedColumn") + selected_renderer = self.builder.get_object("selectedRenderer") + selected_column.set_cell_data_func(selected_renderer, + self._render_selected) + + # button for switching profiles + self._choose_button = self.builder.get_object("chooseProfileButton") + + # toggle switching the dry-run mode + self._dry_run_switch = self.builder.get_object("dryRunSwitch") + + # control buttons + self._control_buttons = self.builder.get_object("controlButtons") + + # content URL entering, content fetching, ... + self._no_content_label = self.builder.get_object("noContentLabel") + self._content_url_entry = self.builder.get_object("urlEntry") + self._fetch_button = self.builder.get_object("fetchButton") + self._progress_box = self.builder.get_object("progressBox") + self._progress_spinner = self.builder.get_object("progressSpinner") + self._progress_label = self.builder.get_object("progressLabel") + self._ssg_button = self.builder.get_object("ssgButton") + + # if no content was specified and SSG is available, use it + if not self._addon_data.content_type and common.ssg_available(): + self._addon_data.content_type = "scap-security-guide" + self._addon_data.content_path = common.SSG_DIR + common.SSG_CONTENT + + if not self._addon_data.content_defined: + # nothing more to be done now, the spoke is ready + self._ready = True + + # no more being unitialized + self._unitialized_status = None + + # user is going to enter the content URL + self._content_url_entry.grab_focus() + + # pylint: disable-msg=E1101 + hubQ.send_ready(self.__class__.__name__, True) + else: + # else fetch data + self._fetch_data_and_initialize() + + def _render_selected(self, column, renderer, model, itr, user_data=None): + if model[itr][2]: + renderer.set_property("stock-id", "gtk-apply") + else: + renderer.set_property("stock-id", None) + + def _fetch_data_and_initialize(self): + """Fetch data from a specified URL and initialize everything.""" + + with self._fetch_flag_lock: + if self._fetching: + # prevent multiple fetches running simultaneously + return + self._fetching = True + + thread_name = None + if any(self._addon_data.content_url.startswith(net_prefix) + for net_prefix in data_fetch.NET_URL_PREFIXES): + # need to fetch data over network + try: + thread_name = common.wait_and_fetch_net_data( + self._addon_data.content_url, + self._addon_data.raw_preinst_content_path, + self._addon_data.certificates) + except common.OSCAPaddonNetworkError: + self._network_problem() + with self._fetch_flag_lock: + self._fetching = False + return + except KickstartValueError: + self._invalid_url() + with self._fetch_flag_lock: + self._fetching = False + return + + # pylint: disable-msg=E1101 + hubQ.send_message(self.__class__.__name__, + _("Fetching content data")) + # pylint: disable-msg=E1101 + hubQ.send_not_ready(self.__class__.__name__) + threadMgr.add(AnacondaThread(name="OSCAPguiWaitForDataFetchThread", + target=self._init_after_data_fetch, + args=(thread_name,))) + + @set_ready + def _init_after_data_fetch(self, wait_for): + """ + Waits for data fetching to be finished, extracts it (if needed), + populates the stores and evaluates pre-installation fixes from the + content and marks the spoke as ready in the end. + + :param wait_for: name of the thread to wait for (if any) + :type wait_for: str or None + + """ + + try: + threadMgr.wait(wait_for) + except data_fetch.DataFetchError: + self._data_fetch_failed() + with self._fetch_flag_lock: + self._fetching = False + return + finally: + # stop the spinner in any case + fire_gtk_action(self._progress_spinner.stop) + + if self._addon_data.fingerprint: + hash_obj = utils.get_hashing_algorithm(self._addon_data.fingerprint) + digest = utils.get_file_fingerprint(self._addon_data.raw_preinst_content_path, + hash_obj) + if digest != self._addon_data.fingerprint: + self._integrity_check_failed() + # fetching done + with self._fetch_flag_lock: + self._fetching = False + return + + # RPM is an archive at this phase + if self._addon_data.content_type in ("archive", "rpm"): + # extract the content + try: + fpaths = common.extract_data(self._addon_data.raw_preinst_content_path, + common.INSTALLATION_CONTENT_DIR, + [self._addon_data.content_path]) + except common.ExtractionError as err: + self._extraction_failed(str(err)) + # fetching done + with self._fetch_flag_lock: + self._fetching = False + return + + # and populate missing fields + self._content_handling_cls, files = content_handling.explore_content_files(fpaths) + files = common.strip_content_dir(files) + + # pylint: disable-msg=E1103 + self._addon_data.content_path = self._addon_data.content_path or files.xccdf + self._addon_data.cpe_path = self._addon_data.cpe_path or files.cpe + self._addon_data.tailoring_path = (self._addon_data.tailoring_path or + files.tailoring) + elif self._addon_data.content_type == "datastream": + self._content_handling_cls = content_handling.DataStreamHandler + elif self._addon_data.content_type == "scap-security-guide": + self._content_handling_cls = content_handling.BenchmarkHandler + else: + raise common.OSCAPaddonError("Unsupported content type") + + try: + self._content_handler = self._content_handling_cls(self._addon_data.preinst_content_path, + self._addon_data.preinst_tailoring_path) + except content_handling.ContentHandlingError: + self._invalid_content() + # fetching done + with self._fetch_flag_lock: + self._fetching = False + + return + + if self._using_ds: + # populate the stores from items from the content + self._ds_checklists = self._content_handler.get_data_streams_checklists() + add_ds_ids = GtkActionList() + add_ds_ids.add_action(self._ds_store.clear) + for dstream in self._ds_checklists.keys(): + add_ds_ids.add_action(self._add_ds_id, dstream) + add_ds_ids.fire() + + self._update_ids_visibility() + + # refresh UI elements + self.refresh() + + # let all initialization and configuration happen before we evaluate + # the setup + if not self._anaconda_spokes_initialized.is_set(): + # only wait (and log the messages) if the event is not set yet + log.debug("OSCAP addon: waiting for all Anaconda spokes to be initialized") + self._anaconda_spokes_initialized.wait() + log.debug("OSCAP addon: all Anaconda spokes have been initialized - continuing") + + # try to switch to the chosen profile (if any) + selected = self._switch_profile() + + if self._addon_data.profile_id and not selected: + # profile ID given, but it was impossible to select it -> invalid + # profile ID given + self._invalid_profile_id() + return + + # initialize the self._addon_data.rule_data + self._addon_data.rule_data = self._rule_data + + # update the message store with the messages + self._update_message_store() + + # all initialized, we can now let user set parameters + fire_gtk_action(self._main_notebook.set_current_page, SET_PARAMS_PAGE) + + # and use control buttons + fire_gtk_action(really_show, self._control_buttons) + + # fetching done + with self._fetch_flag_lock: + self._fetching = False + + # no error + self._set_error(None) + + @property + def _using_ds(self): + return self._content_handling_cls == content_handling.DataStreamHandler + + @property + def _current_ds_id(self): + return get_combo_selection(self._ds_combo) + + @property + def _current_xccdf_id(self): + return get_combo_selection(self._xccdf_combo) + + @property + def _current_profile_id(self): + store, itr = self._profiles_selection.get_selected() + if not store or not itr: + return None + else: + return store[itr][0] + + def _add_ds_id(self, ds_id): + """ + Add data stream ID to the data streams store. + + :param ds_id: data stream ID + :type ds_id: str + + """ + + self._ds_store.append([ds_id]) + + @async_action_wait + def _update_ids_visibility(self): + """ + Updates visibility of the combo boxes that are used to select the DS + and XCCDF IDs. + + """ + + if self._using_ds: + # only show the combo boxes if there are multiple data streams or + # multiple xccdfs (IOW if there's something to choose from) + ds_ids = list(self._ds_checklists.keys()) + if len(ds_ids) > 1 or len(self._ds_checklists[ds_ids[0]]) > 1: + really_show(self._ids_box) + return + + # not showing, hide instead + really_hide(self._ids_box) + + @async_action_wait + def _update_xccdfs_store(self): + """ + Clears and repopulates the store with XCCDF IDs from the currently + selected data stream. + + """ + + if self._ds_checklists is None: + # not initialized, cannot do anything + return + + self._xccdf_store.clear() + for xccdf_id in self._ds_checklists[self._current_ds_id]: + self._xccdf_store.append([xccdf_id]) + + @async_action_wait + def _update_profiles_store(self): + """ + Clears and repopulates the store with profiles from the currently + selected data stream and checklist. + + """ + + if self._content_handler is None: + # not initialized, cannot do anything + return + + if self._using_ds and self._ds_checklists is None: + # not initialized, cannot do anything + return + + self._profiles_store.clear() + + if self._using_ds: + profiles = self._content_handler.get_profiles(self._current_ds_id, + self._current_xccdf_id) + else: + # pylint: disable-msg=E1103 + profiles = self._content_handler.profiles + + for profile in profiles: + profile_markup = '%s\n%s' \ + % (profile.title, profile.description) + self._profiles_store.append([profile.id, + profile_markup, + profile.id == self._active_profile]) + + def _add_message(self, message): + """ + Add message to the store. + + :param message: message to be added + :type message: org_fedora_oscap.common.RuleMessage + + """ + + self._message_store.append([message.type, message.text]) + + @dry_run_skip + @async_action_wait + def _update_message_store(self, report_only=False): + """ + Updates the message store with messages from rule evaluation. + + :param report_only: wheter to do changes in configuration or just + report + :type report_only: bool + + """ + + self._message_store.clear() + + if not self._rule_data: + # RuleData instance not initialized, cannot do anything + return + + messages = self._rule_data.eval_rules(self.data, self._storage, + report_only) + if not messages: + # no messages from the rules, add a message informing about that + if not self._active_profile: + # because of no profile + message = common.RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, + _("No profile selected")) + else: + # because of no pre-inst rules + message = common.RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, + _("No rules for the pre-installation phase")) + self._add_message(message) + + # nothing more to be done + return + + self._resolve_rootpw_issues(messages, report_only) + for msg in messages: + self._add_message(msg) + + def _resolve_rootpw_issues(self, messages, report_only): + """Mitigate root password issues (which are not fatal in GUI)""" + fatal_rootpw_msgs = [ + msg for msg in messages + if msg.origin == rule_handling.PasswdRules and msg.type == common.MESSAGE_TYPE_FATAL] + + if fatal_rootpw_msgs: + for msg in fatal_rootpw_msgs: + # cannot just change the message type because it is a namedtuple + messages.remove(msg) + + msg = common.RuleMessage( + self.__class__, common.MESSAGE_TYPE_WARNING, msg.text) + messages.append(msg) + + if not report_only: + users_proxy = USERS.get_proxy() + + self.__old_root_pw = users_proxy.RootPassword + self.data.rootpw.password = None + self.__old_root_pw_seen = users_proxy.IsRootpwKickstarted + self.data.rootpw.seen = False + + def _revert_rootpw_changes(self): + if self.__old_root_pw is not None: + users_proxy = USERS.get_proxy() + + users_proxy.SetRootPassword(self.__old_root_pw) + self.__old_root_pw = None + + users_proxy.SetRootpwKickstarted(self.__old_root_pw_seen) + self.__old_root_pw_seen = None + + @async_action_wait + def _unselect_profile(self, profile_id): + """Unselects the given profile.""" + + if not profile_id: + # no profile specified, nothing to do + return + + itr = self._profiles_store.get_iter_first() + while itr: + if self._profiles_store[itr][0] == profile_id: + self._profiles_store.set_value(itr, 2, False) + itr = self._profiles_store.iter_next(itr) + + if self._rule_data: + # revert changes and clear rule_data (no longer valid) + self._rule_data.revert_changes(self.data, self._storage) + self._revert_rootpw_changes() + self._rule_data = None + + self._active_profile = None + + @async_action_wait + def _select_profile(self, profile_id): + """Selects the given profile.""" + + if not profile_id: + # no profile specified, nothing to do + return False + + if self._using_ds: + ds = self._current_ds_id + xccdf = self._current_xccdf_id + + if not all((ds, xccdf, profile_id)): + # something is not set -> do nothing + return False + else: + ds = None + xccdf = None + + # get pre-install fix rules from the content + try: + rules = common.get_fix_rules_pre(profile_id, + self._addon_data.preinst_content_path, + ds, xccdf, + self._addon_data.preinst_tailoring_path) + except common.OSCAPaddonError as exc: + log.error( + "Failed to get rules for the profile '{}': {}" + .format(profile_id, str(exc))) + self._set_error( + "Failed to get rules for the profile '{}'" + .format(profile_id)) + return False + + itr = self._profiles_store.get_iter_first() + while itr: + if self._profiles_store[itr][0] == profile_id: + self._profiles_store.set_value(itr, 2, True) + itr = self._profiles_store.iter_next(itr) + + # parse and store rules with a clean RuleData instance + self._rule_data = rule_handling.RuleData() + for rule in rules.splitlines(): + self._rule_data.new_rule(rule) + + # remember the active profile + self._active_profile = profile_id + + return True + + @async_action_wait + @dry_run_skip + def _switch_profile(self): + """Switches to a current selected profile. + + :returns: whether some profile was selected or not + + """ + + self._set_error(None) + profile = self._current_profile_id + if not profile: + return False + + self._unselect_profile(self._active_profile) + ret = self._select_profile(profile) + + # update messages according to the newly chosen profile + self._update_message_store() + + return ret + + @set_ready + def _set_error(self, msg): + """Set or clear error message""" + if msg: + self._error = msg + self.clear_info() + self.set_error(msg) + else: + self._error = None + self.clear_info() + + @async_action_wait + def _invalid_content(self): + """Callback for informing user about provided content invalidity.""" + + msg = _("Invalid content provided. Enter a different URL, please.") + self._progress_label.set_markup("%s" % msg) + self._wrong_content(msg) + + @async_action_wait + def _invalid_url(self): + """Callback for informing user about provided URL invalidity.""" + + msg = _("Invalid or unsupported content URL, please enter a different one.") + self._progress_label.set_markup("%s" % msg) + self._wrong_content(msg) + + @async_action_wait + def _data_fetch_failed(self): + """Adapts the UI if fetching data from entered URL failed""" + + msg = _("Failed to fetch content. Enter a different URL, please.") + self._progress_label.set_markup("%s" % msg) + self._wrong_content(msg) + + @async_action_wait + def _network_problem(self): + """Adapts the UI if network error was encountered during data fetch""" + + msg = _("Network error encountered when fetching data." + " Please check that network is setup and working.") + self._progress_label.set_markup("%s" % msg) + self._wrong_content(msg) + + @async_action_wait + def _integrity_check_failed(self): + """Adapts the UI if integrity check fails""" + + msg = _("The integrity check of the content failed. Cannot use the content.") + self._progress_label.set_markup("%s" % msg) + self._wrong_content(msg) + + @async_action_wait + def _extraction_failed(self, err_msg): + """Adapts the UI if extracting data from entered URL failed""" + + msg = _("Failed to extract content (%s). Enter a different URL, " + "please.") % err_msg + self._progress_label.set_markup("%s" % msg) + self._wrong_content(msg) + + @async_action_wait + def _wrong_content(self, msg): + self._addon_data.clear_all() + really_hide(self._progress_spinner) + self._fetch_button.set_sensitive(True) + self._content_url_entry.set_sensitive(True) + self._content_url_entry.grab_focus() + self._content_url_entry.select_region(0, -1) + self._content_handling_cls = None + self._set_error(msg) + + @async_action_wait + def _invalid_profile_id(self): + msg = _("Profile with ID '%s' not defined in the content. Select a different profile, please") % self._addon_data.profile_id + self._set_error(msg) + self._addon_data.profile_id = None + + @async_action_wait + def _switch_dry_run(self, dry_run): + self._choose_button.set_sensitive(not dry_run) + + if dry_run: + # no profile can be selected in the dry-run mode + self._unselect_profile(self._active_profile) + + # no messages in the dry-run mode + self._message_store.clear() + message = common.RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, + _("Not applying security policy")) + self._add_message(message) + + self._set_error(None) + else: + # mark the active profile as selected + self._select_profile(self._active_profile) + self._update_message_store() + + @async_action_wait + def refresh(self): + """ + The refresh method that is called every time the spoke is displayed. + It should update the UI elements according to the contents of + self.data. + + :see: pyanaconda.ui.common.UIObject.refresh + + """ + + if not self._addon_data.content_defined: + # hide the control buttons + really_hide(self._control_buttons) + + # provide SSG if available + if common.ssg_available(): + # show the SSG button and tweak the rest of the line + # (the label) + really_show(self._ssg_button) + # TRANSLATORS: the other choice if SCAP Security Guide is also + # available + tip = _(" or enter data stream content or archive URL below:") + else: + # hide the SSG button + really_hide(self._ssg_button) + tip = _("No content found. Please enter data stream content or " + "archive URL below:") + + self._no_content_label.set_text(tip) + + # hide the progress box, no progress now + with self._fetch_flag_lock: + if not self._fetching: + really_hide(self._progress_box) + + self._content_url_entry.set_sensitive(True) + self._fetch_button.set_sensitive(True) + + if not self._content_url_entry.get_text(): + # no text -> no info/warning + self._progress_label.set_text("") + + # switch to the page allowing user to enter content URL and fetch + # it + self._main_notebook.set_current_page(GET_CONTENT_PAGE) + self._content_url_entry.grab_focus() + + # nothing more to do here + return + else: + # show control buttons + really_show(self._control_buttons) + + self._main_notebook.set_current_page(SET_PARAMS_PAGE) + + self._active_profile = self._addon_data.profile_id + + self._update_ids_visibility() + + if self._using_ds: + if self._addon_data.datastream_id: + set_combo_selection(self._ds_combo, + self._addon_data.datastream_id, + unset_first=True) + else: + try: + default_ds = next(iter(self._ds_checklists.keys())) + set_combo_selection(self._ds_combo, default_ds, + unset_first=True) + except StopIteration: + # no data stream available + pass + + if self._addon_data.datastream_id and self._addon_data.xccdf_id: + set_combo_selection(self._xccdf_combo, + self._addon_data.xccdf_id, + unset_first=True) + else: + # no combobox changes --> need to update profiles store manually + self._update_profiles_store() + + if self._addon_data.profile_id: + set_treeview_selection(self._profiles_view, + self._addon_data.profile_id) + + self._rule_data = self._addon_data.rule_data + + self._update_message_store() + + def apply(self): + """ + The apply method that is called when the spoke is left. It should + update the contents of self.data with values set in the GUI elements. + + """ + + if not self._addon_data.content_defined or not self._active_profile: + # no errors for no content or no profile + self._set_error(None) + + # store currently selected values to the addon data attributes + if self._using_ds: + self._addon_data.datastream_id = self._current_ds_id + self._addon_data.xccdf_id = self._current_xccdf_id + + self._addon_data.profile_id = self._active_profile + + self._addon_data.rule_data = self._rule_data + + self._addon_data.dry_run = not self._dry_run_switch.get_active() + + def execute(self): + """ + The excecute method that is called when the spoke is left. It is + supposed to do all changes to the runtime environment according to + the values set in the GUI elements. + + """ + + # nothing to do here + pass + + @property + def ready(self): + """ + The ready property that tells whether the spoke is ready (can be + visited) or not. + + :rtype: bool + + """ + + return self._ready + + @property + def completed(self): + """ + The completed property that tells whether all mandatory items on the + spoke are set, or not. The spoke will be marked on the hub as completed + or uncompleted acording to the returned value. + + :rtype: bool + + """ + + # no error message in the store + return not self._error and all(row[0] != common.MESSAGE_TYPE_FATAL + for row in self._message_store) + + @property + @async_action_wait + def status(self): + """ + The status property that is a brief string describing the state of the + spoke. It should describe whether all values are set and if possible + also the values themselves. The returned value will appear on the hub + below the spoke's title. + + :rtype: str + + """ + + if self._error: + return _("Error fetching and loading content") + + if self._unitialized_status: + # not initialized + return self._unitialized_status + + if not self._addon_data.content_defined: + return _("No content found") + + if not self._active_profile: + return _("No profile selected") + + # update message store, something may changed from the last update + self._update_message_store(report_only=True) + + warning_found = False + for row in self._message_store: + if row[0] == common.MESSAGE_TYPE_FATAL: + return _("Misconfiguration detected") + elif row[0] == common.MESSAGE_TYPE_WARNING: + warning_found = True + + # TODO: at least the last two status messages need a better wording + if warning_found: + return _("Warnings appeared") + + return _("Everything okay") + + def on_ds_combo_changed(self, *args): + """Handler for the datastream ID change.""" + + ds_id = self._current_ds_id + if not ds_id: + return + + self._update_xccdfs_store() + first_checklist = self._ds_checklists[ds_id][0] + + set_combo_selection(self._xccdf_combo, first_checklist) + + def on_xccdf_combo_changed(self, *args): + """Handler for the XCCDF ID change.""" + + # may take a while + self._update_profiles_store() + + @dry_run_skip + def on_profiles_selection_changed(self, *args): + """Handler for the profile selection change.""" + + cur_profile = self._current_profile_id + if cur_profile: + if cur_profile != self._active_profile: + # new profile selected, make the selection button sensitive + self._choose_button.set_sensitive(True) + else: + # current active profile selected + self._choose_button.set_sensitive(False) + + @dry_run_skip + def on_profile_clicked(self, widget, event, *args): + """Handler for the profile being clicked on.""" + + # if a profile is double-clicked, we should switch to it + if event.type == Gdk.EventType._2BUTTON_PRESS: + self._switch_profile() + + # active profile selected + self._choose_button.set_sensitive(False) + + # let the other actions hooked to the click happen as well + return False + + def on_profile_chosen(self, *args): + """ + Handler for the profile being chosen + (e.g. "Select profile" button hit). + + """ + + # switch profile + self._switch_profile() + + # active profile selected + self._choose_button.set_sensitive(False) + + def on_fetch_button_clicked(self, *args): + """Handler for the Fetch button""" + + with self._fetch_flag_lock: + if self._fetching: + # some other fetching/pre-processing running, give up + return + + # prevent user from changing the URL in the meantime + self._content_url_entry.set_sensitive(False) + self._fetch_button.set_sensitive(False) + url = self._content_url_entry.get_text() + really_show(self._progress_box) + really_show(self._progress_spinner) + + if not data_fetch.can_fetch_from(url): + msg = _("Invalid or unsupported URL") + # cannot start fetching + self._progress_label.set_markup("%s" % msg) + self._wrong_content(msg) + return + + self._progress_label.set_text(_("Fetching content...")) + self._progress_spinner.start() + self._addon_data.content_url = url + if url.endswith(".rpm"): + self._addon_data.content_type = "rpm" + elif any(url.endswith(arch_type) for arch_type in common.SUPPORTED_ARCHIVES): + self._addon_data.content_type = "archive" + else: + self._addon_data.content_type = "datastream" + + self._fetch_data_and_initialize() + + def on_dry_run_toggled(self, switch, *args): + dry_run = not switch.get_active() + self._addon_data.dry_run = dry_run + self._switch_dry_run(dry_run) + + def on_change_content_clicked(self, *args): + self._unselect_profile(self._active_profile) + self._addon_data.clear_all() + self.refresh() + + def on_use_ssg_clicked(self, *args): + self._addon_data.clear_all() + self._addon_data.content_type = "scap-security-guide" + self._addon_data.content_path = common.SSG_DIR + common.SSG_CONTENT + self._fetch_data_and_initialize() diff --git a/org_fedora_oscap/ks/__init__.py b/org_fedora_oscap/ks/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/org_fedora_oscap/ks/__init__.py diff --git a/org_fedora_oscap/ks/oscap.py b/org_fedora_oscap/ks/oscap.py new file mode 100644 index 0000000..60a6bfb --- /dev/null +++ b/org_fedora_oscap/ks/oscap.py @@ -0,0 +1,552 @@ +# +# Copyright (C) 2013 Red Hat, Inc. +# +# This copyrighted material is made available to anyone wishing to use, +# modify, copy, or redistribute it subject to the terms and conditions of +# the GNU General Public License v.2, or (at your option) any later version. +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY expressed or implied, including the implied warranties of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. You should have received a copy of the +# GNU General Public License along with this program; if not, write to the +# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the +# source code or documentation are not subject to the GNU General Public +# License and may only be used or replicated with the express permission of +# Red Hat, Inc. +# +# Red Hat Author(s): Vratislav Podzimek +# + +"""Module with the OSCAPdata class.""" + +import shutil +import re +import os +import time +import logging + +from pyanaconda.addons import AddonData +from pyanaconda.core.configuration.anaconda import conf +from pyanaconda.progress import progressQ +from pyanaconda import errors +from pyanaconda.core import util +from pyanaconda import flags +from pykickstart.errors import KickstartParseError, KickstartValueError +from org_fedora_oscap import utils, common, rule_handling, data_fetch +from org_fedora_oscap.common import SUPPORTED_ARCHIVES, _ +from org_fedora_oscap.content_handling import ContentCheckError + +log = logging.getLogger("anaconda") + +# export OSCAPdata class to prevent Anaconda's collect method from taking +# AddonData class instead of the OSCAPdata class +# @see: pyanaconda.kickstart.AnacondaKSHandler.__init__ +__all__ = ["OSCAPdata"] + +SUPPORTED_CONTENT_TYPES = ("datastream", "rpm", "archive", + "scap-security-guide", + ) + +SUPPORTED_URL_PREFIXES = ("http://", "https://", "ftp://" + # LABEL:?, hdaX:?, + ) + +REQUIRED_PACKAGES = ("openscap", "openscap-scanner", ) + +FINGERPRINT_REGEX = re.compile(r'^[a-z0-9]+$') + + +class MisconfigurationError(common.OSCAPaddonError): + """Exception for reporting misconfiguration.""" + + pass + + +class OSCAPdata(AddonData): + """ + Class parsing and storing data for the OSCAP addon. + + :see: pyanaconda.addons.AddonData + + """ + + def __init__(self, name, just_clear=False): + """ + :param name: name of the addon + :type name: str + + """ + + if not just_clear: + # do not call the parent's __init__ more than once + AddonData.__init__(self, name) + + # values specifying the content + self.content_type = "" + self.content_url = "" + self.datastream_id = "" + self.xccdf_id = "" + self.profile_id = "" + self.content_path = "" + self.cpe_path = "" + self.tailoring_path = "" + + # additional values + self.fingerprint = "" + + # certificate to verify HTTPS connection or signed data + self.certificates = "" + + # internal values + self.rule_data = rule_handling.RuleData() + self.dry_run = False + + def __str__(self): + """ + What should end up in the resulting kickstart file, i.e. string + representation of the stored data. + + """ + + if self.dry_run or not self.profile_id: + # the addon was run in the dry run mode, omit it from the kickstart + return "" + + def key_value_pair(key, value, indent=4): + return "%s%s = %s" % (indent * " ", key, value) + + ret = "%%addon %s" % self.name + ret += "\n%s" % key_value_pair("content-type", self.content_type) + + if self.content_url: + ret += "\n%s" % key_value_pair("content-url", self.content_url) + if self.datastream_id: + ret += "\n%s" % key_value_pair("datastream-id", self.datastream_id) + if self.xccdf_id: + ret += "\n%s" % key_value_pair("xccdf-id", self.xccdf_id) + if self.content_path and self.content_type != "scap-security-guide": + ret += "\n%s" % key_value_pair("content-path", self.content_path) + if self.cpe_path: + ret += "\n%s" % key_value_pair("cpe-path", self.cpe_path) + if self.tailoring_path: + ret += "\n%s" % key_value_pair("tailoring-path", + self.tailoring_path) + + ret += "\n%s" % key_value_pair("profile", self.profile_id) + + if self.fingerprint: + ret += "\n%s" % key_value_pair("fingerprint", self.fingerprint) + + if self.certificates: + ret += "\n%s" % key_value_pair("certificates", self.certificates) + + ret += "\n%end\n\n" + return ret + + def _parse_content_type(self, value): + value_low = value.lower() + if value_low in SUPPORTED_CONTENT_TYPES: + self.content_type = value_low + else: + msg = "Unsupported content type '%s' in the %s addon" % (value, + self.name) + raise KickstartValueError(msg) + + def _parse_content_url(self, value): + if any(value.startswith(prefix) + for prefix in SUPPORTED_URL_PREFIXES): + self.content_url = value + else: + msg = "Unsupported url '%s' in the %s addon" % (value, self.name) + raise KickstartValueError(msg) + + def _parse_datastream_id(self, value): + # need to be checked? + self.datastream_id = value + + def _parse_xccdf_id(self, value): + # need to be checked? + self.xccdf_id = value + + def _parse_profile_id(self, value): + # need to be checked? + self.profile_id = value + + def _parse_content_path(self, value): + # need to be checked? + self.content_path = value + + def _parse_cpe_path(self, value): + # need to be checked? + self.cpe_path = value + + def _parse_tailoring_path(self, value): + # need to be checked? + self.tailoring_path = value + + def _parse_fingerprint(self, value): + if FINGERPRINT_REGEX.match(value) is None: + msg = "Unsupported or invalid fingerprint" + raise KickstartValueError(msg) + + if utils.get_hashing_algorithm(value) is None: + msg = "Unsupported fingerprint" + raise KickstartValueError(msg) + + self.fingerprint = value + + def _parse_certificates(self, value): + self.certificates = value + + def handle_line(self, line): + """ + The handle_line method that is called with every line from this addon's + %addon section of the kickstart file. + + :param line: a single line from the %addon section + :type line: str + + """ + + actions = {"content-type": self._parse_content_type, + "content-url": self._parse_content_url, + "content-path": self._parse_content_path, + "datastream-id": self._parse_datastream_id, + "profile": self._parse_profile_id, + "xccdf-id": self._parse_xccdf_id, + "xccdf-path": self._parse_content_path, + "cpe-path": self._parse_cpe_path, + "tailoring-path": self._parse_tailoring_path, + "fingerprint": self._parse_fingerprint, + "certificates": self._parse_certificates, + } + + line = line.strip() + (pre, sep, post) = line.partition("=") + pre = pre.strip() + post = post.strip() + post = post.strip('"') + + try: + actions[pre](post) + except KeyError: + msg = "Unknown item '%s' for %s addon" % (line, self.name) + raise KickstartParseError(msg) + + def finalize(self): + """ + The finalize method that is called when the end of the %addon section + (the %end line) is reached. It means no more kickstart data will come. + + """ + + tmpl = "%s missing for the %s addon" + + # check provided data + if not self.content_type: + raise KickstartValueError(tmpl % ("content-type", self.name)) + + if self.content_type != "scap-security-guide" and not self.content_url: + raise KickstartValueError(tmpl % ("content-url", self.name)) + + if not self.profile_id: + self.profile_id = "default" + + if self.content_type in ("rpm", "archive") and not self.content_path: + msg = "Path to the XCCDF file has to be given if content in RPM "\ + "or archive is used" + raise KickstartValueError(msg) + + if self.content_type == "rpm" and not self.content_url.endswith(".rpm"): + msg = "Content type set to RPM, but the content URL doesn't end "\ + "with '.rpm'" + raise KickstartValueError(msg) + + if self.content_type == "archive": + supported_archive = any(self.content_url.endswith(arch_type) + for arch_type in SUPPORTED_ARCHIVES) + if not supported_archive: + msg = "Unsupported archive type of the content "\ + "file '%s'" % self.content_url + raise KickstartValueError(msg) + + # do some initialization magic in case of SSG + if self.content_type == "scap-security-guide": + if not common.ssg_available(): + msg = "SCAP Security Guide not found on the system" + raise KickstartValueError(msg) + + self.content_path = common.SSG_DIR + common.SSG_CONTENT + + @property + def content_defined(self): + return self.content_url or self.content_type == "scap-security-guide" + + @property + def content_name(self): + if self.content_type == "scap-security-guide": + raise ValueError("Using scap-security-guide, no single content file") + + rest = "/anonymous_content" + for prefix in SUPPORTED_URL_PREFIXES: + if self.content_url.startswith(prefix): + rest = self.content_url[len(prefix):] + break + + parts = rest.rsplit("/", 1) + if len(parts) != 2: + msg = "Unsupported url '%s' in the %s addon" % (self.content_url, + self.name) + raise KickstartValueError(msg) + + return parts[1] + + @property + def raw_preinst_content_path(self): + """Path to the raw (unextracted, ...) pre-installation content file""" + + return utils.join_paths(common.INSTALLATION_CONTENT_DIR, + self.content_name) + + @property + def raw_postinst_content_path(self): + """Path to the raw (unextracted, ...) post-installation content file""" + + return utils.join_paths(common.TARGET_CONTENT_DIR, + self.content_name) + + @property + def preinst_content_path(self): + """Path to the pre-installation content file""" + + if self.content_type == "datastream": + return utils.join_paths(common.INSTALLATION_CONTENT_DIR, + self.content_name) + elif self.content_type == "scap-security-guide": + # SSG is not copied to the standard place + return self.content_path + else: + return utils.join_paths(common.INSTALLATION_CONTENT_DIR, + self.content_path) + + @property + def postinst_content_path(self): + """Path to the post-installation content file""" + + if self.content_type == "datastream": + return utils.join_paths(common.TARGET_CONTENT_DIR, + self.content_name) + elif self.content_type in ("rpm", "scap-security-guide"): + # no path magic in case of RPM (SSG is installed as an RPM) + return self.content_path + else: + return utils.join_paths(common.TARGET_CONTENT_DIR, + self.content_path) + + @property + def preinst_tailoring_path(self): + """Path to the pre-installation tailoring file (if any)""" + + if not self.tailoring_path: + return "" + + return utils.join_paths(common.INSTALLATION_CONTENT_DIR, + self.tailoring_path) + + @property + def postinst_tailoring_path(self): + """Path to the post-installation tailoring file (if any)""" + + if not self.tailoring_path: + return "" + + if self.content_type == "rpm": + # no path magic in case of RPM + return self.tailoring_path + + return utils.join_paths(common.TARGET_CONTENT_DIR, + self.tailoring_path) + + def _fetch_content_and_initialize(self): + """Fetch content and initialize from it""" + + data_fetch.fetch_data(self.content_url, self.raw_preinst_content_path, + self.certificates) + # RPM is an archive at this phase + if self.content_type in ("archive", "rpm"): + # extract the content + common.extract_data(self.raw_preinst_content_path, + common.INSTALLATION_CONTENT_DIR, + [self.content_path]) + + rules = common.get_fix_rules_pre(self.profile_id, + self.preinst_content_path, + self.datastream_id, self.xccdf_id, + self.preinst_tailoring_path) + + # parse and store rules with a clean RuleData instance + self.rule_data = rule_handling.RuleData() + for rule in rules.splitlines(): + self.rule_data.new_rule(rule) + + def setup(self, storage, ksdata, payload): + """ + The setup method that should make changes to the runtime environment + according to the data stored in this object. + + :param storage: object storing storage-related information + (disks, partitioning, bootloader, etc.) + :type storage: blivet.Blivet instance + :param ksdata: data parsed from the kickstart file and set in the + installation process + :type ksdata: pykickstart.base.BaseHandler instance + + """ + + if self.dry_run or not self.profile_id: + # nothing more to be done in the dry-run mode or if no profile is + # selected + return + + if not os.path.exists(self.preinst_content_path) and not os.path.exists(self.raw_preinst_content_path): + # content not available/fetched yet + try: + self._fetch_content_and_initialize() + except (common.OSCAPaddonError, data_fetch.DataFetchError) as e: + log.error("Failed to fetch and initialize SCAP content!") + msg = _("There was an error fetching and loading the security content:\n" + + "%s\n" + + "The installation should be aborted. Do you wish to continue anyway?") % e + + if flags.flags.automatedInstall and not flags.flags.ksprompt: + # cannot have ask in a non-interactive kickstart + # installation + raise errors.CmdlineError(msg) + + answ = errors.errorHandler.ui.showYesNoQuestion(msg) + if answ == errors.ERROR_CONTINUE: + # prevent any futher actions here by switching to the dry + # run mode and let things go on + self.dry_run = True + return + else: + # Let's sleep forever to prevent any further actions and + # wait for the main thread to quit the process. + progressQ.send_quit(1) + while True: + time.sleep(100000) + + # check fingerprint if given + if self.fingerprint: + hash_obj = utils.get_hashing_algorithm(self.fingerprint) + digest = utils.get_file_fingerprint(self.raw_preinst_content_path, + hash_obj) + if digest != self.fingerprint: + log.error("Failed to fetch and initialize SCAP content!") + msg = _("The integrity check of the security content failed.\n" + + "The installation should be aborted. Do you wish to continue anyway?") + + if flags.flags.automatedInstall and not flags.flags.ksprompt: + # cannot have ask in a non-interactive kickstart + # installation + raise errors.CmdlineError(msg) + + answ = errors.errorHandler.ui.showYesNoQuestion(msg) + if answ == errors.ERROR_CONTINUE: + # prevent any futher actions here by switching to the dry + # run mode and let things go on + self.dry_run = True + return + else: + # Let's sleep forever to prevent any further actions and + # wait for the main thread to quit the process. + progressQ.send_quit(1) + while True: + time.sleep(100000) + + # evaluate rules, do automatic fixes and stop if something that cannot + # be fixed automatically is wrong + fatal_messages = [message for message in self.rule_data.eval_rules(ksdata, storage) + if message.type == common.MESSAGE_TYPE_FATAL] + if any(fatal_messages): + msg = "Wrong configuration detected!\n" + msg += "\n".join(message.text for message in fatal_messages) + msg += "\nThe installation should be aborted. Do you wish to continue anyway?" + if flags.flags.automatedInstall and not flags.flags.ksprompt: + # cannot have ask in a non-interactive kickstart installation + raise errors.CmdlineError(msg) + + answ = errors.errorHandler.ui.showYesNoQuestion(msg) + if answ == errors.ERROR_CONTINUE: + # prevent any futher actions here by switching to the dry + # run mode and let things go on + self.dry_run = True + return + else: + # Let's sleep forever to prevent any further actions and wait + # for the main thread to quit the process. + progressQ.send_quit(1) + while True: + time.sleep(100000) + + # add packages needed on the target system to the list of packages + # that are requested to be installed + pkgs_to_install = list(REQUIRED_PACKAGES) + if self.content_type == "scap-security-guide": + pkgs_to_install.append("scap-security-guide") + for pkg in pkgs_to_install: + if pkg not in ksdata.packages.packageList: + ksdata.packages.packageList.append(pkg) + + def execute(self, storage, ksdata, users, payload): + """ + The execute method that should make changes to the installed system. It + is called only once in the post-install setup phase. + + :see: setup + :param users: information about created users + :type users: pyanaconda.users.Users instance + + """ + + if self.dry_run or not self.profile_id: + # nothing more to be done in the dry-run mode or if no profile is + # selected + return + + target_content_dir = utils.join_paths(conf.target.system_root, + common.TARGET_CONTENT_DIR) + utils.ensure_dir_exists(target_content_dir) + + if self.content_type == "datastream": + shutil.copy2(self.preinst_content_path, target_content_dir) + elif self.content_type == "rpm": + # copy the RPM to the target system + shutil.copy2(self.raw_preinst_content_path, target_content_dir) + + # and install it with yum + ret = util.execInSysroot("yum", ["-y", "--nogpg", "install", + self.raw_postinst_content_path]) + if ret != 0: + raise common.ExtractionError("Failed to install content " + "RPM to the target system") + elif self.content_type == "scap-security-guide": + # nothing needed + pass + else: + utils.universal_copy(utils.join_paths(common.INSTALLATION_CONTENT_DIR, + "*"), + target_content_dir) + if os.path.exists(self.preinst_tailoring_path): + shutil.copy2(self.preinst_tailoring_path, target_content_dir) + + common.run_oscap_remediate(self.profile_id, self.postinst_content_path, + self.datastream_id, self.xccdf_id, + self.postinst_tailoring_path, + chroot=conf.target.system_root) + + def clear_all(self): + """Clear all the stored values.""" + + self.__init__(self.name, just_clear=True) diff --git a/org_fedora_oscap/rule_handling.py b/org_fedora_oscap/rule_handling.py new file mode 100644 index 0000000..cd67822 --- /dev/null +++ b/org_fedora_oscap/rule_handling.py @@ -0,0 +1,1081 @@ +# +# Copyright (C) 2013 Red Hat, Inc. +# +# This copyrighted material is made available to anyone wishing to use, +# modify, copy, or redistribute it subject to the terms and conditions of +# the GNU General Public License v.2, or (at your option) any later version. +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY expressed or implied, including the implied warranties of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. You should have received a copy of the +# GNU General Public License along with this program; if not, write to the +# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the +# source code or documentation are not subject to the GNU General Public +# License and may only be used or replicated with the express permission of +# Red Hat, Inc. +# +# Red Hat Author(s): Vratislav Podzimek +# + +""" +Module with various classes for handling pre-installation rules. + +""" + +import optparse +import shlex +import logging + +from pyanaconda.pwpolicy import F22_PwPolicyData +from pyanaconda.core.constants import ( + FIREWALL_ENABLED, FIREWALL_DISABLED, FIREWALL_USE_SYSTEM_DEFAULTS) +from pyanaconda.modules.common.constants.objects import FIREWALL, BOOTLOADER, DEVICE_TREE +from pyanaconda.modules.common.constants.services import NETWORK, STORAGE, USERS + +from org_fedora_oscap import common +from org_fedora_oscap.common import OSCAPaddonError, RuleMessage + +# everything else should be private +__all__ = ["RuleData"] + + +log = logging.getLogger("anaconda") + +_ = common._ + + +# TODO: use set instead of list for mount options? +def parse_csv(option, opt_str, value, parser): + for item in value.split(","): + if item: + parser.values.ensure_value(option.dest, []).append(item) + + +class ModifiedOptionParserException(Exception): + """Exception to be raised by ModifiedOptionParser.""" + pass + + +class ModifiedOptionParser(optparse.OptionParser): + """Overrides error behavior of OptionParser.""" + def error(self, msg): + raise ModifiedOptionParserException(msg) + + def exit(self, status=0, msg=None): + raise ModifiedOptionParserException(msg) + + +PART_RULE_PARSER = ModifiedOptionParser() +PART_RULE_PARSER.add_option("--mountoptions", dest="mount_options", + action="callback", callback=parse_csv, nargs=1, + type="string") + +PASSWD_RULE_PARSER = ModifiedOptionParser() +PASSWD_RULE_PARSER.add_option("--minlen", dest="minlen", action="store", + default=0, type="int") + +PACKAGE_RULE_PARSER = ModifiedOptionParser() +PACKAGE_RULE_PARSER.add_option("--add", dest="add_pkgs", action="append", + type="string") +PACKAGE_RULE_PARSER.add_option("--remove", dest="remove_pkgs", action="append", + type="string") + +BOOTLOADER_RULE_PARSER = ModifiedOptionParser() +BOOTLOADER_RULE_PARSER.add_option("--passwd", dest="passwd", action="store_true", + default=False) + +KDUMP_RULE_PARSER = ModifiedOptionParser() +KDUMP_RULE_PARSER.add_option("--enable", action="store_true", + dest="kdenabled", default=None) +KDUMP_RULE_PARSER.add_option("--disable", action="store_false", + dest="kdenabled", default=None) + +FIREWALL_RULE_PARSER = ModifiedOptionParser() +FIREWALL_RULE_PARSER.add_option("--enable", action="store_true", + dest="fwenabled", default=None) +FIREWALL_RULE_PARSER.add_option("--disable", action="store_false", + dest="fwenabled", default=None) +FIREWALL_RULE_PARSER.add_option("--service", dest="add_svcs", action="append", + type="string") +FIREWALL_RULE_PARSER.add_option("--port", dest="add_port", action="append", + type="string") +FIREWALL_RULE_PARSER.add_option("--trust", dest="add_trust", action="append", + type="string") +FIREWALL_RULE_PARSER.add_option("--remove-service", dest="remove_svcs", + action="append", type="string") + + +class RuleHandler(object): + """Base class for the rule handlers.""" + + def eval_rules(self, ksdata, storage, report_only=False): + """ + Method that should check the current state (as defined by the ksdata + and storage parameters) against the rules the instance of RuleHandler + holds. Depending on the value of report_only it should fix the state + with changes that can be done automatically or not and return the list + of warnings and errors for fixes that need to be done manually together + with info messages about the automatic changes. One should make sure + this method is called with report_only set to False at least once so + that the automatic fixes are done. + + :param ksdata: data representing the values set by user + :type ksdata: pykickstart.base.BaseHandler + :param storage: object storing storage-related information + (disks, partitioning, bootloader, etc.) + :type storage: blivet.Blivet + :param report_only: whether to do fixing or just report information + :type report_only: bool + :return: errors and warnings for fixes that need to be done manually + and info messages about the automatic changes + :rtype: list of common.RuleMessage objects + + """ + + return [] + + def revert_changes(self, ksdata, storage): + """ + Method that should revert all changes done by the previous calls of the + eval_rules method with the report_only set to False. + + :see: eval_rules + + """ + + # inheriting classes are supposed to override this + pass + + +class UknownRuleError(OSCAPaddonError): + """Exception class for cases when an uknown rule is to be processed.""" + + pass + + +class RuleData(RuleHandler): + """Class holding data parsed from the applied rules.""" + + def __init__(self): + """Constructor initializing attributes.""" + + self._part_rules = PartRules() + self._passwd_rules = PasswdRules() + self._package_rules = PackageRules() + self._bootloader_rules = BootloaderRules() + self._kdump_rules = KdumpRules() + self._firewall_rules = FirewallRules() + + self._rule_handlers = (self._part_rules, self._passwd_rules, + self._package_rules, self._bootloader_rules, + self._kdump_rules, self._firewall_rules, + ) + + def __str__(self): + """Standard method useful for debugging and testing.""" + + ret = "" + + part_strs = str(self._part_rules) + if part_strs: + ret += part_strs + + passwd_str = str(self._passwd_rules) + if passwd_str: + ret += "\n" + passwd_str + + packages_str = str(self._package_rules) + if packages_str: + ret += "\n" + packages_str + + firewall_str = str(self._firewall_rules) + if firewall_str: + ret += "\n" + firewall_str + + return ret + + def new_rule(self, rule): + """ + Method that handles a single rule line (e.g. "part /tmp"). + + :param rule: a single rule line + :type rule: str + + """ + + actions = {"part": self._new_part_rule, + "passwd": self._new_passwd_rule, + "package": self._new_package_rule, + "bootloader": self._new_bootloader_rule, + "kdump": self._new_kdump_rule, + "firewall": self._new_firewall_rule, + } + + rule = rule.strip() + if not rule: + return + + first_word = rule.split(None, 1)[0] + try: + actions[first_word](rule) + except (ModifiedOptionParserException, KeyError) as e: + log.warning("Unknown OSCAP Addon rule '{}': {}".format(rule, e)) + + def eval_rules(self, ksdata, storage, report_only=False): + """:see: RuleHandler.eval_rules""" + + messages = [] + + # evaluate all subgroups of rules + for rule_handler in self._rule_handlers: + messages += rule_handler.eval_rules(ksdata, storage, report_only) + + return messages + + def revert_changes(self, ksdata, storage): + """:see: RuleHandler.revert_changes""" + + # revert changes in all subgroups of rules + for rule_handler in self._rule_handlers: + rule_handler.revert_changes(ksdata, storage) + + def _new_part_rule(self, rule): + args = shlex.split(rule) + (opts, args) = PART_RULE_PARSER.parse_args(args) + + # args contain both "part" and mount point (e.g. "/tmp") + mount_point = args[1] + + self._part_rules.ensure_mount_point(mount_point) + + if opts.mount_options: + part_data = self._part_rules[mount_point] + part_data.add_mount_options(opts.mount_options) + + def _new_passwd_rule(self, rule): + args = shlex.split(rule) + (opts, args) = PASSWD_RULE_PARSER.parse_args(args) + + self._passwd_rules.update_minlen(opts.minlen) + + def _new_package_rule(self, rule): + args = shlex.split(rule) + (opts, args) = PACKAGE_RULE_PARSER.parse_args(args) + + self._package_rules.add_packages(opts.add_pkgs) + self._package_rules.remove_packages(opts.remove_pkgs) + + def _new_bootloader_rule(self, rule): + args = shlex.split(rule) + (opts, args) = BOOTLOADER_RULE_PARSER.parse_args(args) + + if opts.passwd: + self._bootloader_rules.require_password() + + def _new_kdump_rule(self, rule): + args = shlex.split(rule) + (opts, args) = KDUMP_RULE_PARSER.parse_args(args) + + self._kdump_rules.kdump_enabled(opts.kdenabled) + + def _new_firewall_rule(self, rule): + args = shlex.split(rule) + (opts, args) = FIREWALL_RULE_PARSER.parse_args(args) + + self._firewall_rules.add_services(opts.add_svcs) + self._firewall_rules.remove_services(opts.remove_svcs) + self._firewall_rules.add_trusts(opts.add_trust) + self._firewall_rules.add_ports(opts.add_port) + self._firewall_rules.firewall_enabled(opts.fwenabled) + + @property + def passwd_rules(self): + # needed for fixups in GUI + return self._passwd_rules + + +class PartRules(RuleHandler): + """Simple class holding data from the rules affecting partitioning.""" + + def __init__(self): + """Constructor initializing attributes.""" + + self._rules = dict() + + def __str__(self): + """Standard method useful for debugging and testing.""" + + return "\n".join(str(rule) for rule in self._rules.values()) + + def __getitem__(self, key): + """Method to support dictionary-like syntax.""" + + return self._rules[key] + + def __setitem__(self, key, value): + """Method to support dictionary-like syntax.""" + + self._rules[key] = value + + def __delitem__(self, key): + """One of the methods needed to implement a container.""" + + self._rules.__delitem__(key) + + def __len__(self): + """One of the methods needed to implement a container.""" + + return self._rules.__len__() + + def __contains__(self, key): + """Method needed for the 'in' operator to work.""" + + return key in self._rules + + def ensure_mount_point(self, mount_point): + if mount_point not in self._rules: + self._rules[mount_point] = PartRule(mount_point) + + def eval_rules(self, ksdata, storage, report_only=False): + """:see: RuleHandler.eval_rules""" + + messages = [] + for part_rule in self._rules.values(): + messages += part_rule.eval_rules(ksdata, storage, report_only) + + return messages + + def revert_changes(self, ksdata, storage): + """:see: RuleHandler.revert_changes""" + + for part_rule in self._rules.values(): + part_rule.revert_changes(ksdata, storage) + + +class PartRule(RuleHandler): + """Simple class holding rule data for a single partition/mount point.""" + + def __init__(self, mount_point): + """ + Constructor initializing attributes. + + :param mount_point: the mount point the object holds data for + :type mount_point: str + + """ + + self._mount_point = mount_point + self._mount_options = [] + self._added_mount_options = [] + + def __str__(self): + """Standard method useful for debugging and testing.""" + + ret = "part %s" % self._mount_point + if self._mount_options: + ret += " --mountoptions=%s" % ",".join(self._mount_options) + + return ret + + def add_mount_options(self, mount_options): + """ + Add new mount options (do not add duplicates). + + :param mount_options: list of mount options to be added + :type mount_options: list of strings + + """ + + self._mount_options.extend(opt for opt in mount_options + if opt not in self._mount_options) + + def eval_rules(self, ksdata, storage, report_only=False): + """:see: RuleHandler.eval_rules""" + device_tree = STORAGE.get_proxy(DEVICE_TREE) + mount_points = device_tree.GetMountPoints() + messages = [] + + if self._mount_point not in mount_points: + msg = _("{0} must be on a separate partition or logical " + "volume and has to be created in the " + "partitioning layout before installation can occur " + "with a security profile").format(self._mount_point) + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_FATAL, msg)) + + # mount point doesn't exist, nothing more can be found here + return messages + + # template for the message + msg_tmpl = _("mount option '%(mount_option)s' added for " + "the mount point %(mount_point)s") + + # add message for every option already added + for opt in self._added_mount_options: + msg = msg_tmpl % {"mount_option": opt, + "mount_point": self._mount_point} + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + + # mount point to be created during installation + target_name = mount_points[self._mount_point] + mount_options = device_tree.GetDeviceMountOptions(target_name) + + # generator for the new options that should be added + new_opts = (opt for opt in self._mount_options + if opt not in mount_options.split(",")) + + # add message for every mount option added + for opt in new_opts: + msg = msg_tmpl % {"mount_option": opt, + "mount_point": self._mount_point} + + # add message for the mount option in any case + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + + # add new options to the target mount point if not reporting only + if not report_only: + mount_options += ",%s" % opt + self._added_mount_options.append(opt) + + if new_opts and not report_only: + device_tree.SetDeviceMountOptions(target_name, mount_options) + + return messages + + def revert_changes(self, ksdata, storage): + """ + Removes the mount options added to the mount point by this PartRule + instance. + + :see: RuleHandler.revert_changes + + """ + device_tree = STORAGE.get_proxy(DEVICE_TREE) + mount_points = device_tree.GetMountPoints() + + if self._mount_point not in mount_points: + # mount point doesn't exist, nothing can be reverted + return + + # mount point to be created during installation + target_name = mount_points[self._mount_point] + + # mount options to be defined for the created mount point + mount_options = device_tree.GetDeviceMountOptions(target_name) + + # generator of the options that should remain + result_opts = (opt for opt in mount_options.split(",") + if opt not in self._added_mount_options) + + # set the new list of options + mount_options = ",".join(result_opts) + device_tree.SetDeviceMountOptions(target_name, mount_options) + + # reset the remembered added mount options + self._added_mount_options = [] + + +class PasswdRules(RuleHandler): + """Simple class holding data from the rules affecting passwords.""" + + def __init__(self): + """Constructor initializing attributes.""" + + self._minlen = 0 + self._created_policy = False + self._orig_minlen = None + self._orig_strict = None + + def __str__(self): + """Standard method useful for debugging and testing.""" + + if self._minlen > 0: + return "passwd --minlen=%d" % self._minlen + else: + return "" + + def update_minlen(self, minlen): + """Update password minimal length requirements.""" + + if minlen > self._minlen: + self._minlen = minlen + + def eval_rules(self, ksdata, storage, report_only=False): + """:see: RuleHandler.eval_rules""" + + if self._minlen == 0: + # no password restrictions, nothing to be done here + return [] + + ret = [] + + users_proxy = USERS.get_proxy() + + if not users_proxy.IsRootPasswordSet: + # root password was not set + + msg = _("make sure to create password with minimal length of %d " + "characters") % self._minlen + ret = [RuleMessage(self.__class__, + common.MESSAGE_TYPE_WARNING, msg)] + else: + # root password set + if users_proxy.IsRootPasswordCrypted: + msg = _("cannot check root password length (password is crypted)") + log.warning("cannot check root password length (password is crypted)") + return [RuleMessage(self.__class__, + common.MESSAGE_TYPE_WARNING, msg)] + elif len(users_proxy.RootPassword) < self._minlen: + # too short + msg = _("root password is too short, a longer one with at " + "least %d characters is required") % self._minlen + ret = [RuleMessage(self.__class__, + common.MESSAGE_TYPE_FATAL, msg)] + else: + ret = [] + + if report_only: + return ret + + # set the policy in any case (so that a weaker password is not entered) + pw_policy = ksdata.anaconda.pwpolicy.get_policy("root") + if pw_policy is None: + pw_policy = F22_PwPolicyData() + log.info("OSCAP addon: setting password policy %s" % pw_policy) + ksdata.anaconda.pwpolicy.policyList.append(pw_policy) + log.info("OSCAP addon: password policy list: %s" % ksdata.anaconda.pwpolicy.policyList) + self._created_policy = True + + self._orig_minlen = pw_policy.minlen + self._orig_strict = pw_policy.strict + pw_policy.minlen = self._minlen + pw_policy.strict = True + + return ret + + def revert_changes(self, ksdata, storage): + """:see: RuleHander.revert_changes""" + + pw_policy = ksdata.anaconda.pwpolicy.get_policy("root") + if self._created_policy: + log.info("OSCAP addon: removing password policy: %s" % pw_policy) + ksdata.anaconda.pwpolicy.policyList.remove(pw_policy) + log.info("OSCAP addon: password policy list: %s" % ksdata.anaconda.pwpolicy.policyList) + self._created_policy = False + else: + if self._orig_minlen is not None: + pw_policy.minlen = self._orig_minlen + self._orig_minlen = None + if self._orig_strict is not None: + pw_policy.strict = self._orig_strict + self._orig_strict = None + + +class PackageRules(RuleHandler): + """Simple class holding data from the rules affecting installed packages. + + """ + + def __init__(self): + """Constructor setting the initial value of attributes.""" + + self._add_pkgs = set() + self._remove_pkgs = set() + + self._added_pkgs = set() + self._removed_pkgs = set() + + def add_packages(self, packages): + """ + New packages that should be added. + + :param packages: packages to be added + :type packages: iterable + + """ + + if packages: + self._add_pkgs.update(packages) + + def remove_packages(self, packages): + """ + New packages that should be removed. + + :param packages: packages to be removed + :type packages: iterable + + """ + + if packages: + self._remove_pkgs.update(packages) + + def __str__(self): + """Standard method useful for debugging and testing.""" + + ret = "packages" + adds = " ".join("--add=%s" % package for package in self._add_pkgs) + if adds: + ret += " " + adds + + rems = " ".join("--remove=%s" % package + for package in self._remove_pkgs) + if rems: + ret += " " + rems + + return ret + + def eval_rules(self, ksdata, storage, report_only=False): + """:see: RuleHandler.eval_rules""" + + messages = [] + + # add messages for the already added packages + for pkg in self._added_pkgs: + msg = _("package '%s' has been added to the list of to be installed " + "packages" % pkg) + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + + # packages, that should be added + packages_to_add = (pkg for pkg in self._add_pkgs + if pkg not in ksdata.packages.packageList) + + for pkg in packages_to_add: + # add the package unless already added + if not report_only: + self._added_pkgs.add(pkg) + ksdata.packages.packageList.append(pkg) + + msg = _("package '%s' has been added to the list of to be installed " + "packages" % pkg) + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + + # now do the same for the packages that should be excluded + + # add messages for the already excluded packages + for pkg in self._removed_pkgs: + msg = _("package '%s' has been added to the list of excluded " + "packages" % pkg) + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + + # packages, that should be added + packages_to_remove = (pkg for pkg in self._remove_pkgs + if pkg not in ksdata.packages.excludedList) + + for pkg in packages_to_remove: + # exclude the package unless already excluded + if not report_only: + self._removed_pkgs.add(pkg) + ksdata.packages.excludedList.append(pkg) + + msg = _("package '%s' has been added to the list of excluded " + "packages" % pkg) + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + + return messages + + def revert_changes(self, ksdata, storage): + """:see: RuleHander.revert_changes""" + + # remove all packages this handler added + for pkg in self._added_pkgs: + if pkg in ksdata.packages.packageList: + ksdata.packages.packageList.remove(pkg) + + # remove all packages this handler excluded + for pkg in self._removed_pkgs: + if pkg in ksdata.packages.excludedList: + ksdata.packages.excludedList.remove(pkg) + + self._added_pkgs = set() + self._removed_pkgs = set() + + +class BootloaderRules(RuleHandler): + """Simple class holding data from the rules affecting bootloader.""" + + def __init__(self): + """Constructor setting the initial value of attributes.""" + + self._require_password = False + + def require_password(self): + """Requests the bootloader password should be required.""" + + self._require_password = True + + def __str__(self): + """Standard method useful for debugging and testing.""" + + ret = "bootloader" + + if self._require_password: + ret += " --passwd" + + return ret + + def eval_rules(self, ksdata, storage, report_only=False): + """:see: RuleHandler.eval_rules""" + + bootloader_proxy = STORAGE.get_proxy(BOOTLOADER) + + if self._require_password and not bootloader_proxy.IsPasswordSet: + # TODO: Anaconda provides a way to set bootloader password: + # bootloader_proxy.SetEncryptedPassword(...) + # We don't support setting the bootloader password yet, + # but we shouldn't stop the installation, just because of that. + return [RuleMessage(self.__class__, common.MESSAGE_TYPE_WARNING, + "boot loader password not set up")] + else: + return [] + + # nothing to be reverted for now + + +class KdumpRules(RuleHandler): + """Simple class holding data from the rules affecting the kdump addon.""" + + def __init__(self): + """Constructor setting the initial value of attributes.""" + + self._kdump_enabled = None + self._kdump_default_enabled = None + + def kdump_enabled(self, kdenabled): + """Enable or Disable Kdump""" + + if kdenabled is not None: + self._kdump_enabled = kdenabled + + def __str__(self): + """Standard method useful for debugging and testing.""" + + ret = "kdump" + + if self._kdump_enabled is True: + ret += " --enable" + + if self._kdump_enabled is False: + ret += " --disable" + + return ret + + def eval_rules(self, ksdata, storage, report_only=False): + """:see: RuleHandler.eval_rules""" + + messages = [] + + if self._kdump_enabled is None: + return [] + elif self._kdump_enabled is False: + msg = _("Kdump will be disabled on startup") + elif self._kdump_enabled is True: + msg = _("Kdump will be enabled on startup") + + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + + if not report_only: + try: + if self._kdump_default_enabled is None: + # Kdump addon default startup setting + self._kdump_default_enabled = ksdata.addons.com_redhat_kdump.enabled + ksdata.addons.com_redhat_kdump.enabled = self._kdump_enabled + except AttributeError: + log.warning("com_redhat_kdump is not installed. " + "Skipping kdump configuration") + + return messages + + def revert_changes(self, ksdata, storage): + """:see: RuleHander.revert_changes""" + + try: + if self._kdump_enabled is not None: + ksdata.addons.com_redhat_kdump.enabled = self._kdump_default_enabled + except AttributeError: + log.warning("com_redhat_kdump is not installed. " + "Skipping reverting kdump configuration") + + self._kdump_enabled = None + self._kdump_default_enabled = None + + +class FirewallRules(RuleHandler): + """Simple class holding data from the rules affecting firewall configurations.""" + + def __init__(self): + """Constructor setting the initial value of attributes.""" + + self._add_svcs = set() + self._remove_svcs = set() + self._add_trusts = set() + self._add_ports = set() + + self._added_svcs = set() + self._added_ports = set() + self._added_trusts = set() + self._removed_svcs = set() + + self._new_services_to_add = set() + self._new_ports_to_add = set() + self._new_trusts_to_add = set() + self._new_services_to_remove = set() + + self._firewall_enabled = None + self._firewall_default_state = None + + def add_services(self, services): + """ + Services that should be allowed through firewall. + + :param services: services to be added + :type services: iterable + + """ + + if services: + self._add_svcs.update(services) + + def add_ports(self, ports): + """ + Ports that should be allowed through firewall. + + :param ports: ports to be added + :type ports: iterable + + """ + + if ports: + self._add_ports.update(ports) + + def add_trusts(self, trusts): + """ + trusts that should be allowed through firewall. + + :param trusts: trusts to be added + :type trusts: iterable + + """ + + if trusts: + self._add_trusts.update(trusts) + + def remove_services(self, services): + """ + New services that should not be allowed through firewall. + + :param services: services to be removed + :type services: iterable + + """ + + if services: + self._remove_svcs.update(services) + + def firewall_enabled(self, fwenabled): + """Enable or disable firewall""" + + if fwenabled is not None: + self._firewall_enabled = fwenabled + + def __str__(self): + """Standard method useful for debugging and testing.""" + + ret = "firewall" + + if self._firewall_enabled is True: + ret += " --enable" + + if self._firewall_enabled is False: + ret += " --disable" + + adds = " ".join("--service=%s" % service + for service in self._add_svcs) + if adds: + ret += " " + adds + + rems = " ".join("--remove-service=%s" % service + for service in self._remove_svcs) + if rems: + ret += " " + rems + + ports = " ".join("--port=%s" % port + for port in self._add_ports) + if ports: + ret += " " + ports + + trusts = " ".join("--trust=%s" % trust + for trust in self._add_trusts) + if trusts: + ret += " " + trusts + + return ret + + def eval_rules(self, ksdata, storage, report_only=False): + """:see: RuleHandler.eval_rules""" + + firewall_proxy = NETWORK.get_proxy(FIREWALL) + messages = [] + + if self._firewall_default_state is None: + # firewall default startup setting + self._firewall_default_state = firewall_proxy.FirewallMode + + if self._firewall_enabled is False: + msg = _("Firewall will be disabled on startup") + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + if not report_only: + firewall_proxy.SetFirewallMode(FIREWALL_DISABLED) + + elif self._firewall_enabled is True: + msg = _("Firewall will be enabled on startup") + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + if not report_only: + firewall_proxy.SetFirewallMode(FIREWALL_ENABLED) + + # add messages for the already added services + for svc in self._added_svcs: + msg = _("service '%s' has been added to the list of services to be " + "added to the firewall" % svc) + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + + # add messages for the already added ports + for port in self._added_ports: + msg = _("port '%s' has been added to the list of ports to be " + "added to the firewall" % port) + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + + # add messages for the already added trusts + for trust in self._added_trusts: + msg = _("trust '%s' has been added to the list of trusts to be " + "added to the firewall" % trust) + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + + # services, that should be added + self._new_services_to_add = { + svc for svc in self._add_svcs + if svc not in firewall_proxy.EnabledServices} + + # ports, that should be added + self._new_ports_to_add = { + ports for ports in self._add_ports + if ports not in firewall_proxy.EnabledPorts} + + # trusts, that should be added + self._new_trusts_to_add = { + trust for trust in self._add_trusts + if trust not in firewall_proxy.Trusts} + + for svc in self._new_services_to_add: + # add the service unless already added + if not report_only: + self._added_svcs.add(svc) + + msg = _("service '%s' has been added to the list of services to be " + "added to the firewall" % svc) + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + if not report_only: + all_services = list(self._add_svcs.union(set(firewall_proxy.EnabledServices))) + firewall_proxy.SetEnabledServices(all_services) + + for port in self._new_ports_to_add: + # add the port unless already added + if not report_only: + self._added_ports.add(port) + + msg = _("port '%s' has been added to the list of ports to be " + "added to the firewall" % port) + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + if not report_only: + all_ports = list(self._add_ports.union(set(firewall_proxy.EnabledPorts))) + firewall_proxy.SetEnabledPorts(all_ports) + + for trust in self._new_trusts_to_add: + # add the trust unless already added + if not report_only: + self._added_trusts.add(trust) + + msg = _("trust '%s' has been added to the list of trusts to be " + "added to the firewall" % trust) + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + if not report_only: + all_trusts = list(self._add_trusts.union(set(firewall_proxy.Trusts))) + firewall_proxy.SetTrusts(all_trusts) + + # now do the same for the services that should be excluded + + # add messages for the already excluded services + for svc in self._removed_svcs: + msg = _("service '%s' has been added to the list of services to be " + "removed from the firewall" % svc) + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + + # services, that should be excluded + self._new_services_to_remove = { + svc for svc in self._remove_svcs + if svc not in firewall_proxy.DisabledServices} + + for svc in self._new_services_to_remove: + # exclude the service unless already excluded + if not report_only: + self._removed_svcs.add(svc) + + msg = _("service '%s' has been added to the list of services to be " + "removed from the firewall" % svc) + messages.append(RuleMessage(self.__class__, + common.MESSAGE_TYPE_INFO, msg)) + if not report_only: + all_services = list(self._remove_svcs.union(set(firewall_proxy.DisabledServices))) + firewall_proxy.SetDisabledServices(all_services) + + return messages + + def revert_changes(self, ksdata, storage): + """:see: RuleHander.revert_changes""" + firewall_proxy = NETWORK.get_proxy(FIREWALL) + + if self._firewall_enabled is not None: + firewall_proxy.SetFirewallMode(self._firewall_default_state) + + # remove all services this handler added + all_services = firewall_proxy.EnabledServices + orig_services = set(all_services).difference(self._new_services_to_add) + firewall_proxy.SetEnabledServices(list(orig_services)) + + # remove all ports this handler added + all_ports = firewall_proxy.EnabledPorts + orig_ports = set(all_ports).difference(self._new_ports_to_add) + firewall_proxy.SetEnabledPorts(list(orig_ports)) + + # remove all trusts this handler added + all_trusts = firewall_proxy.Trusts + orig_trusts = set(all_trusts).difference(self._new_trusts_to_add) + firewall_proxy.SetTrusts(list(orig_trusts)) + + # remove all services this handler excluded + all_services = firewall_proxy.DisabledServices + orig_services = set(all_services).difference(self._new_services_to_remove) + firewall_proxy.SetDisabledServices(list(orig_services)) + + self._added_svcs = set() + self._added_ports = set() + self._added_trusts = set() + self._removed_svcs = set() + self._firewall_enabled = None + self._firewall_default_state = None diff --git a/org_fedora_oscap/utils.py b/org_fedora_oscap/utils.py new file mode 100644 index 0000000..3be8325 --- /dev/null +++ b/org_fedora_oscap/utils.py @@ -0,0 +1,186 @@ +# +# Copyright (C) 2013 Red Hat, Inc. +# +# This copyrighted material is made available to anyone wishing to use, +# modify, copy, or redistribute it subject to the terms and conditions of +# the GNU General Public License v.2, or (at your option) any later version. +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY expressed or implied, including the implied warranties of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. You should have received a copy of the +# GNU General Public License along with this program; if not, write to the +# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the +# source code or documentation are not subject to the GNU General Public +# License and may only be used or replicated with the express permission of +# Red Hat, Inc. +# +# Red Hat Author(s): Vratislav Podzimek +# + +"""Module with various utility functions used by the addon.""" + +import os +import os.path +import shutil +import glob +import hashlib + + +def ensure_dir_exists(dirpath): + """ + Checks if a given directory exists and if not, it creates the directory as + well as all the nonexisting directories in its path. + + :param dirpath: path to the directory to be checked/created + :type dirpath: str + + """ + + if not dirpath: + # nothing can be done for an empty string + return + + if not os.path.isdir(dirpath): + os.makedirs(dirpath) + + +def universal_copy(src, dst): + """ + Function that copies the files or directories specified by the src argument + to the destination given by the dst argument. It should follow the same + rules as the standard 'cp' utility. + + :param src: source to copy -- may be a glob, file path or a directory path + :type src: str + :param dst: destination to copy to + :type src: str + + """ + + if glob.has_magic(src): + # src is a glob + sources = glob.glob(src) + else: + # not a glob + sources = [src] + + for item in sources: + if os.path.isdir(item): + if os.path.isdir(dst): + item = item.rstrip("/") + dirname = item.rsplit("/", 1)[-1] + shutil.copytree(item, join_paths(dst, dirname)) + else: + shutil.copytree(item, dst) + else: + shutil.copy2(item, dst) + + +def keep_type_map(func, iterable): + """ + Function that maps the given function to items in the given iterable + keeping the type of the iterable. + + :param func: function to be mapped on the items in the iterable + :type func: in_item -> out_item + :param iterable: iterable providing the items the function should be mapped + on + :type iterable: iterable + :return: iterable providing items produced by the function mapped on the + input items + :rtype: the same type as input iterable or generator if the iterable is not + of any basic Python types + + """ + + if isinstance(iterable, dict): + return dict((func(key), iterable[key]) for key in iterable) + + items_gen = (func(item) for item in iterable) + if isinstance(iterable, list): + return list(items_gen) + elif isinstance(iterable, tuple): + if iterable.__class__ is tuple: + return tuple(items_gen) + else: + return iterable.__class__(*items_gen) + elif isinstance(iterable, set): + return set(items_gen) + elif isinstance(iterable, str): + return "".join(items_gen) + else: + return items_gen + + +def join_paths(path1, path2): + """ + Joins two paths as one would expect -- i.e. just like the os.path.join + function except for doing crazy things when the second argument is an + absolute path. + + :param path1: first path + :type path1: str + :param path2: second path + :type path2: str + :return: path1 and path2 joined with the file separator + :rtype: str + + """ + + # os.path.normpath doesn't squash two starting slashes + path1.replace("//", "/") + + return os.path.normpath(path1 + os.path.sep + path2) + + +def get_hashing_algorithm(fingerprint): + """ + Get hashing algorithm for the given fingerprint or None if fingerprint of + unsupported length is given. + + :param fingerprint: hexa fingerprint to get the hashing algorithm for + :type fingerprint: hexadecimal str + :return: one of the hashlib.* hash objects + :rtype: hashlib.HASH object + + """ + + hashes = (hashlib.md5(), hashlib.sha1(), hashlib.sha224(), + hashlib.sha256(), hashlib.sha384(), hashlib.sha512()) + + if len(fingerprint) % 2 == 1: + return None + + num_bytes = len(fingerprint) / 2 + + for hash_obj in hashes: + # pylint: disable-msg=E1103 + if hash_obj.digest_size == num_bytes: + return hash_obj + + return None + + +def get_file_fingerprint(fpath, hash_obj): + """ + Get fingerprint of the given file with the given hashing algorithm. + + :param fpath: path to the file to get fingerprint for + :type fpath: str + :param hash_obj: hashing algorithm to get fingerprint with + :type hash_obj: hashlib.HASH + :return: fingerprint of the given file with the given algorithm + :rtype: hexadecimal str + + """ + + with open(fpath, "rb") as fobj: + bsize = 4 * 1024 + # process file as 4 KB blocks + buf = fobj.read(bsize) + while buf: + hash_obj.update(buf) + buf = fobj.read(bsize) + + return hash_obj.hexdigest() diff --git a/po/Makefile b/po/Makefile new file mode 100644 index 0000000..f0f25a4 --- /dev/null +++ b/po/Makefile @@ -0,0 +1,81 @@ +# +# taken from python-meh sources +# Makefile for the PO files (translation) catalog +# +# $Id$ + +TOP = ../.. + +# What is this package? +NLSPACKAGE = oscap-anaconda-addon +POTFILE = $(NLSPACKAGE).pot +INSTALL = /usr/bin/install -c +INSTALL_DATA = $(INSTALL) -m 644 +INSTALL_DIR = /usr/bin/install -d + +# destination directory +INSTALL_NLS_DIR = $(RPM_BUILD_ROOT)/usr/share/locale + +# PO catalog handling +MSGMERGE = msgmerge -v +XGETTEXT = xgettext --default-domain=$(NLSPACKAGE) \ + --add-comments +MSGFMT = msgfmt --statistics --verbose + +# What do we need to do +POFILES = $(wildcard *.po) +MOFILES = $(patsubst %.po,%.mo,$(POFILES)) +PYSRC = $(wildcard ../org_fedora_oscap/*.py ../org_fedora_oscap/*/*.py ../org_fedora_oscap/*/*/*.py) +GLADEFILES = $(wildcard ../org_fedora_oscap/*/*/*.glade) + +all:: update-po $(MOFILES) + +potfile: $(PYSRC) glade-po + $(XGETTEXT) -L Python --keyword=_ --keyword=N_ $(PYSRC) tmp/*.h + @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \ + rm -f $(NLSPACKAGE).po; \ + else \ + mv -f $(NLSPACKAGE).po $(POTFILE); \ + fi; \ + rm -rf tmp/ + +glade-po: $(GLADEFILES) + rm -rf tmp/ + @which intltool-extract > /dev/null 2>&1 || echo "You may not have the intltool-extract installed, don't be surprised if the operation fails." + for f in $(GLADEFILES); do \ + intltool-extract --type=gettext/glade -l $$f ;\ + done + +update-po: Makefile refresh-po + +refresh-po: Makefile + for cat in $(POFILES); do \ + lang=`basename $$cat .po`; \ + if $(MSGMERGE) $$lang.po $(POTFILE) > $$lang.pot ; then \ + mv -f $$lang.pot $$lang.po ; \ + echo "$(MSGMERGE) of $$lang succeeded" ; \ + else \ + echo "$(MSGMERGE) of $$lang failed" ; \ + rm -f $$lang.pot ; \ + fi \ + done + +clean: + @rm -fv *mo *~ .depend + @rm -rf tmp + +install: $(MOFILES) + @for n in $(MOFILES); do \ + l=`basename $$n .mo`; \ + $(INSTALL_DIR) $(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \ + $(INSTALL_DATA) --verbose $$n $(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/$(NLSPACKAGE).mo; \ + done + +uninstall: + rm -rfv $(INSTALL_NLS_DIR)/*/LC_MESSAGES/$(NLSPACKAGE).mo + +%.mo: %.po + $(MSGFMT) -o $@ $< + +.PHONY: missing depend + diff --git a/po/ca.mo b/po/ca.mo new file mode 100644 index 0000000..aad6c4f Binary files /dev/null and b/po/ca.mo differ diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..0f6f454 --- /dev/null +++ b/po/ca.po @@ -0,0 +1,293 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Robert Antoni Buj i Gelonch , 2015 +# Ding-Yi Chen , 2015. #zanata +# Robert Antoni Buj Gelonch , 2015. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2015-09-29 07:30+0000\n" +"Last-Translator: Robert Antoni Buj Gelonch \n" +"Language-Team: Catalan (http://www.transifex.com/projects/p/oscap-anaconda-addon/language/ca/)\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "" +"l'opció de muntatge '%(mount_option)s' va afegir-se al punt de muntatge " +"%(mount_point)s" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "" +"assegureu-vos de crear una contrasenya amb una mida mínima de %d caràcters" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "" +"no es pot comprovar la mida de la contrasenya de root (la contrasenya està " +"xifrada)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "el paquet «%s» s'ha afegit a la llista dels paquets instal·lats" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "el paquet «%s» s'ha afegit a la llista dels paquets exclosos" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "PERFIL DE _SEGURETAT" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "No està llest" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "S'estan obtenint les dades del contingut" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "No s'ha seleccionat cap perfil" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "Sense regles per a la fase de pre-instal·lació" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "" +"S'ha proporcionat un context no vàlid. Si us plau, introduïu un URL " +"diferent." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "" +"L'obtenció del contingut ha fallat. Si us plau, introduïu un URL diferent." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "" +"L'extracció del contingut ha fallat (%s). Si us plau, introduïu un URL " +"diferent." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "Sense aplicar la política de seguretat" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr "" +"A continuació introduïu el contingut del flux de dades o l'URL de l'arxiu:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "" +"No s'ha trobat cap contingut. Si us plau, a continuació introduïu el " +"contingut del flux de dades o l'URL de l'arxiu:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "No s'ha trobat cap contingut" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "S'ha detectat una configuració errònia" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "Advertències que van aparèixer" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "Tot està bé" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "L'URL no és vàlid o no està admès" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "S'està obtenint el contingut..." + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "POLÍTICA DE SEGURETAT" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "_Canvia el contingut" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "Aplica la política de seguretat:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "Flux de dades:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "Llista de comprovació:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "Trieu el perfil a sota:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "Perfil" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "Seleccionat" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "_Selecciona el perfil" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "Els canvis que es van fer o s'han de fer:" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "_Utilitza la guia de seguretat SCAP" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "_Obté" diff --git a/po/cs.mo b/po/cs.mo new file mode 100644 index 0000000..7915f96 Binary files /dev/null and b/po/cs.mo differ diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..9394bc9 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,293 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# vpodzime , 2014-2015 +# Zdenek , 2016. #zanata +# Daniel Rusek , 2018. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2018-10-23 10:58+0000\n" +"Last-Translator: Daniel Rusek \n" +"Language-Team: Czech (http://www.transifex.com/projects/p/oscap-anaconda-addon/language/cs/)\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" +"{0} musí být na samostatném diskovém nebo logickém oddílu a musí být " +"vytvořen v rozdělení oddílů předtím, než bude moci být zahájena instalace s " +"bezpečnostním profilem" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "parametr '%(mount_option)s' přidán pro přípojný bod %(mount_point)s" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "ujistěte se, že heslo bude mít minimální délku %d znaků" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "nelze zkontrolovat délku hesla uživatele root (heslo je šifrováno)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "" +"heslo uživatele root je příliš krátké, je vyžadováno delší heslo s nejméně " +"%d znaky" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "balík '%s' byl přidán do seznamu instalovaných balíků" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "balík '%s' byl přidán do seznamu vyloučených balíků" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "Kdump bude při spuštění zakázán" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "Kdump bude při spuštění povolen" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "Firewall bude při spuštění zakázán" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "Firewall bude při spuštění povolen" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "služba '%s' byla přidána na seznam služeb k přidání do firewallu" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "port '%s' byl přidán na seznam portů k přidání do firewallu" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "důvěra '%s' byla přidána na seznam důvěr k přidání do firewallu" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "služba '%s' byla přidána na seznam služeb k odebrání z firewallu" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Při získávání a načítání bezpečnostních dat došlo k chybě:\n" +"%s\n" +"Instalace by měla být přerušena. Chcete i přesto pokračovat?" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Test integrity bezpečnostních dat neprošel.\n" +"Instalace by měla být přerušena. Chcete i přesto pokračovat?" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "_POLITIKA ZABEZPEČENÍ" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "Není připraven" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "Načítají se data" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "Není vybrán žádný profil" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "Žádná pravidla pro předinstalační fázi" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "Nevalidní data. Zadejte jiné URL, prosím." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "Nevalidní nebo nepodporované datové URL, zadejte prosím jiné." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "Načítání dat selhalo. Zadejte jiné URL, prosím." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "" +"Během získávání dat se vyskytla chyba sítě. Zkontrolujte prosím, že je síť " +"nastavena a funkční." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "Test integrity dat neprošel. Nelze použít tato data." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "Rozbalování dat selhalo (%s). Zadejte jiné URL, prosím." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "Profil s ID '%s' není definován v datech. Vyberte prosím jiný profil" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "Neaplikovat bezpečnostní politiku" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr "nebo zadejte URL data streamu, případně archivu:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "" +"Nenalezen žádný zdroj dat. Prosím uveďte URL k data streamu nebo archivu:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "Chyba při získávání a načítání dat" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "Žádná data k dispozici" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "Detekována nesprávná konfigurace" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "Varování" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "Vše v pořádku" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "Nevalidní nebo nepodporované URL" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "Načítám data..." + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "POLITIKA ZABEZPEČENÍ" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "_Jiná data" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "Aplikovat bezpečnostní politiku:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "Data stream:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "Checklist:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "Vyberte profil:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "Profil" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "Vybrán" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "_Vybrat profil" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "Změny, které byly nebo musejí být provedeny:" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "_Použít SCAP Security Guide" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "_Načíst" diff --git a/po/de.mo b/po/de.mo new file mode 100644 index 0000000..83022e7 Binary files /dev/null and b/po/de.mo differ diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..ebaeecf --- /dev/null +++ b/po/de.po @@ -0,0 +1,311 @@ +# Ludek Janda , 2018. #zanata +# Ludek Janda , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2019-02-12 02:14+0000\n" +"Last-Translator: Ludek Janda \n" +"Language-Team: German\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" +"{0} muss sich auf einer separaten Partition oder einem logischen Volume " +"befinden und muss im Partitionslayout erstellt werden, bevor die " +"Installation mit einem Sicherheitsprofil erfolgen kann" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "" +"Einhängeoption '%(mount_option)s'hinzugefügt für den Einhängepunkt " +"%(mount_point)s" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "" +"Stellen Sie sicher, dass Sie ein Kennwort mit einer Mindestlänge von " +"erstellen %d Zeichen" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "" +"Länge des Root-Passworts kann nicht geprüft werden (Passwort wird " +"verschlüsselt)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "" +"Das root-Passwort ist zu kurz, ein längeres mit mindestens %d Zeichen sind " +"erforderlich" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "Paket \"%s'wurde der Liste der zu installierenden Pakete hinzugefügt" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "Paket \"%s'wurde der Liste der ausgeschlossenen Pakete hinzugefügt" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "Kdump wird beim Start deaktiviert" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "Kdump wird beim Start aktiviert" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "Die Firewall wird beim Start deaktiviert" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "Die Firewall wird beim Start aktiviert" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "" +"Bedienung '%s'wurde der Liste der Dienste hinzugefügt, die zur Firewall " +"hinzugefügt werden sollen" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "" +"Hafen '%s'wurde der Liste der Ports hinzugefügt, die der Firewall " +"hinzugefügt werden sollen" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "" +"vertrauen '%s'wurde der Liste der Vertrauensstellungen hinzugefügt, die der " +"Firewall hinzugefügt werden sollen" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "" +"Bedienung '%s'wurde der Liste der Dienste hinzugefügt, die aus der Firewall " +"entfernt werden sollen" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Beim Abrufen und Laden des Sicherheitsinhalts ist ein Fehler " +"aufgetreten:%sDie Installation sollte abgebrochen werden. Möchten Sie " +"trotzdem fortfahren?" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Die Integritätsprüfung des Sicherheitsinhalts ist fehlgeschlagen. Die " +"Installation sollte abgebrochen werden. Möchten Sie trotzdem fortfahren?" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "_SICHERHEITSPOLITIK" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "Nicht bereit" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "Inhaltsdaten abrufen" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "Kein Profil ausgewählt" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "Keine Regeln für die Vorinstallationsphase" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "Ungültiger Inhalt bereitgestellt Bitte geben Sie eine andere URL ein." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "" +"Ungültige oder nicht unterstützte Inhalts-URL. Bitte geben Sie eine andere " +"URL ein." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "" +"Inhalt konnte nicht abgerufen werden. Bitte geben Sie eine andere URL ein." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "" +"Beim Abrufen von Daten ist ein Netzwerkfehler aufgetreten. Bitte überprüfen " +"Sie, ob das Netzwerk eingerichtet ist und funktioniert." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "" +"Die Integritätsprüfung des Inhalts ist fehlgeschlagen. Der Inhalt kann nicht" +" verwendet werden." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "" +"Inhalt konnte nicht extrahiert werden (%s). Bitte geben Sie eine andere URL " +"ein." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "" +"Profil mit ID '%s'im Inhalt nicht definiert. Bitte wählen Sie ein anderes " +"Profil" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "Keine Sicherheitsrichtlinie anwenden" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr " oder geben Sie den Datenstrominhalt oder die Archiv-URL unten ein:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "" +"Kein Inhalt gefunden Bitte geben Sie den Datenstrom-Inhalt oder die Archiv-" +"URL unten ein:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "Fehler beim Abrufen und Laden von Inhalten" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "Kein Inhalt gefunden" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "Fehlkonfiguration erkannt" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "Warnungen erschienen" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "Alles okay" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "Ungültige oder nicht unterstützte URL" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "Inhalt wird abgerufen ..." + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "SICHERHEITSPOLITIK" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "_Ändern Sie den Inhalt" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "Sicherheitsrichtlinie anwenden:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "Datenstrom:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "Checkliste:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "Wählen Sie unten ein Profil:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "Profil" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "Ausgewählt" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "_Wähle Profil" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "Änderungen, die vorgenommen wurden oder durchgeführt werden müssen:" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "_Verwenden Sie das SCAP-Sicherheitshandbuch" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "_Fetch" diff --git a/po/es.mo b/po/es.mo new file mode 100644 index 0000000..a45da06 Binary files /dev/null and b/po/es.mo differ diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..ae83690 --- /dev/null +++ b/po/es.po @@ -0,0 +1,316 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Gerardo Rosales , 2014 +# Máximo Castañeda Riloba , 2016. #zanata +# Ludek Janda , 2018. #zanata +# Ludek Janda , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2019-02-12 02:16+0000\n" +"Last-Translator: Ludek Janda \n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/oscap-anaconda-addon/language/es/)\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" +"{0} debe estar en una partición separada o en un volumen lógico y debe " +"crearse en el diseño de particiones antes de que se inicie la instalación " +"con un perfil de seguridad" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "" +"opciones de montaje '%(mount_option)s' añadidas para el punto de montaje " +"%(mount_point)s" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "" +"Asegúrese de crear una contraseña con una longitud mínima de %d caracteres" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "" +"no se puede comprobar la longitud de la contraseña raíz(la contraseña está " +"encriptada)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "" +"la contraseña de root es demasiado corta, se exige una más larga con al " +"menos %d caracteres" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "paquete '%s' se ha añadido a la lista de paquetes a instalar" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "paquete '%s' se ha añadido a la lista de paquetes excluidos" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "Se desactivará Kdump al inicio" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "Se activará Kdump al inicio" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "Se desactivará el cortafuegos al inicio" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "Se activará el cortafuegos al inicio" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "" +"el servicio '%s' se ha añadido a la lista de servicios a añadir al " +"cortafuegos" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "" +"el puerto '%s' se ha añadido a la lista de puertos a añadir al cortafuegos" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "" +"confiar%s'se ha agregado a la lista de fideicomisos que se agregarán al " +"firewall" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "" +"el servicio '%s' se ha añadido a la lista de servicios a quitar del " +"cortafuegos" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Se produjo un error al obtener y cargar el contenido de seguridad:\n" +"%s\n" +"Debería pararse la instalación. ¿Quiere continuar de todas formas?" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Falló la comprobación de integridad del contenido de seguridad.\n" +"Debería pararse la instalación. ¿Quiere continuar de todas formas?" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "_POLÍTICA DE SEGURIDAD" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "No está listo" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "Obteniendo datos de contenido" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "Ningún perfil seleccionado" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "Ninguna regla para la fase de pre-instalación" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "" +"Contenido proporcionado inválido. Ingrese una URL diferente, por favor." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "" +"La URL del contenido no es válida o no está admitida, por favor introduzca " +"una nueva." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "" +"Falló la obtención de contenido. Ingrese una URL diferente, por favor." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "" +"Se produjo un error de red al obtener los datos. Compruebe que la red está " +"configurada y en funcionamiento." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "" +"Falló la comprobación de la integridad del contenido. No se puede usar el " +"mismo." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "" +"Fallo al extraer el contenido(%s). Ingrese una URL diferente, por favor." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "" +"El perfil con ID '%s' no está definido en el contenido. Elija uno diferente." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "No se aplica política de seguridad" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr "" +"o ingrese el contenido de flujo de datos o archivo URL a continuación:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "" +"No se encontró contenido. Por favor ingrese un contenido de flujo de datos o" +" un archivo a continuación:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "Error al obtener y cargar el contenido" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "No se encontró contenido" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "Configuración errónea detectada" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "Advertencias aparecieron" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "Todo está bien" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "URL no soportada o es inválida" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "Obteniendo contenido..." + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "POLÍTICA DE SEGURIDAD" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "_Cambiando contenido" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "Aplicando política de seguridad:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "Flujo de datos:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "Lista de comprobación:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "Elija un perfil a continuación:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "Perfil" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "Seleccionado" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "_Seleccionar perfil" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "Cambios que fueron o serán hechos:" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "_Usar Guía de seguridad SCAP" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "_Obtener" diff --git a/po/fr.mo b/po/fr.mo new file mode 100644 index 0000000..0469260 Binary files /dev/null and b/po/fr.mo differ diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..e0ff39d --- /dev/null +++ b/po/fr.po @@ -0,0 +1,314 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# dominique bribanick , 2014 +# Jérôme Fenal , 2014 +# Jean-Baptiste Holcroft , 2016. #zanata +# Ludek Janda , 2018. #zanata +# Ludek Janda , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2019-02-12 02:08+0000\n" +"Last-Translator: Ludek Janda \n" +"Language-Team: French (http://www.transifex.com/projects/p/oscap-anaconda-addon/language/fr/)\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" +"{0} doit être sur une partition ou un volume logique séparé et doit être " +"créé dans la structure de partitionnement avant que l'installation puisse " +"avoir lieu avec un profil de sécurité." + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "" +"option de montage « %(mount_option)s » ajoutée au point de montage " +"%(mount_point)s" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "" +"assurez-vous de créer un mot de passe d'une longueur minimale de %d " +"caractères" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "" +"impossible de vérifier la longueur du mot de passe de root (mot de passe " +"chiffré)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "" +"le mot de passe de root est trop court, une longueur d'au moins %d " +"caractères est requise" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "le paquet « %s » a été ajouté à la liste des paquets à installer" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "le paquet « %s » a été ajouté à la liste des paquets à exclure" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "Kdump va être désactivé au démarrage" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "Kdump va être activé au démarrage" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "Le pare-feu va être désactivé au démarrage" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "Le pare-feu va être activé au démarrage" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "" +"service « %s » a été ajouté à la liste des paquets à ajouter au pare-feu" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "port « %s » a été ajouté à la liste des paquets à ajouter au pare-feu" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "" +"trust « %s » a été ajouté à la liste des paquets à ajouter au pare-feu" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "" +"service « %s » a été ajouté à la liste des paquets à retirer du pare-feu" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Il y a eu une erreur lors de l'extraction et du chargement du contenu de sécurité :\n" +"%s\n" +"L'installation doit être interrompue. Souhaitez-vous continuer quand même ?" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Le contrôle d'intégrité du contenu de sécurité a échoué.\n" +"L'installation doit être interrompue. Souhaitez-vous continuer quand même ?" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "_POLITIQUE DE SÉCURITÉ" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "Pas prêt" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "Récupération des données de contenu" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "Aucun profil sélectionné" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "Aucune règle pour la phase de pré-installation" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "Contenu fourni invalide. Merci de saisir une URL différente." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "" +"URL de contenu non prise en charge ou non valide, veuillez saisir une URL " +"différente." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "" +"Échec de la récupération du contenu. Merci de saisir une URL différente." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "" +"Erreur de réseau lors de l'extraction des données. Veuillez vérifier que le " +"réseau ait été installé et fonctionne correctement." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "" +"Le contrôle d'intégrité du contenu a échoué. Impossible d'utiliser le " +"contenu." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "" +"Impossible d'extraire le contenu (%s). Merci de saisir une URL différente." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "" +"Le profil ayant pour ID « %s »n'est pas défini dans le contenu. Sélectionner" +" un autre profil, s'il vous plaît." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "N'applique pas la politique de sécurité" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr "" +"ou saisir un flux de données de contenu ou l'URL d'une archive ci-dessous :" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "" +"Contenu introuvable. Merci de saisir un flux de données de contenu ou l'URL " +"d'une archive ci-dessous :" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "Erreur d'extraction et de chargement du contenu" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "Contenu introuvable" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "Mauvaise configuration détectée" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "Des avertissements sont apparus" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "Tout est OK" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "URL invalide ou non prise en charge" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "Récupération du contenu..." + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "POLITIQUE DE SÉCURITÉ" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "_Modifier le contenu" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "Application des politiques de sécurité :" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "Flux de données :" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "Liste de vérifications :" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "Choisir le profil ci-dessous :" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "Profil" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "Sélectionné" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "_Sélectionner le profil" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "Modifications réalisées ou à faire :" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "_Utiliser le guide de sécurité SCAP" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "_Récupérer" diff --git a/po/hu.mo b/po/hu.mo new file mode 100644 index 0000000..0e444dd Binary files /dev/null and b/po/hu.mo differ diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 0000000..255e4fa --- /dev/null +++ b/po/hu.po @@ -0,0 +1,283 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Zoltan Hoppár , 2014 +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2015-04-02 03:06+0000\n" +"Last-Translator: Copied by Zanata \n" +"Language-Team: Hungarian (http://www.transifex.com/projects/p/oscap-anaconda-addon/language/hu/)\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "" +"a '%(mount_option)s' csatolási opció hozzáadásra került ehhez: " +"%(mount_point)s" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "bizonyosodjon meg arról, hogy %d karakter hosszúságú jelszót ad meg" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "root jelszó hosszúsága nem ellenőrzhető (jelszó titkosított)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "'%s' csomag hozzáadásra került a telepítendő csomagok listájához" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "'%s' csomag hozzáadásra került az eltávolítandó csomagok listájához" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "Nincs még kész" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "Adatok letöltése" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "Nincs profil kiválasztva" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "Nincsenek szabályok felállítva az előkészítési fázishoz" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "" +"Helytelen tartalom került megadásra. Kérem, adjon meg egy másik URL-t." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "Tartalom letöltése sikertelen. Kérem, adjon meg másik URL-t." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "Tartalom kibontása sikertelen (%s). Kérem, adjon meg másik URL-t." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr "vagy adjon meg adathalmazt, vagy archiv URL-t alább:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "" +"Tartalom nem található. Kérem adjon meg egy adathalmazt, vagy archív URL-t " +"alább:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "Tartalom nem található" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "Helytelen beállítások észlelve" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "Figyelmeztetések jelentek meg" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "Minden rendben" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "Rossz vagy nem támogatott URL" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "Tartalom letöltése..." + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "Tartalom megváltoztatása" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "Biztonsági szabályzat alkalmazása:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "Adathalmaz:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "Ellenőrző lista:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "Válasszon egy profilt alább:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "Profil" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "Kiválasztva" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "Vála_sszon egy profilt" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "Változtatások amiket meg kell tenni vagy elkészültek:" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "SCAP Biztonsági könyv előírásainak használata" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "Letöltés" diff --git a/po/it.mo b/po/it.mo new file mode 100644 index 0000000..927b895 Binary files /dev/null and b/po/it.mo differ diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..0eaa699 --- /dev/null +++ b/po/it.po @@ -0,0 +1,308 @@ +# Ludek Janda , 2018. #zanata +# Ludek Janda , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2019-02-12 02:17+0000\n" +"Last-Translator: Ludek Janda \n" +"Language-Team: \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" +"{0} deve essere su una partizione separata o su un volume logico e deve " +"essere creato nel layout di partizionamento prima che l'installazione possa " +"avvenire con un profilo di sicurezza" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "" +"opzione di montaggio%(mount_option)s'aggiunto per il punto di mount " +"%(mount_point)s" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "" +"assicurati di creare una password con una lunghezza minima di %d personaggi" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "" +"impossibile controllare la lunghezza della password di root (la password è " +"criptata)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "" +"la password di root è troppo breve, più lunga con almeno %d i caratteri sono" +" obbligatori" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "pacchetto '%s'è stato aggiunto all'elenco dei pacchetti da installare" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "pacchetto '%s'è stato aggiunto all'elenco dei pacchetti esclusi" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "Kdump sarà disabilitato all'avvio" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "Kdump sarà abilitato all'avvio" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "Il firewall sarà disabilitato all'avvio" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "Il firewall sarà abilitato all'avvio" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "" +"servizio '%s'è stato aggiunto all'elenco dei servizi da aggiungere al " +"firewall" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "" +"porto%s'è stato aggiunto all'elenco delle porte da aggiungere al firewall" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "" +"fiducia '%s'è stato aggiunto all'elenco dei trust da aggiungere al firewall" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "" +"servizio '%s'è stato aggiunto all'elenco dei servizi da rimuovere dal " +"firewall" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Si è verificato un errore durante il recupero e il caricamento del contenuto" +" di sicurezza:%sL'installazione dovrebbe essere interrotta. Vuoi continuare " +"comunque?" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Il controllo di integrità del contenuto di sicurezza non è riuscito. " +"L'installazione dovrebbe essere interrotta. Vuoi continuare comunque?" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "_POLITICA DI SICUREZZA" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "Non pronto" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "Recupero dei dati di contenuto" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "Nessun profilo selezionato" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "Nessuna regola per la fase di pre-installazione" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "Contenuto non valido fornito. Inserisci un URL diverso, per favore." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "URL di contenuto non valido o non supportato, inserisci uno diverso." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "" +"Impossibile recuperare il contenuto. Inserisci un URL diverso, per favore." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "" +"Errore di rete rilevato durante il recupero dei dati. Si prega di verificare" +" che la rete sia configurata e funzionante." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "" +"Il controllo di integrità del contenuto non è riuscito. Non posso usare il " +"contenuto." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "" +"Impossibile estrarre il contenuto (%s). Inserisci un URL diverso, per " +"favore." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "" +"Profilo con ID '%s'non definito nel contenuto. Seleziona un profilo diverso," +" per favore" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "Non applicare la politica di sicurezza" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr "" +" oppure inserisci il contenuto del flusso di dati o l'URL di archivio di " +"seguito:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "" +"Nessun contenuto trovato. Inserisci il contenuto del flusso di dati o l'URL " +"di archiviazione di seguito:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "Errore durante il recupero e il caricamento del contenuto" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "Nessun contenuto trovato" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "Rilevata errata configurazione" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "Sono apparsi avvertimenti" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "Tutto ok" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "URL non valido o non supportato" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "Recupero del contenuto ..." + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "POLITICA DI SICUREZZA" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "_Cambia i contenuti" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "Applica la politica di sicurezza:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "Flusso di dati:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "Elenco di controllo:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "Scegli il profilo qui sotto:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "Profilo" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "Selezionato" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "_Seleziona profilo" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "Modifiche che sono state fatte o devono essere fatte:" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "_Usare Guida alla sicurezza di SCAP" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "_Ottenere" diff --git a/po/ja.mo b/po/ja.mo new file mode 100644 index 0000000..3c21442 Binary files /dev/null and b/po/ja.mo differ diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..cd28cc3 --- /dev/null +++ b/po/ja.po @@ -0,0 +1,282 @@ +# Ooyama Yosiyuki , 2015. #zanata +# Ludek Janda , 2018. #zanata +# Ludek Janda , 2020. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2020-03-10 01:40+0000\n" +"Last-Translator: Ludek Janda \n" +"Language-Team: Japanese\n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" +"{0} " +"は、別のパーティションもしくは論理ボリューム上になければなりません。また、セキュリティープロファイルがインストールされる前にパーティションレイアウトに作成されなければなりません" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "マウントオプション '%(mount_option)s' が、マウントポイント %(mount_point)s に追加されました" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "%d 文字以上のパスワードを作成してください。" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "root パスワードの長さを確認できません (パスワードは暗号化済み)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "root のパスワードが短すぎます。%d 文字以上にする必要があります。" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "パッケージ '%s' が、インストール予定パッケージ一覧に追加されました" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "パッケージ '%s' が、除外パッケージ一覧に追加されました" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "Kdump は起動時に無効になります" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "Kdump は起動時に有効になります" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "ファイアウォールは起動時に無効になります" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "ファイアウォールは起動時に有効になります" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "サービス '%s' が、ファイアウォールに追加予定のサービス一覧に追加されました" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "ポート '%s' が、ファイアウォールに追加予定のポート一覧に追加されました" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "トラスト '%s' が、ファイアウォールに追加予定のトラスト一覧に追加されました" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "サービス '%s' が、ファイアウォールから削除予定のサービス一覧に追加されました" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"セキュリティーコンテンツの取得時およびロード時にエラーが発生しました。\n" +"%s\n" +"インストールを停止する必要があります。それでも続行しますか?" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"セキュリティーコンテンツの整合性チェックに失敗しました。\n" +"インストールを停止する必要があります。それでも続行しますか?" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "セキュリティーポリシー(_S)" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "準備ができていません" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "コンテンツデータの取得中" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "選択されたプロファイルはありません" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "プレインストールフェーズのルールがありません" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "無効なコンテンツが入力されました。別の URL を入力してください。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "コンテンツ URL が無効またはサポートされていません。別の URL を入力していません。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "コンテンツの取得に失敗しました。別の URL を入力してください。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "データの取得時にネットワークエラーが発生しました。ネットワークが設定されており、動作していることを確認してください。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "コンテンツの整合性チェックに失敗しました。コンテンツを使用できません。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "コンテンツ (%s) の抽出に失敗しました。別の URL を入力してください。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "コンテンツで ID が '%s' のプロファイルが定義されていません。別のプロファイルを選択してください。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "セキュリティーポリシーを適用しない" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr "または、以下にデータストリームコンテンツもしくはアーカイブの URL を入力します。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "コンテンツが見つかりませんでした。以下にデータストリームコンテンツもしくはアーカイブの URL を入力してください。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "コンテンツの取得およびロードのエラー" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "コンテンツが見つかりませんでした" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "設定ミスが検出されました" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "警告が表示されました" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "すべて OK" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "無効またはサポートされていない URL" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "コンテンツの取得中..." + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "セキュリティーポリシー" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "コンテンツの変更(_C)" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "セキュリティーポリシーの適用:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "データストリーム:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "チェックリスト:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "以下のプロファイルを選択:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "プロファイル" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "選択済み" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "プロファイルを選択(_S)" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "完了済みの変更または必要な変更" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "SCAP セキュリティーガイドを使用する(_U)" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "取得(_F)" diff --git a/po/ko.mo b/po/ko.mo new file mode 100644 index 0000000..fc406f1 Binary files /dev/null and b/po/ko.mo differ diff --git a/po/ko.po b/po/ko.po new file mode 100644 index 0000000..44635f8 --- /dev/null +++ b/po/ko.po @@ -0,0 +1,280 @@ +# Ludek Janda , 2018. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2018-09-20 03:07+0000\n" +"Last-Translator: Copied by Zanata \n" +"Language-Team: Korean\n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "{0}은/는 별도의 파티션이나 논리 볼륨이 있어야 하며 보안 프로파일이 설치되기 전에 파티션 레이아웃을 만들어야 합니다. " + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "마운트 지점 %(mount_point)s의 마운트 옵션 '%(mount_option)s'이/가 추가되었습니다. " + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "최소 %d자 이상으로 암호를 만들어야 합니다 " + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "root 암호 길이를 확인할 수 없습니다 (암호가 암호화됨)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "root 암호가 너무 짧습니다. 최소 %d자 이어야 합니다." + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "패키지 '%s'이/가 설치할 패키지 목록에 추가되었습니다. " + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "패키지 '%s'이/가 제외된 패키지 목록에 추가되었습니다. " + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "시작시 Kdump가 비활성화됩니다. " + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "시작시 Kdump가 활성화됩니다. " + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "시작시 방화벽이 비활성화됩니다. " + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "시작시 방화벽이 활성화됩니다. " + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "서비스 '%s'이/가 방화벽에 추가할 서비스 목록에 추가되었습니다. " + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "포트 '%s'이/가 방화벽에 추가할 포트 목록에 추가되었습니다. " + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "트러스트 '%s'이/가 방화벽에 추가할 트러스트 목록에 추가되었습니다. " + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "서비스 '%s'이/가 방화벽에서 제거할 서비스 목록에 추가되었습니다. " + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"보안 컨텐츠 가져오기 및 로딩 중 오류가 발생했습니다.:\n" +"%s\n" +"설치를 중단해야 합니다. 계속 진행하시겠습니까?" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"보안 컨텐츠에 대한 무결성 검사에 실패했습니다.\n" +"설치를 중단해야 합니다. 계속 진행하시겠습니까?" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "보안 정책(_S):" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "준비되어 있지 않습니다 " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "컨텐츠 데이터를 가져오는 중 " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "프로파일이 선택되지 않았습니다 " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "사전 설치 단계의 규칙이 없습니다 " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "잘못된 내용이 입력되었습니다. 다른 URL을 입력하십시오. " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "유효하지 않거나 지원되지 않는 컨텐츠 URL입니다. 다른 URL을 입력하십시오. " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "컨텐츠를 가져오지 못했습니다. 다른 URL을 입력하십시오. " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "컨텐츠를 가져오는 중 네트워크 오류가 발생했습니다. 네트워크가 제대로 작동하는지 확인하십시오. " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "컨텐츠 무결성 검사에 실패했습니다. 컨텐츠를 사용할 수 없습니다. " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "컨텐츠 (%s)을/를 가져오지 못했습니다. 다른 URL을 입력하십시오. " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "ID '%s'이/가 프로파일에 정의되어 있지 않습니다. 다른 프로파일을 선택하십시오. " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "보안 정책을 적용하지 않음 " + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr "데이터 스트림 컨텐츠를 입력하거나 다음 URL을 아카이브하십시오." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "내용이 없습니다. 데이터 스트림 컨텐츠를 입력하거나 또는 다음 URL을 아카이브하십시오." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "컨텐츠 오류 가져오기 및 로딩 오류 " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "컨텐츠를 찾을 수 없음 " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "설정 오류가 감지되었습니다 " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "경고가 표시되었습니다 " + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "모든 것이 정상입니다" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "유효하지 않거나 지원되지 않는 URL" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "컨텐츠 가져오는 중..." + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "보안 정책 " + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "컨텐츠 변경(_C)" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "보안 정책 적용:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "데이터 스트림:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "검사 목록:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "프로파일 선택: " + +# auto translated by TM merge from project: RHOSP Director Installation and +# Usage , version: 11-Korean, DocId: master +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "프로파일" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "선택됨 " + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "프로파일 선택(_S)" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "완료된 변경사항 또는 필요한 변경사항:" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "SCAP 보안 가이드 사용(_U)" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "가져오기(_F)" diff --git a/po/oscap-anaconda-addon.pot b/po/oscap-anaconda-addon.pot new file mode 100644 index 0000000..f7eef2b --- /dev/null +++ b/po/oscap-anaconda-addon.pot @@ -0,0 +1,276 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-02 14:00+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_Security Policy" +msgstr "" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:223 +msgid "Not ready" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:371 +msgid "Fetching content data" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:638 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1053 +msgid "No profile selected" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:643 +msgid "No rules for the pre-installation phase" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:795 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:803 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:811 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:819 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:828 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:836 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:854 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile, " +"please" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:870 +msgid "Not applying security policy" +msgstr "" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:901 +msgid " or enter data stream content or archive URL below:" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:905 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1043 +msgid "Error fetching and loading content" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1050 +msgid "No content found" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1061 +msgid "Misconfiguration detected" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Warnings appeared" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1069 +msgid "Everything okay" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1145 +msgid "Invalid or unsupported URL" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1151 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "" + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "" diff --git a/po/pl.mo b/po/pl.mo new file mode 100644 index 0000000..bda8434 Binary files /dev/null and b/po/pl.mo differ diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..dd2d695 --- /dev/null +++ b/po/pl.po @@ -0,0 +1,314 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Bartosz Sapijaszko , 2002 +# dcantrel , 2011 +# Dimitris Glezos , 2011 +# Dimitris Glezos , 2011 +# Jacek Smyda , 1998 +# Leszek Matok , 2004 +# Pawel Szopinski , 2004 +# Piotr Drąg , 2014 +# Radosław Zawartko , 2004 +# sonyam , 2004 +# Stanisław Małolepszy , 2006 +# Tom Berner , 2005 +# Tom Berner , 2004 +# Wojciech Kapusta , 2006 +# Piotr Drąg , 2015. #zanata +# Piotr Drąg , 2016. #zanata +# Piotr Drąg , 2018. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2018-07-03 02:59+0000\n" +"Last-Translator: Piotr Drąg \n" +"Language-Team: Polish (http://www.transifex.com/projects/p/oscap-anaconda-addon/language/pl/)\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" +"{0} musi być na oddzielnej partycji lub woluminie logicznym i musi być " +"utworzone w układzie partycjonowania, zanim można przeprowadzić instalację " +"za pomocą profilu bezpieczeństwa" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "" +"dodano opcję montowania „%(mount_option)s” dla punktu montowania " +"%(mount_point)s" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "proszę się upewnić, że tworzone hasło ma co najmniej %d znaków" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "nie można sprawdzić długości hasła roota (hasło jest zaszyfrowane)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "" +"hasło roota jest za krótkie, wymagane jest dłuższe z co najmniej %d znakami" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "dodano pakiet „%s” do listy pakietów do zainstalowania" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "dodano pakiet „%s” do listy wykluczonych pakietów" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "Kdump będzie wyłączone podczas uruchamiania" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "Kdump będzie włączone podczas uruchamiania" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "Zapora sieciowa będzie wyłączona podczas uruchamiania" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "Zapora sieciowa będzie włączona podczas uruchamiania" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "dodano usługę „%s” do listy usług do dodania do zapory sieciowej" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "dodano port „%s” do listy portów do dodania do zapory sieciowej" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "dodano zaufanie „%s” do listy zaufań do dodania do zapory sieciowej" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "dodano usługę „%s” do listy usług do usunięcia z zapory sieciowej" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Wystąpił błąd podczas pobierania i wczytywania treści bezpieczeństwa:\n" +"%s\n" +"Instalacja powinna zostać przerwana. Kontynuować mimo to?" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Sprawdzenie spójności treści bezpieczeństwa się nie powiodło.\n" +"Instalacja powinna zostać przerwana. Kontynuować mimo to?" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "_POLITYKA BEZPIECZEŃSTWA" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "Niegotowe" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "Pobieranie danych treści" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "Nie wybrano profilu" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "Brak reguł dla fazy przedinstalacyjnej" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "Podano nieprawidłową treść. Proszę podać inny adres URL." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "" +"Nieprawidłowy lub nieobsługiwany adres URL treści, proszę wybrać inny." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "Pobranie treści się nie powiodło. Proszę podać inny adres URL." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "" +"Wystąpił błąd sieci podczas pobierania danych. Proszę sprawdzić, czy sieć " +"została ustawiona i działa poprawnie." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "" +"Sprawdzenie integralności treści się nie powiodło. Nie można użyć treści." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "Wydobycie treści się nie powiodło (%s). Proszę podać inny adres URL." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "" +"W treści nie określono profilu o identyfikatorze „%s”. Proszę wybrać inny " +"profil" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "Bez zastosowywania polityki bezpieczeństwa" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr "" +" albo podać treść strumienia danych lub podać adres URL archiwum poniżej:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "" +"Nie odnaleziono treści. Proszę podać treść strumienia danych lub adres URL " +"archiwum poniżej:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "Błąd podczas pobierania i wczytywania treści" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "Nie odnaleziono treści" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "Wykryto błędną konfigurację" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "Pojawiły się ostrzeżenia" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "Wszystko jest w porządku" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "Nieprawidłowy lub nieobsługiwany adres URL" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "Pobieranie treści…" + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "POLITYKA BEZPIECZEŃSTWA" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "_Zmień treść" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "Zastosowanie polityki bezpieczeństwa:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "Strumień danych:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "Lista do sprawdzenia:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "Proszę wybrać profil poniżej:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "Profil" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "Wybrane" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "_Wybierz profil" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "Wprowadzone zmiany i zmiany, które muszą zostać wprowadzone:" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "_Użycie przewodnika bezpieczeństwa SCAP" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "_Pobierz" diff --git a/po/pt.mo b/po/pt.mo new file mode 100644 index 0000000..4122aa8 Binary files /dev/null and b/po/pt.mo differ diff --git a/po/pt.po b/po/pt.po new file mode 100644 index 0000000..d397d36 --- /dev/null +++ b/po/pt.po @@ -0,0 +1,278 @@ +# Manuela Silva , 2015. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2015-09-13 10:49+0000\n" +"Last-Translator: Manuela Silva \n" +"Language-Team: Portuguese\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "" +"opção de montagem '%(mount_option)s' adicionada ao ponto de montagem " +"%(mount_point)s" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "" +"certifique-se que cria a senha com o comprimento mínimo de %d carateres" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "" +"não é possível verificar o comprimento da senha \"root\" (a senha está " +"encriptada)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "POLÍTICA DE _SEGURANÇA" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "Obter dados de conteúdo" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "Nenhum perfil selecionado" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "Nenhum conteúdo encontrado" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "Detetada má configuração" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "Está tudo bem" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "URL inválido ou não suportado" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "O obter o conteúdo..." + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "POLÍTICA DE SEGURANÇA" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "_Alterar conteúdo" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "Aplicar política de segurança:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "Escolha o perfil abaixo:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "Perfil" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "Selecionado" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "_Selecionar perfil" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "Alterações que foram concluídas ou precisam de ser concluídas" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "_Utilize o Guia de Segurança SCAP" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "_Obter" diff --git a/po/pt_BR.mo b/po/pt_BR.mo new file mode 100644 index 0000000..2b6b8f1 Binary files /dev/null and b/po/pt_BR.mo differ diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..663f06e --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,312 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Marcelo Barbosa , 2014 +# Marco Aurélio Krause , 2015. #zanata +# Ludek Janda , 2018. #zanata +# Ludek Janda , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2019-02-12 02:12+0000\n" +"Last-Translator: Ludek Janda \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/oscap-anaconda-addon/language/pt_BR/)\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" +"{0} deve estar em uma partição separada ou em um volume lógico e deve ser " +"criado no layout de particionamento antes que a instalação possa ocorrer com" +" um perfil de segurança" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "" +"opção de montagem '%(mount_option)s' adicionado para o ponto de montagem " +"%(mount_point)s" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "" +"certifique-se de criar uma senha com comprimento mínimo de %d caracteres" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "" +"Não é possível verificar o comprimento da senha do root (senha " +"criptografada)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "" +"A senha root é muito curta, uma mais longa com pelo menos %d caracteres são " +"obrigatórios" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "pacote '%s' foi adicionado à lista de pacotes a serem instalados" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "pacote '%s' foi adicionado a lista de pacotes a serem excluídos" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "O Kdump será desativado na inicialização" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "O Kdump será ativado na inicialização" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "Firewall será desativado na inicialização" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "Firewall será ativado na inicialização" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "" +"serviço '%s'foi adicionado à lista de serviços a serem adicionados ao " +"firewall" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "" +"port '%s'foi adicionado à lista de portas a serem adicionadas ao firewall" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "" +"Confiar em '%s'foi adicionado à lista de relações de confiança a serem " +"adicionadas ao firewall" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "" +"serviço '%s'foi adicionado à lista de serviços a serem removidos do firewall" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Ocorreu um erro ao buscar e carregar o conteúdo de segurança:\n" +"%s\n" +"A instalação deve ser interrompida. Deseja continuar assim mesmo?" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"A verificação de integridade do conteúdo de segurança falhou.\n" +"A instalação deve ser interrompida. Deseja continuar assim mesmo?" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "_POLÍTICA DE SEGURANÇA" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "Ainda não esta pronto" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "Buscando dados de conteúdo" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "Nenhum perfil selecionado" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "Não há regras para a fase de pré-instalação" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "Conteúdo fornecido é inválido. Digite uma URL diferente, por favor." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "" +"URL do conteúdo inválido ou não suportado, entre com um outro diferente." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "Falha ao buscar conteúdo. Digite uma URL diferente, por favor." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "" +"Foi encontrado um erro na rede ao buscar dados. Verifique se a rede está " +"configurada e funcionando." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "" +"A verificação de integridade do conteúdo falhou. Não é possível usar o " +"conteúdo." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "" +"Falha ao extrair o conteúdo (%s). Digite uma URL diferente, por favor." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "" +"Perfil com ID '%s' não definido no conteúdo. Selecione um perfil diferente, " +"por favor" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "Não aplicar a política de segurança" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr "ou inserir conteúdo de fluxo de dados ou arquivo de URL abaixo:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "" +"Nenhum conteúdo encontrado. Por favor entre com conteúdo de fluxo de dados " +"ou arquivo de URL abaixo:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "Erro ao buscar e carregar o conteúdo" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "Nenhum conteúdo encontrado" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "Misconfiguration detectado" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "Advertências surgidas" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "Tudo bem" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "URL inválida ou não suportada" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "Buscando conteúdo..." + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "POLÍTICA DE SEGURANÇA" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "_Mudar conteúdo" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "Aplicar política de segurança:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "Fluxo de dados:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "Checklist:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "Escolha o perfil abaixo:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "Perfil" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "Selecionado" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "_Selecione o perfil" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "As alterações que foram feitas ou precisam ser feitas:" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "_Use SCAP Segurança Guia" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "Buscar(_F)" diff --git a/po/ru.mo b/po/ru.mo new file mode 100644 index 0000000..ffc997f Binary files /dev/null and b/po/ru.mo differ diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..034c5ad --- /dev/null +++ b/po/ru.po @@ -0,0 +1,300 @@ +# Ludek Janda , 2018. #zanata +# Ludek Janda , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2019-02-12 02:17+0000\n" +"Last-Translator: Ludek Janda \n" +"Language-Team: \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" +"{0} должен быть на отдельном разделе или логическом томе и должен быть " +"создан в макете разбиения до того, как установка может произойти с профилем " +"безопасности" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "" +"mount option '%(mount_option)s'добавлен для точки монтирования " +"%(mount_point)s" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "не забудьте создать пароль с минимальной длиной %d персонажи" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "не удается проверить длину пароля root (пароль зашифрован)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "" +"пароль root слишком короткий, более длинный с по крайней мере %d требуется " +"персонаж" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "пакет '%s'добавлен в список установленных пакетов" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "пакет '%s'добавлен в список исключенных пакетов" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "Kdump будет отключен при запуске" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "Kdump будет включен при запуске" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "Брандмауэр будет отключен при запуске" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "Брандмауэр будет включен при запуске" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "" +"оказание услуг '%s'добавлен в список служб, которые будут добавлены в " +"брандмауэр" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "" +"порт '%s'добавлен в список портов, которые будут добавлены в брандмауэр" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "" +"доверие \"%s'добавлен в список доверенностей, которые будут добавлены в " +"брандмауэр" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "" +"оказание услуг '%s'добавлен в список служб, которые необходимо удалить из " +"брандмауэра" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Ошибка получения и загрузки содержимого безопасности:%sУстановка должна быть" +" прервана. Вы все равно хотите продолжить?" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Не удалось проверить целостность содержимого безопасности. Установка должна " +"быть прервана. Вы все равно хотите продолжить?" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "_ПОЛИТИКА БЕЗОПАСНОСТИ" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "Не готов" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "Получение данных контента" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "Не выбран профиль" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "Нет правил для этапа предварительной установки" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "Недопустимый контент. Введите другой URL-адрес, пожалуйста." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "Неверный или неподдерживаемый URL-адрес контента, введите другой." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "Не удалось получить контент. Введите другой URL-адрес, пожалуйста." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "" +"Ошибка сети при сборе данных. Убедитесь, что сеть настроена и работает." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "" +"Не удалось проверить целостность содержимого. Невозможно использовать " +"контент." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "" +"Не удалось извлечь контент (%s). Введите другой URL-адрес, пожалуйста." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "" +"Профиль с идентификатором '%s'не определено в контенте. Выберите другой " +"профиль, пожалуйста" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "Не применять политику безопасности" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr " или введите содержимое потока данных или URL-адрес архива ниже:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "" +"Контент не найден. Введите содержимое потока данных или URL-адрес архива " +"ниже:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "Ошибка получения и загрузки содержимого" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "Не найдено ни одного контента" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "Обнаружено несоответствие" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "Появились предупреждения" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "Все в порядке" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "Недействительный или неподдерживаемый URL" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "Получение контента ..." + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "ПОЛИТИКА БЕЗОПАСНОСТИ" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "_Изменить контент" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "Применение политики безопасности:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "Поток данных:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "Контрольный список:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "Выберите профиль ниже:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "Профиль" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "выбранный" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "_Выбрать профиль" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "Изменения, которые были сделаны или должны быть выполнены:" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "_Используйте руководство по безопасности SCAP" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "_Получить" diff --git a/po/sr.mo b/po/sr.mo new file mode 100644 index 0000000..23ce3d8 Binary files /dev/null and b/po/sr.mo differ diff --git a/po/sr.po b/po/sr.po new file mode 100644 index 0000000..b2d1c03 --- /dev/null +++ b/po/sr.po @@ -0,0 +1,283 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Momcilo Medic , 2014 +# Momcilo Medic , 2015. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2015-04-18 01:39+0000\n" +"Last-Translator: Momcilo Medic \n" +"Language-Team: Serbian (http://www.transifex.com/projects/p/oscap-anaconda-addon/language/sr/)\n" +"Language: sr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "" +"прикључна опција '%(mount_option)s' додата за прикључну тачку " +"%(mount_point)s" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "изаберите шифру од најмање %d карактера" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "немогуће проверити дужину root шифре (шифра је криптована)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "пакет '%s' је додат на листу пакета за инсталацију" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "пакет '%s' је додат на листу искључених пакета" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "_БЕЗБЕДНОСНИ МОДЕЛ" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "Није спремно" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "Преузимање података о садржају" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "Није изабран профил" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "Нема правила за пред-инсталациону фазу" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "Неисправан садржај пружен. Унесите други URL, молим." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "Неуспешно преузимање садржаја. Унесите други URL, молим." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "Неуспешно извлачење садржаја (%s). Унесите други URL, молим." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "Не примењујем полису безбедности" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr "или унесите садржајни или архивски URL за stream података испод:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "" +"Садржај није пронађен. Молим унесите садржајни или архивски URL за stream " +"података:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "Садржај није пронађен" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "Погрешно подешавање откривено" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "Упозорења су се појавила" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "Све је у реду" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "Неисправан или неподржан URL" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "Преузимање садржаја..." + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "БЕЗБЕДНОСНИ МОДЕЛ" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "_Промена садржаја" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "Примени сигурносну политику:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "Stream података:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "Листа:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "Изаберите профил:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "Профил" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "Изабрано" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "_Изаберите профил" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "Промене које су урађене или требају да се ураде:" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "_Користи SCAP сигурносни водич" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "_Преузми" diff --git a/po/uk.mo b/po/uk.mo new file mode 100644 index 0000000..18b4145 Binary files /dev/null and b/po/uk.mo differ diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 0000000..b81e463 --- /dev/null +++ b/po/uk.po @@ -0,0 +1,297 @@ +# Yuri Chornoivan , 2015. +# Yuri Chornoivan , 2018. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2018-07-02 03:40+0000\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "" +"{0} має бути окремим розділом або логічним томом, його має бути створено у " +"компонуванні розділів до того, як стане можливим встановлення із профілем " +"захисту" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "" +"для точки монтування %(mount_point)s додано параметр монтування " +"«%(mount_option)s»" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "довжина пароля має бути не меншою за %d символів" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "не вдалося перевірити довжину пароля root (пароль зашифровано)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "" +"пароль root є надто коротким, потрібен довший, принаймні із %d символів" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "до списку встановлюваних пакунків додано пакунок «%s»" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "до списку виключених пакунків додано пакунок «%s»" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "Kdump буде вимкнено при запуску" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "Kdump буде увімкнено при запуску" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "Брандмауер буде вимкнено при запуску" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "Брандмауер буде увімкнено при запуску" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "" +"службу «%s» було додано до списку служб, які слід додати до брандмауера" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "" +"порт «%s» було додано до списку портів, які слід додати до брандмауера" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "" +"запис довіри «%s» було додано до списку записів довіри, які слід додати до " +"брандмауера" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "" +"службу «%s» було додано до списку служб, які слід вилучити з брандмауера" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Під час отримання та завантаження даних захисту сталася помилка:\n" +"%s\n" +"Встановлення слід перервати. Хочете продовжити його попри це?" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"Дані захисту не пройшли перевірку на цілісність.\n" +"Встановлення слід перервати. Хочете продовжити його попри це?" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "П_РАВИЛА ЗАХИСТУ" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "Неготовий" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "Отримуємо дані" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "Не вибрано жодного профілю" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "Правил для кроку перед встановленням немає" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "Надано некоректні дані. Будь ласка, вкажіть іншу адресу." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "" +"Некоректна або непідтримувана адреса даних. Будь ласка, введіть якусь іншу." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "Не вдалося отримати дані. Будь ласка, вкажіть іншу адресу." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "" +"Під час спроби отримання даних сталася помилка, пов’язана із мережею. Будь " +"ласка, перевірте, чи правильно налаштовано з’єднання, та чи є воно " +"працездатним." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "Дані не пройшли перевірку на цілісність. Їхнє використання неможливе." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "Не вдалося видобути дані (%s). Будь ласка, вкажіть іншу адресу." + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "" +"Профіль з ідентифікатором «%s» у даних не визначено. Виберіть, будь ласка, " +"інший профіль" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "Не застосовуємо правил захисту" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr " або вкажіть адресу потоку даних чи архіву:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "" +"Даних не знайдено. Будь ласка, вкажіть адресу потоку даних або архіву:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "Помилка під час спроби отримання та завантаження даних" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "Даних не знайдено" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "Виявлено помилки у налаштуваннях" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "Отримано попередження" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "Все гаразд" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "Некоректна або непідтримувана адреса" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "Отримуємо дані…" + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "ПРАВИЛА ЗАХИСТУ" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "З_міна даних" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "Застосувати правило захисту:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "Потік даних:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "Список для перевірки:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "Виберіть профіль:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "Профіль" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "Позначене" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "_Вибрати профіль" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "Зміни, які внесено або має бути внесено:" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "Ви_користати настанови із захисту SCAP" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "_Отримати" diff --git a/po/zh_CN.mo b/po/zh_CN.mo new file mode 100644 index 0000000..5528588 Binary files /dev/null and b/po/zh_CN.mo differ diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..c9b341b --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,278 @@ +# Ludek Janda , 2018. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2018-11-21 11:52+0000\n" +"Last-Translator: Copied by Zanata \n" +"Language-Team: Chinese (Simplified)\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "{0} 必须在一个独立的分区或逻辑卷上,并需要在带有安全档案的安装进行前,在分区布局中创建" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "为挂载点 %(mount_point)s 添加的挂载选项 '%(mount_option)s'" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "确保创建的密码长度最少为 %d 个字符" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "无法检查 root 密码的长度(密码已加密)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "root 密码太短,它需要最少包括 %d 个字符" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "软件包 '%s' 已被添加到要被安装的软件包列表中" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "软件包 '%s' 已被添加到排除的软件包列表中" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "Kdump 将在启动时被禁用" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "Kdump 将在启动时被启用" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "防火墙将在启动时被禁用" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "防火墙将在启动时被启用" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "服务 '%s' 已被添加到要加到防火墙的服务列表中" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "端口 '%s' 已被添加到要加到防火墙的端口列表中" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "信任 '%s' 已被添加到要加到防火墙的信任列表中" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "服务 '%s' 已被添加到要从防火墙删除的服务列表中" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"在获取和加载安全内容时出错:\n" +"%s\n" +"安装应该被终止。您希望继续吗?" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "" +"对安全内容的完整性检查失败。\n" +"安装应该被终止。您希望继续吗?" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "安全策略(_S):" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "未就绪" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "获取内容数据" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "没有选择 profile" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "没有预安装阶段的规则" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "提供无效的内容。请输入一个不同的 URL。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "无效或不支持的内容 URL,请输入一个不同的 URL。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "获取内容失败。请输入一个不同的 URL。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "在获取数据时出现网络错误。请检查网络是否正常。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "内容的完整性检查失败。不能使用这个内容。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "提取内容 (%s) 失败。请输入一个不同的 URL。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "ID 为 '%s' 的档案没有在内容中定义。请选择一个不同的档案" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "没有应用安全策略" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr "或输入数据流内容或归档 URL:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "没有找到内容。请输入数据流或归档 URL:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "获取并加载内容错误" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "没有找到内容" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "发现错误配置" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "出现的警告" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "一切正常" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "无效或不支持的 URL" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "获取内容..." + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "安全策略" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "修改内容(_C)" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "应用安全策略:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "数据流:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "检查列表:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "选择档案:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "档案" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "选择" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "选择档案(_S)" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "已完成或需要完成的改变" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "使用 SCAP 安全指南(_U)" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "获取(_F)" diff --git a/po/zh_TW.mo b/po/zh_TW.mo new file mode 100644 index 0000000..5e64d67 Binary files /dev/null and b/po/zh_TW.mo differ diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..bae381c --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,274 @@ +# Ludek Janda , 2018. #zanata +# Ludek Janda , 2019. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 14:12+0200\n" +"PO-Revision-Date: 2019-01-15 11:26+0000\n" +"Last-Translator: Copied by Zanata \n" +"Language-Team: \n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Zanata 4.6.2\n" + +#: ../org_fedora_oscap/rule_handling.py:400 +#, python-brace-format +msgid "" +"{0} must be on a separate partition or logical volume and has to be created " +"in the partitioning layout before installation can occur with a security " +"profile" +msgstr "{0} 必須位於單獨的分區或邏輯卷上,並且必須在分區佈局中創建,然後才能使用安全配置文件進行安裝" + +#. template for the message +#: ../org_fedora_oscap/rule_handling.py:411 +#, python-format +msgid "" +"mount option '%(mount_option)s' added for the mount point %(mount_point)s" +msgstr "掛載選項'%(mount_option)s'為掛載點添加了 %(mount_point)s" + +#. root password was not set +#: ../org_fedora_oscap/rule_handling.py:520 +#, python-format +msgid "make sure to create password with minimal length of %d characters" +msgstr "確保以最小的長度創建密碼 %d 人物" + +#: ../org_fedora_oscap/rule_handling.py:527 +msgid "cannot check root password length (password is crypted)" +msgstr "無法檢查root密碼長度(密碼被加密)" + +#. too short +#: ../org_fedora_oscap/rule_handling.py:533 +#, python-format +msgid "" +"root password is too short, a longer one with at least %d characters is " +"required" +msgstr "root密碼太短,至少有一個 %d 字符是必需的" + +#: ../org_fedora_oscap/rule_handling.py:637 +#: ../org_fedora_oscap/rule_handling.py:652 +#, python-format +msgid "package '%s' has been added to the list of to be installed packages" +msgstr "包'%s'已添加到要安裝的軟件包列表中" + +#: ../org_fedora_oscap/rule_handling.py:661 +#: ../org_fedora_oscap/rule_handling.py:676 +#, python-format +msgid "package '%s' has been added to the list of excluded packages" +msgstr "包'%s'已添加到已排除的包列表中" + +#: ../org_fedora_oscap/rule_handling.py:777 +msgid "Kdump will be disabled on startup" +msgstr "Kdump將在啟動時被禁用" + +#: ../org_fedora_oscap/rule_handling.py:779 +msgid "Kdump will be enabled on startup" +msgstr "Kdump將在啟動時啟用" + +#: ../org_fedora_oscap/rule_handling.py:932 +msgid "Firewall will be disabled on startup" +msgstr "防火牆將在啟動時禁用" + +#: ../org_fedora_oscap/rule_handling.py:939 +msgid "Firewall will be enabled on startup" +msgstr "防火牆將在啟動時啟用" + +#: ../org_fedora_oscap/rule_handling.py:947 +#: ../org_fedora_oscap/rule_handling.py:986 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be added to the " +"firewall" +msgstr "服務'%s'已添加到要添加到防火牆的服務列表中" + +#: ../org_fedora_oscap/rule_handling.py:954 +#: ../org_fedora_oscap/rule_handling.py:999 +#, python-format +msgid "" +"port '%s' has been added to the list of ports to be added to the firewall" +msgstr "港口 '%s'已被添加到要添加到防火牆的端口列表中" + +#: ../org_fedora_oscap/rule_handling.py:961 +#: ../org_fedora_oscap/rule_handling.py:1012 +#, python-format +msgid "" +"trust '%s' has been added to the list of trusts to be added to the firewall" +msgstr "信任'%s'已被添加到要添加到防火牆的信任列表中" + +#: ../org_fedora_oscap/rule_handling.py:1024 +#: ../org_fedora_oscap/rule_handling.py:1039 +#, python-format +msgid "" +"service '%s' has been added to the list of services to be removed from the " +"firewall" +msgstr "服務'%s'已被添加到要從防火牆中刪除的服務列表中" + +#: ../org_fedora_oscap/ks/oscap.py:418 +#, python-format +msgid "" +"There was an error fetching and loading the security content:\n" +"%s\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "獲取和加載安全內容時出錯:%s安裝應該中止。你想繼續嗎?" + +#: ../org_fedora_oscap/ks/oscap.py:447 +msgid "" +"The integrity check of the security content failed.\n" +"The installation should be aborted. Do you wish to continue anyway?" +msgstr "安全內容的完整性檢查失敗。安裝應該中止。你想繼續嗎?" + +#. title of the spoke (will be displayed on the hub) +#: ../org_fedora_oscap/gui/spokes/oscap.py:198 +msgid "_SECURITY POLICY" +msgstr "安全政策(_S)" + +#. the first status provided +#: ../org_fedora_oscap/gui/spokes/oscap.py:221 +msgid "Not ready" +msgstr "沒有準備好" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:369 +msgid "Fetching content data" +msgstr "獲取內容數據" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:636 +#: ../org_fedora_oscap/gui/spokes/oscap.py:1051 +msgid "No profile selected" +msgstr "沒有選擇個人資料" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:641 +msgid "No rules for the pre-installation phase" +msgstr "沒有預安裝階段的規則" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:793 +msgid "Invalid content provided. Enter a different URL, please." +msgstr "提供的內容無效。請輸入其他網址。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:801 +msgid "Invalid or unsupported content URL, please enter a different one." +msgstr "無效或不受支持的內容網址,請輸入其他網址。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:809 +msgid "Failed to fetch content. Enter a different URL, please." +msgstr "無法獲取內容。請輸入其他網址。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:817 +msgid "" +"Network error encountered when fetching data. Please check that network is " +"setup and working." +msgstr "獲取數據時遇到網絡錯誤。請檢查網絡是否已設置並正常運行。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:826 +msgid "The integrity check of the content failed. Cannot use the content." +msgstr "內容的完整性檢查失敗。無法使用內容。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:834 +#, python-format +msgid "Failed to extract content (%s). Enter a different URL, please." +msgstr "無法提取內容(%s)。請輸入其他網址。" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:852 +#, python-format +msgid "" +"Profile with ID '%s' not defined in the content. Select a different profile," +" please" +msgstr "帶ID的個人資料'%s'沒有在內容中定義。請選擇其他個人資料" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:868 +msgid "Not applying security policy" +msgstr "不應用安全策略" + +#. TRANSLATORS: the other choice if SCAP Security Guide is also +#. available +#: ../org_fedora_oscap/gui/spokes/oscap.py:899 +msgid " or enter data stream content or archive URL below:" +msgstr " 或輸入以下數據流內容或存檔URL:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:903 +msgid "" +"No content found. Please enter data stream content or archive URL below:" +msgstr "找不到任何內容。請在下面輸入數據流內容或存檔URL:" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1041 +msgid "Error fetching and loading content" +msgstr "獲取和加載內容時出錯" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1048 +msgid "No content found" +msgstr "找不到任何內容" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1059 +msgid "Misconfiguration detected" +msgstr "檢測到配置錯誤" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1065 +msgid "Warnings appeared" +msgstr "警告出現了" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1067 +msgid "Everything okay" +msgstr "一切都好" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1143 +msgid "Invalid or unsupported URL" +msgstr "網址無效或不受支持" + +#: ../org_fedora_oscap/gui/spokes/oscap.py:1149 tmp/oscap.glade.h:14 +msgid "Fetching content..." +msgstr "獲取內容......" + +#: tmp/oscap.glade.h:1 +msgid "SECURITY POLICY" +msgstr "安全政策" + +#: tmp/oscap.glade.h:2 +msgid "_Change content" +msgstr "改變內容(_C)" + +#: tmp/oscap.glade.h:3 +msgid "Apply security policy:" +msgstr "應用安全策略:" + +#: tmp/oscap.glade.h:4 +msgid "Data stream:" +msgstr "數據流:" + +#: tmp/oscap.glade.h:5 +msgid "Checklist:" +msgstr "清單:" + +#: tmp/oscap.glade.h:6 +msgid "Choose profile below:" +msgstr "選擇以下資料:" + +#: tmp/oscap.glade.h:7 +msgid "Profile" +msgstr "輪廓" + +#: tmp/oscap.glade.h:8 +msgid "Selected" +msgstr "選" + +#: tmp/oscap.glade.h:9 +msgid "_Select profile" +msgstr "選擇個人資料(_S)" + +#: tmp/oscap.glade.h:10 +msgid "Changes that were done or need to be done:" +msgstr "已完成或需要完成的更改:" + +#: tmp/oscap.glade.h:11 +msgid "_Use SCAP Security Guide" +msgstr "_使用SCAP安全指南(_U)" + +#: tmp/oscap.glade.h:12 +msgid "" +"No content found. Please enter data stream content or archive URI below:" +msgstr "" + +#: tmp/oscap.glade.h:13 +msgid "_Fetch" +msgstr "取(_F)" diff --git a/testing_files/check.sh b/testing_files/check.sh new file mode 100755 index 0000000..311bf0e --- /dev/null +++ b/testing_files/check.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +if [ -f /root/must_exist.txt ]; then + exit 0 +else + exit 1 +fi diff --git a/testing_files/run_oscap_test.sh b/testing_files/run_oscap_test.sh new file mode 100755 index 0000000..8f3720d --- /dev/null +++ b/testing_files/run_oscap_test.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +#oscap xccdf eval --profile xccdf_com.example_profile_my_profile --remediate --results=testing_results2.xml testing_ds.xml + +oscap xccdf eval --datastream-id=scap_org.open-scap_datastream_tst --xccdf-id=scap_org.open-scap_cref_first-xccdf.xml --profile xccdf_com.example_profile_my_profile --remediate --results=testing_results.xml testing_ds.xml diff --git a/testing_files/scap-mycheck-oval.xml b/testing_files/scap-mycheck-oval.xml new file mode 100644 index 0000000..d32db9d --- /dev/null +++ b/testing_files/scap-mycheck-oval.xml @@ -0,0 +1,33 @@ + + + + vim, emacs + 5.5 + 2010-08-30T12:00:00-04:00 + + + + + Ensure that /root/must_exist.txt file exists. + + + Testing check. + + + + + + + + + + + + + + + ^/root$ + must_exist.txt + + + diff --git a/testing_files/scap-security-guide.noarch.rpm b/testing_files/scap-security-guide.noarch.rpm new file mode 100644 index 0000000..7ee3a5e Binary files /dev/null and b/testing_files/scap-security-guide.noarch.rpm differ diff --git a/testing_files/ssg-fedora-ds-tailoring-1-1.noarch.rpm b/testing_files/ssg-fedora-ds-tailoring-1-1.noarch.rpm new file mode 100644 index 0000000..ac1f416 Binary files /dev/null and b/testing_files/ssg-fedora-ds-tailoring-1-1.noarch.rpm differ diff --git a/testing_files/tailoring.xml b/testing_files/tailoring.xml new file mode 100644 index 0000000..0ca2313 --- /dev/null +++ b/testing_files/tailoring.xml @@ -0,0 +1,13 @@ + + + + 1 + + My testing profile2 tailored + + + My testing profile tailored + + + + diff --git a/testing_files/test_report_anaconda_fixes.xccdf.xml b/testing_files/test_report_anaconda_fixes.xccdf.xml new file mode 100644 index 0000000..f373b3b --- /dev/null +++ b/testing_files/test_report_anaconda_fixes.xccdf.xml @@ -0,0 +1,59 @@ + + + accepted + 1.0 + + + Some arbitrary hardening profile for anaconda testing + + + + + Ensure /tmp Located On Separate Partition + CCE-14161-4 + + + part /tmp + + + + Add nodev Option to /tmp + CCE-14412-1 + + part /tmp --mountoptions=nodev + + + + grep -e '^[^#].*/tmp.*nodev' /etc/fstab + if [ "$?" -ne 0 ]; then + new_fstab=$(cat /etc/fstab | sed -e 's%^[^#]([^ ]+)\s+/tmp([^ ]+)\s+([^ ]+)\s+(\d)\s+(\d)%\1\t/tmp\2\t\3,nodev\t\4 \5' + echo $new_fstab > /etc/fstab + fi + + + + + Minimal password length + 8 + 14 + 18 + + + Set Password Minimum Length in login.defs + + + passwd --minlen= + + + + + + + + diff --git a/testing_files/testing_ds.xml b/testing_files/testing_ds.xml new file mode 100644 index 0000000..d7312f0 --- /dev/null +++ b/testing_files/testing_ds.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + incomplete + 1.0 + + My testing profile + A profile for testing purposes. + + + + + + + + touch /root/must_exist.txt + + + + + + + + vim, emacs + 5.5 + 2010-08-30T12:00:00-04:00 + + + + + Ensure that /root/must_exist.txt file exists. + + + Testing check. + + + + + + + + + + + + + + + ^/root$ + must_exist.txt + + + + + diff --git a/testing_files/testing_ks.cfg b/testing_files/testing_ks.cfg new file mode 100644 index 0000000..b239e59 --- /dev/null +++ b/testing_files/testing_ks.cfg @@ -0,0 +1,20 @@ +# this is a simple kickstart file for testing OSCAP addon's features + +# values saving a lot of clicks in the GUI +lang en_US.UTF-8 +keyboard --xlayouts=us --vckeymap=us +timezone Europe/Prague +rootpw aaaaa +bootloader --location=mbr +clearpart --initlabel --all +autopart --type=plain + +%packages +vim +%end + +%addon org_fedora_oscap + content-type = datastream + content-url = http://cobra02/ks/vp/testing_ds.xml + profile = xccdf_com.example_profile_my_profile +%end \ No newline at end of file diff --git a/testing_files/testing_xccdf.xml b/testing_files/testing_xccdf.xml new file mode 100644 index 0000000..bc2d947 --- /dev/null +++ b/testing_files/testing_xccdf.xml @@ -0,0 +1,14 @@ + + draft + 0.1 + + Simple rule for testing purposes + + touch /root/must_exist.txt + + + + + + diff --git a/testing_files/xccdf.xml b/testing_files/xccdf.xml new file mode 100644 index 0000000..b6d0dce --- /dev/null +++ b/testing_files/xccdf.xml @@ -0,0 +1,48 @@ + + + incomplete + 1.0 + + My testing profile + A profile for testing purposes. + + + +