def main(client_id, user_arguments_dict): """Main function used by front end""" (configuration, logger, output_objects, op_name) = \ initialize_main_variables(client_id) defaults = signature()[1] (validate_status, accepted) = validate_input_and_cert( user_arguments_dict, defaults, output_objects, client_id, configuration, allow_rejects=False, ) if not validate_status: return (accepted, returnvalues.CLIENT_ERROR) unique_resource_name = accepted['unique_resource_name'][-1] if not is_owner(client_id, unique_resource_name, configuration.resource_home, logger): output_objects.append({ 'object_type': 'error_text', 'text': 'You must be an owner of %s to get the list of owners!' % unique_resource_name }) return (output_objects, returnvalues.CLIENT_ERROR) # is_owner incorporates unique_resource_name verification - no need to # specifically check for illegal directory traversal base_dir = os.path.abspath( os.path.join(configuration.resource_home, unique_resource_name)) + os.sep owners_file = os.path.join(base_dir, 'owners') (list_status, msg) = list_items_in_pickled_list(owners_file, logger) if not list_status: output_objects.append({ 'object_type': 'error_text', 'text': 'Could not get list of owners, reason: %s' % msg }) return (output_objects, returnvalues.SYSTEM_ERROR) output_objects.append({'object_type': 'list', 'list': msg}) return (output_objects, returnvalues.OK)
def vgrid_list(vgrid_name, group, configuration, recursive=True, allow_missing=False): """Shared helper function to get a list of group entities in vgrid. The optional recursive argument is used to switch between direct vgrid and recursive vgrid operation including entities from parent vgrids. If allow_missing is set a missing entity file results in success and an empty list. """ if group == 'owners': name = configuration.vgrid_owners elif group == 'members': name = configuration.vgrid_members elif group == 'resources': name = configuration.vgrid_resources elif group == 'triggers': name = configuration.vgrid_triggers else: return (False, "vgrid_list: unknown group: '%s'" % group) if recursive: vgrid_parts = vgrid_name.split('/') else: vgrid_parts = [vgrid_name] vgrid_dir = '' output = [] for sub_vgrid in vgrid_parts: vgrid_dir = os.path.join(vgrid_dir, sub_vgrid) name_path = os.path.join(configuration.vgrid_home, vgrid_dir, name) (status, msg) = list_items_in_pickled_list(name_path, configuration.logger) if status: # msg is a list # We sometimes find singleton lists containing an empty # string. Reason is historic python type confusion(tm), # namely using the empty list as an error indicator, on # the way down through listhandling, fileio, and serial. # The empty lists are put in at createvgrid.py. if msg != ['']: output.extend(msg) elif allow_missing and not os.path.exists(name_path): output = [] else: return (False, msg) return (True, output)
def main(client_id, user_arguments_dict): """Main function used by front end""" (configuration, logger, output_objects, op_name) = initialize_main_variables(client_id) defaults = signature()[1] (validate_status, accepted) = validate_input_and_cert( user_arguments_dict, defaults, output_objects, client_id, configuration, allow_rejects=False ) if not validate_status: return (accepted, returnvalues.CLIENT_ERROR) unique_resource_name = accepted["unique_resource_name"][-1] if not is_owner(client_id, unique_resource_name, configuration.resource_home, logger): output_objects.append( { "object_type": "error_text", "text": "You must be an owner of %s to get the list of owners!" % unique_resource_name, } ) return (output_objects, returnvalues.CLIENT_ERROR) # is_owner incorporates unique_resource_name verification - no need to # specifically check for illegal directory traversal base_dir = os.path.abspath(os.path.join(configuration.resource_home, unique_resource_name)) + os.sep owners_file = os.path.join(base_dir, "owners") (status, msg) = list_items_in_pickled_list(owners_file, logger) if not status: output_objects.append({"object_type": "error_text", "text": "Could not get list of owners, reason: %s" % msg}) return (output_objects, returnvalues.SYSTEM_ERROR) output_objects.append({"object_type": "list", "list": msg}) return (output_objects, returnvalues.OK)