!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-samba/   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 (20.09 KB)      -rwxr-xr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
## mainWindow.py - Contains the main UI for system-config-samba
## Copyright (C) 2002, 2003 Red Hat, Inc.
## Copyright (C) 2002, 2003 Brent Fox <bfox@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 sambaBackend
import sambaParser
import sambaToken
import gtk
import gobject
import string
import os
import gtk.glade
import basicPreferencesWin
import sambaUserWin
import sambaUserData
import shareWindow

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

##
## Icon for windows
##

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

class MainWindow:
    def __init__(self, debug_flag=None):
        self.debug_flag = debug_flag

        if os.access("system-config-samba.glade", os.F_OK):
            self.xml = gtk.glade.XML ("system-config-samba.glade", domain="system-config-samba")
        else:
            self.xml = gtk.glade.XML ("/usr/share/system-config-samba/system-config-samba.glade", domain="system-config-samba")

            
#        [0 dir, 1 hosts, 2 permissions, 3 visibility, 4 description, 5 sambaDataObject]
        self.share_store = gtk.ListStore(gobject.TYPE_STRING,
                gobject.TYPE_STRING,
                gobject.TYPE_STRING,
                gobject.TYPE_STRING,
                gobject.TYPE_STRING,
                gobject.TYPE_PYOBJECT)

        self.main_window = gtk.Window()
        self.main_window.set_title(_("Samba Server Configuration"))
        self.main_window.connect("delete-event", self.destroy)
        self.main_window.set_position(gtk.WIN_POS_CENTER)
        self.main_window.set_icon(iconPixbuf)
        self.nameTag = _("Samba")
        self.commentTag = _("Create, modify, and delete samba shares")

        #Initialize Global Samba data store
        self.samba_data = sambaParser.SambaParser(self)
        self.processSambaData(self.samba_data)

        #Initialize Samba Backend
        self.samba_backend = sambaBackend.SambaBackend()

        #Initialize Samba User Backend
        self.samba_user_data = sambaUserData.SambaUserData(self)

        #Initialize Samba User Window
        self.samba_user_win = sambaUserWin.SambaUserWin(self, self.xml, self.samba_user_data, self.main_window)

        self.basic_preferences_win = basicPreferencesWin.BasicPreferencesWin(self, self.xml, self.samba_data, self.samba_backend, self.main_window)
        self.share_win = shareWindow.ShareWindow(self, self.xml, self.samba_data, self.samba_user_data, self.samba_backend, self.main_window)
        
        self.toplevel_vbox = gtk.VBox(False)
        self.menu_bar = gtk.MenuBar()

        self.share_view = gtk.TreeView(self.share_store)
        self.share_view.set_rules_hint(True)
        self.share_view.columns_autosize()
        self.share_view_sw = gtk.ScrolledWindow()
        self.share_view_sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        self.share_view_sw.set_shadow_type(gtk.SHADOW_IN)
        self.share_view_sw.add(self.share_view)

        col = gtk.TreeViewColumn(_("Directory"), gtk.CellRendererText(), text=0)
