403Webshell
Server IP : 182.53.201.61  /  Your IP : 216.73.217.175
Web Server : Apache/2.2.15 (Fedora)
System : Linux km10.dyndns.org 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686
User : apache ( 48)
PHP Version : 5.3.3
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/share/system-config-network/netconfpkg/conf/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/share/system-config-network/netconfpkg/conf/ConfModules.py
"Module handling"
# pylint: disable-msg=W0403
import re

from .Conf import Conf, odict, BadFile, VersionMismatch 


class ConfModules(Conf):
    """ConfModules(Conf)
    This reads /etc/modprobe.conf into a dictionary keyed on device type,
    holding dictionaries: cm['eth0']['alias'] --> 'smc-ultra'
                          cm['eth0']['options'] --> {'io':'0x300', 'irq':'10'}
                          cm['eth0']['post-install'] --> ['/bin/foo', 'arg1',
                                                           'arg2']
    path[*] entries are ignored (but not removed)
    New entries are added at the end to make sure that they
    come after any path[*] entries.
    Comments are delimited by initial '#'
    """
    def __init__(self, filename = '/etc/modprobe.conf'):
        Conf.__init__(self, filename, '#', '\t ', ' ')
    def read(self):
        Conf.read(self)
        self.initvars()
    def initvars(self):
        # pylint: disable-msg=W0201
        self.vars = odict()
        keys = ('alias', 'options', 'install', 'remove')
        self.rewind()
        while self.findnextcodeline():            
            var = self.getfields()
            # strip comments
            for val in var:
                if val and val.strip().startswith('#'):
                    var = var[:var.index(val)]
                    break
            # assume no -k field
            if len(var) > 2 and var[0] in keys:
                if not self.vars.has_key(var[1]):
                    self.vars[var[1]] = odict({'alias':'', 
                        'options':odict(), 'install':[], 'remove':[]})
                if not cmp(var[0], 'alias'):
                    self.vars[var[1]]['alias'] = var[2]
                elif not cmp(var[0], 'options'):
                    self.vars[var[1]]['options'] = self.splitoptlist(var[2:])
                elif not cmp(var[0], 'install'):
                    self.vars[var[1]]['install'] = var[2:]
                elif not cmp(var[0], 'remove'):
                    self.vars[var[1]]['remove'] = var[2:]
            self.nextline()
        self.rewind()
    def splitoptlist(self, optlist):
        mdict = odict()
        for opt in optlist:
            optup = self.splitopt(opt)
            if optup:
                mdict[optup[0]] = optup[1]
        return mdict
    def splitopt(self, opt):
        eq = opt.find('=')
        if eq > 0:
            return (opt[:eq], opt[eq+1:])
        else:
            return ()
    def joinoptlist(self, mdict):
        optstring = ''
        for key in mdict.keys():
            optstring = optstring + key + '=' + mdict[key] + ' '
        return optstring
    def __getitem__(self, varname):
        if self.vars.has_key(varname):
            return self.vars[varname]
        else:
            return odict()

    def _quote(self, s):
        s = s.replace('\\', '\\\\')
        s = s.replace('*', '\\*')
        s = s.replace('?', '\\?')
        s = s.replace('.', '\\.')
        s = s.replace('(', '\\(')
        s = s.replace(')', '\\)')
        s = s.replace('^', '\\^')
        s = s.replace('$', '\\$')
        return s

    def __setitem__(self, varname, value):
        # set *every* instance (should only be one, but...) to avoid surprises
        place = self.tell()
        self.vars[varname] = value
        endofline = ""
        replace = ""
        for key in value.keys():
            self.rewind()
            missing = 1
            findexp = str('^[\t ]*%s[\t ]+%s[\t ]+' %
                          (self._quote(key), self._quote(varname)))
            if not cmp(key, 'alias'):
                endofline = value[key]
                replace = key + ' ' + varname + ' ' + endofline
            elif not cmp(key, 'options'):
                endofline = self.joinoptlist(value[key])
                replace = key + ' ' + varname + ' ' + endofline
            elif not cmp(key, 'install'):
                endofline = ' '.join(value[key])
                replace = key + ' ' + varname + ' ' + endofline
            elif not cmp(key, 'remove'):
                endofline = ' '.join(value[key])
                replace = key + ' ' + varname + ' ' + endofline
            else:
                endofline = ""
                replace = ""
                # some idiot apparantly put an unrecognized key in
                # the dictionary; ignore it...
                continue
            
            # FIXED: [146291] GUI adds trailing spaces to "options" lines
            # in /etc/modprobe.conf when adding/deleting wireless devices
            replace = replace.rstrip()
            
            if endofline:
                # there's something to write...
                while self.findnextline(findexp):
                    cl = self.getline().split('#')
                    if len(cl) >= 2:
                        comment = "#".join(cl[1:])
                        self.setline(replace + ' #' + comment)
                    else:
                        self.setline(replace)
                    missing = 0
                    self.nextline()
                if missing:
                    self.fsf()
                    self.insertline(replace)
            else:
                # delete any instances of this if they exist.
                while self.findnextline(findexp):
                    self.deleteline()
        self.seek(place)
        
    def __delitem__(self, varname):
        # delete *every* instance...
        place = self.tell()
        for key in self.vars[varname].keys():
            self.rewind()
            while self.findnextline('^[\t ]*' 
                                    + key 
                                    + '([\t ]-k)?[\t ]+' 
                                    + varname):
                self.deleteline()
        del self.vars[varname]
        self.seek(place)
    def write(self):
        # need to make sure everything is set, because program above may
        # well have done cm['eth0']['post-install'] = ['/bin/foo', '-f',
        #                                              '/tmp/bar']
        # which is completely reasonable, but won't invoke __setitem__
        for key in self.vars.keys():
            self[key] = self.vars[key]
        Conf.write(self)
    def keys(self):
        return self.vars.keys()
    def has_key(self, key):
        return self.vars.has_key(key)


