# # 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 < /dev/null' ); } close( FILE ); open( FILE, '|' . 'nwbpset -S ' . $server ); print FILE < /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 <