home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / sendmail / uk-sendmail2.1 / Dombuild < prev    next >
Encoding:
Text File  |  1991-06-11  |  4.1 KB  |  206 lines

  1. #!/bin/sh
  2. #
  3. #  shell script to generate a sendmail dom-tbl.m4 file containing all
  4. #  the domain information for this site from a set of domain tables.
  5. #
  6.  
  7. if [ $# -le 1 ]
  8. then    echo    usage: $0 [-ida file] files ... -top file
  9.     exit
  10. fi
  11.  
  12. rm -f $$.*
  13. outf=dom-tbl.m4
  14. strip="sed -e /#/s/#.*// -e /^\$/d"
  15. classes="ABCEFGHIKLM"
  16. cp /dev/null $$.S10
  17.  
  18. ida=
  19. top=
  20. rest=
  21.  
  22. while [ $# -gt 0 ]
  23. do
  24.     case $1 in
  25.     -o)        outf=$2
  26.             shift
  27.             ;;
  28.     -ida)        ida="$ida $2"
  29.             shift
  30.             ;;
  31.     -top)        top="$top $2"
  32.             shift
  33.             ;;
  34.     *)        rest="$rest $1"
  35.             ;;
  36.     esac
  37.     shift
  38. done
  39.  
  40. if [ -n "$ida" ]
  41. then
  42.     set $ida
  43.     dbmfile=`basename $1 .dom`
  44.  
  45.     $strip $ida | awk '
  46. NF==1    { $2 = $1; $1 = substr($2, 1, index($2,".")-1) }    # shorthand
  47.     { print $1 "    " $2 }
  48.     ' |  dbm load - $dbmfile
  49.  
  50.     echo "OKA`pwd`/$dbmfile" > $$.S10
  51.     echo 'R$+@$+        $:$1@$(A $2 $)        lookup db' >> $$.S10
  52. fi
  53.  
  54. $strip $top | awk '{ printf "%s %s.TOP_LEVEL_DOM\n",$1,$1 }' > $$.top
  55.  
  56. $strip $$.top $rest | awk '
  57. NR==1    { MINCLSIZE = 3
  58.       c = 1
  59.       S10 = prefix "S10"
  60.       S11 = prefix "S11"
  61.       S12 = prefix "S12"
  62.       S13 = prefix "S13"
  63.       cl_outd = prefix "classf"
  64.     }
  65. NF==1    { $2 = $1    # shorthand
  66.       $1 = substr($2, 1, index($2,".")-1)
  67.     }
  68.     { i = index($2,".")
  69.       lpart = substr($2,1,i-1)
  70.  
  71.       if ($1 != lpart)
  72.           printf "R$*%s\t\t$1%s\n", $1, $2    >> S10
  73.       else
  74.       {    rpart = substr($2,i+1)
  75.         domain[rpart] = domain[rpart] " " lpart
  76.         n = split(rpart, doms, ".")
  77.         rparts[rpart] = n
  78.       }
  79.     }
  80.  
  81. END    {
  82.         for (i in rparts)
  83.         {    order[rparts[i]] = order[rparts[i]] " " i
  84.         if (rparts[i] > maxn)
  85.             maxn = rparts[i]
  86.         }
  87.  
  88.         for (i=1; i <= maxn; i++)
  89.         {    m = split(order[i], rpts, " ")
  90.         for (j=1; j<=m; j++)
  91.         {   rhs = rpts[j]
  92.                 d = split(domain[rhs], subdoms, " ")
  93.  
  94.             if (rhs == "TOP_LEVEL_DOM")
  95.             printf "\nCT%s\n", domain[rhs]        >cl_outd
  96.             else if (d >= MINCLSIZE && c <= length(classes))
  97.             {    C = substr(classes, c, 1)
  98.             c++
  99.             printf "\nD%s%s\n", C, rhs        >cl_outd
  100.             printf "C%s%s\n", C, domain[rhs]    >cl_outd
  101.             printf "R$*$=%s\t\t\t$@$1$2.$%s\t\tu@d -> u@d.%s\n", \
  102.                     C, C, rhs >S11
  103.             printf "R$*$=%s.$%s\t\t$@$1$2\t\tu@d.%s -> u@d\n", \
  104.                     C, C, rhs >S12
  105.             printf "R$*$=%s\t\t\t$@$1$2\n", C    >S13
  106.             printf "R$*@$=%s.$+\t\t$@$>9$1@$2.$3\n", C >S13
  107.             }
  108.             else
  109.             {    for (k=1; k<=d; k++)
  110.             {    printf "R$*%s\t\t$@$1%s.%s\n", subdoms[k], \
  111.                     subdoms[k], rhs  >S11
  112.                 printf "R$*%s.%s\t\t$@$1%s\n", subdoms[k], \
  113.                     rhs, subdoms[k]  >S12
  114.                 printf "R$*%s\t\t\t$@$1%s\n", \
  115.                     subdoms[k], subdoms[k]  >S13
  116.                 printf "R$*@%s.$+\t\t$@$>9$1@%s.$2\n", \
  117.                     subdoms[k], subdoms[k]  >S13
  118.             }
  119.             }
  120.         }
  121.         }
  122.     }
  123. ' prefix=$$. classes=$classes -
  124.  
  125. #
  126. #  The header
  127. #
  128. cat > $outf <<EOF
  129. ###############################################################################
  130. #####
  131. #####    @(#)$outf    UK-2.1 sendmail configuration        18/11/88
  132. #####
  133. #####    The domain database and rules
  134. #####
  135. ###############################################################################
  136.  
  137. # classes
  138. EOF
  139.  
  140. #
  141. #  generate classes
  142. #
  143. while read class group
  144. do
  145.     echo $group | tr ' ' '\012' | fmt | sed "s/^/$class/"
  146. done  < $$.classf >> $outf
  147.  
  148.  
  149. #
  150. #  Ruleset 10
  151. #
  152. cat - $$.S10 >> $outf <<'EOF'
  153.  
  154. ##########################################
  155. #  Ruleset 10  --  domain name aliasing  #
  156. ##########################################
  157.  
  158. S10
  159. EOF
  160.  
  161. #
  162. #  Ruleset 11
  163. #
  164. cat - $$.S11 >> $outf <<'EOF'
  165.  
  166. ########################################################
  167. #  Ruleset 11  --  Expand address to full domain name  #
  168. ########################################################
  169.  
  170. S11
  171. R$*$=T            $@$1$2        already fully qualified
  172. EOF
  173.  
  174. #
  175. #  Ruleset 12
  176. #
  177. cat >> $outf <<'EOF'
  178.  
  179. ifdef(`LOCALSHOWUUCP',`
  180. ############################################################
  181. #  Ruleset 12  --  Strip full domain name to minimum part  #
  182. ############################################################
  183.  
  184. S12
  185. EOF
  186. ( tail -r $$.S12 ; echo "')" ) >> $outf
  187.  
  188. #
  189. #  Ruleset 13
  190. #
  191. cat - $$.S13 >> $outf <<'EOF'
  192.  
  193. ifdef(`NRSFORMAT',`
  194. ###############################################################
  195. #  Ruleset 13  --  Convert domains in NRS order to 822 order  #
  196. ###############################################################
  197.  
  198. S13
  199. R$*$=T            $@$1$2
  200. R$*@$=T.$+        $@$>9$1@$2.$3
  201. EOF
  202. echo "')" >> $outf
  203.  
  204. rm -f $$.*
  205. exit
  206.