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


Viewing file:     mainWindow.py (13.27 KB)      -rwxr-xr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# -*- coding: utf-8 -*-

## mainWindow.py - Contains the UI code needed for system-config-nfs
## Copyright (C) 2002, 2003 Red Hat, Inc.
## Copyright (C) 2002, 2003 Brent Fox <bfox@redhat.com>
## Copyright (C) 2005 Nils Philippsen <nphilipp@redhat.com>

## 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 nfsServer
import gtk
import gtk.glade
import gobject
import string
import os
import sys

import propertiesWindow

##
## I18N
##
from rhpl.translate import _, N_
import rhpl.translate as translate
domain = 'system-config-nfs'
translate.textdomain (domain)
gtk.glade.bindtextdomain (domain)

##
## Icon for windows
##

iconPixbuf = None      
try:
    iconPixbuf = gtk.gdk.pixbuf_new_from_file("/usr/share/system-config-nfs/pixmaps/system-config-nfs.png")
except:
    pass

class mainWindow:
    SHARE_PATH = 0
    SHARE_CLIENT = 1
    SHARE_PERM = 2
    SHARE_SHARE_OBJ = 3
    SHARE_CLIENT_OBJ = 4

    def destroy(self, *args):
        if gtk.__dict__.has_key ('main_quit'):
            gtk.main_quit ()
        else:
            gtk.mainquit()
        return True
    
    def __init__(self):
        if os.access ("system-config-nfs.glade", os.F_OK):
            self.xml = gtk.glade.XML ("system-config-nfs.glade", domain=domain)
        else:
            self.xml = gtk.glade.XML ("/usr/share/system-config-nfs/system-config-nfs.glade", domain=domain)

        self.mainWindow = self.xml.get_widget ('mainWindow')

        self.mainWindow.set_icon(iconPixbuf)
        self.mainWindow.set_position(gtk.WIN_POS_CENTER)
        self.xml.signal_connect ('on_mainWindow_delete_event', self.destroy)

        # [0 dir, 1 hosts, 2 read/write text, 3 nfsDataObject]

        self.exportsStore = gtk.ListStore(gobject.TYPE_STRING,
                gobject.TYPE_STRING,
                gobject.TYPE_STRING,
                gobject.TYPE_PYOBJECT,
                gobject.TYPE_PYOBJECT)

        self.exportsView = self.xml.get_widget ("exportsView")
        self.exportsView.set_model (self.exportsStore)
        self.exportsView.connect ("row-activated", self.on_propertiesButton_clicked)
        #self.exportsView.columns_autosize()

        self.col = gtk.TreeViewColumn(_("Directory"), gtk.CellRendererText(), text=self.SHARE_PATH)
