#!/usr/bin/perl -w # # Copyright 2009 Robert Auch # # Script for use in Samba's "username map script = " directive # use strict; use warnings; use Getopt::Long; use File::Basename; my $unixaccount = "compacct"; sub main(); main(); exit(0); sub usage() { my $scriptName = fileparse($0); return < This remaps machine accounts to a local unix account. This is done by checking for full NT4-stuyle machine account name convention: DOMAIN\\machine\$ the AD account to match. --unixaccount, -u pick a local account to map to. Default is '$unixaccount' (change on line 13) Examples: $scriptName --unixaccount sambauser DOMAIN\\servera\$ $scriptName -u sambauser DOMAIN\\servera\$ $scriptName DOMAIN\\servera\$ DATA } sub main() { Getopt::Long::Configure('no_ignore_case', 'no_auto_abbrev') || die; my $opt = {}; my $ok = GetOptions($opt, 'help|h|?', 'unixaccount|u', ); my $accountname = shift @ARGV; my $more = shift @ARGV; my $errors; if ($opt->{help} or not $ok) { die usage(); } if (not $accountname) { $errors .= "Missing accountname argument.\n"; } if ($more) { $errors .= "Too many arguments.\n"; } if ($errors) { die $errors.usage(); } my $mappedname=""; if ($accountname=~/[A-Z_\-]+\\.+\$$/) { print "$unixaccount\n"; } exit(0); }