|
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17 System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64 User : nobody ( 99) PHP Version : 5.2.17 Disable Function : NONE Directory : /proc/21573/task/21573/root/usr/share/system-config-samba/ |
Upload File : |
## basicPreferencesWin.py - contains the code for basic preferences window
## Copyright (C) 2002, 2003 Red Hat, Inc.
## Copyright (C) 2002, 2003 Brent Fox <bfox@redhat.com>
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
import gtk
import gtk.glade
import string
import sambaToken
import mainWindow
import libuser
##
## I18N
##
from rhpl.translate import _, N_
import rhpl.translate as translate
domain = 'system-config-samba'
translate.textdomain (domain)
gtk.glade.bindtextdomain(domain)
class BasicPreferencesWin:
def __init__(self, parent, xml, samba_data, samba_backend, main_window):
self.ParentClass = parent
self.samba_data = samba_data
self.samba_backend = samba_backend
self.samba_sections = samba_data.sections
self.samba_sections_dict = samba_data.sections_dict
self.basic_notebook = xml.get_widget("basic_notebook")
self.basic_preferences_win = xml.get_widget("basic_preferences_win")
self.basic_preferences_win.set_modal(True)
self.basic_preferences_win.set_transient_for(main_window)
self.basic_preferences_win.connect("delete-event", self.onBasicCancelButtonClicked)
self.basic_preferences_win.set_icon(mainWindow.iconPixbuf)
self.workgroup_entry = xml.get_widget("workgroup_entry")
self.server_entry = xml.get_widget("server_entry")
self.auth_server_entry = xml.get_widget("auth_server_entry")
self.ads_realm_entry = xml.get_widget("ads_realm_entry")
self.auth_option_menu = xml.get_widget("auth_option_menu")
self.auth_menu = gtk.Menu()
label = (_("ADS"))
item = gtk.MenuItem(label)
item.set_data("NAME", "ADS")
self.auth_menu.append(item)
label = (_("Domain"))
item = gtk.MenuItem(label)
item.set_data("NAME", "DOMAIN")
self.auth_menu.append(item)
label = (_("Server"))
item = gtk.MenuItem(label)
item.set_data("NAME", "SERVER")
self.auth_menu.append(item)
label = (_("Share"))
item = gtk.MenuItem(label)
item.set_data("NAME", "SHARE")
self.auth_menu.append(item)
label = (_("User"))
item = gtk.MenuItem(label)
item.set_data("NAME", "USER")
self.auth_menu.append(item)
self.auth_option_menu.set_menu(self.auth_menu)
self.encrypt_option_menu = xml.get_widget("encrypt_option_menu")
self.encrypt_menu = gtk.Menu()
label = (_("Yes"))
item = gtk.MenuItem(label)
item.set_data("NAME", "yes")
self.encrypt_menu.append(item)
label = (_("No"))
item = gtk.MenuItem(label)
item.set_data("NAME", "no")
self.encrypt_menu.append(item)
self.encrypt_option_menu.set_menu(self.encrypt_menu)
self.guest_option_menu = xml.get_widget("guest_option_menu")
self.guest_menu = gtk.Menu()
self.admin = libuser.admin()
self.users = self.admin.enumerateUsers()
self.users.sort()
self.users.insert(0, _("No guest account"))
for user in self.users:
item = gtk.MenuItem(user)
item.set_data("NAME", user)
self.guest_menu.append(item)
self.guest_option_menu.set_menu(self.guest_menu)
xml.signal_connect("on_basic_cancel_button_clicked", self.onBasicCancelButtonClicked)
xml.signal_connect("on_basic_ok_button_clicked", self.onBasicOkButtonClicked)
self.auth_option_menu.connect("changed", self.authMenuChanged)
def showWindow(self):
self.reset()
self.readFile()
self.basic_preferences_win.show_all()
def readFile(self):
global_found = None
guest_account = None
guest_ok = None
#Set auth_option_menu default to "User" since that is the default value for smb.conf
self.auth_option_menu.set_history(4)
#Set the encrypt_option_menu default to "Yes"
self.encrypt_option_menu.set_history(0)
section = self.samba_sections_dict["[global]"]
keys_entries_functions = [
[ "workgroup", self.workgroup_entry, string.lower ],
[ "server string", self.server_entry ],
[ "password server", self.auth_server_entry ]
]
keys_optionmenus_xlate = [
[ "security", self.auth_option_menu, [ "ads", "domain", "server", "share", "user" ] ],
[ "encrypt passwords", self.encrypt_option_menu, [ "yes", "no" ] ]
]
for kef in keys_entries_functions:
val = section.getKey (kef[0])
entry = kef[1]
try:
func = kef[2]
except IndexError:
func = None
if val == None:
val = ""
if func:
# we have (a) post processing function(s)
if type (func) == list or type (func) == tuple:
# multiple functions are applied consecutively
for realfunc in kef[2]:
val = realfunc (val)
else:
# function will be applied to value
val = func (val)
entry.set_text (val)
for kox in keys_optionmenus_xlate:
val = section.getKey (kox[0])
optionmenu = kox[1]
xlate = kox[2]
if val:
val = string.lower (val)
if val in xlate:
optionmenu.set_history (xlate.index (val))
guest_ok = section.getKey ("guest ok")
if guest_ok:
guest_ok = string.lower (guest_ok)
if guest_ok == "no":
guest_account = None
guest_ok = "no"
self.guest_option_menu.set_history(0)
else:
guest_account = section.getKey ("guest account")
if not guest_account:
#If guest accounts are enabled, let's assume the default is 'nobody'
guest_account = "nobody"
#if guest accounts are enabled, lets set the menu to the guest user
if guest_account:
count = 0
found = 0
for user in self.users:
if guest_account == user:
found = count
count = count + 1
self.guest_option_menu.set_history(found)
def reset(self):
self.basic_notebook.set_current_page(0)
def onBasicOkButtonClicked(self, *args):
#Check to see if workgroup is specified
if not self.checkForWorkgroup(self.workgroup_entry.get_text()):
return
else:
globalsection = self.samba_sections_dict["[global]"]
globalsection.setKey ("workgroup", self.workgroup_entry.get_text ())
globalsection.setKey ("server string", self.server_entry.get_text())
auth_type = self.auth_menu.get_active().get_data("NAME")
if auth_type == "USER":
globalsection.delKey ("password server")
globalsection.delKey ("realm")
elif auth_type == "SHARE":
globalsection.delKey ("password server")
globalsection.delKey ("realm")
elif auth_type == "SERVER" or auth_type == "DOMAIN" or auth_type == "ADS":
#If they've specified SERVER or DOMAIN, require a password server
auth_server = string.strip(self.auth_server_entry.get_text())
if auth_server == "":
self.showMessageDialog(_("To auto-locate a password server, enter a \"*\" into the "
"Authentication Server entry field. Otherwise, you must "
"specify a password server when using 'ADS', 'Domain' "
"or 'Server' authentication."))
self.auth_server_entry.grab_focus()
return
else:
globalsection.setKey ("password server", auth_server)
#If they are using ADS, require a realm server
ads_realm_server = string.strip(self.ads_realm_entry.get_text())
if auth_type == "ADS":
if ads_realm_server == "":
#There's no realm server, so complain
self.showMessageDialog(_("Please enter a kerberos realm when using "
"ADS authentication."))
self.ads_realm_entry.grab_focus()
return
else:
#We've got a realm server
globalsection.setKey ("realm", self.ads_realm_entry.get_text (), "[global]")
globalsection.setKey ("security", string.lower (self.auth_menu.get_active ().get_data("NAME")))
globalsection.setKey ("encrypt passwords", self.encrypt_menu.get_active ().get_data ("NAME"))
if self.guest_option_menu.get_history() == 0:
globalsection.setKey ("guest ok", "no")
globalsection.setKey ("guest account", "nobody")
else:
globalsection.setKey ("guest ok", "yes")
globalsection.setKey ("guest account", self.guest_menu.get_active ().get_data ("NAME"))
self.basic_preferences_win.hide()
#Let's go ahead and restart the service
self.samba_data.writeFile()
self.samba_backend.restartSamba()
def onBasicCancelButtonClicked(self, *args):
self.basic_preferences_win.hide()
return True
def checkForWorkgroup(self, workgroup):
if string.strip(workgroup) == "":
self.showMessageDialog(_("You must specify a workgroup."))
return 0
return 1
def authMenuChanged(self, *args):
type = self.auth_menu.get_active().get_data("NAME")
#Let's enable/disable the auth_server_entry
if type == "SERVER" or type == "DOMAIN":
#allow password server if using 'server' or 'domain'
self.auth_server_entry.set_sensitive(True)
self.ads_realm_entry.set_sensitive(False)
elif type == "ADS":
#allow password server and realm server if using 'ads'
self.auth_server_entry.set_sensitive(True)
self.ads_realm_entry.set_sensitive(True)
else:
self.auth_server_entry.set_sensitive(False)
self.ads_realm_entry.set_sensitive(False)
#Must force encrypted passwords with 'domain'
if type == "DOMAIN":
self.encrypt_option_menu.set_history(0)
self.encrypt_option_menu.set_sensitive(False)
else:
self.encrypt_option_menu.set_sensitive(True)
def showMessageDialog(self, text):
dlg = gtk.MessageDialog(self.basic_preferences_win, 0, gtk.MESSAGE_WARNING, gtk.BUTTONS_OK, text)
dlg.set_position(gtk.WIN_POS_CENTER)
dlg.set_modal(True)
dlg.set_transient_for(self.basic_preferences_win)
dlg.set_icon(mainWindow.iconPixbuf)
dlg.run()
dlg.destroy()