Advertisement
devinteske

More sysinstall -> bsdconfig

Dec 13th, 2012
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.45 KB | None | 0 0
  1. #
  2. # Structure of dhclient.leases(5) lease { ... } entry
  3. #
  4. f_struct_define DHCP_LEASE \
  5.         interface               \
  6.         fixed_address           \
  7.         filename                \
  8.         server_name             \
  9.         script                  \
  10.         medium                  \
  11.         host_name               \
  12.         subnet_mask             \
  13.         routers                 \
  14.         domain_name_servers     \
  15.         domain_name             \
  16.         broadcast_address       \
  17.         dhcp_lease_time         \
  18.         dhcp_message_type       \
  19.         dhcp_server_identifier  \
  20.         dhcp_renewal_time       \
  21.         dhcp_rebinding_time     \
  22.         renew                   \
  23.         rebind                  \
  24.         expire
  25.  
  26. # int dhcpParseLeases(char *file, char *hostname, char *domain,
  27. #                     char *nameserver, char *ipaddr, char *gateway,
  28. #                     char *netmask)
  29.  
  30. f_dhcp_parse_leases() # $leasefile struct_name
  31. {
  32.         local leasefile="$1" struct_name="$2"
  33.  
  34.         [ "$struct_name" ] || return $FAILURE
  35.  
  36.         if [ ! -e "$leasefile" ]; then
  37.                 f_dprintf "%s: No such file or directory\n" "$leasefile"
  38.                 return $FAILURE
  39.         fi
  40.  
  41.         f_struct $struct_name && $struct_name.free
  42.         f_struct_new DHCP_LEASE $struct_name
  43.  
  44.         eval "$( awk -v struct=$struct_name '
  45.                BEGIN {
  46.                        lease_found = 0
  47.                        keyword_list = " \
  48.                                 interface       \
  49.                                 fixed-address   \
  50.                                 filename        \
  51.                                 server-name     \
  52.                                 script          \
  53.                                 medium          \
  54.                         "
  55.                        split(keyword_list, keywords, FS)
  56.  
  57.                        time_list = "renew rebind expire"
  58.                        split(time_list, times, FS)
  59.  
  60.                        option_list = " \
  61.                                 host-name               \
  62.                                 subnet-mask             \
  63.                                 routers                 \
  64.                                 domain-name-servers     \
  65.                                 domain-name             \
  66.                                 broadcast-address       \
  67.                                 dhcp-lease-time         \
  68.                                 dhcp-message-type       \
  69.                                 dhcp-server-identifier  \
  70.                                 dhcp-renewal-time       \
  71.                                 dhcp-rebinding-time     \
  72.                         "
  73.                        split(option_list, options, FS)
  74.                }
  75.  
  76.                function set_value(prop,value)
  77.                {
  78.                        lease_found = 1
  79.                        gsub(/[^[:alnum:]_]/, "_", prop)
  80.                        sub(/;$/, "", value)
  81.                        sub(/^"/, "", value)
  82.                         sub(/"$/, "", value)
  83.                        sub(/,.*/, "", value)
  84.                        printf "%s[%s] = \"%s\"\n", struct, prop, value
  85.                }
  86.                /^lease {$/, /^}$/ \
  87.                {
  88.                        if ( $0 ~ /^lease {$/ ) next
  89.                        if ( $0 ~ /^}$/ ) exit
  90.  
  91.                        for (k in keywords)
  92.                        {
  93.                                keyword = keywords[k]
  94.                                if ( $1 == keyword )
  95.                                {
  96.                                        set_value(keyword, $2)
  97.                                        next
  98.                                }
  99.                        }
  100.  
  101.                        for (t in times)
  102.                        {
  103.                                time = times[t]
  104.                                if ( $1 == time )
  105.                                {
  106.                                        set_value(time, $2 " " $3 " " $4)
  107.                                        next
  108.                                }
  109.                        }
  110.  
  111.                        if ( $1 != "option" ) next
  112.                        for (o in options)
  113.                        {
  114.                                option = options[o]
  115.                                if ( $2 == option )
  116.                                {
  117.                                        set_value(option, $3)
  118.                                        next
  119.                                }
  120.                        }
  121.                }
  122.  
  123.                EXIT {
  124.                        if ( ! lease_found )
  125.                        {
  126.                                print struct ".free"
  127.                                print "return $FAILURE"
  128.                        }
  129.                }
  130.        ' "$leasefile" )"
  131. }
  132.  
  133. # static void dhcpGetInfo(Device *devp)
  134.  
  135. f_dhcp_get_info() # $interface
  136. {
  137.         local interface="$1"
  138.         local leasefile="/var/db/dhclient.leases.$interface"
  139.  
  140.         # If it fails, do it the old-fashioned way
  141.         local _ipaddr _netmask _gateway _hostname="" _nameserver=""
  142.         if f_dhcp_parse_leases "$leasefile" lease; then
  143.                 setvar $VAR_IPADDR $( lease[fixed_address] )
  144.                 setvar $VAR_NETMASK $( lease[subnet_mask] )
  145.                 local _routers="$( lease[routers] )"
  146.                 setvar $VAR_GATEWAY ${_routers%%,*}
  147.                 local _nameservers="$( lease[domain_name_servers] )"
  148.                 setvar $VAR_NAMESERVERS ${_nameservers%%,*}
  149.                 f_quietly lease[host_name] &&
  150.                         setvar $VAR_HOSTNAME $( lease[host_name] )
  151.                 lease.free
  152.         else
  153.                 # Bah, now we have to get the information from ifconfig
  154.                 f_dprintf "DHCP configured interface returns %s\n" \
  155.                           "$( ifconfig "$interface" )"
  156.                 setvar $VAR_IPADDR  $( f_ifconfig_inet "$interface" )
  157.                 setvar $VAR_NETMASK $( f_ifconfig_netmask "$interface" )
  158.                 setvar $VAR_GATEWAY $( f_route_get_default )
  159.         fi
  160.  
  161.         # If we didn't get a name server value, hunt for it in resolv.conf
  162.         if [ -r "$RESOLV_CONF" -a ! "$( f_getvar $VAR_NAMESERVER )" ]; then
  163.                 local _nameservers="$( f_resolv_conf_nameservers )"
  164.                 _nameserver="${_nameservers%%[$IFS]*}"
  165.                 setvar $VAR_NAMESERVER "$_nameserver"
  166.         fi
  167.  
  168.         return $SUCCESS
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement