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


Viewing file:     ApacheConf.py (49.79 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/python

## apache-config - A Python Apache configuration utility for
## Copyright (C) 2000 Red Hat, Inc.
## Copyright (C) 2000 Jonathan Blandford <jrb@redhat.com>,
##                    Philipp Knirsch   <pknirsch@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.


##
## I18N
##
import gettext
PROGNAME='system-config-httpd'
gettext.bindtextdomain(PROGNAME, "/usr/share/locale")
gettext.textdomain(PROGNAME)
try:
    gettext.install(PROGNAME, "/usr/share/locale", 1)
except IOError:
    import __builtin__
    __builtin__.__dict__['_'] = unicode

try:
    import gtk
except:
    import sys
    print (_("system-config-httpd requires a currently running X server."))
    sys.exit(0)

import gtk.gdk
import gtk.glade
import gnome
import gnome.ui
import signal
import re
import os

import ApacheGizmo
from CheckList import CheckList
from ApacheControl import ApacheControl

gnome.program_init(PROGNAME, "1.1.0")
gtk.glade.bindtextdomain(PROGNAME, "/usr/share/locale")

##
## Global values
##

APACHECONFDIR='/usr/share/system-config-httpd/'
glade_file = "apache-config.glade"

if not os.path.isfile(glade_file):
    glade_file = APACHECONFDIR + glade_file

xml = gtk.glade.XML (glade_file, domain=PROGNAME)
control = ApacheControl (xml)
# lists

vhost_list_data = [ [ _("General Options") ],
                    [ _("Site Configuration") ],
                    [ _("SSL") ],
                    [ _("Logging") ],
                    [ _("Environment Variables") ],
                    [ _("Directories")] ]

default_vhost_list_data = [ [ _("Site Configuration") ],
                            [ _("Logging") ],
                            [ _("Environment Variables") ],
                            [ _("Directories")] ]


# Dir where documentation resided.
doc_dir = '/usr/share/doc/system-config-httpd/html/'


##
# Helper classes
##

class DirOptionsList (CheckList):
    def __init__ (self):
        CheckList.__init__ (self)
        self.column_titles_show ()
        self.set_column_title (1, _("Options"))
        self.column_titles_passive ()
        for i in ApacheGizmo.VirtualHost.DIRECTORY_OPTIONS:
            self.append_row (i, False)
        self.set_selection_mode (gtk.SELECTION_BROWSE)

    def set_to_list (self):
        retval = []
        for i in xrange (len (ApacheGizmo.VirtualHost.DIRECTORY_OPTIONS)):
            if self.row_get_state (i):
                retval.append (ApacheGizmo.VirtualHost.DIRECTORY_OPTIONS[i])
        return retval

    def set_from_list (self, list):
        for i in xrange (self.rows):
            if self.get_text (i, 1) in list:
                self.row_set_state (i, True)
            else:
                self.row_set_state (i, False)

    def set_to_default (self):
        self.set_from_list ([ 'ExecCGI', 'FollowSymLinks', 'Includes', 'IncludesNOEXEC', 'Indexes', 'SymLinksIfOwnerMatch' ])
            
class ErrorDocumentClist (gtk.CList):
    def __init__ (self):
        gtk.CList.__init__ (self, 3, [_("Error Code"), _("Behavior"), _("Location")])
        self.set_column_auto_resize (0, True)
        self.set_column_auto_resize (1, True)
        self.set_column_auto_resize (2, True)
        self.set_selection_mode (gtk.SELECTION_BROWSE)
        self.column_titles_passive ()

        keys = ApacheGizmo.ErrorDocuments.ERROR_CODE_DATA.keys ()
        keys.sort ()
        for i in keys:
            (short, long) = ApacheGizmo.ErrorDocuments.ERROR_CODE_DATA[i]
            text = [  short, _("Default"), "" ]
            row = self.append (text)
            self.set_row_data (row, i)


    def set_to_default (self):
        for i in xrange (self.rows):
            self.set_text (i, 1, _("default"))
            self.set_text (i, 2, "")

## UI Callbacks

def on_generic_clist_select_row (clist, row, column, event, button1, button2):
    button1.set_sensitive (True)
    button2.set_sensitive (True)

def on_generic_clist_unselect_row (clist, row, column, event, button1, button2):
    button1.set_sensitive (False)
    button2.set_sensitive (False)

def on_generic_clist_button_release_event (clist, event, func):
    id = clist.get_data ("signal_id")
    clist.disconnect (id)
    clist.remove_data ("signal_id")
    apply (func)

def on_generic_clist_button_press_event (clist, event, func):
    if event.type == gtk.gdk._2BUTTON_PRESS:
        info = clist.get_selection_info (event.x, event.y)
        if info != None:
            id = clist.connect ("button_release_event", on_generic_clist_button_release_event, func)
            clist.set_data ("signal_id", id)

def on_generic_gtk_widget_hide(button, widget):
    widget.hide();

def on_generic_toggle_set_sensitive(button, widget, reverse=False):
    if not reverse:
        widget.set_sensitive (button.get_active ())
    else:
        widget.set_sensitive (not button.get_active ())

def multiviews_cbutton_toggled(button, clist):
    if button.get_active ():
        clist.set_sensitive (False)
    else:
        clist.set_sensitive (True)

def gui_error_dialog (message, parent_dialog,
                      message_type=gtk.MESSAGE_ERROR,
                      widget=None, page=0, broken_widget=None):
    
    dialog = gtk.MessageDialog(parent_dialog,
                               gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
                               message_type, gtk.BUTTONS_OK,
                               message)
    
    if widget != None:
        if isinstance (widget, gtk.CList):
            widget.select_row (page, 0)
        elif isinstance (widget, gtk.Notebook):
            widget.set_current_page (page)
    if broken_widget != None:
        broken_widget.grab_focus ()
        if isinstance (broken_widget, gtk.Entry):
            broken_widget.select_region (0, -1)

    dialog.set_position (gtk.WIN_POS_MOUSE)
    ret = dialog.run ()
    dialog.destroy()
    return ret

def gui_yesnocancel_dialog (message, parent_dialog,
                            message_type=gtk.MESSAGE_QUESTION,
                            widget=None, page=0, broken_widget=None):
    dialog = gtk.MessageDialog(parent_dialog,
                               gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
                               message_type,
                               gtk.BUTTONS_YES_NO,
                               message)
    dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)

    dialog.set_default_response(gtk.RESPONSE_REJECT)

    if widget != None:
        if isinstance (widget, gtk.CList):
            widget.select_row (page, 0)
        elif isinstance (widget, gtk.Notebook):
            widget.set_current_page (page)
    if broken_widget != None:
        broken_widget.grab_focus ()
        if isinstance (broken_widget, gtk.Entry):
            broken_widget.select_region (0, -1)
    dialog.set_position (gtk.WIN_POS_MOUSE)
    ret = dialog.run ()
    dialog.destroy()
    return ret

