Nmap Development mailing list archives

[PATCH] Rewrite (simplify) parse_bounce_argument() in nmap.cc


From: Kris Katterjohn <kjak () ispwest com>
Date: Wed, 06 Sep 2006 21:48:23 -0500

The attached patch simplifies parse_bounce_argument() by removing
duplicate code. I just sorta pulled out the duplicated things and
rearranged it a bit.

I had a printf at the bottom so I could check the "extracted" values and
everything seemed to work fine.

Running size on the nmap.o's yielded a decrease of 79 bytes in the text
segment, but a slight increase of 8 in the data segment on my box.

You probably have to apply the patch to a copy to really see the changes
because diff kinda jumped around and the patch may look kinda confusing.

It's a diff against 4.20ALPHA6.

Thanks,
Kris Katterjohn
--- x/nmap.cc   2006-09-02 16:50:41.000000000 -0500
+++ y/nmap.cc   2006-09-06 21:25:19.000000000 -0500
@@ -159,35 +159,29 @@ static int parse_scanflags(char *arg) {
 static int parse_bounce_argument(struct ftpinfo *ftp, char *url) {
   char *p = url,*q, *s;
 
-  if ((q = strrchr(url, '@'))) { /*we have username and/or pass */
-    *(q++) = '\0';
-    if ((s = strchr(q, ':')))
-      { /* has portno */
-       *(s++) = '\0';
-       strncpy(ftp->server_name, q, MAXHOSTNAMELEN);
-       ftp->port = atoi(s);
-      }
-    else  strncpy(ftp->server_name, q, MAXHOSTNAMELEN);
-
-    if ((s = strchr(p, ':'))) { /* User AND pass given */
-      *(s++) = '\0';
-      strncpy(ftp->user, p, 63);
+  if ((q = strrchr(url, '@'))) { /* we have user and/or pass */
+    *q++ = '\0';
+
+    if ((s = strchr(p, ':'))) { /* we have user AND pass */
+      *s++ = '\0';
       strncpy(ftp->pass, s, 255);
-    }
-    else { /* Username ONLY given */
+    } else { /* we ONLY have user */
       log_write(LOG_STDOUT, "Assuming %s is a username, and using the default password: %s\n",
-             p, ftp->pass);
-      strncpy(ftp->user, p, 63);
+               p, ftp->pass);
     }
+
+    strncpy(ftp->user, p, 63);
+  } else {
+    q = url;
   }
-  else /* no username or password given */ 
-    if ((s = strchr(url, ':'))) { /* portno is given */
-      *(s++) = '\0';
-      strncpy(ftp->server_name, url, MAXHOSTNAMELEN);
-      ftp->port = atoi(s);
-    }
-    else  /* default case, no username, password, or portnumber */
-      strncpy(ftp->server_name, url, MAXHOSTNAMELEN);
+
+  /* q points to beginning of server name */
+  if ((s = strchr(q, ':'))) { /* we have portno */
+    *s++ = '\0';
+    ftp->port = atoi(s);
+  }
+
+  strncpy(ftp->server_name, q, MAXHOSTNAMELEN);
 
   ftp->user[63] = ftp->pass[255] = ftp->server_name[MAXHOSTNAMELEN] = 0;
 

_______________________________________________
Sent through the nmap-dev mailing list
http://cgi.insecure.org/mailman/listinfo/nmap-dev
Archived at http://SecLists.Org

Current thread: