4 require './inetd-lib.pl';
5 &error_setup($text{'error_saverpc'});
9 $in{name} =~ /^[A-z][A-z0-9\_\-]+$/ ||
10 &error(&text('error_invalidprgname', $in{name}));
11 $in{number} =~ /^[0-9]+$/ ||
12 &error(&text('error_prgnum', $in{number}));
14 $in{vfrom} =~ /^[0-9]+$/ ||
15 &error("$in{vfrom} ");
16 if ($in{vto} eq "") { $in{vto} = $in{vfrom}; }
17 $in{vto} =~ /^[0-9]+$/ ||
18 &error(&text('error_invalidver', $in{vto}));
19 if ($in{vto} < $in{vfrom}) {
20 $tmp = $in{vfrom}; $in{vfrom} = $in{vto}; $in{vto} = $tmp;
22 if ($in{protocols} eq "") {
23 &error(&text('error_noprotocol'));
25 if ((!$in{internal}) | ($config{'no_internal'})) {
26 $in{program} =~ /^\/.*/ ||
27 &error(&text('error_invalidname', $in{program}));
28 if ($in{'act'} == 2) {
31 &error(&text('error_notexist', $in{program}));
33 &error(&text('error_ntexecutable',$in{program}));
36 $in{args} =~ /^\S+/ ||
37 &error(&text('error_invalidcmd', $in{args}));
39 $in{'user'} || &error(&text('error_nouser'));
42 @rargs = ($in{'name'}, $in{'number'}, $in{'aliases'});
43 $vers = ($in{vfrom} == $in{vto} ? $in{vfrom} : "$in{vfrom}-$in{vto}");
44 $prots = join(',', split(/\0/, $in{protocols}));
45 @iargs = ($in{'act'} == 2, "$in{name}/$vers", $in{type}, "rpc/$prots");
46 if ($config{extended_inetd}) {
47 push(@iargs, ($in{permin_def} ? $in{wait} : "$in{wait}.$in{permin}"));
48 push(@iargs, ($in{group} ? "$in{user}.$in{group}" : $in{user}));
51 push(@iargs, $in{wait});
52 push(@iargs, $in{user});
54 if ((!$config{'no_internal'}) & ($in{internal})) {
55 push(@iargs, "internal", undef);
57 elsif (($config{'no_internal'}) & ($in{internal})) {
58 &error(&text('error_invalidcmd', $in{args}));
61 push(@iargs, ($in{'qm'} ? "?" : "").$in{program});
62 push(@iargs, $in{args});
67 @inets = &list_inets();
69 if ($r->[1] eq $rargs[0]) { $same_name = $r; }
70 if ($r->[2] == $rargs[1]) { $same_prog = $r; }
73 if ($in{'rpos'} =~ /\d/) {
74 # Changing a program (and maybe inetd entry)
75 @old_rpc = @{$rpcs[$in{'rpos'}]};
76 if ($in{'ipos'} =~ /\d/) {
77 @old_inet = @{$inets[$in{'ipos'}]};
79 if ($same_name && $old_rpc[1] ne $rargs[0]) {
80 &error(&text('error_prgexist', $rargs[0]));
82 if ($same_prog && $old_rpc[2] ne $rargs[1]) {
83 &error(&text('error_prginuse', $rargs[1]));
85 &modify_rpc($old_rpc[0], @rargs);
86 if ($in{'act'} && @old_inet) {
88 &modify_inet($old_inet[0], @iargs, $old_inet[10]);
90 elsif ($in{'act'} && !@old_inet) {
94 elsif (!$in{'act'} && @old_inet) {
96 &delete_inet($old_inet[0], $old_inet[10]);
98 &unlock_inetd_files();
99 &webmin_log("modify", "rpc", $rargs[0],
100 { 'name' => $rargs[0], 'number' => $rargs[1],
101 'active' => $iargs[0],
102 'user' => $iargs[5], 'wait' => $iargs[4],
103 'prog' => $in{'act'} ? join(" ", @iargs[6..@iargs-1])
107 # Creating a new program
109 &error(&text('error_prgexist', $rargs[0]));
112 &error(&text('error_prginuse', $rargs[1]));
115 foreach $i (@inets) {
116 if ($i->[2] && $i->[3] eq $rargs[0]) {
117 &error(&text('error_prgexist', $rargs[0]));
122 if ($in{'act'}) { &create_inet(@iargs); }
123 &unlock_inetd_files();
124 &webmin_log("create", "rpc", $rargs[0],
125 { 'name' => $rargs[0], 'number' => $rargs[1],
126 'active' => $iargs[0],
127 'user' => $iargs[5], 'wait' => $iargs[4],
128 'prog' => $in{'act'} ? join(" ", @iargs[6..@iargs-1])