def gui_yesno_dialog (message, parent_dialog,
                      message_type=gtk.MESSAGE_QUESTION,
                      widget=None, page=0, broken_widget=None):

    dialog = gtk.MessageDialog(parent_dialog,
                               gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
                               message_type,
                               gtk.BUTTONS_YES_NO,
                               message)
    if widget != None:
        if isinstance (widget, gtk.CList):
            widget.select_row (page, 0)
        elif isinstance (widget, gtk.Notebook):
            widget.set_current_page (page)
    if broken_widget != None:
        broken_widget.grab_focus ()
        if isinstance (broken_widget, gtk.Entry):
            broken_widget.select_region (0, -1)
    dialog.set_position (gtk.WIN_POS_MOUSE)
    ret = dialog.run ()
    dialog.destroy()
    return ret

def generic_error_dialog (message, parent_dialog, message_type=gtk.MESSAGE_WARNING, widget=None, page=0, broken_widget=None):
    gui_error_dialog (message, parent_dialog, message_type, widget, page, broken_widget)


##
## Main Dialog
##

def on_main_ok_button_clicked (button):
    main = xml.get_widget ("main")
    if gui_yesno_dialog(_("Are you sure you want to save and exit?"), main) != gtk.RESPONSE_YES:
        return
    try:
        control.dehydrate_main ()
    except 'TestError', (message, page, broken_widget):
        generic_error_dialog (message, main, gtk.MESSAGE_WARNING, xml.get_widget ("main_notebook"), page, broken_widget)
        return

    if not control.write():
        if gui_yesno_dialog(_("The configuration file has been manually modified. Overwrite?"), main) == gtk.RESPONSE_YES:
            control.write(True)
        else:
            return

    gtk.main_quit ()

def on_main_help_button_clicked (button):
    notebook = xml.get_widget ('main_notebook')
    help_pages = [doc_dir+'httpd-basic-settings.html',
                  doc_dir+'httpd-virtualhosts-settings.html',
                  doc_dir+'httpd-server-settings.html',
                  doc_dir+'httpd-tuning-settings.html']
    gnome.url_show("file:"+help_pages [notebook.get_current_page ()])

def on_main_cancel_button_clicked (button):
    if gui_yesno_dialog(_("Are you sure you want to quit?"), xml.get_widget ("main")) == gtk.RESPONSE_YES:
        gtk.main_quit ()
        return False
    return True

def on_main_delete_clicked (window, event):
    return on_main_cancel_button_clicked (None)

def on_address_label_ip_address_toggled (button):
    xml.get_widget ("new_address_ip_entry").set_sensitive (button.get_active ())

def check_new_address_dialog (new_address):
    button = xml.get_widget ("address_label_ip_address")
    clist = xml.get_widget ("address_clist")
    port_text = xml.get_widget ("new_address_port_entry").get_text ()
    address_text = xml.get_widget ("new_address_ip_entry").get_text ()

    if port_text == "":
        generic_error_dialog (_("You must include a port to listen on.  Typically, port 80 is used."), xml.get_widget ("new_address_dialog"), gtk.MESSAGE_INFO)
        return False

    if button.get_active ():
        if address_text == "":
            generic_error_dialog (_("You must include an address to listen on."), xml.get_widget ("new_address_dialog"), gtk.MESSAGE_INFO)
            return False
    else:
        address_text = "*"

    for i in xrange (clist.rows):
        if i == new_address:
            continue
        (old_address_text, old_port) = clist.get_row_data (i)
        if old_address_text == address_text and old_port == port_text:
            generic_error_dialog (_("You already have an address with that name."), xml.get_widget ("main"), gtk.MESSAGE_INFO)
            return False

    return True

def on_add_edit_address_button_clicked (button, add):
    clist = xml.get_widget ("address_clist")
    dialog = xml.get_widget ("new_address_dialog")
    port_entry = xml.get_widget ("new_address_port_entry")
    address_entry = xml.get_widget ("new_address_ip_entry")
    obutton = xml.get_widget ("address_label_ip_address")
    xml.get_widget ("new_address_dialog_ok_button").grab_default ()
    obutton.set_active (True)
    if add:
        dialog.set_title (_("Add new address..."))
        port_entry.set_text ("80")
        address_entry.set_text ("")
        row = -1
    else:
        if not clist.selection:
            return
        dialog.set_title (_("Edit an address..."))
        (old_address_text, old_port) = clist.get_row_data (clist.selection[0])
        if old_address_text == "*":
            xml.get_widget ("address_dialog_listen_all").set_active (True);
            address_entry.set_text ("")
        else:
            obutton.set_active (True)
            address_entry.set_text (old_address_text)
        port_entry.set_text (old_port)
        row = clist.selection [0]

    while 1:
        button = dialog.run ()
        if button != gtk.RESPONSE_OK:
            dialog.hide ()
            return

        if check_new_address_dialog (row):
            break
    dialog.hide ()
    port_text = port_entry.get_text ()

    if obutton.get_active ():
        ip_text = address_entry.get_text ()
        text = ip_text + ":" + port_text
        if add:
            row = clist.append ( [ text ] )
        else:
            clist.set_text (row, 0, text)
        clist.set_row_data (row, (ip_text, port_text))
    else:
        text = _("All available addresses on port ") + port_text
        if add:
            row = clist.append ( [ text ] )
        else:
            clist.set_text (row, 0, text)
        clist.set_row_data (row, ("*", port_text))
    clist.select_row (row, 0)

def on_edit_address_button_clicked (*args):
    on_add_edit_address_button_clicked (None, False)

def on_delete_address_button_clicked (button):
    clist = xml.get_widget ("address_clist")
    if not clist.selection:
        return
    selected = clist.selection [0]
    # FIXME:  Check virtual hosts before deleting addresses
    clist.remove (selected)
    clist.select_row (selected, 0)

def on_host_entry_changed (entry):
    clist = xml.get_widget ("address_clist")
    host_entry = xml.get_widget ("host_entry")
    port_entry = xml.get_widget ("port_entry")
    port_text = port_entry.get_text ()
    if (port_text == ""):
        string = host_entry.get_text ()
    else:
        string = host_entry.get_text () + ":" + port_text
    clist.set_text (clist.selection [0], 0, string)

