]> git.ipfire.org Git - ipfire-2.x.git/blob - html/cgi-bin/samba.cgi
Sambactrl und samba.cgi von Maniacikarus
[ipfire-2.x.git] / html / cgi-bin / samba.cgi
1 #!/usr/bin/perl
2 #
3 # IPFire CGIs
4 #
5 # This code is distributed under the terms of the GPL
6 #
7 # (c) The IPFire Team
8 #
9
10 use strict;
11 # enable only the following on debugging purpose
12 use warnings;
13 use CGI::Carp 'fatalsToBrowser';
14
15 require '/var/ipfire/general-functions.pl';
16 require "${General::swroot}/lang.pl";
17 require "${General::swroot}/header.pl";
18
19 my %sambasettings = ();
20 my %checked = ();
21 my %netsettings = ();
22 my %ovpnsettings = ();
23 my $message = "";
24 my $errormessage = "";
25 my $shareconfigentry = "";
26 my @sharesconfig = ();
27 my @shareconfigline = ();
28 my $shareoption = '';
29 my $defaultoption= "[Share]\npath = /shares/share1\ncomment = Share - Public Access\nbrowseable = yes\nwriteable = yes\ncreate mask = 0777\ndirectory mask = 0777\nguest ok = yes\npublic = yes\nforce user = samba";
30 my $userentry = "";
31 my @user = ();
32 my @userline = ();
33 my @proto = ();
34 my %selected= () ;
35 my $userfile = "/var/ipfire/samba/private/smbpasswd";
36 &General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
37 &General::readhash("${General::swroot}/ovpn/settings", \%ovpnsettings);
38
39 ############################################################################################################################
40 ############################################# Samba Dienste für Statusüberprüfung ##########################################
41
42 my %servicenames =
43 (
44 'SMB Daemon' => 'smbd',
45 'NetBIOS Nameserver' => 'nmbd',
46 'Winbind Daemon' => 'winbindd'
47 );
48
49 &Header::showhttpheaders();
50
51 ############################################################################################################################
52 #################################### Initialisierung von Samba Sharess für die Verarbeitung ################################
53
54 my @Zeilen= ();
55 my @Shares= ();
56 my $shareentry = "";
57 my @shares = ();
58 my @shareline = ();
59 my $sharefile = "/var/ipfire/samba/shares";
60 my $EOF = qx(cat $sharefile | wc -l);
61
62 @shares = `grep -n '^\\[' $sharefile`;
63 foreach $shareentry (@shares)
64 {
65 @shareline = split( /\:/, $shareentry );
66 push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]);
67 }
68
69 ############################################################################################################################
70 #################################### Initialisierung von Samba Variablen für global Settings ###############################
71
72 $sambasettings{'WORKGRP'} = 'homeip.net';
73 $sambasettings{'NETBIOSNAME'} = 'IPFIRE';
74 $sambasettings{'SRVSTRING'} = 'Samba Server running on IPFire 2.0';
75 $sambasettings{'INTERFACES'} = '';
76 $sambasettings{'SECURITY'} = 'share';
77 $sambasettings{'OSLEVEL'} = '65';
78 $sambasettings{'GREEN'} = 'on';
79 $sambasettings{'BLUE'} = 'off';
80 $sambasettings{'ORANGE'} = 'off';
81 $sambasettings{'VPN'} = 'off';
82 $sambasettings{'WINSSRV'} = "$netsettings{'GREEN_NETADDRESS'}";
83 $sambasettings{'WINSSUPPORT'} = 'off';
84 $sambasettings{'OTHERINTERFACES'} = '';
85 $sambasettings{'GUESTACCOUNT'} = 'samba';
86 $sambasettings{'MAPTOGUEST'} = 'Never';
87 $sambasettings{'BINDINTERFACESONLY'} = 'True';
88 ### Values that have to be initialized
89 $sambasettings{'ACTION'} = '';
90
91 &General::readhash("${General::swroot}/samba/settings", \%sambasettings);
92 &Header::getcgihash(\%sambasettings);
93
94 &Header::openpage('Samba', 1, '');
95 &Header::openbigbox('100%', 'left', '', $errormessage);
96
97 ############################################################################################################################
98 ############################################# Samba Rootskript aufrufe für SU-Actions ######################################
99
100 if ($sambasettings{'ACTION'} eq 'smbuserdisable'){system('/usr/local/bin/sambactrl smbuserdisable $sambasettings{"NAME"}');}
101 if ($sambasettings{'ACTION'} eq 'smbuserenable'){system('/usr/local/bin/sambactrl smbuserenable $sambasettings{"NAME"}');}
102 if ($sambasettings{'ACTION'} eq 'smbuserdelete'){system('/usr/local/bin/sambactrl smbuserdelete $sambasettings{"NAME"}');}
103 if ($sambasettings{'ACTION'} eq 'smbuseradd'){system('/usr/local/bin/sambactrl smbuseradd $username $password');}
104 if ($sambasettings{'ACTION'} eq 'smbchangepw'){system('/usr/local/bin/sambactrl smbchangepw $username $password');}
105 if ($sambasettings{'ACTION'} eq 'smbrestart'){system('/usr/local/bin/sambactrl smbrestart');}
106 if ($sambasettings{'ACTION'} eq 'smbstart'){system('/usr/local/bin/sambactrl smbstart');}
107 if ($sambasettings{'ACTION'} eq 'smbstop'){system('/usr/local/bin/sambactrl smbstop');}
108 # smbsharechange is directly called by the if clause
109
110 ############################################################################################################################
111 ############################################## Samba Share neu anlegen #####################################################
112
113 if ($sambasettings{'ACTION'} eq 'smbshareadd')
114 {
115 my $emptyline= "";
116 open (FILE, ">>${General::swroot}/samba/shares") or die "Can't save the shares settings: $!";
117 flock (FILE, 2);
118
119 print FILE <<END
120 $sambasettings{'SHAREOPTION'}
121 $emptyline
122 END
123 ;
124 close FILE;
125 system('/usr/local/bin/sambactrl smbsharechange');
126
127 @Zeilen = ();
128 @Shares = ();
129 @shares = `grep -n '^\\[' $sharefile`;
130 foreach $shareentry (@shares)
131 {
132 @shareline = split( /\:/, $shareentry );
133 push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]);
134 }
135 }
136
137 ############################################################################################################################
138 ################################################## Samba Share löschen #####################################################
139
140 if ($sambasettings{'ACTION'} eq 'smbsharedel')
141 {
142 my $sharebody = '';
143 my $sharehead = '';
144 my $sharetext = '';
145 my $sharename = "$sambasettings{'NAME'}";
146 chomp $sharename;
147 $sharename=~s/\s//g;
148
149 for(my $i = 0; $i <= $#Shares; $i++)
150 {
151 chomp $Shares[$i];
152 $Shares[$i]=~s/\s//g;
153 if ( "$Shares[$i]" eq "$sharename" )
154 {
155 my $Zeilenbegin = $Zeilen[$i]-2;
156 my $Zeilenende = $EOF-$Zeilen[$i+1]+1;
157 my $Zeilenende2 = $Zeilenende-1;
158
159 if ( $Zeilen[$i] eq $Zeilen[$#Shares] )
160 {
161 $sharehead = qx(head -$Zeilenbegin $sharefile);
162 $sharetext = $sharehead;
163 }
164 elsif ($Zeilen[$i] eq 1 )
165 {
166 $sharehead = qx(tail -$Zeilenende $sharefile | head -$Zeilenende2);
167 $sharetext = $sharehead;
168 }
169 else
170 {
171 $sharehead = qx(head -$Zeilenbegin $sharefile);$sharebody = qx(tail -$Zeilenende $sharefile | head -$Zeilenende2);
172 $sharetext = "$sharehead\n$sharebody";
173 }
174 }
175 }
176
177 open (FILE, ">${General::swroot}/samba/shares") or die "Can't delete the share settings: $!";
178 flock (FILE, 2);
179 print FILE <<END
180 $sharetext
181 END
182 ;
183 close FILE;
184 system('/usr/local/bin/sambactrl smbsharechange');
185
186 @Zeilen = ();
187 @Shares = ();
188 @shares = `grep -n '^\\[' $sharefile`;
189 foreach $shareentry (@shares)
190 {
191 @shareline = split( /\:/, $shareentry );
192 push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]);
193 }
194 }
195 ############################################################################################################################
196 ################################################## Sambashare ändern #######################################################
197
198 if ($sambasettings{'ACTION'} eq 'smbsharechange')
199 {
200 my $sharebody = '';
201 my $sharehead = '';
202 my $sharename = "$sambasettings{'NAME'}";
203 my $sharetext = '';
204 chomp $sharename;
205 $sharename=~s/\s//g;
206
207 for(my $i = 0; $i <= $#Shares; $i++)
208 {
209 chomp $Shares[$i];
210 $Shares[$i]=~s/\s//g;
211 if ( "$Shares[$i]" eq "$sharename" )
212 {
213 my $Zeilenbegin = $Zeilen[$i]-2;
214 my $Zeilenende = $EOF-$Zeilen[$i+1]+1;
215 my $Zeilenende2 = $Zeilenende-1;
216
217 if ( $Zeilen[$i] eq $Zeilen[$#Shares] )
218 {
219 $sharehead = qx(head -$Zeilenbegin $sharefile);
220 $sharetext = $sharehead;
221 }
222 elsif ($Zeilen[$i] eq 1 )
223 {
224 $sharehead = qx(tail -$Zeilenende $sharefile | head -$Zeilenende2);
225 $sharetext = $sharehead;
226 }
227 else
228 {
229 $sharehead = qx(head -$Zeilenbegin $sharefile);$sharebody = qx(tail -$Zeilenende $sharefile | head -$Zeilenende2);
230 $sharetext = "$sharehead\n$sharebody";
231 }
232 }
233 }
234
235 open (FILE, ">${General::swroot}/samba/shares") or die "Can't delete the share settings: $!";
236 flock (FILE, 2);
237 print FILE <<END
238 $sharetext
239 $sambasettings{'SHAREOPTION'}
240 END
241 ;
242 close FILE;
243 system('/usr/local/bin/sambactrl smbsharechange');
244
245 @Zeilen = ();
246 @Shares = ();
247 @shares = `grep -n '^\\[' $sharefile`;
248 foreach $shareentry (@shares)
249 {
250 @shareline = split( /\:/, $shareentry );
251 push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]);
252 }
253 }
254
255 ############################################################################################################################
256 ##################################### Umsetzen der Werte von Checkboxen und Dropdowns ######################################
257
258 if ($sambasettings{'ACTION'} eq $Lang::tr{'save'})
259 {
260 $sambasettings{'INTERFACES'} = '';
261 if ($checked{'GREEN'}){ $sambasettings{'INTERFACES'} = "$sambasettings{'INTERFACES'} $netsettings{'GREEN_DEV'}";}
262 if ($checked{'BLUE'}){ $sambasettings{'INTERFACES'} = "$sambasettings{'INTERFACES'} $netsettings{'BLUE_DEV'}";}
263 if ($checked{'ORANGE'}){ $sambasettings{'INTERFACES'} = "$sambasettings{'INTERFACES'} $netsettings{'ORANGE_DEV'}";}
264 if ($checked{'VPN'}){ $sambasettings{'INTERFACES'} = "$sambasettings{'INTERFACES'} $ovpnsettings{'DDEVICE'}";}
265 if ($sambasettings{'OTHERINTERFACES'} ne ''){ $sambasettings{'INTERFACES'} = "$sambasettings{'INTERFACES'} $sambasettings{'OTHERINTERFACES'}";}
266
267 ############################################################################################################################
268 ############################################# Schreiben der Samba globals ##################################################
269
270 &General::writehash("${General::swroot}/samba/settings", \%sambasettings);
271
272 open (FILE, ">${General::swroot}/samba/global") or die "Can't save the global settings: $!";
273 flock (FILE, 2);
274
275 print FILE <<END
276 # global.settings by IPFire Project
277
278 [global]
279 netbios name = $sambasettings{'NETBIOSNAME'}
280 server string = $sambasettings{'SRVSTRING'}
281 workgroup = $sambasettings{'WORKGRP'}
282
283 keep alive = 30
284 os level = $sambasettings{'OSLEVEL'}
285 fstype = NTFS
286
287 preferred master = yes
288 domain master = yes
289 local master = yes
290
291 kernel oplocks = false
292 map to guest = $sambasettings{'MAPTOGUEST'}
293 smb ports = 445 139
294 unix charset = CP850
295
296 security = $sambasettings{'SECURITY'}
297 encrypt passwords = yes
298 guest account = $sambasettings{'GUESTACCOUNT'}
299 unix password sync = no
300 null passwords = yes
301
302 bind interfaces only = $sambasettings{'BINDINTERFACESONLY'}
303 interfaces = $sambasettings{'INTERFACES'}
304 socket options = TCP_NODELAY IPTOS_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 SO_KEEPALIVE
305
306 username level = 1
307 wins support = $sambasettings{'WINSSUPPORT'}
308 local master = yes
309
310 log file = /var/log/samba/samba-log.%m
311 lock directory = /var/lock/samba
312 pid directory = /var/run/
313
314 END
315 ;
316 close FILE;
317 }
318 &General::readhash("${General::swroot}/samba/settings", \%sambasettings);
319
320 if ($errormessage) {
321 &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
322 print "<class name='base'>$errormessage\n";
323 print "&nbsp;</class>\n";
324 &Header::closebox();
325 }
326
327 ############################################################################################################################
328 ########################################## Aktivieren von Checkboxen und Dropdowns #########################################
329
330 $checked{'WINSSUPPORT'}{$sambasettings{'WINSSUPPORT'}} = "checked='checked' ";
331 $checked{'GREEN'}{$sambasettings{'GREEN'}} = "checked='checked' ";
332 $checked{'BLUE'}{$sambasettings{'BLUE'}} = "checked='checked' ";
333 $checked{'ORANGE'}{$sambasettings{'ORANGE'}} = "checked='checked' ";
334 $checked{'VPN'}{$sambasettings{'VPN'}} = "checked='checked' ";
335
336 $selected{'MAPTOGUEST'}{$sambasettings{'MAPTOGUEST'}} = "selected='selected'";
337 $selected{'SECURITY'}{$sambasettings{'SECURITY'}} = "selected='selected'";
338
339 ############################################################################################################################
340 ################################### Aufbau der HTML Seite für globale Sambaeinstellungen ###################################
341
342 &Header::openbox('100%', 'center', 'Samba');
343 print <<END
344 <hr>
345 <table width='500px' cellspacing='0'><br>
346 END
347 ;
348 if ( $message ne "" ) {
349 print "<tr><td colspan='2' align='left'><font color='red'>$message</font>";
350 }
351 print <<END
352 <tr bgcolor='${Header::table1colour}'><td colspan='2' align='left'><b>Alle Dienste</b></td></tr>
353 </table><table width='500px' cellspacing='0'>
354 END
355 ;
356 my $key = '';
357 foreach $key (sort keys %servicenames)
358 {
359 print "<tr><td align='left'>$key";
360 my $shortname = $servicenames{$key};
361 my $status = &isrunning($shortname);
362 print "$status</td>";
363 print <<END
364 <td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
365 <input type='hidden' name='ACTION' value='restart $shortname'>
366 <input type='image' src='/images/reload.gif'>
367 </form></td>
368 END
369 ;
370 }
371 print <<END
372 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
373 <table width='500px' cellspacing='0'><br>
374 <tr><td colspan='2' align='center'>
375 <input type='submit' name='ACTION' value='Start' />
376 <input type='submit' name='ACTION' value='Stop' />
377 <input type='submit' name='ACTION' value='$Lang::tr{'restart'}' />
378 </td></tr></form></table>
379
380 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
381 <table width='500px' cellspacing='0'><br>
382 <tr bgcolor='${Header::table1colour}'><td colspan='2' align='left'><b>Basisoptionen</b></td></tr>
383 <tr><td align='left'>Workgroup:</td><td><input type='text' name='WORKGRP' value='$sambasettings{'WORKGRP'}' size="30"></td></tr>
384 <tr><td align='left'>NetBIOS-Name:</td><td><input type='text' name='NETBIOSNAME' value='$sambasettings{'NETBIOSNAME'}' size="30"></td></tr>
385 <tr><td align='left'>Server-String:</td><td><input type='text' name='SRVSTRING' value='$sambasettings{'SRVSTRING'}' size="30"></td></tr>
386 <tr><td align='left'>Interfaces:</td><td><input type='checkbox' name='VPN' $checked{'VPN'}{'on'}><font size='2' color='$Header::colourovpn'><b> OpenVpn - $ovpnsettings{'DDEVICE'}</td></tr>
387 <tr><td align='left'></td><td><input type='checkbox' name='GREEN' $checked{'GREEN'}{'on'}><font size='2' color='$Header::colourgreen'><b> $Lang::tr{'green'} - $netsettings{'GREEN_DEV'}</td></tr>
388 END
389 ;
390 if (&Header::blue_used()){
391 print <<END
392 <tr><td align='left'></td><td><input type='checkbox' name='BLUE' $checked{'BLUE'}{'on'}><font size='2' color='$Header::colourblue'><b> $Lang::tr{'wireless'} - $netsettings{'BLUE_DEV'}</td></tr>
393 END
394 ;
395 }
396 if (&Header::orange_used()){
397 print <<END
398 <tr><td align='left'></td><td><input type='checkbox' name='ORANGE' $checked{'ORANGE'}{'on'}><font size='2' color='$Header::colourorange'><b> $Lang::tr{'dmz'} - $netsettings{'ORANGE_DEV'}</td></tr>
399 END
400 ;
401 }
402 print <<END
403 <tr><td align='center'>weitere</td><td><input type='text' name='OTHERINTERFACES' value='$sambasettings{'OTHERINTERFACES'}' size="30"></td></tr>
404 <tr><td align='left'><br></td><td></td></tr>
405 <tr bgcolor='${Header::table1colour}'><td colspan='2' align='left'><b>Sicherheitsoptionen</b></td></tr>
406 <tr><td align='left'>Security:</td><td><select name='SECURITY'>
407 <option value='share' $selected{'SECURITY'}{'share'}>Share</option>
408 <option value='user' $selected{'SECURITY'}{'user'}>User</option>
409 <option value='domain' $selected{'SECURITY'}{'domain'}>Domain</option>
410 <option value='ADS' $selected{'SECURITY'}{'ADS'}>ADS</option>
411 <option value='server' $selected{'SECURITY'}{'server'}>Server</option>
412
413 </select></td></tr>
414 <tr><td align='left'>Map to guest:</td><td><select name='MAPTOGUEST'>
415 <option value='Never' $selected{'MAPTOGUEST'}{'Never'}>Never</option>
416 <option value='Bad User' $selected{'MAPTOGUEST'}{'Bad User'}>Bad User</option>
417 <option value='Bad Password' $selected{'MAPTOGUEST'}{'Bad Password'}>Bad Password</option>
418 </select></td></tr>
419 <tr><td align='left'><br></td><td></td></tr>
420 <tr bgcolor='${Header::table1colour}'><td colspan='2' align='left'><b>Browsingoptionen</b></td></tr>
421 <tr><td align='left'>OS Level:</td><td><input type='text' name='OSLEVEL' value='$sambasettings{'OSLEVEL'}' size="30"></td></tr>
422 <tr><td align='left'><br></td><td></td></tr>
423 <tr bgcolor='${Header::table1colour}'><td colspan='2' align='left'><b>WINS-Optionen</b></td></tr>
424 <tr><td align='left'>WINS-Server:</td><td><input type='text' name='WINSSRV' value='$sambasettings{'WINSSRV'}' size="30"></td></tr>
425 <tr><td align='left'>WINS-Support:</td><td>on <input type='radio' name='WINSSUPPORT' value='on' $checked{'WINSSUPPORT'}{'on'}>/
426 <input type='radio' name='WINSSUPPORT' value='off' $checked{'WINSSUPPORT'}{'off'}> off</td></tr>
427 <tr><td colspan='2' align='center'><input type='submit' name='ACTION' value=$Lang::tr{'save'}></td></tr>
428 </table>
429 </form>
430 END
431 ;
432 &Header::closebox();
433
434 ############################################################################################################################
435 ########################################## Benutzerverwaltung für Usersecurity #############################################
436
437 if ($sambasettings{'SECURITY'} eq 'user')
438 {
439 &Header::openbox('100%', 'center', 'accounting - user Security');
440
441 print <<END
442 <hr>
443 <table width='500px' cellspacing='0'><br>
444 <tr><td colspan='6' align='left'>
445 <tr><td bgcolor='${Header::table1colour}' colspan='6' align='left'><b>Benutzerverwaltung</b>
446 <tr><td><u>Benutzername</u></td><td><u>Passwort</u></td><td><u>Status</u></td><td colspan='3' width="5"><u>Optionen</u></td></tr>
447 END
448 ;
449
450 system('/usr/local/bin/sambactrl readsmbpasswd');
451 open(FILE, "</var/ipfire/samba/private/smbpasswd") or die "Can't read user file: $!";
452 flock (FILE, 2);
453 @user = <FILE>;
454 close(FILE);
455 system('/usr/local/bin/sambactrl locksmbpasswd');
456 foreach $userentry (sort @user)
457 {
458 @userline = split( /\:/, $userentry );
459 print <<END
460 <tr><td align='left'>$userline[0]</td><td>
461 END
462 ;
463 if ($userline[2] =~ m/N/){
464 print <<END
465 nicht gesetzt</td><td>
466 END
467 ;
468 }else{
469 print <<END
470 gesetzt</td><td>
471 END
472 ;
473 }
474 if ($userline[2] =~ m/D/){
475 print <<END
476 aktiv</td>
477 <td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
478 <input type='hidden' name='NAME' value='$userline[0]'>
479 <input type='hidden' name='ACTION' value='userdisable'>
480 <input type='image' alt='Deaktivieren' src='/images/off.gif'>
481 </form></td>
482 END
483 ;
484 }else{
485 print <<END
486 inaktiv</td>
487 <td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
488 <input type='hidden' name='NAME' value='$userline[0]'>
489 <input type='hidden' name='ACTION' value='userenable'>
490 <input type='image' alt='Aktivieren' src='/images/on.gif'>
491 </form></td>
492 END
493 ;
494 }
495 print <<END
496 <td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
497 <input type='hidden' name='NAME' value='$userline[0]'>
498 <input type='hidden' name='ACTION' value='userchangepw'>
499 <input type='image' alt='Bearbeiten' src='/images/edit.gif'>
500 </form></td>
501 <td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
502 <input type='hidden' name='NAME' value='$userline[0]'>
503 <input type='hidden' name='ACTION' value='userdelete'>
504 <input type='image' alt='Loeschen' src='/images/delete.gif'>
505 </form></td>
506 </td></tr>
507 END
508 ;
509 }
510 print <<END
511 </table>
512 <table width='50px' cellspacing='0'><br>
513 <tr><td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
514 <input type='hidden' name='ACTION' value='useradd'>
515 <input type='image' alt='Benutzer anlegen' src='/images/add.gif'></form></td>
516 <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
517 <input type='hidden' name='ACTION' value='usercaption'>
518 <input type='image' alt='Legende' src='/images/info.gif'></form>
519 </td><tr>
520 </table>
521 END
522 ;
523 if ($sambasettings{'ACTION'} eq 'usercaption')
524 {
525 print <<END
526 <table width='500px' cellspacing='0'><br>
527 <tr><td><b>Legende:</b></td></tr>
528 <tr><td><img src='/images/add.gif'>Benutzer neu anlegen</td></tr>
529 <tr><td><img src='/images/on.gif'>Benutzer aktivieren</td></tr>
530 <tr><td><img src='/images/off.gif'>Benutzer deaktivieren</td></tr>
531 <tr><td><img src='/images/edit.gif'>Passwort wechseln</td></tr>
532 <tr><td><img src='/images/delete.gif'>Benutzer loeschen</td></tr>
533 </table>
534 END
535 ;
536 }
537
538 if ($sambasettings{'ACTION'} eq 'userchangepw')
539 {
540 my $username = "$sambasettings{'NAME'}";
541 my $password = 'samba';
542 print <<END
543 <hr>
544 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
545 <table width='500px' cellspacing='0'><br>
546 <tr bgcolor='${Header::table1colour}'><td colspan='2' align='left'><b>Passwort wechseln</b></td></tr>
547 <tr><td align='left'>Benutzername</td><td><input type='text' name='USERNAME' value='$username' size="30"></td></tr>
548 <tr><td align='left'>Passwort</td><td><input type='password' name='PASSWORD' value='$password' size="30"></td></tr>
549 <tr><td colspan='2' align='center'><input type='submit' name='ACTION' value='smbchangepw'></td></tr></form>
550 </table>
551 END
552 ;
553 }
554 if ($sambasettings{'ACTION'} eq 'useradd')
555 {
556 my $username = "User";
557 my $password = 'samba';
558 print <<END
559 <hr>
560 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
561 <table width='500px' cellspacing='0'><br>
562 <tr bgcolor='${Header::table1colour}'><td colspan='2' align='left'><b>Benutzer neu anlegen</b></td></tr>
563 <tr><td align='left'>Benutzername</td><td><input type='text' name='USERNAME' value='$username' size="30"></td></tr>
564 <tr><td align='left'>Passwort</td><td><input type='password' name='PASSWORD' value='$password' size="30"></td></tr>
565 <tr><td colspan='2' align='center'><input type='submit' name='ACTION' value='smbuseradd'></td></tr></form>
566 </table>
567 END
568 ;
569 }
570
571 &Header::closebox();
572 }
573
574 ############################################################################################################################
575 ############################################### Verwalten von Freigaben ####################################################
576
577 &Header::openbox('100%', 'center', 'Shares');
578
579 print <<END
580 <hr>
581 <table width='500px' cellspacing='0'><br>
582 <tr><td bgcolor='${Header::table1colour}' colspan='3' align='left'><b>Shareverwaltung</b>
583 <tr><td><u>Names des Shares</u></td><td colspan='2' width="5"><u>Optionen</u></td></tr>
584 END
585 ;
586
587
588 foreach $shareentry (sort @Shares)
589 {
590 print <<END
591 <tr><td align='left'>$shareentry</td>
592 <td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
593 <input type='hidden' name='NAME' value='$shareentry'>
594 <input type='hidden' name='ACTION' value='sharechange'>
595 <input type='image' alt='Bearbeiten' src='/images/edit.gif'>
596 </td></form>
597 <td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
598 <input type='hidden' name='NAME' value='$shareentry'>
599 <input type='hidden' name='ACTION' value='smbsharedel'>
600 <input type='image' alt='Loeschen' src='/images/delete.gif'>
601 </td></form><tr>
602 END
603 ;
604 }
605 print <<END
606 </table>
607
608 <table width='50px' cellspacing='0'><br>
609 <tr><td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
610 <input type='hidden' name='ACTION' value='shareadd'>
611 <input type='image' alt='neuen Share anlegen' src='/images/add.gif'></form></td>
612 <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
613 <input type='hidden' name='ACTION' value='sharecaption'>
614 <input type='image' alt='Legende' src='/images/info.gif'></form>
615 </td><tr>
616 </table>
617 END
618 ;
619 if ($sambasettings{'ACTION'} eq 'sharecaption')
620 {
621 print <<END
622 <table width='500px' cellspacing='0'><br>
623 <tr><td><b>Legende:</b></td></tr>
624 <tr><td><img src='/images/add.gif'>Share neu anlegen</td></tr>
625 <tr><td><img src='/images/edit.gif'>Share bearbeiten</td></tr>
626 <tr><td><img src='/images/delete.gif'>Share loeschen</td></tr>
627 </table>
628 END
629 ;
630 }
631
632 if ($sambasettings{'ACTION'} eq 'shareadd' || $sambasettings{'ACTION'} eq 'optioncaption' )
633 {
634 print <<END
635 <hr>
636 <table width='500px' cellspacing='0'><br>
637 <tr bgcolor='${Header::table1colour}'><td colspan='2' align='left'><b>neuen Share anlegen</b></td></tr>
638 <tr><td colspan='2' align='center'></td></tr>
639 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
640 <tr><td colspan='2' align='center'>Anzeige der Optionen fuer Shares<input type='hidden' name='ACTION' value='optioncaption'>
641 <input type='image' alt='Legende' src='/images/info.gif'></td></tr></form>
642 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
643 <tr><td colspan='2' align='center'><textarea name="SHAREOPTION" cols="50" rows="15" Wrap="off">$defaultoption</textarea></td></tr>
644 </table>
645 <table width='50px' cellspacing='0'><br>
646 <tr><td align='center'><input type='submit' name='ACTION' value='smbshareadd'></td></tr></form>
647 </table>
648 END
649 ;
650 }
651
652 if ($sambasettings{'ACTION'} eq 'sharechange' || $sambasettings{'ACTION'} eq 'optioncaption2' )
653 {
654 my $sharename = "$sambasettings{'NAME'}";
655 chomp $sharename;
656 $sharename=~s/\s//g;
657
658 for(my $i = 0; $i <= $#Shares; $i++)
659 {
660 chomp $Shares[$i];
661 $Shares[$i]=~s/\s//g;
662 if ( "$Shares[$i]" eq "$sharename" )
663 {
664 my $Zeilenbegin = $Zeilen[$i+1]-2;
665 my $Zeilenende = $Zeilen[$i+1]-$Zeilen[$i];
666 if ( $Zeilen[$i] eq $Zeilen[$#Shares] )
667 {$Zeilenende = $EOF-$Zeilen[$#Shares]+1;$Zeilenbegin = $EOF-$Zeilen[$#Shares]; $shareoption = qx(tail -$Zeilenende $sharefile | head -$Zeilenbegin);}
668 else{$shareoption = qx(head -$Zeilenbegin $sharefile | tail -$Zeilenende);}
669 }
670 }
671
672 print <<END
673 <hr>
674 <table width='500px' cellspacing='0'><br>
675 <tr bgcolor='${Header::table1colour}'><td colspan='2' align='left'><b>Share bearbeiten</b></td></tr>
676 <tr><td colspan='2' align='center'></td></tr>
677 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
678 <tr><td colspan='2' align='center'>Anzeige der Optionen fuer Shares<input type='hidden' name='ACTION' value='optioncaption2'>
679 <input type='image' alt='Legende' src='/images/info.gif'></td></tr></form>
680 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
681 <tr><td colspan='2' align='center'><textarea name="SHAREOPTION" cols="50" rows="15" Wrap="off">$shareoption</textarea></td></tr>
682 </table>
683 <table width='50px' cellspacing='0'><br>
684 <tr><td align='center'>
685 <input type='hidden' name='NAME' value='$sharename'>
686 <input type='submit' name='ACTION' value='smbsharechange'></td></tr></form>
687 </table>
688 END
689 ;
690 }
691
692 if ($sambasettings{'ACTION'} eq 'optioncaption' || $sambasettings{'ACTION'} eq 'optioncaption2')
693 {
694 print <<END
695 <table width='500px' cellspacing='0'><br>
696 <tr><td><b>Legende:</b></td></tr>
697 <tr><td><u>Option</u></td><td><u>Bedeutung</u> / <u>Beispiel</u></td></tr>
698 <tr><td>comment</td><td>Kommentar</td></tr>
699 <tr><td></td><td>comment = Mein neues Share</td></tr>
700 <tr><td><br></td><td></td></tr>
701 <tr><td>path</td><td>Pfad zum Verzeichnis</td></tr>
702 <tr><td></td><td>path = /share/neu</td></tr>
703 <tr><td><br></td><td></td></tr>
704 <tr><td>writeable</td><td>Verzeichnis schreibbar</td></tr>
705 <tr><td></td><td>writeable = yes</td></tr>
706 <tr><td><br></td><td></td></tr>
707 <tr><td>browseable</td><td>sichtbar in Verzeichnisliste</td></tr>
708 <tr><td></td><td>browsable = yes</td></tr>
709 <tr><td><br></td><td></td></tr>
710 <tr><td>user</td><td>Besitzer der Freigabe</td></tr>
711 <tr><td></td><td>user = samba</td></tr>
712 <tr><td><br></td><td></td></tr>
713 <tr><td>valid users</td><td>Liste der Zugriffsberechtigten</td></tr>
714 <tr><td></td><td>valid users = samba, user1</td></tr>
715 <tr><td><br></td><td></td></tr>
716 <tr><td>write list</td><td>Liste der Schreibberechtigten</td></tr>
717 <tr><td></td><td>write list = samba</td></tr>
718 <tr><td><br></td><td></td></tr>
719 <tr><td>read list</td><td>Liste der nur Leseberechtigten</td></tr>
720 <tr><td></td><td>read list = user1</td></tr>
721 <tr><td><br></td><td></td></tr>
722 <tr><td>admin users</td><td>Liste der Benutzer mit SuperUser Rechten</td></tr>
723 <tr><td></td><td>admin users = user1</td></tr>
724 <tr><td><br></td><td></td></tr>
725 <tr><td>invalid users</td><td>Liste der Benutzer denen der Zugriff verweigert wird</td></tr>
726 <tr><td></td><td>invalid users = user2</td></tr>
727 <tr><td><br></td><td></td></tr>
728 <tr><td>force user</td><td>Standartbenutzer fuer alle Dateien</td></tr>
729 <tr><td></td><td>force user = samba</td></tr>
730 <tr><td><br></td><td></td></tr>
731 <tr><td>directory mask</td><td>UNIX Verzeichnisberchtigung beim Erzeugen</td></tr>
732 <tr><td></td><td>directory mask = 0777</td></tr>
733 <tr><td><br></td><td></td></tr>
734 <tr><td>create mask</td><td>UNIX Dateiberchtigung beim Erzeugen</td></tr>
735 <tr><td></td><td>create mask = 0777</td></tr>
736 <tr><td><br></td><td></td></tr>
737 <tr><td>guest ok</td><td>Annonymer Zugriff</td></tr>
738 <tr><td></td><td>guest ok = yes</td></tr>
739 </table>
740 END
741 ;
742 }
743
744 &Header::closebox();
745 &Header::closebigbox();
746 &Header::closepage();
747
748 ############################################################################################################################
749 ############################################ Subfunktion für Sambadienste ##################################################
750
751 sub isrunning
752 {
753 my $cmd = $_[0];
754 my $status = "<td align='center' bgcolor='${Header::colourred}'><font color='white'><b>$Lang::tr{'stopped'}</b></font></td>";
755 my $pid = '';
756 my $testcmd = '';
757 my $exename;
758
759 $cmd =~ /(^[a-z]+)/;
760 $exename = $1;
761
762 if (open(FILE, "/var/run/${cmd}.pid"))
763 {
764 $pid = <FILE>; chomp $pid;
765 close FILE;
766 if (open(FILE, "/proc/${pid}/status"))
767 {
768 while (<FILE>)
769 {
770 if (/^Name:\W+(.*)/) {
771 $testcmd = $1; }
772 }
773 close FILE;
774 if ($testcmd =~ /$exename/)
775 {
776 $status = "<td align='center' bgcolor='${Header::colourgreen}'><font color='white'><b>$Lang::tr{'running'}</b></font></td>";
777 }
778 }
779 }
780
781 return $status;
782 }