X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=html%2Fcgi-bin%2Fsamba.cgi;h=69cb9fe25872fabe0cb57690ccb3df75b806d788;hb=5b2a12ff8ad39591a5a57a0f2122edc2934f5ec3;hp=d70f87ab9b555dcd7ee4692feed26885ef65af57;hpb=97de2cae62f9d8bf61681561211fa8170d0808e2;p=people%2Fpmueller%2Fipfire-2.x.git diff --git a/html/cgi-bin/samba.cgi b/html/cgi-bin/samba.cgi index d70f87ab9b..69cb9fe258 100644 --- a/html/cgi-bin/samba.cgi +++ b/html/cgi-bin/samba.cgi @@ -5,7 +5,6 @@ # This code is distributed under the terms of the GPL # # (c) The IPFire Team -# use strict; # enable only the following on debugging purpose @@ -17,315 +16,1183 @@ require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; my %sambasettings = (); +my %cgisettings = (); my %checked = (); my %netsettings = (); my %ovpnsettings = (); +my %color = (); +my %mainsettings = (); my $message = ""; my $errormessage = ""; -my $shareentry = ""; -my @shares = (); -my @shareline = (); -my @proto = (); + +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 $userfile = "${General::swroot}/samba/private/smbpasswd"; my %selected= () ; -my $sharefile = "/var/ipfire/samba/shares"; + +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(); -$sambasettings{'ENABLED'} = 'off'; -$sambasettings{'EDIT'} = 'no'; -$sambasettings{'VALID'} = 'yes'; +############################################################################################################################ +#################################### Initialisierung von Samba Variablen fr global Settings ############################### + $sambasettings{'WORKGRP'} = 'homeip.net'; -$sambasettings{'NETBIOSNAME'} = 'IPFIRE'; -$sambasettings{'SRVSTRING'} = 'Samba Server %v running on IPFire 2.0'; -$sambasettings{'INTERFACES'} = 'eth0'; +$sambasettings{'NETBIOSNAME'} = 'IPFire'; +$sambasettings{'SRVSTRING'} = 'Samba running on IPFire 2.0'; +$sambasettings{'INTERFACES'} = ''; $sambasettings{'SECURITY'} = 'share'; -$sambasettings{'OSLEVEL'} = '20'; -$sambasettings{'PDC'} = 'off'; +$sambasettings{'OSLEVEL'} = '33'; $sambasettings{'GREEN'} = 'on'; $sambasettings{'BLUE'} = 'off'; $sambasettings{'ORANGE'} = 'off'; $sambasettings{'VPN'} = 'off'; -$sambasettings{'WINSSERV'} = ''; -$sambasettings{'WINS'} = 'off'; +$sambasettings{'WINSSRV'} = ''; +$sambasettings{'WINSSUPPORT'} = 'on'; +$sambasettings{'REMOTEANNOUNCE'} = ''; +$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{'SOCKETOPTIONS'} = 'TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 SO_KEEPALIVE'; ### Values that have to be initialized $sambasettings{'ACTION'} = ''; +### Samba CUPS Variablen +$sambasettings{'LOADPRINTERS'} = 'Yes'; +$sambasettings{'PRINTING'} = 'cups'; +$sambasettings{'PRINTCAPNAME'} = 'cups'; +my $LOGLINES = '50'; + +################################################## Samba PDC Variablen ##################################################### + +$sambasettings{'LOCALMASTER'} = 'off'; +$sambasettings{'DOMAINMASTER'} = 'off'; +$sambasettings{'PREFERREDMASTER'} = 'off'; +my $PDCOPTIONS = `cat ${General::swroot}/samba/pdc`; + + +############################################################################################################################ &General::readhash("${General::swroot}/samba/settings", \%sambasettings); &Header::getcgihash(\%sambasettings); +sub refreshpage{&Header::openbox( 'Waiting', 1, "" );} + &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'}");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{'PASSWORDSYNC'} = 'off'; + $sambasettings{'OTHERINTERFACES'} = '127.0.0.1'; + $sambasettings{'GUESTACCOUNT'} = 'samba'; + $sambasettings{'MAPTOGUEST'} = 'Never'; + $sambasettings{'LOGLEVEL'} = '3 passdb:5 auth:5 winbind:2'; +### 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(); + } + +############################################################################################################################ +################################################ Sicherheitsabfrage für den Reset ########################################## + +if ($sambasettings{'ACTION'} eq 'globalreset') + { + print < + + + + +
$Lang::tr{'resetglobals'} +
+ $Lang::tr{'yes'} +
+ $Lang::tr{'no'} +
+END +; +} + +if ($sambasettings{'ACTION'} eq 'sharesreset') + { + print < + + + + +
$Lang::tr{'resetshares'} +
+ $Lang::tr{'yes'} +
+ $Lang::tr{'no'} +
+END +; + } + ############################################################################################################################ +########################################### Samba Benutzer oder PC l�chen ################################################# + +if ($sambasettings{'ACTION'} eq 'userdelete'){system("/usr/local/bin/sambactrl smbuserdelete $sambasettings{'NAME'}");refreshpage();} + +############################################################################################################################ +##################################### Umsetzen der Werte von Checkboxen und Dropdowns ###################################### if ($sambasettings{'ACTION'} eq $Lang::tr{'save'}) { - &General::writehash("${General::swroot}/samba/settings", \%sambasettings); -} +$sambasettings{'INTERFACES'} = ''; +if ($sambasettings{'GREEN'} eq 'on'){ $sambasettings{'INTERFACES'} .= " $netsettings{'GREEN_DEV'}";} +if ($sambasettings{'BLUE'} eq 'on'){ $sambasettings{'INTERFACES'} .= " $netsettings{'BLUE_DEV'}";} +if ($sambasettings{'ORANGE'} eq 'on'){ $sambasettings{'INTERFACES'} .= " $netsettings{'ORANGE_DEV'}";} +if ($sambasettings{'VPN'} eq 'on'){ $sambasettings{'INTERFACES'} .= " $ovpnsettings{'DDEVICE'}";} +if ($sambasettings{'OTHERINTERFACES'} ne ''){ $sambasettings{'INTERFACES'} .= " $sambasettings{'OTHERINTERFACES'}";} -&General::readhash("${General::swroot}/samba/settings", \%sambasettings); +############################################################################################################################ +##################################### Schreiben settings und bersetzen fr smb.conf ####################################### + +delete $sambasettings{'__CGI__'};delete $sambasettings{'x'};delete $sambasettings{'y'}; +&General::writehash("${General::swroot}/samba/settings", \%sambasettings); + +if ($sambasettings{'PASSWORDSYNC'} eq 'on'){ $sambasettings{'PASSWORDSYNC'} = "true";} else { $sambasettings{'PASSWORDSYNC'} = "false";} +if ($sambasettings{'WINSSUPPORT'} eq 'on'){ $sambasettings{'WINSSUPPORT'} = "true";$sambasettings{'WINSSRV'} = "";} else { $sambasettings{'WINSSUPPORT'} = "false";} +if ($sambasettings{'LOCALMASTER'} eq 'on'){ $sambasettings{'LOCALMASTER'} = "true";} else { $sambasettings{'LOCALMASTER'} = "false";} +if ($sambasettings{'DOMAINMASTER'} eq 'on'){ $sambasettings{'DOMAINMASTER'} = "true";} else { $sambasettings{'DOMAINMASTER'} = "false";} +if ($sambasettings{'PREFERREDMASTER'} eq 'on'){ $sambasettings{'PREFERREDMASTER'} = "true";} else { $sambasettings{'PREFERREDMASTER'} = "false";} + +############################################################################################################################ +############################################# Schreiben der Samba globals ################################################## + + open (FILE, ">${General::swroot}/samba/global") or die "Can't save the global 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(); +system("/usr/local/bin/sambactrl smbreload");refreshpage(); } + &General::readhash("${General::swroot}/samba/settings", \%sambasettings); + -$checked{'PDC'}{'on'} = ''; -$checked{'PDC'}{'off'} = ''; -$checked{'PDC'}{"$sambasettings{'PDC'}"} = 'checked'; -$checked{'WINS'}{'on'} = ''; -$checked{'WINS'}{'off'} = ''; -$checked{'WINS'}{"$sambasettings{'WINS'}"} = 'checked'; -$checked{'GREEN'}{'on'} = ''; +if ($errormessage) + { + &Header::openbox('100%', 'left', $Lang::tr{'error messages'}); + print "$errormessage\n"; + print " \n"; + &Header::closebox(); + } + +############################################################################################################################ +########################################## Aktivieren von Checkboxen und Dropdowns ######################################### + +$checked{'WINSSUPPORT'}{'off'} = ''; +$checked{'WINSSUPPORT'}{'on'} = ''; +$checked{'WINSSUPPORT'}{$sambasettings{'WINSSUPPORT'}} = "checked='checked'"; +$checked{'PASSWORDSYNC'}{'off'} = ''; +$checked{'PASSWORDSYNC'}{'on'} = ''; +$checked{'PASSWORDSYNC'}{$sambasettings{'PASSWORDSYNC'}} = "checked='checked'"; +$checked{'LOCALMASTER'}{'off'} = ''; +$checked{'LOCALMASTER'}{'on'} = ''; +$checked{'LOCALMASTER'}{$sambasettings{'LOCALMASTER'}} = "checked='checked'"; +$checked{'DOMAINMASTER'}{'off'} = ''; +$checked{'DOMAINMASTER'}{'on'} = ''; +$checked{'DOMAINMASTER'}{$sambasettings{'DOMAINMASTER'}} = "checked='checked'"; +$checked{'PREFERREDMASTER'}{'off'} = ''; +$checked{'PREFERREDMASTER'}{'on'} = ''; +$checked{'PREFERREDMASTER'}{$sambasettings{'PREFERREDMASTER'}} = "checked='checked'"; $checked{'GREEN'}{'off'} = ''; -$checked{'GREEN'}{"$sambasettings{'GREEN'}"} = 'checked'; -$checked{'BLUE'}{'on'} = ''; +$checked{'GREEN'}{'on'} = ''; +$checked{'GREEN'}{$sambasettings{'GREEN'}} = "checked='checked'"; $checked{'BLUE'}{'off'} = ''; -$checked{'BLUE'}{"$sambasettings{'BLUE'}"} = 'checked'; -$checked{'ORANGE'}{'on'} = ''; +$checked{'BLUE'}{'on'} = ''; +$checked{'BLUE'}{$sambasettings{'BLUE'}} = "checked='checked'"; $checked{'ORANGE'}{'off'} = ''; -$checked{'ORANGE'}{"$sambasettings{'ORANGE'}"} = 'checked'; -$checked{'VPN'}{'on'} = ''; +$checked{'ORANGE'}{'on'} = ''; +$checked{'ORANGE'}{$sambasettings{'ORANGE'}} = "checked='checked'"; $checked{'VPN'}{'off'} = ''; -$checked{'VPN'}{"$sambasettings{'VPN'}"} = 'checked'; +$checked{'VPN'}{'on'} = ''; +$checked{'VPN'}{$sambasettings{'VPN'}} = "checked='checked'"; -$selected{'MAPTOGUEST'}{'Never'} = ''; -$selected{'MAPTOGUEST'}{'Bad User'} = ''; -$selected{'MAPTOGUEST'}{'Bad Password'} = ''; $selected{'MAPTOGUEST'}{$sambasettings{'MAPTOGUEST'}} = "selected='selected'"; -$selected{'SECURITY'}{'share'} = ''; -$selected{'SECURITY'}{'user'} = ''; -$selected{'SECURITY'}{'server'} = ''; -$selected{'SECURITY'}{'domain'} = ''; $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"; - } - - my $lines = 0; - my $key = ''; - foreach $key (sort keys %servicenames) - { - if ($lines % 2) { - print "\n"; } - else { - print "\n"; } - print "$key\n"; - my $shortname = $servicenames{$key}; - my $status = &isrunning($shortname); - print "$status\n"; - print <
- - -
-END -; - print "\n"; - $lines++; - } - print < - Alle Dienste: - - - - - -
-
- -
-
-
Basisoptionen -
Workgroup: -
NetBIOS-Name: -
Server-String: -
Interfaces: OpenVpn - $ovpnsettings{'DDEVICE'} -
$Lang::tr{'green'} - $netsettings{'GREEN_DEV'} -END -; - if (&Header::blue_used()){ - print < $Lang::tr{'wireless'} - $netsettings{'BLUE_DEV'} -END -; - } - if (&Header::orange_used()){ - print < $Lang::tr{'dmz'} - $netsettings{'ORANGE_DEV'} -END -; - } - print < -
-
-
Sicherheitsoptionen -
Security: - -
-
-
Browsingoptionen -
OS Level: -
Primary Domain Controller:on / - off - -
-
-
WINS-Optionen -
WINS-Server: -
WINS-Support:on / - off - -
-
-
+
+ END ; -&Header::closebox(); +if ( $message ne "" ) + { + print " +
$message"; + } + +print <$Lang::tr{'all services'}
+END +; + +my $key = ''; +foreach $key (sort keys %servicenames) + { + print ""; + my $shortname = $servicenames{$key}; + my $status = &isrunning($shortname); + print "$status"; + } + +print < +
+
$key
+ + + +
+
+
+
+ + + + + + + + +END +; + +if (&Header::blue_used()) + { + print < +END +; + } + +if (&Header::orange_used()) + { + print < +END +; + } -&Header::openbox('100%', 'center', 'Shares'); +print < + + + + + + + + + + +END +; +if ($sambasettings{'WINSSUPPORT'} eq 'off') {print"";} + print < +END +; + +if ($sambasettings{'SECURITY'} eq 'user') + { + print < + + +END +; + } + +if ($sambasettings{'SECURITY'} eq 'user' && $sambasettings{'DOMAINMASTER'} eq 'on') + { + print < + + + +END +; + } + + if ( -e "/var/ipfire/cups/enable") + { + print < + + + + +END +; + } print < -
$Lang::tr{'basic options'}
$Lang::tr{'workgroup'}
$Lang::tr{'netbios name'}
$Lang::tr{'server string'}
$Lang::tr{'log level'}
$Lang::tr{'interfaces'}on / + off | + OpenVpn - $ovpnsettings{'DDEVICE'}
on / + off | + $Lang::tr{'green'} - $netsettings{'GREEN_DEV'}
on / + off | + $Lang::tr{'wireless'} - $netsettings{'BLUE_DEV'}
on / + off | + $Lang::tr{'dmz'} - $netsettings{'ORANGE_DEV'}
$Lang::tr{'more'}

$Lang::tr{'security options'}
$Lang::tr{'security'}
$Lang::tr{'map to guest'}
$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{'wins server'}
$Lang::tr{'wins support'}on / + off
$Lang::tr{'local master'}on / + off
$Lang::tr{'domain master'}on / + off
$Lang::tr{'prefered master'}on / + off

$Lang::tr{'pdc options'}


$Lang::tr{'printing options'}
$Lang::tr{'load printer'}
$Lang::tr{'printing'}
$Lang::tr{'printcap name'}
-
Name der FreigabePfadOptionen -END -; - open( FILE, "< $sharefile" ) or die "Unable to read $sharefile"; - @shares = ; - close FILE; - foreach $shareentry (sort @shares) - { - @shareline = split( /\;/, $shareentry ); - print <$shareline[0] - $shareline[2] - - -END -; - if ($shareline[1] eq 'enabled') { - print < - - - - -END -; - } elsif ($shareline[1] eq 'disabled') { - print <
- - - - -END -; - } - print <
- - - - -
- - - -
-
-END -; - } - print <
Legende:   Freigabe bearbeiten |  Freigabe loeschen   -
+ +
+ + + + +
+ +
+ +
+ +
END ; +if ($sambasettings{'ACTION'} eq 'globalcaption') + { + print < + + + + +
$Lang::tr{'caption'}
$Lang::tr{'save settings'}
$Lang::tr{'restore settings'}
+END +; + } + &Header::closebox(); +############################################################################################################################ +########################################## Benutzerverwaltung fr Usersecurity ############################################# if ($sambasettings{'SECURITY'} eq 'user') + { + if ($sambasettings{'DOMAINMASTER'} eq 'off') + { + &Header::openbox('100%', 'center', $Lang::tr{'accounting user nonpdc'}); + } + else + { + &Header::openbox('100%', 'center', $Lang::tr{'accounting user pdc'}); + } + print < + + + + +END +; + + if ($sambasettings{'DOMAINMASTER'} eq 'off') + { + print ""; + } + else + { + print ""; + } + + print ""; + system('/usr/local/bin/sambactrl readsmbpasswd'); + open(FILE, "<${General::swroot}/samba/private/smbpasswd") or die "Can't read user file: $!"; + @user = ; + close(FILE); + system('/usr/local/bin/sambactrl locksmbpasswd'); + foreach $userentry (sort @user) + { + @userline = split( /\:/, $userentry ); + print " +END +; + } + else + { + print < + +END +; + } + + if ($userline[0] =~ /\$/) + { + print ""; + } + else + { + print <
+ + + + +END +; + } + + if ($sambasettings{'DOMAINMASTER'} eq 'on' && $userline[0] =~ /\$/) + { + print <
+ + + +
+END +; + } + else + { + print <
+ + + + +END +; + } + } + print < +
+
$Lang::tr{'accounting'}
$Lang::tr{'username'}$Lang::tr{'password'}$Lang::tr{'type'}$Lang::tr{'status'}$Lang::tr{'options'}
$userline[0]"; + if ($userline[4] =~ /N/) + { + print "$Lang::tr{'not set'}"; + } + else + { + print "$Lang::tr{'set'}"; + } + + if ($sambasettings{'DOMAINMASTER'} eq 'off') + { + print ""; + } + else + { + if ($userline[0] =~ /\$/) + { + print "$Lang::tr{'pc'}"; + } + else + { + print "$Lang::tr{'user'}"; + } + } + + if ($userline[4] =~ /D/) + { + print < +
+ + + +
+ + + +
+ +END +; + + if ($sambasettings{'DOMAINMASTER'} eq 'on') + { + print <
+ + +END +; + } + print <
+ + +
+
+ +
+END +; + + if ($sambasettings{'ACTION'} eq 'usercaption') + { + print < + + + + + + + + + + +
$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 +; + } + + if ($sambasettings{'ACTION'} eq 'userchangepw') + { + my $username = "$sambasettings{'NAME'}"; + my $password = 'samba'; + print < +
+ + + + + +
$Lang::tr{'change passwords'}
$Lang::tr{'username'}
$Lang::tr{'password'}
+
+
+END +; + } + + if ($sambasettings{'ACTION'} eq 'useradd') + { + my $username = "user"; + my $password = "samba"; + chomp $username; + $username=~s/\s//g; + chomp $password; + $password=~s/\s//g; + print < +
+ + + + + + + +
$Lang::tr{'add user'}
$Lang::tr{'username'}
$Lang::tr{'password'}
$Lang::tr{'unix group'}
$Lang::tr{'unix shell'}
+
+
+END +; + } + + if ($sambasettings{'ACTION'} eq 'pcadd') + { + my $pcname = "client\$"; + chomp $pcname; + $pcname=~s/\s//g; + print < +
+ + + + + + +
$Lang::tr{'pc add'}
$Lang::tr{'client'}
$Lang::tr{'unix group'}
$Lang::tr{'unix shell'}
+
+
+END +; + } + +&Header::closebox(); +} + +############################################################################################################################ +############################################### Verwalten von Freigaben #################################################### + +&Header::openbox('100%', 'center', $Lang::tr{'shares'}); + +my %shares = config("${General::swroot}/samba/shares"); + + +print < + + +END +; + +my @Shares = keys(%shares); + +foreach my $shareentry (sort @Shares) + { + chomp $shareentry; + print < + + +END +; + } + +print < +
+
$Lang::tr{'manage shares'} +
$Lang::tr{'sharename'}$Lang::tr{'options'}
$shareentry
+ + + +
+ + + +
+ + + + +
+ + +
+ + +
+ + +
+END +; + +if ($sambasettings{'ACTION'} eq 'sharecaption') + { + print < + + + + + + + +
$Lang::tr{'caption'}
$Lang::tr{'add share'}
$Lang::tr{'edit share'}
$Lang::tr{'save config'}
$Lang::tr{'reset shares'}
$Lang::tr{'delete share'}
+END +; + } + +if ($sambasettings{'ACTION'} eq 'shareadd' || $sambasettings{'ACTION'} eq 'optioncaption' ) + { + print < + + + + + +
$Lang::tr{'add share'}
$Lang::tr{'show share options'} +
+
+ + +
+
+END +; + } + +if ($sambasettings{'ACTION'} eq 'sharechange' || $sambasettings{'ACTION'} eq 'optioncaption2' ) + { + my $shareoption = $shares{$sambasettings{'NAME'}}; + print < + + + + + +
$Lang::tr{'edit share'}
$Lang::tr{'show share options'}
+
+ + +
+ +
+END +; + } + +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', 'User'); +&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
+ + + +
+ + + +
-
-
Benutzerverwaltung -
+ +
+ + + + + +
+ + +
+ + +
+ + +
+END +; + +if ($sambasettings{'ACTION'} eq 'printeradd' || $sambasettings{'ACTION'} eq 'printercaption' ) + { + print < + + + + + +
$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 #################################################### + +&Header::openbox('100%', 'center', 'Status'); +print < + + + +
$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 ################################################### -sub isrunning +sub config { - my $cmd = $_[0]; - my $status = "$Lang::tr{'stopped'}"; - my $pid = ''; - my $testcmd = ''; - my $exename; - - $cmd =~ /(^[a-z]+)/; - $exename = $1; - - if (open(FILE, "/var/run/${cmd}.pid")) - { - $pid = ; chomp $pid; - close FILE; - if (open(FILE, "/proc/${pid}/status")) - { - while () - { - if (/^Name:\W+(.*)/) { - $testcmd = $1; } - } - close FILE; - if ($testcmd =~ /$exename/) - { - $status = "$Lang::tr{'running'}"; - } - } - } - - return $status; +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 + { + my $cmd = $_[0]; + my $status = "$Lang::tr{'stopped'}"; + my $pid = ''; + my $testcmd = ''; + my $exename; + + $cmd =~ /(^[a-z]+)/; + $exename = $1; + + if (open(FILE, "/var/run/${cmd}.pid")) + { + $pid = ; chomp $pid; + close FILE; + if (open(FILE, "/proc/${pid}/status")) + { + while () + { + if (/^Name:\W+(.*)/) + { + $testcmd = $1; + } + } + close FILE; + if ($testcmd =~ /$exename/) + { + $status = "$Lang::tr{'running'}"; + } + } + } + return $status; + }