def on_port_entry_insert_text (entry, text, length, unused):
    sub_string = text[0:length]
    reg = re.compile ("[^0-9]+")
    if reg.match (string):
        entry.emit_stop_by_name ("insert_text")
        return

def run_vhost_dialog (dialog):
    mode = dialog.get_data ("mode")
    row = dialog.get_data ("row")
    clist = xml.get_widget ("vhost_clist")
    vhost_clist = xml.get_widget ("virtual_host_dialog_clist")
    xml.get_widget ("vhost_ok_button").grab_default ()

    vhost_clist.clear ()

    if mode == "default":
        control.hydrate_default_vhost ()
        for i in default_vhost_list_data:
            vhost_clist.append (i)
        xml.get_widget ("vhost_notebook").get_nth_page(0).hide()
        xml.get_widget ("vhost_notebook").get_nth_page(2).hide()
    else:
        if mode == "edit":
            if not clist.selection:
                return
            control.hydrate_vhost (clist.get_text (clist.selection [0], 0))
        elif mode == "add":
            control.hydrate_vhost ()
            # Ugly fix for default DirectoryIndex
            tmp_clist = xml.get_widget ("directory_index_clist")
            # Only add default values if they are not there yet.
            if tmp_clist.rows == 0:
                tmp_clist.insert ( 0, [ "index.shtml" ] )
                tmp_clist.insert ( 0, [ "index.htm" ] )
                tmp_clist.insert ( 0, [ "index.html" ] )
                tmp_clist.select_row (0, 0)
        for i in vhost_list_data:
            vhost_clist.append (i)
        xml.get_widget ("vhost_notebook").get_nth_page(0).show()
        xml.get_widget ("vhost_notebook").get_nth_page(2).show()

    vhost_clist.select_row (0, 0)

    while (1):
        button = dialog.run ()
        if button == gtk.RESPONSE_OK:
            try:
                if mode == "edit":
                    new_name, new_address = control.dehydrate_vhost()
                    clist.set_text (clist.selection [0], 0, new_name)
                    clist.set_text (clist.selection [0], 1, new_address)
                elif mode == "add":
                    new_name, new_address = control.dehydrate_vhost()
                    new_row = clist.insert (row, [new_name, new_address])
                    clist.select_row (new_row, 0)
                else:
                    control.dehydrate_default_vhost()
                break
            except 'TestError', (message, row, broken_widget):
                generic_error_dialog (message, dialog, gtk.MESSAGE_ERROR, xml.get_widget ("virtual_host_dialog_clist"), row, broken_widget)
                continue
        elif button == gtk.RESPONSE_HELP:
            continue
        else:
            control.discard_vhost ()
            break
    dialog.hide ()

def on_add_vhost_button_clicked (button):
    clist = xml.get_widget ("vhost_clist")
    dialog = xml.get_widget ("virtual_host_dialog")
    if clist.selection:
        dialog.set_data ("row", clist.selection [0] + 1)
    else:
        dialog.set_data ("row", 0)
    dialog.set_data ("mode", "add")
    run_vhost_dialog (dialog)

def on_edit_vhost_button_clicked (*args):
    dialog = xml.get_widget ("virtual_host_dialog")
    clist = xml.get_widget ("vhost_clist")
    if not clist.selection:
        return
    dialog.set_data ("row", clist.selection [0] + 1)
    dialog.set_data ("mode", "edit")
    run_vhost_dialog (dialog)

def on_delete_vhost_button_clicked (button):
    clist = xml.get_widget ("vhost_clist")
    if not clist.selection:
        return
    selected = clist.selection [0]
    name = clist.get_text (selected, 0)
    clist.remove (selected)
    clist.select_row (selected, 0)
    control.remove_vhost (name)

## Virtual Host Dialog

def on_virtual_host_dialog_clist_select_row (clist, row, column, event):
    dialog = xml.get_widget ("virtual_host_dialog")
    mode = dialog.get_data ("mode")
    notebook = xml.get_widget ("vhost_notebook")
    if mode == "default":
        if row == 0:
            notebook.set_current_page (1)
        else:
            notebook.set_current_page (row + 2)
    else:
        notebook.set_current_page (row)

def on_virtual_host_dialog_ok_button_clicked (button):
    window = xml.get_widget ("quit_dialog")
    window.show_all ()

def on_virtual_host_dialog_cancel_button_clicked (button):
    window = xml.get_widget ("quit_dialog")
    window.show_all ()

def on_vhost_help_button_clicked (button):
    notebook = xml.get_widget ('vhost_notebook')
    help_pages = [doc_dir+'httpd-virtualhosts-settings.html#S3-HTTPD-VIRTUALHOSTS-ADD-GENERAL',
                  doc_dir+'httpd-default-settings.html#HTTPD-SITE-CONFIG',
                  doc_dir+'httpd-virtualhosts-settings.html#S3-HTTPD-VIRTUALHOSTS-ADD-SSL',
                  doc_dir+'httpd-logging.html',
                  doc_dir+'httpd-environment-variables.html',
                  doc_dir+'httpd-directories.html']
    gnome.url_show ("file:"+help_pages [notebook.get_current_page ()])

def on_default_vhost_button_clicked (button):
    dialog = xml.get_widget ("virtual_host_dialog")
    dialog.set_data ("mode", "default")
    run_vhost_dialog (dialog)

def on_unlimited_cnxns_rbutton_toggled (button):
    xml.get_widget ("max_requests_per_child_spin").set_sensitive (not button.get_active ())

def on_keep_alive_cbutton_toggled (button):
    xml.get_widget ("timeout_hbox").set_sensitive (button.get_active ())

def on_vhost_type_omenu_selected (omenu, *args):
    i = omenu.get_children ().index ( omenu.get_active ())
    xml.get_widget ("host_info_notebook").set_current_page (i)
    if i == 1:
        xml.get_widget ("ssl_engine_cbox").set_active (False)

