summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sbin/natd/natd.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/sbin/natd/natd.c b/sbin/natd/natd.c
index 6bc4c5d3c287..c8c7b6d96a67 100644
--- a/sbin/natd/natd.c
+++ b/sbin/natd/natd.c
@@ -86,7 +86,7 @@ static void SetAliasAddressFromIfName (const char *ifName);
static void InitiateShutdown (int);
static void Shutdown (int);
static void RefreshAddr (int);
-static void ParseOption (const char* option, const char* parms, int cmdLine);
+static void ParseOption (const char* option, const char* parms);
static void ReadConfigFile (const char* fileName);
static void SetupPortRedirect (const char* parms);
static void SetupAddressRedirect (const char* parms);
@@ -188,7 +188,7 @@ int main (int argc, char** argv)
errx (1, "both input and output ports are required");
if (inPort == 0 && outPort == 0 && inOutPort == 0)
- ParseOption ("port", DEFAULT_SERVICE, 0);
+ ParseOption ("port", DEFAULT_SERVICE);
/*
* Check if ignored packets should be dropped.
@@ -421,9 +421,9 @@ static void DaemonMode ()
static void ParseArgs (int argc, char** argv)
{
int arg;
- char* parm;
char* opt;
char parmBuf[256];
+ int len; /* bounds checking */
for (arg = 1; arg < argc; arg++) {
@@ -434,23 +434,27 @@ static void ParseArgs (int argc, char** argv)
Usage ();
}
- parm = NULL;
parmBuf[0] = '\0';
+ len = 0;
while (arg < argc - 1) {
if (argv[arg + 1][0] == '-')
break;
- if (parm)
- strcat (parmBuf, " ");
+ if (len) {
+ strncat (parmBuf, " ", sizeof(parmBuf) - (len + 1));
+ len += strlen(parmBuf + len);
+ }
++arg;
- parm = parmBuf;
- strcat (parmBuf, argv[arg]);
+ strncat (parmBuf, argv[arg], sizeof(parmBuf) - (len + 1));
+ len += strlen(parmBuf + len);
+
}
- ParseOption (opt + 1, parm, 1);
+ ParseOption (opt + 1, (len ? parmBuf : NULL));
+
}
}
@@ -1069,7 +1073,7 @@ static struct OptionInfo optionTable[] = {
};
-static void ParseOption (const char* option, const char* parms, int cmdLine)
+static void ParseOption (const char* option, const char* parms)
{
int i;
struct OptionInfo* info;
@@ -1295,7 +1299,7 @@ void ReadConfigFile (const char* fileName)
while (*ptr && isspace (*ptr))
++ptr;
- ParseOption (option, *ptr ? ptr : NULL, 0);
+ ParseOption (option, *ptr ? ptr : NULL);
}
fclose (file);