Example #1
0
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)
Example #2
0
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)
Example #3
0
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)