def on_vhost_alias_add_edit_button_clicked (button, add):
    dialog = xml.get_widget ("vhost_alias_dialog")
    label = xml.get_widget ("vhost_alias_dialog_label")
    clist = xml.get_widget ("vhost_alias_clist")
    host_name = xml.get_widget ("name_vhost_host_name_entry").get_text ()
    alias_entry = xml.get_widget ("vhost_alias_entry")

    alias_entry.grab_focus ()
    xml.get_widget ("vhost_alias_dialog_ok_button").grab_default ()
    dialog.set_parent (xml.get_widget ("virtual_host_dialog"))

    if add:
        row = 0
        dialog.set_title (_("Add a new alias..."))
        alias_entry.set_text ("")
        if host_name != "":
            label.set_text (_("Add a new alias for the hostname:\n\"%s\"") % host_name)
        else:
            label.set_text (_("Add a new alias:"))
    else:
        if not clist.selection:
            return
        row = clist.selection [0]
        alias_entry.set_text (clist.get_text (row, 0))

        if host_name != "":
            label.set_text (_("Edit an existing alias for the hostname:\n\"%s\"") % host_name)
            dialog.set_title (_("Edit an alias for %s...") % host_name)
        else:
            label.set_text (_("Edit an existing alias:"))
            dialog.set_title (_("Edit an alias..."))

    while 1:
        button = dialog.run ()
        if button != gtk.RESPONSE_OK:
            dialog.hide ()
            return

        text = alias_entry.get_text ()
        if text == "":
            generic_error_dialog (_("Unable to add an empty alias."), dialog, gtk.MESSAGE_WARNING, broken_widget=alias_entry)
            continue
        duplicate = False
        for i in xrange (clist.rows):
            if not add and i == row:
                continue
            if text == clist.get_text (i, 0):
                generic_error_dialog (_("An alias with the name\n\"%s\"\nalready exists.") % text, dialog, gtk.MESSAGE_WARNING, broken_widget=alias_entry)
                duplicate = True
                break
        if duplicate:
            continue
        break
    dialog.hide ()

    if add:
        row = clist.append ( [ text ] )
    else:
        clist.set_text (row, 0, text)
    clist.select_row (row, 0)

def on_vhost_alias_edit_button_clicked (*args):
    on_vhost_alias_add_edit_button_clicked (None, False)

def on_vhost_alias_delete_button_clicked (button):
    clist = xml.get_widget ("vhost_alias_clist")
    if not clist.selection:
        return
    selected = clist.selection [0]
    clist.remove (selected)
    clist.select_row (selected, 0)

def on_default_vhost_all_port_rbutton_toggled (check):
    xml.get_widget ('default_vhost_all_port_entry').set_sensitive (check.get_active ())

def on_custom_logging_toggled (check):
    label = xml.get_widget ("custom_log_string_label")
    entry = xml.get_widget ("custom_log_string_entry")
    label.set_sensitive (check.get_active ())
    entry.set_sensitive (check.get_active ())

def on_transfer_log_to_file_toggled (radio):
    entry = xml.get_widget ("transfer_log_to_file_entry")
    entry.set_sensitive (radio.get_active ())
    entry = xml.get_widget ("transfer_log_to_file_real_entry")
    entry.grab_focus ()

def on_transfer_log_to_program_toggled (radio):
    entry = xml.get_widget ("transfer_log_to_program_entry")
    entry.set_sensitive (radio.get_active ())
    entry.grab_focus ()

def on_transfer_use_system_log_toggled (radio):
    entry = xml.get_widget ("transfer_use_system_log_entry")
    entry.set_sensitive (radio.get_active ())
    entry.grab_focus ()

def on_error_log_to_file_toggled (radio):
    entry = xml.get_widget ("error_log_to_file_entry")
    entry.set_sensitive (radio.get_active ())
    entry = xml.get_widget ("error_log_to_file_real_entry")
    entry.grab_focus ()

def on_error_log_to_program_toggled (radio):
    entry = xml.get_widget ("error_log_to_program_entry")
    entry.set_sensitive (radio.get_active ())
    entry.grab_focus ()

def on_error_use_system_log_toggled (radio):
    entry = xml.get_widget ("error_use_system_log_entry")
    entry.set_sensitive (radio.get_active ())
    entry.grab_focus ()

def on_edit_error_documents_clicked (*args):
    sw = xml.get_widget ("error_doc_list_swindow")
    clist = sw.get_data ("clist")
    if not clist.selection:
        return
    data = clist.get_row_data (clist.selection [0])
    if data == None:
        return

    #set up the dialog
    label = xml.get_widget ("error_document_dialog_error_code_label")
    label.set_text (_("%d - %s") % (data, ApacheGizmo.ErrorDocuments.ERROR_CODE_DATA[data][0]))

    label = xml.get_widget ("error_document_dialog_description_label")
    label.set_text (ApacheGizmo.ErrorDocuments.ERROR_CODE_DATA[data][1])

    behavior = clist.get_text (clist.selection [0], 1)
    index = 0
    if behavior == _("File"):
        index = 1
    elif behavior == "URL":
        index = 2
    omenu = xml.get_widget ("error_document_dialog_behavior_omenu")
    omenu.set_history (index)
    on_error_document_dialog_omenu_activate (None, index)

    location = clist.get_text (clist.selection [0], 2)
    entry = xml.get_widget ("error_document_dialog_location_entry")
    entry.set_text (location)

    dialog = xml.get_widget ("error_document_dialog")
    button = dialog.run ()
    on_error_document_dialog_clicked_event(dialog, button)

def on_error_document_dialog_clicked_event (dialog, button):
    if button == gtk.RESPONSE_OK:
        clist = xml.get_widget ("error_doc_list_swindow").get_data ("clist")
        omenu = xml.get_widget ("error_document_dialog_behavior_omenu")
        entry = xml.get_widget ("error_document_dialog_location_entry")
        behavior = omenu.get_menu ().get_active ()
        index = 0
        for menu_item in omenu.get_menu ().get_children ():
            if menu_item == behavior:
                break
            index = index + 1

        if index == 0:
            clist.set_text (clist.selection [0], 1, _("default"))
            clist.set_text (clist.selection [0], 2, "")
        elif index == 1:
            clist.set_text (clist.selection [0], 1, _("File"))
            clist.set_text (clist.selection [0], 2, entry.get_text ())
        elif index == 2:
            clist.set_text (clist.selection [0], 1, "URL")
            clist.set_text (clist.selection [0], 2, entry.get_text ())
    dialog.hide()

def on_error_document_dialog_omenu_activate (menu_item, offset):
    entry = xml.get_widget ("error_document_dialog_location_entry")
    if offset == 0:
        entry.set_sensitive (False)
    else:
        entry.set_sensitive (True)

def on_error_document_clist_select_row (clist, row, column, event):
    data = clist.get_row_data (row)
    if data == None:
        return
    label = xml.get_widget ("error_document_label")
    label.set_text (_("Error Code %d - %s") % (data, ApacheGizmo.ErrorDocuments.ERROR_CODE_DATA[data][0]))

