Beispiel #1
0
    def get_connected_clients(self, blah=None):
        result = []
        shares = self.dispatcher.call_sync('share.query',
                                           [('type', '=', 'afp')])
        for proc in bsd.getprocs(bsd.ProcessLookupPredicate.PROC):
            if proc.command != 'afpd':
                continue

            def test_descriptor(d):
                if d.type != bsd.DescriptorType.SOCKET:
                    return False

                if not d.local_address:
                    return False

                return d.local_address[1] == 548

            cnid_pid = None
            path = proc.cwd
            share = first_or_default(lambda s: s['filesystem_path'] == path,
                                     shares)
            sock = first_or_default(test_descriptor, proc.files)
            if not share or not sock:
                continue

            # Look up the cnid_dbd process too
            for p in bsd.getprocs(bsd.ProcessLookupPredicate.PROC):
                if p.command == 'cnid_dbd' and p.cwd == os.path.join(
                        path, '.AppleDB'):
                    cnid_pid = p.pid

            try:
                u = pwd.getpwuid(proc.uid)
                user = u.pw_name
            except KeyError:
                user = str(proc.uid)

            result.append({
                'host': str(sock.peer_address[0]),
                'share': share['name'],
                'user': user,
                'connected_at': proc.started_at,
                'extra': {
                    'pid': proc.pid,
                    'cnid_dbd_pid': cnid_pid
                }
            })

        return result
Beispiel #2
0
    def get_connected_clients(self, blah=None):
        result = []
        shares = self.dispatcher.call_sync('share.query', [('type', '=', 'afp')])
        for proc in bsd.getprocs(bsd.ProcessLookupPredicate.PROC):
            if proc.command != 'afpd':
                continue

            def test_descriptor(d):
                if d.type != bsd.DescriptorType.SOCKET:
                    return False

                if not d.local_address:
                    return False

                return d.local_address[1] == 548

            cnid_pid = None
            path = proc.cwd
            share = first_or_default(lambda s: s['filesystem_path'] == path, shares)
            sock = first_or_default(test_descriptor, proc.files)
            if not share or not sock:
                continue

            # Look up the cnid_dbd process too
            for p in bsd.getprocs(bsd.ProcessLookupPredicate.PROC):
                if p.command == 'cnid_dbd' and p.cwd == os.path.join(path, '.AppleDB'):
                    cnid_pid = p.pid

            try:
                u = pwd.getpwuid(proc.uid)
                user = u.pw_name
            except KeyError:
                user = str(proc.uid)

            result.append({
                'host': str(sock.peer_address[0]),
                'share': share['name'],
                'user': user,
                'connected_at': proc.started_at,
                'extra': {
                    'pid': proc.pid,
                    'cnid_dbd_pid': cnid_pid
                }
            })

        return result
Beispiel #3
0
 def get_process_list(self):
     procs = bsd.getprocs(bsd.ProcessLookupPredicate.PROC)
     for i in procs:
         try:
             argv = list(i.argv)
             yield {"pid": i.pid, "title": argv[0], "command": i.command, "argv": argv, "env": list(i.env)}
         except:
             continue
Beispiel #4
0
 def get_process_list(self):
     procs = bsd.getprocs(bsd.ProcessLookupPredicate.PROC)
     for i in procs:
         try:
             argv = list(i.argv)
             yield {
                 'pid': i.pid,
                 'title': argv[0],
                 'command': i.command,
                 'argv': argv,
                 'env': list(i.env)
             }
         except:
             continue
Beispiel #5
0
    def get_open_files(self, path):
        result = []
        for proc in bsd.getprocs(bsd.ProcessLookupPredicate.PROC):
            for f in proc.files:
                if not f.path:
                    continue

                if f.path.startswith(path):
                    result.append({
                        'pid': proc.pid,
                        'process_name': proc.command,
                        'path': f.path
                    })

        return result
Beispiel #6
0
    def get_open_files(self, path):
        result = []
        for proc in bsd.getprocs(bsd.ProcessLookupPredicate.PROC):
            for f in proc.files:
                if not f.path:
                    continue

                if f.path.startswith(path):
                    result.append({
                        'pid': proc.pid,
                        'process_name': proc.command,
                        'path': f.path
                    })

        return result