/usr/bin/asslcert is in ripe-atlas-tools 2.0.2-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154  | #!/usr/bin/python
import os
import re
import sys
from ripe.atlas.tools.commands.base import Command, Factory
from ripe.atlas.tools.commands.measure import Factory as BaseFactory
from ripe.atlas.tools.exceptions import RipeAtlasToolsException
class RipeAtlas(object):
    def __init__(self):
        self.command = None
        self.args = []
        self.kwargs = {}
    def _generate_usage(self):
        usage = "Usage: ripe-atlas <command> [arguments]\n\n"
        usage += "Commands:\n"
        longest_command = 0
        classes = []
        for c in Command.get_available_commands():
            if c == "shibboleet":
                continue
            cmd_class = Command.load_command_class(c)
            classes.append(cmd_class)
            cmd_name = cmd_class.get_name()
            if len(cmd_name) > longest_command:
                longest_command = len(cmd_name)
        for cmd_cls in classes:
            usage += "\t{} {}\n".format(
                cmd_cls.get_name().ljust(longest_command + 1),
                cmd_cls.DESCRIPTION,
            )
        usage += (
            "\nFor help on a particular command, try "
            "ripe-atlas <command> --help"
        )
        return usage
    def _set_base_command(self):
        """
        Sets the base command covering cases where we call it with
        shortcut or asking for help.
        """
        caller = os.path.basename(sys.argv[0])
        shortcut = re.match('^a(ping|traceroute|dig|sslcert|ntp|http)$', caller)
        if shortcut:
            self.command = "measure"
            sys.argv.insert(1, self._translate_shortcut(shortcut.group(1)))
            return
        if len(sys.argv) < 2 or sys.argv[1] in ("-h", "--help"):
            self.command = "help"
            return
        self.command = sys.argv.pop(1)
    @staticmethod
    def _translate_shortcut(shortcut):
        if shortcut == "dig":
            return "dns"
        return shortcut
    def autocomplete(self):
        """
        This function is highly inspired from Django's own autocomplete
        manage.py. For more documentation check
        https://github.com/django/django/blob/1.9.4/django/core/management/__init__.py#L198-L270
        """
        def print_options(options, curr):
            """
            Prints matching with current word available autocomplete options
            in a formatted way to look good on bash.
            """
            sys.stdout.write(' '.join(sorted(filter(lambda x: x.startswith(curr), options))))
        # If we are not autocompleting continue as normal
        if 'RIPE_ATLAS_AUTO_COMPLETE' not in os.environ:
            return
        cwords = os.environ['COMP_WORDS'].split()[1:]
        cword = int(os.environ['COMP_CWORD'])
        try:
            curr = cwords[cword - 1]
        except IndexError:
            curr = ''
        commands = list(Command.get_available_commands())
        # base caller ripe-atlas
        if cword == 1:
            print_options(commands, curr)
        # special measure command
        elif cword == 2 and cwords[0] == "measure":
            print_options(BaseFactory.TYPES.keys(), curr)
        # rest of commands
        elif cwords[0] in commands:
            cmd = self.fetch_command_class(cwords[0], cwords)
            cmd.add_arguments()
            options = [sorted(s_opt.option_strings)[0] for s_opt in cmd.parser._actions if s_opt.option_strings]
            previous_options = [x for x in cwords[1:cword - 1]]
            options = [opt for opt in options if opt not in previous_options]
            print_options(options, curr)
        sys.exit(1)
    def fetch_command_class(self, command, arg_options):
        """Fetches the class responsible for the given command."""
        cmd_cls = Command.load_command_class(command)
        if cmd_cls is None:
            # Module containing the command class wasn't found
            raise RipeAtlasToolsException("No such command")
        #
        # If the imported module contains a `Factory` class, execute that
        # to get the `cmd` we're going to use.  Otherwise, we expect there
        # to be a `Command` class in there.
        #
        if issubclass(cmd_cls, Factory):
            cmd = cmd_cls(arg_options).create()
        else:
            cmd = cmd_cls(*self.args, **self.kwargs)
        return cmd
    def main(self):
        self._set_base_command()
        self.autocomplete()
        if self.command == "help":
            raise RipeAtlasToolsException(self._generate_usage())
        cmd = self.fetch_command_class(self.command, sys.argv)
        cmd.init_args()
        cmd.run()
if __name__ == '__main__':
    try:
        sys.exit(RipeAtlas().main())
    except RipeAtlasToolsException as e:
        e.write()
        raise SystemExit()
 |