class ConfModInfo(Conf):
    """ConfModInfo(Conf)
    This READ-ONLY class reads /boot/module-info.
    The first line of /boot/module-info is "Version <version>";
    this class reads versions 0 and 1 module-info files.
    """
    def __init__(self, filename = '/boot/module-info'):
        Conf.__init__(self, filename, '#', '\t ', ' ', create_if_missing=0)
    def read(self):
        Conf.read(self)
        self.initvars()
    def initvars(self):
        # pylint: disable-msg=W0201
        self.vars = {}
        self.rewind()
        device = 0
        modtype = 1
        description = 2
        arguments = 3
        lookingfor = device
        version = self.getfields()
        self.nextline()
        if not cmp(version[1], '0'):
            # Version 0 file format
            while self.findnextcodeline():
                line = self.getline()
                if not line[0] in self.separators:
                    curdev = line
                    self.vars[curdev] = {}
                    lookingfor = modtype
                elif lookingfor == modtype:
                    fields = self.getfields()
                    # first "field" is null (before separators)
                    self.vars[curdev]['type'] = fields[1]
                    if len(fields) > 2:
                        self.vars[curdev]['typealias'] = fields[2]
                    lookingfor = description
                elif lookingfor == description:
                    self.vars[curdev]['description'] = re.sub(
                        '^"', '', re.sub(
                            '^['+self.separators+']', '', re.sub(
                                '"['+self.separators+']*$', '', line)))
                    lookingfor = arguments
                elif lookingfor == arguments:
                    if not self.vars[curdev].has_key('arguments'):
                        self.vars[curdev]['arguments'] = {}
                    # get argument name (first "field" is null again)
                    thislist = []
                    # point at first character of argument description
                    p = line.find('"')
                    while p != -1 and p < len(line):
                        q = line[p+1:].find('"')
                        # deal with escaped quotes (\")
                        while q != -1 and not cmp(line[p+q-1], '\\'):
                            q = line[p+q+1:].find('"')
                        if q == -1:
                            break
                        thislist.append(line[p+1:p+q+1])
                        # advance to beginning of next string, if any
                        r = line[p+q+2:].find('"')
                        if r >= 0:
                            p = p+q+2+r
                        else:
                            # end of the line
                            p = r
                    no = self.getfields()[1]
                    self.vars[curdev]['arguments'][no] = thislist
                self.nextline()
        elif not cmp(version[1], '1'):
            # Version 1 file format
            # Version 1 format uses ' ' and ':' characters as field separators
            # but only uses ' ' in one place, where we explicitly look for it.
            self.separators = ':'
            while self.findnextcodeline():
                line = self.getline()
                fields = self.getfields()
                # pull out module and linetype from the first field...
                linetype = re.split('[ \t]+', fields[0])[1]
                if not cmp(linetype, 'type'):
                    pass
                elif not cmp(linetype, 'alias'):
                    pass
                elif not cmp(linetype, 'desc'):
                    pass
                elif not cmp(linetype, 'argument'):
                    pass
                elif not cmp(linetype, 'supports'):
                    pass
                elif not cmp(linetype, 'arch'):
                    pass
                elif not cmp(linetype, 'pcimagic'):
                    pass
                else:
                    # error: unknown flag...
                    raise BadFile, 'unknown flag' + linetype
        else:
            print 'Only versions 0 and 1 module-info files are supported'
            raise VersionMismatch, str('Only versions 0 '
                        'and 1 module-info files are supported')
        self.rewind()
    def __getitem__(self, varname):
        if self.vars.has_key(varname):
            return self.vars[varname]
        else:
            return {}
    def keys(self):
        return self.vars.keys()
    def has_key(self, key):
        return self.vars.has_key(key)
    def write(self):
        pass


Youez - 2016 - github.com/yon3zu
LinuXploit