+ for (int i=0; i < num; i++) {
+ BPIPE *bpipe;
+ FILE *ffd;
+ char buf[1000];
+ char *p;
+ int optlen, stat;
+ INCEXE *ie;
+ FOPTS *fo;
+
+
+ if (list == INC_LIST) {
+ ie = fileset->include_items[i];
+ } else {
+ ie = fileset->exclude_items[i];
+ }
+ fo = ie->opts_list[0];
+ for (int j=0; j<fo->match.size(); j++) {
+ Dmsg1(100, "Match=%s\n", fo->match.get(j));
+ }
+ for (int j=0; j<ie->name_list.size(); j++) {
+ p = (char *)ie->name_list.get(j);
+ switch (*p) {
+ case '|':
+ p++; /* skip over the | */
+ fd->msg = edit_job_codes(jcr, fd->msg, p, "");
+ bpipe = open_bpipe(fd->msg, 0, "r");
+ if (!bpipe) {
+ Jmsg(jcr, M_FATAL, 0, _("Cannot run program: %s. ERR=%s\n"),
+ p, strerror(errno));
+ goto bail_out;
+ }
+ /* Copy File options */
+ if (ie->num_opts) {
+ bstrncpy(buf, ie->opts_list[0]->opts, sizeof(buf));
+ bstrncat(buf, " ", sizeof(buf));
+ } else {
+ bstrncpy(buf, "0 ", sizeof(buf));
+ }
+ Dmsg1(100, "Opts=%s\n", buf);
+ optlen = strlen(buf);
+ while (fgets(buf+optlen, sizeof(buf)-optlen, bpipe->rfd)) {
+ fd->msglen = Mmsg(&fd->msg, "%s", buf);
+ Dmsg2(200, "Inc/exc len=%d: %s", fd->msglen, fd->msg);
+ if (!bnet_send(fd)) {
+ Jmsg(jcr, M_FATAL, 0, _(">filed: write error on socket\n"));
+ goto bail_out;
+ }
+ }
+ if ((stat=close_bpipe(bpipe)) != 0) {
+ Jmsg(jcr, M_FATAL, 0, _("Error running program: %s. RtnStat=%d ERR=%s\n"),
+ p, stat, strerror(errno));
+ goto bail_out;
+ }
+ break;
+ case '<':
+ p++; /* skip over < */
+ if ((ffd = fopen(p, "r")) == NULL) {
+ Jmsg(jcr, M_FATAL, 0, _("Cannot open %s file: %s. ERR=%s\n"),
+ list==INC_LIST?"included":"excluded", p, strerror(errno));
+ goto bail_out;
+ }
+ /* Copy File options */
+ if (ie->num_opts) {
+ bstrncpy(buf, ie->opts_list[0]->opts, sizeof(buf));
+ bstrncat(buf, " ", sizeof(buf));
+ } else {
+ bstrncpy(buf, "0 ", sizeof(buf));
+ }
+ Dmsg1(100, "Opts=%s\n", buf);
+ optlen = strlen(buf);
+ while (fgets(buf+optlen, sizeof(buf)-optlen, ffd)) {
+ fd->msglen = Mmsg(&fd->msg, "%s", buf);
+ if (!bnet_send(fd)) {
+ Jmsg(jcr, M_FATAL, 0, _(">filed: write error on socket\n"));
+ goto bail_out;
+ }
+ }
+ fclose(ffd);
+ break;
+ case '\\':
+ p++; /* skip over \ */
+ /* Note, fall through wanted */
+ default:
+ Dmsg2(100, "numopts=%d opts=%s\n", ie->num_opts, NPRT(ie->opts_list[0]->opts));
+ if (ie->num_opts) {
+ pm_strcpy(&fd->msg, ie->opts_list[0]->opts);
+ pm_strcat(&fd->msg, " ");
+ } else {
+ pm_strcpy(&fd->msg, "0 ");
+ }
+ fd->msglen = pm_strcat(&fd->msg, p);
+ Dmsg1(100, "Inc/Exc name=%s\n", fd->msg);
+ if (!bnet_send(fd)) {
+ Jmsg(jcr, M_FATAL, 0, _(">filed: write error on socket\n"));
+ goto bail_out;
+ }
+ break;
+ }