[Pkg-electronics-commits] [pcb-rnd] 04/08: exec bug fix already in new upstream version

Bdale Garbee bdale at moszumanska.debian.org
Fri Oct 13 03:56:27 UTC 2017


This is an automated email from the git hooks/post-receive script.

bdale pushed a commit to branch master
in repository pcb-rnd.

commit 7540a6401aa01dd7ca08867d3162df7c1e3dff49
Author: Bdale Garbee <bdale at gag.com>
Date:   Thu Oct 12 18:03:40 2017 -0600

    exec bug fix already in new upstream version
---
 debian/patches/exec-bug.diff | 253 -------------------------------------------
 debian/patches/series        |   1 -
 2 files changed, 254 deletions(-)

diff --git a/debian/patches/exec-bug.diff b/debian/patches/exec-bug.diff
deleted file mode 100644
index 406b018..0000000
--- a/debian/patches/exec-bug.diff
+++ /dev/null
@@ -1,253 +0,0 @@
-diff --git a/src/conf.c b/src/conf.c
-index 17bfb41..92449d4 100644
---- a/src/conf.c
-+++ b/src/conf.c
-@@ -1869,3 +1869,65 @@ void conf_setf(conf_role_t role, const char *path, int idx, const char *fmt, ...
- 
- 	free(tmp);
- }
-+
-+int pcb_conf_cmd_is_safe_(const char *path_, const char *value, const char **val_out, int msg)
-+{
-+	const char *reason;
-+	conf_native_t *nd;
-+	char *path, *s;
-+
-+	if (val_out != NULL)
-+		*val_out = NULL;
-+
-+	if (value == NULL)
-+		goto accept;
-+
-+	path = pcb_strdup(path_);
-+	for(s = path; *s != '\0'; s++)
-+		if (*s == '.')
-+			*s = '/';
-+	nd = conf_get_field(path);
-+	free(path);
-+
-+	if (nd == NULL) {
-+		if (msg)
-+			pcb_message(PCB_MSG_ERROR, "pcb_conf_cmd_is_safe(): invalid node path '%s' (looks like an internal error)\n", path_);
-+		return 0;
-+	}
-+
-+	if (nd->array_size > 1) {
-+		if (msg)
-+			pcb_message(PCB_MSG_ERROR, "pcb_conf_cmd_is_safe(): invalid node path '%s' (it is an array)\n", path_);
-+		return 0;
-+	}
-+
-+	switch(conf_lookup_role(nd->prop[0].src)) {
-+		/* these are considered safe, because: */
-+		case CFR_INTERNAL: /* the attacker would have access to the source code and compilation, could place system() anyway */
-+		case CFR_SYSTEM:   /* system admin - lets trust them */
-+		case CFR_USER:     /* user config is written by the user, attackers have no better chance to overwrite that than overwriting the the shell's rc */
-+		case CFR_CLI:      /* command line arguments: the user specified those; who has access to that potentially has access to the shell anyway */
-+			goto accept;
-+
-+		/* these are considered unsafe, because: */
-+		case CFR_DEFAULTPCB: /* the default pcb path may be manipulated; the user has the chance to specify the command path setting from safe config files */
-+			reason = "default pcb"; break;
-+		case CFR_ENV: /* env vars may be inherited from who-knows-where */
-+			reason = "env var"; break;
-+		case CFR_PROJECT: /* malicous file prepared by the attacker */
-+			reason = "project file"; break;
-+		case CFR_DESIGN: /* malicous file prepared by the attacker */
-+			reason = "board file"; break;
-+		default:
-+			reason = "unknown source";
-+	}
-+
-+	if (msg)
-+		pcb_message(PCB_MSG_ERROR, "pcb_conf_cmd_is_safe(): refusing to use the value of '%s' because it is from unsafe source %s\n", path_, reason);
-+	return 0;
-+
-+	accept:;
-+	if (val_out != NULL)
-+		*val_out = value;
-+	return 1;
-+}
-diff --git a/src/conf.h b/src/conf.h
-index e1b62ec..8e2a143 100644
---- a/src/conf.h
-+++ b/src/conf.h
-@@ -366,4 +366,10 @@ const char *conf_get_user_conf_name();
- /* Determine the file name of the project file - project_fn and pcb_fn can be NULL */
- const char *conf_get_project_conf_name(const char *project_fn, const char *pcb_fn, const char **out_project_fn);
- 
-+/* Return 1 if the config node named in path is considered safe enough
-+   to specify a command to execute - e.g. an attacker shouldn't be able to
-+   inject commands in design files sent */
-+int pcb_conf_cmd_is_safe_(const char *path, const char *value, const char **val_out, int msg);
-+#define pcb_conf_cmd_is_safe(path, val_out, msg) pcb_conf_cmd_is_safe_(#path, conf_core.path, val_out, msg)
-+
- #endif
-diff --git a/src/plug_io.c b/src/plug_io.c
-index b51a284..9251b49 100644
---- a/src/plug_io.c
-+++ b/src/plug_io.c
-@@ -48,6 +48,7 @@
- #include <string.h>
- 
- #include "change.h"
-+#include "conf.h"
- #include "data.h"
- #include "error.h"
- #include "plug_io.h"
-@@ -896,13 +897,17 @@ int pcb_write_pipe(const char *Filename, pcb_bool thePcb, const char *fmt, pcb_b
- 	int result;
- 	const char *p;
- 	static gds_t command;
-+	const char *save_cmd;
- 
- 	if (PCB_EMPTY_STRING_P(conf_core.rc.save_command))
- 		return pcb_write_pcb_file(Filename, thePcb, fmt, pcb_false, elem_only);
- 
-+	if (!pcb_conf_cmd_is_safe(rc.save_command, &save_cmd, 1))
-+		return -1;
-+
- 	/* setup commandline */
- 	gds_truncate(&command,0);
--	for (p = conf_core.rc.save_command; *p; p++) {
-+	for (p = save_cmd; *p; p++) {
- 		/* copy character if not special or add string to command */
- 		if (!(p[0] == '%' && p[1] == 'f'))
- 			gds_append(&command, *p);
-diff --git a/src_plugins/fp_fs/fp_fs.c b/src_plugins/fp_fs/fp_fs.c
-index 4d6d153..d592f55 100644
---- a/src_plugins/fp_fs/fp_fs.c
-+++ b/src_plugins/fp_fs/fp_fs.c
-@@ -464,7 +464,9 @@ static FILE *fp_fs_fopen(pcb_plug_fp_t *ctx, const char *path, const char *name,
- {
- 	char *basename, *params, *fullname;
- 	FILE *f = NULL;
--	const char *libshell = conf_core.rc.library_shell;
-+	const char *libshell;
-+
-+	pcb_conf_cmd_is_safe(rc.library_shell, &libshell, 1);
- 
- 	fctx->field[F_IS_PARAMETRIC].i = pcb_fp_dupname(name, &basename, &params);
- 	if (basename == NULL)
-diff --git a/src_plugins/import_netlist/import_netlist.c b/src_plugins/import_netlist/import_netlist.c
-index 27c3af3..60f5a9e 100644
---- a/src_plugins/import_netlist/import_netlist.c
-+++ b/src_plugins/import_netlist/import_netlist.c
-@@ -58,13 +58,16 @@ static int ReadNetlist(const char *filename)
- 	int i, j, lines, kind;
- 	pcb_bool continued;
- 	int used_popen = 0;
-+	const char *ratcmd;
- 
- 	if (!filename)
- 		return (1);									/* nothing to do */
- 
- 	pcb_message(PCB_MSG_INFO, _("Importing PCB netlist %s\n"), filename);
- 
--	if (PCB_EMPTY_STRING_P(conf_core.rc.rat_command)) {
-+	pcb_conf_cmd_is_safe(rc.rat_command, &ratcmd, 1);
-+
-+	if (PCB_EMPTY_STRING_P(ratcmd)) {
- 		fp = fopen(filename, "r");
- 		if (!fp) {
- 			pcb_message(PCB_MSG_ERROR, "Cannot open %s for reading", filename);
-diff --git a/src_plugins/io_pcb/parse_l.c b/src_plugins/io_pcb/parse_l.c
-index b8bf493..7d46b23 100644
---- a/src_plugins/io_pcb/parse_l.c
-+++ b/src_plugins/io_pcb/parse_l.c
-@@ -2516,6 +2516,7 @@ do { \
- int io_pcb_ParsePCB(pcb_plug_io_t *ctx, pcb_board_t *Ptr, const char *Filename, conf_role_t settings_dest)
- {
- 	int retval;
-+	const char *fcmd;
- 	yy_parse_tags = 0;
- 	yyPCB = Ptr;
- 	yyData = NULL;
-@@ -2524,10 +2525,15 @@ int io_pcb_ParsePCB(pcb_plug_io_t *ctx, pcb_board_t *Ptr, const char *Filename,
- 	yyFontkitValid = NULL;
- 	yyElement = NULL;
- 	yy_settings_dest = settings_dest;
-+
-+	if (!pcb_conf_cmd_is_safe(rc.file_command, &fcmd, 1))
-+		return -1;
-+
- 	if (settings_dest != CFR_invalid)
- 		conf_reset(settings_dest, Filename);
- 	pcb_setlocale(LC_ALL, "C"); /* make sure numerics are read predictably */
--	retval = Parse(NULL, conf_core.rc.file_command, conf_core.rc.file_path, Filename);
-+
-+	retval = Parse(NULL, fcmd, conf_core.rc.file_path, Filename);
- 	pcb_setlocale(LC_ALL, "");
- 	if ((settings_dest != CFR_invalid) && (retval == 0)) {
- 		/* overwrite settings from the flags, mark them not-to-save */
-@@ -2593,6 +2599,7 @@ int io_pcb_ParsePCB(pcb_plug_io_t *ctx, pcb_board_t *Ptr, const char *Filename,
- int io_pcb_ParseFont(pcb_plug_io_t *ctx, pcb_font_t *Ptr, const char *Filename)
- {
- 	int r = 0, valid;
-+	const char *fcmd;
- 	yy_parse_tags = 1;
- 	yyPCB = NULL;
- 	yyFont = Ptr;
-@@ -2600,8 +2607,11 @@ int io_pcb_ParseFont(pcb_plug_io_t *ctx, pcb_font_t *Ptr, const char *Filename)
- 	yyElement = NULL;
- 	yyFontReset = pcb_false;
- 
-+	if (!pcb_conf_cmd_is_safe(rc.font_command, &fcmd, 1))
-+		return -1;
-+
- 	yy_settings_dest = CFR_invalid;
--	r = Parse(NULL, conf_core.rc.font_command, NULL, Filename);
-+	r = Parse(NULL, fcmd, NULL, Filename);
- 	if (r == 0) {
- #ifdef DEBUG
- 		pcb_message(PCB_MSG_DEBUG, "Found %s in %s\n", Filename, conf_core.rc.font_command);
-diff --git a/src_plugins/io_pcb/parse_l.l b/src_plugins/io_pcb/parse_l.l
-index 66bc301..76174be 100644
---- a/src_plugins/io_pcb/parse_l.l
-+++ b/src_plugins/io_pcb/parse_l.l
-@@ -375,6 +375,7 @@ do { \
- int io_pcb_ParsePCB(pcb_plug_io_t *ctx, pcb_board_t *Ptr, const char *Filename, conf_role_t settings_dest)
- {
- 	int retval;
-+	const char *fcmd;
- 	yy_parse_tags = 0;
- 	yyPCB = Ptr;
- 	yyData = NULL;
-@@ -383,10 +384,15 @@ int io_pcb_ParsePCB(pcb_plug_io_t *ctx, pcb_board_t *Ptr, const char *Filename,
- 	yyFontkitValid = NULL;
- 	yyElement = NULL;
- 	yy_settings_dest = settings_dest;
-+
-+	if (!pcb_conf_cmd_is_safe(rc.file_command, &fcmd, 1))
-+		return -1;
-+
- 	if (settings_dest != CFR_invalid)
- 		conf_reset(settings_dest, Filename);
- 	pcb_setlocale(LC_ALL, "C"); /* make sure numerics are read predictably */
--	retval = Parse(NULL, conf_core.rc.file_command, conf_core.rc.file_path, Filename);
-+
-+	retval = Parse(NULL, fcmd, conf_core.rc.file_path, Filename);
- 	pcb_setlocale(LC_ALL, "");
- 	if ((settings_dest != CFR_invalid) && (retval == 0)) {
- 		/* overwrite settings from the flags, mark them not-to-save */
-@@ -452,6 +458,7 @@ int io_pcb_ParsePCB(pcb_plug_io_t *ctx, pcb_board_t *Ptr, const char *Filename,
- int io_pcb_ParseFont(pcb_plug_io_t *ctx, pcb_font_t *Ptr, const char *Filename)
- {
- 	int r = 0, valid;
-+	const char *fcmd;
- 	yy_parse_tags = 1;
- 	yyPCB = NULL;
- 	yyFont = Ptr;
-@@ -459,8 +466,11 @@ int io_pcb_ParseFont(pcb_plug_io_t *ctx, pcb_font_t *Ptr, const char *Filename)
- 	yyElement = NULL;
- 	yyFontReset = pcb_false;
- 
-+	if (!pcb_conf_cmd_is_safe(rc.font_command, &fcmd, 1))
-+		return -1;
-+
- 	yy_settings_dest = CFR_invalid;
--	r = Parse(NULL, conf_core.rc.font_command, NULL, Filename);
-+	r = Parse(NULL, fcmd, NULL, Filename);
- 	if (r == 0) {
- #ifdef DEBUG
- 		pcb_message(PCB_MSG_DEBUG, "Found %s in %s\n", Filename, conf_core.rc.font_command);
diff --git a/debian/patches/series b/debian/patches/series
index b477798..e69de29 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +0,0 @@
-exec-bug.diff

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-electronics/pcb-rnd.git



More information about the Pkg-electronics-commits mailing list