source: fedkit/rc.fedaccounts @ adcbdaf

axis_examplecompt_changesinfo-opsversion-2.00version-3.01version-3.02
Last change on this file since adcbdaf was adcbdaf, checked in by Ted Faber <faber@…>, 15 years ago

Stop depending on the patched rc.accounts file to install accounts.

  • Property mode set to 100755
File size: 2.3 KB
Line 
1#!/usr/bin/perl -w
2#
3use English;
4use Getopt::Std;
5use strict;
6
7use IO::File;
8
9# Drag in path stuff so we can find emulab stuff.
10BEGIN { require "/etc/emulab/paths.pm"; import emulabpaths; }
11
12# Only root.
13if ($EUID != 0) {
14    die("*** $0:\n".
15        "    Must be root to run this script!\n");
16}
17
18# Script specific goo.
19#
20# These go in /var/emulab. Good for all environments!
21#
22my $PASSDB   = "$VARDIR/db/passdb";
23my $GROUPDB  = "$VARDIR/db/groupdb";
24
25#
26# Load the OS independent support library. It will load the OS dependent
27# library and initialize itself.
28#
29use libsetup;
30use liblocsetup;
31use libtmcc;
32use librc;
33
34
35# The old accounts output will be in /usr/local/federation/etc/old_accts and
36# the new stuff in /usr/local/federation/etc/accts this is exactly the output
37# of tmcc accounts under the local (old) and federated (new) testbed.  We
38# delete all the stuff from the old and add all the stuff from the new.
39
40my $old_accts = "/usr/local/federation/etc/old_accts";
41my $accts = "/usr/local/federation/etc/accts";
42
43fatal("Need both $old_accts and $accts") unless -e $old_accts && -e $accts;
44
45my $old = new IO::File $old_accts;
46my $n = new IO::File $accts;
47
48fatal("Cannot open $old_accts for reading") unless $old;
49fatal("Cannot open $accts for reading") unless $n;
50
51my @delgroups;
52my @delusers;
53
54while (<$old>) {
55    /^ADDGROUP NAME=([-\w]+)\s+GID=(\d+)/ && do {
56        push(@delgroups, $1);
57        next;
58    };
59    /^ADDUSER LOGIN=([-\w]+)/ && do {
60        push(@delusers, $1);
61    };
62}
63$old->close();
64
65# Now take 'em out
66
67foreach my $u (@delusers) {
68    print "Deleting user $u\n";
69    os_userdel($u);
70}
71
72foreach my $g (@delgroups) {
73    print "Deleting group $g\n";
74    os_groupdel($g);
75}
76
77while (<$n>) {
78    /^ADDGROUP NAME=([-\w]+)\s+GID=(\d+)/ && do {
79        my ($group, $gid) = ($1, $2);
80        print "Adding group $group($gid)\n";
81        os_groupadd($group, $gid);
82    };
83    /^ADDUSER\s+LOGIN=([-\w]+)\s+PSWD=([^:]+)\s+UID=(\d+)\s+GID=(\d+)\s+
84        ROOT=(\d)\s+NAME="([^"]+)"\s+HOMEDIR=(\S+)\s+GLIST="([^"]*)"\s+
85        SERIAL=(\d+)\s+EMAIL="([^"]*)"\s+SHELL=(\S+)/x && do {
86            my ($login, $pswd, $uid, $gid, $root, $name, $hdir, $glist,
87                $serial, $email, $shell) =
88            ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11);
89
90            print "Adding $login $uid $gid\n";
91            os_useradd($login, $uid, $gid, $pswd, "$glist", $hdir, $name,
92                $root, $shell);
93            os_mkdir($hdir, "0755") unless -e $hdir;
94            next;
95    };
96}
97$n->close();
98
Note: See TracBrowser for help on using the repository browser.