def on_directory_index_add_clicked (button):
    clist = xml.get_widget ("directory_index_clist")
    dialog = xml.get_widget ("directory_index_dialog")
    entry = xml.get_widget ("directory_index_dialog_entry")
    entry.set_text ("")
    if clist.selection:
        dialog.set_data ("row", clist.selection [0] + 1)
    else:
        dialog.set_data ("row", 0)
    dialog.set_data ("mode", "add")
    button = dialog.run ()
    on_directory_index_dialog_clicked(dialog, button)

def on_directory_index_edit_clicked (*args):
    clist = xml.get_widget ("directory_index_clist")
    if not clist.selection:
        return
    dialog = xml.get_widget ("directory_index_dialog")
    entry = xml.get_widget ("directory_index_dialog_entry")

    text = clist.get_text (clist.selection [0], 0)
    dialog.set_data ("row", clist.selection [0])
    dialog.set_data ("mode", "edit")
    entry.set_text (text)
    button = dialog.run ()
    on_directory_index_dialog_clicked(dialog, button)

def on_directory_index_delete_clicked (button):
    clist = xml.get_widget ("directory_index_clist")
    if not clist.selection:
        return
    selected = clist.selection [0]
    clist.remove (selected)
    clist.select_row (selected, 0)

def on_directory_index_dialog_clicked (dialog, button):
    if button == gtk.RESPONSE_OK:
        clist = xml.get_widget ("directory_index_clist")
        entry = xml.get_widget ("directory_index_dialog_entry")
        mode = dialog.get_data ("mode")
        row = dialog.get_data ("row")
        if mode == "add":
            new_row = clist.insert ( row, [ entry.get_text ()] )
            clist.select_row (new_row, 0)
        else:
            clist.set_text (row, 0, entry.get_text ())
    dialog.hide ()

def on_ssl_engine_cbox_toggled (toggle):
    omenu = xml.get_widget('vhost_type_omenu').get_menu ()
    if toggle.get_active () and omenu.get_children ().index (omenu.get_active ()) == 1:
        generic_error_dialog (_("SSL cannot be used with name based virtual hosts.\nPlease change to an IP based virtual host."),
                              xml.get_widget ("virtual_host_dialog"),
                              gtk.MESSAGE_WARNING,
                              xml.get_widget ("virtual_host_dialog_clist"), 0,
                              xml.get_widget ("vhost_type_omenu"))
        toggle.set_active (False)
    else:
        xml.get_widget ("ssl_frame").set_sensitive (toggle.get_active ())

def on_pass_env_add_button_clicked (button):
    clist = xml.get_widget ("pass_env_clist")
    entry = xml.get_widget ("env_dialog_variable_entry")
    entry.set_text ("")
    entry = xml.get_widget ("env_dialog_value_entry")
    entry.hide ()
    label = xml.get_widget ("env_dialog_label")
    label.hide ()
    dialog = xml.get_widget ("env_dialog")
    dialog.set_data ("mode", "add")
    dialog.set_data ("clist", "pass_env_clist")
    if clist.selection:
        dialog.set_data ("row", clist.selection [0] + 1)
    else:
        dialog.set_data ("row", 0)
    button = dialog.run ()
    on_env_dialog_clicked(dialog, button)
    dialog.hide ()

def on_pass_env_edit_button_clicked (*args):
    clist = xml.get_widget ("pass_env_clist")
    if not clist.selection:
        return
    entry = xml.get_widget ("env_dialog_variable_entry")
    entry.set_text (clist.get_text (clist.selection [0], 0))
    entry = xml.get_widget ("env_dialog_value_entry")
    entry.hide ()
    label = xml.get_widget ("env_dialog_label")
    label.hide ()
    dialog = xml.get_widget ("env_dialog")
    dialog.set_data ("mode", "edit")
    dialog.set_data ("clist", "pass_env_clist")
    dialog.set_data ("row", clist.selection [0])
    button = dialog.run ()
    on_env_dialog_clicked(dialog, button)
    dialog.hide ()

def on_pass_env_delete_button_clicked (button):
    clist = xml.get_widget ("pass_env_clist")
    if not clist.selection:
        return
    selected = clist.selection [0]
    clist.remove (selected)
    clist.select_row (selected, 0)

def on_set_env_add_button_clicked (button):
    clist = xml.get_widget ("set_env_clist")
    entry = xml.get_widget ("env_dialog_variable_entry")
    entry.set_text ("")
    entry = xml.get_widget ("env_dialog_value_entry")
    entry.set_text ("")
    entry.show ()
    label = xml.get_widget ("env_dialog_label")
    label.show ()
    dialog = xml.get_widget ("env_dialog")
    dialog.set_data ("mode", "add")
    dialog.set_data ("clist", "set_env_clist")
    if clist.selection:
        dialog.set_data ("row", clist.selection [0] + 1)
    else:
        dialog.set_data ("row", 0)
    button = dialog.run ()
    on_env_dialog_clicked(dialog, button)
    dialog.hide ()

def on_set_env_edit_button_clicked (*args):
    clist = xml.get_widget ("set_env_clist")
    if not clist.selection:
        return
    entry = xml.get_widget ("env_dialog_variable_entry")
    entry.set_text (clist.get_text (clist.selection [0], 0))
    entry = xml.get_widget ("env_dialog_value_entry")
    entry.set_text (clist.get_text (clist.selection [0], 1))
    entry.show ()
    label = xml.get_widget ("env_dialog_label")
    label.show ()
    dialog = xml.get_widget ("env_dialog")
    dialog.set_data ("mode", "edit")
    dialog.set_data ("clist", "set_env_clist")
    dialog.set_data ("row", clist.selection [0])
    button = dialog.run ()
    on_env_dialog_clicked(dialog, button)
    dialog.hide ()

def on_set_env_delete_button_clicked (button):
    clist = xml.get_widget ("set_env_clist")
    if not clist.selection:
        return
    selected = clist.selection [0]
    clist.remove (selected)
    clist.select_row (selected, 0)

def on_unset_env_add_button_clicked (button):
    clist = xml.get_widget ("unset_env_clist")
    entry = xml.get_widget ("env_dialog_variable_entry")
    entry.set_text ("")
    entry = xml.get_widget ("env_dialog_value_entry")
    entry.hide ()
    label = xml.get_widget ("env_dialog_label")
   label.hide ()
    dialog = xml.get_widget ("env_dialog")
    dialog.set_data ("mode", "add")
    dialog.set_data ("clist", "unset_env_clist")
    if clist.selection:
        dialog.set_data ("row", clist.selection [0] + 1)
    else:
        dialog.set_data ("row", 0)
    button = dialog.run ()
    on_env_dialog_clicked(dialog, button)

