1#!/usr/bin/perl
2#
3# genlogon.pl
4#
5# Perl script to generate user logon scripts on the fly, when users
6# connect from a Windows client.  This script should be called from smb.conf
7# with the %U, %G and %L parameters. I.e:
8#
9#	root preexec = genlogon.pl %U %G %L
10#
11# The script generated will perform
12# the following:
13#
14# 1. Log the user connection to /var/log/samba/netlogon.log
15# 2. Set the PC's time to the Linux server time (which is maintained
16#    daily to the National Institute of Standard's Atomic clock on the
17#    internet.
18# 3. Connect the user's home drive to H: (H for Home).
19# 4. Connect common drives that everyone uses.
20# 5. Connect group-specific drives for certain user groups.
21# 6. Connect user-specific drives for certain users.
22# 7. Connect network printers.
23
24# Log client connection
25#($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
26($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
27open LOG, ">>/var/log/samba/netlogon.log";
28print LOG "$mon/$mday/$year $hour:$min:$sec - User $ARGV[0] logged into $ARGV[1]\n";
29close LOG;
30
31# Start generating logon script
32open LOGON, ">/shared/netlogon/$ARGV[0].bat";
33print LOGON "\@ECHO OFF\r\n";
34
35# Connect shares just use by Software Development group
36if ($ARGV[1] eq "SOFTDEV" || $ARGV[0] eq "softdev")
37{
38	print LOGON "NET USE M: \\\\$ARGV[2]\\SOURCE\r\n";
39}
40
41# Connect shares just use by Technical Support staff
42if ($ARGV[1] eq "SUPPORT" || $ARGV[0] eq "support")
43{
44	print LOGON "NET USE S: \\\\$ARGV[2]\\SUPPORT\r\n";
45}
46
47# Connect shares just used by Administration staff
48If ($ARGV[1] eq "ADMIN" || $ARGV[0] eq "admin")
49{
50	print LOGON "NET USE L: \\\\$ARGV[2]\\ADMIN\r\n";
51	print LOGON "NET USE K: \\\\$ARGV[2]\\MKTING\r\n";
52}
53
54# Now connect Printers.  We handle just two or three users a little
55# differently, because they are the exceptions that have desktop
56# printers on LPT1: - all other user's go to the LaserJet on the
57# server.
58if ($ARGV[0] eq 'jim'
59    || $ARGV[0] eq 'yvonne')
60{
61	print LOGON "NET UsE LPT2: \\\\$ARGV[2]\\LJET3\r\n";
62	print LOGON "NET USE LPT3: \\\\$ARGV[2]\\FAXQ\r\n";
63}
64else
65{
66	print LOGON "NET USE LPT1: \\\\$ARGV[2]\\LJET3\r\n";
67	print LOGON "NET USE LPT3: \\\\$ARGV[2]\\FAXQ\r\n";
68}
69
70# All done! Close the output file.
71close LOGON;
72