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