!C99Shell v. 1.0 pre-release build #16!

Software: Apache/2.0.54 (Fedora). PHP/5.0.4 

uname -a: Linux mina-info.me 2.6.17-1.2142_FC4smp #1 SMP Tue Jul 11 22:57:02 EDT 2006 i686 

uid=48(apache) gid=48(apache) groups=48(apache)
context=system_u:system_r:httpd_sys_script_t
 

Safe-mode: OFF (not secure)

/usr/share/system-config-soundcard/   drwxr-xr-x
Free 3.84 GB of 27.03 GB (14.2%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     soundcardBackend.py (14.82 KB)      -rwxr-xr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
## soundcardBackend.py - Contains the backend code needed for system-config-soundcard
## Copyright (C) 2002, 2003 Red Hat, Inc.
## Copyright (C) 2002, 2003 Brent Fox <bfox@redhat.com>
## Copyright (C) 2004, 2005 Bastien Nocera <hadess@hadess.net>

## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.

## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.

## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


import string
import kudzu
import os
import getopt
import sys
import commands

##
## I18N
##
from rhpl.translate import _, N_
import rhpl.translate as translate
translate.textdomain ("system-config-soundcard")

##
## Get position
##
def position(list, name):
    for line in list:
        if line[1] == name:
           return line[0]
    return 0

##
## Load list of drivers
##
def read_driver_list():
    try:
        fd = open('/proc/asound/modules', 'r')
    except:
        return []

    list = fd.readlines()
    fd.close()

    drivers = []
    for line in list:
        tmp = line.split()
        drivers.append([int(tmp[0]), string.replace(tmp[1],'_','-')])

    return drivers

##
## Sort fnc for box
##
def card_sort(card1, card2):
    return cmp(card1.position, card2.position)

##
## Usage
##
def usage():
    print \
_("""Usage: system-config-soundcard [OPTIONS]
Options:
  -h, --help        display this help and exit
  -k, --kernel=     which kernel version to assume:
                    2.4 (modules.conf)
                    2.6 (modprobe.conf, default)
""")

##
## Options
##

global kernel_type
kver = os.uname()[2]
kernel_type = string.join(kver.split('.')[0:2], '.')
                                                                                                              
def options():
    try:
        (opts, rest_args) = getopt.getopt(sys.argv[1:],
                                   "hk:",
                                   ["driver=", "help", "kernel="])
    except (getopt.GetoptError), e:
        print e
        print
        usage()
        sys.exit(1)
                                                                                                              
    for (opt, value) in opts:
        if opt == "-h" or opt == "--help":
            usage()
            sys.exit(0)
        if opt == "-k" or opt == "--kernel":
            kernel_type = value
            if kernel_type != '2.4' and kernel_type != '2.6':
                print "ERROR: Invalid kernel version:", kernel_type
                usage()
                sys.exit(0)

class soundcardBackend:
    def __init__(self):
        self.defaultModule = None
        self.newFile = []
        self.readFile()
        self.cardList = []
        self.dspList = []
        self.hardware_device = 0
        self.default_device = 0
        self.default_card = 0
        self.dynamic_keys = 0
        self.readConfig()

    def probeCards(self):        
        driverList = read_driver_list()
        list = kudzu.probe(kudzu.CLASS_AUDIO, kudzu.BUS_PCI | kudzu.BUS_MACIO,
                           kudzu.PROBE_ALL)

        print "----------- Kudzu -------------"
        for card in list:
        print card
            print "----------- **** -------------"

        for card in list:
            #Let's go through the list of cards.  If the driver is 'unknown',
            #don't put the card in the list.
            if card.driver != "unknown":
                card.position = position(driverList,card.driver)
                self.cardList.append(card)

       # Same thing with ISA cards
        list = kudzu.probe(kudzu.CLASS_AUDIO, kudzu.BUS_ISAPNP, kudzu.PROBE_ALL)
        for card in list:
            if card.driver != "unknown":
                card.position = position(driverList,card.driver)
                self.cardList.append(card)

        # Only add USB audio devices that have snd-usb-audio as the driver
        list = kudzu.probe(kudzu.CLASS_AUDIO, kudzu.BUS_USB, kudzu.PROBE_ALL)
        for card in list:
            if card.driver == "snd-usb-audio":
                card.position = position(driverList,card.driver)
                self.cardList.append(card)

        # Same with Mac sound devices
        list = kudzu.probe(kudzu.CLASS_AUDIO, kudzu.BUS_MACIO, kudzu.PROBE_ALL)
        for card in list:
             if card.driver == "snd_powermac":
                card.position = position(driverList,card.driver)
                self.cardList.append(card)

        self.cardList.sort(card_sort)

    if self.cardList != []:
        self.defaultModule = self.cardList[0].driver

        return self.cardList

    def getData(self, card):
        device, module, description = card
        if (string.count(description,"|") == 1):
            maker, model = string.split(description, "|")
        elif (string.count(description," ") > 0):
            maker, model = string.split(description, " ", 1)
        else:
            maker = description
            model = description

        return device, module, maker, model

    def playTestSound(self, module, index):
        self.setVolume(index)

        if kernel_type == '2.6':
            device = "plughw:%d,0"% index

        path = "/usr/bin/aplay"
        args = [path,  "-D", device, "-N", "/usr/share/system-config-soundcard/sound-sample.wav"]

        if kernel_type == "2.4":
            if self.dspList == []:
                device = "/dev/dsp"
            else:
                device = "/dev/dsp%d" % self.dspList.index(module)

        path = "/usr/bin/play"
        args = [path,  "-d", device, "/usr/share/system-config-soundcard/sound-sample.wav", "-v", "2"]

        pid = os.fork()
        if (not pid):
            os.execv(path, args)
        else:
            os.waitpid(pid,0)

    def readFile(self):
        if kernel_type == '2.6':
            fd = open('/etc/modprobe.conf', 'r')
        if kernel_type == '2.4':
            fd = open('/etc/modules.conf', 'r')
        lines = fd.readlines()
        fd.close()

        self.newFile = []

        for line in lines:
            #strip out all lines dealing with sound
            if (string.find(line, "sound-slot-") < 0 and string.find(line,"snd-card-") < 0) or string.strip(line)[0] == "#":
                self.newFile.append(line)
            
    def writeFile(self, selectedCard):
        self.selectedCard = selectedCard
        aliasList = []
        aumixList = []
        self.dspList = []

        device, self.defaultModule, maker, model = self.getData(self.cardList[selectedCard])
        if kernel_type == '2.6':
        aliasList.append("alias snd-card-0 %s\n" % self.defaultModule)
            aumixList.append("install %s /sbin/modprobe --ignore-install %s && /usr/sbin/alsactl restore >/dev/null 2>&1 ||:\n" % (self.defaultModule, self.defaultModule))
            aumixList.append("remove %s { /usr/sbin/alsactl store >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove %s\n" % (self.defaultModule, self.defaultModule))
        if kernel_type == '2.4':
        aliasList.append("alias sound-slot-0 %s\n" % self.defaultModule)
            aumixList.append("post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :\n")
            aumixList.append("pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :\n")
        self.dspList.append(self.defaultModule)

        count = 1
        for card in self.cardList:
            device, module, maker, model = self.getData(card)

            if module == self.defaultModule:
                #We've already written this line, so skip
                pass
            else:
                if kernel_type == '2.6':
            aliasList.append("alias snd-card-%d %s\n" % (count, module))
            aumixList.append("install %s /sbin/modprobe --ignore-install %s && /usr/sbin/alsactl restore >/dev/null 2>&1 ||:\n" % (module, module))
                    aumixList.append("remove %s { /usr/sbin/alsactl store >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove %s\n" % (module, module))
                if kernel_type == '2.4':
            aliasList.append("alias sound-slot-%d %s\n" % (count, module))
                    aumixList.append("post-install sound-slot-%d /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :\n" % count)
                    aumixList.append("pre-remove sound-slot-%d /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :\n" % count)
                self.dspList.append(module)
                count = count + 1

        #Let's re-read the file again to make sure we're starting from a clean base
        self.readFile()
        self.newFile = self.newFile + aliasList + aumixList

        if kernel_type == '2.6':
            fd = open('/etc/modprobe.conf', 'w')
        if kernel_type == '2.4':
            fd = open('/etc/modules.conf', 'w')

        for line in self.newFile:
            fd.write(line)

        fd.close()

    def setVolume(self, index):
        if kernel_type == '2.4':
            aumix_path = "/bin/aumix-minimal"
            aumix_pid = os.fork()
            aumix_args = [aumix_path, "-f", "/etc/.aumixrc", "-L"]

            if (not aumix_pid):
        try:
            os.execv(aumix_path, aumix_args)
        except:
            sys.exit(0)
        else:
        os.waitpid(aumix_pid,0)

        #alsa drivers load muted. we need to set the volume for them.
        if kernel_type == '2.6':
        amixer_path = "/usr/bin/alsaunmute"
        amixer_pid = os.fork()
            amixer_args = [amixer_path, `index`, "-v"]

            if (not amixer_pid):
           try:
              os.execv(amixer_path, amixer_args)
               except:
              sys.exit(0)
            else:
           os.waitpid(amixer_pid,0)

    def setDefaultCard(self, index):
        self.default_card = index
    
    def getDefaultCard(self):
        return self.cardList[self.default_card]

    def getDefaultCardNum(self):
        return self.default_card

    def setDefaultDevice(self, index):
        self.default_device = index        

    def getDefaultDevice(self):
        return self.default_device

    def setHardwareDevice(self, state):
        self.hardware_device = state;

    def getHardwareDevice(self):
        return self.hardware_device        

    def setDynamicKeys(self, state):
        self.dynamic_keys = state;

    def getDynamicKeys(self):
        return self.dynamic_keys

    def reconfigureDynamicKeys(self):
        if self.dynamic_keys :
            if os.path.exists("/var/run/console/console.lock"):
                os.system("/usr/bin/ainit `cat /var/run/console/console.lock` start")
        else:
            if os.path.exists("/var/run/console/console.lock"):
                os.system("/usr/bin/ainit `cat /var/run/console/console.lock` stop")

    def writeConfig(self):

        # Writing to asound.conf
        index = self.default_card
        device = self.default_device
    
        if kernel_type == '2.6':
            lines = []

            lines.append("#Generated by system-config-soundcard, do not edit by hand\n")
            if self.hardware_device:            
                lines.append("#HWCONF\n")
                lines.append("#DEV %d\n" % device)
                lines.append("pcm.!default { type hw card %d device %d } \n" % (index, device))
                lines.append("ctl.!default { type hw card %d }\n" % index)
            else:
                lines.append("#SWCONF\n")
                lines.append("#DEV %d\n" % device)
                lines.append("defaults.pcm.card %d \n" %   index)
                lines.append("defaults.pcm.device %d \n" % device)
                lines.append("defaults.ctl.card %d \n" %   index)

        fd = open('/etc/asound.conf', 'w')
        for line in lines:
            fd.write(line)
        fd.close()

        # re-writing ainit.conf
        fd = open('/etc/alsa/ainit.conf', 'r')
        lines = fd.readlines()
        fd.close()

        lines_out = []
        for line in lines:                
            line_tmp = string.split(string.strip(line))
            if line_tmp != [] and cmp(string.lower(line_tmp[0]),"enable") == 0:
                if self.dynamic_keys:
                   lines_out.append("enable = yes\n")
                else:
                   lines_out.append("enable = no\n")
            else:
                lines_out.append(line)

        fd = open('/etc/alsa/ainit.conf', 'w')
        fd.writelines(lines_out)
        fd.close()        

    def readConfig(self):
        # Check alsa configuration
        try:            
            fd = open('/etc/asound.conf', 'r')
            line = fd.readline()
            line = fd.readline()
            self.hardware_device = (cmp(line[:7],'#HWCONF') != 1)

            line = fd.readline()
            if not cmp(line[:4],'#DEV'):
               self.default_device = int(line[4:])
                              
            fd.close()
        except:
            self.hardware_device = 0
            self.default_device = 0

        # Check ainit configuration
        try:
            fd = open('/etc/alsa/ainit.conf', 'r')                       
            lines = fd.readlines()
            fd.close()

            for line in lines:                
                line = string.split(string.strip(line))
                if line != [] and cmp(string.lower(line[0]),"enable") == 0:
                    self.dynamic_keys = (cmp(string.lower(line[2]),'yes') == 0)
                    break;
                    
        except:
            self.dynamic_keys = 0

        try:
            self.default_card = int(commands.getoutput('/usr/bin/alsacard'))
        except:
            self.default_card = 0

        print "Read config:\ncard %d\ndevice %d\nHW %d" % (self.default_card, self.default_device, self.hardware_device)


    def unloadModules(self):
        for card in self.cardList:
            device, module, maker, model = self.getData(card)

            retval = os.system("/sbin/modprobe -r %s" % module)

    def loadModules(self):
        retval = os.system("/sbin/modprobe %s" % self.defaultModule)
        if retval == 0:
            #Modprobe worked
            pass
        else:
            #Modprobe failed
            return self.defaultModule

        for card in self.cardList:
            device, module, maker, model = self.getData(card)

            if module == self.defaultModule:
                #We've already inserted this one, so don't try again
                pass
            else:
                retval = os.system("/sbin/modprobe %s" % module)

                if retval == 0:
                    #Modprobe worked
                    pass
                else:
                    #Modprobe failed
                    return self.defaultModule

        return 0

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #16 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0042 ]--