Files
mars-smart/apply.pl
Mario Fetka bb9392b9b0 Add smart
2026-04-21 04:52:41 +02:00

388 lines
8.6 KiB
Perl

#
# SMArT
#
# Apply changes
#
# Copyright 2001 Wilmer van der Gaast (lintux@lintux.cx)
#
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#
sub handle_request()
{
if( $c[1] eq 'general' )
{
setc( 2, server_name );
setc( 3, internal_net );
setc( 16, test );
setc( 210, timing_down );
setc( 211, timing_warn );
delconfigline( 6 );
if( $p{version} ne '' )
{
if( $p{burst_enabled} eq 'on' )
{ addconfigline( '6 ' . $p{version} . ' 1' ); }
else
{ addconfigline( '6 ' . $p{version} . ' 0' ); }
}
delconfigline( 30 );
if( $p{burst_read} ne '' )
{ addconfigline( '30 ' . $p{burst_read} . ' ' . $p{burst_write} ); }
}
elsif( $c[1] eq 'dirs' )
{
setc( 40, path_cache );
setc( 41, share_lock );
setc( 42, spool );
setc( 45, bindery );
setc( 46, attribute );
setc( 47, trustee );
}
elsif( $c[1] eq 'configh' )
{
setc( 60, max_conn );
setc( 61, max_vol );
setc( 63, max_dirbase );
if( $p{mmap} eq 'on' )
{ $p{mmap} = 1; }
else
{ $p{mmap} = 0; }
setc( 68, mmap );
setc( 69, sap );
setc( 70, net_serial );
setc( 71, net_app );
}
elsif( $c[1] eq 'security' )
{
setc( 7, encrypt );
delconfigline( 9 );
if( $p{creat_dir} ne '' )
{ addconfigline( '9 ' . $p{creat_dir} . ' ' . $p{creat_file} ); }
}
elsif( $c[1] eq 'susers' )
{
setc( 10, guest_group );
setc( 11, guest_user );
delconfigline( 12 );
if( ( $p{root_user} ne '' ) and ( $p{root_name} ne '' ) )
{ addconfigline( '12 ' . $p{root_name} . ' ' . $p{root_user} . ' ' . $p{root_password} ); }
delconfigline( 15 );
if( $p{map} ne '' )
{ addconfigline( '15 ' . $p{map} . ' ' . $p{map_password} ); }
}
elsif( $c[1] eq 'volumes' )
{
if( $c[2] ne '' )
{
delconfigline( '1 ' . $c[2] );
}
if( $p{name} ne '' )
{
cbc( 'm' );
cbc( 'n' );
cbc( 'o' );
cbc( 'p' );
cbc( 'r' );
cbc( 'O' );
cbc( 'N' );
addconfigline( '1 ' . $p{name} . ' ' . $p{path} . ' ' . $p{case} . $p{trustee} . $p{m} . $p{n} . $p{o} . $p{p} . $p{r} . $p{O} . $p{N} );
}
redirect( '/settings/volumes' );
}
elsif( $c[1] eq 'devices' )
{
if( $c[2] ne '' )
{
delconfigline( '4 ' . $c[2] );
}
if( $p{number} ne '' )
{
addconfigline( '4 ' . $p{number} . ' ' . $p{interface} . ' ' . $p{frametype} . ' ' . $p{delay} );
}
redirect( '/settings/devices' );
}
elsif( $c[1] eq 'logging' )
{
setc( 100, ipx );
setc( 101, nwserv );
setc( 102, ncpserv );
setc( 103, nwconn );
setc( 104, nwclient );
setc( 105, nwbind );
setc( 106, nwrouted );
setc( 200, startup );
setc( 201, general_log );
delconfigline( 202 );
addconfigline( 202 . ' ' . ( $p{g_creat} + 2 * $p{error} ) );
setc( 300, routing_interval );
setc( 301, routing_log );
delconfigline( 302 );
addconfigline( 302 . ' ' . ( $p{r_creat} + 2 * $p{r_file} ) );
}
elsif( $c[1] eq 'smart' )
{
if( $p{mars_config} ne $mars_config )
{
# Just append the line. Messy but easy. ;)
open( FILE, '>>' . $smart_conf_path ) or die "Could not open $smart_conf_path: $!";
print( FILE "\n" . '$mars_config = \'' . $p{mars_config} . '\';' . "\n" );
close( FILE );
}
open( FILE, '>' . $smart_nwclient_path ) or die "Could not open $smart_nwclient_path: $!";
print( FILE $p{bind_server} . '/' . $p{bind_user} . ' ' . $p{bind_pass } . "\n" );
close( FILE );
chown( scalar( getpwnam( $nonroot_user ) ), 0, $smart_nwclient_path );
chmod( 0600, $smart_nwclient_path );
}
elsif( $c[1] eq 'users' )
{
drop_root();
$server = get_server();
if( $c[2] eq 'add_new' )
{
system( 'nwbocreate', '-S', $server, '-t', '1', '-o', $p{name} );
$c[2] = $p{name};
}
else
{
system( 'nwbprm', '-S', $server, '-t', '1', '-o', $c[2], '-p', 'UNIX_USER' );
system( 'nwbprm', '-S', $server, '-t', '1', '-o', $c[2], '-p', 'IDENTIFICATION' );
system( 'nwbprm', '-S', $server, '-t', '1', '-o', $c[2], '-p', 'GROUPS_I\'M_IN' );
system( 'nwbprm', '-S', $server, '-t', '1', '-o', $c[2], '-p', 'SECURITY_EQUALS' );
}
$id = ( split( ' ', ( grep( /^$c[2] /, split( "\n", `nwbols -S $server` ) ) )[0] ) )[1]; # Woohoo... ;)
$id =~ s/[^ ][^ ]/$& /g;
$id = join( '', reverse( split( ' ', $id ) ) );
# $id =~ s/ //g;
if( scalar( keys( %p ) ) == 0 )
{
system( 'nwborm', '-S', $server, '-t', '1', '-o', $c[2] );
}
else
{
write_property_string( $c[2], 1, 'UNIX_USER', 0, 30, $p{unix_user} );
write_property_string( $c[2], 1, 'IDENTIFICATION', 0, 30, $p{fullname} );
open( FILE, '|' . 'nwbpset -S ' . $server );
print FILE <<EOF;
0001
$c[2]
GROUPS_I'M_IN
2
31
EOF
@g = grep( /^group_/, keys( %p ) );
foreach $g ( @g )
{
$g =~ s/^group_//;
print( FILE '0002' . "\n", $g . "\n" );
system( 'nwbpadd -S ' . $server . ' -o ' . $g . ' -t 2 -p GROUP_MEMBERS ' . $id . ' > /dev/null' );
}
close( FILE );
open( FILE, '|' . 'nwbpset -S ' . $server );
print FILE <<EOF;
0001
$c[2]
SECURITY_EQUALS
2
31
EOF
@g = grep( /^group_/, keys( %p ) );
foreach $g ( @g )
{
$g =~ s/^group_//;
print( FILE '0002' . "\n", $g . "\n" );
}
close( FILE );
if( $p{password} ne '' )
{
$p = get_bindery_password();
open( FILE, '|' . 'nwpasswd -O ' . $c[2] . ' > /dev/null' );
print( STDERR 'nwpasswd -O ' . $c[2] . ' > /dev/null' . "\n" );
print( FILE $p . "\n" . $p{password} . "\n" . $p{password} . "\n" );
close( FILE );
}
}
redirect( '/settings/users' );
}
elsif( $c[1] eq 'groups' )
{
drop_root();
$server = get_server();
if( $c[2] eq 'add_new' )
{
system( 'nwbocreate', '-S', $server, '-t', '2', '-o', $p{name} );
open( FILE, '|' . 'nwbpset -S ' . $server );
print FILE <<EOF;
0002
$p{name}
GROUP_MEMBERS
2
31
EOF
close( FILE );
$c[2] = $p{name};
}
else
{
system( 'nwbprm', '-S', $server, '-t', '2', '-o', $c[2], '-p', 'IDENTIFICATION' );
system( 'nwbprm', '-S', $server, '-t', '2', '-o', $c[2], '-p', 'OBJ_SUPERVISORS' );
}
if( scalar( keys( %p ) ) == 0 )
{
system( 'nwborm', '-S', $server, '-t', '2', '-o', $c[2] );
}
else
{
write_property_string( $c[2], 2, 'IDENTIFICATION', 0, 30, $p{fullname} );
open( FILE, '|' . 'nwbpset -S ' . $server );
print FILE <<EOF;
0002
$c[2]
OBJ_SUPERVISORS
2
31
EOF
@g = grep( /^man_/, keys( %p ) );
foreach $g ( @g )
{
my @g = split( '_', $g );
print( FILE $g[1] . "\n", $g[2] . "\n" );
}
close( FILE );
}
redirect( '/settings/groups' );
}
elsif( $c[1] eq 'queues' )
{
drop_root();
$server = get_server();
if( $c[2] eq 'add_new' )
{
system( 'nwbocreate', '-S', $server, '-t', '3', '-o', $p{name} );
$c[2] = $p{name};
open( FILE, '|' . 'nwbpset -S ' . $server );
print FILE <<EOF;
0003
$c[2]
Q_SERVERS
2
31
EOF
close( FILE );
open( FILE, '|' . 'nwbpset -S ' . $server );
print FILE <<EOF;
0003
$c[2]
Q_USERS
2
31
0002
EVERYONE
EOF
close( FILE );
open( FILE, '|' . 'nwbpset -S ' . $server );
print FILE <<EOF;
0003
$c[2]
Q_OPERATORS
2
31
0001
SUPERVISOR
EOF
close( FILE );
}
else
{
system( 'nwbprm', '-S', $server, '-t', '3', '-o', $c[2], '-p', 'Q_UNIX_PRINT' );
system( 'nwbprm', '-S', $server, '-t', '3', '-o', $c[2], '-p', 'Q_DIRECTORY' );
}
if( scalar( keys( %p ) ) == 0 )
{
system( 'nwborm', '-S', $server, '-t', '3', '-o', $c[2] );
}
else
{
if( $p{spool_dir} eq '' )
{
$id = ( split( ' ', ( grep( /^$c[2] /, split( "\n", `nwbols -S $server` ) ) )[0] ) )[1]; # Woohoo... ;)
$p{spool_dir} = 'SYS:SYSTEM/' . $id . '.QDR';
}
write_property_string( $c[2], 3, 'Q_UNIX_PRINT', 0, 31, $p{unix_print} );
write_property_string( $c[2], 3, 'Q_DIRECTORY', 0, 31, $p{spool_dir} );
}
redirect( '/settings/queues' );
}
else
{
putp();
return( 0 );
}
redirect( '/static/start.html' );
writeconfig();
}
sub putp()
{
$cc =~ s/.*\?//;
$cc =~ s/&/\n/g;
print <<EOF;
HTTP/1.0 200 OK
Content-Type: text/plain
$cc
EOF
}
sub setc( $$ )
{
delconfigline( $_[0] );
if( $p{$_[1]} ne '' )
{ addconfigline( $_[0] . ' ' . $p{$_[1]} ); }
}
sub cbc( $ )
{
if( $p{$_[0]} ne '' )
{ $p{$_[0]} = $_[0]; }
}