]> andersk Git - moira.git/blob - gen/ca.gen
Command line printer manipulation client, and build goo.
[moira.git] / gen / ca.gen
1 #!/moira/bin/perl -Tw
2
3 # $Id$
4
5 # The following exit codes are defined and MUST BE CONSISTENT with the
6 # error codes the library uses:
7 $MR_DBMS_ERR = 47836421;
8 $MR_OCONFIG = 47836460;
9
10 $outfile = '/moira/dcm/ca.out';
11
12 use DBI;
13 $dbh = DBI->connect("dbi:Oracle:moira", "moira", "moira")
14     || exit $MR_DBMS_ERR;
15
16 # First, let's do people with NFS homedirs, since it's not hard.
17 $sth = $dbh->prepare("SELECT n.nfsphys_id, n.dir, m.name ".
18                      "FROM nfsphys n, machine m ".
19                      "WHERE m.mach_id = n.mach_id ".
20                      "ORDER BY n.nfsphys_id") || exit $MR_DBMS_ERR;
21
22 $sth->execute || exit $MR_DBMS_ERR;
23
24 umask 022;
25 open(OUT, ">$outfile") || exit $MR_OCONFIG;
26
27 while (($id, $dir, $machname) = $sth->fetchrow_array) {
28     next if ($id == 0);
29     $foo = $dbh->prepare("SELECT u.login, u.fullname ".
30                          "FROM users u, filesys f ".
31                          "WHERE f.label = u.login AND u.status = 1 ".
32                          "AND f.phys_id = " . $dbh->quote($id));
33     $first = 1;
34     $foo->execute || exit $MR_DBMS_ERR;
35     while (($login, $fullname) = $foo->fetchrow_array) {
36         if ($first) {
37             $first = 0;
38             $row = "*$machname:$dir\n";
39             $row =~ s/\0//g;
40             print OUT $row;
41         }
42         $row = "$login,$fullname\n";
43         $row =~ s/\0//g;
44         print OUT $row;
45     }
46 }
47
48 #Now, let's do all the AFS homedirs.  This will take a while longer.
49 $sth = $dbh->prepare("SELECT UNIQUE u.login, u.fullname, f.name ".
50                      "FROM users u, filesys f ".
51                      "WHERE f.label = u.login AND u.status = 1 ".
52                      "AND f.type = 'AFS' ".
53                      "ORDER BY u.login") || exit $MR_DBMS_ERR;
54
55 $sth->execute || exit $MR_DBMS_ERR;
56
57 $last = "";
58 while (($login, $name, $dir) = $sth->fetchrow_array) {
59     $dir =~ /(\/.*)\//;
60     $path = $1;
61     if ($path ne $last) {
62         $last = $path;
63         $row = "*AFS:$path\n";
64         $row =~ s/\0//g;
65         print OUT $row;
66     }
67     $row = "$login,$name\n";
68     $row =~ s/\0//g;
69     print OUT $row;
70 }
71
72 close(OUT);
73 $dbh->disconnect;
74
75 exit 0;
This page took 0.673921 seconds and 5 git commands to generate.