def on_unset_env_edit_button_clicked (*args):
    clist = xml.get_widget ("unset_env_clist")
    if not clist.selection:
        return
    entry = xml.get_widget ("env_dialog_variable_entry")
    entry.set_text (clist.get_text (clist.selection [0], 0))
    entry = xml.get_widget ("env_dialog_value_entry")
    entry.hide ()
    label = xml.get_widget ("env_dialog_label")
    label.hide ()
    dialog = xml.get_widget ("env_dialog")
    dialog.set_data ("mode", "edit")
    dialog.set_data ("clist", "unset_env_clist")
    dialog.set_data ("row", clist.selection [0])
    button = dialog.run ()
    on_env_dialog_clicked(dialog, button)

def on_unset_env_delete_button_clicked (button):
    clist = xml.get_widget ("unset_env_clist")
    if not clist.selection:
        return
    selected = clist.selection [0]
    clist.remove (selected)
    clist.select_row (selected, 0)

def on_env_dialog_clicked (dialog, button):
    if button == gtk.RESPONSE_OK:
        clist_text = dialog.get_data ("clist")
        mode = dialog.get_data ("mode")
        row = dialog.get_data ("row")

        clist = xml.get_widget (clist_text)
        entry = xml.get_widget ("env_dialog_variable_entry")
        entry2 = xml.get_widget ("env_dialog_value_entry")

        if mode == "add":
            if clist_text == "set_env_clist":
                new_row = clist.insert ( row, [ entry.get_text (), entry2.get_text ()] )
            else:
                new_row = clist.insert ( row, [ entry.get_text ()] )
            clist.select_row (new_row, 0)
        else:
            clist.set_text (row, 0, entry.get_text ())
            if clist_text == "set_env_clist":
                clist.set_text (row, 1, entry2.get_text ())

    dialog.hide ()

def on_default_dir_options_edit_button_clicked (button):
    dialog = xml.get_widget ("default_directory_options_dialog")
    control.hydrate_default_dir_options (dialog)
    button = dialog.run ()
    dialog.hide ()
    if button != gtk.RESPONSE_OK:
        return
    control.dehydrate_default_dir_options (dialog)

def run_dir_options_dialog (dialog):
    mode = dialog.get_data ("mode")
    row = dialog.get_data ("row")
    clist = xml.get_widget ("dir_options_clist")

    xml.get_widget ("dir_options_dialog_ok_button").grab_default ()
    dir_name = None
    if mode == "edit":
        dir_name = clist.get_text (clist.selection[0], 0)

    control.hydrate_dir_options (dir_name)

    while True:
        button = dialog.run ()
        if button == gtk.RESPONSE_HELP:
            continue
        if button == gtk.RESPONSE_OK:
            try:
                dir_name = control.dehydrate_dir_options (dir_name)
            except 'TestError', (message, row, broken_widget):
                generic_error_dialog (message, dialog, gtk.MESSAGE_ERROR, broken_widget=broken_widget)
                continue
            break
        else:
            control.discard_dir_options ()
            dialog.hide ()
            return
    dialog.hide ()
    if mode == "add":
        row = clist.insert (row, [ dir_name ])
    else:
        clist.set_text (row, 0, dir_name)

def on_dir_options_add_button_clicked (button):
    dialog = xml.get_widget ("directory_options_dialog")
    clist = xml.get_widget ("dir_options_clist")

    dialog.set_data ("mode", "add")
    if clist.selection:
        dialog.set_data ("row", clist.selection [0] + 1)
    else:
        dialog.set_data ("row", 0)
    run_dir_options_dialog (dialog)

def on_dir_options_edit_button_clicked (*args):
    dialog = xml.get_widget ("directory_options_dialog")
    clist = xml.get_widget ("dir_options_clist")
    if not clist.selection:
        return
    dialog.set_data ("mode", "edit")
    dialog.set_data ("row", clist.selection [0])
    run_dir_options_dialog (dialog)

def on_dir_options_delete_button_clicked (button):
    clist = xml.get_widget ("dir_options_clist")
    if not clist.selection:
        return
    selected = clist.selection [0]
    name = clist.get_text (selected, 0)
    clist.remove (selected)
    clist.select_row (selected, 0)
    control.remove_dir_option (name)

def on_dir_options_help_button_clicked (button):
    gnome.url_show ("file:"+doc_dir+'httpd-directories.html#HTTPD-DIRECTORIES-ADD')

def on_order_deny_group_toggled (button):
    if button.get_active ():
        xml.get_widget ("deny_list_frame").set_sensitive (False)
        xml.get_widget ("allow_list_frame").set_sensitive (False)
    else:
        xml.get_widget ("deny_list_frame").set_sensitive (True)
        xml.get_widget ("allow_list_frame").set_sensitive (True)


# SETUP CODE
def setup_main ():
    xml.get_widget ("edit_address_button").set_sensitive (False)
    xml.get_widget ("delete_address_button").set_sensitive (False)
    xml.get_widget ("edit_vhost_button").set_sensitive (False)
    xml.get_widget ("delete_vhost_button").set_sensitive (False)

#    xml.get_widget ("new_address_dialog").close_hides (True)
#    xml.get_widget ("virtual_host_dialog").close_hides (True)
#    xml.get_widget ("default_directory_options_dialog").close_hides (True)
#    xml.get_widget ("vhost_alias_dialog").close_hides (True)
#    xml.get_widget ("directory_options_dialog").close_hides (True)
#    xml.get_widget ("env_dialog").close_hides (True)
#    xml.get_widget ("directory_index_dialog").close_hides (True)
#    xml.get_widget ("error_document_dialog").close_hides (True)

    xml.get_widget ("question-pixmap1").set_from_file ("/usr/share/pixmaps/gnome-question.png")
    xml.get_widget ("question-pixmap2").set_from_file ("/usr/share/pixmaps/gnome-question.png")
    xml.get_widget ("question-pixmap3").set_from_file ("/usr/share/pixmaps/gnome-question.png")
    clist = xml.get_widget ("vhost_clist")
    clist.set_reorderable (True)
    clist.column_titles_passive ()
    clist.set_column_auto_resize (0, True)
    clist.set_column_auto_resize (1, True)

def setup_basic_vhost ():
    dialog = xml.get_widget ("virtual_host_dialog")
    xml.get_widget('vhost_type_omenu').get_menu ().connect('selection-done', on_vhost_type_omenu_selected)

