home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / bootpd-2.zip / CONVOLDT.SH < prev    next >
Linux/UNIX/POSIX Shell Script  |  1994-03-08  |  4KB  |  142 lines

  1. #!/bin/sh
  2. #   convert_bootptab    Jeroen.Scheerder@let.ruu.nl 02/25/94
  3. #    This script can be used to convert bootptab files in old format
  4. #    to new (termcap-like) bootptab files
  5. #
  6. # The old format - real entries are commented out by '###'
  7. #
  8. # Old-style bootp files consist of two sections.
  9. # The first section has two entries:
  10. # First, a line that specifies the home directory
  11. # (where boot file paths are relative to)
  12.  
  13. ###/tftpboot
  14.  
  15. # The next non-empty non-comment line specifies the default bootfile
  16.  
  17. ###no-file
  18.  
  19. # End of first section - indicated by '%%' at the start of the line
  20.  
  21. ###%%
  22.  
  23. # The remainder of this file contains one line per client
  24. # interface with the information shown by the table headings
  25. # below. The host name is also tried as a suffix for the
  26. # bootfile when searching the home directory (that is,
  27. # bootfile.host)
  28. #
  29. # Note that htype is always 1, indicating the hardware type Ethernet.
  30. # Conversion therefore always yields ':ha=ether:'.
  31. #
  32. # host    htype    haddr    iaddr    bootfile
  33. #
  34.  
  35. ###somehost    1    00:0b:ad:01:de:ad    128.128.128.128    dummy
  36.  
  37. # That's all for the description of the old format.
  38. # For the new-and-improved format, see bootptab(5).
  39.  
  40. set -u$DX
  41.  
  42. case $#
  43. in    2 )    OLDTAB=$1 ; NEWTAB=$2 ;;
  44.     * )    echo "Usage: `basename $0` <Input> <Output>"
  45.         exit 1
  46. esac
  47.  
  48. if [ ! -r $OLDTAB ]
  49. then
  50.     echo "`basename $0`: $OLDTAB does not exist or is unreadable."
  51.     exit 1
  52. fi
  53.  
  54. if touch $NEWTAB 2> /dev/null
  55. then
  56.     :
  57. else
  58.     echo "`basename $0`: cannot write to $NEWTAB."
  59.     exit 1
  60. fi
  61.  
  62.  
  63. cat << END_OF_HEADER >> $NEWTAB
  64. # /etc/bootptab: database for bootp server (/etc/bootpd)
  65. # This file was generated automagically
  66.  
  67. # Blank lines and lines beginning with '#' are ignored.
  68. #
  69. # Legend:    (see bootptab.5)
  70. #    first field -- hostname (not indented)
  71. #    bf -- bootfile
  72. #    bs -- bootfile size in 512-octet blocks
  73. #    cs -- cookie servers
  74. #    df -- dump file name
  75. #    dn -- domain name
  76. #    ds -- domain name servers
  77. #    ef -- extension file
  78. #    gw -- gateways
  79. #    ha -- hardware address
  80. #    hd -- home directory for bootfiles
  81. #    hn -- host name set for client
  82. #    ht -- hardware type
  83. #    im -- impress servers
  84. #    ip -- host IP address
  85. #    lg -- log servers
  86. #    lp -- LPR servers
  87. #    ns -- IEN-116 name servers
  88. #    ra -- reply address
  89. #    rl -- resource location protocol servers
  90. #    rp -- root path
  91. #    sa -- boot server address
  92. #    sm -- subnet mask
  93. #    sw -- swap server
  94. #    tc -- template host (points to similar host entry)
  95. #    td -- TFTP directory
  96. #    to -- time offset (seconds)
  97. #    ts -- time servers
  98. #    vm -- vendor magic number
  99. #    Tn -- generic option tag n
  100. #
  101. # Be careful about including backslashes where they're needed.  Weird (bad)
  102. # things can happen when a backslash is omitted where one is intended.
  103. # Also, note that generic option data must be either a string or a
  104. # sequence of bytes where each byte is a two-digit hex value.
  105.  
  106. # First, we define a global entry which specifies the stuff every host uses.
  107. # (Host name lookups are relative to the domain: your.domain.name)
  108.  
  109. END_OF_HEADER
  110.  
  111. # Fix up HW addresses in aa:bb:cc:dd:ee:ff and aa-bb-cc-dd-ee-ff style first
  112. # Then awk our stuff together
  113. sed -e  's/[:-]//g' < $OLDTAB | \
  114. nawk 'BEGIN    { PART = 0 ; FIELD=0 ; BOOTPATH="unset" ; BOOTFILE="unset" }
  115.     /^%%/    {
  116.                 PART = 1
  117.                 printf ".default:\\\n\t:ht=ether:\\\n\t:hn:\\\n\t:dn=your.domain.name:\\\n\t:ds=your,dns,servers:\\\n\t:sm=255.255.0.0:\\\n\t:hd=%s:\\\n\t:rp=%s:\\\n\t:td=%s:\\\n\t:bf=%s:\\\n\t:to=auto:\n\n", BOOTPATH, BOOTPATH, BOOTPATH, BOOTFILE
  118.                 next
  119.             }
  120.     /^$/    { next }
  121.     /^#/    { next }
  122.         {
  123.             if ( PART == 0 && FIELD < 2 )
  124.               {
  125.                 if ( FIELD == 0 ) BOOTPATH=$1
  126.                 if ( FIELD == 1 ) BOOTFILE=$1
  127.                 FIELD++
  128.             }
  129.         }
  130.         {
  131.             if ( PART == 1 )
  132.             {
  133.                 HOST=$1
  134.                 HA=$3
  135.                 IP=$4
  136.                 BF=$5
  137.                 printf "%s:\\\n\t:tc=.default:\\\n\t:ha=0x%s:\\\n\t:ip=%s:\\\n\t:bf=%s:\n", HOST, HA, IP, BF
  138.             }
  139.         }' >> $NEWTAB
  140.  
  141. exit 0
  142.