Pedantic removal of strcpy that mostly
serves to make it easier to find and remove other
unsafe (buffer overflow prone) uses of strcpy.
To apply:
cd pmacct-0.11.5
patch -p1 < strlcpy.patch
Karl <[email protected]>
Free Software: "You don't pay back, you pay forward."
-- Robert A. Heinlein
diff -ruN pmacct-0.11.5/src/pmacctd.c pmacct-0.11.5-patched/src/pmacctd.c
--- pmacct-0.11.5/src/pmacctd.c Wed Feb 18 04:19:05 2009
+++ pmacct-0.11.5-patched/src/pmacctd.c Wed Feb 18 15:39:20 2009
@@ -135,106 +135,106 @@
cfg_cmdline[rows] = malloc(SRVBUFLEN);
switch (cp) {
case 'P':
- strcpy(cfg_cmdline[rows], "plugins: ");
+ strlcpy(cfg_cmdline[rows], "plugins: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
break;
case 'D':
- strcpy(cfg_cmdline[rows], "daemonize: true");
+ strlcpy(cfg_cmdline[rows], "daemonize: true", SRVBUFLEN);
rows++;
break;
case 'd':
debug = TRUE;
- strcpy(cfg_cmdline[rows], "debug: true");
+ strlcpy(cfg_cmdline[rows], "debug: true", SRVBUFLEN);
rows++;
break;
case 'n':
- strcpy(cfg_cmdline[rows], "networks_file: ");
+ strlcpy(cfg_cmdline[rows], "networks_file: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
break;
case 'o':
- strcpy(cfg_cmdline[rows], "ports_file: ");
+ strlcpy(cfg_cmdline[rows], "ports_file: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
break;
case 'N':
- strcpy(cfg_cmdline[rows], "promisc: false");
+ strlcpy(cfg_cmdline[rows], "promisc: false", SRVBUFLEN);
rows++;
break;
case 'f':
strlcpy(config_file, optarg, sizeof(config_file));
break;
case 'F':
- strcpy(cfg_cmdline[rows], "pidfile: ");
+ strlcpy(cfg_cmdline[rows], "pidfile: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
break;
case 'c':
- strcpy(cfg_cmdline[rows], "aggregate: ");
+ strlcpy(cfg_cmdline[rows], "aggregate: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
break;
case 'b':
- strcpy(cfg_cmdline[rows], "imt_buckets: ");
+ strlcpy(cfg_cmdline[rows], "imt_buckets: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
break;
case 'm':
- strcpy(cfg_cmdline[rows], "imt_mem_pools_number: ");
+ strlcpy(cfg_cmdline[rows], "imt_mem_pools_number: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
have_num_memory_pools = TRUE;
rows++;
break;
case 'p':
- strcpy(cfg_cmdline[rows], "imt_path: ");
+ strlcpy(cfg_cmdline[rows], "imt_path: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
break;
case 'r':
- strcpy(cfg_cmdline[rows], "sql_refresh_time: ");
+ strlcpy(cfg_cmdline[rows], "sql_refresh_time: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
cfg_cmdline[rows] = malloc(SRVBUFLEN);
- strcpy(cfg_cmdline[rows], "print_refresh_time: ");
+ strlcpy(cfg_cmdline[rows], "print_refresh_time: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
break;
case 'v':
- strcpy(cfg_cmdline[rows], "sql_table_version: ");
+ strlcpy(cfg_cmdline[rows], "sql_table_version: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
break;
case 's':
- strcpy(cfg_cmdline[rows], "imt_mem_pools_size: ");
+ strlcpy(cfg_cmdline[rows], "imt_mem_pools_size: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
break;
case 'S':
- strcpy(cfg_cmdline[rows], "syslog: ");
+ strlcpy(cfg_cmdline[rows], "syslog: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
break;
case 'i':
- strcpy(cfg_cmdline[rows], "interface: ");
+ strlcpy(cfg_cmdline[rows], "interface: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
break;
case 'I':
- strcpy(cfg_cmdline[rows], "pcap_savefile: ");
+ strlcpy(cfg_cmdline[rows], "pcap_savefile: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
break;
case 'w':
- strcpy(cfg_cmdline[rows], "interface_wait: true");
+ strlcpy(cfg_cmdline[rows], "interface_wait: true", SRVBUFLEN);
rows++;
break;
case 'W':
- strcpy(cfg_cmdline[rows], "savefile_wait: true");
+ strlcpy(cfg_cmdline[rows], "savefile_wait: true", SRVBUFLEN);
rows++;
break;
case 'L':
- strcpy(cfg_cmdline[rows], "snaplen: ");
+ strlcpy(cfg_cmdline[rows], "snaplen: ", SRVBUFLEN);
strncat(cfg_cmdline[rows], optarg, CFG_LINE_LEN(cfg_cmdline[rows]));
rows++;
break;
_______________________________________________
pmacct-discussion mailing list
http://www.pmacct.net/#mailinglists