#        self.col.set_spacing(235)
        self.exportsView.append_column(self.col)
        self.col = gtk.TreeViewColumn(_("Hosts"), gtk.CellRendererText(), text=self.SHARE_CLIENT)
        self.col.set_spacing(235)
        self.exportsView.append_column(self.col)
        self.col = gtk.TreeViewColumn(_("Permissions"), gtk.CellRendererText(), text=self.SHARE_PERM)
        self.exportsView.append_column(self.col)

        self.menuBar = self.xml.get_widget ('menuBar')
        self.xml.signal_connect ("on_addShareMenu_activate", self.on_addButton_clicked)
        self.xml.signal_connect ("on_propertiesMenu_activate", self.on_propertiesButton_clicked)
        self.xml.signal_connect ("on_deleteMenu_activate", self.on_deleteButton_clicked)
        self.xml.signal_connect ("on_quitMenu_activate", self.destroy)
        self.xml.signal_connect ("on_serverSettingsMenu_activate", self.on_serverSettingsButton_clicked)
        self.xml.signal_connect ("on_helpMenu_activate", self.on_helpButton_clicked)
        self.xml.signal_connect ("on_aboutMenu_activate", self.on_aboutButton_clicked)

        self.propertiesMenu = self.xml.get_widget ("propertiesMenu")
        self.deleteMenu = self.xml.get_widget ("deleteMenu")

        self.toolbar = self.xml.get_widget ('toolBar')

        self.addButton = self.xml.get_widget ('addButton')
        self.xml.signal_connect ('on_addButton_clicked', self.on_addButton_clicked)
        self.propertiesButton = self.xml.get_widget ("propertiesButton")
        self.xml.signal_connect ('on_propertiesButton_clicked', self.on_propertiesButton_clicked)
        
        self.deleteButton = self.xml.get_widget ("deleteButton")
        self.xml.signal_connect ('on_deleteButton_clicked', self.on_deleteButton_clicked)

        self.serverSettingsButton = self.xml.get_widget ("serverSettingsButton")
        self.xml.signal_connect ('on_serverSettingsButton_clicked', self.on_serverSettingsButton_clicked)

        self.helpButton = self.xml.get_widget ("helpButton")
        self.xml.signal_connect ('on_helpButton_clicked', self.on_helpButton_clicked)

        self.xml.signal_connect ('on_serverSettings_changed', self.on_serverSettings_changed)

        self.propertiesMenu.set_sensitive(False)
        self.deleteMenu.set_sensitive(False)
        self.propertiesButton.set_sensitive(False)
        self.deleteButton.set_sensitive(False)

        self.server = nfsServer.nfsServer ()
        self.exports = self.server.exports
        self.exports.consolidateShares ()
        self.populateExportsList()

        if len (self.exports.warnings):
            dlg = self.xml.get_widget ('warningDialog')
            textview = self.xml.get_widget ('warningTextView')
            textbuffer = textview.get_buffer ()
            lines = '\n'.join (map (lambda x: "line %d: %s" % (x[0], x[1]), self.exports.warnings))
            textbuffer.set_text (lines)
            if dlg.run () == gtk.RESPONSE_CANCEL:
                sys.exit ()
            dlg.destroy ()

        self.propWindow = propertiesWindow.propertiesWindow(self, self.exports, self.exportsStore, self.exportsView)
        self.serverSettingsWindow = self.xml.get_widget ("serverSettingsDialog")
        for entry in ('lockdTcpPortEntry', 'lockdUdpPortEntry', 'mountdTcpPortEntry', 'statdTcpPortEntry'):
            setattr (self, entry, self.xml.get_widget (entry))
        self.serverSettingsOKButton = self.xml.get_widget ('serverSettingsOKButton')

        #self.mainWindow.set_size_request(600, 500)

        self.selectedRow = -1
        self.changed = False
        
        self.createHandler = None
        self.modifyHandler = None

#        self.exportsList.columns_autosize()
        self.mainWindow.show_all()

        self.exportsView.get_selection().connect("changed", self.on_exportsList_select_row)
        self.exportsView.get_selection().unselect_all()