def setup_default_directory_options_dialog ():
    dialog = xml.get_widget ("default_directory_options_dialog")
    vbox = xml.get_widget ("default_directory_options_dialog_vbox")
    clist = DirOptionsList ()
    clist.set_column_auto_resize (0, True)
    clist.set_column_auto_resize (1, True)
    vbox.pack_start (clist, True, True, 0)
    hbox = gtk.HBox (False, 4)
    vbox.pack_start (hbox, False, False, 0)
    vbox.show_all ()
    dialog.set_data ("clist", clist)


def setup_directory_options_dialog ():
    dialog = xml.get_widget ("directory_options_dialog")
    vbox = xml.get_widget ("directory_options_options_vbox")
    clist = DirOptionsList ()
    clist.set_column_auto_resize (0, True)
    clist.set_column_auto_resize (1, True)
    vbox.pack_start (clist, True, True, 0)
    vbox.show_all ()
    dialog.set_data ("clist", clist)
    on_generic_clist_unselect_row (clist, 0, 0, 0, xml.get_widget ("dir_options_edit_button"), xml.get_widget ("dir_options_delete_button"))
    xml.get_widget ("deny_list_frame").set_sensitive (False)
    xml.get_widget ("allow_list_frame").set_sensitive (False)

def setup_default_directory ():
    clist = xml.get_widget ("directory_index_clist")
    clist.set_reorderable (True)
    clist.column_titles_passive ()
    on_generic_clist_unselect_row (clist, 0, 0, 0, xml.get_widget ("directory_index_edit"), xml.get_widget ("directory_index_delete"))

def setup_error_document ():
    sw = xml.get_widget ("error_doc_list_swindow")
    clist = ErrorDocumentClist ()
    clist.column_titles_passive ()
    clist.show ()
    clist.connect ('select_row', on_error_document_clist_select_row)
    clist.connect ('button_press_event', on_generic_clist_button_press_event, on_edit_error_documents_clicked)
    on_error_document_clist_select_row (clist, 0, 0, None)
    sw.add (clist)
    sw.set_data ("clist", clist)

    omenu = xml.get_widget ("error_document_dialog_behavior_omenu")
    menu = omenu.get_menu ()
    i = 0
    for menu_item in menu.get_children():
        menu_item.connect ("activate", on_error_document_dialog_omenu_activate, i)
        i = i + 1

def setup_ssl_options ():
    vbox = xml.get_widget ("ssl_vbox")
    clist = CheckList ()
    clist.column_titles_show ()
    clist.set_column_title (1, _("SSL Options"))
    clist.column_titles_passive ()
    clist.show_all ()
    for i in ApacheGizmo.VirtualHost.SSL_OPTIONS:
        clist.append_row (i, False)
    vbox.pack_start (clist, True, True, 0)
    vbox.set_data ("ssl_clist", clist)

def setup_env ():
    clist = xml.get_widget ("pass_env_clist")
    on_generic_clist_unselect_row (clist, 0, 0, 0, xml.get_widget ("pass_env_edit_button"), xml.get_widget ("pass_env_delete_button"))
    clist = xml.get_widget ("set_env_clist")
    clist.set_column_auto_resize (0, True)
    clist.set_column_auto_resize (1, True)
    clist.column_titles_passive ()
    on_generic_clist_unselect_row (clist, 0, 0, 0, xml.get_widget ("set_env_edit_button"), xml.get_widget ("set_env_delete_button"))
    clist = xml.get_widget ("unset_env_clist")
    on_generic_clist_unselect_row (clist, 0, 0, 0, xml.get_widget ("unset_env_edit_button"), xml.get_widget ("unset_env_delete_button"))

def setup_directory_options ():
    clist = xml.get_widget ("dir_options_clist")
    clist.set_reorderable (True)
    clist.column_titles_passive ()


def setup ():
    setup_main ()
    setup_basic_vhost ()
    setup_default_directory_options_dialog ()
    setup_directory_options_dialog ()
    setup_default_directory ()
    setup_error_document ()
    setup_ssl_options ()
    setup_env ()
    setup_directory_options ()
    control.hydrate_main ()

