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


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


# Copyright (c) 1999-2002 Red Hat, Inc.  Distributed under GPL.
#
# Author: Adrian Likins <alikins@redhat.com>


# imports are a bit weird here to avoid name collions on "harware"
import sys
sys.path.append("/usr/share/rhn/")
from up2date_client import rollbacks
from up2date_client import configUtils
from up2date_client import config
from up2date_client import up2dateErrors
from up2date_client import up2dateUtils
argVerbose = 0

cfg = config.initUp2dateConfig()

__rhnexport__ = [
    'rollback',
    'listTransactions',
    'config',
    'undo' ]

_rollback = rollbacks.Rollback()

def listTransactions():
    data = {}
    data['version'] = "0"
    data['name'] = "rollback.listTransactions.data"

    dict = _rollback.getTransactionsData()
    data['transactions'] = dict
    return (0, "transaction info collected", data)

def noneToEmpty(value):
    if value == None:
        return ""
    return value

# stringing nay None's in dep tuples
def __cleanDeps(deps):
    clean_deps = []
    for dep in deps:
    ( (name, version, release), (needsName, needsVersion),
          flags, suggested, sense) = dep

        values = [name, version, release, needsName, needsVersion, flags, suggested, sense]
        name, version,release, needsName, needsVersion, \
              flags, suggested, sense = map(noneToEmpty, values)
        
    clean_deps.append(((name,version,release),
                           (needsName, needsVersion),
                           flags, suggested, sense))
    return tuple(clean_deps)

# resync hardware information with the server profile
def undo():
    data = _rollback.getUndoInfo()
    data['version'] = "0"
    data['name'] = "rollback.undo.rollback_info"
    _rollback.undo()

    return (0, "undo completed", data)

# pass in a string...
def config(value):
    cfg.set("enableRollbacks", value)
    cfg.save()
    # need to figure out what macro and macro values this is
    if value == "1":
        configUtils.writeUp2dateMacro("%_repackage_all_erasures", "1")
    if value == "0":
        configUtils.writeUp2dateMacro("%_repackage_all_erasures", "0")

    return (0, "config values updated", {})

def _catchErrors(method, name, args):
    print "args: %s" % args
    ret = None
    try:
        ret = apply(method, args)
    except up2dateErrors.RpmError, e:
        return (18, "Failed: packages requested raised "\
                "dependency problems", {})
    except up2dateErrors.RpmInstallError, e:
        data = {}
        data['version'] = "0"
        data['name'] = "%s.package_install_failure" % name
        if e.pkg:
            data = {'package_that_failed':e.pkg}
        return (32, "Failed: Packages failed to install "\
                "properly: %s" % e.errmsg, data)
    except up2dateErrors.FileNotFoundError, e:
        data = {'missing_package_error': e}
        data["version"] = "0"
        data["name"] = "%s.file_not_found" % name
        return (31, "Failed: There was a File Not Found error. "\
                "The error was: %s" % e, data)
    except up2dateErrors.SkipListError, e:
    data = {}
    if e.pkglist:
        data = {'packages_on_skip_list': e.pkglist}
    # The version field is the version of the data struct
    data['version'] = "0"
    data['name'] = "%s.packages_on_skip_list" % name
    return (30, "Failed: Some of the packages specified were "\
                "on a skip list", data)
    except up2dateErrors.DependencyError, e:
    data = {}
    if e.deps:
        # deps might have None's, cleanse them
        data = {'failed_deps':__cleanDeps(e.deps)}
    data["version"] = "0"
    data["name"] = "%s.failed_deps" % name
    return (18, "Failed: packages requested raised "\
                "dependency problems", data)
    except up2dateErrors.UnsolvedDependencyError, e:
    data = {}
    if e.dep:
       data = {'failed_deps':e.dep}
    if e.pkgs:
       data["packages"] = e.pkgs
       packages = up2dateUtils.pkglistToString(e.pkgs)
    else:
       packages = ""
    data["version"] = "0"
    data["name"] = "%s.deps_on_skip_list" % name
        return(29, "The dependency %s is provided by the folowing "\
               "packages: %s, but they are not available due to client "\
               "configuration (skip lists, etc)" % (e.dep, packages), data)
    except up2dateErrors.ConflictError, e:
    if e.rc:
            # we cant marshall long ints, so make sure we cast them to ints
            try:
                tmprc = e.rc
                # old rpm always makes this an int, new rpm makes it a
                # long int, we nee
                if type(e.rc[0][1][2]) == type(1L):
                    tmprc = [ (e.rc[0][0], (e.rc[0][1][0], e.rc[0][1][1],
                                            int(e.rc[0][1][2])) )]

            except TypeError:
                tmprc = "There was a parsing error with the rpm "\
                        "conflict message"
            except OverflowError:
                # must of be a real long int, this shouldnt ever
                # happen in this case, but dont traceback just in case
                tmprc = "There was an overflow error converting "\
                        "the return code to ints"
        data = {'package_conflicts': tmprc}
        else:
        data = {}
    data["version"] = "0"
    data["name"] = "%s.package_conflicts" % name
    return (26, "Failed: There was a package conflict error "\
                "with the package set: %s" % e, data)
    except up2dateErrors.FileConflictError, e:
    if e.rc:
        data = {'package_file_conflicts': e.rc}
    else:
        data = {}
    data["version"] = "0"
    data["name"] = "%s.package_file_conflicts" % name
        return (27, "Failed: There was file conflict error with the "\
                "package set: %s" % e, data)
    except up2dateErrors.DependencySenseError, e:
    data = {}
    if e.sense:
        data = {'dependency_sense':e.sense}
    data["version"] = "0"
    data["name"] = "%s.dependency_sense" % name
    return (28, "There was a dependency sense error with "\
                "the sense: %s" % e.sense, data)
    except up2dateErrors.CommunicationError, e:
        return (21, "Failed: There was a communication error "\
                "talking to the server", {})
    except up2dateErrors.GPGVerificationUnsignedPackageError, e:
    data = {'unsigned_package':e.pkg}
    data["version"] = "0"
    data["name"] = "%s.unsigned_package" % name
        return (22, "Failed: There was a package gpg verification error. "\
                "The error was: %s" % e, data)
    except up2dateErrors.GPGVerificationError, e:
    data = {'gpg_failed_package':e.pkg}
    data["version"] = 0
    data["name"] = "%s.gpg_failed_package" % name
        return (23, "Failed: There was a package gpg verification error. "\
                "The error was: %s" % e, {})
    except up2dateErrors.GPGInstallationError:
        return (24, "Failed: gpg is not properly installed "\
                "on this machine", {})
    except up2dateErrors.GPGKeyringError:
        return (25, "Failed: The package signing key for Red Hat, Inc. "\
                "is not on the gpg keyring", {})
    except up2dateErrors.OutOfSpaceError, e:
    data = {'space_required':e.totalSize}
    data['space_available'] = e.freeDiskSpace
    data['version'] = 0
    data['name'] = "%s.out_of_space" % name
    return (33, "Failed: The was an error installing the package: "\
                "the error was: %s" % e, data)

