[32] | 1 | #!/bin/sh |
---|
| 2 | DIR=/etc/remctl/sipb-xen-auto |
---|
| 3 | TEMPLATE=$DIR/conf.template |
---|
| 4 | MACHINEDIR=$DIR/machine.d |
---|
| 5 | MOIRADIR=$DIR/moira-acl |
---|
| 6 | MOIRATMP=$DIR/moira-tmp |
---|
| 7 | MACHINETMP=$DIR/machine-list-tmp |
---|
| 8 | AUTOMACHINELIST=$DIR/auto-machine-list |
---|
| 9 | AUTOMOIRALIST=$DIR/auto-moira-list |
---|
| 10 | BINDIR=$DIR/bin |
---|
| 11 | ACLDIR=$DIR/acl |
---|
| 12 | |
---|
| 13 | update_machine() |
---|
| 14 | { |
---|
| 15 | machine=$1 |
---|
| 16 | sed "s/#MACHINENAME#/$machine/g" $TEMPLATE | \ |
---|
| 17 | sed "s,#BINDIR#,$BINDIR,g" >| $MACHINETMP |
---|
| 18 | if ! cmp -s $MACHINEDIR/$machine $MACHINETMP; then |
---|
| 19 | mv $MACHINETMP $MACHINEDIR/$machine |
---|
| 20 | else |
---|
| 21 | rm -f $MACHINETMP |
---|
| 22 | fi |
---|
| 23 | } |
---|
| 24 | |
---|
| 25 | update_moiragroup() |
---|
| 26 | { |
---|
| 27 | group=$1 |
---|
| 28 | # Should perhaps replace with LDAP, but fine for now. |
---|
| 29 | |
---|
| 30 | # We should do more careful error checking so we don't take away |
---|
| 31 | # all bits and delete the moira-acl files whenever there's an AFS |
---|
| 32 | # outage. |
---|
| 33 | pts membership system:$group -noauth | tail -n+2 | \ |
---|
| 34 | sed 's/\./\//' | \ |
---|
| 35 | sed 's/^ //' | \ |
---|
| 36 | sed 's/$/@ATHENA.MIT.EDU/g' >| $MOIRATMP |
---|
| 37 | if test -s $MOIRATMP; then |
---|
| 38 | if ! cmp -s $MOIRADIR/$group $MOIRATMP; then |
---|
| 39 | mv $MOIRATMP $MOIRADIR/$group |
---|
| 40 | fi |
---|
| 41 | else |
---|
| 42 | if test -e $MOIRADIR/$group; then |
---|
| 43 | rm $MOIRADIR/$group |
---|
| 44 | fi |
---|
| 45 | fi |
---|
| 46 | rm -f $MOIRATMP |
---|
| 47 | } |
---|
| 48 | |
---|
| 49 | case "$1" in |
---|
| 50 | moiragroup) |
---|
| 51 | update_moiragroup "$2" |
---|
| 52 | ;; |
---|
| 53 | |
---|
| 54 | all_machines) |
---|
| 55 | # update the remctl.conf definitions |
---|
| 56 | for machine in `cat $AUTOMACHINELIST`; do |
---|
| 57 | update_machine $machine |
---|
| 58 | done |
---|
| 59 | ;; |
---|
| 60 | all_moira) |
---|
| 61 | # update our moira ACL lists |
---|
| 62 | for group in `cat $AUTOMOIRALIST`; do |
---|
| 63 | update_moiragroup $group |
---|
| 64 | done |
---|
| 65 | ;; |
---|
| 66 | auto_machine_list) |
---|
| 67 | # update the list of maintained machines |
---|
| 68 | /bin/ls $ACLDIR >| $AUTOMACHINELIST |
---|
| 69 | ;; |
---|
| 70 | auto_moira_list) |
---|
| 71 | # update the moira list-of-lists |
---|
| 72 | # /bin/ls $MOIRADIR >| $AUTOMOIRALIST # BAD IDEA in case of outage |
---|
| 73 | |
---|
| 74 | # This extracts the list of all moira lists we care about, and updates those. |
---|
| 75 | grep -R moira $ACLDIR/ /etc/remctl/acl/ | perl -pe 's/.*moira-acl\/(.*)/$1/g' >| $AUTOMOIRALIST |
---|
| 76 | ;; |
---|
| 77 | all) |
---|
| 78 | "$0" auto_machine_list |
---|
| 79 | "$0" all_machines |
---|
| 80 | "$0" auto_moira_list |
---|
| 81 | "$0" all_moira |
---|
| 82 | ;; |
---|
| 83 | esac |
---|
| 84 | |
---|
| 85 | exit 0 |
---|