summaryrefslogtreecommitdiff
path: root/net-mgmt/wide-dhcp/files/patch-ac
blob: 579d3751b20dacb36dcb2ccc9f433cb52b571cca (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
--- client/dhcpc_subr.c.orig	Thu Jul  3 05:19:01 1997
+++ client/dhcpc_subr.c	Sat Jun 27 19:30:56 1998
@@ -64,6 +64,12 @@
 #ifdef __osf__
 #include <net/pfilt.h>
 #endif
+#ifdef __FreeBSD__
+#include <osreldate.h>
+#if (__FreeBSD_version == 199702) || (__FreeBSD_version >= 300000)
+#include <net/if_var.h>
+#endif
+#endif
 #include <netinet/in.h>
 #include <netinet/in_systm.h>
 #include <netinet/if_ether.h>
@@ -71,6 +77,8 @@
 #include <netinet/ip.h>
 #include <netinet/udp.h>
 #include <arpa/inet.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
 #ifdef VIP
 #include <netinet/vip.h>
 #endif
@@ -164,6 +172,8 @@
 
 int config_if();
 void set_route();
+void set_resolv();
+void set_hostname();
 void make_decline();
 void make_release();
 Long generate_xid();
@@ -1853,6 +1863,10 @@
   register char *cp = m_rtmsg.m_space;
   register int l;
 
+  if (!ISSET(param->got_option, ROUTER) ||
+      param->router == NULL || param->router->addr == NULL)
+    return;
+
   bzero(&so_dst, sizeof(struct sockaddr));
   bzero(&so_mask, sizeof(struct sockaddr));
   bzero(&so_gate, sizeof(struct sockaddr));
@@ -1895,6 +1909,45 @@
 
 #endif
 
+void
+set_resolv(param)
+struct dhcp_param *param;
+{
+  FILE *fp;
+  int i;
+
+  if (param == NULL) {
+    return;
+  }
+
+  /*
+   * set resolv.conf
+   */
+  if (param->dns_server != NULL) {
+    if (param->dns_server->num && param->dns_server->addr != NULL) {
+      unlink(_PATH_RESCONF);
+      if ((fp = fopen(_PATH_RESCONF, "w")) == NULL) {
+        return;
+      }
+      if (param->dns_domain != NULL)
+        fprintf(fp, "domain %s\n", param->dns_domain);
+      for (i = 0; i < param->dns_server->num; i++) {
+        fprintf(fp,"nameserver %s\n",inet_ntoa(param->dns_server->addr[i]));
+      }
+      fclose(fp);
+    }
+  }
+}
+
+void
+set_hostname(param)
+struct dhcp_param *param;
+{
+  if (param->hostname != NULL) {
+    sethostname(param->hostname,strlen(param->hostname));
+  }
+  return;
+}
 
 void
 make_decline(lsbuf, reqspecp)
@@ -2528,11 +2581,9 @@
   struct msghdr msg;
   struct iovec bufvec[1];
   int bufsize = DFLTDHCPLEN;
-#if 0
 #if defined(__bsdi__) || defined(__FreeBSD__)
   int on;
 #endif
-#endif
 
   if (sockfd == -1) {
     struct sockaddr_in myaddr;
@@ -2556,7 +2607,7 @@
       return(-1);
     }
 
-#if 0
+#if defined(__bsdi__) || defined(__FreeBSD__)
     on = 1;
     if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on)) < 0) {
       close(sockfd);