X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=blobdiff_plain;f=html%2Fcgi-bin%2Fsamba.cgi;h=28518867ed033fce3d642c6ab8647b7d6d1304f2;hp=066f9d069457925fbcb823ad94442484070e2b29;hb=97e7cfaf262bcc5c71288caafdc0b5ef3fe932e5;hpb=32f77a0b3bdd47d4300cc6c76b5d4aed411167e8 diff --git a/html/cgi-bin/samba.cgi b/html/cgi-bin/samba.cgi index 066f9d0694..28518867ed 100644 --- a/html/cgi-bin/samba.cgi +++ b/html/cgi-bin/samba.cgi @@ -1,15 +1,28 @@ #!/usr/bin/perl -# -# IPFire CGIs -# -# This code is distributed under the terms of the GPL -# -# (c) The IPFire Team +############################################################################### +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2007 Michael Tremer & Christian Schmidt # +# # +# 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 3 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, see . # +# # +############################################################################### use strict; # enable only the following on debugging purpose -use warnings; -use CGI::Carp 'fatalsToBrowser'; +#use warnings; +#use CGI::Carp 'fatalsToBrowser'; require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; @@ -20,68 +33,76 @@ my %cgisettings = (); my %checked = (); my %netsettings = (); my %ovpnsettings = (); +my %color = (); +my %mainsettings = (); my $message = ""; my $errormessage = ""; -my $defaultoption= "[Share]\npath = /var/samba/share1\ncomment = Share - Public Access\nbrowseable = yes\nwriteable = yes\ncreate mask = 0777\ndirectory mask = 0777\nguest ok = yes\npublic = yes\nforce user = samba"; + +my @Logs = qx(ls /var/log/samba/); +my $Log =$Lang::tr{'no log selected'}; + +my $Status = qx(/usr/local/bin/sambactrl smbstatus); +$Status=~s/\n/
/g; + my $userentry = ""; my @user = (); my @userline = (); -my @proto = (); +my $userfile = "${General::swroot}/samba/private/smbpasswd"; my %selected= () ; -my $userfile = "/var/ipfire/samba/private/smbpasswd"; + +my $defaultoption= "[Share]\npath = /var/ipfire/samba/share1\ncomment = Share - Public Access\nbrowseable = yes\nwriteable = yes\ncreate mask = 0777\ndirectory mask = 0777\npublic = yes\nforce user = samba"; +my $defaultprinter= "[Printer]\ncomment = Printer public\npath = /var/spool/cups\nprinting = sysvn\nprintcap = lpstat\npublic = yes\nwritable = no\nprintable = yes"; +my %printer = (); +my %shares = (); + &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); &General::readhash("${General::swroot}/ovpn/settings", \%ovpnsettings); +&General::readhash("${General::swroot}/main/settings", \%mainsettings); +&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color); ############################################################################################################################ ############################################# Samba Dienste fr Statusberprfung ########################################## -my %servicenames = ('SMB Daemon' => 'smbd','NetBIOS Nameserver' => 'nmbd','Winbind Daemon' => 'winbindd'); +my %servicenames = ('SMB Daemon' => 'smbd','NetBIOS Nameserver' => 'nmbd'); +#my %servicenames = ('SMB Daemon' => 'smbd','NetBIOS Nameserver' => 'nmbd','Winbind Daemon' => 'winbindd'); &Header::showhttpheaders(); -############################################################################################################################ -#################################### Initialisierung von Samba Sharess fr die Verarbeitung ################################ - -my @Zeilen= (); -my @Shares= (); -my $shareentry = ""; -my $shareconfigentry = ""; -my @shareconfigline = (); -my $shareoption = ''; -my @shares = (); -my @shareline = (); -my $sharefile = "/var/ipfire/samba/shares"; -my $EOF = qx(cat $sharefile | wc -l); -my $Status = qx(/usr/local/bin/sambactrl smbstatus); - -@shares = `grep -n '^\\[' $sharefile`; -foreach $shareentry (@shares) - { - @shareline = split( /\:/, $shareentry ); - push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]); - } - ############################################################################################################################ #################################### Initialisierung von Samba Variablen fr global Settings ############################### $sambasettings{'WORKGRP'} = 'homeip.net'; -$sambasettings{'NETBIOSNAME'} = 'IPFIRE'; -$sambasettings{'SRVSTRING'} = 'Samba Server running on IPFire 2.0'; +$sambasettings{'NETBIOSNAME'} = 'IPFire'; +$sambasettings{'SRVSTRING'} = 'Samba running on IPFire 2.3'; $sambasettings{'INTERFACES'} = ''; $sambasettings{'SECURITY'} = 'share'; -$sambasettings{'OSLEVEL'} = '65'; +$sambasettings{'OSLEVEL'} = '33'; $sambasettings{'GREEN'} = 'on'; $sambasettings{'BLUE'} = 'off'; $sambasettings{'ORANGE'} = 'off'; $sambasettings{'VPN'} = 'off'; -$sambasettings{'WINSSRV'} = "$netsettings{'GREEN_NETADDRESS'}"; -$sambasettings{'WINSSUPPORT'} = 'off'; +$sambasettings{'WINSSRV'} = ''; +$sambasettings{'WINSSUPPORT'} = 'on'; +$sambasettings{'REMOTEANNOUNCE'} = ''; +$sambasettings{'REMOTESYNC'} = ''; $sambasettings{'PASSWORDSYNC'} = 'off'; -$sambasettings{'OTHERINTERFACES'} = ''; +$sambasettings{'OTHERINTERFACES'} = '127.0.0.1'; $sambasettings{'GUESTACCOUNT'} = 'samba'; $sambasettings{'MAPTOGUEST'} = 'Never'; +$sambasettings{'LOGLEVEL'} = '3 passdb:5 auth:5 winbind:2'; +$sambasettings{'SYSLOGLEVEL'} = '1'; +$sambasettings{'SYSLOGONLY'} = 'on'; +$sambasettings{'DOSCHARSET'} = 'CP850'; +$sambasettings{'UNIXCHARSET'} = 'UTF8'; +$sambasettings{'DISPLAYCHARSET'} = 'CP850'; +$sambasettings{'SOCKETOPTIONS'} = 'TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 SO_KEEPALIVE'; ### Values that have to be initialized -$cgisettings{'ACTION'} = ''; +$sambasettings{'ACTION'} = ''; +### Samba CUPS Variablen +$sambasettings{'LOADPRINTERS'} = 'Yes'; +$sambasettings{'PRINTING'} = 'cups'; +$sambasettings{'PRINTCAPNAME'} = 'cups'; +my $LOGLINES = '50'; ################################################## Samba PDC Variablen ##################################################### @@ -96,208 +117,109 @@ my $PDCOPTIONS = `cat ${General::swroot}/samba/pdc`; &General::readhash("${General::swroot}/samba/settings", \%sambasettings); &Header::getcgihash(\%sambasettings); +sub refreshpage{&Header::openbox( 'Waiting', 1, "" );print "

$Lang::tr{'pagerefresh'}
";&Header::closebox();} + &Header::openpage('Samba', 1, ''); &Header::openbigbox('100%', 'left', '', $errormessage); ############################################################################################################################ -############################################# Samba Rootskript aufrufe fr SU-Actions ###################################### - -if ($sambasettings{'ACTION'} eq 'smbuserdisable'){system("/usr/local/bin/sambactrl smbuserdisable $sambasettings{'NAME'}");} -if ($sambasettings{'ACTION'} eq 'smbuserenable'){system("/usr/local/bin/sambactrl smbuserenable $sambasettings{'NAME'}");} -if ($sambasettings{'ACTION'} eq 'smbuseradd'){system("/usr/local/bin/sambactrl smbuseradd $sambasettings{'USERNAME'} $sambasettings{'PASSWORD'} $sambasettings{'GROUP'} $sambasettings{'SHELL'}");} -if ($sambasettings{'ACTION'} eq 'smbpcadd'){system("/usr/local/bin/sambactrl smbpcadd $sambasettings{'PCNAME'} $sambasettings{'GROUP'} $sambasettings{'SHELL'}");} -if ($sambasettings{'ACTION'} eq 'smbchangepw'){system("/usr/local/bin/sambactrl smbchangepw $sambasettings{'USERNAME'} $sambasettings{'PASSWORD'}");} -if ($sambasettings{'ACTION'} eq 'smbrestart'){system("/usr/local/bin/sambactrl smbrestart");} -if ($sambasettings{'ACTION'} eq 'smbstart'){system("/usr/local/bin/sambactrl smbstart");} -if ($sambasettings{'ACTION'} eq 'smbstop'){system("/usr/local/bin/sambactrl smbstop");} -if ($sambasettings{'ACTION'} eq 'smbstop'){system("/usr/local/bin/sambactrl smbstop");} -if ($sambasettings{'ACTION'} eq 'globalreset'){system("/usr/local/bin/sambactrl smbglobalreset");} - -# smbsafeconf is directly called by the if clause - -if ($sambasettings{'ACTION'} eq 'sharesreset') -{ -system('/usr/local/bin/sambactrl smbsharesreset'); - @Zeilen = (); - @Shares = (); - $shareentry = ""; - @shares = (); - @shareline = (); - $EOF = qx(cat $sharefile | wc -l); - - @shares = `grep -n '^\\[' $sharefile`; - foreach $shareentry (@shares) - { - @shareline = split( /\:/, $shareentry ); - push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]); - } -} - -############################################################################################################################ -########################################### Samba Benutzer oder PC l�chen ################################################# - -if ($sambasettings{'ACTION'} eq 'userdelete' && $sambasettings{'NAME'} =~ /\$/) -{ -system("/usr/local/bin/sambactrl smbpcdelete $sambasettings{'NAME'}"); -} -elsif ($sambasettings{'ACTION'} eq 'userdelete') -{ -system("/usr/local/bin/sambactrl smbuserdelete $sambasettings{'NAME'}"); -} +############################################# Samba Rootskript aufrufe fr SU-Actions ####################################### + +if ($sambasettings{'ACTION'} eq 'smbuserdisable'){system("/usr/local/bin/sambactrl smbuserdisable $sambasettings{'NAME'}");refreshpage();} +if ($sambasettings{'ACTION'} eq 'smbuserenable'){system("/usr/local/bin/sambactrl smbuserenable $sambasettings{'NAME'}");refreshpage();} +if ($sambasettings{'ACTION'} eq 'smbuseradd'){system("/usr/local/bin/sambactrl smbuseradd $sambasettings{'USERNAME'} $sambasettings{'PASSWORD'} $sambasettings{'GROUP'} $sambasettings{'SHELL'}");refreshpage();} +if ($sambasettings{'ACTION'} eq 'smbpcadd'){system("/usr/local/bin/sambactrl smbpcadd $sambasettings{'PCNAME'} $sambasettings{'GROUP'} $sambasettings{'SHELL'}");refreshpage();} +if ($sambasettings{'ACTION'} eq 'smbchangepw'){system("/usr/local/bin/sambactrl smbchangepw $sambasettings{'USERNAME'} $sambasettings{'PASSWORD'}");refreshpage();} +if ($sambasettings{'ACTION'} eq 'smbrestart'){system("/usr/local/bin/sambactrl smbrestart");refreshpage();} +if ($sambasettings{'ACTION'} eq 'smbstart'){system("/usr/local/bin/sambactrl smbstart");refreshpage();} +if ($sambasettings{'ACTION'} eq 'smbstop'){system("/usr/local/bin/sambactrl smbstop");refreshpage();} +if ($sambasettings{'ACTION'} eq 'smbreload'){system("/usr/local/bin/sambactrl smbreload");refreshpage();} +if ($sambasettings{'ACTION'} eq 'globalresetyes') + { + system("/usr/local/bin/sambactrl smbglobalreset"); + $sambasettings{'WORKGRP'} = 'homeip.net'; + $sambasettings{'NETBIOSNAME'} = 'IPFire'; + $sambasettings{'SRVSTRING'} = 'Samba running on IPFire 2.0'; + $sambasettings{'INTERFACES'} = ''; + $sambasettings{'SECURITY'} = 'share'; + $sambasettings{'OSLEVEL'} = '65'; + $sambasettings{'GREEN'} = 'on'; + $sambasettings{'BLUE'} = 'off'; + $sambasettings{'ORANGE'} = 'off'; + $sambasettings{'VPN'} = 'off'; + $sambasettings{'WINSSRV'} = ''; + $sambasettings{'WINSSUPPORT'} = 'on'; + $sambasettings{'REMOTEANNOUNCE'} = ''; + $sambasettings{'REMOTESYNC'} = ''; + $sambasettings{'PASSWORDSYNC'} = 'off'; + $sambasettings{'OTHERINTERFACES'} = '127.0.0.1'; + $sambasettings{'GUESTACCOUNT'} = 'samba'; + $sambasettings{'MAPTOGUEST'} = 'Never'; + $sambasettings{'LOGLEVEL'} = '3 passdb:5 auth:5 winbind:2'; + $sambasettings{'SYSLOGLEVEL'} = '1'; + $sambasettings{'SYSLOGONLY'} = 'on'; + $sambasettings{'DOSCHARSET'} = 'CP850'; + $sambasettings{'UNIXCHARSET'} = 'UTF8'; + $sambasettings{'DISPLAYCHARSET'} = 'CP850'; +### Samba CUPS Variablen + $sambasettings{'LOADPRINTERS'} = 'Yes'; + $sambasettings{'PRINTING'} = 'cups'; + $sambasettings{'PRINTCAPNAME'} = 'cups'; + $sambasettings{'PRINTERNAME'} = 'Printer'; +### Values that have to be initialized + $sambasettings{'ACTION'} = ''; + $sambasettings{'LOCALMASTER'} = 'off'; + $sambasettings{'DOMAINMASTER'} = 'off'; + $sambasettings{'PREFERREDMASTER'} = 'off'; + $sambasettings{'SOCKETOPTIONS'} = 'TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 SO_KEEPALIVE'; + $PDCOPTIONS = `cat ${General::swroot}/samba/pdc`; + system("/usr/local/bin/sambactrl smbreload"); + refreshpage(); + } ############################################################################################################################ -############################################## Samba Share neu anlegen ##################################################### +################################################ Sicherheitsabfrage für den Reset ########################################## -if ($sambasettings{'ACTION'} eq 'smbshareadd') -{ - my $emptyline= ""; - open (FILE, ">>${General::swroot}/samba/shares") or die "Can't save the shares settings: $!"; - flock (FILE, 2); - -print FILE < + + + + +
$Lang::tr{'resetglobals'} +
+ $Lang::tr{'yes'} +
+ $Lang::tr{'no'} +
END ; -close FILE; -system("/usr/local/bin/sambactrl smbsafeconf"); - - @Zeilen = (); - @Shares = (); - $shareentry = ""; - @shares = (); - @shareline = (); - $EOF = qx(cat $sharefile | wc -l); - - @shares = `grep -n '^\\[' $sharefile`; - foreach $shareentry (@shares) - { - @shareline = split( /\:/, $shareentry ); - push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]); - } } -############################################################################################################################ -################################################## Samba Share l�chen ##################################################### - -if ($sambasettings{'ACTION'} eq 'smbsharedel') -{ -my $sharebody = ''; -my $sharehead = ''; -my $sharetext = ''; -my $sharename = "$sambasettings{'NAME'}"; -chomp $sharename; -$sharename=~s/\s//g; - -for(my $i = 0; $i <= $#Shares; $i++) - { - chomp $Shares[$i]; - $Shares[$i]=~s/\s//g; - if ( "$Shares[$i]" eq "$sharename" ) - { - my $Zeilenbegin = $Zeilen[$i]-2; - my $Zeilenende = $EOF-$Zeilen[$i+1]+1; - my $Zeilenende2 = $Zeilenende-1; - - if ( $Zeilen[$i] eq $Zeilen[$#Shares] ) - { - $sharehead = qx(head -$Zeilenbegin $sharefile); - $sharetext = $sharehead; - } - elsif ($Zeilen[$i] eq 1 ) - { - $sharehead = qx(tail -$Zeilenende $sharefile | head -$Zeilenende2); - $sharetext = $sharehead; - } - else - { - $sharehead = qx(head -$Zeilenbegin $sharefile);$sharebody = qx(tail -$Zeilenende $sharefile | head -$Zeilenende2); - $sharetext = "$sharehead\n$sharebody"; - } - } - } - -open (FILE, ">${General::swroot}/samba/shares") or die "Can't delete the share settings: $!"; -flock (FILE, 2); -print FILE < + + + + +
$Lang::tr{'resetshares'} +
+ $Lang::tr{'yes'} +
+ $Lang::tr{'no'} +
END ; -close FILE; -system("/usr/local/bin/sambactrl smbsafeconf"); - - @Zeilen = (); - @Shares = (); - $shareentry = ""; - @shares = (); - @shareline = (); - $EOF = qx(cat $sharefile | wc -l); - - @shares = `grep -n '^\\[' $sharefile`; - foreach $shareentry (@shares) - { - @shareline = split( /\:/, $shareentry ); - push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]); - } -} -############################################################################################################################ -################################################## Sambashare �dern ####################################################### - -if ($sambasettings{'ACTION'} eq 'smbsharechange') -{ -my $sharebody = ''; -my $sharehead = ''; -my $sharename = "$sambasettings{'NAME'}"; -my $sharetext = ''; -$sharename=~s/\s//g; + } -for(my $i = 0; $i <= $#Shares; $i++) - { - chomp $Shares[$i]; - $Shares[$i]=~s/\s//g; - if ( "$Shares[$i]" eq "$sharename" ) - { - my $Zeilenbegin = $Zeilen[$i]-2; - my $Zeilenende = $EOF-$Zeilen[$i+1]+1; - my $Zeilenende2 = $Zeilenende-1; - - if ( $Zeilen[$i] eq $Zeilen[$#Shares] ) - { - $sharehead = qx(head -$Zeilenbegin $sharefile); - $sharetext = $sharehead; - } - elsif ($Zeilen[$i] eq 1 ) - { - $sharehead = qx(tail -$Zeilenende $sharefile | head -$Zeilenende2); - $sharetext = $sharehead; - } - else - { - $sharehead = qx(head -$Zeilenbegin $sharefile);$sharebody = qx(tail -$Zeilenende $sharefile | head -$Zeilenende2); - $sharetext = "$sharehead\n$sharebody"; - } - } - } - -open (FILE, ">${General::swroot}/samba/shares") or die "Can't delete the share settings: $!"; -flock (FILE, 2); -print FILE <${General::swroot}/samba/pdc") or die "Can't save the pdc settings: $!"; - flock (FILE, 2); - print FILE <>${General::swroot}/samba/global") or die "Can't save the global cups settings: $!"; + flock (FILE, 2); + print FILE <${General::swroot}/samba/pdc") or die "Can't save the pdc settings: $!"; + flock (FILE, 2); + chomp $sambasettings{'PDCOPTIONS'}; + $sambasettings{'PDCOPTIONS'} =~ s/\r\n/\n/gi; + $sambasettings{'PDCOPTIONS'} =~ s/^\n//gi; + $sambasettings{'PDCOPTIONS'} =~ s/^\r//gi; + $sambasettings{'PDCOPTIONS'} =~ s/^.\n//gi; + $sambasettings{'PDCOPTIONS'} =~ s/^.\r//gi; + print FILE <$errormessage\n"; - print " \n"; - &Header::closebox(); - } +if ($errormessage) + { + &Header::openbox('100%', 'left', $Lang::tr{'error messages'}); + print "$errormessage\n"; + print " \n"; + &Header::closebox(); + } ############################################################################################################################ ########################################## Aktivieren von Checkboxen und Dropdowns ######################################### +$checked{'SYSLOGONLY'}{'off'} = ''; +$checked{'SYSLOGONLY'}{'on'} = ''; +$checked{'SYSLOGONLY'}{$sambasettings{'SYSLOGONLY'}} = "checked='checked'"; $checked{'WINSSUPPORT'}{'off'} = ''; $checked{'WINSSUPPORT'}{'on'} = ''; $checked{'WINSSUPPORT'}{$sambasettings{'WINSSUPPORT'}} = "checked='checked'"; @@ -433,20 +396,19 @@ $selected{'SECURITY'}{$sambasettings{'SECURITY'}} = "selected='selected'"; ############################################################################################################################ ################################### Aufbau der HTML Seite fr globale Sambaeinstellungen ################################### -&Header::openbox('100%', 'center', 'Samba'); +&Header::openbox('100%', 'center', $Lang::tr{'samba'}); print < - +
+
END ; if ( $message ne "" ) { - print " - +
$message"; + print "
$message"; } print <
Alle Dienste
$Lang::tr{'all services'}
END ; @@ -454,40 +416,39 @@ END my $key = ''; foreach $key (sort keys %servicenames) { - print ""; my $shortname = $servicenames{$key}; my $status = &isrunning($shortname); - print "$status"; - print <
- - - -END -; + print "$status
"; } print < -
$key"; + print "
$key

- - - -
- - +
+ + + + +
+
+
- - - - - - + + + + + + + + + + - + END @@ -496,7 +457,7 @@ END if (&Header::blue_used()) { print < END @@ -506,7 +467,7 @@ END if (&Header::orange_used()) { print < END @@ -514,40 +475,49 @@ END } print < + - - + - - - - - - +END +; +# +print < + + + + + +END +; +if ($sambasettings{'WINSSUPPORT'} eq 'off') {print"";} + print < END ; if ($sambasettings{'SECURITY'} eq 'user') { print < - - - END ; @@ -557,26 +527,38 @@ if ($sambasettings{'SECURITY'} eq 'user' && $sambasettings{'DOMAINMASTER'} eq 'o { print < - + END +; + } + + if ( -e "/var/ipfire/cups/enable") + { + print < + + + + +END ; } print < +

Basisoptionen
Workgroup:
NetBIOS-Name:
Server-String:
Interfaces:on / +
$Lang::tr{'basic options'}
$Lang::tr{'workgroup'}
$Lang::tr{'netbios name'}
$Lang::tr{'dos charset'}
$Lang::tr{'unix charset'}
$Lang::tr{'display charset'}
$Lang::tr{'server string'}
$Lang::tr{'log level'}
Sys$Lang::tr{'log level'}
Syslog onlyon / + off
$Lang::tr{'interfaces'}on / off | - OpenVpn - $ovpnsettings{'DDEVICE'}
on / + OpenVpn - $ovpnsettings{'DOVPN_SUBNET'}
on / off | $Lang::tr{'green'} - $netsettings{'GREEN_DEV'}
on / +
on / off | $Lang::tr{'wireless'} - $netsettings{'BLUE_DEV'}
on / +
on / off | $Lang::tr{'dmz'} - $netsettings{'ORANGE_DEV'}
weitere
$Lang::tr{'more'}

Sicherheitsoptionen
Security:
$Lang::tr{'security options'}
$Lang::tr{'security'}
Map to guest:
$Lang::tr{'map to guest'}
Unix Passwort Sync:on / - off

Netzwerkoptionen
OS Level:
WINS-Server:
$Lang::tr{'unix password sync'}on / +# off

$Lang::tr{'network options'}
$Lang::tr{'os level'}
$Lang::tr{'socket options'}
$Lang::tr{'remote announce'}
$Lang::tr{'remote browse sync'}
$Lang::tr{'wins server'}
$Lang::tr{'wins support'}on / + off
WINS-Support:on / - off
Local Master:on / +
$Lang::tr{'local master'}on / off
Domain Master:on / +
$Lang::tr{'domain master'}on / off
Preferred Master:on / +
$Lang::tr{'prefered master'}on / off

PDC Optionen
$Lang::tr{'pdc options'}


$Lang::tr{'printing options'}
$Lang::tr{'load printer'}
$Lang::tr{'printing'}
$Lang::tr{'printcap name'}
- + + +

-
-
-
END ; @@ -584,11 +566,11 @@ END if ($sambasettings{'ACTION'} eq 'globalcaption') { print < - - - - + + +

Legende:
Einstellungen speichern
Auf default zurueck setzen
$Lang::tr{'caption'}
$Lang::tr{'save settings'}
$Lang::tr{'restore settings'}
END ; @@ -603,19 +585,19 @@ if ($sambasettings{'SECURITY'} eq 'user') { if ($sambasettings{'DOMAINMASTER'} eq 'off') { - &Header::openbox('100%', 'center', 'accounting - user Security none PDC mode'); + &Header::openbox('100%', 'center', $Lang::tr{'accounting user nonpdc'}); } else { - &Header::openbox('100%', 'center', 'accounting - user Security PDC mode'); + &Header::openbox('100%', 'center', $Lang::tr{'accounting user pdc'}); } print < + +
- - - + + END ; @@ -625,52 +607,56 @@ END } else { - print ""; + print ""; } - print ""; + print ""; system('/usr/local/bin/sambactrl readsmbpasswd'); - open(FILE, "; close(FILE); system('/usr/local/bin/sambactrl locksmbpasswd'); + + my $lines = 0; + foreach $userentry (sort @user) { @userline = split( /\:/, $userentry ); - print "";} else {print "";} + print " + END ; @@ -678,11 +664,11 @@ END else { print < - + END ; @@ -695,48 +681,63 @@ END else { print <
+
END ; } - print <
- - - -
+ if ($sambasettings{'DOMAINMASTER'} eq 'on' && $userline[0] =~ /\$/) + { + print <
+ + + + END ; + } + else + { + print <
+ + + + +END +; + } + $lines++; } print < +

Benutzerverwaltung
NamePasswort
$Lang::tr{'accounting'}
$Lang::tr{'username'}$Lang::tr{'password'}Typ$Lang::tr{'type'}StatusOptionen
$Lang::tr{'status'}$Lang::tr{'options'}
$userline[0]"; + if ($lines % 2) {print "
$userline[0]"; if ($userline[4] =~ /N/) { - print "nicht gesetzt"; + print "$Lang::tr{'not set'}"; } else { - print "gesetzt"; + print "$Lang::tr{'set'}"; } if ($sambasettings{'DOMAINMASTER'} eq 'off') { - print ""; + print ""; } else { if ($userline[0] =~ /\$/) { - print "PC"; + print "$Lang::tr{'pc'}"; } else { - print "User"; + print "$Lang::tr{'user'}"; } } if ($userline[4] =~ /D/) { print < -
+ $Lang::tr{'inactive'}
- +
+ $Lang::tr{'active'}
- + - +
- - + END ; if ($sambasettings{'DOMAINMASTER'} eq 'on') { print <
+
+ +

+
- - + END ; } print <
+
- -
END ; @@ -744,16 +745,17 @@ END if ($sambasettings{'ACTION'} eq 'usercaption') { print < - - - - - - - - - + + + + + + + + +

Legende:
Benutzer neu anlegen
Client Account neu anlegen
Benutzer aktivieren
Benutzer deaktivieren
Einstellungen speichern
Passwort wechseln
Benutzer loeschen
$Lang::tr{'caption'}
$Lang::tr{'add user'}
$Lang::tr{'pc add'}
$Lang::tr{'delete user'}
$Lang::tr{'delete pc'}
$Lang::tr{'activate user'}
$Lang::tr{'deactivate user'}
$Lang::tr{'change passwords'}
$Lang::tr{'save config'}
END ; @@ -764,16 +766,16 @@ END my $username = "$sambasettings{'NAME'}"; my $password = 'samba'; print < -
+
+ - - - - + + + +

Passwort wechseln
Benutzername
Passwort
$Lang::tr{'change passwords'}
$Lang::tr{'username'}
$Lang::tr{'password'}
-
+ END ; } @@ -787,18 +789,18 @@ END chomp $password; $password=~s/\s//g; print < -
+
+ - - - - - - + + + + + +

Benutzer neu anlegen
Benutzername
Passwort
Unix Gruppe
Unix Shell
$Lang::tr{'add user'}
$Lang::tr{'username'}
$Lang::tr{'password'}
$Lang::tr{'unix group'}
$Lang::tr{'unix shell'}
-
+ END ; } @@ -809,17 +811,17 @@ END chomp $pcname; $pcname=~s/\s//g; print < -
+
+ - - - - - + + + + +

Client Account neu anlegen
Clientname
Unix Gruppe
Unix Shell
$Lang::tr{'pc add'}
$Lang::tr{'client'}
$Lang::tr{'unix group'}
$Lang::tr{'unix shell'}
-
+ END ; } @@ -829,52 +831,62 @@ END ############################################################################################################################ ############################################### Verwalten von Freigaben #################################################### - -&Header::openbox('100%', 'center', 'Shares'); + +&Header::openbox('100%', 'center', $Lang::tr{'shares'}); + +my %shares = config("${General::swroot}/samba/shares"); + print < +
+
- - + END ; -foreach $shareentry (sort @Shares) +my @Shares = keys(%shares); +my $lines = 0; + +foreach my $shareentry (sort @Shares) { + chomp $shareentry; + if ($lines % 2) {print "";} else {print "";} print < - + - + + END ; + $lines++; } print < +

Shareverwaltung -
Names des SharesOptionen
$Lang::tr{'manage shares'} +
$Lang::tr{'sharename'}$Lang::tr{'options'}
$shareentry
+
$shareentry - +
+
- -
- - + - - +

- - +
+ + +
+ +
- - +
+ +
- - -
END ; @@ -882,14 +894,14 @@ END if ($sambasettings{'ACTION'} eq 'sharecaption') { print < - - - - - - - + + + + + +

Legende:
Share neu anlegen
Share bearbeiten
Einstellungen speichern
Shares zurueck setzen
Share loeschen
$Lang::tr{'caption'}
$Lang::tr{'add share'}
$Lang::tr{'edit share'}
$Lang::tr{'save config'}
$Lang::tr{'reset shares'}
$Lang::tr{'delete share'}
END ; @@ -898,22 +910,18 @@ END if ($sambasettings{'ACTION'} eq 'shareadd' || $sambasettings{'ACTION'} eq 'optioncaption' ) { print < +
- - + - - + +

neuen Share anlegen
$Lang::tr{'add share'}
Anzeige der Optionen fuer Shares
- - -
$Lang::tr{'show share options'} +
+
- - +

- -
+
END ; @@ -921,105 +929,174 @@ END if ($sambasettings{'ACTION'} eq 'sharechange' || $sambasettings{'ACTION'} eq 'optioncaption2' ) { - my $sharename = "$sambasettings{'NAME'}"; - chomp $sharename; - $sharename=~s/\s//g; - - for(my $i = 0; $i <= $#Shares; $i++) - { - chomp $Shares[$i]; - $Shares[$i]=~s/\s//g; - if ( "$Shares[$i]" eq "$sharename" ) - { - my $Zeilenbegin = $Zeilen[$i+1]-2; - my $Zeilenende = $Zeilen[$i+1]-$Zeilen[$i]; - if ( $Zeilen[$i] eq $Zeilen[$#Shares] ) - {$Zeilenende = $EOF-$Zeilen[$#Shares]+1;$Zeilenbegin = $EOF-$Zeilen[$#Shares]; $shareoption = qx(tail -$Zeilenende $sharefile | head -$Zeilenbegin);} - else - {$shareoption = qx(head -$Zeilenbegin $sharefile | tail -$Zeilenende);} - } - } + my $shareoption = $shares{$sambasettings{'NAME'}}; print < +
- - + - - + +

Share bearbeiten
$Lang::tr{'edit share'}
Anzeige der Optionen fuer Shares
- - -
$Lang::tr{'show share options'}
+
- - +

-
+ +
END ; } -if ($sambasettings{'ACTION'} eq 'optioncaption' || $sambasettings{'ACTION'} eq 'optioncaption2') +if ($sambasettings{'ACTION'} eq 'sharesresetyes') + { + system('/usr/local/bin/sambactrl smbsharesreset'); + my $shares = config("${General::swroot}/samba/shares"); + system("/usr/local/bin/sambactrl smbreload"); + } +if ($sambasettings{'ACTION'} eq 'smbshareadd') + { + $shares{'xvx'}= "$sambasettings{'SHAREOPTION'}"; + save("shares"); + my $shares = config("${General::swroot}/samba/shares"); + } +if ($sambasettings{'ACTION'} eq 'smbsharedel') + { + delete $shares{$sambasettings{'NAME'}}; + save("shares"); + my %shares = config("${General::swroot}/samba/shares"); + } +if ($sambasettings{'ACTION'} eq 'smbsharechange') + { + $shares{$sambasettings{'NAME'}} = $sambasettings{'SHAREOPTION'}; + save("shares"); + my %shares = config("${General::swroot}/samba/shares"); + } + +&Header::closebox(); + +############################################################################################################################ +################################################ Verwalten von Druckern #################################################### + +my %printer = config("${General::swroot}/samba/printer"); + +if ( -e "/var/ipfire/cups/enable") +{ +&Header::openbox('100%', 'center', $Lang::tr{'printer'}); + +my @Printers = keys(%printer); +print < +
+ + +END +; +foreach my $printerentry (sort @Printers) + { + chomp $printerentry; + print < + + +END +; + } +print < +
+
$Lang::tr{'manage printers'} +
$Lang::tr{'printername'}$Lang::tr{'options'}
$printerentry
+ + + +
+ + + +
+ + + + +
+ + +
+ + +
+ + +
+END +; + +if ($sambasettings{'ACTION'} eq 'printeradd' || $sambasettings{'ACTION'} eq 'printercaption' ) { print < - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +

Legende:
OptionBedeutung / Beispiel
commentKommentar
comment = Mein neues Share

pathPfad zum Verzeichnis
path = /share/neu

writeableVerzeichnis schreibbar
writeable = yes

browseablesichtbar in Verzeichnisliste
browsable = yes

userBesitzer der Freigabe
user = samba

valid usersListe der Zugriffsberechtigten
valid users = samba, user1

write listListe der Schreibberechtigten
write list = samba

hosts allownur die angegebenen Hosts drfen das Share benutzen
hosts allow = localhost 192.168.1.1 192.168.2.0/24

hosts denyjede Maschine ausser diesen darf das Share benutzen
hosts deny = 192.168.1.2 192.168.3.0/24

read listListe der nur Leseberechtigten
read list = user1

admin usersListe der Benutzer mit SuperUser Rechten
admin users = user1

invalid usersListe der Benutzer denen der Zugriff verweigert wird
invalid users = user2

force userStandartbenutzer fuer alle Dateien
force user = samba

directory maskUNIX Verzeichnisberchtigung beim Erzeugen
directory mask = 0777

create maskUNIX Dateiberchtigung beim Erzeugen
create mask = 0777

guest okAnnonymer Zugriff
guest ok = yes
$Lang::tr{'add printer'}
$Lang::tr{'show share options'} +
+
+ + +
+
+ END ; -} + } + +if ($sambasettings{'ACTION'} eq 'printerchange' || $sambasettings{'ACTION'} eq 'printercaption2' ) + { + my $printeroption = $printer{$sambasettings{'NAME'}}; + print < + + + + + +
$Lang::tr{'edit printer'}
$Lang::tr{'show share options'}
+
+ + +
+ +
+END +; + } + +if ($sambasettings{'ACTION'} eq 'smbprinteradd') + { + $printer{'xvx'}= "$sambasettings{'PRINTEROPTION'}"; + save("printer"); + my %printer = config("${General::swroot}/samba/printer"); + } + +if ($sambasettings{'ACTION'} eq 'smbprinterdel') + { + delete $printer{$sambasettings{'NAME'}}; + save("printer"); + my %printer = config("${General::swroot}/samba/printer"); + } + +if ($sambasettings{'ACTION'} eq 'smbprinterchange') + { + $printer{$sambasettings{'NAME'}} = $sambasettings{'PRINTEROPTION'}; + save("printer"); + my %printer = config("${General::swroot}/samba/printer"); + } &Header::closebox(); +} ############################################################################################################################ ############################################### Anzeige des Sambastatus #################################################### @@ -1027,21 +1104,120 @@ END &Header::openbox('100%', 'center', 'Status'); print < +
- - - + +

Samba Status
$Status
$Lang::tr{'samba status'}
$Status
END ; +&Header::closebox(); + +############################################################################################################################ +############################################### Anzeige der Sambalogs ###################################################### + +if ($sambasettings{'ACTION'} eq 'showlog') +{ +$Log = qx(tail -n $sambasettings{'LOGLINES'} /var/log/samba/$sambasettings{'LOG'}); +$Log=~s/\n/
/g; +} + +&Header::openbox('100%', 'center', $Lang::tr{'log'}); + +print < +
+
+ + + + + + + + + +
$Lang::tr{'log view'}

$Lang::tr{'show last x lines'}

$Log

$sambasettings{'LOG'}
+
+END +; &Header::closebox(); &Header::closebigbox(); &Header::closepage(); ############################################################################################################################ -############################################ Subfunktion fr Sambadienste ################################################## +############################################ Subfunktion fr Sambadienste ################################################### + +sub config +{ +my $file = shift; +my @allarray = `grep -n '^\\[' $file`; +my @linesarray = (); +my @namearray = (); +my %hash = (); +my $options = (); +my $EOF = qx(cat $file | wc -l); +foreach my $allarrayentry (@allarray) + { + my @allarrayline = split( /\:/, $allarrayentry ); + push(@linesarray,$allarrayline[0]);$allarrayline[1]=~s/\[//g;$allarrayline[1]=~s/\]//g;push(@namearray,$allarrayline[1]); + } + for(my $i = 0; $i <= $#namearray; $i++) + { + chomp $namearray[$i]; + $namearray[$i]=~s/\[//g;$namearray[$i]=~s/\]//g; + if ( $i eq $#namearray ) + { + my $lineend = $EOF-$linesarray[$i]+1; + $options=qx(tail -$lineend $file); + } + else + { + my $linestart = $EOF-$linesarray[$i]+1; + my $lineend = $linesarray[$i+1]-$linesarray[$i]; + $options=qx(tail -$linestart $file | head -$lineend); + } + $hash{$namearray[$i]} = "$options"; + #print"
$namearray[$i]\n$options\n
"; # enable only for debuging + } +return(%hash); +} + +sub save +{ +my $smb = shift; +open (FILE, ">${General::swroot}/samba/$smb") or die "Can't $smb settings $!"; +flock (FILE, 2); + +if ( $smb eq 'printer') + {while (my ($name, $option) = each %printer){chomp $option;$option =~ s/\r\n/\n/gi;$option =~ s/^\n//gi;$option =~ s/^\r//gi;$option =~ s/^.\n//gi;$option =~ s/^.\r//gi;print FILE "$option\n";}} + +if ( $smb eq 'shares') + {while (my ($name, $option) = each %shares){chomp $option;$option =~ s/\r\n/\n/gi;$option =~ s/^\n//gi;$option =~ s/^\r//gi;$option =~ s/^.\n//gi;$option =~ s/^.\r//gi;print FILE "$option\n";} } + +close FILE; + +if ( -e "/var/ipfire/cups/enable") + { + if ( $sambasettings{'SECURITY'} eq 'User' && $sambasettings{'DOMAINMASTER'} eq 'true' ){system("/usr/local/bin/sambactrl smbsafeconfpdccups");} + else {system("/usr/local/bin/sambactrl smbsafeconfcups");} + } +else + { + if ( $sambasettings{'SECURITY'} eq 'User' && $sambasettings{'DOMAINMASTER'} eq 'true' ){system("/usr/local/bin/sambactrl smbsafeconfpdc");} + else{system("/usr/local/bin/sambactrl smbsafeconf");} + } + +system("/usr/local/bin/sambactrl smbreload"); +refreshpage(); +} sub isrunning { @@ -1075,4 +1251,4 @@ sub isrunning } } return $status; - } \ No newline at end of file + }