def rollback(targettid, fromtid):
    try:
        data = _rollback.getTidInfo(targettid)
    except KeyError:
        data = {}
        data['version'] = "0"
        data['name'] = "rollback.rollback.invalid_tid"
        data['tid'] = targettid
        return (35, "Invalid transaction id", data)
    
    data['version'] = "0"
    data['name'] = "rollback.rollback.rollback_info"


    latesttid = _rollback.getLatestTid()

    # we are assuming these tid values are comparable
    # ints
    if int(latesttid) > int(fromtid):
        data['latesttid'] = latesttid
        data['currenttransactions'] = _rollback.getTransactionsData()
        return (36, "from tid is older than latest tid", data)
    
    ret = _catchErrors(_rollback.doRollback, "rollback.doRollback", (targettid,))
    # little odd, if it returns a tuple, it's an error
    if type(ret) == type(()):
        return ret

    # update the time stamp indicating we've updated the package list
    up2dateUtils.touchTimeStamp()
    
    return (0, "rollback completed", data)

def _printHelp():
    print """
--undo        undo the last transaction
--list        show all available transactions
--verbose     enable rpm debugging info (rpm -vv equilivent)
--tid=TID     rollback tid $TID
"""
    
def main():
    import getopt
    import string
    if not len(sys.argv[1:]):
        _printHelp()
        sys.exit()
    try:
        optlist, arglist = getopt.getopt(sys.argv[1:],
                                         'u',
                                         ['undo',
                                          'list',
                                          'verbose',
                                          'tid=',])
    except:
        _printHelp()
    doundo = None
    undotid = None
    list = None
    for opt,arg in optlist:
        if opt == "-u" or opt  == "--undo":
            doundo = 1
        if opt == "--tid":
            undotid = 1
            tid = string.atoi(arg)
        if opt == "--list":
            list = 1
        if opt == "--verbose":
            import rpm
            rpm.setVerbosity(rpm.RPMLOG_DEBUG)


    if list:
        print _rollback.printTransactions()
   
    if doundo or undotid:
    latest = _rollback.getLatestTid()

    if doundo:
        print _rollback.getTidInfo(latest)
        print undo()

    if undotid:
        print _rollback.getTidInfo(tid)
        print rollback(tid, latest)
        

    #print _rollback.getTidInfo(1029893837)
#    print rollback(1037043275, latest)

#    print undo()

    
#    print rollback(1029305278)
    

if __name__ == "__main__":
    main()
    

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