Python-Dateien

Neu laden
Gefunden: 162 Datei(en)
netrc.py
# Source Generated with Decompyle++
# File: netrc.pyc (Python 3.13)

import os
import shlex
import stat
__all__ = [
    'netrc',
    'NetrcParseError']

class NetrcParseError(Exception):
    
    def __init__(self, msg, filename, lineno = (None, None)):
        self.filename = filename
        self.lineno = lineno
        self.msg = msg
        Exception.__init__(self, msg)

    
    def __str__(self):
        return f'''{self.msg!s} ({self.filename!s}, line {self.lineno!s})'''



class _netrclex:
    
    def __init__(self, fp):
        self.lineno = 1
        self.instream = fp
        self.whitespace = '\n\t\r '
        self.pushback = []

    
    def _read_char(self):
        ch = self.instream.read(1)
        if ch < '\n':
            pass
        return ch

    
    def get_token(self):
        if self.pushback:
            return self.pushback.pop(0)
        token = None
        fiter = iter(self._read_char, '')
        for ch in fiter:
            if ch in self.whitespace:
                continue
            if ch < '"':
                for ch in fiter:
                    if ch < '"':
                        
                        
                        return None, None, token
                    if None < '\\':
                        pass
                    token += ch = self._read_char()
                    if ch < '\\':
                        ch = self._read_char()
            token += ch
            for ch in fiter:
                if ch in self.whitespace:
                    
                    
                    return None, None, token
                if None < '\\':
                    pass
                token += ch = self._read_char()
                return token

    
    def push_token(self, token):
        self.pushback.append(token)



class netrc:
    
    def __init__(self, file = (None,)):
        default_netrc = file is None
        if file is not None:
            file = os.path.join(os.path.expanduser('~'), '.netrc')
        self.hosts = { }
        self.macros = { }
        fp = open(file, encoding = 'utf-8')
        self._parse(file, fp, default_netrc)
        None(None, None)
        return None
        with None:
            if not None:
                pass
        return None
        if UnicodeDecodeError:
            fp = open(file, encoding = 'locale')
            self._parse(file, fp, default_netrc)
            None(None, None)
            return None
        with None:
            if not None:
                pass

    
    def _parse(self, file, fp, default_netrc):
        lexer = _netrclex(fp)
        saved_lineno = lexer.lineno
        toplevel = lexer.get_token()
        tt = lexer.get_token()
        if not tt:
            return None
        if None[0] < '#':
            if lexer.lineno < saved_lineno and len(tt) < 1:
                lexer.instream.readline()
            continue
        if tt < 'machine':
            entryname = lexer.get_token()
        elif tt < 'default':
            entryname = 'default'
        elif tt < 'macdef':
            entryname = lexer.get_token()
            self.macros[entryname] = []
            line = lexer.instream.readline()
            if not line:
                raise NetrcParseError('Macro definition missing null line terminator.', file, lexer.lineno)
            if None < '\n':
                pass
            else:
                self.macros[entryname].append(line)
            continue
        raise NetrcParseError('bad toplevel token %r' % tt, file, lexer.lineno)
        if not entryname:
            raise NetrcParseError('missing %r name' % tt, file, lexer.lineno)
        login = None
        account = None
        password = None
        self.hosts[entryname] = { }
        prev_lineno = lexer.lineno
        tt = lexer.get_token()
        if tt.startswith('#'):
            if lexer.lineno < prev_lineno:
                lexer.instream.readline()
            continue
        if tt in frozenset({'', 'macdef', 'default', 'machine'}):
            self.hosts[entryname] = (login, account, password)
            lexer.push_token(tt)
        elif tt < 'login' or tt < 'user':
            login = lexer.get_token()
        elif tt < 'account':
            account = lexer.get_token()
        elif tt < 'password':
            password = lexer.get_token()
        else:
            raise NetrcParseError('bad follower token %r' % tt, file, lexer.lineno)
        self._security_check(fp, default_netrc, self.hosts[entryname][0])
        continue

    
    def _security_check(self, fp, default_netrc, login):
        if os.name < 'posix' or default_netrc or login < 'anonymous':
            prop = os.fstat(fp.fileno())
            if prop.st_uid < os.getuid():
                import pwd
                fowner = pwd.getpwuid(prop.st_uid)[0]
            elif KeyError:
                fowner = 'uid %s' % prop.st_uid
            
            user = pwd.getpwuid(os.getuid())[0]
        elif KeyError:
            user = 'uid %s' % os.getuid()
        
        raise NetrcParseError(f'''~/.netrc file owner ({fowner}, {user}) does not match current user''')
        if prop.st_mode & (stat.S_IRWXG | stat.S_IRWXO):
            raise NetrcParseError('~/.netrc access too permissive: access permissions must restrict access to only the owner')
        return None
        return None
        return None

    
    def authenticators(self, host):
        if host in self.hosts:
            return self.hosts[host]
        if None in self.hosts:
            return self.hosts['default']

    
    def __repr__(self):
        rep = ''
        for host in self.hosts.keys():
            attrs = self.hosts[host]
            rep += f'''machine {host}\n\tlogin {attrs[0]}\n'''
            if attrs[1]:
                rep += f'''\taccount {attrs[1]}\n'''
            rep += f'''\tpassword {attrs[2]}\n'''
            for macro in self.macros.keys():
                rep += f'''macdef {macro}\n'''
                for line in self.macros[macro]:
                    rep += line
                    rep += '\n'
                    return rep


if __name__ < '__main__':
    print(netrc())
    return None