#!/usr/bin/env python import os, signal, sys import regex from string import * from Gtkinter import * import GtkExtra # Version 0.3: requires gtk+/glib 1.0.6 and pygtk 0.4.5 # see www.employees.org/~stannous/gconfig.html for latest news ############################################################### # # Copyright (c) 1995-1998 by Cisco systems, Inc. # # Permission to use, copy, modify, and distribute this software for # any purpose and without fee is hereby granted, provided that this # copyright and permission notice appear on all copies of the # software and supporting documentation, the name of Cisco Systems, # Inc. not be used in advertising or publicity pertaining to # distribution of the program without specific prior permission, and # notice be given in supporting documentation that modification, # copying and distribution is by permission of Cisco Systems, Inc. # # Cisco Systems, Inc. makes no representations about the suitability # of this software for any purpose. THIS SOFTWARE IS PROVIDED ``AS # IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, # WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND # FITNESS FOR A PARTICULAR PURPOSE. # ############################################################### class Config: def __init__(self): self.hostname_entry = "" self.prompt_entry = "" self.enable_password_entry = "" self.console_password_entry = "" self.telnet_password_entry = "" self.enable_clear_button1 = 1 self.console_clear_button1 = 1 self.telnet_password_button1 = 1 self.enable_clear_button2 = 0 self.console_clear_button2 = 0 self.telnet_password_button2 = 0 self.time_button1 = 0 self.time_button2 = 0 self.time_button3 = 0 self.time_button4 = 0 self.time_button5 = 0 self.time_button6 = 0 self.time_button7 = 0 self.time_button8 = 0 self.time_button9 = 0 self.time_button10 = 0 self.time_button11 = 0 self.time_button12 = 0 self.time_button13 = 0 self.time_button14 = 0 self.time_button15 = 0 self.time_button16 = 0 self.time_button17 = 0 self.username_dict = {} self.interface_list = [] class Gconfig(Config): def __init__(self, argv): self.server_filename='/home/stannous/tac-4.0.2/tac_plus' self.server_port='49' self.config_filename='/home/stannous/tac-4.0.2/cdl.cfg' self.debug_filename='/var/tmp/tac_plus.log' self.router_init = 0 self.router_count = 0 self.config_tree_children = 0 self.notebook_dict = {} self.router_config_entries = ['hostname_entry', 'prompt_entry', 'enable_password_entry', 'console_password_entry', 'telnet_password_entry', ] self.router_config_checkbuttons = ['enable_clear_button1', 'console_clear_button1', 'telnet_password_button1', 'enable_clear_button2', 'console_clear_button2', 'telnet_password_button2', 'time_button1', 'time_button2', 'time_button3', 'time_button4', 'time_button5', 'time_button6', 'time_button7', 'time_button8', 'time_button9', 'time_button10', 'time_button11', 'time_button12', 'time_button13', 'time_button14', 'time_button15', 'time_button16', 'time_button17'] self.router_list = [] self.router_dict = {} self.called_from_restart = 0 self.main_window=GtkWindow() self.main_window.set_title("Gconfig") self.main_window.set_usize(900,600) self.main_window.position(WIN_POS_MOUSE) self.main_vbox=GtkVBox() self.init_menu() self.init_toolbar() self.main_hbox=GtkHBox() self.main_vbox.pack_start(self.main_hbox) self.init_tree() self.init_notebook() self.create_welcome() self.init_notebook_dict() self.init_statusbar() self.main_window.add(self.main_vbox) self.main_hbox.show() self.main_vbox.show() self.main_window.show() def init_statusbar(self): self.status_bar = GtkStatusbar() self.main_vbox.pack_start(self.status_bar, expand=FALSE) self.status_bar.show() self.status_bar.push(2,"Welcome to Gconfig v 0.3") def init_notebook_dict(self): self.notebook_dict['Global'] = self.global_notebook self.notebook_dict['Interfaces'] = self.interface_notebook self.notebook_dict['IPSec'] = self.ipsec_notebook self.notebook_dict['Routing'] = self.routing_notebook self.notebook_dict['Access-lists'] = self.access_list_notebook self.notebook_dict['IBM'] = self.ibm_notebook self.notebook_dict['Tacacs+'] = self.tacacs_notebook self.notebook_dict['Syslog'] = self.syslog_notebook self.notebook_dict['TFTP'] = self.tftp_notebook self.notebook_dict['Scheduler'] = self.scheduler_notebook self.notebook_dict['Database'] = self.database_notebook self.notebook_dict["Access List Design"] = self.access_list_design_notebook self.notebook_dict["IP Subnet Design"] = self.ip_subnet_notebook self.notebook_dict["Debug Analysis"] = self.debug_notebook self.notebook_dict["Show Analysis"] = self.show_analysis_notebook self.notebook_dict["Config Analysis"] = self.config_analysis_notebook self.notebook_dict["IOS Commands"] = self.ios_commands_notebook self.notebook_dict["Error Codes"] = self.error_code_notebook def mainloop(self): mainloop() def process_file_new(self, mi=None): pass def process_file_open(self, mi=None): pass def process_file_save(self, mi=None): pass def process_file_saveas(self, mi=None): pass def process_file_close(self, mi=None): pass def process_file_exit(self, mi=None,ni=None): mainquit() def process_edit_cut(self, mi=None): pass def process_edit_find(self, mi=None): pass def process_edit_find_next(self, mi=None): pass def process_edit_paste(self, mi=None): pass def process_edit_copy(self, mi=None): pass def process_edit_clear(self, mi=None): pass def process_help_about(self, mi=None): pass def do_exit(self,ni=None): mainquit() def file_open_callback(self,ni=None): pass # print "in file open callback" def init_banner(self): self.main_banner = GtkLabel("testing") # self.main_banner.set_usize(800,25) hbox = GtkHBox() hbox.pack_start(self.main_banner,expand=TRUE, fill=TRUE) self.main_vbox.pack_start(hbox,expand=TRUE, fill=TRUE) self.main_banner.set_justify(JUSTIFY_LEFT) self.main_banner.show() hbox.show() def init_toolbar(self): self.main_toolbar = GtkToolbar() self.main_vbox.pack_start(self.main_toolbar, expand=FALSE) self.main_toolbar.show() win = GtkWindow() pix, mask = create_pixmap_from_xpm(win, None, "router.xpm") self.main_toolbar.append_item("File", "Add Router", "Add Router", GtkPixmap(pix, mask), self.add_router_callback) pix, mask = create_pixmap_from_xpm(win, None, "cut.xpm") self.main_toolbar.append_item("File", "Remove Router", "Remove Router", GtkPixmap(pix, mask), self.remove_router_callback) pix, mask = create_pixmap_from_xpm(win, None, "import.xpm") self.main_toolbar.append_item("File", "Import IOS Config", "Import IOS Config", GtkPixmap(pix, mask), self.get_ios_config) pix, mask = create_pixmap_from_xpm(win, None, "export.xpm") self.main_toolbar.append_item("File", "Export IOS Config", "Export IOS Config", GtkPixmap(pix, mask), self.file_open_callback) pix, mask = create_pixmap_from_xpm(win, None, "open.xpm") self.main_toolbar.append_item("File", "Horizontal toolbar layout", "Horizontal toolbar layout", GtkPixmap(pix, mask), self.file_open_callback) pix, mask = create_pixmap_from_xpm(win, None, "new.xpm") self.main_toolbar.append_item("File", "Horizontal toolbar layout", "Horizontal toolbar layout", GtkPixmap(pix, mask), self.file_open_callback) pix, mask = create_pixmap_from_xpm(win, None, "copy.xpm") self.main_toolbar.append_item("File", "Horizontal toolbar layout", "Horizontal toolbar layout", GtkPixmap(pix, mask), self.file_open_callback) pix, mask = create_pixmap_from_xpm(win, None, "paste.xpm") self.main_toolbar.append_item("File", "Horizontal toolbar layout", "Horizontal toolbar layout", GtkPixmap(pix, mask), self.file_open_callback) self.main_toolbar.show() def init_menu(self): self.main_menubar=GtkExtra.MenuFactory() self.main_menubar.add_entries([ ('File/New Router', 'N', self.add_router_callback), ('File/Import IOS Config', None, self.get_ios_config), ('File/Export IOS Config', None, self.process_file_saveas), ('File/',None, None), ('File/Exit', 'Q', self.process_file_exit), ('Edit/Cut', 'X', self.process_edit_cut), ('Edit/Copy', 'C', self.process_edit_copy), ('Edit/Paste', 'V', self.process_edit_paste), ('Edit/Clear', None, self.process_edit_clear), ('Edit/',None, None), ('Edit/Find...', None, self.process_edit_find), ('Edit/Find Next', None, self.process_edit_find_next), ('Servers/TACACS+',None,self.menu_item_selected,"Tacacs+"), ('Servers/Syslog', 'Y', self.menu_item_selected,"Syslog"), ('Servers/TFTP', 'F', self.menu_item_selected,"TFTP"), ('Servers/Scheduler', 'c', self.menu_item_selected,"Scheduler"), ('Servers/Database', 'd', self.menu_item_selected,"Database"), ('Tools/Access-list Design', 'A', self.menu_item_selected,"Access List Design"), ('Tools/IP Subnet Design', 'I', self.menu_item_selected,"IP Subnet Design"), ('Tools/Debug Analysis', 'D', self.menu_item_selected,"Debug Analysis"), ('Tools/Show Analysis', 's', self.menu_item_selected,"Show Analysis"), ('Tools/Config Analysis', 'C', self.menu_item_selected,"Config Analysis"), ('Tools/IOS Commands', 'i', self.menu_item_selected,"IOS Commands"), ('Tools/Error Codes', 'a', self.menu_item_selected,"Error Codes"), ('Help/Help on Servers...', None,self.process_help_about), ('Help/Help on Tools...', None, self.process_help_about), ('Help/Help Index...', None, self.process_help_about), ('Help/About...', None, self.process_help_about) ]) self.main_vbox.pack_start(self.main_menubar, expand=FALSE) self.main_menubar.show() return def addtreeitem(self,label=None,tree=None,router=None): item = GtkTreeItem(label) tree.append(item) item.show() item.connect("select",self.tree_item_selected,label,router) # print "created ",item,"for tree item ",label return item def init_tree(self): self.main_tree = GtkTree() self.tree_sw = GtkScrolledWindow() self.tree_sw.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC) self.tree_sw.set_usize(175,600) self.main_hbox.add(self.tree_sw) self.tree_sw.add(self.main_tree) self.main_tree.set_view_lines(TRUE) self.main_tree.set_view_mode(TRUE) self.main_tree.show() ############################################ self.user_item = self.addtreeitem("user@foo.com",self.main_tree) self.user_tree = GtkTree() self.user_item.set_subtree(self.user_tree) ################################ # self.server_item = self.addtreeitem("Server Control",self.user_tree) # self.server_tree = GtkTree() # self.server_item.set_subtree(self.server_tree) # ######################################### # self.tools_item = self.addtreeitem("Tools",self.user_tree) # self.tools_tree = GtkTree() # self.tools_item.set_subtree(self.tools_tree) # item = self.addtreeitem("Access List Design",self.tools_tree) # item = self.addtreeitem("IP Subnet Design",self.tools_tree) # item = self.addtreeitem("Debug Analysis",self.tools_tree) # item = self.addtreeitem("Show Analysis",self.tools_tree) # item = self.addtreeitem("Config Analysis",self.tools_tree) # item = self.addtreeitem("IOS Commands",self.tools_tree) # item = self.addtreeitem("Error Codes",self.tools_tree) self.config_item = self.addtreeitem("Router Configuration",self.user_tree) ################################ # item = self.addtreeitem("Tacacs+",self.server_tree) # item = self.addtreeitem("Syslog",self.server_tree) # item = self.addtreeitem("TFTP",self.server_tree) # item = self.addtreeitem("Scheduler",self.server_tree) # item = self.addtreeitem("Database",self.server_tree) self.tree_sw.show() def get_ios_config(self,x = None,y=None): # print "in get_ios_config",x self.ios_window = GtkFileSelection ("Select IOS Config Filename") self.ios_window.ok_button.connect("clicked",self.parse_ios_config) self.ios_window.cancel_button.connect("clicked",self.ios_window.destroy) # self.ios_window.set_filename(self.server_filename); self.ios_window.hide_fileop_buttons(); self.ios_window.show() def parse_ios_config(self,x=None): ios_config_filename = self.ios_window.get_filename() self.ios_window.destroy() config = open(ios_config_filename) lines = config.readlines() for line in lines: word = split(line) if len(word) > 1: if word[0] == 'hostname': self.create_router_from_config(word[1]) # print "importing router",word[1] if word[0] == 'interface': self.router_dict[self.current_router].interface_list.append(word[1]) # print " imported interface",word[1] self.interface_clist.append([word[1]]) def add_router_callback(self,ni=None, a = None): self.get_router_name() return def remove_router_callback(self,button=None): list = self.main_tree.get_selection() # print "\nmain_tree get selection list = ",list for i in list: child = self.config_tree.is_child(i) if (child): self.config_tree.remove_items(list) self.config_tree_children = len(self.config_tree.children()) # print "children left = ",self.config_tree_children if (self.config_tree_children == 0): del self.config_tree def create_router_from_config(self,label): if (label is ''): self.show_message_box("Router name is blank. Please try again.") return if (self.router_dict.has_key(label)): self.show_message_box("Router "+ label+" already exists. Ignoring Config.") return if (self.config_tree_children == 0): self.config_tree = GtkTree() self.config_item.set_subtree(self.config_tree) self.router_count = self.router_count + 1 self.create_router(self.config_tree,label) self.config_tree_children = len(self.config_tree.children()) return def router_name_ok(self,ni=None): temp = self.router_entry.get_text() label = strip(temp) if (label is ''): self.show_message_box("Router label is blank. Please try again.") return if (self.router_dict.has_key(label)): self.show_message_box("Router "+ label+" already exists. Please enter a unique Router label") return if (self.config_tree_children == 0): # print "in except" self.config_tree = GtkTree() self.config_item.set_subtree(self.config_tree) self.router_count = self.router_count + 1 self.create_router(self.config_tree,label) self.config_tree_children = len(self.config_tree.children()) self.router_name_window.destroy() return def get_router_name(self, mi=None): self.router_name_window=GtkWindow() self.router_name_window.position(WIN_POS_MOUSE) # self.router_name_window.set_usize(200,200) vbox=GtkVBox() self.router_name_window.add(vbox) label = GtkLabel("Enter Router Name") vbox.pack_start(label,expand=TRUE,fill=TRUE,padding=30) label.show() self.router_entry = GtkEntry() vbox.pack_start(self.router_entry,expand=TRUE,fill = FALSE,padding=10) self.router_entry.connect("activate",self.router_name_ok) self.router_entry.show() hbox = GtkHBox() vbox.pack_start(hbox,expand=FALSE,fill=TRUE) button = GtkButton("OK") button.connect("clicked",self.router_name_ok) hbox.pack_start(button,expand=TRUE,fill=TRUE,padding=5) button.show() button = GtkButton("Cancel") button.connect("clicked",self.router_name_window.destroy) hbox.pack_start(button,expand=TRUE,fill=TRUE,padding=5) button.show() hbox.show() vbox.show() self.router_name_window.show() return def create_router(self,subtree = None,label = None): self.router = Config() self.router_list.append(self.router) self.router_dict[label] = self.router self.router_item = self.addtreeitem(label,self.config_tree) self.router_tree = GtkTree() self.router_item.set_subtree(self.router_tree) item = self.addtreeitem("Global",self.router_tree,label) item = self.addtreeitem("Interfaces",self.router_tree,label) item = self.addtreeitem("IPSec",self.router_tree,label) item = self.addtreeitem("Routing",self.router_tree,label) item = self.addtreeitem("Access-lists",self.router_tree,label) item = self.addtreeitem("IBM",self.router_tree,label) if (not self.router_init): self.router_init = 1 self.current_router = label return def set_hostname_entry(self,text=None): pass def printit(self,x = None): print x def save_entries(self): # this is really just a shorthand way of doing the following (one for each entry): # self.router_dict[self.current_router].hostname_entry = self.hostname_entry.get_text() # self.router_dict[self.current_router].prompt_entry = self.prompt_entry.get_text() for i in self.router_config_entries: a = getattr(self,i).get_text() setattr(self.router_dict[self.current_router],i,a) for i in self.router_config_checkbuttons: a = getattr(self,i).active # print 'saving i = ',i, 'a = ',a setattr(self.router_dict[self.current_router],i,a) def refresh_entries(self): # this is really just a shorthand way of doing the following (one for each entry): # self.hostname_entry.set_text(self.router_dict[self.current_router].hostname_entry) # self.prompt_entry.set_text (self.router_dict[self.current_router].prompt_entry) for i in self.router_config_entries: a = getattr(self.router_dict[self.current_router],i) getattr(self,i).set_text(a) for i in self.router_config_checkbuttons: a = getattr(self.router_dict[self.current_router],i) # print 'refresh: i = ',i, 'a = ',a getattr(self,i).set_state(a) self.username_clist.clear() for username in self.router_dict[self.current_router].username_dict.keys(): entry = [username,self.router_dict[self.current_router].username_dict[username]] self.username_clist.append(entry) def tree_item_selected(self, instance=None,label=None,router=None): if (router is not None): self.save_entries() self.current_router = router self.refresh_entries() if (self.notebook_dict.has_key(label)): self.current_notebook.hide() self.notebook_dict[label].show() self.current_notebook = self.notebook_dict[label] def menu_item_selected(self, a=None,b=None,c=None): label = b[0] if (self.notebook_dict.has_key(label)): self.current_notebook.hide() self.notebook_dict[label].show() self.current_notebook = self.notebook_dict[label] def init_notebook(self): self.notebook_sw = GtkScrolledWindow() self.notebook_sw.set_policy(POLICY_AUTOMATIC, POLICY_AUTOMATIC) self.main_hbox.pack_start(self.notebook_sw) self.notebook_sw.set_usize(725,600) self.notebook_sw.show() self.notebook_hbox = GtkHBox() self.notebook_hbox.show() self.notebook_sw.add(self.notebook_hbox) self.create_global_notebook() self.create_interface_notebook() self.create_ipsec_notebook() self.create_routing_notebook() self.create_access_list_notebook() self.create_ibm_notebook() self.create_tacacs_notebook() self.create_syslog_notebook() self.create_tftp_notebook() self.create_scheduler_notebook() self.create_database_notebook() self.create_access_list_design_notebook() self.create_ip_subnet_notebook() self.create_debug_notebook() self.create_show_analyis_notebook() self.create_config_analysis_notebook() self.create_ios_commands_notebook() self.create_error_code_notebook() def create_welcome(self): label = GtkLabel("Welcome to Gconfig v 0.2\n\nExpand the tree to the left and click on the labels to change the active notebook.\nTo add a router, click on the router symbol in the toolbar.\nTo import a router config, click on the import button in the toolbar.") self.notebook_hbox.pack_start(label) label.show() self.current_notebook = label def create_global_notebook(self): self.global_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.global_notebook) self.init_global_page1() def create_interface_notebook(self): self.interface_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.interface_notebook) self.init_interface_page1() def create_ipsec_notebook(self): self.ipsec_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.ipsec_notebook) self.init_ipsec_page1() def create_routing_notebook(self): self.routing_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.routing_notebook) self.init_routing_page1() def create_access_list_notebook(self): self.access_list_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.access_list_notebook) self.init_access_list_page1() def create_ibm_notebook(self): self.ibm_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.ibm_notebook) self.init_ibm_page1() def create_tacacs_notebook(self): self.tacacs_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.tacacs_notebook) self.init_server_page() self.init_groups_page() self.init_users_page() def create_tftp_notebook(self): self.tftp_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.tftp_notebook) self.init_tftp_page1() def create_syslog_notebook(self): self.syslog_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.syslog_notebook) self.init_syslog_page1() def create_scheduler_notebook(self): self.scheduler_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.scheduler_notebook) self.init_scheduler_page1() def create_database_notebook(self): self.database_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.database_notebook) self.init_database_page1() ################################################ def create_access_list_design_notebook(self): self.access_list_design_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.access_list_design_notebook) def create_ip_subnet_notebook(self): self.ip_subnet_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.ip_subnet_notebook) self.init_page1(self.ip_subnet_notebook) def create_debug_notebook(self): self.debug_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.debug_notebook) def create_show_analyis_notebook(self): self.show_analysis_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.show_analysis_notebook) def create_config_analysis_notebook(self): self.config_analysis_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.config_analysis_notebook) def create_ios_commands_notebook(self): self.ios_commands_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.ios_commands_notebook) def create_error_code_notebook(self): self.error_code_notebook = GtkNotebook() self.notebook_hbox.pack_start(self.error_code_notebook) def add_username(self,aa=None): # print self.username_entry.get_text(), self.password_entry.get_text() entry = [self.username_entry.get_text(), self.password_entry.get_text()] entry[0] = strip(entry[0]) entry[1] = strip(entry[1]) if (self.router_dict[self.current_router].username_dict.has_key(entry[0])): self.show_message_box("This Username already exists. Please enter a unique Username") return if (entry[0] is ''): self.show_message_box("Username is blank. Please try again.") return self.username_clist.append(entry) self.username_entry.set_text("") self.password_entry.set_text("") # print "entry = ",entry # print "current router = ",self.router_dict[self.current_router].hostname self.router_dict[self.current_router].username_dict[entry[0]]=entry[1] def delete_username(self,clist=None): del self.router_dict[self.current_router].username_dict[self.username_entry.get_text()] self.username_clist.remove(self.username_clist_row) def edit_username(self,aa=None): self.username_clist.remove(self.username_clist_row) entry = [self.username_entry.get_text(), self.password_entry.get_text()] self.username_clist.insert(self.username_clist_row,entry) def clist_select_row(self,clist,row,column,event): # print clist,row,column,event self.username_clist_row = row self.username_entry.set_text(clist.get_text(row,0)) self.password_entry.set_text(clist.get_text(row,1)) def addwidget(self,type=None,name=None,function=None,container=None,filler=None): if (type is "button"): widget = GtkButton(name) container.pack_start(widget,expand=FALSE,fill=TRUE,padding=0) widget.connect("clicked",function) elif (type is "label"): widget = GtkLabel(name) container.pack_start(widget,expand=FALSE,fill=FALSE,padding=3) elif (type is "entry"): widget = GtkEntry() container.pack_start(widget,expand=FALSE,fill=TRUE,padding=0) widget.connect("activate",function) widget.set_text(filler) elif (type is "checkbutton"): widget = GtkCheckButton(name) container.pack_start(widget,expand=FALSE,fill=TRUE,padding=0) widget.show() return widget def addwidget_table(self,type=None,name=None,function=None,filler=None,container,la, ra, ta, ba): if (type is "button"): widget = GtkButton(name) widget.connect("clicked",function) elif (type is "label"): widget = GtkLabel(name) elif (type is "entry"): widget = GtkEntry() widget.connect("activate",function) widget.set_text(filler) elif (type is "checkbutton"): widget = GtkCheckButton(name) elif (type is "radiobutton"): widget = GtkRadioButton(filler,name) container.attach(widget,la,ra,ta,ba,FILL|EXPAND,FILL) widget.show() return widget def addvbox(self,hbox=None): vbox = GtkVBox() vbox.show() hbox.pack_start(vbox,padding=5) return vbox def init_page1(self,notebook=None): hbox = GtkHBox() label = GtkLabel("IP Subnet Calculator") notebook.append_page(hbox,label) hbox.show() vbox = self.addvbox(hbox) table = GtkTable(14,14) vbox.pack_start(table) table.set_row_spacings(10) table.set_col_spacings(10) table.show() label = self.addwidget_table("label","Base Network Address (e.g.131.108.0.0)",None,None,table,2,3,1,2) entry = self.addwidget_table("entry",None,self.set_hostname_entry,"",table,3,4,1,2) label = self.addwidget_table("label","Address Mask or Classful Mask Bits",None,None,table,2,3,2,3) entry = self.addwidget_table("entry",None,self.set_hostname_entry,"",table,3,4,2,3) label = self.addwidget_table("label","Number of Subnets",None,None,table,2,3,3,4) entry = self.addwidget_table("entry",None,self.set_hostname_entry,"",table,3,4,3,4) label = self.addwidget_table("label","Number of Hosts per Subnets",None,None,table,2,3,4,5) entry = self.addwidget_table("entry",None,self.set_hostname_entry,"",table,3,4,4,5) cb = self.addwidget_table("checkbutton","Zero Subnetting",None,None,table,4,5,1,2) def init_global_page1(self): hbox = GtkHBox() label = GtkLabel("Router Access") self.global_notebook.append_page(hbox, label) hbox.show() ################################################# vbox = self.addvbox(hbox) access_table = GtkTable(14,14) vbox.pack_start(access_table) access_table.set_row_spacings(10) access_table.set_col_spacings(10) access_table.show() hostname_label = self.addwidget_table("label","Router Hostname",None,None, access_table,2,3,1,2) self.hostname_entry = self.addwidget_table("entry",None,self.set_hostname_entry,"", access_table,3,4,1,2) label = self.addwidget_table("label","Router Prompt",None,None, access_table,2,3,2,3) self.prompt_entry = self.addwidget_table("entry",None,self.set_hostname_entry,"", access_table,3,4,2,3) label = self.addwidget_table("label","Enable Password",None,None, access_table,2,3,3,4) self.enable_password_entry = self.addwidget_table("entry",None,self.set_hostname_entry,"", access_table,3,4,3,4) self.enable_clear_button1 = self.addwidget_table("radiobutton","Clear",None,None, access_table,4,5,3,4) self.enable_clear_button2 = self.addwidget_table("radiobutton","Encrypted",None,self.enable_clear_button1, access_table,5,6,3,4) label = self.addwidget_table("label","Console Port Password",None,None, access_table,2,3,4,5) self.console_password_entry = self.addwidget_table("entry",None,self.set_hostname_entry,"", access_table,3,4,4,5) self.console_clear_button1 = self.addwidget_table("radiobutton","Password Only",None,None, access_table,4,5,4,5) self.console_clear_button2 = self.addwidget_table("radiobutton","Username and Password",None,self.console_clear_button1, access_table,5,6,4,5) label = self.addwidget_table("label","Telnet (vty) Password",None,None, access_table,2,3,5,6) self.telnet_password_entry = self.addwidget_table("entry",None,self.set_hostname_entry,"", access_table,3,4,5,6) self.telnet_password_button1 = self.addwidget_table("radiobutton","Password Only",None,None, access_table,4,5,5,6) self.telnet_password_button2 = self.addwidget_table("radiobutton","Username and Password",None,self.telnet_password_button1, access_table,5,6,5,6) titles = ["Username","Password"] self.username_clist = GtkCList(2,titles) self.username_clist.set_column_width(0,100) self.username_clist.set_column_width(1,200) self.username_clist.set_column_width(2,200) self.username_clist.connect("select_row",self.clist_select_row) access_table.attach(self.username_clist,2,6,6,10,FILL,FILL|EXPAND) self.username_clist.show() label = self.addwidget_table("label","Username",None,None, access_table,2,3,10,11) self.username_entry = self.addwidget_table("entry",None,self.set_hostname_entry,"", access_table,3,4,10,11) label = self.addwidget_table("label","Password",None,None, access_table,4,5,10,11) self.password_entry = self.addwidget_table("entry",None,self.set_hostname_entry,"", access_table,5,6,10,11) button = self.addwidget_table("button","Add User",self.add_username,None, access_table,2,3,12,13) button = self.addwidget_table("button","Delete User",self.delete_username,None, access_table,3,4,12,13) button = self.addwidget_table("button","Modify User",self.edit_username,None, access_table,4,5,12,13) #################################################### hbox = GtkHBox() label = GtkLabel("Services") self.global_notebook.append_page(hbox, label) hbox.show() vbox = self.addvbox(hbox) table = GtkTable(14,14) vbox.pack_start(table) table.set_row_spacings(10) table.set_col_spacings(10) table.show() self.time_button1 = self.addwidget_table("checkbutton","Encrypt System Passwords",None,None,table,2,3,1,2) self.time_button2 = self.addwidget_table("checkbutton","Add Timestamps to Debug",None,None,table,2,3,2,3) self.time_button3 = self.addwidget_table("radiobutton","Use System Uptime",None,None, table,4,5,2,3) self.time_button4 = self.addwidget_table("radiobutton","Use Current Time",None,self.time_button3, table,5,6,2,3) self.time_button5= self.addwidget_table("checkbutton","Use local time",None,None,table,4,5,3,4) self.time_button6 = self.addwidget_table("checkbutton","Include Milliseconds",None,None,table,5,6,3,4) self.time_button7 = self.addwidget_table("checkbutton","Include Time Zone",None,None,table,6,7,3,4) self.time_button8 = self.addwidget_table("checkbutton","Add Timestamps to Log",None,None,table,2,3,4,5) self.time_button9 = self.addwidget_table("radiobutton","Use System Uptime",None,None, table,4,5,4,5) self.time_button10 = self.addwidget_table("radiobutton","Use Current Time",None,self.time_button9, table,5,6,4,5) self.time_button11 = self.addwidget_table("checkbutton","Use local time",None,None,table,4,5,5,6) self.time_button12 = self.addwidget_table("checkbutton","Include Milliseconds",None,None,table,5,6,5,6) self.time_button13 = self.addwidget_table("checkbutton","Include Time Zone",None,None,table,6,7,5,6) self.time_button14 = self.addwidget_table("checkbutton","Respond to Finger requests",None,None,table,2,3,6,7) self.time_button15 = self.addwidget_table("checkbutton","Zero Idle TCP connection",None,None,table,2,3,7,8) self.time_button16 = self.addwidget_table("checkbutton","Enable small TCP servers",None,None,table,2,3,8,9) self.time_button17 = self.addwidget_table("checkbutton","Enable small UDP servers",None,None,table,2,3,9,10) ########################################## hbox = GtkHBox() label = GtkLabel("Clock Settings") self.global_notebook.append_page(hbox, label) vbox = self.addvbox(hbox) hbox.show() table = GtkTable(14,14) vbox.pack_start(table) table.set_row_spacings(10) table.set_col_spacings(10) table.show() self.encryption_checkbutton = self.addwidget_table("checkbutton","Configure Time Zone",None,None,table,2,3,1,2) entry = self.addwidget_table("entry",None,self.set_hostname_entry,"EST", table,3,4,1,2) label = self.addwidget_table("label","UTC offset",None,None,table,4,5,1,2) self.encryption_checkbutton = self.addwidget_table("checkbutton","Recurring Daylight Savings",None,None,table,2,3,2,3) self.encryption_checkbutton = self.addwidget_table("checkbutton","Adjust Daylight Savings",None,None,table,2,3,3,4) label = self.addwidget_table("label","Day",None,None,table,3,4,3,4) label = self.addwidget_table("label","Month",None,None,table,4,5,3,4) label = self.addwidget_table("label","Year",None,None,table,5,6,3,4) label = self.addwidget_table("label","Time (military)",None,None,table,6,7,3,4) label = self.addwidget_table("label","Start Date",None,None,table,2,3,4,5) label = self.addwidget_table("label","End Date",None,None,table,2,3,5,6) # mlist = ["Sun","Mon","Tue"] # box = GtkCombo()# # optionmenu = GtkOptionMenu() # optionmenu.set_menu(create_menu(1)) # box2.pack_start(optionmenu) # optionmenu.show() # table.attach(box,3,4,4,5,FILL,FILL) # box.show() # adjustment = GtkAdjustment(-5, -23, +23, 1, 1, 0) # spin = GtkSpinButton(adjustment,4,0) # spin.set_wrap(FALSE) # table.attach(spin,5,6,1,2,FILL,FILL) # spin.show() # adjustment = GtkAdjustment(1, 1, 31, 1, 1, 0) # spin = GtkSpinButton(adjustment,4,0) # spin.set_wrap(FALSE) # table.attach(spin,3,4,4,5,FILL,FILL) # spin.show() # adjustment = GtkAdjustment(1, 1, 31, 1, 1, 0) # spin = GtkSpinButton(adjustment,4,0) # spin.set_wrap(FALSE) # table.attach(spin,3,4,5,6,FILL,FILL) # spin.show() # adjustment = GtkAdjustment(1, 1, 12, 1, 1, 0) # spin = GtkSpinButton(adjustment,4,0) # spin.set_wrap(FALSE) # table.attach(spin,4,5,4,5,FILL,FILL) # spin.show() # adjustment = GtkAdjustment(1, 1, 12, 1, 1, 0) # spin = GtkSpinButton(adjustment,4,0) # spin.set_wrap(FALSE) # table.attach(spin,4,5,5,6,FILL,FILL) # spin.show() # adjustment = GtkAdjustment(1999, 1900, 2050, 1, 1, 0) # spin = GtkSpinButton(adjustment,7,0) # spin.set_wrap(FALSE) # table.attach(spin,5,6,4,5,FILL,FILL) # spin.show() # adjustment = GtkAdjustment(1999, 1900, 2050, 1, 1, 0) # spin = GtkSpinButton(adjustment,7,0) # spin.set_wrap(FALSE) # table.attach(spin,5,6,5,6,FILL,FILL) # spin.show() # spin.show() # adjustment = GtkAdjustment(2, 0, 24, 1, 1, 0) # spin = GtkSpinButton(adjustment,0,0) # spin.set_wrap(FALSE) # table.attach(spin,6,7,4,5,FILL,FILL) # spin.show() # adjustment = GtkAdjustment(2,0,24, 1, 1, 0) # spin = GtkSpinButton(adjustment,0,0) # spin.set_wrap(FALSE) # table.attach(spin,6,7,5,6,FILL,FILL) # spin.show() # optionmenu = GtkOptionMenu() # menu = GtkMenu() # group = None # for i in range(-23,24): # menuitem = GtkRadioMenuItem(group,"UTC %i" % i) # group = menuitem # menu.append(menuitem) # menuitem.show() # optionmenu.set_menu(menu) # table.attach(optionmenu,4,5,1,2,FILL,FILL) # optionmenu.show() #################################### hbox = GtkHBox() label = GtkLabel("AAA") self.global_notebook.append_page(hbox, label) vbox = self.addvbox(hbox) hbox.show() titles = ["Type of AAA","What to Check","Method Name","AAA Server","Failover Server"] self.aaa_clist = GtkCList(5,titles) self.aaa_clist.set_column_width(0,100) for i in range(1,5): self.aaa_clist.set_column_width(i,90) vbox.pack_start(self.aaa_clist) self.aaa_clist.show() aaa_table = GtkTable(3,3) vbox.pack_start(aaa_table) hbox = GtkHBox() vbox.pack_start(hbox,fill=FALSE,expand=FALSE) hbox.show() button1 = GtkRadioButton(None, "TACACS+") hbox.pack_start(button1) button1.show() button2 = GtkRadioButton(button1, "RADIUS") hbox.pack_start(button2) button2.show() button3 = GtkRadioButton(button2, "KRB5") hbox.pack_start(button3) button3.show() hbox = GtkHBox() vbox.pack_start(hbox,fill=FALSE,expand=FALSE) hbox.show() label = self.addwidget("label","AAA Server IP address",None,hbox,None) entry = self.addwidget("entry",None,None,hbox,"10.10.10.10") label = self.addwidget("label","AAA Server Key",None,hbox,None) entry = self.addwidget("entry",None,None,hbox,"secretkey") hbox = GtkHBox() label = GtkLabel("SNMP") self.global_notebook.append_page(hbox, label) hbox.show() hbox = GtkHBox() label = GtkLabel("Logging") self.global_notebook.append_page(hbox, label) hbox.show() hbox = GtkHBox() label = GtkLabel("NTP") self.global_notebook.append_page(hbox, label) hbox.show() hbox = GtkHBox() label = GtkLabel("DNS") self.global_notebook.append_page(hbox, label) hbox.show() def init_interface_page1(self): hbox = GtkHBox() label = GtkLabel("Basics") self.interface_notebook.append_page(hbox, label) hbox.show() ################################################# vbox = self.addvbox(hbox) table = GtkTable(14,14) vbox.pack_start(table) table.set_row_spacings(10) table.set_col_spacings(10) table.show() title = ["Interface"] self.interface_clist = GtkCList(1,title) self.interface_clist.set_column_width(0,100) self.interface_clist.set_column_width(1,100) self.interface_clist.connect("select_row",self.clist_select_row) table.attach(self.interface_clist,2,4,1,8) self.interface_clist.show() self.interfaces_notebook = GtkNotebook() self.interfaces_notebook.show() table.attach(self.interfaces_notebook,4,10,1,8) hbox = GtkHBox() label = GtkLabel("IP") self.interfaces_notebook.append_page(hbox, label) hbox.show() hbox = GtkHBox() label = GtkLabel("IPX") self.interfaces_notebook.append_page(hbox, label) hbox.show() hbox = GtkHBox() label = GtkLabel("AppleTalk") self.interfaces_notebook.append_page(hbox, label) hbox.show() hbox = GtkHBox() label = GtkLabel("DECNET") self.interfaces_notebook.append_page(hbox, label) hbox.show() # label = self.addwidget_table("label","Username",None,None, # table,2,3,10,11) # self.username_entry = self.addwidget_table("entry",None,self.set_hostname_entry,"", # table,3,4,10,11) # label = self.addwidget_table("label","Password",None,None, # table,4,5,10,11) # self.password_entry = self.addwidget_table("entry",None,self.set_hostname_entry,"", # table,5,6,10,11) # button = self.addwidget_table("button","Add User",self.add_username,None, # table,2,3,12,13) # button = self.addwidget_table("button","Delete User",self.delete_username,None, # table,3,4,12,13) # button = self.addwidget_table("button","Modify User",self.edit_username,None, # table,4,5,12,13) hbox = GtkHBox() label = GtkLabel("Advanced") self.interface_notebook.append_page(hbox, label) hbox.show() def init_ipsec_page1(self): hbox = GtkHBox() label = GtkLabel("Basic Ipsec") self.ipsec_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) def init_routing_page1(self): hbox = GtkHBox() label = GtkLabel("RIP v1") self.routing_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) hbox = GtkHBox() label = GtkLabel("RIP v2") self.routing_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) hbox = GtkHBox() label = GtkLabel("RIP v2") self.routing_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) hbox = GtkHBox() label = GtkLabel("IGRP") self.routing_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) hbox = GtkHBox() label = GtkLabel("EIGRP") self.routing_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) hbox = GtkHBox() label = GtkLabel("OSPF") self.routing_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) hbox = GtkHBox() label = GtkLabel("BGP") self.routing_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) def init_access_list_page1(self): hbox = GtkHBox() label = GtkLabel("Basic IP Access-list") self.access_list_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() hbox = GtkHBox() label = GtkLabel("Extended IP Access-list") self.access_list_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() hbox = GtkHBox() label = GtkLabel("IPX Access-list") self.access_list_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() def init_ibm_page1(self): hbox = GtkHBox() label = GtkLabel("Transparent Bridging") self.ibm_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) hbox = GtkHBox() label = GtkLabel("Source Route Bridging") self.ibm_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) hbox = GtkHBox() label = GtkLabel("Remote Source Route Bridging") self.ibm_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) hbox = GtkHBox() label = GtkLabel("DLSw") self.ibm_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) def init_tftp_page1(self): hbox = GtkHBox() label = GtkLabel("Basic Tftp") self.tftp_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) def init_syslog_page1(self): hbox = GtkHBox() label = GtkLabel("Basic Syslog") self.syslog_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) def init_scheduler_page1(self): hbox = GtkHBox() label = GtkLabel("Basic Scheduler") self.scheduler_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) def init_database_page1(self): hbox = GtkHBox() label = GtkLabel("Basic Database") self.database_notebook.append_page(hbox, label) ################## vbox1 ##################### vbox = self.addvbox(hbox) hbox.show() start_server_button = self.addwidget("button","Start",None,vbox,None) def delete_event(self,win, event=None): win.hide() # don't destroy window -- just leave it hidden return TRUE def show_message_box(self, message): self.dialog = GtkDialog() # print "show_message_box:", message self.dialog.set_title("Gconfig") self.dialog.position(WIN_POS_CENTER) label = GtkLabel(message) label.set_padding(30, 30) label.show() self.dialog.vbox.pack_start(label) button = GtkButton("OK") button.connect("clicked", self.dialog.destroy) button.show() self.dialog.action_area.pack_start(button) self.dialog.show() def checkfiles(self): # print "self.serverfilename = ",self.serverfilename # print "self.configfilename = ",self.configfilename if not os.path.exists(self.serverfilename): showerror("File Error","Cannot find Server file") return 0 if not os.path.exists(self.configfilename): showerror("File Error","Cannot find Config file") return 0 return 1 def get_server_stuff(self): self.get_debug_total() self.server_filename = self.server_filename_entry.get_text() self.config_filename = self.config_filename_entry.get_text() self.server_port = self.server_port_entry.get_text() def start_server(self, mi=None): self.server_running,self.pid = self.serverstatus() if (self.server_running): self.show_message_box("tacacs server already running\npid = "+ self.pid) return self.get_server_stuff() cmd = self.server_filename + ' -C ' + self.config_filename if (self.server_port is not "49"): cmd = cmd + ' -p ' + str(self.server_port) if (self.debug_total != 0): cmd = cmd + ' -d' + str(self.debug_total) cmd = cmd + ' 2>&1' # print cmd f = os.popen(cmd) b = "" for item in f.readlines(): # print item, b = b + item f.close self.server_running, self.pid = self.serverstatus() # print "server status is ",self.server_running, " and pid is ",self.pid, b if not self.server_running: b = b + "\nServer is not running." self.show_message_box(b) else: self.show_message_box("Server successfully started\npid = "+self.pid) return def stop_server(self, mi=None): self.server_running, self.pid = self.serverstatus() b = "" if not self.server_running: b = b + "\nServer is not running." if not self.called_from_restart: self.show_message_box(b) return f = os.popen('kill -9 '+ self.pid) b = "" for item in f.readlines(): # print item, b = b + item f.close self.server_running, self.pid = self.serverstatus() # print "server status is ",self.server_running, " and pid is ",self.pid, b if not self.server_running: b = b + "\nServer successfully stopped." if not self.called_from_restart: self.show_message_box(b) else: self.show_message_box("Could not kill server\npid = "+self.pid) return def restart_server(self, mi=None): self.called_from_restart = 1 self.stop_server() if not self.server_running: self.start_server() self.called_from_restart = 0 def check_server(self, mi=None): self.server_running,self.pid = self.serverstatus() if self.server_running: self.show_message_box("\nServer is running\nand pid = "+ self.pid) # print "tacacs server running, pid is ", self.pid else: self.show_message_box("Server is NOT running") # print "tacacs server not running" # print "in checkserver = " def serverstatus(self, ni=None): # pattern1 = regex.compile(self.server_filename) # pattern2 = regex.compile(self.config_filename) # pattern3 = regex.compile(" -C ") f = os.popen('ps wax') self.server_running=0 self.pid=0 for item in f.readlines(): # if pattern1.search(item) >= 0: if find(item,self.server_filename) >= 0: self.server_running = 1 self.pid = split(item)[0] # print "found tacacs process", self.pid f.close return self.server_running,self.pid def parse_config(self, mi=None): self.get_server_stuff() cmd = self.server_filename + ' -P -C ' + self.config_filename + ' 2>&1' # print cmd f = os.popen(cmd) b = "" for item in f.readlines(): # print item, b = b + item f.close win=GtkWindow() win.set_usize(500,500) win.connect("delete_event", self.delete_event) win.set_title("Parsing Results") box1 = GtkVBox() win.add(box1) box1.show() box2 = GtkVBox(spacing=10) box2.border_width(10) box1.pack_start(box2) box2.show() table = GtkTable(2, 2) table.set_row_spacing(0, 2) table.set_col_spacing(0, 2) box2.pack_start(table) table.show() text = GtkText() text.set_editable(FALSE) table.attach(text, 0,1, 0,1) text.show() hscrollbar = GtkHScrollbar(text.get_hadjustment()) table.attach(hscrollbar, 0,1, 1,2, yoptions=FILL) hscrollbar.show() vscrollbar = GtkVScrollbar(text.get_vadjustment()) table.attach(vscrollbar, 1,2, 0,1, xoptions=FILL) vscrollbar.show() text.freeze() text.realize() text.insert_defaults(b) separator = GtkHSeparator() box1.pack_start(separator, expand=FALSE) separator.show() box2 = GtkVBox(spacing=10) box2.border_width(10) box1.pack_start(box2, expand=FALSE) box2.show() button = GtkButton("close") button.connect("clicked", win.hide) box2.pack_start(button) button.set_flags(CAN_DEFAULT) button.grab_default() button.show() win.show() def select_server(self,win=None): myget = self.browse_window.get_filename() self.browse_window.destroy() self.server_filename_entry.set_text(myget) # print "myget = ",myget def select_config(self,win=None): myget = self.browse_window.get_filename() self.browse_window.destroy() self.config_filename_entry.set_text(myget) # print "myget = ",myget def select_debug(self,win=None): myget = self.browse_window.get_filename() self.browse_window.destroy() self.debug_filename_entry.set_text(myget) # print "myget = ",myget def browse_server(self, mi=None): self.browse_window = GtkFileSelection ("Select Server Filename") self.browse_window.ok_button.connect("clicked",self.select_server) self.browse_window.cancel_button.connect("clicked",self.browse_window.destroy) self.browse_window.set_filename(self.server_filename); self.browse_window.hide_fileop_buttons(); self.browse_window.show() return; def browse_config(self, mi=None): self.browse_window = GtkFileSelection ("Select Config Filename") self.browse_window.ok_button.connect("clicked",self.select_config) self.browse_window.cancel_button.connect("clicked",self.browse_window.destroy) self.browse_window.set_filename(self.config_filename); self.browse_window.hide_fileop_buttons(); self.browse_window.show() return; def browse_debug(self, mi=None): self.browse_window = GtkFileSelection ("Select Debug Filename") self.browse_window.ok_button.connect("clicked",self.select_debug) self.browse_window.cancel_button.connect("clicked",self.browse_window.destroy) self.browse_window.set_filename(self.debug_filename); self.browse_window.hide_fileop_buttons(); self.browse_window.show() return; def edit_config(self, mi=None): self.get_server_stuff() config = open(self.config_filename) b = "" lines = config.readlines() for line in lines: b = b + line config.close self.edit_config_win=GtkWindow() self.edit_config_win.set_usize(500,500) self.edit_config_win.connect("delete_event", self.delete_event) self.edit_config_win.set_title("Parsing Results") box1 = GtkVBox() self.edit_config_win.add(box1) box1.show() box2 = GtkVBox(spacing=10) box2.border_width(10) box1.pack_start(box2) box2.show() table = GtkTable(2, 2) table.set_row_spacing(0, 2) table.set_col_spacing(0, 2) box2.pack_start(table) table.show() self.text = GtkText() self.text.set_editable(TRUE) table.attach(self.text, 0,1, 0,1) self.text.show() hscrollbar = GtkHScrollbar(self.text.get_hadjustment()) table.attach(hscrollbar, 0,1, 1,2, yoptions=FILL) hscrollbar.show() vscrollbar = GtkVScrollbar(self.text.get_vadjustment()) table.attach(vscrollbar, 1,2, 0,1, xoptions=FILL) vscrollbar.show() self.text.freeze() self.text.realize() self.text.insert_defaults(b) self.text.thaw() separator = GtkHSeparator() box1.pack_start(separator, expand=FALSE) separator.show() box2 = GtkVBox(spacing=10) box2.border_width(10) box1.pack_start(box2, expand=FALSE) box2.show() hbox = GtkHBox() box2.pack_start(hbox) hbox.show() button = GtkButton("Save/Quit") button.connect("clicked", self.save_quit_config) hbox.pack_start(button) button.set_flags(CAN_DEFAULT) button.grab_default() button.show() button = GtkButton("Cancel") button.connect("clicked", self.edit_config_win.destroy) hbox.pack_start(button) button.set_flags(CAN_DEFAULT) button.grab_default() button.show() self.edit_config_win.show() def save_quit_config(self,x=None): text = self.text.get_chars(0,-1) fd = open(self.config_filename, 'w') if fd: fd.write(text) fd.close() else: self.show_message_box("Error: could not open file " + self.config_filename+" for writing.") return self.edit_config_win.destroy() def watch_debug(self, mi=None): self.get_server_stuff() try: debug_fd = open(self.debug_filename) except: self.show_message_box("Error: could not open file " + self.debug_filename) return self.timeout_id = timeout_add(3000,self.watch_debug_timeout) # print "timeout_id = ",self.timeout_id b = "" lines = debug_fd.readlines() for line in lines: b = b + line debug_fd.close self.debug_size = len(b) self.watch_debug_win=GtkWindow() self.watch_debug_win.set_usize(700,500) self.watch_debug_win.connect("delete_event", self.delete_event) self.watch_debug_win.set_title("TACACS+ Debug") box1 = GtkVBox() self.watch_debug_win.add(box1) box1.show() box2 = GtkVBox(spacing=10) box2.border_width(10) box1.pack_start(box2) box2.show() table = GtkTable(2, 2) table.set_row_spacing(0, 2) table.set_col_spacing(0, 2) box2.pack_start(table) table.show() self.debug_text = GtkText() self.debug_text.set_editable(FALSE) table.attach(self.debug_text, 0,1, 0,1) self.debug_text.show() hscrollbar = GtkHScrollbar(self.debug_text.get_hadjustment()) table.attach(hscrollbar, 0,1, 1,2, yoptions=FILL) hscrollbar.show() vscrollbar = GtkVScrollbar(self.debug_text.get_vadjustment()) table.attach(vscrollbar, 1,2, 0,1, xoptions=FILL) vscrollbar.show() self.debug_text.freeze() self.debug_text.realize() self.debug_text.insert_defaults(b) self.debug_text.thaw() adj = self.debug_text.get_vadjustment() adj.set_value(adj.upper - adj.page_size) separator = GtkHSeparator() box1.pack_start(separator, expand=FALSE) separator.show() box2 = GtkVBox(spacing=10) box2.border_width(10) box1.pack_start(box2, expand=FALSE) box2.show() hbox = GtkHBox() box2.pack_start(hbox) hbox.show() button = GtkButton("Close") button.connect("clicked", self.watch_debug_close) hbox.pack_start(button) button.set_flags(CAN_DEFAULT) button.grab_default() button.show() self.watch_debug_win.show() def watch_debug_close(self,x=None): # print self.debug_text.get_position() # print self.debug_text.get_length() # print self.debug_text.get_vadjustment() # print self.debug_text.get_hadjustment() timeout_remove(self.timeout_id) self.watch_debug_win.destroy() def watch_debug_timeout(self): # print "in timeout" try: debug_fd = open(self.debug_filename) except: self.show_message_box("Error: could not open file " + self.debug_filename) return debug_fd.seek(0,2) self.debug_newsize = debug_fd.tell() diff = self.debug_newsize - self.debug_size if (diff > 0): # print "diff = ",diff debug_fd.seek(-diff-1,2) new_text = debug_fd.read() # print "new stuff = ", new_text self.debug_text.freeze() self.debug_text.realize() self.debug_text.insert_defaults(new_text) self.debug_text.thaw() self.debug_size = self.debug_newsize adj = self.debug_text.get_vadjustment() adj.set_value(adj.upper - adj.page_size) debug_fd.close() return TRUE def get_debug_total(self,ni=None): self.debug_total = 0 if self.authentication_checkbutton.active: self.debug_total = self.debug_total + 16 if self.authorization_checkbutton.active: self.debug_total = self.debug_total + 8 if self.accounting_checkbutton.active: self.debug_total = self.debug_total + 64 if self.parseconfig_checkbutton.active: self.debug_total = self.debug_total + 128 if self.parse_checkbutton.active: self.debug_total = self.debug_total + 2 if self.fork_checkbutton.active: self.debug_total = self.debug_total + 4 if self.password_checkbutton.active: self.debug_total = self.debug_total + 32 if self.packet_checkbutton.active: self.debug_total = self.debug_total + 256 if self.crypto_checkbutton.active: self.debug_total = self.debug_total + 512 if self.md5_checkbutton.active: self.debug_total = self.debug_total + 1024 if self.lowlevel_checkbutton.active: self.debug_total = self.debug_total + 2048 if self.maxsess_checkbutton.active: self.debug_total = self.debug_total + 32768 # print self.debug_total return self.debug_total def init_server_page(self): hbox = GtkHBox() label = GtkLabel("Server Control") self.tacacs_notebook.append_page(hbox, label) vbox = self.addvbox(hbox) hbox.show() table = GtkTable(10,10) vbox.pack_start(table) table.set_row_spacings(2) table.set_col_spacings(2) table.show() button = self.addwidget_table("button","Start",self.start_server,None,table,1,2,1,2) button = self.addwidget_table("button","Stop",self.stop_server,None,table,1,2,2,3) button = self.addwidget_table("button","Restart",self.restart_server,None,table,1,2,3,4) button = self.addwidget_table("button","Check",self.check_server,None,table,1,2,4,5) button = self.addwidget_table("button","Parse Config",self.parse_config,None,table,1,2,5,6) label = self.addwidget_table("label","Server Filename",None,None,table,2,3,1,2) label = self.addwidget_table("label","Server Port",None,None,table,2,3,2,3) label = self.addwidget_table("label","Config Filename",None,None,table,2,3,3,4) label = self.addwidget_table("label","Debug Filename",None,None,table,2,3,4,5) label = self.addwidget_table("label","Debug Level",None,None,table,2,3,5,6) self.server_filename_entry = self.addwidget_table("entry",None,None,self.server_filename,table,3,4,1,2) self.server_port_entry = self.addwidget_table("entry",None,None,self.server_port,table,3,4,2,3) self.config_filename_entry = self.addwidget_table("entry",None,None,self.config_filename,table,3,4,3,4) self.debug_filename_entry = self.addwidget_table("entry",None,None,self.debug_filename,table,3,4,4,5) self.authentication_checkbutton = self.addwidget_table("checkbutton","Authentication (16)",None,None,table,3,4,5,6) self.authorization_checkbutton = self.addwidget_table("checkbutton","Authorization (8)",None,None,table,3,4,6,7) self.accounting_checkbutton = self.addwidget_table("checkbutton","Accounting (64)",None,None,table,3,4,7,8) self.parseconfig_checkbutton = self.addwidget_table("checkbutton","Config File Parsing(128)",None,None,table,3,4,8,9) button = self.addwidget_table("button","Browse...",self.browse_server,None,table,4,5,1,2) button = self.addwidget_table("button","Browse...",self.browse_config,None,table,4,5,3,4) button = self.addwidget_table("button","Browse...",self.browse_debug,None,table,4,5,4,5) self.parse_checkbutton = self.addwidget_table("checkbutton","Parsing (2)",None,None,table,4,5,5,6) self.fork_checkbutton = self.addwidget_table("checkbutton","Forking (4)",None,None,table,4,5,6,7) self.password_checkbutton = self.addwidget_table("checkbutton","Password File (32)",None,None,table,4,5,7,8) self.packet_checkbutton = self.addwidget_table("checkbutton","Packet TX/RX (256)",None,None,table,4,5,8,9) button = self.addwidget_table("button","Edit",self.edit_config,None,table,5,6,3,4) button = self.addwidget_table("button","Watch Debug",self.watch_debug,None,table,5,6,4,5) self.crypto_checkbutton = self.addwidget_table("checkbutton","Encrypt/Decrypt (512)",None,None,table,5,6,5,6) self.md5_checkbutton = self.addwidget_table("checkbutton","MD5 (1024)",None,None,table,5,6,6,7) self.lowlevel_checkbutton = self.addwidget_table("checkbutton","Very Low Level (2048)",None,None,table,5,6,7,8) self.maxsess_checkbutton = self.addwidget_table("checkbutton","Max Session (32768)",None,None,table,5,6,8,9) def init_groups_page(self): self.groups_hbox1 = GtkHBox() self.groups_hbox1.show() label = GtkLabel("Groups") self.tacacs_notebook.append_page(self.groups_hbox1, label) self.groups_vbox1 = GtkVBox() self.groups_vbox1.show() self.groups_hbox1.pack_start(self.groups_vbox1) self.groups_clist = GtkCList(1,["Groups"]) self.groups_clist.set_column_width(0,20) self.groups_clist.set_column_width(1,20) self.groups_clist.freeze() t = ["Group1"] self.groups_clist.append(t) self.groups_clist.thaw() # self.groups_clist.border_width(5) self.groups_vbox1.pack_start(self.groups_clist) self.groups_clist.show() self.groups_vbox2 = GtkVBox() self.groups_vbox2.show() self.groups_hbox1.pack_start(self.groups_vbox2) self.groups_notebook = GtkNotebook() self.groups_notebook.set_tab_pos(POS_TOP) self.groups_vbox2.pack_start(self.groups_notebook) self.groups_notebook.show() self.groups_hbox2 = GtkHBox() self.groups_hbox2.show() label = GtkLabel("Main") self.groups_notebook.append_page(self.groups_hbox2, label) self.groups_hbox3 = GtkHBox() self.groups_hbox3.show() label = GtkLabel("CMD") self.groups_notebook.append_page(self.groups_hbox3, label) def init_users_page(self): self.users_hbox = GtkHBox() self.users_hbox.show() label = GtkLabel("Users") self.tacacs_notebook.append_page(self.users_hbox, label) def help(self, mi=None): pass # print "now in help" app=Gconfig(sys.argv) app.mainloop()