def main ():
    xml.signal_autoconnect (
        { "on_address_clist_select_row" : (on_generic_clist_select_row, xml.get_widget ("delete_address_button"), xml.get_widget ("edit_address_button")),
          "on_address_clist_unselect_row" : (on_generic_clist_unselect_row, xml.get_widget ("delete_address_button"), xml.get_widget ("edit_address_button")),
          "on_address_clist_button_press_event" : (on_generic_clist_button_press_event, on_edit_address_button_clicked),
          "on_main_ok_button_clicked" : on_main_ok_button_clicked,
          "on_main_cancel_button_clicked" : on_main_cancel_button_clicked,
          "on_main_help_button_clicked" : on_main_help_button_clicked,
          "on_main_delete_event" : on_main_delete_clicked,
          "on_address_label_ip_address_toggled" : on_address_label_ip_address_toggled,
          "on_add_address_button_clicked" : (on_add_edit_address_button_clicked, True),
          "on_edit_address_button_clicked" : (on_add_edit_address_button_clicked, False),
          "on_host_entry_changed" : on_host_entry_changed,
          "on_port_entry_changed" : on_host_entry_changed,
          "on_port_entry_insert_text" : on_port_entry_insert_text,
          "on_delete_address_button_clicked" : on_delete_address_button_clicked,
          "on_add_vhost_button_clicked" : on_add_vhost_button_clicked,
          "on_edit_vhost_button_clicked" : on_edit_vhost_button_clicked,
          "on_delete_vhost_button_clicked" : on_delete_vhost_button_clicked,
          "on_virtual_host_dialog_clist_select_row" : on_virtual_host_dialog_clist_select_row,
          "on_default_vhost_button_clicked" : on_default_vhost_button_clicked,
          "on_unlimited_cnxns_rbutton_toggled" : on_unlimited_cnxns_rbutton_toggled,
          "on_keep_alive_cbutton_toggled" : on_keep_alive_cbutton_toggled,
          "on_vhost_clist_select_row" : (on_generic_clist_select_row, xml.get_widget ("edit_vhost_button"), xml.get_widget ("delete_vhost_button")),
          "on_vhost_clist_unselect_row" : (on_generic_clist_unselect_row, xml.get_widget ("edit_vhost_button"), xml.get_widget ("delete_vhost_button")),
          "on_vhost_clist_button_press_event" : (on_generic_clist_button_press_event, on_edit_vhost_button_clicked),
          "on_vhost_alias_add_button_clicked" : (on_vhost_alias_add_edit_button_clicked, True),
          "on_vhost_alias_edit_button_clicked" : (on_vhost_alias_add_edit_button_clicked, False),
          "on_vhost_alias_delete_button_clicked" : on_vhost_alias_delete_button_clicked,
          "on_vhost_alias_clist_select_row" : (on_generic_clist_select_row, xml.get_widget ("vhost_alias_edit_button"), xml.get_widget ("vhost_alias_delete_button")),
          "on_vhost_alias_clist_unselect_row" : (on_generic_clist_unselect_row, xml.get_widget ("vhost_alias_edit_button"), xml.get_widget ("vhost_alias_delete_button")),
          "on_vhost_alias_clist_button_press_event": (on_generic_clist_button_press_event, on_vhost_alias_edit_button_clicked),
          "on_default_vhost_all_port_rbutton_toggled" : on_default_vhost_all_port_rbutton_toggled,
          "on_custom_logging_toggled" : on_custom_logging_toggled,
          "on_transfer_log_to_file_toggled" : on_transfer_log_to_file_toggled,
          "on_transfer_log_to_program_toggled" : on_transfer_log_to_program_toggled,
          "on_transfer_use_system_log_toggled" : on_transfer_use_system_log_toggled,
          "on_error_log_to_file_toggled" : on_error_log_to_file_toggled,
          "on_error_log_to_program_toggled" : on_error_log_to_program_toggled,
          "on_error_use_system_log_toggled" : on_error_use_system_log_toggled,
          "on_virtual_host_dialog_ok_button_clicked" : on_virtual_host_dialog_ok_button_clicked,
          "on_virtual_host_dialog_cancel_button_clicked" : on_virtual_host_dialog_cancel_button_clicked,
          "on_vhost_help_button_clicked" : on_vhost_help_button_clicked,
          "on_edit_error_documents_clicked" : on_edit_error_documents_clicked,
          "on_error_document_dialog_clicked_event" : on_error_document_dialog_clicked_event,
          "on_directory_index_clist_select_row" : (on_generic_clist_select_row, xml.get_widget ("directory_index_edit"), xml.get_widget ("directory_index_delete")),
          "on_directory_index_clist_unselect_row" : (on_generic_clist_unselect_row, xml.get_widget ("directory_index_edit"), xml.get_widget ("directory_index_delete")),
          "on_directory_index_add_clicked" : on_directory_index_add_clicked,
          "on_directory_index_edit_clicked" : on_directory_index_edit_clicked,
          "on_directory_index_delete_clicked" : on_directory_index_delete_clicked,
          "on_directory_index_dialog_clicked" : on_directory_index_dialog_clicked,
          "on_directory_index_clist_button_press_event" : (on_generic_clist_button_press_event, on_directory_index_edit_clicked),
          "on_ssl_engine_cbox_toggled" : on_ssl_engine_cbox_toggled,
          "on_pass_env_add_button_clicked" : on_pass_env_add_button_clicked,
          "on_pass_env_edit_button_clicked" : on_pass_env_edit_button_clicked,
          "on_pass_env_delete_button_clicked" : on_pass_env_delete_button_clicked,
          "on_pass_env_clist_select_row" : (on_generic_clist_select_row, xml.get_widget ("pass_env_edit_button"), xml.get_widget ("pass_env_delete_button")),
          "on_pass_env_clist_unselect_row" : (on_generic_clist_unselect_row, xml.get_widget ("pass_env_edit_button"), xml.get_widget ("pass_env_delete_button")),
          "on_pass_env_clist_button_press_event" : (on_generic_clist_button_press_event, on_pass_env_edit_button_clicked),
          "on_set_env_add_button_clicked" : on_set_env_add_button_clicked,
          "on_set_env_edit_button_clicked" : on_set_env_edit_button_clicked,
          "on_set_env_delete_button_clicked" : on_set_env_delete_button_clicked,
          "on_set_env_clist_select_row" : (on_generic_clist_select_row, xml.get_widget ("set_env_edit_button"), xml.get_widget ("set_env_delete_button")),
          "on_set_env_clist_unselect_row" : (on_generic_clist_unselect_row, xml.get_widget ("set_env_edit_button"), xml.get_widget ("set_env_delete_button")),
          "on_set_env_clist_button_press_event" : (on_generic_clist_button_press_event, on_set_env_edit_button_clicked),
          "on_unset_env_add_button_clicked" : on_unset_env_add_button_clicked,
          "on_unset_env_edit_button_clicked" : on_unset_env_edit_button_clicked,
          "on_unset_env_delete_button_clicked" : on_unset_env_delete_button_clicked,
          "on_unset_env_clist_select_row" : (on_generic_clist_select_row, xml.get_widget ("unset_env_edit_button"), xml.get_widget ("unset_env_delete_button")),
          "on_unset_env_clist_unselect_row" : (on_generic_clist_unselect_row, xml.get_widget ("unset_env_edit_button"), xml.get_widget ("unset_env_delete_button")),
          "on_unset_env_clist_button_press_event" : (on_generic_clist_button_press_event, on_unset_env_edit_button_clicked),
          "on_env_dialog_clicked" : on_env_dialog_clicked,
          "on_dir_options_clist_select_row" : (on_generic_clist_select_row, xml.get_widget ("dir_options_edit_button"), xml.get_widget ("dir_options_delete_button")),
          "on_dir_options_clist_unselect_row" : (on_generic_clist_unselect_row, xml.get_widget ("dir_options_edit_button"), xml.get_widget ("dir_options_delete_button")),
          "on_dir_options_clist_button_press_event" : (on_generic_clist_button_press_event, on_dir_options_edit_button_clicked ),
          "on_dir_options_add_button_clicked" : on_dir_options_add_button_clicked,
          "on_dir_options_edit_button_clicked" : on_dir_options_edit_button_clicked,
          "on_dir_options_delete_button_clicked" : on_dir_options_delete_button_clicked,
          "on_dir_options_help_button_clicked" : on_dir_options_help_button_clicked,
          "on_default_dir_options_edit_button_clicked" : on_default_dir_options_edit_button_clicked,
          "on_order_deny_group_toggled" : on_order_deny_group_toggled,
          "on_dir_opt_dialog_deny_all_rbutton_toggled" : (on_generic_toggle_set_sensitive, xml.get_widget ("deny_list_entry"), True),
          "on_dir_opt_dialog_allow_all_rbutton_toggled" : (on_generic_toggle_set_sensitive, xml.get_widget ("allow_list_entry"), True),
          })

    setup ()
    # quick hack to show

    gtk.main ()



# Have we been called? Then just kick in and run our main function
if __name__ == "__main__":
    signal.signal (signal.SIGINT, signal.SIG_DFL)
    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.0064 ]--