summaryrefslogtreecommitdiff
path: root/Master/tlpkg/TeXLive/win-admin.pl
blob: f163b536721b76fbcdb424675db3ca628d6378e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/env perl

# $Id: $
# win-admin.pl
#
# Copyright 2007 Siep Kroonenberg
# This file is licensed under the GNU General Public License version 2
# or any later version.
#
# This file determines whether the script is run with admin rights.
#
# This code first sets $admin to true. The function sys-access returns
# registry access permissions based on the value of $admin. The code
# then tries to access the system environment with the permissions
# returned by sys_access. If this fails then it modifies its
# assumptions and tries again.

use Win32::TieRegistry(
  Delimiter => "/", ArrayValues => 0, FixSzNulls => 1,
  qw(REG_SZ REG_EXPAND_SZ  KEY_READ KEY_WRITE KEY_ALL_ACCESS
  KEY_ENUMERATE_SUB_KEYS));

my $admin=1;
my $SystemEnv;
our %vars;

sub sys_access {
  $admin? KEY_ALL_ACCESS() : KEY_READ() | KEY_ENUMERATE_SUB_KEYS();
}

$SystemEnv=$Registry -> Open(
  "LMachine/system/currentcontrolset/control/session manager/Environment/",
  {Access => sys_access()});

if (not $SystemEnv) {
  print "No admin permissions\n";
  $admin=0;
  $SystemEnv=$Registry -> Open(
    "LMachine/system/currentcontrolset/control/session manager/Environment/",
    {Access => sys_access()});
}

$SystemEnv->ArrayValues(1);

$vars{'win-admin'}=$admin? 1:0;

# needs a terminal 1 for require to succeed!
1;

__END__

### Local Variables:
### perl-indent-level: 2
### tab-width: 2
### indent-tabs-mode: nil
### End:
# vim:set tabstop=2 expandtab: #