#        col.set_spacing(235)
        self.share_view.append_column(col)
        col = gtk.TreeViewColumn(_("Share name"), gtk.CellRendererText(), text=1)
        self.share_view.append_column(col)
        col = gtk.TreeViewColumn(_("Permissions"), gtk.CellRendererText(), text=2)
        self.share_view.append_column(col)
        col = gtk.TreeViewColumn(_("Visibility"), gtk.CellRendererText(), text=3)
        self.share_view.append_column(col)
        col = gtk.TreeViewColumn(_("Description"), gtk.CellRendererText(), text=4)   
        col.set_spacing(235)
        self.share_view.append_column(col)

        if not (gtk.__dict__.has_key ("ActionGroup") and gtk.__dict__.has_key ("UIManager")):
            accel_group = gtk.AccelGroup()
            item_fac = gtk.ItemFactory(gtk.MenuBar, "<main>", accel_group)
            self.main_window.add_accel_group(accel_group)
            item_fac.create_items([
                ('/' + _('_File'),                                None,    None, 0, '<Branch>'),
                ('/' + _('_File') + '/' + _('_Add Share'),        None,    self.onNewButtonClicked, 6, '<StockItem>', gtk.STOCK_ADD),
                ('/' + _('_File') + '/' + _('_Properties'),       None,    self.onPropertiesButtonClicked, 6, '<StockItem>', gtk.STOCK_PROPERTIES),
                ('/' + _('_File') + '/' + _('_Delete'),           None,    self.onDeleteButtonClicked, 6, '<StockItem>', gtk.STOCK_DELETE),
                ('/' + _('_File') + '/separator',                 None,    None, 0, '<Separator>', ''),
                ('/' + _('_File') + '/' + _('_Quit'),             None,    self.destroy, 6, '<StockItem>', gtk.STOCK_QUIT),
                ('/' + _('_Preferences'),                         None,    None, 0, '<Branch>'),
                ('/' + _('_Preferences') + '/' + _('_Server Settings...'),
                                                                  None,    self.onBasicPreferencesClicked, 1, '<StockItem>', gtk.STOCK_PREFERENCES),
    #            ('/' + _(_Preferences) + '/' + _('_Advanced Preferences...'),  None,   self.onAdvancedPreferencesClicked, 2, ''),
                ('/' + _('_Preferences') + '/' + _('Samba _Users...'),
                                                                  None,    self.onModifyUsersClicked, 3, ''),
                ('/' + _('_Help'),                                None,    None, 0, '<Branch>'),
                ('/' + _('_Help') + '/' + _('_Contents'),         None,    self.onHelpClicked, 1, '<StockItem>', gtk.STOCK_HELP),
                ('/' + _('_Help') + '/' + _('_About'),            None,    self.onAboutClicked, 2, ''),
                ])
            self.menu_bar = item_fac.get_widget('<main>')

            self.actionMenu = self.menu_bar.get_children()[0].get_submenu()        
            self.propertiesMenu = self.actionMenu.get_children()[1]
            self.deleteMenu = self.actionMenu.get_children()[2]

            self.toolbar = gtk.Toolbar()

            button = self.toolbar.insert_stock('gtk-add', _("Add a samba share"), None, self.onNewButtonClicked, None, 0)
            image, label = button.get_children()[0].get_children()
            label.set_text(_("_Add"))
            label.set_use_underline(True)

            self.properties_button = self.toolbar.insert_stock('gtk-properties', _("Edit the properties of the selected directory"), None, self.onPropertiesButtonClicked, None, 1)
            image, label = self.properties_button.get_children()[0].get_children()
            label.set_text(_("P_roperties"))
            label.set_use_underline(True)

            self.delete_button = self.toolbar.insert_stock('gtk-delete', _("Delete the selected directory"), None, self.onDeleteButtonClicked, None, 2)
            image, label = self.delete_button.get_children()[0].get_children()
            label.set_text(_("_Delete"))
            label.set_use_underline(True)
        
            self.toolbar.insert_stock('gtk-help', _("View help"), None, self.onHelpClicked, None, 3)

            self.toplevel_vbox.pack_start(self.menu_bar, False)        
            self.toplevel_vbox.pack_start(self.toolbar, False)
        else:
            ui_string = """<ui>
                <menubar name='Menubar'>
                    <menu action='FileMenu'>
                        <menuitem action='Add'/>
                        <menuitem action='Properties'/>
                        <menuitem action='Delete'/>
                        <separator />
                        <menuitem action='Quit'/>
                    </menu>
                    <menu action='Preferences'>
                        <menuitem action='Settings'/>
                        <menuitem action='Users'/>
                    </menu>
                    <menu action='Help'>
                        <menuitem action='Contents'/>
                        <menuitem action='About'/>
                    </menu>
                </menubar>
                <toolbar name='Toolbar'>
                    <toolitem action='Add'/>
                    <toolitem action='Properties'/>
                    <toolitem action='Delete'/>
                    <toolitem action='HelpB'/>
                </toolbar>
            </ui>"""

            ag = gtk.ActionGroup('WindowActions')
            actions = [
                ('FileMenu', None, _('_File')),
                ('Add',        gtk.STOCK_ADD, _('_Add Share'), None, _('Add a Samba share'), self.onNewButtonClicked),
                ('Properties',    gtk.STOCK_PROPERTIES, _('_Properties'), None, _('Edit the properties of the selected directory'), self.onPropertiesButtonClicked),
                ('Delete',    gtk.STOCK_DELETE, _('_Delete'), None, _('Delete the selected directory'), self.onDeleteButtonClicked),
                ('Quit',     gtk.STOCK_QUIT, _('_Quit'), None, _('Quit program'), self.destroy),
                ('Preferences', None, _('_Preferences')),
                ('Settings', gtk.STOCK_PREFERENCES, _('_Server Settings...'), None, _('Server Settings'), self.onBasicPreferencesClicked),
                ('Users', '', _('Samba _Users...'), None, _('Samba Users'), self.onModifyUsersClicked),
                ('Help', None, _('_Help')),
                ('HelpB', gtk.STOCK_HELP, _('_Help'), None, _('Help Contents'), self.onHelpClicked),
                ('Contents', gtk.STOCK_HELP, _('_Contents'), None, _('View Help'), self.onHelpClicked),
                ('About', '', _('_About'), None, _('About the program'), self.onAboutClicked)
                ]

            ag.add_actions(actions)
            self.main_window.ui = gtk.UIManager()
            self.main_window.ui.insert_action_group(ag, 0)
            self.main_window.ui.add_ui_from_string(ui_string)
            self.main_window.add_accel_group(self.main_window.ui.get_accel_group())

            self.properties_button = self.main_window.ui.get_widget('/Toolbar/Properties')
            self.delete_button = self.main_window.ui.get_widget('/Toolbar/Delete')
            self.propertiesMenu = self.main_window.ui.get_widget('/Menubar/FileMenu/Properties')
            self.deleteMenu = self.main_window.ui.get_widget('/Menubar/FileMenu/Delete')

            self.toplevel_vbox.pack_start(self.main_window.ui.get_widget('/Menubar'), expand=False)
            self.toplevel_vbox.pack_start(self.main_window.ui.get_widget('/Toolbar'), expand=False)

        self.properties_button.set_sensitive(False)
        self.delete_button.set_sensitive(False)
        self.propertiesMenu.set_sensitive(False)
        self.deleteMenu.set_sensitive(False)

        #-------------------Packing--------------------#
        self.toplevel_vbox.pack_start(self.share_view_sw, True)
        self.main_window.add(self.toplevel_vbox)
        self.main_window.set_default_size(600, 400)
        self.main_window.set_size_request(600, 200)

        self.selected_row = -1
        self.changed = False
        
        self.create_handler = None
        self.modify_handler = None

        self.main_window.show_all()

