home *** CD-ROM | disk | FTP | other *** search
/ ftp.ee.lbl.gov / 2014.05.ftp.ee.lbl.gov.tar / ftp.ee.lbl.gov / acld-1.11.tar.gz / acld-1.11.tar / acld-1.11 / aclcompact.sh.in < prev    next >
Text File  |  2011-05-25  |  2KB  |  137 lines

  1. #! /bin/sh
  2. # @(#) $Id: aclcompact.sh.in 742 2011-05-26 01:05:15Z leres $ (LBL)
  3.  
  4. PATH="@PREFIX@/libexec:@PREFIX@/sbin:@PREFIX@/bin:${PATH}"
  5. export PATH
  6.  
  7. prog="`basename $0`"
  8. xstatus=0
  9. comment="${prog}"
  10.  
  11. prog="`basename $0`"
  12. t1="/tmp/${prog}.1.$$"
  13. t2="/tmp/${prog}.2.$$"
  14.  
  15. . /etc/rc.conf
  16.  
  17. ACLCOMPACTPCT="${aclcompact_pct:-50}"
  18. export ACLCOMPACTPCT
  19.  
  20. trap 'rm -f ${t1} ${t2}; exit 2' 1 2 3 15
  21.  
  22. if [ -f ${t1} ]; then
  23.     echo "${prog}: ${t1} already exists" 1>&2
  24.     exit 1
  25. fi
  26.  
  27. acl.exp state -c "${comment}" > ${t1} 2>&1
  28. xstatus=$?
  29. if [ ${xstatus} -ne 0 ]; then
  30.     echo "${prog}: acld state failed" 1>&2
  31.     cat ${t1}
  32.     rm ${t1}
  33.     exit 1
  34. fi
  35.  
  36. awk 'BEGIN {
  37.         highseq = -1
  38.         incrseq = 1
  39.         pct = ENVIRON["ACLCOMPACTPCT"]
  40.     }
  41.     /^# lastseq for ACL/ {
  42.         lastseq[$5] = $7
  43.         next
  44.     }
  45.     $1 == "seqrange" {
  46.         # legacy
  47.         lowseq = $2
  48.         highseq = $3
  49.         next
  50.     }
  51.     $1 == "lowseq" {
  52.         # legacy
  53.         lowseq = $2
  54.         next
  55.     }
  56.     $1 == "highseq" {
  57.         # legacy
  58.         highseq = $2
  59.         next
  60.     }
  61.     $1 == "incrseq" {
  62.         incrseq = $2
  63.         next
  64.     }
  65.     END {
  66.         if (pct <= 0) {
  67.             print "# ACLCOMPACTPCT not set"
  68.             exit 1
  69.         }
  70.         if (lowseq <= 0) {
  71.             print "# lowseq not set"
  72.             exit 1
  73.         }
  74.         if (highseq <= 0) {
  75.             print "# highseq not set"
  76.             exit 1
  77.         }
  78.         if (incrseq != 1) {
  79.             printf "# cannot handle incrseq %d\n", incrseq
  80.             exit 1
  81.         }
  82.         #printf "# pct %d\n", pct
  83.         #printf "# lowseq %d\n", lowseq
  84.         #printf "# highseq %d\n", highseq
  85.         #printf "# incrseq %d\n", incrseq
  86.         for (acl in lastseq) {
  87.             #printf "# acl %s %d\n", acl, lastseq[acl]
  88.             range = highseq - lowseq
  89.             if (range <= 0)
  90.                 range = 1
  91.             used = int(((lastseq[acl] - lowseq) / range) * 100)
  92.             left = highseq - lastseq[acl]
  93.             #printf "# %s %d left\n", acl, left
  94.             if (used >= pct)
  95.                 printf "compact %s -c \"(%d%% %d left)\"\n", acl, used, left
  96.         }
  97.     }' < ${t1} > ${t2} 2>&1
  98. xstatus=$?
  99. if [ ${xstatus} -ne 0 ]; then
  100.     echo "${prog}: awk script failed" 1>&2
  101.     cat ${t1}
  102.     echo "-----"
  103.     cat ${t2}
  104.     rm ${t1} ${t2}
  105.     exit 1
  106. fi
  107.  
  108. if [ ! -s ${t2} ]; then
  109.     rm ${t1} ${t2}
  110.     exit 0
  111. fi
  112.  
  113. command="`cat ${t2}`"
  114.  
  115. case "${command}" in
  116.  
  117. compact*)
  118.     acl.exp ${command} > ${t1} 2>&1
  119.     xstatus=$?
  120.     if [ ${xstatus} -ne 0 ]; then
  121.         echo "${prog}: acl.exp script failed" 1>&2
  122.         echo "# ${command}"
  123.         cat ${t1}
  124.         rm ${t1} ${t2}
  125.         exit 1
  126.     fi
  127.     ;;
  128.  
  129. *)
  130.     exit 1
  131.     ;;
  132. esac
  133.  
  134. rm ${t1} ${t2}
  135.  
  136. exit 0
  137.