initial commit of file from CVS for smeserver-loginscript on Sat Sep 7 20:34:19 AEST 2024
This commit is contained in:
250
root/etc/e-smith/web/functions/loginscript
Executable file
250
root/etc/e-smith/web/functions/loginscript
Executable file
@@ -0,0 +1,250 @@
|
||||
#!/usr/bin/perl -wT
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# heading : Collaboration
|
||||
# description : Login script manager
|
||||
# navigation : 3000 3375
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
package esmith;
|
||||
|
||||
use strict;
|
||||
use CGI ':all';
|
||||
use CGI::Carp qw(fatalsToBrowser);
|
||||
|
||||
use esmith::cgi;
|
||||
use esmith::config;
|
||||
use esmith::util;
|
||||
|
||||
BEGIN
|
||||
{
|
||||
# Clear PATH and related environment variables so that calls to
|
||||
# external programs do not cause results to be tainted. See
|
||||
# "perlsec" manual page for details.
|
||||
|
||||
$ENV {'PATH'} = '';
|
||||
$ENV {'SHELL'} = '/bin/bash';
|
||||
delete $ENV {'ENV'};
|
||||
}
|
||||
|
||||
esmith::util::setRealToEffective ();
|
||||
|
||||
$CGI::POST_MAX=1024 * 100; # max 100K posts
|
||||
$CGI::DISABLE_UPLOADS = 1; # no uploads
|
||||
|
||||
my %conf;
|
||||
tie %conf, 'esmith::config';
|
||||
|
||||
#------------------------------------------------------------
|
||||
# examine state parameter and display the appropriate form
|
||||
#------------------------------------------------------------
|
||||
|
||||
my $q = new CGI;
|
||||
|
||||
if (! grep (/^state$/, $q->param))
|
||||
{
|
||||
showInitial ($q, '', '');
|
||||
}
|
||||
|
||||
elsif ($q->param ('state') eq "perform")
|
||||
{
|
||||
performAndShowResult ($q);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
esmith::cgi::genStateError ($q, \%conf);
|
||||
}
|
||||
|
||||
exit (0);
|
||||
|
||||
#------------------------------------------------------------
|
||||
# subroutine to display initial form
|
||||
#------------------------------------------------------------
|
||||
|
||||
sub showInitial ($$$)
|
||||
{
|
||||
my ($q, $msg, $netlogon) = @_;
|
||||
|
||||
#------------------------------------------------------------
|
||||
# If there's a message, we just finished an operation so show the
|
||||
# status report. If no message, this is a new list of accounts.
|
||||
#------------------------------------------------------------
|
||||
|
||||
if ($msg eq '')
|
||||
{
|
||||
esmith::cgi::genHeaderNonCacheable
|
||||
($q, \%conf, 'Modify Windows login script');
|
||||
}
|
||||
else
|
||||
{
|
||||
esmith::cgi::genHeaderNonCacheable
|
||||
($q, \%conf, 'Operation status report');
|
||||
|
||||
print $q->p ($msg);
|
||||
print $q->hr;
|
||||
}
|
||||
|
||||
#------------------------------------------------------------
|
||||
# Re-load the netlogon template file if it hasn't been passed
|
||||
#------------------------------------------------------------
|
||||
|
||||
if ( $netlogon eq '' )
|
||||
{
|
||||
if ( -e '/home/e-smith/files/samba/netlogon/netlogon.template' )
|
||||
{
|
||||
open ( NETLOGON, '< /home/e-smith/files/samba/netlogon/netlogon.template' )
|
||||
|| die 'Couldn\'t open /home/e-smith/files/samba/netlogon/netlogon.template file!';
|
||||
my @netlogon = <NETLOGON>;
|
||||
close NETLOGON;
|
||||
|
||||
foreach (@netlogon)
|
||||
{
|
||||
$netlogon .= $_;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$netlogon = "\@ECHO OFF\015\n\015\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
my %driveLabels = ('d' => 'D:','e' => 'E:','f' => 'F:','g' => 'G:','h' => 'H:','i' => 'I:','j' => 'J:','k' => 'K:','l' => 'L:','m' => 'M:','n' => 'N:','o' => 'O:','p' => 'P:','q' => 'Q:','r' => 'R:','s' => 'S:','t' => 'T:','u' => 'U:','v' => 'V:','w' => 'W:','x' => 'X:','y' => 'Y:','z' => 'Z:');
|
||||
|
||||
# Define the WinNTLogonDrive conf value if it hasn't been defined
|
||||
if (! defined ( $conf{'WinNTLogonDrive'} ) )
|
||||
{
|
||||
$conf{'WinNTLogonDrive'} = 'h';
|
||||
}
|
||||
|
||||
print $q->startform (-method => 'POST', -action => $q->url (-absolute => 1));
|
||||
|
||||
print $q->p ('Below you can modify the login script template.');
|
||||
|
||||
print $q->p ("You can use special tags '".
|
||||
$q->tt($q->b('#ifg groupname1, groupname2...')). "', '".
|
||||
$q->tt($q->b('#ifu username1, username2...')). "', '".
|
||||
$q->tt($q->b('#ifm machinename1, machinename2...')). "', '".
|
||||
$q->tt($q->b('#ifa archtype1, archtype2...')). "' and '".
|
||||
$q->tt($q->b('#endif')).
|
||||
"' to create blocks of script that are only included ".
|
||||
'if those criteria are met.');
|
||||
|
||||
print $q->p ('See this ', $q->a({href => '../loginscriptexample.html'}, 'example'), ' to get a better idea.');
|
||||
|
||||
|
||||
print $q->table ({border => 0, cellspacing => 0, cellpadding => 4},
|
||||
|
||||
esmith::cgi::genTextRow(
|
||||
$q, $q->textarea (-name => 'netlogon',
|
||||
-override => 1,
|
||||
-default => $netlogon,
|
||||
-rows => 16,
|
||||
-columns => 64)),
|
||||
|
||||
esmith::cgi::genTextRow
|
||||
($q, $q->p ('A drive letter will automatically be mapped to the users home folder. ',
|
||||
'You can specify which drive the clients will use here:')),
|
||||
|
||||
esmith::cgi::genWidgetRow ($q,
|
||||
"Home Drive",
|
||||
$q->popup_menu (-name => 'logonDrive',
|
||||
-values => ['d', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'],
|
||||
-default => $conf {'WinNTLogonDrive'},
|
||||
-labels => \%driveLabels)),
|
||||
|
||||
$q->Tr (esmith::cgi::genCell
|
||||
($q, $q->b ($q->submit (-name => 'action', -value => 'Save')))));
|
||||
|
||||
print $q->hidden (-name => 'state', -override => 1, -default => 'perform');
|
||||
print $q->endform;
|
||||
esmith::cgi::genFooter ($q);
|
||||
}
|
||||
|
||||
#------------------------------------------------------------
|
||||
# subroutine to perform actions and display result
|
||||
#------------------------------------------------------------
|
||||
|
||||
sub performAndShowResult ($)
|
||||
{
|
||||
my ($q) = @_;
|
||||
|
||||
my $netlogon = $q->param ('netlogon');
|
||||
|
||||
my $logonDrive = $q->param ('logonDrive');
|
||||
|
||||
#------------------------------------
|
||||
# Check the file for mis-matched if's
|
||||
#------------------------------------
|
||||
|
||||
my $line;
|
||||
my $level = 0;
|
||||
my $msg = '';
|
||||
my @netlogonlist = split( "\n", $netlogon );
|
||||
foreach $line (@netlogonlist)
|
||||
{
|
||||
next if ( $msg ne '' );
|
||||
if ( ( index $line, '#if' ) == 0 )
|
||||
{
|
||||
if ( ( index $line, '#ifg' ) == 0 || ( index $line, '#ifu' ) == 0 ||
|
||||
( index $line, '#ifa' ) == 0 || ( index $line, '#ifm' ) == 0 )
|
||||
{
|
||||
$level++;
|
||||
}
|
||||
else
|
||||
{
|
||||
$msg = 'Error: Unrecognised #if tag found. '.
|
||||
$q->b('Script NOT saved.');;
|
||||
}
|
||||
}
|
||||
elsif ( ( index $line, '#endif' ) == 0 )
|
||||
{
|
||||
$level--;
|
||||
}
|
||||
if ( $msg eq '' && $level < 0 )
|
||||
{
|
||||
$msg = 'Error: There are misplaced #endif tag(s) or missing '.
|
||||
'#if tag(s). ' . $q->b('Script NOT saved.');;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $msg eq '' )
|
||||
{
|
||||
if ( $level != 0 )
|
||||
{
|
||||
$msg = 'Error: There are misplaced #if tag(s) or missing '.
|
||||
'#endif tag(s). ' . $q->b('Script NOT saved.');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ( $msg eq '' )
|
||||
{
|
||||
|
||||
#------------------------------------------------------
|
||||
# Write the new netlogon file (if there were no errors)
|
||||
#------------------------------------------------------
|
||||
|
||||
open ( NETLOGON, '> /home/e-smith/files/samba/netlogon/netlogon.template' )
|
||||
|| die 'Couldn\'t open /home/e-smith/files/samba/netlogon/netlogon.template file!';
|
||||
|
||||
print NETLOGON $netlogon;
|
||||
|
||||
close NETLOGON;
|
||||
|
||||
$msg = 'Login script successfully saved.';
|
||||
}
|
||||
|
||||
#-------------------------------
|
||||
# Save the WinNTLogonDrive value
|
||||
#-------------------------------
|
||||
|
||||
$conf{'WinNTLogonDrive'} = $logonDrive;
|
||||
|
||||
system ("/sbin/e-smith/signal-event", "conf-logondrive") == 0
|
||||
or die ("Error occurred while saving logon drive.\n");
|
||||
|
||||
showInitial( $q, $msg, $netlogon );
|
||||
}
|
||||
|
Reference in New Issue
Block a user