#        self.exportsList.sort()
        if gtk.__dict__.has_key ('main'):
            gtk.main ()
        else:
            gtk.mainloop()

    def populateExportsList(self):
        shares = self.exports.getShares ()
        for share in shares:
            for client in share.clients:
                #Iterate through the entries and populate the exportsStore
                iter = self.exportsStore.append()
                self.exportsStore.set_value(iter, self.SHARE_PATH, share.path)
                self.exportsStore.set_value(iter, self.SHARE_CLIENT, client.client)
                if client.get ('ro'):
                    self.exportsStore.set_value(iter, self.SHARE_PERM, (_("Read")))
                else:
                    self.exportsStore.set_value(iter, self.SHARE_PERM, (_("Read/Write")))
                self.exportsStore.set_value (iter, self.SHARE_SHARE_OBJ, share)
                self.exportsStore.set_value (iter, self.SHARE_CLIENT_OBJ, [client])

    #--------Event handlers for mainWindow-----#
    def on_helpButton_clicked(self, *args):
        help_page = "file:///usr/share/doc/system-config-nfs-" + "1.3.19" + "/index.html"
        path = "/usr/bin/htmlview"
        
        if path == None:
            dlg = gtk.MessageDialog(None, 0, gtk.MESSAGE_WARNING, gtk.BUTTONS_OK,
                                    (_("Help is not available.")))
            dlg.set_position(gtk.WIN_POS_CENTER)
            dlg.run()
            dlg.destroy()
            return
        
        pid = os.fork()
        if not pid:
            os.execv(path, [path, help_page])

    def on_exportsList_select_row(self, *args):
        store, iter = self.exportsView.get_selection().get_selected()
        if iter:
            self.propertiesButton.set_sensitive(True)
            self.deleteButton.set_sensitive(True)
            self.propertiesMenu.set_sensitive(True)
            self.deleteMenu.set_sensitive(True)
        else:
            self.propertiesButton.set_sensitive(False)
            self.deleteButton.set_sensitive(False)
            self.propertiesMenu.set_sensitive(False)
            self.deleteMenu.set_sensitive(False)

    def on_addButton_clicked(self, *args):
        self.propWindow.new_share (_("Add NFS Share"))
        self.desensitizeWidgets ()

    def on_propertiesButton_clicked(self, *args):
        store, iter = self.exportsView.get_selection().get_selected()
        if iter != None:
            self.propWindow.edit_share(_("Edit NFS Share"), iter)
        self.desensitizeWidgets()
        
    def on_deleteButton_clicked(self, *args):
        self.changed = True
        store, iter = self.exportsView.get_selection().get_selected()

        if iter != None:
            share = self.exportsStore.get_value (iter, self.SHARE_SHARE_OBJ)
            clients = self.exportsStore.get_value (iter, self.SHARE_CLIENT_OBJ)
            self.exports.remove (share, clients)
            self.exportsStore.remove(iter)
        self.desensitizeWidgets()
        self.apply_changes()

    def on_serverSettingsButton_clicked (self, *args):
        self.serverSettingsWindow_populate ()
        result = self.serverSettingsWindow.run ()
        if result == gtk.RESPONSE_OK:
            self.serverSettingsWindow_getvars ()
            self.apply_changes ()
        self.serverSettingsWindow.hide ()

    def on_serverSettings_changed (self, *args):
        valid = True
        for entry in ('lockdTcpPortEntry', 'lockdUdpPortEntry', 'mountdTcpPortEntry', 'statdTcpPortEntry'):
            value = getattr (self, entry).get_text ()
            if value != '':
                try:
                    value = int (value)
                    if value < 1 or value > 65536:
                        raise ValueError ()
                except ValueError:
                    valid = False
                    break
        self.serverSettingsOKButton.set_sensitive (valid)

    def serverSettingsWindow_populate (self):
        for entry, varname in (('lockdTcpPortEntry', 'LOCKD_TCPPORT'), ('lockdUdpPortEntry', 'LOCKD_UDPPORT'), ('mountdTcpPortEntry', 'MOUNTD_PORT'), ('statdTcpPortEntry', 'STATD_PORT')):
            value = self.server.settings.get (varname)
            if value:
                getattr (self, entry).set_text (value)
        self.on_serverSettings_changed ()

    def serverSettingsWindow_getvars (self):
        for entry, varname in (('lockdTcpPortEntry', 'LOCKD_TCPPORT'), ('lockdUdpPortEntry', 'LOCKD_UDPPORT'), ('mountdTcpPortEntry', 'MOUNTD_PORT'), ('statdTcpPortEntry', 'STATD_PORT')):
            value = getattr (self, entry).get_text ()
            if value != '':
                self.server.settings.set (varname, value)
            else:
                self.server.settings.unset (varname)

    def apply_changes(self, *args):
        self.changed = False

        self.exports.writeFile ()
        self.server.settings.write ()
        self.server.startNfs ()
        self.server.exportFs ()

    def desensitizeWidgets(self, *args):
        self.exportsView.get_selection().unselect_all()
        self.propertiesButton.set_sensitive(False)
        self.deleteButton.set_sensitive(False)
        self.propertiesMenu.set_sensitive(False)
        self.deleteMenu.set_sensitive(False)        

    def on_aboutButton_clicked(self, *args):
        if not self.__dict__.has_key ('aboutDialog'):
            self.aboutDialogPrepare ()
        self.aboutDialog.show ()
        self.aboutDialogShown = True

    def on_aboutDialog_close (self, *args):
        self.aboutDialog.hide ()
        self.aboutDialogShown = False
        return True

    def aboutDialogPrepare (self):
       holders = [
            # year(s), holder, optional email
            [ "2002-2006", "Red Hat, Inc." ],
            [ "2002-2004", "Brent Fox", "bfox@redhat.com" ],
            [ "2002-2003", "Tammy Fox", "tfox@redhat.com" ],
            [ "2004-2006", "Nils Philippsen", "nphilipp@redhat.com" ]
        ]
        holders_strings = []
        for holderinfo in holders:
            (year, holder) = holderinfo[0:2]
            try:
                email = holderinfo[2]
                holders_strings.append (_('Copyright (c) %s %s <%s>') % (year, holder, email))
            except IndexError:
                holders_strings.append (_('Copyright (c) %s %s') % (year, holder))

        holders_label_string = "\n".join (holders_strings)
        label = self.xml.get_widget ('copyrightHolderLabel')
        label.set_text (holders_label_string)

        self.aboutDialog = self.xml.get_widget ('aboutDialog')
        self.aboutDialog.set_icon(iconPixbuf)
        self.xml.signal_connect ('on_aboutDialog_delete_event', self.on_aboutDialog_close)
        self.xml.signal_connect ('on_aboutDialogCloseButton_clicked', self.on_aboutDialog_close)
        self.aboutDialogShown = False

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