From 28b2e601a21c6972cc1fc43e5a9fcb168e3c0722 Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Wed, 25 Apr 2007 10:08:30 +0000 Subject: re-sync after the big svn loss --- perl-install/standalone/draksambashare | 1259 -------------------------------- 1 file changed, 1259 deletions(-) delete mode 100755 perl-install/standalone/draksambashare (limited to 'perl-install/standalone') diff --git a/perl-install/standalone/draksambashare b/perl-install/standalone/draksambashare deleted file mode 100755 index bd29dfc76..000000000 --- a/perl-install/standalone/draksambashare +++ /dev/null @@ -1,1259 +0,0 @@ -#!/usr/bin/perl -# -# Copyright (C) 2005 by Mandriva aginies _ateuh_ mandriva.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, 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., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -my $version = "0.2"; - -use strict; -use lib qw(/usr/lib/libDrakX); -use standalone; -use common; -use network::network; -use interactive; -use ugtk2 qw(:ask :wrappers :create :dialogs); -use mygtk2 qw(gtknew); -use Gtk2::SimpleList; -use Gtk2::Gdk::Keysyms; - -# use libconf -use Libconf::Templates; -use Libconf::Glueconf::Samba::Smb_conf; - -my $in = 'interactive'->vnew('su'); -$in->do_pkgs->ensure_is_installed('samba-server', '/usr/sbin/smbd') or return; - -#if (!-f "/etc/sysconfig/wizard_samba") { -# $in->do_pkgs->ensure_is_installed('drakwizard', '/usr/sbin/drakwizard'); -# err_dialog(N("Error"), N("Please setup a samba server")) and return; -#} - - -my $icon_path = "/usr/lib/libDrakX/icons"; -my $fileshare_icon = "$icon_path/IC-winacces2-16.png"; -my $printershare_icon = "$icon_path/IC-sambaprt-16.png"; -my $sambauser_icon = "$icon_path/ic82-users-16.png"; -my $pixbuf_file = Gtk2::Gdk::Pixbuf->new_from_file($fileshare_icon); -my $pixbuf_printer = Gtk2::Gdk::Pixbuf->new_from_file($printershare_icon); -my $pixbuf_user = Gtk2::Gdk::Pixbuf->new_from_file($sambauser_icon); - -my $printer_list = create_printer_list(); -my $share_list = create_share_list(); -my $user_list = create_user_list(); - -sub create_user_list() { - my $user_list = Gtk2::SimpleList->new('' => 'pixbuf', - N("User name") => 'text', - ); - $user_list; -} - -sub create_share_list() { - my $share_list = Gtk2::SimpleList->new('' => 'pixbuf', - N("Share name") => 'text', - N("Share directory") => 'text', - N("Comment") => 'text', - N("Browseable") => 'text', - N("Public") => 'text', - N("Writable") => 'text', - N("Create mask") => 'text', - N("Directory mask") => 'text', - N("Read list") => 'text', - N("Write list") => 'text', - N("Admin users") => 'text', - N("Valid users") => 'text', - N("Inherit Permissions") => 'text', - N("Hide dot files") => 'text', - N("Hide files") => 'text', - N("Preserve case") => 'text', - N("Force create mode") => 'text', - N("Force group") => 'text', - N("Default case") => 'text', - ); - $share_list->set_headers_clickable(1); - foreach ($share_list->get_columns) { - $_->set_resizable(1); - } - foreach (1, 2, 3) { - $share_list->get_column($_)->signal_connect('clicked', \&sort_by_column, $share_list->get_model); - $share_list->get_column($_)->set_sort_column_id($_ == 0 ? 1 : $_ + 2); - } - $share_list; -} - -sub create_printer_list() { - my $printer_list = Gtk2::SimpleList->new('' => 'pixbuf', - N("Printer name") => 'text', - N("Path") => 'text', - N("Comment") => 'text', - N("Browseable") => 'text', - N("Printable") => 'text', - N("Print Command") => 'text', - N("LPQ command") => 'text', - N("Guest ok") => 'text', - N("Writable") => 'text', - N("Write list") => 'text', - N("Inherit permissions") => 'text', - N("Printing") => 'text', - N("Create mode") => 'text', - N("Use client driver") => 'text', - ); - $printer_list->set_headers_clickable(1); - foreach (1, 2, 3) { - $printer_list->get_column($_)->signal_connect('clicked', \&sort_by_column, $printer_list->get_model); - $printer_list->get_column($_)->set_sort_column_id($_ == 0 ? 1 : $_ + 2); - } - $printer_list; -} - -sub sort_by_column { - my ($column, $model) = @_; - my $col_id = $column->get_sort_column_id; - my ($old_id, $old_order) = $model->get_sort_column_id; - $model->set_sort_column_id($col_id, $old_id == $col_id && $old_order ne 'descending' ? 'ascending' : 'descending'); -} - -#path comment browseable printable print command guest ok writable write list inherit permissions printing lpq command create mode use client driver - - -my $samba = new Libconf::Glueconf::Samba::Smb_conf({ filename => '/etc/samba/smb.conf'}); -my (@listshare, @listprinters, @listusers); -my @yesno = qw(yes no); push @yesno, ""; -my @default_case = qw(upper lower); push @default_case, ""; - -my %adv_options = ( - read_list => N("Read List"), - write_list => N("Write List"), - admin_users => N("Admin users"), - valid_users => N("Valid users"), - hide_dot_files => N("Hide dot files"), - hide_files => N("Hide files"), - force_group => N("Force Group"), - force_create_mode => N("Force create group"), - default_case => N("Default case"), - preserve_case => N("Preserve case"), - create_mask => N("Create mask"), - directory_mask => N("Directory mask"), - inherit_permissions => N("Inherit permissions"), - ); - -sub get_items() { - my @items = ( - [ "/_File", undef, undef, undef, '', ], - [ "/_File/_Write conf", undef, \&write_conf, 1, '', 'gtk-execute' ], - [ "/_File/_Exit", undef, \&quit_all, 1, '', 'gtk-quit' ], - - [ "/_Samba Server", undef, undef, undef, '', ], - [ "/_Samba Server/_Restart", undef, \&restart_dialog, 1, '', 'gtk-execute' ], - [ "/_Samba Server/R_eload", undef, \&reload_dialog, 1, '', 'gtk-refresh' ], - - [ "/_About/Report a bug", undef, sub { unless (fork()) { exec("drakbug --report draksambashare &") } }, 1, '', 'gtk-stop' ], - [ "/_About/About...", undef, sub { - create_dialog(N("About Draksambashare"), N("Mandriva Linux \nRelease: %s\nAuthor: Antoine Ginies\n\nThis is a simple tool to easily manage Samba configuration.", $version)); - }, 1, '', 'gtk-preferences' ], - ); - return @items; -} - -sub quit_all() { - ugtk2->exit; -} - -sub restart_dialog() { - wait_action("service smb restart"); -} - -sub reload_dialog() { - wait_action("service smb reload"); -} - -sub wait_action { - my ($cmd) = @_; - my $w = $in->wait_message(N("Samba server"), N("Restarting/Reloading Samba server...")); - run_program::get_stdout($cmd) !~ /unknown|error/ or err_dialog(N("Error!"), N("Error Restarting/Reloading Samba server")) and return; - undef $w; -} - -my %size_groups = map { $_ => Gtk2::SizeGroup->new('horizontal') } qw(label widget button); -my $label_and_widgets = sub { - my ($label, $widget, $button) = @_; - gtkpack_(Gtk2::HBox->new(0,1), - 0, gtkadd_widget($size_groups{label}, $label), - 0, gtkadd_widget($size_groups{widget}, $widget), - if_($button, 0, gtkadd_widget($size_groups{button}, $button)), - ); -}; - -my $fdwidget = sub { - my ($data) = @_; - my $fd = new Gtk2::FileSelection(N("Directory Selection")); - $fd->set_modal(1); - $fd->signal_connect("destroy", sub { $fd->hide }); - $fd->ok_button->signal_connect(clicked => sub { - my $file = $fd->get_filename; - -d $file or err_dialog(N("Error!"), N("Should be a directory.")) and return; - $data->set_text($file); - $fd->hide; - }, $fd); - $fd->cancel_button->signal_connect(clicked => sub { $fd->hide }); - return $fd; -}; - -sub get_samba_share() { - undef @listshare; - foreach my $clef (keys %$samba) { - if ($samba->{$clef}{printable} =~ /yes/i || $clef =~ /print\$/) { - print "$clef is a printer\n"; - } elsif ($clef =~ /global/ || $clef =~ /cdrom$/ || $clef eq "Profiles") { - print "unwanted (special shares)\n"; - } else { - push @listshare, { - share_name => $clef, - path => $samba->{$clef}{path}, - comment => $samba->{$clef}{comment}, - browseable => $samba->{$clef}{browseable}, - public => $samba->{$clef}{public}, - writable => $samba->{$clef}{writable}, - create_mask => $samba->{$clef}{'create mask'}, - directory_mask => $samba->{$clef}{'directory mask'}, - read_list => $samba->{$clef}{'read list'}, - write_list => $samba->{$clef}{'write list'}, - admin_users => $samba->{$clef}{'admin users'}, - valid_users => $samba->{$clef}{'valid users'}, - hide_dot_files => $samba->{$clef}{'hide dot files'}, - hide_files => $samba->{$clef}{'hide files'}, - preserve_case => $samba->{$clef}{'preserve case'}, - force_create_mode => $samba->{$clef}{'force create mode'}, - force_group => $samba->{$clef}{'force group'}, - default_case => $samba->{$clef}{'default case'}, - inherit_permissions => $samba->{$clef}{'inherit permissions'}, - }; - } - } - return @listshare; -} - -sub get_samba_user() { - undef @listusers; - foreach (cat_("/etc/samba/smbpasswd")) { - my ($user) = m!^(\w+):!; - $user and push @listusers, { - user_name => $user, - }; - } - return @listusers; -} - - -sub get_samba_printers() { - undef @listprinters; - foreach my $clef (keys %$samba) { - if ($samba->{$clef}{printable} =~ /yes/i || $clef =~ /print\$/) { - push @listprinters, { - share_name => $clef, - path => $samba->{$clef}{path}, - comment => $samba->{$clef}{comment}, - browseable => $samba->{$clef}{browseable}, - printable => $samba->{$clef}{printable}, - print_command => $samba->{$clef}{'print command'}, - lpq_command => $samba->{$clef}{'lpq command'}, - guest_ok => $samba->{$clef}{'guest ok'}, - writable => $samba->{$clef}{writable}, - write_list => $samba->{$clef}{'write list'}, - inherit_permissions => $samba->{$clef}{'inherit permissions'}, - printing => $samba->{$clef}{printing}, - create_mode => $samba->{$clef}{'create mode'}, - use_client_driver => $samba->{$clef}{'use client driver'}, - }; - } - } - return @listprinters; -} - -sub write_conf() { - $samba->write_conf("/etc/samba/smb.conf"); -} - -sub create_pango_help_box { - # perl code from draksec - my ($help) = @_; - my $text = Gtk2::TextView->new; - use Gtk2::Pango; - my %common_opts = ('left-margin' => '10', 'right-margin' => '10'); - gtktext_insert($text, [ map { - if (s!^/span>!!) { - [ $_, \%common_opts ]; - } elsif (s!span !!) { - my %tags = %common_opts; - while (s!(\w+?)="(\w+?)"!!) { - $tags{weight} ||= Gtk2::Pango->PANGO_WEIGHT_BOLD if $1 eq 'foreground'; - $tags{$1} = $2 eq "bold" ? Gtk2::Pango->PANGO_WEIGHT_BOLD : $2; - } - s/^>//; - [ $_, \%tags ]; - } else { - [ $_, \%common_opts ]; - } - } split("<", formatAlaTeX($help)) ]); - gtkset_size_request(create_scrolled_window($text), 350, 300); -} - -sub help_b { - my ($help_data) = @_; - gtksignal_connect(new Gtk2::Button->new_from_stock('gtk-dialog-info'), clicked => sub { - my $dialog = _create_dialog(); - $dialog->set_transient_for($::main_window); - $dialog->set_title(N("Help")); - $dialog->set_modal(1); - gtkpack_($dialog->vbox, - 1, create_pango_help_box($help_data), - 0, gtksignal_connect(Gtk2::Button->new_from_stock('gtk-close'), clicked => sub { - $dialog->destroy; - } - ), - ); - $dialog->show_all; - } - ); -} - -sub printdollar_section() { - $samba->{'print$'}; - $samba->{'print$'}{browseable} = "yes"; - $samba->{'print$'}{path} = "/var/lib/samba/printers"; - $samba->{'print$'}{browseable} = "yes"; - $samba->{'print$'}{'write list'} = "\@adm root"; - $samba->{'print$'}{'guest ok'} = "yes"; - $samba->{'print$'}{'inherit permissions'} = "yes"; -} - -sub pdf_section() { - $samba->{'pdf-gen'}; - $samba->{'pdf-gen'}{path} = "/var/tmp"; - $samba->{'pdf-gen'}{'guest ok'} = "no"; - $samba->{'pdf-gen'}{printable} = "yes"; - $samba->{'pdf-gen'}{comment} = "PDF Generator (only valid users)"; - $samba->{'pdf-gen'}{printing} = "bsd"; - $samba->{'pdf-gen'}{'print command'} = '/usr/share/samba/scripts/print-pdf %s %H \//%L/%u\ %m %I %J &'; - $samba->{'pdf-gen'}{'lpq command'} = "/bin/true"; -} - -sub printers_section() { - $samba->{printers}; - $samba->{printers}{comment} = "All Printers"; - $samba->{printers}{browseable} = "no"; - $samba->{printers}{'guest ok'} = "yes"; - $samba->{printers}{'create mode'} = "0700"; - $samba->{printers}{path} = "/var/spool/samba"; - $samba->{printers}{writable} = "no"; - $samba->{printers}{printable} = "yes"; - $samba->{printers}{'print command'} = 'lpr-cups -P %p -o raw %s -r'; - $samba->{printers}{'use client driver'} = "yes"; -} - -sub add_entry() { - require wizards; - my ($wiz_addshare_name, $wiz_addshare_comment, $wiz_addshare_path); - my $wiz = wizards->new({ - name => N("Add a Samba share"), - pages => { - welcome => { - name => N("Goal of this wizard is to easily create a new Samba share."), - data => [ - { label => N("Name of the share:"), val => \$wiz_addshare_name }, - { label => N("Comment:"), val => \$wiz_addshare_comment }, - { label => N("Path:"), val => \$wiz_addshare_path }, - ], - complete => sub { - foreach my $clef (keys %$samba) { - if ($clef =~ /$wiz_addshare_name/) { - err_dialog(N("Error"), N("Share with the same name already exist or share name empty, please choose another name.")) and return 'welcome'; - } - } - if (!$wiz_addshare_path) { - err_dialog(N("Error"), N("Can't create the directory, please enter a correct path.")) and return 'welcome'; - } - if (!$wiz_addshare_comment) { - err_dialog(N("Error"), N("Please enter a Comment for this share.")) and return 'welcome'; - } - if (! -d $wiz_addshare_path) { - mkdir_p($wiz_addshare_path) or err_dialog(N("Error"), N("Can't create the directory, please enter a correct path.")) and return 'welcome'; - } - }, - post => sub { - push @{$share_list->{data}}, [ - $pixbuf_file, - $wiz_addshare_name, - $wiz_addshare_path, - $wiz_addshare_comment, - ]; - my $share = $wiz_addshare_name; - # update listshare - push @listshare, { - share_name => $share, - path => $wiz_addshare_path, - comment => $wiz_addshare_comment, - }; - # update samba conf - $samba->{$share}; - $samba->{$share}{path} = $wiz_addshare_path; - $samba->{$share}{comment} = $wiz_addshare_comment; - return; - }, - no_back => 1, - next => 'end_add', - }, - end_add => { - name => N("Congratulations"), - data => [ { label => N("The wizard successfully added the Samba share. Now just double click on it in treeview to modify it") } ], - no_back => 1, - end => 1, - next => 0, - }, - } - }); - $wiz->process($in); - $::isWizard = 0; - gtkset_mousecursor_normal(); -} - -sub add_printers_entry() { - require wizards; - my %print = ( - 1 => N("pdf-gen - a PDF generator"), - 2 => N("printers - all printers available"), - ); - my $wiz_todo; - my $wiz = wizards->new({ - name => N("Add Special Printer share"), - pages => { - welcome => { - name => N("Goal of this wizard is to easily create a new special printer Samba share."), - data => [ - { label => "", type => 'list', val => \$wiz_todo, list => [ keys %print ], format => sub { $print{$_[0]} } } - ], - no_back => 1, - next => 'end_add', - post => sub { - if ($wiz_todo == 1) { - exists $samba->{'pdf-gen'} and err_dialog(N("Error"), N("A PDF generator already exists.")) and return 'welcome'; - &pdf_section; - push @{$printer_list->{data}}, [ - $pixbuf_printer, - 'pdf-gen', - $samba->{'pdf-gen'}{path}, - $samba->{'pdf-gen'}{comment}, "", - $samba->{'pdf-gen'}{printable}, - $samba->{'pdf-gen'}{'print command'}, - $samba->{'pdf-gen'}{'lpq command'}, - $samba->{'pdf-gen'}{'guest ok'}, "", "", "", - $samba->{'pdf-gen'}{printing}, "", "", - ]; - push @listprinters, { - share_name => $samba->{'pdf-gen'}, - path => $samba->{'pdf-gen'}{path}, - comment => $samba->{'pdf-gen'}{comment}, - printebale => $samba->{'pdf-gen'}{printable}, - printing => $samba->{'pdf-gen'}{printing}, - print_command => $samba->{'pdf-gen'}{'print command'}, - lpq_command => $samba->{'pdf-gen'}{'lpq command'}, - guest_ok => $samba->{'pdf-gen'}{'guest ok'}, - }; - } elsif ($wiz_todo == 2) { - exists $samba->{'print$'} || exists $samba->{printers} and err_dialog(N("Error"), N("Printers and print\$ already exist.")) and return 'welcome'; - &printdollar_section; - &printers_section; - push @{$printer_list->{data}}, [ - $pixbuf_printer, - 'print$', - $samba->{'print$'}{path}, "", - $samba->{'print$'}{browseable}, "", "", "", - $samba->{'print$'}{'guest ok'}, "", - $samba->{'print$'}{'write list'}, - $samba->{'print$'}{'inherit permissions'}, - ]; - push @{$printer_list->{data}}, [ - $pixbuf_printer, - 'printers', - $samba->{printers}{path}, - $samba->{printers}{comment}, - $samba->{printers}{browseable}, - $samba->{printers}{printable}, - $samba->{printers}{'print command'}, "", - $samba->{printers}{'guest ok'}, - $samba->{printers}{writable}, "", "", "", - $samba->{printers}{'create mode'}, - $samba->{printers}{'use client driver'}, - ]; - push @listprinters, { - share_name => 'print$', - path => $samba->{'print$'}{path}, - browseable => $samba->{'print$'}{browseable}, - write_list => $samba->{'print$'}{'write list'}, - guest_ok => $samba->{'print$'}{'guest ok'}, - inherit_permissions => $samba->{'print$'}{'inherit permissions'}, - }; - push @listprinters, { - share_name => "printers", - comment => $samba->{printers}{comment}, - browseable => $samba->{printers}{browseable}, - guest_ok => $samba->{printers}{'guest ok'}, - create_mode => $samba->{printers}{'create mode'}, - path => $samba->{printers}{path}, - writable => $samba->{printers}{writable}, - printable => $samba->{printers}{printable}, - print_command => $samba->{printers}{'print command'}, - use_client_driver => $samba->{printers}{'use client driver'}, - }; - } - return; - }, - }, - end_add => { - name => N("Congratulations"), - data => [ { label => N("The wizard successfully added the printer Samba share") } ], - no_back => 1, - end => 1, - next => 0, - }, - } - }); - $wiz->process($in); - $::isWizard = 0; - # gtkset_mousecursor_normal() -} - -sub modify_printers_entry { - my ($selected) = @_; - my ($dir, $comment, $print_command, $guest_ok, $share_name, $browseable, $printable, $write_list, $printing, $lpq_command, $create_mode, $writable, $use_client_driver, $inherit_permissions); - - $share_name = Gtk2::Label->new; - $_ = Gtk2::Entry->new foreach $dir, $comment, $print_command, $write_list, $printing, $lpq_command, $create_mode; - $_ = Gtk2::OptionMenu->new foreach $browseable, $printable, $guest_ok, $writable, $use_client_driver, $inherit_permissions; - $_->set_popdown_strings(@yesno) foreach $browseable, $printable, $guest_ok, $writable, $use_client_driver, $inherit_permissions; - - - my $s = $printer_list->{data}[$selected][1]; - $s or info_dialog(N("Error"), N("Please add or select a Samba printer share to be able to modify it.")) and return; $share_name->set_text($s); - $dir->set_text($printer_list->{data}[$selected][2]); - $comment->set_text($printer_list->{data}[$selected][3]); - $browseable->set_text($printer_list->{data}[$selected][4]); - $printable->set_text($printer_list->{data}[$selected][5]); - $print_command->set_text($printer_list->{data}[$selected][6]); - $lpq_command->set_text($printer_list->{data}[$selected][7]); - $guest_ok->set_text($printer_list->{data}[$selected][8]); - $writable->set_text($printer_list->{data}[$selected][9]); - $write_list->set_text($printer_list->{data}[$selected][10]); - $inherit_permissions->set_text($printer_list->{data}[$selected][11]); - $printing->set_text($printer_list->{data}[$selected][12]); - $create_mode->set_text($printer_list->{data}[$selected][13]); - $use_client_driver->set_text($printer_list->{data}[$selected][14]); - - my $file_dialog = $fdwidget->($dir, ""); - my $button = Gtk2::Button->new_from_stock('gtk-open'); - $button->signal_connect(clicked => sub { $file_dialog->show }); - - my $dialog = _create_dialog(); - $dialog->set_transient_for($::main_window); - local $::main_window = $dialog; - $dialog->set_title("DrakSamba Printers entry"); - $dialog->set_position('center'); - $dialog->set_modal(1); - $dialog->set_resizable(1); - - if ($s eq "printers") { $printable->set_text("yes"); - $printing->set_text(""); - $_->set_sensitive(0) foreach $printable, $printing; - } - if ($s eq "pdf-gen") { $printing->set_text("bsd"); - $printing->set_sensitive(0); - } - - gtkpack_($dialog->vbox, - 0, gtkadd(Gtk2::Frame->new(N("Printer share")), - gtkpack_(gtkset_border_width(Gtk2::HBox->new, 3), - 0, gtkpack_(gtkset_border_width(Gtk2::VBox->new, 1), - 0, $label_and_widgets->(N("Printer name:"), $share_name, ""), - 0, $label_and_widgets->(N("Comment:"), $comment, ""), - 0, $label_and_widgets->(N("Directory:"), $dir, $button), - ), - 0, Gtk2::VSeparator->new, - 0, gtkpack_(gtkset_border_width(Gtk2::VBox->new, 1), - 0, $label_and_widgets->(N("Writable:"), $writable, ""), - 0, $label_and_widgets->(N("Browseable:"), $browseable, ""), - 0, $label_and_widgets->(N("Printable"), $printable, ""), - ), - ), - ), - 0, gtkadd(Gtk2::Frame->new(N("Advanced options")), - gtkpack_(gtkset_border_width(Gtk2::HBox->new, 3), - 0, gtkadd(Gtk2::Frame->new(N("Printer access")), - gtkpack_(gtkset_border_width(Gtk2::VBox->new, 1), - 0, $label_and_widgets->(N("Write list"), $write_list, ""), - 0, $label_and_widgets->(N("Inherit permissions"), $inherit_permissions, ""), - 0, $label_and_widgets->(N("Guest ok:"), $guest_ok, ""), - 0, $label_and_widgets->(N("Create mode:"), $create_mode, ""), - ), - ), - 0, Gtk2::VSeparator->new, - 0, gtkadd(Gtk2::Frame->new(N("Printer command")), - gtkpack_(gtkset_border_width(Gtk2::VBox->new, 1), - 0, $label_and_widgets->(N("Print command:"), $print_command, ""), - 0, $label_and_widgets->(N("LPQ command:"), $lpq_command, ""), - 0, $label_and_widgets->(N("Printing:"), $printing, ""), - ), - ), - ), - ), - 0, create_okcancel({ - cancel_clicked => sub { $dialog->destroy }, - ok_clicked => sub { - my $share = $share_name->get_text; - my $test_dir = $dir->get_text; - $comment->get_text or err_dialog(N("Information"), N("Please enter a Comment for this share.")) and return 1; - if (!-d $test_dir) { - err_dialog(N("Error!"), N("Please enter a directory to share.")) and return; - } - foreach ($create_mode->get_text) { - if ($_ && !/^\d+$/) { - err_dialog(N("Error"), N("create mode should be numeric. ie: 0755.")) and return 1; - } - } - # update gui SimpleList - remove_entry($selected, $printer_list); - push @{$printer_list->{data}}, [ - $pixbuf_printer, - $share, - $dir->get_text, - $comment->get_text, - $browseable->get_text, - $printable->get_text, - $print_command->get_text, - $lpq_command->get_text, - $guest_ok->get_text, - $writable->get_text, - $write_list->get_text, - $inherit_permissions->get_text, - $printing->get_text, - $create_mode->get_text, - $use_client_driver->get_text, - ]; - # update $samba - $samba->{$share}{path} = $dir->get_text; - $samba->{$share}{comment} = $comment->get_text; - $browseable->get_text and $samba->{$share}{browseable} = $browseable->get_text || delete $samba->{$share}{browseable}; - $printable->get_text and $samba->{$share}{printable} = $printable->get_text || delete $samba->{$share}{printable}; - $print_command->get_text and $samba->{$share}{'print command'} = $print_command->get_text || delete $samba->{$share}{'print command'}; - $lpq_command->get_text and $samba->{$share}{'lpq command'} = $lpq_command->get_text || delete $samba->{$share}{'lpq command'}; - $guest_ok->get_text and $samba->{$share}{'guest ok'} = $guest_ok->get_text || delete $samba->{$share}{'guest ok'}; - $writable->get_text and $samba->{$share}{writable} = $writable->get_text || delete $samba->{$share}{writable}; - $write_list->get_text and $samba->{$share}{'write list'} = $write_list->get_text || delete $samba->{$share}{'write list'}; - $inherit_permissions->get_text and $samba->{$share}{'inherit permissions'} = $inherit_permissions->get_text || delete $samba->{$share}{'inherit permissions'}; - $printing->get_text and $samba->{$share}{printing} = $printing->get_text || delete $samba->{$share}{printing}; - $create_mode->get_text and $samba->{$share}{'create mode'} = $create_mode->get_text || delete $samba->{$share}{'create mode'}; - $use_client_driver->get_text and $samba->{$share}{'use client driver'} = $use_client_driver->get_text || delete $samba->{$share}{'use client driver'}; - - # - $dialog->destroy; - } - }, - ), - ); - $dialog->show_all; -} - -sub modify_entry { - my ($selected) = @_; - my ($dir, $comment, $create_mask, $directory_mask, $read_list, $write_list, $admin_users, $valid_users, $force_group, $browseable, $public, $writable, $hide_files, $hide_dot_files, $force_create_mode, $preserve_case, $default_case, $inherit_permissions, $share_name); - - $share_name = Gtk2::Label->new; - $_ = Gtk2::Entry->new foreach $dir, $comment, $create_mask, $directory_mask, $hide_files; - $_ = Gtk2::Entry->new foreach $read_list, $write_list, $admin_users, $valid_users, $force_group, $force_create_mode; - $_ = Gtk2::OptionMenu->new foreach $browseable, $public, $writable, $default_case, $preserve_case, $hide_dot_files, $inherit_permissions; - - $default_case->set_popdown_strings(@default_case); - $_->set_popdown_strings(@yesno) foreach $browseable, $public, $writable, $hide_dot_files, $preserve_case, $inherit_permissions; - - my $file_dialog = $fdwidget->($dir, ""); - my $button = Gtk2::Button->new_from_stock('gtk-open'); - $button->signal_connect(clicked => sub { $file_dialog->show }); - - my $w = ugtk2->new(N("DrakSamba entry")); - $w->{window}->set_modal(1); - $w->{window}->set_position('center'); - - my $s = $share_list->{data}[$selected][1]; - $s or info_dialog(N("Error"), N("Please add or select a Samba share to be able to modify it.")) and return; - $share_name->set_text($s); - $dir->set_text($share_list->{data}[$selected][2]); - $comment->set_text($share_list->{data}[$selected][3]); - $browseable->set_text($share_list->{data}[$selected][4]); - $public->set_text($share_list->{data}[$selected][5]); - $writable->set_text($share_list->{data}[$selected][6]); - $create_mask->set_text($share_list->{data}[$selected][7]); - $directory_mask->set_text($share_list->{data}[$selected][8]); - $read_list->set_text($share_list->{data}[$selected][9]); - $write_list->set_text($share_list->{data}[$selected][10]); - $admin_users->set_text($share_list->{data}[$selected][11]); - $valid_users->set_text($share_list->{data}[$selected][12]); - $inherit_permissions->set_text($share_list->{data}[$selected][13]); - $hide_dot_files->set_text($share_list->{data}[$selected][14]); - $hide_files->set_text($share_list->{data}[$selected][15]); - $preserve_case->set_text($share_list->{data}[$selected][16]); - $force_create_mode->set_text($share_list->{data}[$selected][17]); - $force_group->set_text($share_list->{data}[$selected][18]); - $default_case->set_text($share_list->{data}[$selected][19]); - - my $expander_user = Gtk2::Expander->new('User options (user access, mask option, force mode)'); - $expander_user->add(gtkpack_(Gtk2::HBox->new, - 0, gtkadd(Gtk2::Frame->new(N("Samba user access")), - gtkpack_(gtkset_border_width(Gtk2::VBox->new, 1), - 0, $label_and_widgets->($adv_options{read_list}, $read_list, ""), - 0, $label_and_widgets->($adv_options{write_list}, $write_list, ""), - 0, $label_and_widgets->($adv_options{admin_users}, $admin_users, ""), - 0, $label_and_widgets->($adv_options{valid_users}, $valid_users, ""), - ), - ), - 0, gtkadd(Gtk2::Frame->new(N("Mask options")), - gtkpack_(gtkset_border_width(Gtk2::VBox->new, 1), - 0, $label_and_widgets->($adv_options{create_mask}, $create_mask, ""), - 0, $label_and_widgets->($adv_options{directory_mask}, $directory_mask, ""), - 0, $label_and_widgets->($adv_options{force_group}, $force_group, ""), - 0, $label_and_widgets->($adv_options{force_create_mode}, $force_create_mode, ""), - 0, $label_and_widgets->($adv_options{inherit_permissions}, $inherit_permissions, ""), - ), - ), - ), - ); - - my $expander_file = Gtk2::Expander->new('File options (hide files, case)'); - $expander_file->add(gtkpack_(Gtk2::VBox->new, - 0, gtkadd(Gtk2::Frame->new(N("Display options")), - gtkpack_(gtkset_border_width(Gtk2::HBox->new, 1), - 0, gtkpack_(gtkset_border_width(Gtk2::VBox->new, 0), - 0, $label_and_widgets->($adv_options{hide_dot_files}, $hide_dot_files, ""), - 0, $label_and_widgets->($adv_options{hide_files}, $hide_files, ""), - ), - 0, Gtk2::VSeparator->new, - 0, gtkpack_(gtkset_border_width(Gtk2::VBox->new, 0), - 0, $label_and_widgets->($adv_options{default_case}, $default_case, ""), - 0, $label_and_widgets->($adv_options{preserve_case}, $preserve_case, ""), - ), - ), - ), - ), - ); - - $_->signal_connect(activate => sub { - $w->shrink_topwindow; - }) foreach $expander_file, $expander_user; - - gtkadd($w->{window}, - gtknew('VBox', spacing => 0, children_loose => [ - gtkadd(Gtk2::Frame->new(N("Samba share directory")), - gtkpack_(gtkset_border_width(Gtk2::HBox->new, 1), - 0, gtkpack_(gtkset_border_width(Gtk2::VBox->new, 0), - 0, $label_and_widgets->(N("Share name:"), $share_name), - 0, $label_and_widgets->(N("Directory:"), $dir, $button), - 0, $label_and_widgets->(N("Comment:"), $comment, ""), - ), - 0, Gtk2::VSeparator->new, - 0, gtkpack_(gtkset_border_width(Gtk2::VBox->new, 0), - 0, $label_and_widgets->(N("Public:"), $public, ""), - 0, $label_and_widgets->(N("Writable:"), $writable, ""), - 0, $label_and_widgets->(N("Browseable:"), $browseable, ""), - ), - ), - ), - gtkadd(Gtk2::Frame->new("Advanced options"), - gtkpack_(gtkset_border_width(Gtk2::VBox->new, 1), - 0, $expander_user, - 0, Gtk2::HSeparator->new, - 0, $expander_file, - ), - ), - create_okcancel({ - cancel_clicked => sub { $w->destroy }, - ok_clicked => sub { - my $share = $share_name->get_text; - my $test_dir = $dir->get_text; - $comment->get_text or err_dialog(N("Information"), N("Please enter a Comment for this share.")) and return 1; - if ($share !~ /^homes$/ and !-d $test_dir) { - err_dialog(N("Error!"), N("Please enter a directory to share.")) and return; - } - foreach ($create_mask->get_text, $directory_mask->get_text) { - if ($_ && !/^\d+$/) { - err_dialog(N("Error"), N("Create mask, create mode and directory mask should be numeric. ie: 0755.")) and return 1; - } - } - foreach ($read_list->get_text, $write_list->get_text, $admin_users->get_text, $valid_users->get_text) { - my @users = split(" ", $_); - foreach my $user (@users) { - if (!any { /^$user:/ } cat_("/etc/samba/smbpasswd") and !/\@/) { - err_dialog(N("Error"), N("Please create this Samba user: %s", $user)) and return; - } - } - } - # update gui SimpleList - remove_entry($selected, $share_list); - push @{$share_list->{data}}, [ - $pixbuf_file, - $share_name->get_text, - $dir->get_text, - $comment->get_text, - $browseable->get_text, - $public->get_text, - $writable->get_text, - $create_mask->get_text, - $directory_mask->get_text, - $read_list->get_text, - $write_list->get_text, - $admin_users->get_text, - $valid_users->get_text, - $hide_dot_files->get_text, - $hide_files->get_text, - $preserve_case->get_text, - $force_create_mode->get_text, - $force_group->get_text, - $default_case->get_text, - $inherit_permissions->get_text, - ]; - # update $samba with the new value - # $samba->{$share}; - $samba->{$share}{path} = $dir->get_text; - $samba->{$share}{comment} = $comment->get_text; - $browseable->get_text and $samba->{$share}{browseable} = $browseable->get_text || delete $samba->{$share}{browseable}; - $public->get_text and $samba->{$share}{public} = $public->get_text || delete $samba->{$share}{public}; - $writable->get_text and $samba->{$share}{writable} = $writable->get_text || delete $samba->{$share}{writable}; - $create_mask->get_text and $samba->{$share}{'create mask'} = $create_mask->get_text || delete $samba->{$share}{'create mask'}; - $directory_mask->get_text and $samba->{$share}{'directory mask'} = $directory_mask->get_text || delete $samba->{$share}{'directory mask'}; - $read_list->get_text and $samba->{$share}{'read list'} = $read_list->get_text || delete $samba->{$share}{'read list'}; - $write_list->get_text and $samba->{$share}{'write list'} = $write_list->get_text || delete $samba->{$share}{'write list'}; - $admin_users->get_text and $samba->{$share}{'admin users'} = $admin_users->get_text || delete $samba->{$share}{'admin users'}; - $valid_users->get_text and $samba->{$share}{'valid users'} = $valid_users->get_text || delete $samba->{$share}{'valid users'}; - $hide_dot_files->get_text and $samba->{$share}{'hide dot files'} = $hide_dot_files->get_text || delete $samba->{$share}{'hide dot files'}; - $hide_files->get_text and $samba->{$share}{'hide files'} = $hide_files->get_text || delete $samba->{$share}{'hide files'}; - $preserve_case->get_text and $samba->{$share}{'preserve case'} = $preserve_case->get_text || delete $samba->{$share}{'preserve case'}; - $force_create_mode->get_text and $samba->{$share}{'force create mode'} = $force_create_mode->get_text || delete $samba->{$share}{'force create mode'}; - $force_group->get_text and $samba->{$share}{'force group'} = $force_group->get_text || delete $samba->{$share}{'force group'}; - $default_case->get_text and $samba->{$share}{'default case'} = $default_case->get_text || delete $samba->{$share}{'default case'}; - $inherit_permissions->get_text and $samba->{$share}{'inherit permissions'} = $inherit_permissions->get_text || delete $samba->{$share}{'inherit permissions'}; - - # update listshare - push @listshare, { - share_name => $share, - path => $samba->{$share}{path}, - comment => $samba->{$share}{comment}, - browseable => $samba->{$share}{browseable}, - public => $samba->{$share}{public}, - writable => $samba->{$share}{writable}, - create_mask => $samba->{$share}{'create mask'}, - directory_mask => $samba->{$share}{'directory mask'}, - read_list => $samba->{$share}{'read list'}, - write_list => $samba->{$share}{'write list'}, - admin_users => $samba->{$share}{'admin users'}, - valid_users => $samba->{$share}{'valid users'}, - hide_dot_files => $samba->{$share}{'hide dot files'}, - hide_files => $samba->{$share}{'hide files'}, - preserve_case => $samba->{$share}{'preserve case'}, - force_create_mode => $samba->{$share}{'force create mode'}, - force_group => $samba->{$share}{'force group'}, - default_case => $samba->{$share}{'default case'}, - inherit_permissions => $samba->{$share}{'inherit permissions'}, - }; - $w->destroy; - }, - }, - ), - ] - ), - ); - $w->{window}->show_all; -} - -sub remove_entry { - my ($selected, $list) = @_; - my $share_name = $list->{data}[$selected][1]; - splice @{$list->{data}}, $selected, 1; - delete $samba->{$share_name}; -} - -sub remove_user { - my ($user) = @_; - system("smbpasswd -x $user"); -} - -sub get_user() { - my $conf = "/etc/passwd"; - my @data; local $_; - foreach (cat_($conf)) { - push @data, $1 if m/^([^#:]+):[^:]+:([^:]+):/ and $2 > 499; - } - push @data, " "; - return sort(@data); -} - - -sub modify_user_info { - my ($user, $passwd, $todo) = @_; - my ($buser, $bpasswd); - my $dialog = new Gtk2::Dialog(); - $dialog->set_title("Add Samba user"); - $dialog->set_modal(1); - $dialog->set_position('center'); - $dialog->set_resizable(0); - if ($todo eq "add") { - $buser = Gtk2::ComboBox->new_with_strings([ get_user() ]); - $buser->set_wrap_width(3); - } else { - $buser = Gtk2::Label->new; - $buser->set_text($user); - } - $bpasswd = Gtk2::Entry->new; - $bpasswd->set_visibility(0); - - gtkpack_($dialog->vbox, - 0, gtkadd(Gtk2::Frame->new(N("User information")), - gtkpack_(gtkset_border_width(Gtk2::VBox->new, 5), - 0, $label_and_widgets->(N("User name:"), $buser, ""), - 0, $label_and_widgets->(N("Password:"), $bpasswd, ""), - ), - ), - 0, create_okcancel({ - cancel_clicked => sub { $dialog->destroy }, - ok_clicked => sub { - my $user_selected = $buser->get_text; - if ($todo eq "add") { - if (any { /^$user_selected:/ } cat_("/etc/samba/smbpasswd")) { - err_dialog(N("Error"), ("Samba User already exist")) and return; - } - system("smbpasswd -a $user_selected -n"); - push @{$user_list->{data}}, [ - $pixbuf_user, - $user_selected, - ]; - push @listusers, { - user_name => $user_selected, - }; - } - my $passwd_e = $bpasswd->get_text; - set_user_passwd($user_selected, $passwd_e); - $dialog->destroy; - } - }, - ), - ); - $dialog->show_all; -} - -sub set_user_passwd { - my ($user, $passwd) = @_; - my $F; - open($F, '|' . qq(smbpasswd $user -s)); - print $F "$passwd\n"; - print $F "$passwd\n"; - close $F; -} - -sub add_data_share_list { - my ($share_list) = @_; - get_samba_share(); - - foreach my $data (@listshare) { - push @{$share_list->{data}}, [ - $pixbuf_file, - $data->{share_name}, - $data->{path}, - $data->{comment}, - $data->{browseable}, - $data->{public}, - $data->{writable}, - $data->{create_mask}, - $data->{directory_mask}, - $data->{read_list}, - $data->{write_list}, - $data->{admin_users}, - $data->{valid_users}, - $data->{inherit_permissions}, - $data->{hide_dot_files}, - $data->{hide_files}, - $data->{preserve_case}, - $data->{force_create_mode}, - $data->{force_group}, - $data->{default_case}, - ]; - } -} - -sub add_data_user_list { - my ($user_list) = @_; - get_samba_user(); - foreach my $data (@listusers) { - push @{$user_list->{data}}, [ - $pixbuf_user, - $data->{user_name}, - ]; - } -} - -sub add_data_printer_list { - my ($printer_list) = @_; - get_samba_printers(); - foreach my $data (@listprinters) { - push @{$printer_list->{data}}, [ - $pixbuf_printer, - $data->{share_name}, - $data->{path}, - $data->{comment}, - $data->{browseable}, - $data->{printable}, - $data->{print_command}, - $data->{lpq_command}, - $data->{guest_ok}, - $data->{writable}, - $data->{write_list}, - $data->{inherit_permissions}, - $data->{printing}, - $data->{create_mode}, - $data->{use_client_driver}, - ]; - } -} - -############### -# Main Program -############### -# create model -add_data_share_list($share_list); -add_data_printer_list($printer_list); -add_data_user_list($user_list); -$_->set_rules_hint(1) foreach $share_list, $printer_list, $user_list; - -my $window = ugtk2->new("DrakSamba"); -$::main_window = $window->{real_window}; -$window->{rwindow}->set_size_request(600, 410) unless $::isEmbedded; -$window->{rwindow}->set_position('center') if !$::isEmbedded; -my $W = $window->{window}; -$W->signal_connect(delete_event => sub { ugtk2->exit }); - -# double clic and popup modify window -$share_list->signal_connect(button_press_event => sub { - my (undef, $event) = @_; - my ($selected) = $share_list->get_selected_indices; - $share_list->{data}[$selected][1] and modify_entry($selected) if $event->type eq '2button-press'; - }); - -$printer_list->signal_connect(button_press_event => sub { - my (undef, $event) = @_; - my ($selected) = $printer_list->get_selected_indices; - $printer_list->{data}[$selected][1] and modify_printers_entry($selected) if $event->type eq '2button-press'; - }); - -$user_list->signal_connect(button_press_event => sub { - my (undef, $event) = @_; - my ($selected) = $user_list->get_selected_indices; - $user_list->{data}[$selected][1] and modify_user_info($user_list->{data}[$selected][1], "", "change") if $event->type eq '2button-press'; - }); - -# dont know why "$event->type eq '2button-press'" when starting draksambashare so i can't use mapn :/ -#mapn { -# $_[0]->signal_connect(button_press_event => sub { -# my (undef, $event) = @_; -# my ($selected) = $_[0]->get_selected_indices; -# return unless $event->type eq '2button-press'; -# $_[0]->{data}[$selected][1] and $_[1]($selected); # if $event->type eq '2button-press'; -# }); -#} [ $share_list, $printer_list, $user_list ], [ modify_entry, modify_printers_entry, modify_user_info ]; - -# create popup menu -my $menupopup = Gtk2::Menu->new; -my $menuitem1 = Gtk2::MenuItem->new(N("Modify")); -my $menuitem2 = Gtk2::MenuItem->new(N("Remove")); -$menuitem1->signal_connect(activate => sub { - my ($selected) = $share_list->get_selected_indices; - modify_entry($selected, $share_list); - }); -$menuitem2->signal_connect(activate => sub { - my ($selected) = $share_list->get_selected_indices; - ask_okcancel("Remove entry ?", "Remove $share_list->{data}[$selected][1]") or return; - remove_entry($selected, $share_list); - }); -$_->show foreach $menuitem1, $menuitem2; -$menupopup->append($_) foreach $menuitem1, $menuitem2; -$share_list->signal_connect('button-press-event' => sub { - my ($widget, $event) = @_; - return unless $event->button == 3; - $menupopup->popup(undef, undef, undef, undef, $event->button, $event->time); - } - ); - -$share_list->signal_connect(key_press_event => sub { - my ($widget, $event) = @_; - return unless $event->keyval == $Gtk2::Gdk::Keysyms{Return}; - my ($selected) = $share_list->get_selected_indices; - modify_entry($selected, $share_list); - return 1; -}); - -# create menu -my @items = get_items(); -my $factory = Gtk2::ItemFactory->new('Gtk2::MenuBar', '
', undef); -$factory->create_items('menu', @items); -my $menu = $factory->get_widget('
'); - -my $okcancel = create_okcancel({ - cancel_clicked => sub { ugtk2->exit }, - ok_clicked => sub { &write_conf; ugtk2->exit }, - }, - ); - -gtkappend_page(my $nb = Gtk2::Notebook->new, gtkpack_(gtkset_border_width(Gtk2::HBox->new, 0), - 1, create_scrolled_window($share_list), - 0, gtkpack_(create_vbox('start'), - 0, gtksignal_connect(Gtk2::Button->new(N("Add")), clicked => sub { - eval { add_entry() }; - my $err = $@; - $::WizardWindow->destroy if defined $::WizardWindow; - undef $::WizardWindow; - if ($err && $err !~ /wizcancel/) { - err_dialog(N("Error"), N("Failed to add Samba share.") . "\n\n" . $err); - } - }), - 0, Gtk2::HSeparator->new, - 0, gtksignal_connect(Gtk2::Button->new(N("Modify")), clicked => sub { - my ($selected) = $share_list->get_selected_indices; - eval { modify_entry($selected, $share_list) }; - my $err = $@; - if ($err) { - err_dialog(N("Error"), N("Failed to Modify Samba share.") . "\n\n" . $err); - } - }), - 0, gtksignal_connect(Gtk2::Button->new(N("Remove")), clicked => sub { - my ($selected) = $share_list->get_selected_indices; - ask_okcancel("Remove entry ?", "Remove $share_list->{data}[$selected][1]") or return; - eval { remove_entry($selected, $share_list) }; - my $err = $@; - if ($err) { - err_dialog(N("Error"), N("Failed to remove a Samba share.") . "\n\n" . $err); - } - }), - ), - ), - gtkshow(gtkpack_(Gtk2::HBox->new(0,0), - 0, Gtk2::Image->new_from_file($fileshare_icon), - 0, Gtk2::Label->new(N("File share")), - ), - ), - ); - -gtkappend_page($nb, gtkpack_(gtkset_border_width(Gtk2::HBox->new, 0), - 1, create_scrolled_window($printer_list), - 0, gtkpack_(create_vbox('start'), - 0, gtksignal_connect(Gtk2::Button->new(N("Add printers")), clicked => sub { - eval { add_printers_entry() }; - my $err = $@; - $::WizardWindow->destroy if defined $::WizardWindow; - undef $::WizardWindow; - if ($err && $err !~ /wizcancel/) { - err_dialog(N("Error"), N("Failed to add printers.") . "\n\n" . $err); - } - }), - 0, Gtk2::HSeparator->new, - 0, gtksignal_connect(Gtk2::Button->new(N("Modify")), clicked => sub { - my ($selected) = $printer_list->get_selected_indices; - eval { modify_printers_entry($selected) }; - my $err = $@; - if ($err) { - err_dialog(N("Error"), N("Failed to Modify.") . "\n\n" . $err); - } - }), - 0, gtksignal_connect(Gtk2::Button->new(N("Remove")), clicked => sub { - my ($selected) = $printer_list->get_selected_indices; - ask_okcancel("Remove entry ?", "Remove $printer_list->{data}[$selected][1]") or return; - eval { remove_entry($selected, $printer_list) }; - my $err = $@; - if ($err) { - err_dialog(N("Error"), N("Failed to remove.") . "\n\n" . $err); - } - }), - ), - ), - gtkshow(gtkpack_(Gtk2::HBox->new(0,0), - 0, Gtk2::Image->new_from_file($printershare_icon), - 0, Gtk2::Label->new(N("Printers")), - ), - ), - ); - -gtkappend_page($nb, gtkpack_(gtkset_border_width(Gtk2::HBox->new, 0), - 1, create_scrolled_window($user_list), - 0, gtkpack_(create_vbox('start'), - 0, gtksignal_connect(Gtk2::Button->new(N("Change password")), clicked => sub { - my ($selected) = $user_list->get_selected_indices; - eval { modify_user_info($user_list->{data}[$selected][1], "", "change") }; - my $err = $@; - if ($err) { - err_dialog(N("Error"), N("Failed to change user password.") . "\n\n" . $err); - } - }), - 0, Gtk2::HSeparator->new, - 0, gtksignal_connect(Gtk2::Button->new(N("Add user")), clicked => sub { - eval { modify_user_info("", "", "add") }; - my $err = $@; - if ($err) { - err_dialog(N("Error"), N("Failed to add user.") . "\n\n" . $err); - } - }), - 0, gtksignal_connect(Gtk2::Button->new(N("Delete user")), clicked => sub { - my ($selected) = $user_list->get_selected_indices; - ask_okcancel("Remove entry ?", "Remove $user_list->{data}[$selected][1]") or return; - eval { - remove_user($user_list->{data}[$selected][1]); - remove_entry($selected, $user_list); - }; - my $err = $@; - if ($err) { - err_dialog(N("Error"), N("Failed to delete user.") . "\n\n" . $err); - } - }), - 0, Gtk2::HSeparator->new, - 0, gtksignal_connect(Gtk2::Button->new(N("Userdrake")), clicked => sub { - run_program::raw({ detach => 1 }, 'userdrake'); - } - ), - ), - ), - gtkshow(gtkpack_(Gtk2::HBox->new(0,0), - 0, Gtk2::Image->new_from_file($sambauser_icon), - 0, Gtk2::Label->new(N("Samba Users"))), - ), - ); - -$nb->set_show_border(0); - -# main interface -$W->add(gtkpack_(Gtk2::VBox->new(0,0), - 0, $menu, - if_(!$::isEmbedded, 0, Gtk2::Banner->new('IC-winacces1-48', N("DrakSamba manage Samba shares"))), - #if_($::isEmbedded, 0, Gtk2::Label->new("Here you can add, remove and alter Samba shares.")), - 1, $nb, - 0, $okcancel, - ), - ); - -$W->show_all; -Gtk2->main; -- cgit v1.2.1