1 |
diff -urN smeserver-dhcpmanager-2.0.4.old/root/usr/share/smanager/lib/SrvMngr/Controller/Dhcpd.pm smeserver-dhcpmanager-2.0.4/root/usr/share/smanager/lib/SrvMngr/Controller/Dhcpd.pm |
2 |
--- smeserver-dhcpmanager-2.0.4.old/root/usr/share/smanager/lib/SrvMngr/Controller/Dhcpd.pm 1970-01-01 01:00:00.000000000 +0100 |
3 |
+++ smeserver-dhcpmanager-2.0.4/root/usr/share/smanager/lib/SrvMngr/Controller/Dhcpd.pm 2022-03-08 11:20:00.000000000 +0000 |
4 |
@@ -0,0 +1,539 @@ |
5 |
+package SrvMngr::Controller::Dhcpd; |
6 |
+ |
7 |
+#---------------------------------------------------------------------- |
8 |
+# heading : Configuration |
9 |
+# description : DHCP manager |
10 |
+# navigation : 2000 2500 |
11 |
+# |
12 |
+# name : dhcpd, method : get, url : /dhcpd, ctlact : Dhcpd#main |
13 |
+# name : dhcpd1, method : get, url : /dhcpd1, ctlact : Dhcpd#do_leases |
14 |
+# name : dhcpd2, method : get, url : /dhcpd2, ctlact : Dhcpd#do_winpopup |
15 |
+# name : dhcpd3, method : get, url : /dhcpd3, ctlact : Dhcpd#do_scan |
16 |
+# name : dhcpd4, method : get, url : /dhcpd4, ctlact : Dhcpd#do_delete_all_leases |
17 |
+# name : dhcpd5, method : post, url : /dhcpd5, ctlact : Dhcpd#do_update_config |
18 |
+# name : dhcpd6, method : get, url : /dhcpd6, ctlact : Dhcpd#do_delete_one_lease |
19 |
+# name : dhcpd7, method : get, url : /dhcpd7, ctlact : Dhcpd#do_refresh_leases |
20 |
+# name : dhcpd8, method : get, url : /dhcpd8, ctlact : Dhcpd#do_winpopup |
21 |
+# name : dhcpd9, method : get, url : /dhcpd9, ctlact : Dhcpd#do_wol |
22 |
+# name : dhcpd10, method : post, url : /dhcpd10, ctlact : Dhcpd#do_update_check |
23 |
+# |
24 |
+# routes : end |
25 |
+# |
26 |
+# |
27 |
+# Documentation: https://wiki.koozali.org/Dhcpmanager |
28 |
+# |
29 |
+use strict; |
30 |
+use warnings; |
31 |
+use Mojo::Base 'Mojolicious::Controller'; |
32 |
+ |
33 |
+use constant FALSE => 0; |
34 |
+use constant TRUE => 1; |
35 |
+ |
36 |
+use Locale::gettext; |
37 |
+use SrvMngr::I18N; |
38 |
+use SrvMngr qw(theme_list init_session); |
39 |
+ |
40 |
+use Data::Dumper; |
41 |
+use esmith::util; |
42 |
+use esmith::HostsDB; |
43 |
+use esmith::AccountsDB; |
44 |
+use Net::Ping; |
45 |
+use esmith::util::network qw(:all); |
46 |
+use Socket qw( inet_aton ); |
47 |
+ |
48 |
+ |
49 |
+#our $adb = esmith::AccountsDB->open() or die("Unable to open accounts DB"); |
50 |
+ |
51 |
+my %dhcp_data = (); |
52 |
+ |
53 |
+sub main { |
54 |
+ # |
55 |
+ # Initial page - full summary of parameters etc |
56 |
+ # Initial para from the Wiki. |
57 |
+ # |
58 |
+ my $c = shift; |
59 |
+ %dhcp_data = (); |
60 |
+ do_display($c); |
61 |
+} |
62 |
+ |
63 |
+sub do_display { |
64 |
+ # |
65 |
+ # Front parameters page |
66 |
+ # |
67 |
+ my $c = shift; |
68 |
+ $c->app->log->info( $c->log_req ); |
69 |
+ my $title = $c->l("dhcpd_DHCP manager"); |
70 |
+ my $modul = ''; |
71 |
+ my $trt = "SETTINGS"; |
72 |
+ our $db = esmith::ConfigDB->open() or die("Unable to open Configuration DB"); |
73 |
+ our %sme_conf = $db->get('dhcpd')->props; |
74 |
+ our %smb_conf = $db->get('smb')->props; |
75 |
+ $dhcp_data{trt} = $trt; |
76 |
+ $dhcp_data{"status"} = [[$c->l('dhcpd_ENABLED'),'enabled'], |
77 |
+ [$c->l('dhcpd_DISABLED'),'disabled'] |
78 |
+ ]; |
79 |
+ |
80 |
+ $dhcp_data{"check"} = [[$c->l('dhcpd_ENABLED'),'enabled'], |
81 |
+ [$c->l('dhcpd_DISABLED'),'disabled'] |
82 |
+ ]; |
83 |
+ if (! $sme_conf{'winscustom'} ) { |
84 |
+ $sme_conf{'winscustom'} = 'disabled' ; |
85 |
+ } |
86 |
+ if (! $sme_conf{'dnscustom'} ) { |
87 |
+ $sme_conf{'dnscustom'} = 'disabled' ; |
88 |
+ } |
89 |
+ if ( ! $sme_conf{'leasetime'} ) |
90 |
+ { $sme_conf{'leasetime'} = "86400" ; |
91 |
+ } |
92 |
+ if (! $sme_conf{'gatewaycustom'} ) { |
93 |
+ $sme_conf{'gatewaycustom'} = 'disabled' ; |
94 |
+ } |
95 |
+ # Accumulate parameters for Configuration DB |
96 |
+ $dhcp_data{'params'} = \%sme_conf; |
97 |
+ $dhcp_data{'smbparams'} = \%smb_conf; |
98 |
+ $c->stash( title => $title, |
99 |
+ modul => $modul, |
100 |
+ dhcp_data => \%dhcp_data |
101 |
+ ); |
102 |
+ #die("here"); |
103 |
+ $c->render( template => 'dhcpd' ); |
104 |
+} |
105 |
+ |
106 |
+sub do_leases { |
107 |
+ # |
108 |
+ # Show a table of the leases |
109 |
+ # |
110 |
+ my $c = shift; |
111 |
+ my $title = $c->l("dhcpd_MANAGING_DHCP_CLIENT"); |
112 |
+ my $modul = ''; |
113 |
+ my $trt = "LEASES"; |
114 |
+ $dhcp_data{"check"} = [[$c->l('dhcpd_ENABLED'),'enabled'], |
115 |
+ [$c->l('dhcpd_DISABLED'),'disabled'] |
116 |
+ ]; |
117 |
+ $dhcp_data{trt} = $trt; |
118 |
+ $dhcp_data{"first"} = ''; |
119 |
+ my @leases = get_leases_in_array($c); |
120 |
+ $c->stash( title => $title, modul => $modul, dhcp_data => \%dhcp_data, leases=> \@leases ); |
121 |
+ $c->render( template => 'dhcpd' ); |
122 |
+} |
123 |
+ |
124 |
+ |
125 |
+sub do_winpopup { |
126 |
+ # |
127 |
+ # call to win pop up |
128 |
+ # |
129 |
+ my $c = shift; |
130 |
+ my $title = $c->l("dhcpd_GLOBAL_WINPOPUP"); |
131 |
+ my $modul = ''; |
132 |
+ my $trt = "WINPOPUP"; |
133 |
+ $dhcp_data{trt} = $trt; |
134 |
+ $dhcp_data{"first"} = ''; |
135 |
+ #..... get winpopup details |
136 |
+ $c->stash( title => $title, modul => $modul, dhcp_data => \%dhcp_data ); |
137 |
+ $c->render( template => 'dhcpd' ); |
138 |
+} |
139 |
+ |
140 |
+sub do_scan { |
141 |
+ # |
142 |
+ # call to show scan results |
143 |
+ # |
144 |
+ my $c = shift; |
145 |
+ my $title = $c->l("dhcpd_SCANNING_NETWORK_TITLE"); |
146 |
+ my $modul = ''; |
147 |
+ my $trt = "NETSCAN"; |
148 |
+ $dhcp_data{trt} = $trt; |
149 |
+ $dhcp_data{"first"} = ''; |
150 |
+ # ..... get scan results into dhcp_data |
151 |
+ dhcp_data{"scanresults"} = get_scan_results($c); |
152 |
+ $c->stash( title => $title, modul => $modul, dhcp_data => \%dhcp_data ); |
153 |
+ $c->render( template => 'dhcpd' ); |
154 |
+} |
155 |
+ |
156 |
+sub do_update_config { |
157 |
+ # |
158 |
+ # Update config dhcp parameters |
159 |
+ # called through form submit. |
160 |
+ # |
161 |
+ my $c = shift; |
162 |
+ # Input results are in $c->param(<fieldname>). |
163 |
+ # If parameters do not validate, then return error message. |
164 |
+ # else write into config DB, and... |
165 |
+ # signal-event and ...return ok |
166 |
+ $dhcp_data{"success"} =""; |
167 |
+ my $ret = Main_Save($c); |
168 |
+ if ($ret eq 'ok') { |
169 |
+ $dhcp_data{"success"}="dhcpd_SUCCESSFULLY_SAVED_SETTINGS"; |
170 |
+ } else { |
171 |
+ $dhcp_data{"error"}=$ret; |
172 |
+ } |
173 |
+ do_display($c); |
174 |
+ return; |
175 |
+} |
176 |
+ |
177 |
+sub do_update_check { |
178 |
+ #Just update the check parameter |
179 |
+ my $c = shift; |
180 |
+ my $dhcpd_check = $c->param ('dhcp_check'); |
181 |
+ ###Update SME configuration dbase |
182 |
+ my $dbh_sme = esmith::ConfigDB->open('/home/e-smith/db/configuration'); |
183 |
+ ##Initiate get method --> create record object |
184 |
+ my $sme_record = $dbh_sme->get('dhcpd'); |
185 |
+ $sme_record->set_prop('check' , $dhcpd_check); |
186 |
+ $dhcp_data{"success"}="dhcpd_SUCCESSFULLY_SAVED_SETTINGS"; |
187 |
+ do_display($c); |
188 |
+ return; |
189 |
+} |
190 |
+ |
191 |
+sub Main_Save ($){ |
192 |
+ |
193 |
+ ##Pull CGI object from parameters array |
194 |
+ my $q = shift; |
195 |
+ |
196 |
+ ###Build Hash of config parameters to update from cgi submit |
197 |
+ my $dhcpd_status = $q->param ('dhcp_enable'); |
198 |
+ my $dhcpd_winscustom = $q->param ('dhcp_winscustom'); |
199 |
+ my $dhcpd_check = $q->param ('dhcp_check'); |
200 |
+ my $dhcpd_start = $q->param ('dhcp_start'); |
201 |
+ my $dhcpd_end = $q->param ('dhcp_end'); |
202 |
+ my $dhcpd_winsserver = $q->param ('dhcp_winsserver'); |
203 |
+ my $dhcpd_leasetime = $q->param ('dhcp_leasetime'); |
204 |
+ my $dhcpd_dnscustom = $q->param ('dhcp_dnscustom'); |
205 |
+ my $dhcpd_dns1server = $q->param ('dhcp_dns1server'); |
206 |
+ my $dhcpd_dns2server = $q->param ('dhcp_dns2server'); |
207 |
+ my $dhcpd_dns3server = $q->param ('dhcp_dns3server'); |
208 |
+ my $dhcpd_gatewaycustom = $q->param ('dhcp_gatewaycustom'); |
209 |
+ my $dhcpd_gateway = $q->param ('dhcp_gateway'); |
210 |
+ |
211 |
+ ###Update SME configuration dbase |
212 |
+ my $dbh_sme = esmith::ConfigDB->open('/home/e-smith/db/configuration'); |
213 |
+ |
214 |
+ ##Initiate get method --> create record object |
215 |
+ my $sme_record = $dbh_sme->get('dhcpd'); |
216 |
+ #get localip of server |
217 |
+ my $local_ip = $dbh_sme->get_value('LocalIP'); |
218 |
+ |
219 |
+ ##Set status of service |
220 |
+ $sme_record->set_prop('status', $dhcpd_status); |
221 |
+ $sme_record->set_prop('check' , $dhcpd_check); |
222 |
+ $sme_record->set_prop('winscustom', $dhcpd_winscustom); |
223 |
+ $sme_record->set_prop('leasetime' , $dhcpd_leasetime); |
224 |
+ $sme_record->set_prop('dnscustom' , $dhcpd_dnscustom); |
225 |
+ $sme_record->set_prop('gatewaycustom' , $dhcpd_gatewaycustom); |
226 |
+ |
227 |
+ #checkip to the dhcpserver, perform the save in DB configuration or display an error if value != of a valid ip or if dhcp_start is greater than dhcp_end |
228 |
+ |
229 |
+ |
230 |
+ if ($dhcpd_status eq "enabled") |
231 |
+ { |
232 |
+ if ( isValidIP ($dhcpd_start) && isValidIP ($dhcpd_end)) |
233 |
+ { |
234 |
+ #check if $dhcpd_start is greater than $dhcpd_end and if yes, display an error message. |
235 |
+ |
236 |
+ if (inet_aton($dhcpd_start) ge inet_aton($dhcpd_end)) |
237 |
+ { |
238 |
+ return $q->l('dhcpd_DHCP_START_GREATER_DHCP_END_ERRORS') . ' (' . $dhcpd_start . '/' . $dhcpd_end .')'; |
239 |
+ } |
240 |
+ elsif ( ( (inet_aton($dhcpd_start) le inet_aton($local_ip) ) && ( inet_aton($dhcpd_end)) ge inet_aton($local_ip) ) ) |
241 |
+ { |
242 |
+ #display an error if the range of dhcp server include the ip of the server address |
243 |
+ return $q->l('dhcpd_DHCP_RANGE_MUST_NOT_INCLUDE_SERVER_IP') . ' (' . $local_ip . ')'; |
244 |
+ } |
245 |
+ else |
246 |
+ { |
247 |
+ #set value |
248 |
+ my $dhcpd_start = cleanIP($dhcpd_start); |
249 |
+ my $dhcpd_end = cleanIP($dhcpd_end); |
250 |
+ |
251 |
+ $sme_record->set_prop('end', $dhcpd_end); |
252 |
+ $sme_record->set_prop('start', $dhcpd_start); |
253 |
+ } |
254 |
+ } |
255 |
+ #if $dhcpd_start or $dhcpd_end are not valid ip then display an error |
256 |
+ else |
257 |
+ { |
258 |
+ return $q->l('dhcpd_DHCP_RANGE_WITH_BAD_IP') . ' (' . $dhcpd_start . '/' . $dhcpd_end .')'; |
259 |
+ } |
260 |
+ } |
261 |
+ |
262 |
+ #checkip to the winserver perform the save in DB configuration or display an error if value != of a valid ip |
263 |
+ if ($dhcpd_winscustom eq "enabled") |
264 |
+ { |
265 |
+ |
266 |
+ if ( isValidIP ($dhcpd_winsserver) ) |
267 |
+ { |
268 |
+ #set value |
269 |
+ my $dhcpd_winsserver = cleanIP($dhcpd_winsserver); |
270 |
+ $dbh_sme->set_prop('smb','WINSServer', $dhcpd_winsserver); |
271 |
+ } |
272 |
+ else |
273 |
+ { |
274 |
+ #if $dhcpd_winsserver is not valid ip then display an error |
275 |
+ return $q->l('dhcpd_WINSSERVER_BAD_IP') . ' (' . $dhcpd_winsserver .')'; |
276 |
+ } |
277 |
+ } |
278 |
+ elsif ($dhcpd_winscustom eq "disabled") |
279 |
+ { |
280 |
+ my $delws = $dbh_sme->get('smb'); |
281 |
+ $delws->delete_prop('WINSServer'); |
282 |
+ } |
283 |
+ |
284 |
+ #checkip to the dnsserver custom, perform the save in DB configuration or display an error if value != of a valid ip |
285 |
+ if ($dhcpd_dnscustom eq "enabled") |
286 |
+ { |
287 |
+ #check if $dhcpd_dns1server and ( $dhcpd_dns2server are valid ip or $dhcpd_dns2server = null ) |
288 |
+ if ( isValidIP ($dhcpd_dns1server) && (isValidIP($dhcpd_dns2server) || ( $dhcpd_dns2server eq "") ) && (isValidIP($dhcpd_dns3server) || ( $dhcpd_dns3server eq "") ) ) |
289 |
+ { |
290 |
+ #set value |
291 |
+ my $dhcpd_dns1server = cleanIP($dhcpd_dns1server); |
292 |
+ $sme_record->set_prop('dns1server' , $dhcpd_dns1server); |
293 |
+ my $dhcpd_dns2server = cleanIP($dhcpd_dns2server); |
294 |
+ $sme_record->set_prop('dns2server' , $dhcpd_dns2server); |
295 |
+ my $dhcpd_dns3server = cleanIP($dhcpd_dns3server); |
296 |
+ $sme_record->set_prop('dns3server' , $dhcpd_dns3server); |
297 |
+ } |
298 |
+ else |
299 |
+ { |
300 |
+ ##if $dhcpd_dns1server or $dhcpd_dns2server or $dhcpd_dns3server are not valid ip then display an error |
301 |
+ return $q->l('dhcpd_DNS_SERVER_WITH_BAD_IP') . ' (' . $dhcpd_dns1server . '/' . $dhcpd_dns2server . '/' . $dhcpd_dns3server .')'; |
302 |
+ } |
303 |
+ } |
304 |
+ |
305 |
+ #checkip to the gateway_custom perform the save in DB configuration or display an error if value != of a valid ip |
306 |
+ if ($dhcpd_gatewaycustom eq "enabled") |
307 |
+ { |
308 |
+ if ( isValidIP ($dhcpd_gateway) ) |
309 |
+ { |
310 |
+ #set value |
311 |
+ my $dhcpd_gateway = cleanIP($dhcpd_gateway); |
312 |
+ $sme_record->set_prop('gateway' , $dhcpd_gateway); |
313 |
+ } |
314 |
+ else |
315 |
+ { |
316 |
+ #if $dhcpd_gateway is not valid ip then display an error |
317 |
+ return $q->l('dhcpd_GATEWAY_BAD_IP') . ' (' . $dhcpd_gateway .')'; |
318 |
+ } |
319 |
+ } |
320 |
+ |
321 |
+ |
322 |
+ # - 4 expand templates |
323 |
+ # changed to new sme standard signal-event |
324 |
+ system ("/sbin/e-smith/signal-event","workgroup-update") == 0 |
325 |
+ or die "Error while saving settings: $!"; |
326 |
+ return 'ok'; |
327 |
+ exit; |
328 |
+} |
329 |
+ |
330 |
+ |
331 |
+sub do_delete_all_leases { |
332 |
+ # |
333 |
+ # Delete all the specified lease |
334 |
+ # Called from button at top of leases list panel |
335 |
+ # |
336 |
+ my $c = shift; |
337 |
+ my $ret = delete_all_leases($c); |
338 |
+ if ($ret == 'ok') { |
339 |
+ dhcp_data{"success"}="dhcpd_SUCCESSFULLY_SAVED_SETTINGS"; |
340 |
+ do_leases($c); |
341 |
+ } |
342 |
+ else {dhcp_data{"error"}=$ret;} |
343 |
+ return ; |
344 |
+} |
345 |
+ |
346 |
+sub do_delete_one_lease { |
347 |
+ # |
348 |
+ # Delete the specified lease |
349 |
+ # Called from link in table of leases |
350 |
+ # |
351 |
+ my $c = shift; |
352 |
+ # Lease in $c->param("lease") |
353 |
+ # Validate - if not return error message |
354 |
+ # delete it |
355 |
+ # If deletion not ok return message |
356 |
+ # else return "ok" |
357 |
+ my $ret = delete_lease($c); |
358 |
+ if ($ret == 'ok') { |
359 |
+ dhcp_data{"success"}="dhcpd_SUCCESSFULLY_SAVED_SETTINGS"; |
360 |
+ do_leases($c); |
361 |
+ } |
362 |
+ else {dhcp_data{"error"}=$ret;} |
363 |
+ return ; |
364 |
+} |
365 |
+ |
366 |
+sub get_scan_results { |
367 |
+ my $c = shift; |
368 |
+ #...do it |
369 |
+ return "results"; |
370 |
+} |
371 |
+ |
372 |
+ |
373 |
+sub update_config { |
374 |
+ my $c = shift; |
375 |
+ #...do it |
376 |
+ return "ok"; |
377 |
+} |
378 |
+ |
379 |
+sub delete_one_lease { |
380 |
+ my $c = shift; |
381 |
+ # ...do it |
382 |
+ return "ok"; |
383 |
+} |
384 |
+ |
385 |
+sub delete_all_leases { |
386 |
+ my $c = shift; |
387 |
+ # ...do it |
388 |
+ return "ok"; |
389 |
+} |
390 |
+ |
391 |
+sub get_leases_in_array { |
392 |
+ my $c = shift; |
393 |
+ my @leases = Load_leases($c); |
394 |
+ # ...do it |
395 |
+ return @leases; |
396 |
+} |
397 |
+ |
398 |
+#========================================================================= |
399 |
+# Procedure qui charge le dhcpd.conf |
400 |
+# retourne un tableau contenant les informations |
401 |
+#========================================================================= |
402 |
+sub Load_leases ($){ |
403 |
+ |
404 |
+ my $q = shift; |
405 |
+ #Definition de variable |
406 |
+ use vars qw/ |
407 |
+ @detail $work_line $header /; |
408 |
+ my $name_file = '/var/lib/dhcpd/dhcpd.leases' ; |
409 |
+ our @liste_computer = '' ; |
410 |
+ our $db = esmith::ConfigDB->open() or die("Unable to open Configuration DB"); |
411 |
+ our %sme_conf = $db->get('dhcpd')->props; |
412 |
+ #Ouverture du fichier en lecture seule |
413 |
+ open(FILE,"<$name_file") || die "Read error $name_file, Error: $!" ; |
414 |
+ |
415 |
+ #Parcours du fichier dhcpd.leases |
416 |
+ while (<FILE>) { |
417 |
+ # suppression des commentaires |
418 |
+ if ($_ =~ /^#/) { next; } |
419 |
+ |
420 |
+ #spurresion des lignes vides |
421 |
+ if ($_ =~ /^$/) { next; } |
422 |
+ #supression de la ligne uid de windows |
423 |
+ if ($_ =~ /uid/) { next; } |
424 |
+ #supression de la ligne tstp de XP |
425 |
+ if ($_ =~ /tstp/) { next; } |
426 |
+ #supression de la ligne "binding state active" |
427 |
+ if ($_ =~ /binding/) { next; } |
428 |
+ #supression de la ligne "next binding state" |
429 |
+ if ($_ =~ /next/) { next; } |
430 |
+ #suprresion des commentaire et des ; |
431 |
+ $_ =~ s/\s#.*$//; |
432 |
+ $_ =~ s/(;|{) *$//; |
433 |
+ |
434 |
+ #supression des espace en debut de lignes |
435 |
+ $_ =~ s/^ *\s//; |
436 |
+ |
437 |
+ #Suppression des retours chariot en fin de lignes. |
438 |
+ chomp $_ ; |
439 |
+ |
440 |
+ #Chargement d'un tableau avec le contenu de la ligne. |
441 |
+ (@detail) = split(/ /, $_) ; |
442 |
+ |
443 |
+ #initialisation d'un nouveau poste connect� |
444 |
+ if ($_ =~ /lease/) { |
445 |
+ $work_line = "" ; |
446 |
+ } |
447 |
+ |
448 |
+ $header = shift(@detail); |
449 |
+ $work_line = $work_line . ";" . join(" ",@detail) ; |
450 |
+ |
451 |
+ if ($header =~ /}/) { |
452 |
+ $work_line =~ s/ /;/g; |
453 |
+ $work_line =~ s/^;//; |
454 |
+ $work_line =~ s/"//g; |
455 |
+ $work_line =~ s/;$//; |
456 |
+ #we want the last entry is the first element of the array |
457 |
+ unshift(@liste_computer,$work_line) ; |
458 |
+ } |
459 |
+ } |
460 |
+ close(FILE); |
461 |
+ # Now check if up and extract details |
462 |
+ my @mac = (); |
463 |
+ my @count = (); |
464 |
+ my @results = (); |
465 |
+ my @liste_connected = (); |
466 |
+ foreach (@liste_computer){ |
467 |
+ my @computer = split(/;/, $_) ; |
468 |
+ #we want to sort elements the array by mac address |
469 |
+ $computer[11] = uc($computer[11]) ; |
470 |
+ push @mac, ($computer[11]); |
471 |
+ my @count; |
472 |
+ push @count , (grep /$computer[11]/ , @mac); |
473 |
+ next if (scalar @count > 1); |
474 |
+ #we start the table if it is a valid IP |
475 |
+ if ( $computer[0] ) { |
476 |
+ $computer[12] = uc($computer[12]) ; |
477 |
+ my $datedeb = $computer[2] . "-" . $computer[3] ; |
478 |
+ my $datefin = $computer[5] . "-" . $computer[6] ; |
479 |
+ my $status = 'dhcpd_NOT_CHECKED'; |
480 |
+ #my $status = '<a href=/smanager/dhcpd1'."?state=wake_up&MAC=" . $computer[11] . "&name=" . $computer[12].">".$q->l('dhcpd_NOT_CHECKED')."</a>"; |
481 |
+ if ( $sme_conf{'check'} =~ /enabled/ ) { |
482 |
+ use Net::Ping; |
483 |
+ my($ping_obj) = Net::Ping->new("icmp"); |
484 |
+ # formatage des dates |
485 |
+ $computer[3] = substr($computer[3],0,5); |
486 |
+ $computer[6] = substr($computer[6],0,5); |
487 |
+ if ($ping_obj->ping("$computer[0]")) { |
488 |
+ push(@liste_connected,$computer[12]) ; |
489 |
+ $status = 'dhcpd_ACTIVE_DEVICE'; |
490 |
+ #alimentation de la liste des connect� |
491 |
+ } |
492 |
+ else { $status = 'dhcpd_WAKE_UP_ACTION';} |
493 |
+ #else { $status = '<a href=/smanager/dhcpd1'."?state=wake_up&MAC=" . $computer[11] . "&name=" . $computer[12].">".$q->l('dhcpd_WAKE_UP_ACTION')."</a>"; |
494 |
+ } |
495 |
+ my %ipdetails = (ip=>$computer[0],name=>$computer[12],wol=>$status,start=>$datedeb,end=>$datefin,mac=>$computer[11]); |
496 |
+ push(@results,\%ipdetails); |
497 |
+ } |
498 |
+ else { |
499 |
+ push(@liste_connected,$computer[12]) ; |
500 |
+ } |
501 |
+ } |
502 |
+ return @results; |
503 |
+} |
504 |
+ |
505 |
+sub winpopup{ |
506 |
+ my $c = shift; |
507 |
+ # Message in $c->param("winpopupmsg") |
508 |
+ # .... do it |
509 |
+ return TRUE; |
510 |
+} |
511 |
+ |
512 |
+sub do_wol{ |
513 |
+ my $c = shift; |
514 |
+ my $retVal = Perform_Wake_Up($c); |
515 |
+ if ($retVal) {$dhcp_data{"success"} = $retVal;} |
516 |
+ do_leases($c); |
517 |
+ return TRUE; |
518 |
+} |
519 |
+ |
520 |
+ |
521 |
+#=============================================================================== |
522 |
+#SUBROUTINE: Perform wake UP |
523 |
+#=============================================================================== |
524 |
+sub Perform_Wake_Up($){ |
525 |
+ |
526 |
+ ###Pull CGI object from parameters array |
527 |
+ my $q = shift; |
528 |
+ |
529 |
+ ###Get Mac Adress |
530 |
+ my $mac = uc($q->param('mac')); |
531 |
+ my $name = uc($q->param('name')); |
532 |
+ |
533 |
+ #Send Wake Up to the station |
534 |
+ #Old version obsolete since 1.5.0 - system ("/usr/bin/wol","$mac") ; |
535 |
+ system ("/sbin/ether-wake","$mac") ; |
536 |
+ ###Return action message |
537 |
+ return 'dhcpd_SUCCESSFULLY_CLIENT_WOL_REQUEST'; |
538 |
+} |
539 |
+ |
540 |
+ |
541 |
+1; |
542 |
+ |
543 |
+ |
544 |
\ No newline at end of file |
545 |
diff -urN smeserver-dhcpmanager-2.0.4.old/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Dhcpd/dhcpd_en.lex smeserver-dhcpmanager-2.0.4/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Dhcpd/dhcpd_en.lex |
546 |
--- smeserver-dhcpmanager-2.0.4.old/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Dhcpd/dhcpd_en.lex 1970-01-01 01:00:00.000000000 +0100 |
547 |
+++ smeserver-dhcpmanager-2.0.4/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Dhcpd/dhcpd_en.lex 2022-02-04 11:51:00.000000000 +0000 |
548 |
@@ -0,0 +1,91 @@ |
549 |
+ 'dhcpd_ACTION' => 'Action', |
550 |
+ 'dhcpd_ACTIVE_DEVICE' => 'Active Device', |
551 |
+ 'dhcpd_ALL_OF_THEM' => 'All of them', |
552 |
+ 'dhcpd_CHECK_CLIENT_STATUS' => 'Always check the status of computers (Disabled is much faster)', |
553 |
+ 'dhcpd_CLEAN_ALL_DHCPLEASES' => 'You may want to clean the dhcpd.leases', |
554 |
+ 'dhcpd_CLICK_HERE_TO_MAIN_PANEL' => 'Return to the main panel', |
555 |
+ 'dhcpd_CONNECTED_IP' => 'Show DHCP Clients', |
556 |
+ 'dhcpd_CUSTOM_DNS_STATUS' => 'Custom DNS', |
557 |
+ 'dhcpd_CUSTOM_DNS_TITLE' => 'Enable custom DNS servers.', |
558 |
+ 'dhcpd_CUSTOM_GATEWAY_ADDRESS' => 'Gateway address', |
559 |
+ 'dhcpd_CUSTOM_GATEWAY_STATUS' => 'Custom gateway', |
560 |
+ 'dhcpd_CUSTOM_GATEWAY_TITLE' => 'Enable a custom gateway address.', |
561 |
+ 'dhcpd_CUSTOM_LEASETIME' => 'Custom lease time', |
562 |
+ 'dhcpd_CUSTOM_LEASETIME_TITLE' => 'Set the lease time (default is 86400 seconds).', |
563 |
+ 'dhcpd_CUSTOM_WINSERVER_ADDRESS' => 'WINS Server address', |
564 |
+ 'dhcpd_CUSTOM_WINSERVER_STATUS' => 'WINS Server', |
565 |
+ 'dhcpd_CUSTOM_WINSERVER_TITLE' => 'Enable a WINS Server.', |
566 |
+ 'dhcpd_DHCPD_SETTING_ERRORS' => 'DHCPd Settings ERRORS', |
567 |
+ 'dhcpd_DHCPD_SETTINGS_TITLE' => 'DHCP server settings', |
568 |
+ 'dhcpd_DHCPD_TITLE' => 'DHCP Manager', |
569 |
+ 'dhcpd_DHCP_END' => 'DHCP End', |
570 |
+ 'dhcpd_DHCP manager' => 'DHCP Manager', |
571 |
+ 'dhcpd_DHCP_RANGE_MUST_NOT_INCLUDE_SERVER_IP' =>'Incorrect range of IPs, the range of IP address allocation must not include the server address, Update unsuccessfull', |
572 |
+ 'dhcpd_DHCP_RANGE_WITH_BAD_IP' => 'Incorrect IP in the DHCP range, Update unsuccessfull', |
573 |
+ 'dhcpd_DHCP_START' => 'DHCP Start', |
574 |
+ 'dhcpd_DHCP_START_GREATER_DHCP_END_ERRORS' =>'Incorrect range of IPs, the DHCP Start is greater than the DHCP End , Update unsuccessfull', |
575 |
+ 'dhcpd_DISABLED' => 'Disabled', |
576 |
+ 'dhcpd_DNS_SERVER_WITH_BAD_IP' => 'Incorrect IP for DNS servers, Update unsuccessfull', |
577 |
+ 'dhcpd_DO_YOU_WANT_TO_SENT' => 'Do you want to send this message to', |
578 |
+ 'dhcpd_ENABLED' => 'Enabled', |
579 |
+ 'dhcpd_END_DATE' => 'End Date', |
580 |
+ 'dhcpd_ERROR_WHILE_REMOVING_ALL_LEASES' => 'Error while removing all dhcpd Leases', |
581 |
+ 'dhcpd_ERROR_WHILE_SAVING_SETTINGS' => 'Error while saving settings', |
582 |
+ 'dhcpd_GATEWAY_BAD_IP' => 'Incorrect IP for Gateway, Update unsuccessfull', |
583 |
+ 'dhcpd_GLOBAL_WINPOPUP' => 'Send Global Netsend WinPopup', |
584 |
+ 'dhcpd_GLOBAL_WINPOPUP_TITLE' => 'Send a global WinPopup with the Net send protocol', |
585 |
+ 'dhcpd_IP' => 'Ip Address', |
586 |
+ 'dhcpd_MAC_ADDRESS' => 'MAC Address', |
587 |
+ 'dhcpd_MANAGING_DHCP_CLIENT' => 'Managing DHCP clients', |
588 |
+ 'dhcpd_NETWORK_NAME' => 'Network Name', |
589 |
+ 'dhcpd_NETWORK_VALUES_FOUND' => 'Please wait .... Your subnet and your netmask appear to be :', |
590 |
+ 'dhcpd_NO_CONNECTED_COMPUTERS' => 'There are no connected computers', |
591 |
+ 'dhcpd_NOT_CHECKED' => 'Not Checked...', |
592 |
+ 'dhcpd_PRIMARY_DNS_ADDRESS' => 'Primary DNS', |
593 |
+ 'dhcpd_REFRESH_CONNECTED_IP_LIST' => 'You may want to refresh this list ?', |
594 |
+ 'dhcpd_REFRESH' => 'Refresh the list', |
595 |
+ 'dhcpd_REMOVE_ACTION' => 'Remove...', |
596 |
+ 'dhcpd_REMOVE_A_DHCP_LEASE_ACTION' => 'You are about to remove a client from the dhcpd.leases file.', |
597 |
+ 'dhcpd_REMOVE_A_DHCP_LEASE' => 'Remove a DHCP lease', |
598 |
+ 'dhcpd_ARE_YOU_SURE' => 'are you sure ?', |
599 |
+ 'dhcpd_REMOVE_A_DHCP_LEASE_TITLE' => 'Removing a DHCP Lease', |
600 |
+ 'dhcpd_REMOVE_ALL_LEASES_ACTION' => 'Remove all dhcpd leases', |
601 |
+ 'dhcpd_REMOVE_ALL_LEASES' => 'Remove all leases', |
602 |
+ 'dhcpd_REMOVE_DHCP_LEASE_TITLE' => 'Removing all DHCP Lease', |
603 |
+ 'dhcpd_REMOVE_DHCP_LEASE_WARNING' => 'Remove all entries in dhcpd.leases may cause issues', |
604 |
+ 'dhcpd_REMOVE' => 'Remove', |
605 |
+ 'dhcpd_SAVE/RESTART' => 'Save/Restart', |
606 |
+ 'dhcpd_SAVE_TITLE' => 'After changing settings above, you must save and restart dhcpd.', |
607 |
+ 'dhcpd_SCANNING_NETWORK_TITLE' => 'Scanning your network, the time needed depends of your subnet mask', |
608 |
+ 'dhcpd_SCAN_YOUR_NETWORK' => 'Scan your network', |
609 |
+ 'dhcpd_SCAN_YOUR_NETWORK_TITLE' => 'Scan your network to show active devices :', |
610 |
+ 'dhcpd_SECONDARY_DNS_ADDRESS' => 'Secondary DNS', |
611 |
+ 'dhcpd_SENDING_A_WINPOPUP' => 'Sending a WinPopup', |
612 |
+ 'dhcpd_SENDING_A_WINPOPUP_TO' => 'You are about to send a WinPopup to ', |
613 |
+ 'dhcpd_SEND_WINPOPUP_TO' => 'Send a WinPopup to', |
614 |
+ 'dhcpd_SHOW_CONNECTED_IP_TITLE' => 'Show all devices connected to the dhcpd server :', |
615 |
+ 'dhcpd_START_DATE' => 'Start Date', |
616 |
+ 'dhcpd_STATUS_CLICK_FOR_WOL' => 'Status - click for WOL', |
617 |
+ 'dhcpd_STATUS_DHCP_SERVER' => 'State of DHCPD', |
618 |
+ 'dhcpd_STATUS_REPORT' => 'Operation status report :', |
619 |
+ 'dhcpd_SUCCESSFULLY_CLIENT_WOL_REQUEST' =>'Successfull request to wake up the client. The computer may take time to wake up.', |
620 |
+ 'dhcpd_SUCCESSFULLY_DELETED_THE_CLIENT' => 'Successfully deleted the client in dhcpd.leases : ', |
621 |
+ 'dhcpd_SUCCESSFULLY_REMOVED_ALL_LEASES' => 'Successfully deleted all leases.', |
622 |
+ 'dhcpd_SUCCESSFULLY_SAVED_SETTINGS' => 'Successfully saved settings', |
623 |
+ 'dhcpd_SUCCESSFULLY_SENT_MESSAGE' => 'Successfully sent message popup to', |
624 |
+ 'dhcpd_TERTIARY_DNS_ADDRESS' => 'Tertiary DNS', |
625 |
+ 'dhcpd_WAKE_UP_ACTION' => '<font color="red">Wake-Up...</font>', |
626 |
+ 'dhcpd_WAKE_UP' => 'Wake UP', |
627 |
+ 'dhcpd_WAKING_A_REMOTE_COMPUTER_ACTION' => 'Are you sure you want to wake on lan the client : ', |
628 |
+ 'dhcpd_WAKING_A_REMOTE_COMPUTER_TITLE' => 'Waking Up a remote computer', |
629 |
+ 'dhcpd_WAKING_A_REMOTE_COMPUTER' => 'You are about to wake up a remote computer.', |
630 |
+ 'dhcpd_WARNING_NO_WINPOPUP_GARANTY' =>'Warning, there is no guarantee that the popup will appear on the remote computer.', |
631 |
+ 'dhcpd_WINPOPUP_ACTION' => 'WinPopup...', |
632 |
+ 'dhcpd_WINSSERVER_BAD_IP' => 'Incorrect IP for WINS Server, Update unsuccessfull', |
633 |
+ 'dhcpd_WRITE_YOUR_MESSAGE' => 'Write your message here', |
634 |
+ 'dhcpd_YOUR_MESSAGE' => 'Your message', |
635 |
+ 'dhcpd_REMOVE_DHCP_LEASE_WARNING2' => 'The lease file is a log-structured file - whenever a lease changes, the |
636 |
+ contents of that lease are written to the end of the file. This means that it is entirely possible for there to be two |
637 |
+ or more declarations of the same lease in the lease file at the same |
638 |
+ time. In that case, the instance of that particular lease that |
639 |
+ appears last in the file is the one that is in effect.', |
640 |
diff -urN smeserver-dhcpmanager-2.0.4.old/root/usr/share/smanager/themes/default/templates/dhcpd.html.ep smeserver-dhcpmanager-2.0.4/root/usr/share/smanager/themes/default/templates/dhcpd.html.ep |
641 |
--- smeserver-dhcpmanager-2.0.4.old/root/usr/share/smanager/themes/default/templates/dhcpd.html.ep 1970-01-01 01:00:00.000000000 +0100 |
642 |
+++ smeserver-dhcpmanager-2.0.4/root/usr/share/smanager/themes/default/templates/dhcpd.html.ep 2022-03-09 11:51:00.000000000 +0000 |
643 |
@@ -0,0 +1,211 @@ |
644 |
+% layout 'default', title => "Sme server 2 - DHCP Manager", share_dir => './'; |
645 |
+ |
646 |
+% content_for 'module' => begin |
647 |
+ |
648 |
+<div id="module" class="module dhcpman-panel"> |
649 |
+ |
650 |
+ % if ($config->{debug} == 1) { |
651 |
+ <p> |
652 |
+ %= dumper $c->current_route |
653 |
+ </p> |
654 |
+ % } |
655 |
+ |
656 |
+ <h1><%=$title%></h1> |
657 |
+ %= $modul |
658 |
+ |
659 |
+ %if ($dhcp_data->{first}) { |
660 |
+ <br><p> |
661 |
+ %=$c->render_to_string(inline =>$c->l($dhcp_data->{first})) |
662 |
+ </p> |
663 |
+ |
664 |
+ %} elsif ($dhcp_data->{success}) { |
665 |
+ <div class='sme-border'> |
666 |
+ <h2> Operation Status Report - success</h2><p> |
667 |
+ <font color=green> |
668 |
+ %= $c->l($dhcp_data->{success}); |
669 |
+ </font> |
670 |
+ </p> |
671 |
+ </div> |
672 |
+ |
673 |
+ %} elsif ($dhcp_data->{error}) { |
674 |
+ <div class='sme-error'> |
675 |
+ <h2> Operation Status Report - error</h2><p> |
676 |
+ <font color=red> |
677 |
+ %= $c->l($dhcp_data->{error}); |
678 |
+ </font> |
679 |
+ </p> |
680 |
+ </div> |
681 |
+ |
682 |
+ %} elsif ($dhcp_data->{error}) { |
683 |
+ <div class='sme-warning'> |
684 |
+ <h2> Operation Status Report - warning</h2><p> |
685 |
+ <font color=orange> |
686 |
+ %= $c->l($dhcp_data->{error}); |
687 |
+ </font> |
688 |
+ </p> |
689 |
+ </div> |
690 |
+ |
691 |
+ %} |
692 |
+ |
693 |
+ % if ($dhcp_data->{trt} eq 'LEASES') { |
694 |
+ %= include 'partials/_dhcpd_leases' |
695 |
+ %} elsif ($dhcp_data->{trt} eq 'WINPOPUP') { |
696 |
+ %= include 'partials/_dhcpd_winpopup' |
697 |
+ %} elsif ($dhcp_data->{trt} eq 'SCAN') { |
698 |
+ %= include 'partials/_dhcpd_scan' |
699 |
+ %} else { #PARAMS |
700 |
+ % my $ip_regex = '^((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$'; |
701 |
+ <table><tr><td> |
702 |
+ %= button_to $c->l('dhcpd_CONNECTED_IP') => '/dhcpd1', onclick=>"showSpinner()", id=>"scanLeases" |
703 |
+ <button class ="btn btn-primary spinnerButtonOverlay" type = "submit" id="load" style="display:true"> |
704 |
+ Scanning <!--%= $c->l('dhcpd_CONNECTED_IP')--> |
705 |
+ <span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> |
706 |
+ </button> |
707 |
+ </td><td> |
708 |
+ %= button_to $c->l('dhcpd_SCAN_YOUR_NETWORK') => '/dhcpd3' |
709 |
+ </td><td> |
710 |
+ %= button_to $c->l('dhcpd_GLOBAL_WINPOPUP') => '/dhcpd2' |
711 |
+ <td> |
712 |
+ </tr> |
713 |
+ </table> |
714 |
+ <hr /> |
715 |
+ <h2> |
716 |
+ %= $c->l("dhcpd_DHCPD_SETTINGS_TITLE") |
717 |
+ </h2> |
718 |
+ % my $btn = l('dhcpd_SAVE/RESTART'); |
719 |
+ %= form_for '/dhcpd5' => (method => 'POST') => begin |
720 |
+ <span class=label> |
721 |
+ %=l 'dhcpd_CHECK_CLIENT_STATUS' |
722 |
+ </span><span class=data> |
723 |
+ % param dhcp_check=>$dhcp_data->{"params"}->{"check"}; |
724 |
+ %=select_field dhcp_check=>$dhcp_data->{"check"} |
725 |
+ </span><br> |
726 |
+ <br /> |
727 |
+ <span class=label> |
728 |
+ %=l 'dhcpd_STATUS_DHCP_SERVER' |
729 |
+ </span><span class=data> |
730 |
+ % param dhcp_enable=>$dhcp_data->{"params"}->{"status"}; |
731 |
+ %=select_field dhcp_enable=>$dhcp_data->{"status"} |
732 |
+ </span><br> |
733 |
+ |
734 |
+ <span class=label> |
735 |
+ %=l 'dhcpd_DHCP_START' |
736 |
+ </span><span class=data> |
737 |
+ % param dhcp_start=>$dhcp_data->{"params"}->{"start"}; |
738 |
+ %=text_field 'dhcp_start',minlength=>'7',maxlength=>"15",size=>"15",placeholder=>"nnn.nnn.nnn.nnn", pattern=>"$ip_regex" |
739 |
+ </span><br> |
740 |
+ |
741 |
+ <span class=label> |
742 |
+ %=l 'dhcpd_DHCP_END' |
743 |
+ </span><span class=data> |
744 |
+ % param dhcp_end=>$dhcp_data->{"params"}->{"end"}; |
745 |
+ %=text_field 'dhcp_end',minlength=>'7',maxlength=>"15",size=>"15",placeholder=>"nnn.nnn.nnn.nnn", pattern=>"$ip_regex" |
746 |
+ </span><br><br /> |
747 |
+ |
748 |
+ %= $c->l("dhcpd_CUSTOM_WINSERVER_TITLE"); |
749 |
+ <br /> |
750 |
+ |
751 |
+ <span class=label> |
752 |
+ %=l 'dhcpd_CUSTOM_WINSERVER_STATUS' |
753 |
+ </span><span class=data> |
754 |
+ % param dhcp_winscustom=>$dhcp_data->{"params"}->{"winscustom"}; |
755 |
+ %=select_field dhcp_winscustom=>$dhcp_data->{"status"} |
756 |
+ </span><br> |
757 |
+ |
758 |
+ <span class=label> |
759 |
+ %=l 'dhcpd_CUSTOM_WINSERVER_ADDRESS' |
760 |
+ </span><span class=data> |
761 |
+ % param dhcp_winsserver=>$dhcp_data->{"smbparams"}->{"WINSServer"}; |
762 |
+ %=text_field 'dhcp_winsserver' ,minlength=>'7',maxlength=>"15",size=>"15",placeholder=>"nnn.nnn.nnn.nnn", pattern=>"$ip_regex" |
763 |
+ </span><br><br /> |
764 |
+ |
765 |
+ %= $c->l("dhcpd_CUSTOM_DNS_TITLE"); |
766 |
+ <br /> |
767 |
+ <span class=label> |
768 |
+ %=l 'dhcpd_CUSTOM_DNS_STATUS' |
769 |
+ </span><span class=data> |
770 |
+ % param dhcp_dnscustom=>$dhcp_data->{"params"}->{"dnscustom"}; |
771 |
+ %=select_field dhcp_dnscustom=>$dhcp_data->{"status"} |
772 |
+ </span><br> |
773 |
+ |
774 |
+ <span class=label> |
775 |
+ %=l 'dhcpd_PRIMARY_DNS_ADDRESS' |
776 |
+ </span><span class=data> |
777 |
+ % param dhcp_dns1server=>$dhcp_data->{"params"}->{"dns1server"}; |
778 |
+ %=text_field 'dhcp_dns1server' ,minlength=>'7',maxlength=>"15",size=>"15",placeholder=>"nnn.nnn.nnn.nnn", pattern=>"$ip_regex" |
779 |
+ </span><br> |
780 |
+ |
781 |
+ <span class=label> |
782 |
+ %=l 'dhcpd_SECONDARY_DNS_ADDRESS' |
783 |
+ </span><span class=data> |
784 |
+ % param dhcp_dns2server=>$dhcp_data->{"params"}->{"dns2server"}; |
785 |
+ %=text_field 'dhcp_dns2server' ,minlength=>'7',maxlength=>"15",size=>"15",placeholder=>"nnn.nnn.nnn.nnn", pattern=>"$ip_regex" |
786 |
+ </span><br> |
787 |
+ |
788 |
+ <span class=label> |
789 |
+ %=l 'dhcpd_TERTIARY_DNS_ADDRESS' |
790 |
+ </span><span class=data> |
791 |
+ % param dhcp_dns3server=>$dhcp_data->{"params"}->{"dns3server"}; |
792 |
+ %=text_field 'dhcp_dns3server' ,minlength=>'7',maxlength=>"15",size=>"15",placeholder=>"nnn.nnn.nnn.nnn", pattern=>"$ip_regex" |
793 |
+ </span><br> |
794 |
+ |
795 |
+ %= $c->l("dhcpd_CUSTOM_GATEWAY_TITLE"); |
796 |
+ <br /> |
797 |
+ <span class=label> |
798 |
+ %=l 'dhcpd_CUSTOM_GATEWAY_STATUS' |
799 |
+ </span><span class=data> |
800 |
+ % param dhcp_gatewaycustom=>$dhcp_data->{"params"}->{"gatewaycustom"}; |
801 |
+ %=select_field dhcp_gatewaycustom=>$dhcp_data->{"status"} |
802 |
+ </span><br> |
803 |
+ |
804 |
+ <span class=label> |
805 |
+ %=l 'dhcpd_CUSTOM_GATEWAY_ADDRESS' |
806 |
+ </span><span class=data> |
807 |
+ % param dhcp_gateway=>$dhcp_data->{"params"}->{"gateway"}; |
808 |
+ %=text_field 'dhcp_gateway' ,minlength=>'7',maxlength=>"15",size=>"15",placeholder=>"nnn.nnn.nnn.nnn", pattern=>"$ip_regex" |
809 |
+ </span><br><br /> |
810 |
+ %= $c->l("dhcpd_CUSTOM_LEASETIME_TITLE"); |
811 |
+ <br /> |
812 |
+ <span class=label> |
813 |
+ %=l 'dhcpd_CUSTOM_LEASETIME' |
814 |
+ </span><span class=data> |
815 |
+ % param dhcp_leasetime=>$dhcp_data->{"params"}->{"leasetime"}; |
816 |
+ %=number_field 'dhcp_leasetime' |
817 |
+ </span><br><br /> |
818 |
+ %= submit_button "$btn", class => 'action' |
819 |
+ % end |
820 |
+ %} |
821 |
+ |
822 |
+</div> |
823 |
+ |
824 |
+%= javascript begin |
825 |
+ document.getElementById("load").style.display="none"; |
826 |
+ function showSpinner(){ |
827 |
+ document.getElementById("scanLeases").style.display="none"; |
828 |
+ document.getElementById("load").style.display="inline"; |
829 |
+ } |
830 |
+%end |
831 |
+ |
832 |
+%= stylesheet begin |
833 |
+.spinnerButtonOverlay, |
834 |
+.spinnerButtonOverlay:hover, |
835 |
+.spinnerButtonOverlay:any-link , |
836 |
+.spinnerButtonOverlay:focus , |
837 |
+.spinnerButtonOverlay:active { |
838 |
+ appearance: auto; |
839 |
+ user-select: none; |
840 |
+ align-items: flex-start; |
841 |
+ cursor: default; |
842 |
+ box-sizing: border-box; |
843 |
+ background-color: #efefef; |
844 |
+ color: black; |
845 |
+ padding: 1px 6px; |
846 |
+ border-width: 2px; |
847 |
+ border-style: outset; |
848 |
+ border-color: darkgrey; |
849 |
+ border-image: initial; |
850 |
+} |
851 |
+ |
852 |
+%end |
853 |
+ |
854 |
+%end |
855 |
diff -urN smeserver-dhcpmanager-2.0.4.old/root/usr/share/smanager/themes/default/templates/partials/_dhcpd_leases.html.ep smeserver-dhcpmanager-2.0.4/root/usr/share/smanager/themes/default/templates/partials/_dhcpd_leases.html.ep |
856 |
--- smeserver-dhcpmanager-2.0.4.old/root/usr/share/smanager/themes/default/templates/partials/_dhcpd_leases.html.ep 1970-01-01 01:00:00.000000000 +0100 |
857 |
+++ smeserver-dhcpmanager-2.0.4/root/usr/share/smanager/themes/default/templates/partials/_dhcpd_leases.html.ep 2022-03-09 10:06:00.000000000 +0000 |
858 |
@@ -0,0 +1,113 @@ |
859 |
+<div id='dhcpd-leases'> |
860 |
+ <table><tr><td> |
861 |
+ %= button_to $c->l('dhcpd_REFRESH') => '/dhcpd1', onclick=>"showSpinner()", id=>"scanLeases" |
862 |
+ <button class ="btn btn-primary spinnerButtonOverlay" type = "submit" id="load" style="display:true"> |
863 |
+ Scanning <!--%= $c->l('dhcpd_CONNECTED_IP')--> |
864 |
+ <span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> |
865 |
+ </button> |
866 |
+ |
867 |
+ </td><td> |
868 |
+ %= button_to $c->l('dhcpd_REMOVE_ALL_LEASES') => '/dhcpd4' |
869 |
+ </td> |
870 |
+ </tr> |
871 |
+ </table> |
872 |
+ <hr /> |
873 |
+ % my $btn = l('dhcpd_SAVE/RESTART'); |
874 |
+ %= form_for '/dhcpd10' => (method => 'POST') => begin |
875 |
+ <span class=label> |
876 |
+ %=l 'dhcpd_CHECK_CLIENT_STATUS' |
877 |
+ </span><span class=data> |
878 |
+ % param dhcp_check=>$dhcp_data->{"params"}->{"check"}; |
879 |
+ %=select_field dhcp_check=>$dhcp_data->{"check"} |
880 |
+ </span><br> |
881 |
+ <br /> |
882 |
+ %= $c->l("dhcpd_SAVE_TITLE"); |
883 |
+ <br /> |
884 |
+ %= submit_button "$btn", class => 'action' |
885 |
+ % end |
886 |
+ <br> |
887 |
+ <table class="sme-border table-sort"><tbody> |
888 |
+ <tr> |
889 |
+ <th class='sme-border'> |
890 |
+ %=l 'dhcpd_IP' |
891 |
+ </th> |
892 |
+ <th class='sme-border'> |
893 |
+ %=l 'dhcpd_NETWORK_NAME' |
894 |
+ </th> |
895 |
+ <th class='sme-border'> |
896 |
+ %=l 'dhcpd_STATUS_CLICK_FOR_WOL' |
897 |
+ </th> |
898 |
+ <th class='sme-border'> |
899 |
+ %=l('dhcpd_START_DATE',"") |
900 |
+ </th> |
901 |
+ <th class='sme-border'> |
902 |
+ %=l 'dhcpd_END_DATE' |
903 |
+ </th> |
904 |
+ <th class='sme-border'> |
905 |
+ %=l 'dhcpd_MAC_ADDRESS' |
906 |
+ </th> |
907 |
+ <th class='sme-border' colspan=2> |
908 |
+ %=l 'dhcpd_ACTION' |
909 |
+ </th> |
910 |
+ </tr> |
911 |
+ % foreach my $ip (@$leases) { |
912 |
+ <tr> |
913 |
+ %= t td => (class => 'sme-border') => $ip->{ip} |
914 |
+ %= t td => (class => 'sme-border') => $ip->{name} |
915 |
+ <td class='sme-border'> |
916 |
+ % if ($ip->{wol} =~ /ACTIVE/) { |
917 |
+ <center><%==l $ip->{wol}%></center> |
918 |
+ %} else { |
919 |
+ <a href="/smanager/dhcpd9??state=wake_up&MAC=<%= $ip->{mac}%>&name=<%= $ip->{name}%>" onclick="Wol_confirm(event,'<%=$c->l('dhcpd_WAKING_A_REMOTE_COMPUTER')%>',this);"><center><%==l $ip->{wol}%></center></a> |
920 |
+ %} |
921 |
+ </td> |
922 |
+ %= t td => (class => 'sme-border') => $ip->{start} |
923 |
+ %= t td => (class => 'sme-border') => $ip->{end} |
924 |
+ %= t td => (class => 'sme-border') => $ip->{mac} |
925 |
+ <td class = 'sme-border'> |
926 |
+ <a href="/smanager/dhcpd6?trt=DEL&ip=<%= $ip->{ip}%>" onclick="Remove_lease_confirm(event,'<%=$c->l('dhcpd_REMOVE_A_DHCP_LEASE_ACTION')%>',this);"><center><%=l 'dhcpd_REMOVE'%></center></a> |
927 |
+ </td><td class = 'sme-border'> |
928 |
+ <a href="/smanager/dhcpd8?trt=WIN&ip=<%= $ip->{ip}%>" onclick="Winpop_confirm(event,'<%=$c->l('dhcpd_SENDING_A_WINPOPUP')%>',this);"><center><%=l 'dhcpd_WINPOPUP_ACTION'%></center></a> |
929 |
+ </td> |
930 |
+ </tr> |
931 |
+ %} |
932 |
+ </tbody> |
933 |
+ </table> |
934 |
+ %= hidden_field "hiddenmsg"=>"", id=>"hiddenmsg" |
935 |
+ <br /> |
936 |
+ %= button_to $c->l('dhcpd_CLICK_HERE_TO_MAIN_PANEL') => '/dhcpd' |
937 |
+ |
938 |
+ %= javascript begin |
939 |
+ function Wol_confirm(event,msg,current){ |
940 |
+ const getMAC = /.*MAC\=(.*)\&name.*/; |
941 |
+ var MAC = current.href.match(getMAC)[1]; |
942 |
+ if (confirm(msg+": MAC: "+MAC)) |
943 |
+ { return true;} |
944 |
+ else {event.preventDefault();return false;} |
945 |
+ } |
946 |
+ |
947 |
+ function Winpop_confirm(event,msg,current){ |
948 |
+ const getIP = /.*ip\=(.*)/; |
949 |
+ var IP = ": IP: "+current.href.match(getIP)[1]; |
950 |
+ msg = msg.replace("$",IP); |
951 |
+ var retVal = prompt(msg); |
952 |
+ if (retVal) { |
953 |
+ //Write it away in a hidden field |
954 |
+ $hidden = document.getElementById("hiddenMsg"); |
955 |
+ $hidden.value = retVal; |
956 |
+ return true; |
957 |
+ } else {event.preventDefault();return false;} |
958 |
+ } |
959 |
+ |
960 |
+ function Remove_lease_confirm(event,msg,current){ |
961 |
+ const getIP = /.*ip\=(.*)/; |
962 |
+ var IP = current.href.match(getIP)[1]; |
963 |
+ if (prompt(msg+" IP: "+IP)) |
964 |
+ { return true;} |
965 |
+ else {event.preventDefault();return false;} |
966 |
+ } |
967 |
+ |
968 |
+ %end |
969 |
+ |
970 |
+ |
971 |
+</div> |
972 |
\ No newline at end of file |