| 1 |  |  | # -*- coding: utf-8 -*- | 
            
                                                                                                            
                            
            
                                    
            
            
                | 2 |  |  | # Copyright (C) 2018-2020 Greenbone Networks GmbH | 
            
                                                                                                            
                            
            
                                    
            
            
                | 3 |  |  | # | 
            
                                                                                                            
                            
            
                                    
            
            
                | 4 |  |  | # SPDX-License-Identifier: GPL-3.0-or-later | 
            
                                                                                                            
                            
            
                                    
            
            
                | 5 |  |  | # | 
            
                                                                                                            
                            
            
                                    
            
            
                | 6 |  |  | # This program is free software: you can redistribute it and/or modify | 
            
                                                                                                            
                            
            
                                    
            
            
                | 7 |  |  | # it under the terms of the GNU General Public License as published by | 
            
                                                                                                            
                            
            
                                    
            
            
                | 8 |  |  | # the Free Software Foundation, either version 3 of the License, or | 
            
                                                                                                            
                            
            
                                    
            
            
                | 9 |  |  | # (at your option) any later version. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 10 |  |  | # | 
            
                                                                                                            
                            
            
                                    
            
            
                | 11 |  |  | # This program is distributed in the hope that it will be useful, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 12 |  |  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
            
                                                                                                            
                            
            
                                    
            
            
                | 13 |  |  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
            
                                                                                                            
                            
            
                                    
            
            
                | 14 |  |  | # GNU General Public License for more details. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 15 |  |  | # | 
            
                                                                                                            
                            
            
                                    
            
            
                | 16 |  |  | # You should have received a copy of the GNU General Public License | 
            
                                                                                                            
                            
            
                                    
            
            
                | 17 |  |  | # along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 18 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 19 |  |  | from sys import stderr | 
            
                                                                                                            
                            
            
                                    
            
            
                | 20 |  |  | from lxml import etree | 
            
                                                                                                            
                            
            
                                    
            
            
                | 21 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 22 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 23 |  |  | def yes_or_no(question): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 24 |  |  |     """Asks the user to proceed or not in a gvmtools script | 
            
                                                                                                            
                            
            
                                    
            
            
                | 25 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 26 |  |  |     Arguments: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 27 |  |  |         question (str): The condition the user should answer | 
            
                                                                                                            
                            
            
                                    
            
            
                | 28 |  |  |     """ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 29 |  |  |     reply = str(input(question + ' (y/n): ')).lower().strip() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 30 |  |  |     if reply[0] == ('y'): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 31 |  |  |         return True | 
            
                                                                                                            
                            
            
                                    
            
            
                | 32 |  |  |     if reply[0] == ('n'): | 
            
                                                                                                            
                            
            
                                    
            
            
                | 33 |  |  |         return False | 
            
                                                                                                            
                            
            
                                    
            
            
                | 34 |  |  |     else: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 35 |  |  |         return yes_or_no("Please enter 'y' or 'n'") | 
            
                                                                                                            
                            
            
                                    
            
            
                | 36 |  |  |  | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 37 |  |  |  | 
            
                                                                        
                            
            
                                    
            
            
                | 38 |  |  | def error_and_exit(msg): | 
            
                                                                        
                            
            
                                    
            
            
                | 39 |  |  |     """Prints an error message and quits the gvmtools script | 
            
                                                                        
                            
            
                                    
            
            
                | 40 |  |  |  | 
            
                                                                        
                            
            
                                    
            
            
                | 41 |  |  |     Arguments: | 
            
                                                                        
                            
            
                                    
            
            
                | 42 |  |  |         msg (str): The error message, that will be printed | 
            
                                                                        
                            
            
                                    
            
            
                | 43 |  |  |     """ | 
            
                                                                        
                            
            
                                    
            
            
                | 44 |  |  |     print("\nError: {}\n".format(msg), file=stderr) | 
            
                                                                        
                            
            
                                    
            
            
                | 45 |  |  |     quit(1) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 46 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 47 |  |  |  | 
            
                                                                                                            
                            
            
                                                                    
                                                                                                        
            
            
                | 48 |  | View Code Duplication | def create_xml_tree(xml_doc): | 
                            
                    |  |  |  | 
                                                                                        
                                                                                     | 
            
                                                                                                            
                            
            
                                    
            
            
                | 49 |  |  |     """Creates an XML tree that can be read by an gvmtools script | 
            
                                                                                                            
                            
            
                                    
            
            
                | 50 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 51 |  |  |     Arguments: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 52 |  |  |         xml_doc (str): Path to the xml document | 
            
                                                                                                            
                            
            
                                    
            
            
                | 53 |  |  |     """ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 54 |  |  |     try: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 55 |  |  |         xml_tree = etree.parse(xml_doc) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 56 |  |  |         xml_tree = xml_tree.getroot() | 
            
                                                                                                            
                            
            
                                    
            
            
                | 57 |  |  |     except IOError as err: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 58 |  |  |         error_and_exit("Failed to read xml_file: {} (exit)".format(str(err))) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 59 |  |  |     except etree.Error as err: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 60 |  |  |         error_and_exit("Failed to parse xml_file: {} (exit)".format(str(err))) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 61 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 62 |  |  |     if len(xml_tree) == 0: | 
            
                                                                                                            
                            
            
                                    
            
            
                | 63 |  |  |         error_and_exit("XML file is empty (exit)") | 
            
                                                                                                            
                            
            
                                    
            
            
                | 64 |  |  |  | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 65 |  |  |     return xml_tree | 
            
                                                        
            
                                    
            
            
                | 66 |  |  |  |