!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-packages/   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:     InstallDruid.py (22.7 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/python
import signal
import gtk
import gtk.glade
import os
import package_gui
import rpm
import getopt
import sys
import locale
import gnome.ui

from method import *
from rhpl.translate import _, N_, textdomain
from Progress import *
from ProgressDialog import SimpleProgressDialog, ProgressCanceled
from rhpl.GenericError import *
from InstallProgressDialog import *
from SummaryModel import SummaryModel
from CompsCheckDialog import *
from UnresolvableDependenciesDialog import *
from LoopDialog import *

from config import *

needsumount = 0

def do_quit(method):
    if needsumount == 1:
#        print "trying to unmount"
        try:
            method.umount()
        except:
            pass
#    print "quitting"
    gtk.main_quit()

class InstallDruid (gtk.Window):
    STATE_CLOSE=0
    STATE_SPLASH=1
    STATE_SYSTEM_INFO=2
    STATE_SELECTION_SCREEN=3
    STATE_DEPS_CHECK=4
    STATE_CONFIRM_INSTALL=5
    STATE_INSTALLING=6
    STATE_SUMMARY=7

    def __init__ (self, cdmethod, mainmethod):
        gtk.Window.__init__ (self, gtk.WINDOW_TOPLEVEL)
        self.simple_progress = None
        self.run_state = self.STATE_SPLASH

        self.set_title(_("Package Management"))

        i = gtk.Invisible()
        i.selection_owner_set("_NAUTILUS_DISABLE_MOUNT_WINDOW")

        if os.environ.has_key("REDHAT_FIRSTBOOT"):
            self.set_position(gtk.WIN_POS_CENTER)

        self.method = cdmethod
        self.fullmethod = mainmethod
        self.usingfulltree = 0

        self.need_setup = True
        self.connect ('delete_event', self.delete_event_cb)
        self.set_default_size (640, 480)

        # get the glade file
        glade_file = "InstallDruid.glade"
        if not os.path.isfile(glade_file):
            glade_file = GLADEDIR + glade_file
        xml = gtk.glade.XML (glade_file, domain=PROGNAME)

        # setup the druid.
        self.druid = gnome.ui.Druid ()
        self.druid.connect ('cancel', self.cancel_cb)
        self.add (self.druid)

        # setup the first page
        self.title_page = gnome.ui.DruidPage ()
        self.title_page.connect ('prepare', self.title_prepare)
        self.title_page.connect ('next', self.title_next)
        xml.get_widget ('title_page_eventbox').modify_bg (gtk.STATE_NORMAL, gtk.gdk.color_parse ("#707070"))
        logo_file_name = self.method.getPixmapFile('package-installer-logo.png', 1)
       if logo_file_name == None:
            logo_file_name = self.method.getPixmapFile('system-config-packages.png')
        xml.get_widget ('title_page_logo_image').set_from_file (logo_file_name)
        watermark_file_name = self.method.getPixmapFile('package-installer-watermark.png')
        if watermark_file_name == None:
            watermark_file_name = RHCPIXMAPSDIR + 'system-config-packages-watermark.png'
        xml.get_widget ('title_page_image').set_from_file (watermark_file_name)
        xml.get_widget ('title_page_welcome_label').set_text (_("Install packages from '%s'") % self.method.getReleaseName())
        dialog = xml.get_widget ('title_page_window')
        vbox = xml.get_widget ('title_page_vbox')
        dialog.remove (vbox)
        self.title_page.add (vbox)
        self.druid.append_page (self.title_page)

        # setup the second page
        self.main_page = gnome.ui.DruidPage ()
        self.main_page.connect ('next', self.main_next)
        self.main_page.connect ('back', self.main_back)
        self.main_page_vbox = xml.get_widget ('main_page_vbox')
        self.main_page.connect ('prepare', self.main_prepare)
        xml.get_widget ('main_page_eventbox').modify_bg (gtk.STATE_NORMAL, gtk.gdk.color_parse ("#707070"))
        xml.get_widget ('main_page_logo_image').set_from_file (logo_file_name)

        dialog = xml.get_widget ('main_page_window')
        vbox = xml.get_widget ('main_page_vbox')
        dialog.remove (vbox)
        self.main_page.add (vbox)
        self.druid.append_page (self.main_page)

        # setup the third page
        self.confirm_page = gnome.ui.DruidPage ()
        self.confirm_page_title_label = xml.get_widget ('confirm_page_title_label')
        self.confirm_page_summary_label = xml.get_widget ('confirm_page_summary_label')
        tree_view = xml.get_widget ('confirm_page_description_tree_view')
        setup_summary_tree (tree_view)
        self.confirm_page_description_model = SummaryModel ()
        tree_view.set_model (self.confirm_page_description_model)
        self.confirm_page.connect ('next', self.confirm_next)
        self.confirm_page.connect ('back', self.confirm_back)
        self.confirm_page_vbox = xml.get_widget ('confirm_page_vbox')
        self.confirm_page.connect ('prepare', self.confirm_prepare)
        xml.get_widget ('confirm_page_eventbox').modify_bg (gtk.STATE_NORMAL, gtk.gdk.color_parse ("#707070"))
        xml.get_widget ('confirm_page_logo_image').set_from_file (logo_file_name)

        dialog = xml.get_widget ('confirm_page_window')
        vbox = xml.get_widget ('confirm_page_vbox')
        dialog.remove (vbox)
        self.confirm_page.add (vbox)
        self.druid.append_page (self.confirm_page)

        # setup the last page
        self.summary_page = gnome.ui.DruidPage ()
        self.summary_page_title_label = xml.get_widget ('summary_page_title_label')
        self.summary_page_summary_label = xml.get_widget ('summary_page_summary_label')
        self.summary_page.connect ('finish', self.summary_finish)
        self.summary_page_vbox = xml.get_widget ('summary_page_vbox')
        self.summary_page.connect ('prepare', self.summary_prepare)
        xml.get_widget ('summary_page_eventbox').modify_bg (gtk.STATE_NORMAL, gtk.gdk.color_parse ("#707070"))
        xml.get_widget ('summary_page_logo_image').set_from_file (logo_file_name)
        xml.get_widget ('summary_page_image').set_from_file (watermark_file_name)

        dialog = xml.get_widget ('summary_page_window')
        vbox = xml.get_widget ('summary_page_vbox')
        dialog.remove (vbox)
        self.summary_page.add (vbox)
        self.druid.append_page (self.summary_page)

        # Done.
        self.show_all ()

    def cancel_cb (self, *args):
        if self.run_state == self.STATE_SPLASH or \
               self.run_state == self.STATE_SELECTION_SCREEN or \
               self.run_state == self.STATE_CONFIRM_INSTALL or \
               self.run_state == self.STATE_SUMMARY:
            do_quit(self.method)
        elif self.run_state == self.STATE_SYSTEM_INFO or \
                 self.run_state == self.STATE_DEPS_CHECK:
            self.simple_progress.cancel ()
        elif self.run_state == self.STATE_INSTALLING:
            return True
        self.run_state = self.STATE_CLOSE
        return True

    def delete_event_cb (self, window, event):
#        print self.run_state
        if self.run_state == self.STATE_SPLASH or \
               self.run_state == self.STATE_SELECTION_SCREEN or \
               self.run_state == self.STATE_CONFIRM_INSTALL or \
               self.run_state == self.STATE_SUMMARY:
            do_quit(self.method)
        elif self.run_state == self.STATE_SYSTEM_INFO or \
                 self.run_state == self.STATE_DEPS_CHECK:
            self.simple_progress.cancel ()
        self.run_state = self.STATE_CLOSE
        return True

    def title_prepare (self, druid_page, druid):
        self.run_state = self.STATE_SPLASH
        self.druid.set_buttons_sensitive (False, True, True, True)

    def title_next (self, druid_page, druid):
        self.run_state = self.STATE_SYSTEM_INFO
        gtk.main_quit ()
        return True

    def screen_changed (self, screen):
        self.to_install = False
        self.to_remove = False
        for package in self.comps.hdrlist.values():
            if package.installState == TOINSTALL:
                self.to_install = True
            if package.installState == TOREMOVE:
                self.to_remove = True

        if self.to_install or self.to_remove:
            self.druid.set_buttons_sensitive (True, True, True, True)
        else:
            self.druid.set_buttons_sensitive (True, False, True, True)
        
    def main_prepare (self, druid_page, druid):
        self.run_state = self.STATE_SELECTION_SCREEN
        self.druid.set_buttons_sensitive (True, True, True, True)
        self.changed_id = self.screen.connect ('changed', self.screen_changed)
        self.screen_changed (self.screen)

    def main_back (self, druid_page, druid):
        if self.changed_id:
            self.screen.disconnect (self.changed_id)
        self.changed_id = 0
        self.run_state = self.STATE_SPLASH
        gtk.main_quit ()
        return True

    def main_next (self, druid_page, druid):
        if self.changed_id:
            self.screen.disconnect (self.changed_id)
        self.changed_id = 0
        self.run_state = self.STATE_DEPS_CHECK
        gtk.main_quit ()
        return True

    def confirm_prepare (self, druid_page, druid):
        self.install_count = 0
        self.remove_count = 0
        size_delta = 0
        install_list = []
        remove_list = []

        for te in self.ts:
            package_name = GroupSet.tenevra(te)
            package = self.comps.hdrlist[package_name]
            
            if te.Type() == (1 << 0): # TR_ADDED
                self.install_count += 1
                size_delta += package[rpm.RPMTAG_SIZE]
                install_list.append ( (package_name, size_string (package[rpm.RPMTAG_SIZE])))
            elif te.Type() == (1 << 1): # TR_REMOVED
                self.remove_count += 1
                size_delta -= package[rpm.RPMTAG_SIZE]
                remove_list.append ( (package_name, size_string (package[rpm.RPMTAG_SIZE])))

        assert (install_list != [] or remove_list !=[])
        summary_label_text = ""
        if install_list != [] and remove_list != []:
            self.confirm_page_title_label.set_markup (_("<span size=\"xx-large\" color=\"white\">Package Update Overview</span>"))
        elif remove_list == []:
            self.confirm_page_title_label.set_markup (_("<span size=\"xx-large\" color=\"white\">Package Installation Overview</span>"))
        else:
            self.confirm_page_title_label.set_markup (_("<span size=\"xx-large\" color=\"white\">Package Removal Overview</span>"))
        summary_label_text = ""
        if self.install_count == 1:
            summary_label_text += _("%d package is queued for installation\n") % self.install_count
        elif self.install_count > 1:
            summary_label_text += _("%d packages are queued for installation\n") % self.install_count
        if self.remove_count == 1:
            summary_label_text += _("%d package is queued for removal\n") % self.remove_count
        elif self.remove_count > 1:
            summary_label_text += _("%d packages are queued for removal\n") % self.remove_count
        summary_label_text += "\n"
        if size_delta < 0:
            summary_label_text += _("This will free up %s of diskspace.") % size_string (size_delta * -1)
        else:
            summary_label_text += _("This will take %s of diskspace.") % size_string (size_delta)

        if self.remove_count > MAX_PACKAGE_REMOVE_WARN:
            summary_label_text += "\n\n<b>" + _("Warning:") + "</b> "
            summary_label_text += _("An excessive number of packages are queued for removal.  Please check the list below to confirm that all the packages should be removed.")
        self.confirm_page_summary_label.set_text (summary_label_text)
        self.confirm_page_description_model.set_packages (install_list, remove_list)

    def confirm_back (self, druid_page, druid):
        self.comps.revertState()
        self.run_state = self.STATE_SELECTION_SCREEN
        gtk.main_quit ()
        return True

    def confirm_next (self, druid_page, druid):
        self.run_state = self.STATE_INSTALLING
        gtk.main_quit ()
        return True
        
    def summary_prepare (self, druid_page, druid):
        if self.install_count != 0 and self.remove_count != 0:
            self.summary_page_title_label.set_markup ("<span size=\"xx-large\" color=\"white\">" + _("Package Update Complete") + "</span>")
            self.summary_page_summary_label.set_text (_("The packages were updated successfully."))
        elif self.install_count != 0:
            self.summary_page_title_label.set_markup ("<span size=\"xx-large\" color=\"white\">" + _("Package Installation Complete") + "</span>")
            self.summary_page_summary_label.set_text (_("The packages were installed successfully."))
        else:
            self.summary_page_title_label.set_markup ("<span size=\"xx-large\" color=\"white\">" + _("Package Removal Complete") + "</span>")
            self.summary_page_summary_label.set_text (_("The packages were removed successfully."))

        self.druid.set_buttons_sensitive (False, True, True, True)
        self.druid.set_show_finish (True)
        self.druid.finish.set_label (_("Finish"))

    def summary_finish (self, druid_page, druid):
        self.run_state = self.STATE_CLOSE
        gtk.main_quit ()
        return True
        

    def do_system_info_state (self, get_full = 0):
        if self.need_setup or get_full == 1:
            try:
                self.simple_progress = SimpleProgressDialog ("<span weight=\"bold\" size=\"larger\">" + _("Checking system package status") + "</span>\n\n" + _("The package manager program is searching your system to determine which packages are currently installed."),  _("Checking System Status"),_("Checking System Status"), self)
                self.simple_progress.get_dialog().set_modal (True)
                self.simple_progress.get_dialog().show ()
                self.simple_progress.get_dialog().window.set_functions (gtk.gdk.FUNC_MOVE | gtk.gdk.FUNC_MINIMIZE)

                # I don't trust that all window managers will honor the Motif hints.
                def no_delete (*args):
                    return True
                self.simple_progress.get_dialog().connect ('delete_event', no_delete)

                # FIXME: this is a hack.  if we're getting the full info,
                # get the header list from the full method and then add
                # (aka merge) them into the main hdrlist
                self.simple_progress.prepare_block (0.2, _("Reading RPM Headers"))
                if get_full == 0:
                    hdlist = self.method.readHeaders()
                else:
                    hdlist = self.fullmethod.readHeaders()
                    self.comps.hdrlist.addHeaders(hdlist.hdlist,
                                                  self.fullmethod)
                    hdlist = self.comps.hdrlist
                    self.usingfulltree = 1
                self.simple_progress.update (1.0)
                    

                self.simple_progress.prepare_block (0.3, _("Processing Headers"))
                hdlist.mergeRpmDb()
                self.simple_progress.update (1.0)

                self.simple_progress.prepare_block (0.5, _("Reading system state"))
                if get_full == 0:
                    self.comps = self.method.readCompsViaMethod(hdlist, self.simple_progress.update)
#                else:
#                    self.comps.setupStateDicts(self.comps.packages)
                self.simple_progress.update (1.0)
                self.simple_progress.destroy ()
                self.simple_progress = None

                if get_full == 0:
                    # successfully got the system info.  Now make the
                    # install screen.
                    self.screen = package_gui.PackageSelectionWindow()
                    screen_widget = self.screen.getScreen(self.comps,
                                                          self.method)
                    screen_widget.show_all()
                    self.main_page_vbox.pack_start (screen_widget, True, True)
                    self.need_setup = False
            except ProgressCanceled:
                self.run_state = self.STATE_CLOSE
                return
        self.run_state = self.STATE_SELECTION_SCREEN

    def do_deps_check_state (self):
        try:
            self.simple_progress = SimpleProgressDialog ("<span weight=\"bold\" size=\"larger\">" + _("Preparing System Update") + "</span>\n\n" + _("Prior to system update, this tool must determine which packages need upgrading.  This may take a few minutes."),  _("Preparing System Update"),_("Preparing System Update"), self)
            self.simple_progress.get_dialog().set_modal (True)
            self.simple_progress.get_dialog().show ()
            def delete_event (window, event, dialog):
                dialog.cancel ()
                return True
            self.simple_progress.get_dialog().connect ('delete_event', delete_event, self.simple_progress)
            self.ts = self.method.setupTransaction(self.comps,
                                                   self.simple_progress)
        except CancelInstallation:
            self.run_state = self.STATE_SELECTION_SCREEN
        except DepsCheckLoop:
            # Immediately destroy the deps check.
            self.simple_progress.destroy ()
            self.simple_progress = None
            dialog = LoopDialog (sys.exc_value.install_list, sys.exc_value.remove_list, self)
            result = dialog.run ()
            if result == LOOP_RESPONSE_KEEP:
#                print 'ADD THE FILES'
                self.run_state = self.STATE_CONFIRM_INSTALL
            elif result == LOOP_RESPONSE_REMOVE:
#                print 'REMOVE THE FILES'
                self.run_state = self.STATE_CONFIRM_INSTALL
            else:
                self.run_state = self.STATE_SELECTION_SCREEN
            return
        except DepsCheckComps:
            self.simple_progress.destroy ()
            self.simple_progress = None
            dialog = CompsCheckDialog (sys.exc_value.failed_list, sys.exc_value.unremovable_list, self)
            dialog.run ()
            self.run_state = self.STATE_SELECTION_SCREEN
            return
        except UnresolvableDependencies:
            self.simple_progress.destroy ()
            self.simple_progress = None
            if self.usingfulltree == 1:
                dialog = UnresolvableDependenciesDialog (sys.exc_value.unresolvable_dependencies, self)
                dialog.run ()
                self.run_state = self.STATE_SELECTION_SCREEN
                return
            else:
                self.do_system_info_state(get_full = 1)
                self.run_state = self.STATE_DEPS_CHECK
                return
        else:
            self.run_state = self.STATE_CONFIRM_INSTALL
        self.simple_progress.destroy ()
        self.simple_progress = None

    def do_install_state (self):
        if self.install_count != 0 and self.remove_count != 0:
            title = _("Upgrading System")
            dialog_string = "<span weight=\"bold\" size=\"larger\">" + _("Upgrading System") + "</span>\n\n" + _("Installing and removing individual packages.")
        elif self.install_count != 0:
            title = _("Installing Packages")
            dialog_string = "<span weight=\"bold\" size=\"larger\">" + _("Installing Packages") + "</span>\n\n" + _("Adding individual packages to the system.")
        else:
            title = _("Removing Packages")
            dialog_string = "<span weight=\"bold\" size=\"larger\">" + _("Removing Packages") + "</span>\n\n" + _("Removing individual packages from the system.")

        self.simple_progress = SimpleProgressDialog (dialog_string,  title,_("System Update"), self)
        self.simple_progress.get_dialog().set_modal (True)
        self.simple_progress.get_dialog().show ()
        self.simple_progress.get_dialog().window.set_functions (gtk.gdk.FUNC_MOVE | gtk.gdk.FUNC_MINIMIZE)

        # I don't trust that all window managers will honor the Motif hints.
        def no_delete (*args):
            return True
        self.simple_progress.get_dialog().connect ('delete_event', no_delete)

        self.method.installPackages(self.ts, self.comps, self.simple_progress)
        self.simple_progress.destroy ()
        self.simple_progress = None
        self.run_state = self.STATE_SUMMARY

    def run (self):
        while 1:
            if self.run_state == self.STATE_SPLASH:
                self.druid.set_page (self.title_page)
                gtk.main()
            elif self.run_state == self.STATE_SELECTION_SCREEN:
                self.druid.set_page (self.main_page)
                gtk.main()
            elif self.run_state == self.STATE_CONFIRM_INSTALL:
                self.druid.set_page (self.confirm_page)
                gtk.main()
            elif self.run_state == self.STATE_SUMMARY:
                self.druid.set_page (self.summary_page)
                gtk.main()
            elif self.run_state == self.STATE_SYSTEM_INFO:
                self.do_system_info_state ()
            elif self.run_state == self.STATE_DEPS_CHECK:
                self.do_deps_check_state ()
            elif self.run_state == self.STATE_INSTALLING:
                self.do_install_state ()
            elif self.run_state == self.STATE_CLOSE:
                return
        
def help():
    sys.stderr.write("Usage: system-cdinstall-helper [--mountpoint=PATH] [--ismounted] [--cdtree=PATH]\n\t%s\n" %(default_args_help(),))


if __name__ == '__main__':
    locale.setlocale(locale.LC_ALL,"")
    signal.signal (signal.SIGINT, signal.SIG_DFL)

    longargs = default_long_args()
    longargs.extend(['cdtree=', 'mountpoint=', 'ismounted', 'firstboot'])
    try:
        (args, extra) = getopt.getopt(sys.argv[1:], default_short_args(),
                                      longargs)
    except getopt.GetoptError, e:
        sys.stderr.write(str(e))
        sys.stderr.write("\n")
        help()
        sys.exit(1)

    cdmethod = None
    mountpoint = "/mnt/cdrom"
    mounted = 0
          
    for (arg, val) in args:
        if (arg == '--help'):
            help()
            sys.exit(0)
        # if run from firstboot, we want to come up centered which has to
        # be app specific hacks instead of metacity.  bleah
        elif (arg == '--firstboot'):
            os.environ["REDHAT_FIRSTBOOT"] = "1"
        elif (arg == '--cdtree'):
            cdmethod = TreeInstallMethod(val)
        elif (arg == '--mountpoint'):
            mountpoint = val
        elif (arg == '--ismounted'):
            mounted = 1

    needsumount = not mounted
        
    mainmethod = get_method(args)

    if cdmethod is None:
        cdmethod = CdromInstallMethod(mountpoint = mountpoint,
                                      alreadyMounted = mounted)

    if os.geteuid() != 0:
        GenericError (TYPE_ERROR,
                      _("Your account does not have permissions to run %s.") % "system-cdinstall-helper",
                      _("Administrator level permissions are needed to run this program because it can install and remove system packages.")).display ()
        sys.exit (1)

    textdomain(PROGNAME)
    gtk.glade.bindtextdomain(PROGNAME, "/usr/share/locale")

    druid = InstallDruid (cdmethod, mainmethod)

    druid.run ()

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