#        self.share_view.connect("cursor-changed", self.onShareListSelectRow)
        self.share_view.get_selection().connect("changed", self.onShareListSelectRow)
        self.share_view.connect ("row_activated", self.onShareListActivate)
        self.share_view.get_selection().unselect_all()
        
        if gtk.__dict__.has_key ("main"):
            gtk.main ()
        else:
            gtk.mainloop()

    def processSambaData(self, samba_data):
        sections = samba_data.sections
        sections_dict = samba_data.sections_dict

        #print "sections:", sections
        #print "sections_dict.keys ():", sections_dict.keys ()

        for section_name in sections:
            #print ">>>>", section_name, "<<<<"
            if not section_name in samba_data.getShareHeaders ():
                #print "FOO", section_name
                continue
            section = samba_data.sections_dict[section_name]
            #print "filling UI with section", repr (section)

            iter = self.share_store.append ()
            self.share_store.set_value (iter, 2, _("Read Only"))
            self.share_store.set_value (iter, 3, _("Visible"))

            sharename = string.strip (section.name ,"\n[]")
            self.share_store.set_value (iter, 1, sharename)
            self.share_store.set_value (iter, 5, section)

            for token in section.content:
                if token.type == sambaToken.SambaToken.SAMBA_TOKEN_KEYVAL:
                    
                    if token.keyname == "path":
                        self.share_store.set_value (iter, 0, token.keyval)
                    elif token.keyname == "read only":

                        if string.lower (token.keyval) == "no":
                            self.share_store.set_value (iter, 2, (_("Read/Write")))
                        else:
                            self.share_store.set_value (iter, 2, (_("Read Only")))

                    elif token.keyname == "writeable" or token.keyname == "writable":
                        if string.lower (token.keyval) == "no":
                            self.share_store.set_value(iter, 2, (_("Read Only")))
                        else:
                            self.share_store.set_value(iter, 2, (_("Read/Write")))

                    elif token.keyname == "browseable" or token.keyname == "browsable":
                        if string.lower (token.keyval) == "no":
                            self.share_store.set_value(iter, 3, (_("Hidden")))
                        else:
                            self.share_store.set_value(iter, 3, (_("Visible")))

                    elif token.keyname == "comment":
                        self.share_store.set_value (iter, 4, token.keyval)

    #--------Event handlers for main_window-----#
    def onShareListSelectRow(self, *args):
        store, iter = self.share_view.get_selection().get_selected()
        if iter:
            self.properties_button.set_sensitive(True)
            self.delete_button.set_sensitive(True)
            self.propertiesMenu.set_sensitive(True)
            self.deleteMenu.set_sensitive(True)
        else:
            self.properties_button.set_sensitive(False)
            self.delete_button.set_sensitive(False)
            self.propertiesMenu.set_sensitive(False)
            self.deleteMenu.set_sensitive(False)

    def onNewButtonClicked(self, *args):
        self.changed = True
        self.share_win.showNewWindow()

    def onShareListActivate (self, *args):
        self.showPropertiesDialog ()

    def onPropertiesButtonClicked (self, *args):
        self.showPropertiesDialog ()

    def showPropertiesDialog (self):
        self.changed = True
        store, iter = self.share_view.get_selection ().get_selected ()
        if iter != None:
            section = self.share_store.get_value (iter, 5)
            self.share_win.showEditWindow (iter, section)
        
    def onDeleteButtonClicked(self, *args):
        self.changed = True

        
        store, iter = self.share_view.get_selection().get_selected()
        section = self.share_store.get_value(iter, 5)
        #print "deleting", section
        #print "before delete"
        section.delete ()
        #print "after delete"
        self.share_store.remove(iter)

        self.properties_button.set_sensitive(False)
        self.delete_button.set_sensitive(False)
        self.propertiesMenu.set_sensitive(False)
        self.deleteMenu.set_sensitive(False)

        #Let's go ahead and restart the service.
        self.samba_data.writeFile()
        self.samba_backend.restartSamba()

    def onApplyButtonClicked(self, *args):
        self.changed = True

        self.samba_data.writeFile()
        self.properties_button.set_sensitive(False)
        self.delete_button.set_sensitive(False)
        self.propertiesMenu.set_sensitive(False)
        self.deleteMenu.set_sensitive(False)
        self.share_view.get_selection().unselect_all()

        status = self.samba_backend.isSmbRunning()
        
        result = None
        if not status:
            #smb is not running, so ask the user if they want to start it
            dlg = gtk.MessageDialog(self.main_window, 0, gtk.MESSAGE_WARNING,
                                    gtk.BUTTONS_YES_NO, (_("The Samba service is not "
                                                           "currently running.  Do you "
                                                           "wish to start it?")))
            dlg.set_position(gtk.WIN_POS_CENTER)
            dlg.set_icon(iconPixbuf)
            dlg.set_modal(True)
            dlg.set_transient_for(self.main_window)
            result = dlg.run()
            dlg.destroy()
                                                           
            if result == gtk.RESPONSE_YES:
                #Start smb if the user says 'yes'
                if not self.debug_flag:
                    self.samba_backend.startSamba()
                else:
                    print "cannot start the service in debug mode"

        else:
            #smb is already running, so restart to allow changes to take effect
            if not self.debug_flag:
                self.samba_backend.restartSamba()
            else:
                print "cannot start the service in debug mode"

    def onBasicPreferencesClicked(self, *args):
        self.basic_preferences_win.showWindow()

    def onAdvancedPreferencesClicked(self, *args):
        advanced_preferences_win = self.xml.get_widget("advanced_preferences_win")
        advanced_preferences_win.show_all()

    def onRefreshButtonClicked(self, *args):
        pass

    def onModifyUsersClicked(self, *args):
        self.samba_user_win.showWindow()

    def destroy(self, *args):
