]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - html/cgi-bin/samba.cgi
samba: Use the same delete icon as everywhere else
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / samba.cgi
1 #!/usr/bin/perl
2 ###############################################################################
3 # #
4 # IPFire.org - A linux based firewall #
5 # Copyright (C) 2005-2013 IPFire Team <info@ipfire.org> #
6 # #
7 # This program is free software: you can redistribute it and/or modify #
8 # it under the terms of the GNU General Public License as published by #
9 # the Free Software Foundation, either version 3 of the License, or #
10 # (at your option) any later version. #
11 # #
12 # This program is distributed in the hope that it will be useful, #
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of #
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15 # GNU General Public License for more details. #
16 # #
17 # You should have received a copy of the GNU General Public License #
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. #
19 # #
20 ###############################################################################
21
22 use strict;
23 # enable only the following on debugging purpose
24 #use warnings;
25 #use CGI::Carp 'fatalsToBrowser';
26
27 require '/var/ipfire/general-functions.pl';
28 require "${General::swroot}/lang.pl";
29 require "${General::swroot}/header.pl";
30
31 my %sambasettings = ();
32 my %cgisettings = ();
33 my %checked = ();
34 my %netsettings = ();
35 my %color = ();
36 my %mainsettings = ();
37 my $message = "";
38 my $errormessage = "";
39
40 my $userentry = "";
41 my @user = ();
42 my @userline = ();
43 my $userfile = "${General::swroot}/samba/private/smbpasswd";
44 my %selected= () ;
45
46 my $defaultoption= "[My Share]\npath = \ncomment = Share - Public Access\nbrowseable = yes\nwriteable = yes\ncreate mask = 0644\ndirectory mask = 0755\npublic = yes\nforce user = samba";
47 my %shares = ();
48
49 &General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
50 &General::readhash("${General::swroot}/main/settings", \%mainsettings);
51 &General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color);
52
53 ############################################################################################################################
54 ############################################# Samba Dienste fr Statusberprfung ##########################################
55
56 &Header::showhttpheaders();
57
58 ############################################################################################################################
59 #################################### Initialisierung von Samba Variablen fr global Settings ###############################
60
61 $sambasettings{'WORKGRP'} = uc($mainsettings{'DOMAINNAME'});
62 $sambasettings{'INTERFACES'} = '';
63 $sambasettings{'ROLE'} = 'standalone';
64 $sambasettings{'REMOTEANNOUNCE'} = '';
65 $sambasettings{'REMOTESYNC'} = '';
66 $sambasettings{'GUESTACCOUNT'} = 'samba';
67 $sambasettings{'MAPTOGUEST'} = 'Bad User';
68 $sambasettings{'ENCRYPTION'} = 'optional';
69 ### Values that have to be initialized
70 $sambasettings{'ACTION'} = '';
71 my $LOGLINES = '50';
72
73 ############################################################################################################################
74
75 &General::readhash("${General::swroot}/samba/settings", \%sambasettings);
76 &Header::getcgihash(\%sambasettings);
77
78 &Header::openpage('Samba', 1, '');
79 &Header::openbigbox('100%', 'left', '', $errormessage);
80
81 ############################################################################################################################
82 ############################################# Samba Rootskript aufrufe fr SU-Actions #######################################
83
84 if ($sambasettings{'ACTION'} eq 'smbuserdisable'){system("/usr/local/bin/sambactrl smbuserdisable $sambasettings{'NAME'}");}
85 if ($sambasettings{'ACTION'} eq 'smbuserenable'){system("/usr/local/bin/sambactrl smbuserenable $sambasettings{'NAME'}");}
86 if ($sambasettings{'ACTION'} eq 'smbuseradd'){system("/usr/local/bin/sambactrl smbuseradd $sambasettings{'USERNAME'} $sambasettings{'PASSWORD'} $sambasettings{'GROUP'} $sambasettings{'SHELL'}");}
87 if ($sambasettings{'ACTION'} eq 'smbchangepw'){system("/usr/local/bin/sambactrl smbchangepw $sambasettings{'USERNAME'} $sambasettings{'PASSWORD'}");}
88 if ($sambasettings{'ACTION'} eq 'smbrestart'){system("/usr/local/bin/sambactrl smbrestart");}
89 if ($sambasettings{'ACTION'} eq 'smbstart'){system("/usr/local/bin/sambactrl smbstart");}
90 if ($sambasettings{'ACTION'} eq 'smbstop'){system("/usr/local/bin/sambactrl smbstop");}
91 if ($sambasettings{'ACTION'} eq 'smbreload'){system("/usr/local/bin/sambactrl smbreload");}
92 if ($sambasettings{'ACTION'} eq 'join') {
93 $message .= &joindomain($sambasettings{'USERNAME'}, $sambasettings{'PASSWORD'});
94 }
95
96 ############################################################################################################################
97 ########################################### Samba Benutzer oder PC l�chen #################################################
98
99 if ($sambasettings{'ACTION'} eq 'userdelete'){system("/usr/local/bin/sambactrl smbuserdelete $sambasettings{'NAME'}");}
100
101 ############################################################################################################################
102 ##################################### Umsetzen der Werte von Checkboxen und Dropdowns ######################################
103
104 if ($sambasettings{'ACTION'} eq $Lang::tr{'save'})
105 {
106 ############################################################################################################################
107 ##################################### Schreiben settings und bersetzen fr smb.conf #######################################
108
109 delete $sambasettings{'__CGI__'};delete $sambasettings{'x'};delete $sambasettings{'y'};
110 &General::writehash("${General::swroot}/samba/settings", \%sambasettings);
111
112 ############################################################################################################################
113 ############################################# Schreiben der Samba globals ##################################################
114
115 open (FILE, ">${General::swroot}/samba/global") or die "Can't save the global settings: $!";
116 flock (FILE, 2);
117
118 print FILE <<END
119 # global.settings by IPFire Project
120
121 [global]
122 server string = Samba on IPFire
123
124 workgroup = $sambasettings{'WORKGRP'}
125 realm = $mainsettings{'DOMAINNAME'}
126 passdb backend = smbpasswd
127
128 map to guest = $sambasettings{'MAPTOGUEST'}
129
130 guest account = $sambasettings{'GUESTACCOUNT'}
131 unix password sync = no
132
133 bind interfaces only = true
134 interfaces = green0 blue0 127.0.0.0/8
135 remote announce = $sambasettings{'REMOTEANNOUNCE'}
136 remote browse sync = $sambasettings{'REMOTESYNC'}
137
138 winbind separator = +
139 winbind uid = 10000-20000
140 winbind gid = 10000-20000
141 winbind use default domain = yes
142
143 # Log to syslog
144 logging = syslog
145
146 # Enable support for Apple
147 vfs objects = catia fruit streams_xattr recycle
148
149 # Enable following symlinks
150 wide links = yes
151
152 END
153 ;
154
155 # Server Role
156 if ($sambasettings{'ROLE'} eq "standalone") {
157 print FILE "server role = standalone\n";
158 } elsif ($sambasettings{'ROLE'} eq "member") {
159 print FILE "server role = member server\n";
160 }
161
162 if ($sambasettings{'ENCRYPTION'} =~ m/(desired|required)/) {
163 print FILE "smb encrypt = $1\n";
164 }
165
166 print FILE <<END;
167 # Export all printers
168 [printers]
169 path = /var/spool/samba/
170 printable = yes
171
172 END
173 close FILE;
174
175 system("/usr/local/bin/sambactrl smbsafeconf");
176 system("/usr/local/bin/sambactrl smbreload");
177 }
178 &General::readhash("${General::swroot}/samba/settings", \%sambasettings);
179
180
181 if ($errormessage)
182 {
183 &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
184 print "<class name='base'>$errormessage\n";
185 print "&nbsp;</class>\n";
186 &Header::closebox();
187 }
188
189 if ($message) {
190 $message = &Header::cleanhtml($message);
191 $message =~ s/\n/<br>/g;
192
193 &Header::openbox('100%', 'left', $Lang::tr{'messages'});
194 print "$message\n";
195 &Header::closebox();
196 }
197
198 ############################################################################################################################
199 ########################################## Aktivieren von Checkboxen und Dropdowns #########################################
200
201 $selected{'ENCRYPTION'}{'optional'} = '';
202 $selected{'ENCRYPTION'}{'desired'} = '';
203 $selected{'ENCRYPTION'}{'required'} = '';
204 $selected{'ENCRYPTION'}{$sambasettings{'ENCRYPTION'}} = "selected='selected'";
205 $selected{'ROLE'}{'standalone'} = '';
206 $selected{'ROLE'}{'member'} = '';
207 $selected{'ROLE'}{$sambasettings{'ROLE'}} = "selected='selected'";
208
209 if ( $sambasettings{'MAPTOGUEST'} eq "Never" ) {
210 $sambasettings{'MAPTOGUEST'}="Bad User";
211 }
212 $selected{'MAPTOGUEST'}{$sambasettings{'MAPTOGUEST'}} = "selected='selected'";
213
214 ############################################################################################################################
215 ################################### Aufbau der HTML Seite fr globale Sambaeinstellungen ###################################
216
217 &Header::openbox('100%', 'center', $Lang::tr{'samba'});
218
219 my %servicenames = (
220 "nmbd" => $Lang::tr{'netbios nameserver daemon'},
221 "smbd" => $Lang::tr{'smb daemon'},
222 "winbindd" => $Lang::tr{'winbind daemon'},
223 );
224
225 print <<END;
226 <table class="tbl" width='100%' cellspacing='0'>
227 <tr bgcolor='$color{'color20'}'>
228 <td colspan='2' align='left'><b>$Lang::tr{'all services'}</b></td>
229 </tr>
230 END
231
232 foreach my $service (sort keys %servicenames) {
233 my $status = &isrunning($service);
234
235 print <<END;
236 <tr>
237 <td align='left' width='40%'>$servicenames{$service}</td>
238 $status
239 </tr>
240 END
241 }
242
243 print <<END
244 </table>
245
246 <br>
247
248 <table width="100%">
249 <td width="33%" align="center">
250 <form method="POST" action="$ENV{'SCRIPT_NAME'}">
251 <input type="hidden" name="ACTION" value="smbstart">
252 <input type="submit" value="$Lang::tr{'enable'}">
253 </form>
254 </td>
255
256 <td width="33%" align="center">
257 <form method="POST" action="$ENV{'SCRIPT_NAME'}">
258 <input type="hidden" name="ACTION" value="smbstop">
259 <input type="submit" value="$Lang::tr{'disable'}">
260 </form>
261 </td>
262
263 <td width="33%" align="center">
264 <form method="POST" action="$ENV{'SCRIPT_NAME'}">
265 <input type="hidden" name="ACTION" value="smbrestart">
266 <input type="submit" value="$Lang::tr{'restart'}">
267 </form>
268 </td>
269 </table>
270
271 <br>
272
273 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
274 <table class="tbl" width='100%' cellspacing='0'>
275 <tr bgcolor='$color{'color20'}'>
276 <td colspan='2' align='left'><b>$Lang::tr{'basic options'}</b></td>
277 </tr>
278 <tr>
279 <td align='left' width='40%'>$Lang::tr{'workgroup'}</td>
280 <td align='left'>
281 <input type='text' name='WORKGRP' value='$sambasettings{'WORKGRP'}' size="30" />
282 </td>
283 </tr>
284 <tr>
285 <td align='left'><br /></td>
286 <td></td>
287 </tr>
288 <tr bgcolor='$color{'color20'}'>
289 <td colspan='2' align='left'><b>$Lang::tr{'security options'}</b></td>
290 </tr>
291 <tr>
292 <td align='left' width='40%'>$Lang::tr{'security'}</td>
293 <td align='left'>
294 <select name='ROLE' style="width: 165px">
295 <option value='standalone' $selected{'ROLE'}{'standalone'}>$Lang::tr{'samba server role standalone'}</option>
296 <option value='member' $selected{'ROLE'}{'member'}>$Lang::tr{'samba server role member'}</option>
297 </select>
298 </td>
299 </tr>
300 <tr>
301 <td align='left' width='40%'>$Lang::tr{'encryption'}</td>
302 <td align='left'>
303 <select name='ENCRYPTION' style="width: 165px">
304 <option value='optional' $selected{'ENCRYPTION'}{'optional'}>$Lang::tr{'optional'}</option>
305 <option value='desired' $selected{'ENCRYPTION'}{'desired'}>$Lang::tr{'desired'}</option>
306 <option value='required' $selected{'ENCRYPTION'}{'required'}>$Lang::tr{'required'}</option>
307 </select>
308 </td>
309 </tr>
310 <tr>
311 <td align='left' width='40%'>$Lang::tr{'map to guest'}</td>
312 <td align='left'>
313 <select name='MAPTOGUEST' style="width: 165px">
314 <option value='Bad User' $selected{'MAPTOGUEST'}{'Bad User'}>Bad User</option>
315 <option value='Bad Password' $selected{'MAPTOGUEST'}{'Bad Password'}>Bad Password</option>
316 </select>
317 </td>
318 </tr>
319 <tr>
320 <td align='left'><br /></td>
321 <td></td>
322 </tr>
323 <tr bgcolor='$color{'color20'}'>
324 <td colspan='2' align='left'><b>$Lang::tr{'network options'}</b></td>
325 </tr>
326 <tr>
327 <td align='left' width='40%'>$Lang::tr{'remote announce'}</td>
328 <td align='left'>
329 <input type='text' name='REMOTEANNOUNCE' value='$sambasettings{'REMOTEANNOUNCE'}' size="30" />
330 </td>
331 </tr>
332 <tr>
333 <td align='left' width='40%'>$Lang::tr{'remote browse sync'}</td>
334 <td align='left'>
335 <input type='text' name='REMOTESYNC' value='$sambasettings{'REMOTESYNC'}' size="30" />
336 </td>
337 </tr>
338 </table>
339
340 <br>
341
342 <table width='100%' cellspacing='0'>
343 <tr>
344 <td align='center'>
345 <form method='POST' action='$ENV{'SCRIPT_NAME'}'>
346 <input type='hidden' name='ACTION' value="$Lang::tr{'save'}">
347 <input type='submit' value="$Lang::tr{'save'}">
348 </form>
349 </td>
350 </tr>
351 </table>
352 END
353 ;
354
355 &Header::closebox();
356
357 ############################################################################################################################
358 ########################################## Benutzerverwaltung fr Usersecurity #############################################
359
360 if ($sambasettings{'ROLE'} eq 'standalone') {
361 &Header::openbox('100%', 'center', $Lang::tr{'user management'});
362
363 print <<END;
364 <table class="tbl" width='100%' cellspacing='0'>
365 <tr>
366 <th align='left'>$Lang::tr{'user'}</th>
367 <th colspan='3' width='5%'></th>
368 </tr>
369 END
370
371 system('/usr/local/bin/sambactrl readsmbpasswd');
372 open(FILE, "<${General::swroot}/samba/private/smbpasswd") or die "Can't read user file: $!";
373 my @users = <FILE>;
374 close(FILE);
375 system('/usr/local/bin/sambactrl locksmbpasswd');
376
377 my $lines = 0;
378 foreach $userentry (sort @users) {
379 @userline = split( /\:/, $userentry);
380
381 if ($lines % 2) {
382 print "<tr bgcolor='$color{'color20'}'>";
383 } else {
384 print "<tr bgcolor='$color{'color22'}'>";
385 }
386
387 # Print username
388 print "<td align='left'>$userline[0]</td>";
389
390 if ($userline[4] =~ /D/) {
391 print <<END;
392 <td align='center'>
393 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
394 <input type='hidden' name='NAME' value='$userline[0]' />
395 <input type='hidden' name='ACTION' value='smbuserenable' />
396 <input type='image' alt='$Lang::tr{'activate'}' title='$Lang::tr{'activate'}' src='/images/off.gif' />
397 </form>
398 </td>
399 END
400 } else {
401 print <<END;
402 <td align='center'>
403 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
404 <input type='hidden' name='NAME' value='$userline[0]' />
405 <input type='hidden' name='ACTION' value='smbuserdisable' />
406 <input type='image' alt='$Lang::tr{'deactivate'}' title='$Lang::tr{'deactivate'}' src='/images/on.gif' />
407 </form>
408 </td>
409 END
410 }
411
412 # Machine accounts can't be edited
413 if ($userline[0] =~ /\$/) {
414 print "<td></td>";
415 } else {
416 print <<END;
417 <td align='center'>
418 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
419 <input type='hidden' name='NAME' value='$userline[0]' />
420 <input type='hidden' name='ACTION' value='userchangepw' />
421 <input type='image' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' src='/images/edit.gif' />
422 </form>
423 </td>
424 END
425 }
426
427 print <<END;
428 <td align='center'>
429 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
430 <input type='hidden' name='NAME' value='$userline[0]' />
431 <input type='hidden' name='ACTION' value='userdelete' />
432 <input type='image' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' src='/images/delete.gif' />
433 </form>
434 </td>
435 </tr>
436 END
437 $lines++;
438 }
439
440 print <<END;
441 </table>
442
443 <br>
444
445 <table width='10%' cellspacing='0'>
446 <tr>
447 <td align='center'>
448 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
449 <input type='hidden' name='ACTION' value='useradd'>
450 <input type='submit' value='$Lang::tr{'add user'}'>
451 </form>
452 </td>
453 </tr>
454 </table>
455 END
456
457 if ($sambasettings{'ACTION'} eq 'userchangepw') {
458 my $username = $sambasettings{'NAME'};
459 my $password = 'samba';
460
461 print <<END
462 <br>
463 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
464 <table width='100%' cellspacing='0'>
465 <tr bgcolor='$color{'color20'}'>
466 <td colspan='2' align='left'><b>$Lang::tr{'change passwords'}</b></td>
467 </tr>
468 <tr>
469 <td align='left'>$Lang::tr{'username'}</td>
470 <td>
471 <input type='text' name='USERNAME' value='$username' size='30' readonly='readonly' />
472 </td>
473 </tr>
474 <tr>
475 <td align='left'>$Lang::tr{'password'}</td>
476 <td>
477 <input type='password' name='PASSWORD' value='$password' size='30' />
478 </td>
479 </tr>
480 <tr>
481 <td colspan='2' align='center'>
482 <input type='hidden' name='ACTION' value='smbchangepw'>
483 <input type='submit' value='$Lang::tr{'save'}'>
484 </td>
485 </tr>
486 </table>
487 </form>
488 END
489 }
490
491 if ($sambasettings{'ACTION'} eq 'useradd') {
492 my $username = "user";
493 my $password = "samba";
494 chomp $username;
495 $username=~s/\s//g;
496 chomp $password;
497 $password=~s/\s//g;
498
499 print <<END;
500 <br>
501
502 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
503 <table width='100%' cellspacing='0'>
504 <tr bgcolor='$color{'color20'}'>
505 <td colspan='2' align='left'><b>$Lang::tr{'add user'}</b></td>
506 </tr>
507 <tr>
508 <td align='left'>$Lang::tr{'username'}</td>
509 <td>
510 <input type='text' name='USERNAME' value='$username' size='30' />
511 </td>
512 </tr>
513 <tr>
514 <td align='left'>$Lang::tr{'password'}</td>
515 <td>
516 <input type='password' name='PASSWORD' value='$password' size='30' />
517 </td>
518 </tr>
519 <tr>
520 <td align='left'>$Lang::tr{'unix group'}</td>
521 <td>
522 <input type='text' name='GROUP' value='sambauser' size='30' />
523 </td>
524 </tr>
525 <tr>
526 <td align='left'>$Lang::tr{'unix shell'}</td>
527 <td>
528 <input type='text' name='SHELL' value='/bin/false' size='30' />
529 </td>
530 </tr>
531 <tr>
532 <td colspan='2' align='center'>
533 <input type='hidden' name='ACTION' value='smbuseradd'>
534 <input type='submit' value='$Lang::tr{'save'}'>
535 </td>
536 </tr>
537 </table>
538 </form>
539 END
540 }
541
542 &Header::closebox();
543 }
544
545 if ($sambasettings{'ROLE'} eq "member") {
546 &Header::openbox('100%', 'center', $Lang::tr{'samba join a domain'});
547
548 my $AD_DOMAINNAME = uc($mainsettings{'DOMAINNAME'});
549
550 print <<END;
551 <form method="POST" action="$ENV{'SCRIPT_NAME'}">
552 <input type="hidden" name="ACTION" value="join">
553
554 <table width="100%">
555 <tbody>
556 <tr>
557 <td width="40%">
558 $Lang::tr{'domain'}
559 </td>
560 <td>
561 $AD_DOMAINNAME
562 </td>
563 </tr>
564 <tr>
565 <td width="40%">
566 $Lang::tr{'administrator username'}
567 </td>
568 <td>
569 <input type="text" name="USERNAME" size="30">
570 </td>
571 </tr>
572 <tr>
573 <td width="40%">
574 $Lang::tr{'administrator password'}
575 </td>
576 <td>
577 <input type="password" name="PASSWORD" size="30">
578 </td>
579 </tr>
580 <tr>
581 <td></td>
582 <td>
583 <input type="submit" value="$Lang::tr{'samba join domain'}">
584 </td>
585 </tr>
586 </tbody>
587 </table>
588 </form>
589 END
590
591 &Header::closebox();
592 }
593
594 ############################################################################################################################
595 ############################################### Verwalten von Freigaben ####################################################
596
597 &Header::openbox('100%', 'center', $Lang::tr{'shares'});
598
599 my %shares = config("${General::swroot}/samba/shares");
600
601 print <<END;
602 <table class="tbl" width='100%' cellspacing='0'>
603 <tr>
604 <th align='left'>$Lang::tr{'sharename'}</th>
605 <th colspan='2' width="5%" align='center'></th>
606 </tr>
607 END
608
609 my @shares = keys(%shares);
610 my $lines = 0;
611 my $col="";
612 foreach my $shareentry (sort @shares) {
613 chomp $shareentry;
614
615 if ($lines % 2) {
616 $col = "bgcolor='$color{'color20'}'";
617 } else {
618 $col = "bgcolor='$color{'color22'}'";
619 }
620
621 print <<END;
622 <tr>
623 <td align='left' $col>$shareentry</td>
624 <td $col>
625 <form method='post' action='$ENV{'SCRIPT_NAME'}#$Lang::tr{'manage shares'}'>
626 <input type='hidden' name='NAME' value='$shareentry' />
627 <input type='hidden' name='ACTION' value='sharechange' />
628 <input type='image' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' src='/images/edit.gif' />
629 </form>
630 </td>
631 <td $col>
632 <form method='post' action='$ENV{'SCRIPT_NAME'}#$Lang::tr{'manage shares'}'>
633 <input type='hidden' name='NAME' value='$shareentry' />
634 <input type='hidden' name='ACTION' value='smbsharedel' />
635 <input type='image' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' src='/images/delete.gif' />
636 </form>
637 </td>
638 </tr>
639 END
640 ;
641 $lines++;
642 }
643
644 print <<END;
645 </table>
646
647 <br>
648
649 <table width='100%' cellspacing='0'>
650 <tr>
651 <td align='center'>
652 <form method='POST' action='$ENV{'SCRIPT_NAME'}'>
653 <input type='hidden' name='ACTION' value='shareadd'>
654 <input type='submit' value='$Lang::tr{'add share'}'>
655 </form>
656 </td>
657 </tr>
658 </table>
659 END
660
661 if ($sambasettings{'ACTION'} eq 'shareadd') {
662 print <<END;
663 <br />
664
665 <form method='POST' action='$ENV{'SCRIPT_NAME'}'>
666 <table width='100%' cellspacing='0'>
667 <tr bgcolor='$color{'color20'}'>
668 <td align='left'><b>$Lang::tr{'add share'}</b></td>
669 </tr>
670 <tr>
671 <td align='center'>
672 <textarea name="SHAREOPTION" cols="121" rows="15">$defaultoption</textarea>
673 </td>
674 </tr>
675 <tr>
676 <td align='center'>
677 <input type='hidden' name='ACTION' value='smbshareadd'>
678 <input type='submit' value='$Lang::tr{'save'}'>
679 </td>
680 </tr>
681 </table>
682 </form>
683 END
684 }
685
686 if ($sambasettings{'ACTION'} eq 'sharechange') {
687 my $shareoption = $shares{$sambasettings{'NAME'}};
688
689 print <<END;
690 <br />
691
692 <form method='POST' action='$ENV{'SCRIPT_NAME'}'>
693 <input type='hidden' name='NAME' value='$sambasettings{'NAME'}'>
694
695 <table width='100%' cellspacing='0'>
696 <tr bgcolor='$color{'color20'}'>
697 <td align='left'><b>$Lang::tr{'edit share'}</b></td>
698 </tr>
699 <tr>
700 <td align='center'>
701 <textarea name="SHAREOPTION" cols="121" rows="15">$shareoption</textarea>
702 </td>
703 </tr>
704 <tr>
705 <td align='center'>
706 <input type='hidden' name='ACTION' value='smbsharechange'>
707 <input type='submit' value='$Lang::tr{'save'}'>
708 </td>
709 </tr>
710 </table>
711 </form>
712 END
713 }
714
715 if ($sambasettings{'ACTION'} eq 'smbshareadd')
716 {
717 $shares{'xvx'}= "$sambasettings{'SHAREOPTION'}";
718 save("shares");
719 my $shares = config("${General::swroot}/samba/shares");
720 }
721 if ($sambasettings{'ACTION'} eq 'smbsharedel')
722 {
723 delete $shares{$sambasettings{'NAME'}};
724 save("shares");
725 my %shares = config("${General::swroot}/samba/shares");
726 }
727 if ($sambasettings{'ACTION'} eq 'smbsharechange')
728 {
729 $shares{$sambasettings{'NAME'}} = $sambasettings{'SHAREOPTION'};
730 save("shares");
731 my %shares = config("${General::swroot}/samba/shares");
732 }
733
734 &Header::closebox();
735
736 ############################################################################################################################
737 ############################################### Anzeige des Sambastatus ####################################################
738
739 &Header::openbox('100%', 'left', $Lang::tr{'status'});
740
741 my $status = qx(/usr/local/bin/sambactrl smbstatus);
742 $status = &Header::cleanhtml($status);
743
744 print <<END;
745 <small>
746 <pre>$status</pre>
747 </small>
748 END
749
750 &Header::closebox();
751
752 &Header::closebigbox();
753 &Header::closepage();
754
755 ############################################################################################################################
756 ############################################ Subfunktion fr Sambadienste ###################################################
757
758 sub config
759 {
760 my $file = shift;
761 my @allarray = `grep -n '^\\[' $file`;
762 my @linesarray = ();
763 my @namearray = ();
764 my %hash = ();
765 my $options = ();
766 my $EOF = qx(cat $file | wc -l);
767 foreach my $allarrayentry (@allarray)
768 {
769 my @allarrayline = split( /\:/, $allarrayentry );
770 push(@linesarray,$allarrayline[0]);$allarrayline[1]=~s/\[//g;$allarrayline[1]=~s/\]//g;push(@namearray,$allarrayline[1]);
771 }
772 for(my $i = 0; $i <= $#namearray; $i++)
773 {
774 chomp $namearray[$i];
775 $namearray[$i]=~s/\[//g;$namearray[$i]=~s/\]//g;
776 if ( $i eq $#namearray )
777 {
778 my $lineend = $EOF-$linesarray[$i]+1;
779 $options=qx(tail -$lineend $file);
780 }
781 else
782 {
783 my $linestart = $EOF-$linesarray[$i]+1;
784 my $lineend = $linesarray[$i+1]-$linesarray[$i];
785 $options=qx(tail -$linestart $file | head -$lineend);
786 }
787 $hash{$namearray[$i]} = "$options";
788 #print"<pre>$namearray[$i]\n$options\n</pre>"; # enable only for debuging
789 }
790 return(%hash);
791 }
792
793 sub save
794 {
795 my $smb = shift;
796 open (FILE, ">${General::swroot}/samba/$smb") or die "Can't $smb settings $!";
797 flock (FILE, 2);
798
799 if ( $smb eq 'shares')
800 {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";} }
801
802 close FILE;
803
804 system("/usr/local/bin/sambactrl smbsafeconf");
805 system("/usr/local/bin/sambactrl smbreload");
806 }
807
808 sub isrunning
809 {
810 my $cmd = $_[0];
811 my $status = "<td align='center' bgcolor='${Header::colourred}'><font color='white'><b>$Lang::tr{'stopped'}</b></font></td>";
812 my $pid = '';
813 my $testcmd = '';
814 my $exename;
815
816 $cmd =~ /(^[a-z]+)/;
817 $exename = $1;
818
819 if (open(FILE, "/var/run/${cmd}.pid"))
820 {
821 $pid = <FILE>; chomp $pid;
822 close FILE;
823 if (open(FILE, "/proc/${pid}/status"))
824 {
825 while (<FILE>)
826 {
827 if (/^Name:\W+(.*)/)
828 {
829 $testcmd = $1;
830 }
831 }
832 close FILE;
833 if ($testcmd =~ /$exename/)
834 {
835 $status = "<td align='center' bgcolor='${Header::colourgreen}'><font color='white'><b>$Lang::tr{'running'}</b></font></td>";
836 }
837 }
838 }
839 return $status;
840 }
841
842 sub joindomain {
843 my $username = shift;
844 my $password = shift;
845
846 my @options = ("/usr/local/bin/sambactrl", "join", $username, $password);
847 my $output = qx(@options);
848
849 return $output;
850 }