[haiku-commits] r35941 - haiku/trunk/src/servers/net

  • From: superstippi@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 24 Mar 2010 10:50:24 +0100 (CET)

Author: stippi
Date: 2010-03-24 10:50:24 +0100 (Wed, 24 Mar 2010)
New Revision: 35941
Changeset: http://dev.haiku-os.org/changeset/35941/haiku

Modified:
   haiku/trunk/src/servers/net/DHCPClient.cpp
   haiku/trunk/src/servers/net/DHCPClient.h
Log:
My commit message in r35940 wasn't quite true, if DHCP_OFFER contained the
name servers, but DHCP_ACK didn't (probably unlikely, but who knows...), then
if DCHP_ACK contained the domain, the name server entries in resolv.conf would
be lost. Now DHCPClient maintains whether resolv.conf should be rewritten and
does so once per _Negotiate() session.


Modified: haiku/trunk/src/servers/net/DHCPClient.cpp
===================================================================
--- haiku/trunk/src/servers/net/DHCPClient.cpp  2010-03-24 09:36:41 UTC (rev 
35940)
+++ haiku/trunk/src/servers/net/DHCPClient.cpp  2010-03-24 09:50:24 UTC (rev 
35941)
@@ -336,7 +336,8 @@
        : AutoconfigClient("dhcp", target, device),
        fConfiguration(kMsgConfigureInterface),
        fRunner(NULL),
-       fLeaseTime(0)
+       fLeaseTime(0),
+       fRewriteResolvConf(true)
 {
        fStartTime = system_time();
        fTransactionID = (uint32)fStartTime;
@@ -462,6 +463,7 @@
                // no need to check the status; in case of an error we'll just 
send
                // the message again
 
+       fRewriteResolvConf = true;
        // receive loop until we've got an offer and acknowledged it
 
        while (state != ACKNOWLEDGED) {
@@ -614,15 +616,10 @@
        message_option option;
        const uint8* data;
        size_t size;
-       // TODO: We write the resolv.conf file once per _ParseOptions() 
invokation.
-       // The invokation happens twice, once for DHCP_OFFER and once for 
DHCP_ACK.
-       // If the options in each of these invokations complement each other,
-       // specifically for OPTION_DOMAIN_NAME_SERVER and OPTION_DOMAIN_NAME, 
then
-       // we would lose the information from the previous invokation by
-       // overwriting the file. A good fix would be to parse resolv.conf, 
maintain
-       // all information and distinguish between user entered and 
auto-generated
-       // parts of the file.
-       bool resolvConfCreated = false;
+       // TODO: resolv.conf should be parsed, all information should be
+       // maintained and it should be distinguished between user entered
+       // and auto-generated parts of the file, with this method only 
re-writing
+       // the auto-generated parts of course.
        while (message.NextOption(cookie, option, data, size)) {
                // iterate through all options
                switch (option) {
@@ -643,13 +640,13 @@
                                        break;
                                }
 
-                               const char* openMode = resolvConfCreated ? "a" 
: "w";
+                               const char* openMode = fRewriteResolvConf ? "w" 
: "a";
                                FILE* file = fopen(path.Path(), openMode);
                                for (uint32 i = 0; i < size / 4; i++) {
                                        syslog(LOG_INFO, "DNS: %s\n",
                                                _ToString(&data[i * 
4]).String());
                                        if (file != NULL) {
-                                               resolvConfCreated = true;
+                                               fRewriteResolvConf = false;
                                                fprintf(file, "nameserver %s\n",
                                                        _ToString(&data[i * 
4]).String());
                                        }
@@ -693,10 +690,10 @@
                                        break;
                                }
 
-                               const char* openMode = resolvConfCreated ? "a" 
: "w";
+                               const char* openMode = fRewriteResolvConf ? "w" 
: "a";
                                FILE* file = fopen(path.Path(), openMode);
                                if (file != NULL) {
-                                       resolvConfCreated = true;
+                                       fRewriteResolvConf = false;
                                        fprintf(file, "domain %.*s\n", 
(int)size,
                                                (const char*)data);
                                        fclose(file);

Modified: haiku/trunk/src/servers/net/DHCPClient.h
===================================================================
--- haiku/trunk/src/servers/net/DHCPClient.h    2010-03-24 09:36:41 UTC (rev 
35940)
+++ haiku/trunk/src/servers/net/DHCPClient.h    2010-03-24 09:50:24 UTC (rev 
35941)
@@ -65,6 +65,7 @@
                        bigtime_t                       fRebindingTime;
                        bigtime_t                       fLeaseTime;
                        status_t                        fStatus;
+                       bool                            fRewriteResolvConf;
 };
 
 #endif // DHCP_CLIENT_H


Other related posts:

  • » [haiku-commits] r35941 - haiku/trunk/src/servers/net - superstippi