#        #Maybe we don't need to restart the service now, so let's comment this line out
#        self.onApplyButtonClicked()
        if gtk.__dict__.has_key ("main_quit"):
            gtk.main_quit ()
        else:
            gtk.mainquit()

    def onAboutClicked(self, *args):
        copyrights = (('2002 - 2005', 'Red Hat, Inc.', None),
                ('2002 - 2004', 'Brent Fox', 'bfox@redhat.com'),
                ('2002 - 2004', 'Tammy Fox', 'tfox@redhat.com'),
                ('2004 - 2005', 'Nils Philippsen', 'nphilipp@redhat.com'))
        copyrighttext = ''
        for year, holder, email in copyrights:
            if email:
                email = '<%s>' % (email)
            else:
                email = ''
            copyrighttext += _("Copyright %s (c) %s %s\n") % (year, holder, email)

        dlg = gtk.MessageDialog (None, 0, gtk.MESSAGE_INFO, gtk.BUTTONS_OK,
                                 _("Samba Server Configuration Tool %s\n%sA graphical interface for configuring SMB shares") % ("1.2.31", copyrighttext))
        dlg.set_title(_("About"))
        dlg.set_default_size(100, 100)
        dlg.set_position (gtk.WIN_POS_CENTER)
        dlg.set_border_width(2)
        dlg.set_modal(True)
        dlg.set_transient_for(self.main_window)
        dlg.set_icon(iconPixbuf)
        rc = dlg.run()
        dlg.destroy()

    def onHelpClicked(self, *args):
        help_page = "file:///usr/share/doc/system-config-samba-" + "1.2.31" + "/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])

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