!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/bin/X11/./../../share/rhn/up2date_client/   drwxr-xr-x
Free 5.45 GB of 27.03 GB (20.15%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     rhnPackageInfo.py (13.04 KB)      -rwxr-xr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/python

# all the crap that is stored on the rhn side of stuff
# updating/fetching package lists, channels, etc


import sys
import time
sys.path.insert(0, "/usr/share/rhn/")
sys.path.insert(1,"/usr/share/rhn/up2date_client")

import rpm

import up2dateAuth
import up2dateLog
import up2dateUtils
import up2dateErrors
import config
import rpcServer
import repoDirector
import rhnChannel
import rpmUtils
import rollbacks

# so we can use the same code with python 1.5.2 and 2.2
from rhn import rpclib

from rhpl.translate import _, N_



def remoteAddPackages(pkg):
    log = up2dateLog.initLog()
    log.log_me("Adding packages to package profile: %s" %
               up2dateUtils.pprint_pkglist(pkg))
    s = rpcServer.getServer()
    try:
        if type(pkg[0]) == type([]):
            #s.set_transport(2, 2)
            rpcServer.doCall(s.registration.add_packages,
                             up2dateAuth.getSystemId(), pkg)
        else:
            rpcServer.doCall(s.registration.add_packages,
                             up2dateAuth.getSystemId(), [pkg])            
    except rpclib.Fault, f:
        raise up2dateErrors.CommunicationError(f.faultString)

    updateTransactions()

def remoteDelPackages(pkg):
    log = up2dateLog.initLog()
    log.log_me("Removing packages from package profile: %s" %
               up2dateUtils.pprint_pkglist(pkg))
    s = rpcServer.getServer()

    try:
        if type(pkg[0]) == type([]):
            #s.set_transport(2, 2)
            rpcServer.doCall(s.registration.delete_packages,
                             up2dateAuth.getSystemId(), pkg)
        else:
            rpcServer.doCall(s.registration.delete_packages,
                             up2dateAuth.getSystemId(), [pkg])            
    except rpclib.Fault, f:
        raise up2dateErrors.CommunicationError(f.faultString)

    updateTransactions()

def remoteDeltaPackages(pkgs):
    log = up2dateLog.initLog()
    log.log_me("Adding packages to package profile: %s" %
               up2dateUtils.pprint_pkglist(pkgs['added']))
    log.log_me("Removing packages from package profile: %s" %
               up2dateUtils.pprint_pkglist(pkgs['removed']))
    s = rpcServer.getServer()

    try:
        rpcServer.doCall(s.registration.delta_packages,
                         up2dateAuth.getSystemId(), pkgs)
    except rpclib.Fault, f:
        raise up2dateErrors.CommunicationError(f.faultString)

    updateTransactions()

def updateTransactions():
    cfg = config.initUp2dateConfig()
    log = up2dateLog.initLog()
    if cfg["enableRollbacks"]:
        rollback = rollbacks.Rollback()
        log.log_me("Updating transaction list")
        s = rpcServer.getServer()
        try:
            rpcServer.doCall(s.registration.update_transactions,
                             up2dateAuth.getSystemId(),
                             time.time(),
                             rollback.getTransactionsData()
                             )
        except rpclib.Fault, f:
            if f.faultCode == 99:
                raise up2dateErrors.DelayError(f.faultString)
            else:
                raise up2dateErrors.CommunicationError(f.faultString)

def updatePackageProfile():
    log = up2dateLog.initLog()
    log.log_me("Updating package profile")
    s = rpcServer.getServer()


    try:
        #s.set_transport(2, 2)
        rpcServer.doCall(s.registration.update_packages,
                         up2dateAuth.getSystemId(),
                         rpmUtils.getInstalledPackageList())
    except rpclib.Fault, f:
        if f.faultCode == 99:
            raise up2dateErrors.DelayError(f.faultString)
        else:
            raise up2dateErrors.CommunicationError(f.faultString)

    updateTransactions()



avail_package_lst = []
# Fetch the raw package list. We weed it down and munge it
# more agressevily in the PackageList class, this function
# is just used in a couple places (like --showall) so it's
# seperated
def availablePackageList(msgCallback=None, progressCallback=None):
    log = up2dateLog.initLog()
    global avail_package_lst
    # if this is non-zero, we've already fetched it
    if len(avail_package_lst):
        return avail_package_lst

    availPkgList = []

    try:
        log.log_me("availablePackageList from network")
    except:
        pass

    # FIXME: replace with a up2date.getChannels() equilvinet when
    #        I find out where it belongs
    svrChannels = rhnChannel.getChannels()
    log.log_debug("availablePackageList::channels:", svrChannels)
    if not svrChannels:
        return None
    availPkgList = []


    repos = repoDirector.initRepoDirector()
    new_channels = []
    for channel in svrChannels.channels():
    if channel['label'] not in rhnChannel.channel_blacklist:
        new_channels.append(channel)
    channels = new_channels

    for channel in channels:
        if msgCallback:
            msgCallback("Fetching package list for channel: %s" % channel['label'] )
        # a channel maybe empty, with no version
        if not channel['version']:
            continue
        package_list, type = rpcServer.doCall(repos.listPackages,
                                              channel,
                                             msgCallback = msgCallback,
                                              progressCallback = progressCallback)


        availPkgList = availPkgList + package_list

    avail_package_lst = availPkgList
    return availPkgList

all_avail_package_lst = []
def allAvailablePackageList(msgCallback=None, progressCallback=None):
    log = up2dateLog.initLog()
   global all_avail_package_lst
    # if this is non-zero, we've already fetched it
    if len(all_avail_package_lst):
        return all_avail_package_lst

    availPkgList = []

    try:
        log.log_me("allAvailablePackageList from network")
    except:
        pass

    repos = repoDirector.initRepoDirector()

    # FIXME: replace with a up2date.getChannels() equilvinet when
    #        I find out where it belongs
    svrChannels = rhnChannel.getChannels()
    log.log_debug("availablePackageList::channels:", svrChannels)
    if not svrChannels:
        return None
    availPkgList = []

    new_channels = []
    for channel in svrChannels.channels():
    if channel['label'] not in rhnChannel.channel_blacklist:
        new_channels.append(channel)
    channels = new_channels
    
    for channel in channels:
        if msgCallback:
            msgCallback("Fetching all package list for channel: %s" % channel['label'] )
        # a channel maybe empty, with no version
        if not channel['version']:
            continue
        package_list,type = rpcServer.doCall(
            repos.listAllPackages,
            channel,
            msgCallback = msgCallback,
            progressCallback = progressCallback )


        availPkgList = availPkgList + package_list

    all_avail_package_lst = availPkgList
    return all_avail_package_lst

avail_package_list = []
# return the prefered arch, of the latest version
def getAvailablePackageList(msgCallback=None, progressCallback=None):
    log = up2dateLog.initLog()
    global avail_package_list

    if len(avail_package_list):
        return avail_package_list
    
    package_list = availablePackageList(
        msgCallback, progressCallback)

    availPkgsDict = {}
    for pkg in package_list:
        archScore = rpm.archscore(pkg[4])
        if archScore <= 0:
            # incompatible architecture
            continue

        pkgName = pkg[0]
        if not availPkgsDict.has_key(pkgName):
            availPkgsDict[pkgName] = pkg
            continue

        # Already seen this name
        ret = up2dateUtils.comparePackages(availPkgsDict[pkgName], pkg)
        if ret > 0:
            # don't care, we already have a better version
            continue
        if ret < 0:
            # Better version
            availPkgsDict[pkgName] = pkg
            continue
        # Same version, so compare the arches
        oldScore = rpm.archscore(availPkgsDict[pkgName][4])
        if oldScore <= archScore:
            continue
        # Package with a better architecture
        availPkgsDict[pkgName] = pkg

    # Sort the keys (i.e. the package names)
    avail_package_list = availPkgsDict.values()
    avail_package_list.sort()
#    print avail_package_list
    return avail_package_list

all_avail_package_all_arch_list = []
def getAllAvailableAllArchPackageList(msgCallback=None, progressCallback=None):
    global all_avail_all_arch_package_list

    if len(all_avail_package_all_arch_list):
        return all_avail_package_all_arch_list

    package_list = allAvailablePackageList(
        msgCallback, progressCallback)

    package_list.sort()
    all_avail_all_arch_package_lst = package_list
    return all_avail_all_arch_package_lst


all_avail_package_list = []
def getAllAvailablePackageList(msgCallback=None, progressCallback=None):
    global all_avail_package_list

    if len(all_avail_package_list):
        return all_avail_package_list

    package_list = allAvailablePackageList(
        msgCallback, progressCallback)

    pkgDict = {}
    for pkg in package_list:
        archScore = rpm.archscore(pkg[4])
        if archScore <= 0:
            # incompatible architecture
            continue

        nvre = tuple(pkg[0:3])
        # first package that matches, no need to test anything else
        if not pkgDict.has_key(nvre):
            pkgDict[nvre] = pkg
            continue

        
        oldScore = rpm.archscore(pkgDict[nvre][4])
        if oldScore <= archScore:
            continue

        # else this is a better arch, so use it...
        pkgDict[nvre] = pkg

    # should have a dict with the best
    pkg_list = pkgDict.values()
    all_avail_package_lst = package_list
    return all_avail_package_lst

avail_package_all_arch_list = []
# return the latest version of the package, but all available arches of it
def getAvailableAllArchPackageList(msgCallback=None, progressCallback=None):
    global avail_package_all_arch_list

    if len(avail_package_all_arch_list):
        return avail_package_all_arch_list

    package_list = availablePackageList(
        msgCallback, progressCallback)


    # screw this, what this needs to do is to split
    # based on arch, this find the latest version available
    # for each arch

    archList = {}
    # key on arch, building a list of packages for each arch
    for pkg in package_list:
        if archList.has_key(pkg[4]):
            archList[pkg[4]].append(pkg)
        else:
            archList[pkg[4]] = [pkg]

    arches = archList.keys()

    availpkgs = []
    for arch in arches:
        availPkgsDict = {}
        pkglist = archList[arch]
        for pkg in pkglist:
            pkgName = pkg[0]
           
            if not availPkgsDict.has_key(pkgName):
                availPkgsDict[pkgName] = [pkg]
                continue
            
            # Already seen this name for this arch (this can happen with
            # mulitple repos). aka, multiple versions of the same package available
            ret = up2dateUtils.comparePackages(availPkgsDict[pkgName][0], pkg)
            #print "ret: %s  foo: %s  pkg: %s" % (ret, availPkgsDict[pkgName][0], pkg)
            if ret > 0:
                # don't care, we already have a better version
                continue
            if ret < 0:
                # Better version, replace the existing one
                availPkgsDict[pkgName] =  [pkg]
                continue
            if ret == 0:
                # this is where we could stick in fancy stuff to do channel
                # preference/scoring stuff... ie, this is where we have the same
                # package in multiple channels
#                print "this inst suppose to happen"
                continue

        # add the latest packages for each arch to the main list
        values = availPkgsDict.values()
        tmplist = []
        for value in values:
            for i in value:
                tmplist.append(i)
        availpkgs = availpkgs + tmplist

    avail_package_all_arch_list = availpkgs
    avail_package_all_arch_list.sort()
    return avail_package_all_arch_list



def obsoletesList(msgCallback=None, progressCallback=None):
    log = up2dateLog.initLog()
    obsoletesList = []
    svrChannels =  rhnChannel.getChannels()
    log.log_debug("obsoletesList::channels:", svrChannels)
    if not svrChannels:
        return None

    repos = repoDirector.initRepoDirector()
    
    new_channels = []
    for channel in svrChannels.channels():
    if channel['label'] not in rhnChannel.channel_blacklist:
        new_channels.append(channel)
    channels = new_channels

    for channel in channels:
        # a channel maybe empty, with no version
        if not channel['version']:
            continue
        if msgCallback:
            # FIXME: plugin a useful message and dump it in
            # up2dateMessages for reuse
            msgCallback("Fetching Obsoletes list for channel: %s" % channel['label'])
        obsoletes_list, type = rpcServer.doCall(
            repos.getObsoletes,
            channel,
            msgCallback = msgCallback,
            progressCallback = progressCallback )        

        obsoletesList = obsoletesList + obsoletes_list

    return obsoletesList


:: 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.0052 ]--