From owner-freebsd-audit Mon Feb 21 15:32:55 2000 Delivered-To: freebsd-audit@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.ORG [204.216.27.21]) by hub.freebsd.org (Postfix) with ESMTP id 2F86C37B5A0 for ; Mon, 21 Feb 2000 15:32:41 -0800 (PST) (envelope-from kris@FreeBSD.org) Received: from localhost (kris@localhost) by freefall.freebsd.org (8.9.3/8.9.2) with ESMTP id PAA33282 for ; Mon, 21 Feb 2000 15:31:36 -0800 (PST) (envelope-from kris@FreeBSD.org) X-Authentication-Warning: freefall.freebsd.org: kris owned process doing -bs Date: Mon, 21 Feb 2000 15:31:36 -0800 (PST) From: Kris Kennaway To: audit@freebsd.org Subject: hylafax patch (fwd) Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/Mixed; BOUNDARY=azLHFNyN32YCQGCU Content-ID: Sender: owner-freebsd-audit@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --azLHFNyN32YCQGCU Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: Does someone have the time to look this over? Kris ---- "How many roads must a man walk down, before you call him a man?" "Eight!" "That was a rhetorical question!" "Oh..then, seven!" -- Homer Simpson ---------- Forwarded message ---------- Date: Mon, 21 Feb 2000 15:30:19 +0100 From: Alexander Langer To: kris@freebsd.org Subject: hylafax patch Hello! These should *really* fix it. I replaced almost all sprintf and the problematic strcpy/strcat ones. Could you review it and maybe add? Note: I did not send it to the hylafax-authors. Maybe you want to do this later on. Alex -- I need a new ~/.sig. --azLHFNyN32YCQGCU Content-Type: TEXT/PLAIN; CHARSET=us-ascii Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME=patch-ah diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/faxalter/faxalter.c++ ./faxalter/faxalter.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/faxalter/faxalter.c++ Sat Feb 14 11:48:38 1998 +++ ./faxalter/faxalter.c++ Sun Feb 20 22:19:27 2000 @@ -185,7 +185,7 @@ va_list ap; va_start(ap, fmt0); char fmt[1024]; - sprintf(fmt, "%s %s\n", groups ? "JGPARM" : "JPARM", fmt0); + snprintf(fmt, 1024, "%s %s\n", groups ? "JGPARM" : "JPARM", fmt0); script.append(fxStr::vformat(fmt, ap)); va_end(ap); } diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/ClassModem.c++ ./faxd/ClassModem.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/ClassModem.c++ Sat Feb 14 11:49:16 1998 +++ ./faxd/ClassModem.c++ Sun Feb 20 22:19:27 2000 @@ -169,7 +169,7 @@ { protoTrace("DIAL %s", number); char buf[256]; - sprintf(buf, (const char*) conf.dialCmd, number); + snprintf(buf, 256, (const char*) conf.dialCmd, number); emsg = ""; CallStatus cs = (atCmd(buf, AT_NOTHING) ? dialResponse(emsg) : FAILURE); if (cs != OK && emsg == "") diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/FaxMachineLog.c++ ./faxd/FaxMachineLog.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/FaxMachineLog.c++ Sat Feb 14 11:49:21 1998 +++ ./faxd/FaxMachineLog.c++ Sun Feb 20 22:19:27 2000 @@ -77,7 +77,7 @@ timeval tv; (void) gettimeofday(&tv, 0); strftime(buf, sizeof (buf), "%h %d %T", localtime((time_t*) &tv.tv_sec)); - sprintf(buf+strlen(buf), ".%02u: [%5d]: ", tv.tv_usec / 10000, pid); + snprintf(buf+strlen(buf), 16*1024 - strlen(buf)".%02u: [%5d]: ", tv.tv_usec / 10000, pid); /* * Copy format string into a local buffer so * that we can substitute for %m, a la syslog. @@ -96,6 +96,6 @@ fmt.put(fp[0]); } fmt.put('\n'); fmt.put('\0'); - vsprintf(buf+strlen(buf), (const char*) fmt, ap); + vsnprintf(buf+strlen(buf), 16*1024 - strlen(buf), (const char*) fmt, ap); (void) Sys::write(fd, buf, strlen(buf)); } diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/FaxRecv.c++ ./faxd/FaxRecv.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/FaxRecv.c++ Sat Feb 14 11:49:23 1998 +++ ./faxd/FaxRecv.c++ Sun Feb 20 22:19:27 2000 @@ -139,7 +139,7 @@ * number file to reflect the allocation. */ (void) flock(ftmp, LOCK_EX|LOCK_NB); - sprintf(line, "%u", seqnum); + snprintf(line, 16, "%u", seqnum); (void) lseek(fseqf, 0, SEEK_SET); if (Sys::write(fseqf, line, strlen(line)) != strlen(line) || ftruncate(fseqf,strlen(line))) { diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/FaxRequest.c++ ./faxd/FaxRequest.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/FaxRequest.c++ Sat Feb 14 11:49:24 1998 +++ ./faxd/FaxRequest.c++ Sun Feb 20 22:19:27 2000 @@ -679,7 +679,7 @@ FaxRequest::error(const char* fmt0 ...) { char fmt[128]; - sprintf(fmt, "%s: line %u: %s", (const char*) qfile, (u_int) lineno, fmt0); + snprintf(fmt, 128, "%s: line %u: %s", (const char*) qfile, (u_int) lineno, fmt0); va_list ap; va_start(ap, fmt0); vlogError(fmt, ap); diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/Job.c++ ./faxd/Job.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/Job.c++ Sat Feb 14 11:49:32 1998 +++ ./faxd/Job.c++ Sun Feb 20 22:19:27 2000 @@ -171,7 +171,7 @@ #define N(a) (sizeof (a) / sizeof (a[0])) if ((u_int) status >= N(names)) { static char s[30]; - sprintf(s, "status_%u", (u_int) status); + snprintf(s, 30, "status_%u", (u_int) status); return (s); } else return (names[status]); diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/ModemServer.c++ ./faxd/ModemServer.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/ModemServer.c++ Sat Feb 14 11:49:34 1998 +++ ./faxd/ModemServer.c++ Sun Feb 20 22:19:27 2000 @@ -604,7 +604,7 @@ } while (ftmp < 0 && errno == EEXIST && --ntry >= 0); umask(omask); if (ftmp >= 0) { - sprintf(line, "%u", seqnum); + snprintf(line, 1024, "%u", seqnum); (void) lseek(fseqf, 0, SEEK_SET); if (Sys::write(fseqf, line, strlen(line)) != strlen(line) || ftruncate(fseqf,strlen(line))) @@ -806,7 +806,7 @@ va_list ap; va_start(ap, fmt0); char fmt[256]; - sprintf(fmt, "MODEM %s", fmt0); + snprintf(fmt, 256, "MODEM %s", fmt0); vtraceStatus(FAXTRACE_MODEMOPS, fmt, ap); va_end(ap); } diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/ServerConfig.c++ ./faxd/ServerConfig.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/ServerConfig.c++ Sat Feb 14 11:49:36 1998 +++ ./faxd/ServerConfig.c++ Sun Feb 20 22:19:27 2000 @@ -373,9 +373,9 @@ { char fmt[128]; if (module != NULL) - sprintf(fmt, "%s: Warning, %s.", module, fmt0); + snprintf(fmt, 128, "%s: Warning, %s.", module, fmt0); else - sprintf(fmt, "Warning, %s.", fmt0); + snprintf(fmt, 128, "Warning, %s.", fmt0); vlogError(fmt, ap); } @@ -384,9 +384,9 @@ { char fmt[128]; if (module != NULL) - sprintf(fmt, "%s: Warning, %s.", module, fmt0); + snprintf(fmt, 128, "%s: Warning, %s.", module, fmt0); else - sprintf(fmt, "Warning, %s.", fmt0); + snprintf(fmt, 128, "Warning, %s.", fmt0); vlogWarning(fmt, ap); } diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/UUCPLock.c++ ./faxd/UUCPLock.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/UUCPLock.c++ Mon Feb 21 15:19:44 2000 +++ ./faxd/UUCPLock.c++ Mon Feb 21 14:56:29 2000 @@ -313,7 +313,7 @@ AsciiUUCPLock::setPID(pid_t pid) { // XXX should this be %d or %ld? depends on pid_t - sprintf((char*) data, "%*d\n", UUCP_PIDDIGITS, pid); + snprintf((char*) data, UUCP_PIDDIGITS+2, "%*d\n", UUCP_PIDDIGITS, pid); } fxBool diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/faxApp.c++ ./faxd/faxApp.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/faxApp.c++ Sat Feb 14 11:49:39 1998 +++ ./faxd/faxApp.c++ Sun Feb 20 22:19:27 2000 @@ -231,7 +231,7 @@ logError("fcntl: %m"); } char msg[4096]; - vsprintf(msg, fmt, ap); + vsnprintf(msg, 4096, fmt, ap); u_int len = strlen(msg)+1; if (Sys::write(faxqfifo, msg, len) != len) { if (errno == EBADF || errno == EPIPE) // reader expired @@ -263,7 +263,7 @@ faxApp::sendModemStatus(const char* devid, const char* fmt0 ...) { char fmt[2*1024]; - sprintf(fmt, "+%s:%s", devid, fmt0); + snprintf(fmt, 2*1024, "+%s:%s", devid, fmt0); va_list ap; va_start(ap, fmt0); fxBool ok = vsendQueuer(fmt, ap); @@ -278,7 +278,7 @@ faxApp::sendJobStatus(const char* jobid, const char* fmt0 ...) { char fmt[2*1024]; - sprintf(fmt, "*%s:%s", jobid, fmt0); + snprintf(fmt, 2*1024, "*%s:%s", jobid, fmt0); va_list ap; va_start(ap, fmt0); fxBool ok = vsendQueuer(fmt, ap); @@ -293,7 +293,7 @@ faxApp::sendRecvStatus(const char* devid, const char* fmt0 ...) { char fmt[2*1024]; - sprintf(fmt, "@%s:%s", devid, fmt0); + snprintf(fmt, 2*1024, "@%s:%s", devid, fmt0); va_list ap; va_start(ap, fmt0); fxBool ok = vsendQueuer(fmt, ap); diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/faxQueueApp.c++ ./faxd/faxQueueApp.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/faxQueueApp.c++ Sat Feb 14 11:49:42 1998 +++ ./faxd/faxQueueApp.c++ Sun Feb 20 22:19:27 2000 @@ -971,10 +971,10 @@ * -m max pages to generate * -1|-2 1d or 2d encoding */ - char rbuf[20]; sprintf(rbuf, "%u", params.verticalRes()); - char wbuf[20]; sprintf(wbuf, "%u", params.pageWidth()); - char lbuf[20]; sprintf(lbuf, "%d", params.pageLength()); - char mbuf[20]; sprintf(mbuf, "%u", dci.getMaxSendPages()); + char rbuf[20]; snprintf(rbuf, 20, "%u", params.verticalRes()); + char wbuf[20]; snprintf(wbuf, 20, "%u", params.pageWidth()); + char lbuf[20]; snprintf(lbuf, 20, "%d", params.pageLength()); + char mbuf[20]; snprintf(mbuf, 20, "%u", dci.getMaxSendPages()); const char* argv[30]; int ac = 0; switch (req.op) { @@ -2726,9 +2726,9 @@ { char fmt[128]; if (module != NULL) - sprintf(fmt, "%s: Warning, %s.", module, fmt0); + snprintf(fmt, 128, "%s: Warning, %s.", module, fmt0); else - sprintf(fmt, "Warning, %s.", fmt0); + snprintf(fmt, 128, "Warning, %s.", fmt0); vlogError(fmt, ap); } @@ -2737,9 +2737,9 @@ { char fmt[128]; if (module != NULL) - sprintf(fmt, "%s: Warning, %s.", module, fmt0); + snprintf(fmt, 128, "%s: Warning, %s.", module, fmt0); else - sprintf(fmt, "Warning, %s.", fmt0); + snprintf(fmt, 128, "Warning, %s.", fmt0); vlogWarning(fmt, ap); } diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/trigtest.c++ ./faxd/trigtest.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/faxd/trigtest.c++ Sat Feb 14 11:49:47 1998 +++ ./faxd/trigtest.c++ Mon Feb 21 14:57:20 2000 @@ -296,7 +296,7 @@ int fd, n; char msg[256]; - sprintf(fifoName, "client/%u", getpid()); + snprintf(fifoName, 80, "client/%u", getpid()); if (Sys::mkfifo(fifoName, 0666) < 0 && errno != EEXIST) { perror("mkfifo"); exit(-1); @@ -309,7 +309,7 @@ unlink(fifoName); exit(-1); } - sprintf(msg, "T%s:N%s", fifoName, trigger); + snprintf(msg, 256, "T%s:N%s", fifoName, trigger); send(msg, strlen(msg)+1); for (;;) { FD_ZERO(&rd); diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/hfaxd/HylaFAXServer.c++ ./hfaxd/HylaFAXServer.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/hfaxd/HylaFAXServer.c++ Sat Feb 14 11:50:02 1998 +++ ./hfaxd/HylaFAXServer.c++ Sun Feb 20 22:19:27 2000 @@ -161,9 +161,9 @@ { char fmt[128]; if (module != NULL) - sprintf(fmt, "%s: Warning, %s.", module, fmt0); + snprintf(fmt, 128, "%s: Warning, %s.", module, fmt0); else - sprintf(fmt, "Warning, %s.", fmt0); + snprintf(fmt, 128, "Warning, %s.", fmt0); vlogError(fmt, ap); } @@ -172,9 +172,9 @@ { char fmt[128]; if (module != NULL) - sprintf(fmt, "%s: Warning, %s.", module, fmt0); + snprintf(fmt, 128, "%s: Warning, %s.", module, fmt0); else - sprintf(fmt, "Warning, %s.", fmt0); + snprintf(fmt, 128, "Warning, %s.", fmt0); vlogWarning(fmt, ap); } @@ -530,7 +530,7 @@ filename, line); seqnum = 1; } - sprintf(line, "%u", NEXTSEQNUM(seqnum+count)); + snprintf(line, 1024, "%u", NEXTSEQNUM(seqnum+count)); lseek(fd, 0, SEEK_SET); if (Sys::write(fd, line, strlen(line)) != strlen(line) || ftruncate(fd,strlen(line))) { diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/hfaxd/Jobs.c++ ./hfaxd/Jobs.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/hfaxd/Jobs.c++ Sat Feb 14 11:50:05 1998 +++ ./hfaxd/Jobs.c++ Sun Feb 20 22:19:27 2000 @@ -1646,7 +1646,7 @@ fprintf(fd, fspec, (const char*) job.company); break; case 'D': - sprintf(tmpbuf, "%2u:%-2u", job.totdials, job.maxdials); + snprintf(tmpbuf, 20, "%2u:%-2u", job.totdials, job.maxdials); fprintf(fd, fspec, tmpbuf); break; case 'E': @@ -1683,7 +1683,7 @@ fprintf(fd, fspec, "N "[job.useccover]); break; case 'P': - sprintf(tmpbuf, "%2u:%-2u", job.npages, job.totpages); + snprintf(tmpbuf, 20, "%2u:%-2u", job.npages, job.totpages); fprintf(fd, fspec, tmpbuf); break; case 'Q': @@ -1696,11 +1696,11 @@ fprintf(fd, fspec, (const char*) job.sender); break; case 'T': - sprintf(tmpbuf, "%2u:%-2u", job.tottries, job.maxtries); + snprintf(tmpbuf, 20, "%2u:%-2u", job.tottries, job.maxtries); fprintf(fd, fspec, tmpbuf); break; case 'U': - sprintf(tmpbuf, "%.1f", job.chopthreshold); + snprintf(tmpbuf, 20, "%.1f", job.chopthreshold); fprintf(fd, fspec, tmpbuf); break; case 'V': diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/hfaxd/OldProtocol.c++ ./hfaxd/OldProtocol.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/hfaxd/OldProtocol.c++ Mon Feb 21 15:19:44 2000 +++ ./hfaxd/OldProtocol.c++ Sun Feb 20 22:19:28 2000 @@ -352,8 +352,8 @@ OldProtocolServer::vsendClient(const char* tag, const char* fmt, va_list ap) { char buf[2048]; - sprintf(buf, "%s:", tag); - vsprintf(strchr(buf,'\0'), fmt, ap); + snprintf(buf, 2048, "%s:", tag); + vsnprintf(strchr(buf,'\0'), 2048 - (strchr(buf, '\0') - buf), fmt, ap); fprintf(stdout, "%s\n", buf); if (TRACE(PROTOCOL)) logDebug("%s", buf); @@ -472,19 +472,19 @@ buf[0] = '\0'; if (pwd->pw_gecos) { if (pwd->pw_gecos[0] == '&') { - strcpy(buf, pwd->pw_name); - strcat(buf, pwd->pw_gecos+1); + strlcpy(buf, pwd->pw_name, 1024); + strlcat(buf, pwd->pw_gecos+1, 1024 - strlen(buf)); if (islower(buf[0])) buf[0] = toupper(buf[0]); } else - strcpy(buf, pwd->pw_gecos); + strlcpy(buf, pwd->pw_gecos, 1024); if ((cp = strchr(buf,',')) != 0) *cp = '\0'; /* see FaxClient::setupUserIdentity; strip SysV junk */ if ((cp = strchr(buf,'(')) != 0) *cp = '\0'; } else - strcpy(buf, pwd->pw_name); + strlcpy(buf, pwd->pw_name, 1024); if (TRACE(PROTOCOL)) { if (*buf) logDebug("%s user: \"%s\"", pwd->pw_name, buf); diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/hfaxd/Status.c++ ./hfaxd/Status.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/hfaxd/Status.c++ Sat Feb 14 11:50:09 1998 +++ ./hfaxd/Status.c++ Sun Feb 20 22:19:28 2000 @@ -262,14 +262,14 @@ if (config.maxRecvPages == (u_int) -1) strcpy(tmpbuf, "INF"); else - sprintf(tmpbuf, "%u", config.maxRecvPages); + snprintf(tmpbuf, 20, "%u", config.maxRecvPages); fprintf(fd, fspec, config.maxRecvPages); break; case 's': fprintf(fd, fspec, (const char*) config.status); break; case 't': - sprintf(tmpbuf, "%05x:%05x", + snprintf(tmpbuf, 20, "%05x:%05x", config.tracingLevel&0xfffff, config.logTracingLevel&0xfffff); fprintf(fd, fspec, tmpbuf); diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/man/config.4f ./man/config.4f --- /tmp/old/hylafax/work/hylafax-v4.0pl2/man/config.4f Sat Feb 14 11:50:46 1998 +++ ./man/config.4f Sun Feb 20 22:19:28 2000 @@ -1446,7 +1446,7 @@ The command to place a phone call. The string is assumed to be suitable for use as a parameter to the -.IR sprintf (3S) +.IR snprintf (3S) function; so the ``%'' character should be escaped as ``%%''. The dial command must include a single ``%s'' where the number that is to be dialed is to be substituted. diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/port/syslog.c ./port/syslog.c --- /tmp/old/hylafax/work/hylafax-v4.0pl2/port/syslog.c Sat Feb 14 11:50:42 1998 +++ ./port/syslog.c Mon Feb 21 15:09:07 2000 @@ -88,7 +88,7 @@ register int cnt; register char *p; time_t now, time(); - int fd, saved_errno; + int fd, saved_errno, n; char tbuf[2048], fmt_cpy[1024], *stdp, *ctime(); /* check for invalid bits or no priority set */ @@ -104,21 +104,21 @@ /* build the message */ (void)time(&now); - (void)sprintf(tbuf, "<%d>%.15s ", pri, ctime(&now) + 4); - for (p = tbuf; *p; ++p); + (void)snprintf(tbuf, 2048, "<%d>%.15s ", pri, ctime(&now) + 4); + for (p = tbuf, n=0; *p; ++p, n++); if (LogStat & LOG_PERROR) stdp = p; if (LogTag) { (void)strcpy(p, LogTag); - for (; *p; ++p); + for (; *p; ++p, n++); } if (LogStat & LOG_PID) { - (void)sprintf(p, "[%d]", getpid()); - for (; *p; ++p); + (void)snprintf(p, 2048 - n, "[%d]", getpid()); + for (; *p; ++p, n++); } if (LogTag) { - *p++ = ':'; - *p++ = ' '; + *p++ = ':'; n++; + *p++ = ' '; n++; } /* substitute error message for %m */ @@ -137,7 +137,7 @@ *t1 = '\0'; } - (void)vsprintf(p, fmt_cpy, ap); + (void)vsnprintf(p, 2048 - n, fmt_cpy, ap); cnt = strlen(tbuf); @@ -170,7 +170,7 @@ * is the one from the syslogd failure. */ if ((fd = open(_PATH_CONSOLE, O_WRONLY, 0)) >= 0) { - (void)strcat(tbuf, "\r\n"); + (void)strlcat(tbuf, "\r\n", 2048); cnt += 2; p = index(tbuf, '>') + 1; (void)write(fd, p, cnt - (p - tbuf)); diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/port/vsyslog.c ./port/vsyslog.c --- /tmp/old/hylafax/work/hylafax-v4.0pl2/port/vsyslog.c Sat Feb 14 11:50:42 1998 +++ ./port/vsyslog.c Sun Feb 20 22:19:28 2000 @@ -49,6 +49,6 @@ *cp++ = c; *cp = '\0'; } - (void) vsprintf(tbuf, fmt_cpy, ap); + (void) vsnprintf(tbuf, 2048, fmt_cpy, ap); (void) syslog(pri, "%s", tbuf); } diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/regex/engine.c ./regex/engine.c --- /tmp/old/hylafax/work/hylafax-v4.0pl2/regex/engine.c Sat Feb 14 11:48:19 1998 +++ ./regex/engine.c Sun Feb 20 22:19:28 2000 @@ -1065,9 +1065,9 @@ static char pbuf[10]; if (isprint(ch) || ch == ' ') - sprintf(pbuf, "%c", ch); + snprintf(pbuf, 10, "%c", ch); else - sprintf(pbuf, "\\%o", ch); + snprintf(pbuf, 10, "\\%o", ch); return(pbuf); } #endif diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/regex/regerror.c ./regex/regerror.c --- /tmp/old/hylafax/work/hylafax-v4.0pl2/regex/regerror.c Sat Feb 14 11:48:21 1998 +++ ./regex/regerror.c Mon Feb 21 15:03:31 2000 @@ -57,7 +57,7 @@ #endif /* === regerror.c === */ -static char *regatoi(const regex_t *preg, char *localbuf); +static char *regatoi(const regex_t *preg, char *localbuf, int maxn); #ifdef __cplusplus } @@ -126,7 +126,7 @@ char convbuf[50]; if (errcode == REG_ATOI) - s = regatoi(preg, convbuf); + s = regatoi(preg, convbuf, 50); else { for (r = rerrs; r->code != 0; r++) if (r->code == target) @@ -134,9 +134,9 @@ if (errcode®_ITOA) { if (r->code != 0) - (void) strcpy(convbuf, r->name); + (void) strlcpy(convbuf, r->name, 50); else - sprintf(convbuf, "REG_0x%x", target); + snprintf(convbuf, 50, "REG_0x%x", target); assert(strlen(convbuf) < sizeof(convbuf)); s = convbuf; } else @@ -161,9 +161,10 @@ == static char *regatoi(const regex_t *preg, char *localbuf); */ static char * -regatoi(preg, localbuf) +regatoi(preg, localbuf, maxn) const regex_t *preg; char *localbuf; +int maxn; { register struct rerr *r; @@ -173,6 +174,6 @@ if (r->code == 0) return("0"); - sprintf(localbuf, "%d", r->code); + snprintf(localbuf, maxn, "%d", r->code); return(localbuf); } diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/sgi2fax/imgtofax.c ./sgi2fax/imgtofax.c --- /tmp/old/hylafax/work/hylafax-v4.0pl2/sgi2fax/imgtofax.c Sat Feb 14 11:50:22 1998 +++ ./sgi2fax/imgtofax.c Sun Feb 20 22:19:28 2000 @@ -214,7 +214,7 @@ TIFFSetField(tif, TIFFTAG_PAGENUMBER, pn, npages); TIFFSetField(tif, TIFFTAG_CLEANFAXDATA, CLEANFAXDATA_CLEAN); { char buf[1024]; - sprintf(buf, "Ditherered B&W version of %s", input); + snprintf(buf, 1024, "Ditherered B&W version of %s", input); TIFFSetField(tif, TIFFTAG_IMAGEDESCRIPTION, buf); } TIFFSetField(tif, TIFFTAG_SOFTWARE, "sgi2fax"); diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/util/Class2Params.c++ ./util/Class2Params.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/util/Class2Params.c++ Sat Feb 14 11:47:12 1998 +++ ./util/Class2Params.c++ Mon Feb 21 15:07:12 2000 @@ -59,14 +59,15 @@ } static char* -addParam(char* cp, u_int v) +addParam(char* cp, u_int v, int *maxn) { if (v != (u_int)-1) { - sprintf(cp, ",%u", v); - while (*cp != '\0') cp++; + snprintf(cp, *maxn, ",%u", v); + while (*cp != '\0') { cp++; (*maxn)++; } } else { *cp++ = ','; *cp = '\0'; + (*maxn)++; } return (cp); } @@ -76,18 +77,19 @@ { char buf[1024]; char* cp = buf; + int n = 1024; if (vr != (u_int) -1) { - sprintf(cp, "%u", vr); - while (*cp != '\0') cp++; + snprintf(cp, n, "%u", vr); + while (*cp != '\0') { cp++; n-- }; } - cp = addParam(cp, br); - cp = addParam(cp, wd); - cp = addParam(cp, ln); - cp = addParam(cp, df); - cp = addParam(cp, ec); - cp = addParam(cp, bf); - cp = addParam(cp, st); + cp = addParam(cp, br, &n); + cp = addParam(cp, wd, &n); + cp = addParam(cp, ln, &n); + cp = addParam(cp, df, &n); + cp = addParam(cp, ec, &n); + cp = addParam(cp, bf, &n); + cp = addParam(cp, st, &n); return fxStr(buf); } diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/util/FaxClient.c++ ./util/FaxClient.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/util/FaxClient.c++ Sat Feb 14 11:47:16 1998 +++ ./util/FaxClient.c++ Sun Feb 20 22:19:28 2000 @@ -622,7 +622,7 @@ traceServer("-> ADMIN XXXX"); else { char buf[128]; - sprintf(buf, "-> %s", fmt); + snprintf(buf, 128, "-> %s", fmt); vtraceServer(buf, ap); } } diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/util/PageSize.c++ ./util/PageSize.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/util/PageSize.c++ Sat Feb 14 11:47:21 1998 +++ ./util/PageSize.c++ Sun Feb 20 22:19:28 2000 @@ -72,7 +72,7 @@ PageSizeInfo::readPageInfoFile() { char file[1024]; - sprintf(file, "%s/%s", FAX_LIBDATA, FAX_PAGESIZES); + snprintf(file, 1024, "%s/%s", FAX_LIBDATA, FAX_PAGESIZES); PageInfoArray* info = new PageInfoArray; FILE* fp = fopen(file, "r"); u_int lineno = 0; diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/util/SNPPClient.c++ ./util/SNPPClient.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/util/SNPPClient.c++ Sat Feb 14 11:47:25 1998 +++ ./util/SNPPClient.c++ Sun Feb 20 22:19:28 2000 @@ -638,7 +638,7 @@ traceServer("-> LOGI XXXX"); else { char buf[128]; - sprintf(buf, "-> %s", fmt); + snprintf(buf, 128, "-> %s", fmt); vtraceServer(buf, ap); } } diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/util/StackBuffer.c++ ./util/StackBuffer.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/util/StackBuffer.c++ Sat Feb 14 11:47:26 1998 +++ ./util/StackBuffer.c++ Sun Feb 20 22:19:28 2000 @@ -105,7 +105,7 @@ fxStackBuffer::vput(const char* fmt, va_list ap) { char buf[8*1024]; - vsprintf(buf, fmt, ap); + vsnprintf(buf, 8*1024, fmt, ap); put(buf); } diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/util/Str.c++ ./util/Str.c++ --- /tmp/old/hylafax/work/hylafax-v4.0pl2/util/Str.c++ Sat Feb 14 11:47:27 1998 +++ ./util/Str.c++ Sun Feb 20 22:19:28 2000 @@ -91,7 +91,7 @@ { char buffer[NUMBUFSIZE]; if (!format) format = "%d"; - sprintf(buffer,format,a); + snprintf(buffer, NUMBUFSIZE, format,a); slength = strlen(buffer) + 1; data = (char*) malloc(slength); memcpy(data,buffer,slength); @@ -101,7 +101,7 @@ { char buffer[NUMBUFSIZE]; if (!format) format = "%ld"; - sprintf(buffer,format,a); + snprintf(buffer, NUMBUFSIZE, format,a); slength = strlen(buffer) + 1; data = (char*) malloc(slength); memcpy(data,buffer,slength); @@ -111,7 +111,7 @@ { char buffer[NUMBUFSIZE]; if (!format) format = "%g"; - sprintf(buffer,format,a); + snprintf(buffer, NUMBUFSIZE, format,a); slength = strlen(buffer) + 1; fxAssert(slength>1, "Str::Str(float): bogus conversion"); data = (char*) malloc(slength); @@ -122,7 +122,7 @@ { char buffer[NUMBUFSIZE]; if (!format) format = "%lg"; - sprintf(buffer,format,a); + snprintf(buffer, NUMBUFSIZE, format,a); slength = strlen(buffer) + 1; fxAssert(slength>1, "Str::Str(double): bogus conversion"); data = (char*) malloc(slength); // XXX assume slength>1 @@ -141,7 +141,7 @@ char buf[4096]; va_list ap; va_start(ap, fmt); - vsprintf(buf, fmt, ap); + vsnprintf(buf, 4096, fmt, ap); va_end(ap); return fxStr(buf); } @@ -150,7 +150,7 @@ fxStr::vformat(const char* fmt, va_list ap) { char buf[4096]; - vsprintf(buf, fmt, ap); + vsnprintf(buf, 4096, fmt, ap); return fxStr(buf); } diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/util/Str.h ./util/Str.h --- /tmp/old/hylafax/work/hylafax-v4.0pl2/util/Str.h Sat Feb 14 11:47:50 1998 +++ ./util/Str.h Sun Feb 20 22:19:28 2000 @@ -93,8 +93,8 @@ fxStr(const fxTempStr&); ~fxStr(); - static fxStr format(const char* fmt ...); // sprintf sort of - static fxStr vformat(const char* fmt, va_list ap); // vsprintf sort of + static fxStr format(const char* fmt ...); // snprintf sort of + static fxStr vformat(const char* fmt, va_list ap); // vsnprintf sort of static fxStr null; // null string for general use ///////////////////////////////////////////////////// u_long hash() const; diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/util/faxconfig.c ./util/faxconfig.c --- /tmp/old/hylafax/work/hylafax-v4.0pl2/util/faxconfig.c Mon Feb 21 15:19:44 2000 +++ ./util/faxconfig.c Sun Feb 20 22:19:28 2000 @@ -83,7 +83,7 @@ if (devid[0] == FAX_FIFO[0]) strcpy(fifoname, devid); else - sprintf(fifoname, "%s.%.*s", FAX_FIFO, + snprintf(fifoname, 80, "%s.%.*s", FAX_FIFO, sizeof (fifoname) - sizeof (FAX_FIFO), devid); } else strcpy(fifoname, FAX_FIFO); @@ -111,10 +111,10 @@ quote = 1; cmd = malloc(strlen(argv[optind])+strlen(argv[optind+1])+10); if (quote) - sprintf(cmd, "C%s%s:\"%s\"", + snprintf(cmd, strlen(argv[optind])+strlen(argv[optind+1]+10, "C%s%s:\"%s\"", isQueuer ? ":" : "", argv[optind], argv[optind+1]); else - sprintf(cmd, "C%s%s:%s", + snprintf(cmd, strlen(argv[optind]+strlen(argv[optind+1]+10)"C%s%s:%s", isQueuer ? ":" : "", argv[optind], argv[optind+1]); if (write(fifo, cmd, strlen(cmd)) != strlen(cmd)) fatal("%s: FIFO write failed for command (%s)", diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/util/faxmodem.c ./util/faxmodem.c --- /tmp/old/hylafax/work/hylafax-v4.0pl2/util/faxmodem.c Mon Feb 21 15:19:44 2000 +++ ./util/faxmodem.c Sun Feb 20 22:19:28 2000 @@ -243,9 +243,9 @@ if (optind != argc-1) fatal("Missing modem device.\nusage: %s %s modem", argv[0], usage); if (strncmp(argv[optind], _PATH_DEV, strlen(_PATH_DEV)) == 0) - strcpy(devname, argv[optind]+strlen(_PATH_DEV)); + strlcpy(devname, argv[optind]+strlen(_PATH_DEV), 80); else - strcpy(devname, argv[optind]); + strlcpy(devname, argv[optind], 80); for (cp = devname; cp = strchr(cp, '/'); *cp++ = '_') ; if (chdir(spooldir) < 0) @@ -254,9 +254,9 @@ if (fifo < 0) fatal("%s: open: %s", FAX_FIFO, strerror(errno)); if (priority != -1) - sprintf(cmd, "+%s:R%c%08x:%x", devname, canpoll, caps, priority); + snprintf(cmd, 80, "+%s:R%c%08x:%x", devname, canpoll, caps, priority); else - sprintf(cmd, "+%s:R%c%08x", devname, canpoll, caps); + snprintf(cmd, 80, "+%s:R%c%08x", devname, canpoll, caps); if (write(fifo, cmd, strlen(cmd)) != strlen(cmd)) fatal("%s: FIFO write failed for command (%s)", argv[0], strerror(errno)); diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/util/faxmsg.c ./util/faxmsg.c --- /tmp/old/hylafax/work/hylafax-v4.0pl2/util/faxmsg.c Mon Feb 21 15:19:44 2000 +++ ./util/faxmsg.c Sun Feb 20 22:19:28 2000 @@ -108,12 +108,12 @@ } if (optind == argc-1) { if (argv[optind][0] == FAX_FIFO[0]) - strcpy(fifoname, argv[optind]); + strlcpy(fifoname, argv[optind], 256); else - sprintf(fifoname, "%s.%.*s", FAX_FIFO, + snprintf(fifoname, 256, "%s.%.*s", FAX_FIFO, sizeof (fifoname) - sizeof (FAX_FIFO), argv[optind]); } else if (!modemRequired) { - strcpy(fifoname, FAX_FIFO); + strlcpy(fifoname, FAX_FIFO, 256); } else fatal("usage: %s %s", argv[0], usage); for (cp = fifoname; cp = strchr(cp, '/'); *cp++ = '_') @@ -123,7 +123,7 @@ fifo = open(fifoname, O_WRONLY|O_NDELAY); if (fifo < 0) fatal("%s: open: %s", fifoname, strerror(errno)); - sprintf(cmd, cmdfmt, arg); + snprintf(cmd, 80, cmdfmt, arg); if (write(fifo, cmd, strlen(cmd)) != strlen(cmd)) fatal("FIFO write failed for command (%s)", strerror(errno)); (void) close(fifo); diff -ru /tmp/old/hylafax/work/hylafax-v4.0pl2/util/faxstate.c ./util/faxstate.c --- /tmp/old/hylafax/work/hylafax-v4.0pl2/util/faxstate.c Mon Feb 21 15:19:44 2000 +++ ./util/faxstate.c Sun Feb 20 22:19:28 2000 @@ -113,7 +113,7 @@ } if (optind != argc-1) fatal("Bad option `%c'; usage: %s %s modem", c, argv[0], usage); - strcpy(devid, argv[optind]); + strlcpy(devid, argv[optind], 256); for (cp = devid; cp = strchr(cp, '/'); *cp++ = '_') ; if (chdir(spooldir) < 0) @@ -126,16 +126,16 @@ fifo = open(FAX_FIFO, O_WRONLY|O_NDELAY); if (fifo < 0) fatal("%s: open: %s", FAX_FIFO, strerror(errno)); - sprintf(cmd, "+%s:%s", devid, arg); + snprintf(cmd, 80, "+%s:%s", devid, arg); if (write(fifo, cmd, strlen(cmd)) != strlen(cmd)) fatal("FIFO write failed for command (%s)", strerror(errno)); } else { - sprintf(fifoname, "%s.%.*s", FAX_FIFO, + snprintf(fifoname, 256, "%s.%.*s", FAX_FIFO, sizeof (fifoname) - sizeof (FAX_FIFO), devid); fifo = open(fifoname, O_WRONLY|O_NDELAY); if (fifo < 0) fatal("%s: open: %s", fifoname, strerror(errno)); - sprintf(cmd, "S%s", arg); + snprintf(cmd, 80, "S%s", arg); if (write(fifo, cmd, strlen(cmd)) != strlen(cmd)) fatal("FIFO write failed for command (%s)", strerror(errno)); } --azLHFNyN32YCQGCU-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message From owner-freebsd-audit Mon Feb 21 22:46:57 2000 Delivered-To: freebsd-audit@freebsd.org Received: from MailAndNews.com (MailAndNews.com [199.29.68.160]) by hub.freebsd.org (Postfix) with ESMTP id 0483C37B607 for ; Mon, 21 Feb 2000 22:46:52 -0800 (PST) (envelope-from mheffner@mailandnews.com) Received: from muriel.penguinpowered.com [208.138.199.76] (mheffner@mailandnews.com); Tue, 22 Feb 2000 01:46:48 -0500 X-WM-Posted-At: MailAndNews.com; Tue, 22 Feb 00 01:46:48 -0500 Content-Length: 2013 Message-ID: X-Mailer: XFMail 1.4.4 on FreeBSD X-Priority: 3 (Normal) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8bit MIME-Version: 1.0 Date: Tue, 22 Feb 2000 01:47:47 -0500 (EST) Reply-To: Mike Heffner From: Mike Heffner To: FreeBSD-audit Subject: Binary tester - and some oflows Sender: owner-freebsd-audit@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Well, for some kicks I've put together a simple binary testing program. It can test argument overflows and environment variable overflows. Also, if run together with l0pht-watch it can give you a good idea of programs that use inseucre tempfile handling. If anyone wants to check it out: http://my.ispchannel.com/~mheffner/bfbtester-1.0.tar.gz or view the README at: http://my.ispchannel.com/~mheffner/README.bfbtester Currently I've run it through /usr/bin (took about 20 hours) and found the following, (these are in addition to the ones Thomas Stromberg found): usr.bin/kzip Arg overflow Ex: kzip [5120] usr.bin/lam Arg overflow Ex: lam -[PFfp] [51200] usr.bin/ld Arg overflow Ex: ld -L [10240] -T blah usr.bin/minigzip Arg overflow Ex: minigzip -d [5120] contrib/ntp/ntpq Arg overflow Ex: ntpq -c [51200] usr/bin/openssl Arg overflow Ex: openssl [51200] gnu/usr.bin/ptx Lots of arg overflows Ex: ptx -[FMSWgw] [5120] usr.bin/telnet Arg overflow Ex: telnet -X [5120] usr.bin/ftp, gate-ftp, pftp Arg overflow Ex: ftp [10240] usr.bin/global Env. overflow in MAKEOBJDIR and MAKEOBJDIRPREFIX Ex: MAKEOBJDIR=[10240] global blah gnu/usr.bin/binutils/addr2line Arg overflow Ex: addr2line -s [5120] Note: A valid 'a.out' file must exist in current dir. usr.bin/units Args overflow Ex: units [10240] [10240] /**************************************** * Mike Heffner * * Fredericksburg, VA * * ICQ# 882073 * * Sent at: 22-Feb-2000 -- 01:37:21 EST * ****************************************/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message From owner-freebsd-audit Tue Feb 22 11:49:34 2000 Delivered-To: freebsd-audit@freebsd.org Received: from alcanet.com.au (mail.alcanet.com.au [203.62.196.10]) by hub.freebsd.org (Postfix) with ESMTP id 0F87137B705 for ; Tue, 22 Feb 2000 11:49:30 -0800 (PST) (envelope-from jeremyp@gsmx07.alcatel.com.au) Received: by border.alcanet.com.au id <115215>; Wed, 23 Feb 2000 06:50:08 +1100 Content-return: prohibited From: Peter Jeremy Subject: Software security scanner To: freebsd-audit@FreeBSD.ORG Message-Id: <00Feb23.065008est.115215@border.alcanet.com.au> MIME-version: 1.0 X-Mailer: Mutt 1.0i Content-type: text/plain; charset=us-ascii Date: Wed, 23 Feb 2000 06:50:07 +1100 Sender: owner-freebsd-audit@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Since no-one else has mentioned it here (but we all read RISKS don't we)... RISKS 20.81 mentions a new software security scanner called ITS4: >[It's] a command-line tool for statically scanning C and C++ >source code for security vulnerabilities. The tool is called ITS4. ITS4 >scans through source code for potentially dangerous function calls that are >stored in a database. Anything that is in the database gets flagged. ITS4 >tries to automate a lot of the grepping usually done by hand when performing >security audits. > >The tool is available from: http://www.rstcorp.com/its4/ >Also on this site is a research paper on ITS4 submitted to this year's >Usenix Security conference. > >ITS4 is open source software. The license puts some minor restrictions on >commercial use. In essence, you can't use this tool to make money (such as >by reselling it, or by using it in a consulting practice). However, you are >encouraged to run the tool on your own product in order to make it better. It sounds like a useful tool to find the bits of code that need to be studied in depth. Has anyone looked at it? Peter To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message From owner-freebsd-audit Tue Feb 22 11:56:39 2000 Delivered-To: freebsd-audit@freebsd.org Received: from pawn.primelocation.net (pawn.primelocation.net [205.161.238.235]) by hub.freebsd.org (Postfix) with ESMTP id 7EBC637B761 for ; Tue, 22 Feb 2000 11:56:35 -0800 (PST) (envelope-from cdf.lists@fxp.org) Received: by pawn.primelocation.net (Postfix, from userid 1016) id 3E05D9B17; Tue, 22 Feb 2000 14:56:34 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by pawn.primelocation.net (Postfix) with ESMTP id 2DA80BA1D; Tue, 22 Feb 2000 14:56:34 -0500 (EST) Date: Tue, 22 Feb 2000 14:56:34 -0500 (EST) From: "Chris D. Faulhaber" X-Sender: cdf.lists@pawn.primelocation.net To: Peter Jeremy Cc: freebsd-audit@FreeBSD.ORG Subject: Re: Software security scanner In-Reply-To: <00Feb23.065008est.115215@border.alcanet.com.au> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-audit@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG On Wed, 23 Feb 2000, Peter Jeremy wrote: > > It sounds like a useful tool to find the bits of code that need to > be studied in depth. Has anyone looked at it? > As a matter of fact, I have. See http://www.FreeBSD.org/~jedgar/its4.shar for my preliminary port. It seems to be decent at showing possible vulnerabilities, but doesn't always differentiate between real problems and potential ones (e.g. proper and improper uses of sprintf). Even so, it does make it easier to scan code than manually grepping, especially for those who are not familiar with good programming techniques. My only problem with the port is some ambiguity with their licensing WRT commercial use...and not seeming to know the proper snprintf syntax in their configure script :) ----- Chris D. Faulhaber - jedgar@fxp.org - jedgar@FreeBSD.org -------------------------------------------------------- FreeBSD: The Power To Serve - http://www.FreeBSD.org To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message From owner-freebsd-audit Wed Feb 23 22:57:48 2000 Delivered-To: freebsd-audit@freebsd.org Received: from MailAndNews.com (MailAndNews.com [199.29.68.160]) by hub.freebsd.org (Postfix) with ESMTP id BEF3F37BB0E; Wed, 23 Feb 2000 22:57:45 -0800 (PST) (envelope-from mheffner@mailandnews.com) Received: from muriel.penguinpowered.com [208.138.199.76] (mheffner@mailandnews.com); Thu, 24 Feb 2000 01:55:57 -0500 X-WM-Posted-At: MailAndNews.com; Thu, 24 Feb 00 01:55:57 -0500 Content-Length: 1237 Message-ID: X-Mailer: XFMail 1.4.4 on FreeBSD X-Priority: 3 (Normal) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8bit MIME-Version: 1.0 In-Reply-To: Date: Thu, 24 Feb 2000 01:57:19 -0500 (EST) Reply-To: Mike Heffner From: Mike Heffner To: Kris Kennaway Subject: RE: hylafax patch (fwd) Cc: audit@freebsd.org, Alexander Langer Sender: owner-freebsd-audit@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG On 21-Feb-2000 Kris Kennaway wrote: | Does someone have the time to look this over? | | Kris | | ---- | "How many roads must a man walk down, before you call him a man?" | "Eight!" | "That was a rhetorical question!" | "Oh..then, seven!" -- Homer Simpson | | ---------- Forwarded message ---------- | Date: Mon, 21 Feb 2000 15:30:19 +0100 | From: Alexander Langer | To: kris@freebsd.org | Subject: hylafax patch | | Hello! | | These should *really* fix it. | | I replaced almost all sprintf and the problematic strcpy/strcat ones. | | Could you review it and maybe add? | Well, I did a quick glance over it. It should really use sizeof() rather than hardcoding the buffer lengths, which could become changed in one location and not another. Also, should it fail if the supplied string is too long for the buffer in some places (ie. supplied command-line args) ? /**************************************** * Mike Heffner * * Fredericksburg, VA * * ICQ# 882073 * * Sent at: 24-Feb-2000 -- 01:55:57 EST * * http://my.ispchannel.com/~mheffner * ****************************************/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message From owner-freebsd-audit Sat Feb 26 7:59:39 2000 Delivered-To: freebsd-audit@freebsd.org Received: from MailAndNews.com (MailAndNews.com [199.29.68.160]) by hub.freebsd.org (Postfix) with ESMTP id 0D2F237BCD3 for ; Sat, 26 Feb 2000 07:58:52 -0800 (PST) (envelope-from mheffner@mailandnews.com) Received: from muriel.penguinpowered.com [208.138.199.76] (mheffner@mailandnews.com); Sat, 26 Feb 2000 10:58:49 -0500 X-WM-Posted-At: MailAndNews.com; Sat, 26 Feb 00 10:58:49 -0500 Content-Length: 43131 Message-ID: X-Mailer: XFMail 1.4.4 on FreeBSD X-Priority: 3 (Normal) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="_=XFMail.1.4.4.FreeBSD:20000226110039:9639=_" Date: Sat, 26 Feb 2000 11:00:39 -0500 (EST) Reply-To: Mike Heffner From: Mike Heffner To: FreeBSD-audit Subject: hylafax patch #2 (fwd) Sender: owner-freebsd-audit@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG This message is in MIME format --_=XFMail.1.4.4.FreeBSD:20000226110039:9639=_ Content-Type: text/plain; charset=us-ascii Here's a new patch for hylafax that Sean Winn sent me. Just forwarding it along incase someone has time to review. -- -----FW: ----- Date: Sat, 26 Feb 2000 19:53:29 +1100 (EST) From: Sean Winn To: Mike Heffner Subject: RE: hylafax patch (fwd) Cc: Kris Kennaway , Alexander Langer On Thu, 24 Feb 2000, Mike Heffner wrote: [snip] Here is the same patch with the magic numbers replaced with sizeof, and typos fixed ... it applies, compiles and installs. It still needs review of course, to make sure it's covered all the bases on strcpy/snprintf. What I've noticed is that it doesn't address any potential file races in the slightest. Whatever else is wrong with hylafax is still there; based on the number of potential problems in it already just on the strcpy/sprintf front, I'd be sure there are more. -- Sean Winn email: sean@gothic.net.au All opinions valued at $0.02, and not subject to inflation. --------------End of forwarded message------------------------- -----FW: ----- Date: Sat, 26 Feb 2000 19:55:24 +1100 (EST) From: Sean Winn To: Mike Heffner Subject: RE: hylafax patch (fwd) - with patch this time. Cc: Kris Kennaway , Alexander Langer On Thu, 24 Feb 2000, Mike Heffner wrote: Patch attached this time :) -- Sean Winn email: sean@gothic.net.au All opinions valued at $0.02, and not subject to inflation. --------------End of forwarded message------------------------- /**************************************** * Mike Heffner * * Fredericksburg, VA -- ICQ# 882073 * * Sent at: 26-Feb-2000 -- 10:53:20 EST * * http://my.ispchannel.com/~mheffner * ****************************************/ --_=XFMail.1.4.4.FreeBSD:20000226110039:9639=_ Content-Type: TEXT/PLAIN; charset=US-ASCII; name=patch-ah Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=patch-ah ZGlmZiAtcnUgL3RtcC9vbGQvaHlsYWZheC93b3JrL2h5bGFmYXgtdjQuMHBs Mi9mYXhhbHRlci9mYXhhbHRlci5jKysgLi9mYXhhbHRlci9mYXhhbHRlci5j KysNCi0tLSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4wcGwy L2ZheGFsdGVyL2ZheGFsdGVyLmMrKwlTYXQgRmViIDE0IDExOjQ4OjM4IDE5 OTgNCisrKyAuL2ZheGFsdGVyL2ZheGFsdGVyLmMrKwlTdW4gRmViIDIwIDIy OjE5OjI3IDIwMDANCkBAIC0xODUsNyArMTg1LDcgQEANCiAgICAgdmFfbGlz dCBhcDsNCiAgICAgdmFfc3RhcnQoYXAsIGZtdDApOw0KICAgICBjaGFyIGZt dFsxMDI0XTsNCi0gICAgc3ByaW50ZihmbXQsICIlcyAlc1xuIiwgZ3JvdXBz ID8gIkpHUEFSTSIgOiAiSlBBUk0iLCBmbXQwKTsNCisgICAgc25wcmludGYo Zm10LCBzaXplb2YgZm10LCAiJXMgJXNcbiIsIGdyb3VwcyA/ICJKR1BBUk0i IDogIkpQQVJNIiwgZm10MCk7DQogICAgIHNjcmlwdC5hcHBlbmQoZnhTdHI6 OnZmb3JtYXQoZm10LCBhcCkpOw0KICAgICB2YV9lbmQoYXApOw0KIH0NCmRp ZmYgLXJ1IC90bXAvb2xkL2h5bGFmYXgvd29yay9oeWxhZmF4LXY0LjBwbDIv ZmF4ZC9DbGFzc01vZGVtLmMrKyAuL2ZheGQvQ2xhc3NNb2RlbS5jKysNCi0t LSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4wcGwyL2ZheGQv Q2xhc3NNb2RlbS5jKysJU2F0IEZlYiAxNCAxMTo0OToxNiAxOTk4DQorKysg Li9mYXhkL0NsYXNzTW9kZW0uYysrCVN1biBGZWIgMjAgMjI6MTk6MjcgMjAw MA0KQEAgLTE2OSw3ICsxNjksNyBAQA0KIHsNCiAgICAgcHJvdG9UcmFjZSgi RElBTCAlcyIsIG51bWJlcik7DQogICAgIGNoYXIgYnVmWzI1Nl07DQotICAg IHNwcmludGYoYnVmLCAoY29uc3QgY2hhciopIGNvbmYuZGlhbENtZCwgbnVt YmVyKTsNCisgICAgc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAoY29uc3Qg Y2hhciopIGNvbmYuZGlhbENtZCwgbnVtYmVyKTsNCiAgICAgZW1zZyA9ICIi Ow0KICAgICBDYWxsU3RhdHVzIGNzID0gKGF0Q21kKGJ1ZiwgQVRfTk9USElO RykgPyBkaWFsUmVzcG9uc2UoZW1zZykgOiBGQUlMVVJFKTsNCiAgICAgaWYg KGNzICE9IE9LICYmIGVtc2cgPT0gIiIpDQpkaWZmIC1ydSAvdG1wL29sZC9o eWxhZmF4L3dvcmsvaHlsYWZheC12NC4wcGwyL2ZheGQvRmF4TWFjaGluZUxv Zy5jKysgLi9mYXhkL0ZheE1hY2hpbmVMb2cuYysrDQotLS0gL3RtcC9vbGQv aHlsYWZheC93b3JrL2h5bGFmYXgtdjQuMHBsMi9mYXhkL0ZheE1hY2hpbmVM b2cuYysrCVNhdCBGZWIgMTQgMTE6NDk6MjEgMTk5OA0KKysrIC4vZmF4ZC9G YXhNYWNoaW5lTG9nLmMrKwlTdW4gRmViIDIwIDIyOjE5OjI3IDIwMDANCkBA IC03Nyw3ICs3Nyw3IEBADQogICAgIHRpbWV2YWwgdHY7DQogICAgICh2b2lk KSBnZXR0aW1lb2ZkYXkoJnR2LCAwKTsNCiAgICAgc3RyZnRpbWUoYnVmLCBz aXplb2YgKGJ1ZiksICIlaCAlZCAlVCIsIGxvY2FsdGltZSgodGltZV90Kikg JnR2LnR2X3NlYykpOw0KLSAgICBzcHJpbnRmKGJ1ZitzdHJsZW4oYnVmKSwg Ii4lMDJ1OiBbJTVkXTogIiwgdHYudHZfdXNlYyAvIDEwMDAwLCBwaWQpOw0K KyAgICBzbnByaW50ZihidWYrc3RybGVuKGJ1ZiksIHNpemVvZiBidWYgLSAo c3RybGVuKGJ1ZikrMSksIi4lMDJ1OiBbJTVkXTogIiwgdHYudHZfdXNlYyAv IDEwMDAwLCBwaWQpOw0KICAgICAvKg0KICAgICAgKiBDb3B5IGZvcm1hdCBz dHJpbmcgaW50byBhIGxvY2FsIGJ1ZmZlciBzbw0KICAgICAgKiB0aGF0IHdl IGNhbiBzdWJzdGl0dXRlIGZvciAlbSwgYSBsYSBzeXNsb2cuDQpAQCAtOTYs NiArOTYsNiBAQA0KIAlmbXQucHV0KGZwWzBdKTsNCiAgICAgfQ0KICAgICBm bXQucHV0KCdcbicpOyBmbXQucHV0KCdcMCcpOw0KLSAgICB2c3ByaW50Zihi dWYrc3RybGVuKGJ1ZiksIChjb25zdCBjaGFyKikgZm10LCBhcCk7DQorICAg IHZzbnByaW50ZihidWYrc3RybGVuKGJ1ZiksIHNpemVvZiBidWYgLSAoc3Ry bGVuKGJ1ZikrMSksIChjb25zdCBjaGFyKikgZm10LCBhcCk7DQogICAgICh2 b2lkKSBTeXM6OndyaXRlKGZkLCBidWYsIHN0cmxlbihidWYpKTsNCiB9DQpk aWZmIC1ydSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4wcGwy L2ZheGQvRmF4UmVjdi5jKysgLi9mYXhkL0ZheFJlY3YuYysrDQotLS0gL3Rt cC9vbGQvaHlsYWZheC93b3JrL2h5bGFmYXgtdjQuMHBsMi9mYXhkL0ZheFJl Y3YuYysrCVNhdCBGZWIgMTQgMTE6NDk6MjMgMTk5OA0KKysrIC4vZmF4ZC9G YXhSZWN2LmMrKwlTdW4gRmViIDIwIDIyOjE5OjI3IDIwMDANCkBAIC0xMzks NyArMTM5LDcgQEANCiAJICogbnVtYmVyIGZpbGUgdG8gcmVmbGVjdCB0aGUg YWxsb2NhdGlvbi4NCiAJICovDQogCSh2b2lkKSBmbG9jayhmdG1wLCBMT0NL X0VYfExPQ0tfTkIpOw0KLQlzcHJpbnRmKGxpbmUsICIldSIsIHNlcW51bSk7 DQorCXNucHJpbnRmKGxpbmUsIHNpemVvZiBsaW5lLCAiJXUiLCBzZXFudW0p Ow0KIAkodm9pZCkgbHNlZWsoZnNlcWYsIDAsIFNFRUtfU0VUKTsNCiAJaWYg KFN5czo6d3JpdGUoZnNlcWYsIGxpbmUsIHN0cmxlbihsaW5lKSkgIT0gc3Ry bGVuKGxpbmUpIHx8DQogCQlmdHJ1bmNhdGUoZnNlcWYsc3RybGVuKGxpbmUp KSkgew0KZGlmZiAtcnUgL3RtcC9vbGQvaHlsYWZheC93b3JrL2h5bGFmYXgt djQuMHBsMi9mYXhkL0ZheFJlcXVlc3QuYysrIC4vZmF4ZC9GYXhSZXF1ZXN0 LmMrKw0KLS0tIC90bXAvb2xkL2h5bGFmYXgvd29yay9oeWxhZmF4LXY0LjBw bDIvZmF4ZC9GYXhSZXF1ZXN0LmMrKwlTYXQgRmViIDE0IDExOjQ5OjI0IDE5 OTgNCisrKyAuL2ZheGQvRmF4UmVxdWVzdC5jKysJU3VuIEZlYiAyMCAyMjox OToyNyAyMDAwDQpAQCAtNjc5LDcgKzY3OSw3IEBADQogRmF4UmVxdWVzdDo6 ZXJyb3IoY29uc3QgY2hhciogZm10MCAuLi4pDQogew0KICAgICBjaGFyIGZt dFsxMjhdOw0KLSAgICBzcHJpbnRmKGZtdCwgIiVzOiBsaW5lICV1OiAlcyIs IChjb25zdCBjaGFyKikgcWZpbGUsICh1X2ludCkgbGluZW5vLCBmbXQwKTsN CisgICAgc25wcmludGYoZm10LCBzaXplb2YgZm10LCAiJXM6IGxpbmUgJXU6 ICVzIiwgKGNvbnN0IGNoYXIqKSBxZmlsZSwgKHVfaW50KSBsaW5lbm8sIGZt dDApOw0KICAgICB2YV9saXN0IGFwOw0KICAgICB2YV9zdGFydChhcCwgZm10 MCk7DQogICAgIHZsb2dFcnJvcihmbXQsIGFwKTsNCmRpZmYgLXJ1IC90bXAv b2xkL2h5bGFmYXgvd29yay9oeWxhZmF4LXY0LjBwbDIvZmF4ZC9Kb2IuYysr IC4vZmF4ZC9Kb2IuYysrDQotLS0gL3RtcC9vbGQvaHlsYWZheC93b3JrL2h5 bGFmYXgtdjQuMHBsMi9mYXhkL0pvYi5jKysJU2F0IEZlYiAxNCAxMTo0OToz MiAxOTk4DQorKysgLi9mYXhkL0pvYi5jKysJU3VuIEZlYiAyMCAyMjoxOToy NyAyMDAwDQpAQCAtMTcxLDcgKzE3MSw3IEBADQogI2RlZmluZQlOKGEpCShz aXplb2YgKGEpIC8gc2l6ZW9mIChhWzBdKSkNCiAgICAgaWYgKCh1X2ludCkg c3RhdHVzID49IE4obmFtZXMpKSB7DQogCXN0YXRpYyBjaGFyIHNbMzBdOw0K LQlzcHJpbnRmKHMsICJzdGF0dXNfJXUiLCAodV9pbnQpIHN0YXR1cyk7DQor CXNucHJpbnRmKHMsIHNpemVvZiBzLCAic3RhdHVzXyV1IiwgKHVfaW50KSBz dGF0dXMpOw0KIAlyZXR1cm4gKHMpOw0KICAgICB9IGVsc2UNCiAJcmV0dXJu IChuYW1lc1tzdGF0dXNdKTsNCmRpZmYgLXJ1IC90bXAvb2xkL2h5bGFmYXgv d29yay9oeWxhZmF4LXY0LjBwbDIvZmF4ZC9Nb2RlbVNlcnZlci5jKysgLi9m YXhkL01vZGVtU2VydmVyLmMrKw0KLS0tIC90bXAvb2xkL2h5bGFmYXgvd29y ay9oeWxhZmF4LXY0LjBwbDIvZmF4ZC9Nb2RlbVNlcnZlci5jKysJU2F0IEZl YiAxNCAxMTo0OTozNCAxOTk4DQorKysgLi9mYXhkL01vZGVtU2VydmVyLmMr KwlTdW4gRmViIDIwIDIyOjE5OjI3IDIwMDANCkBAIC02MDQsNyArNjA0LDcg QEANCiAJfSB3aGlsZSAoZnRtcCA8IDAgJiYgZXJybm8gPT0gRUVYSVNUICYm IC0tbnRyeSA+PSAwKTsNCiAJdW1hc2sob21hc2spOw0KIAlpZiAoZnRtcCA+ PSAwKSB7DQotCSAgICBzcHJpbnRmKGxpbmUsICIldSIsIHNlcW51bSk7DQor CSAgICBzbnByaW50ZihsaW5lLCBzaXplb2YgbGluZSwgIiV1Iiwgc2VxbnVt KTsNCiAJICAgICh2b2lkKSBsc2Vlayhmc2VxZiwgMCwgU0VFS19TRVQpOw0K IAkgICAgaWYgKFN5czo6d3JpdGUoZnNlcWYsIGxpbmUsIHN0cmxlbihsaW5l KSkgIT0gc3RybGVuKGxpbmUpIHx8DQogCQlmdHJ1bmNhdGUoZnNlcWYsc3Ry bGVuKGxpbmUpKSkNCkBAIC04MDYsNyArODA2LDcgQEANCiAgICAgdmFfbGlz dCBhcDsNCiAgICAgdmFfc3RhcnQoYXAsIGZtdDApOw0KICAgICBjaGFyIGZt dFsyNTZdOw0KLSAgICBzcHJpbnRmKGZtdCwgIk1PREVNICVzIiwgZm10MCk7 DQorICAgIHNucHJpbnRmKGZtdCwgc2l6ZW9mIGZtdCwgIk1PREVNICVzIiwg Zm10MCk7DQogICAgIHZ0cmFjZVN0YXR1cyhGQVhUUkFDRV9NT0RFTU9QUywg Zm10LCBhcCk7DQogICAgIHZhX2VuZChhcCk7DQogfQ0KZGlmZiAtcnUgL3Rt cC9vbGQvaHlsYWZheC93b3JrL2h5bGFmYXgtdjQuMHBsMi9mYXhkL1NlcnZl ckNvbmZpZy5jKysgLi9mYXhkL1NlcnZlckNvbmZpZy5jKysNCi0tLSAvdG1w L29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4wcGwyL2ZheGQvU2VydmVy Q29uZmlnLmMrKwlTYXQgRmViIDE0IDExOjQ5OjM2IDE5OTgNCisrKyAuL2Zh eGQvU2VydmVyQ29uZmlnLmMrKwlTdW4gRmViIDIwIDIyOjE5OjI3IDIwMDAN CkBAIC0zNzMsOSArMzczLDkgQEANCiB7DQogICAgIGNoYXIgZm10WzEyOF07 DQogICAgIGlmIChtb2R1bGUgIT0gTlVMTCkNCi0Jc3ByaW50ZihmbXQsICIl czogV2FybmluZywgJXMuIiwgbW9kdWxlLCBmbXQwKTsNCisJc25wcmludGYo Zm10LCBzaXplb2YgZm10LCAiJXM6IFdhcm5pbmcsICVzLiIsIG1vZHVsZSwg Zm10MCk7DQogICAgIGVsc2UNCi0Jc3ByaW50ZihmbXQsICJXYXJuaW5nLCAl cy4iLCBmbXQwKTsNCisJc25wcmludGYoZm10LCBzaXplb2YgZm10LCAiV2Fy bmluZywgJXMuIiwgZm10MCk7DQogICAgIHZsb2dFcnJvcihmbXQsIGFwKTsN CiB9DQogDQpAQCAtMzg0LDkgKzM4NCw5IEBADQogew0KICAgICBjaGFyIGZt dFsxMjhdOw0KICAgICBpZiAobW9kdWxlICE9IE5VTEwpDQotCXNwcmludGYo Zm10LCAiJXM6IFdhcm5pbmcsICVzLiIsIG1vZHVsZSwgZm10MCk7DQorCXNu cHJpbnRmKGZtdCwgc2l6ZW9mIGZtdCwgIiVzOiBXYXJuaW5nLCAlcy4iLCBt b2R1bGUsIGZtdDApOw0KICAgICBlbHNlDQotCXNwcmludGYoZm10LCAiV2Fy bmluZywgJXMuIiwgZm10MCk7DQorCXNucHJpbnRmKGZtdCwgc2l6ZW9mIGZt dCwgIldhcm5pbmcsICVzLiIsIGZtdDApOw0KICAgICB2bG9nV2FybmluZyhm bXQsIGFwKTsNCiB9DQogDQpkaWZmIC1ydSAvdG1wL29sZC9oeWxhZmF4L3dv cmsvaHlsYWZheC12NC4wcGwyL2ZheGQvVVVDUExvY2suYysrIC4vZmF4ZC9V VUNQTG9jay5jKysNCi0tLSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZh eC12NC4wcGwyL2ZheGQvVVVDUExvY2suYysrCU1vbiBGZWIgMjEgMTU6MTk6 NDQgMjAwMA0KKysrIC4vZmF4ZC9VVUNQTG9jay5jKysJTW9uIEZlYiAyMSAx NDo1NjoyOSAyMDAwDQpAQCAtMzEzLDcgKzMxMyw3IEBADQogQXNjaWlVVUNQ TG9jazo6c2V0UElEKHBpZF90IHBpZCkNCiB7DQogICAgIC8vIFhYWCBzaG91 bGQgdGhpcyBiZSAlZCBvciAlbGQ/IGRlcGVuZHMgb24gcGlkX3QNCi0gICAg c3ByaW50ZigoY2hhciopIGRhdGEsICIlKmRcbiIsIFVVQ1BfUElERElHSVRT LCBwaWQpOw0KKyAgICBzbnByaW50ZigoY2hhciopIGRhdGEsIFVVQ1BfUElE RElHSVRTKzIsICIlKmRcbiIsIFVVQ1BfUElERElHSVRTLCBwaWQpOw0KIH0N CiANCiBmeEJvb2wNCmRpZmYgLXJ1IC90bXAvb2xkL2h5bGFmYXgvd29yay9o eWxhZmF4LXY0LjBwbDIvZmF4ZC9mYXhBcHAuYysrIC4vZmF4ZC9mYXhBcHAu YysrDQotLS0gL3RtcC9vbGQvaHlsYWZheC93b3JrL2h5bGFmYXgtdjQuMHBs Mi9mYXhkL2ZheEFwcC5jKysJU2F0IEZlYiAxNCAxMTo0OTozOSAxOTk4DQor KysgLi9mYXhkL2ZheEFwcC5jKysJU3VuIEZlYiAyMCAyMjoxOToyNyAyMDAw DQpAQCAtMjMxLDcgKzIzMSw3IEBADQogCSAgICBsb2dFcnJvcigiZmNudGw6 ICVtIik7DQogICAgIH0NCiAgICAgY2hhciBtc2dbNDA5Nl07DQotICAgIHZz cHJpbnRmKG1zZywgZm10LCBhcCk7DQorICAgIHZzbnByaW50Zihtc2csIHNp emVvZiBtc2csIGZtdCwgYXApOw0KICAgICB1X2ludCBsZW4gPSBzdHJsZW4o bXNnKSsxOw0KICAgICBpZiAoU3lzOjp3cml0ZShmYXhxZmlmbywgbXNnLCBs ZW4pICE9IGxlbikgew0KIAlpZiAoZXJybm8gPT0gRUJBREYgfHwgZXJybm8g PT0gRVBJUEUpCQkvLyByZWFkZXIgZXhwaXJlZA0KQEAgLTI2Myw3ICsyNjMs NyBAQA0KIGZheEFwcDo6c2VuZE1vZGVtU3RhdHVzKGNvbnN0IGNoYXIqIGRl dmlkLCBjb25zdCBjaGFyKiBmbXQwIC4uLikNCiB7DQogICAgIGNoYXIgZm10 WzIqMTAyNF07DQotICAgIHNwcmludGYoZm10LCAiKyVzOiVzIiwgZGV2aWQs IGZtdDApOw0KKyAgICBzbnByaW50ZihmbXQsIHNpemVvZiBmbXQsICIrJXM6 JXMiLCBkZXZpZCwgZm10MCk7DQogICAgIHZhX2xpc3QgYXA7DQogICAgIHZh X3N0YXJ0KGFwLCBmbXQwKTsNCiAgICAgZnhCb29sIG9rID0gdnNlbmRRdWV1 ZXIoZm10LCBhcCk7DQpAQCAtMjc4LDcgKzI3OCw3IEBADQogZmF4QXBwOjpz ZW5kSm9iU3RhdHVzKGNvbnN0IGNoYXIqIGpvYmlkLCBjb25zdCBjaGFyKiBm bXQwIC4uLikNCiB7DQogICAgIGNoYXIgZm10WzIqMTAyNF07DQotICAgIHNw cmludGYoZm10LCAiKiVzOiVzIiwgam9iaWQsIGZtdDApOw0KKyAgICBzbnBy aW50ZihmbXQsIHNpemVvZiBmbXQsICIqJXM6JXMiLCBqb2JpZCwgZm10MCk7 DQogICAgIHZhX2xpc3QgYXA7DQogICAgIHZhX3N0YXJ0KGFwLCBmbXQwKTsN CiAgICAgZnhCb29sIG9rID0gdnNlbmRRdWV1ZXIoZm10LCBhcCk7DQpAQCAt MjkzLDcgKzI5Myw3IEBADQogZmF4QXBwOjpzZW5kUmVjdlN0YXR1cyhjb25z dCBjaGFyKiBkZXZpZCwgY29uc3QgY2hhciogZm10MCAuLi4pDQogew0KICAg ICBjaGFyIGZtdFsyKjEwMjRdOw0KLSAgICBzcHJpbnRmKGZtdCwgIkAlczol cyIsIGRldmlkLCBmbXQwKTsNCisgICAgc25wcmludGYoZm10LCBzaXplb2Yg Zm10LCAiQCVzOiVzIiwgZGV2aWQsIGZtdDApOw0KICAgICB2YV9saXN0IGFw Ow0KICAgICB2YV9zdGFydChhcCwgZm10MCk7DQogICAgIGZ4Qm9vbCBvayA9 IHZzZW5kUXVldWVyKGZtdCwgYXApOw0KZGlmZiAtcnUgL3RtcC9vbGQvaHls YWZheC93b3JrL2h5bGFmYXgtdjQuMHBsMi9mYXhkL2ZheFF1ZXVlQXBwLmMr KyAuL2ZheGQvZmF4UXVldWVBcHAuYysrDQotLS0gL3RtcC9vbGQvaHlsYWZh eC93b3JrL2h5bGFmYXgtdjQuMHBsMi9mYXhkL2ZheFF1ZXVlQXBwLmMrKwlT YXQgRmViIDE0IDExOjQ5OjQyIDE5OTgNCisrKyAuL2ZheGQvZmF4UXVldWVB cHAuYysrCVN1biBGZWIgMjAgMjI6MTk6MjcgMjAwMA0KQEAgLTk3MSwxMCAr OTcxLDEwIEBADQogCSAqICAgLW0gPG1heHBhZ2VzPgltYXggcGFnZXMgdG8g Z2VuZXJhdGUNCiAJICogICAtMXwtMgkJMWQgb3IgMmQgZW5jb2RpbmcNCiAJ ICovDQotCWNoYXIgcmJ1ZlsyMF07IHNwcmludGYocmJ1ZiwgIiV1IiwgcGFy YW1zLnZlcnRpY2FsUmVzKCkpOw0KLQljaGFyIHdidWZbMjBdOyBzcHJpbnRm KHdidWYsICIldSIsIHBhcmFtcy5wYWdlV2lkdGgoKSk7DQotCWNoYXIgbGJ1 ZlsyMF07IHNwcmludGYobGJ1ZiwgIiVkIiwgcGFyYW1zLnBhZ2VMZW5ndGgo KSk7DQotCWNoYXIgbWJ1ZlsyMF07IHNwcmludGYobWJ1ZiwgIiV1IiwgZGNp LmdldE1heFNlbmRQYWdlcygpKTsNCisJY2hhciByYnVmWzIwXTsgc25wcmlu dGYocmJ1Ziwgc2l6ZW9mIHJidWYsICIldSIsIHBhcmFtcy52ZXJ0aWNhbFJl cygpKTsNCisJY2hhciB3YnVmWzIwXTsgc25wcmludGYod2J1Ziwgc2l6ZW9m IHdidWYsICIldSIsIHBhcmFtcy5wYWdlV2lkdGgoKSk7DQorCWNoYXIgbGJ1 ZlsyMF07IHNucHJpbnRmKGxidWYsIHNpemVvZiBsYnVmLCAiJWQiLCBwYXJh bXMucGFnZUxlbmd0aCgpKTsNCisJY2hhciBtYnVmWzIwXTsgc25wcmludGYo bWJ1Ziwgc2l6ZW9mIG1idWYsICIldSIsIGRjaS5nZXRNYXhTZW5kUGFnZXMo KSk7DQogCWNvbnN0IGNoYXIqIGFyZ3ZbMzBdOw0KIAlpbnQgYWMgPSAwOw0K IAlzd2l0Y2ggKHJlcS5vcCkgew0KQEAgLTI3MjYsOSArMjcyNiw5IEBADQog ew0KICAgICBjaGFyIGZtdFsxMjhdOw0KICAgICBpZiAobW9kdWxlICE9IE5V TEwpDQotCXNwcmludGYoZm10LCAiJXM6IFdhcm5pbmcsICVzLiIsIG1vZHVs ZSwgZm10MCk7DQorCXNucHJpbnRmKGZtdCwgc2l6ZW9mIGZtdCwgIiVzOiBX YXJuaW5nLCAlcy4iLCBtb2R1bGUsIGZtdDApOw0KICAgICBlbHNlDQotCXNw cmludGYoZm10LCAiV2FybmluZywgJXMuIiwgZm10MCk7DQorCXNucHJpbnRm KGZtdCwgc2l6ZW9mIGZtdCwgIldhcm5pbmcsICVzLiIsIGZtdDApOw0KICAg ICB2bG9nRXJyb3IoZm10LCBhcCk7DQogfQ0KIA0KQEAgLTI3MzcsOSArMjcz Nyw5IEBADQogew0KICAgICBjaGFyIGZtdFsxMjhdOw0KICAgICBpZiAobW9k dWxlICE9IE5VTEwpDQotCXNwcmludGYoZm10LCAiJXM6IFdhcm5pbmcsICVz LiIsIG1vZHVsZSwgZm10MCk7DQorCXNucHJpbnRmKGZtdCwgc2l6ZW9mIGZt dCwgIiVzOiBXYXJuaW5nLCAlcy4iLCBtb2R1bGUsIGZtdDApOw0KICAgICBl bHNlDQotCXNwcmludGYoZm10LCAiV2FybmluZywgJXMuIiwgZm10MCk7DQor CXNucHJpbnRmKGZtdCwgc2l6ZW9mIGZtdCwgIldhcm5pbmcsICVzLiIsIGZt dDApOw0KICAgICB2bG9nV2FybmluZyhmbXQsIGFwKTsNCiB9DQogDQpkaWZm IC1ydSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4wcGwyL2Zh eGQvdHJpZ3Rlc3QuYysrIC4vZmF4ZC90cmlndGVzdC5jKysNCi0tLSAvdG1w L29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4wcGwyL2ZheGQvdHJpZ3Rl c3QuYysrCVNhdCBGZWIgMTQgMTE6NDk6NDcgMTk5OA0KKysrIC4vZmF4ZC90 cmlndGVzdC5jKysJTW9uIEZlYiAyMSAxNDo1NzoyMCAyMDAwDQpAQCAtMjk2 LDcgKzI5Niw3IEBADQogICAgIGludCBmZCwgbjsNCiAgICAgY2hhciBtc2db MjU2XTsNCiANCi0gICAgc3ByaW50ZihmaWZvTmFtZSwgImNsaWVudC8ldSIs IGdldHBpZCgpKTsNCisgICAgc25wcmludGYoZmlmb05hbWUsIHNpemVvZiBm aWZvTmFtZSwgImNsaWVudC8ldSIsIGdldHBpZCgpKTsNCiAgICAgaWYgKFN5 czo6bWtmaWZvKGZpZm9OYW1lLCAwNjY2KSA8IDAgJiYgZXJybm8gIT0gRUVY SVNUKSB7DQogCXBlcnJvcigibWtmaWZvIik7DQogCWV4aXQoLTEpOw0KQEAg LTMwOSw3ICszMDksNyBAQA0KIAl1bmxpbmsoZmlmb05hbWUpOw0KIAlleGl0 KC0xKTsNCiAgICAgfQ0KLSAgICBzcHJpbnRmKG1zZywgIlQlczpOJXMiLCBm aWZvTmFtZSwgdHJpZ2dlcik7DQorICAgIHNucHJpbnRmKG1zZywgc2l6ZW9m IG1zZywgIlQlczpOJXMiLCBmaWZvTmFtZSwgdHJpZ2dlcik7DQogICAgIHNl bmQobXNnLCBzdHJsZW4obXNnKSsxKTsNCiAgICAgZm9yICg7Oykgew0KIAlG RF9aRVJPKCZyZCk7DQpkaWZmIC1ydSAvdG1wL29sZC9oeWxhZmF4L3dvcmsv aHlsYWZheC12NC4wcGwyL2hmYXhkL0h5bGFGQVhTZXJ2ZXIuYysrIC4vaGZh eGQvSHlsYUZBWFNlcnZlci5jKysNCi0tLSAvdG1wL29sZC9oeWxhZmF4L3dv cmsvaHlsYWZheC12NC4wcGwyL2hmYXhkL0h5bGFGQVhTZXJ2ZXIuYysrCVNh dCBGZWIgMTQgMTE6NTA6MDIgMTk5OA0KKysrIC4vaGZheGQvSHlsYUZBWFNl cnZlci5jKysJU3VuIEZlYiAyMCAyMjoxOToyNyAyMDAwDQpAQCAtMTYxLDkg KzE2MSw5IEBADQogew0KICAgICBjaGFyIGZtdFsxMjhdOw0KICAgICBpZiAo bW9kdWxlICE9IE5VTEwpDQotCXNwcmludGYoZm10LCAiJXM6IFdhcm5pbmcs ICVzLiIsIG1vZHVsZSwgZm10MCk7DQorCXNucHJpbnRmKGZtdCwgc2l6ZW9m IGZtdCwgIiVzOiBXYXJuaW5nLCAlcy4iLCBtb2R1bGUsIGZtdDApOw0KICAg ICBlbHNlDQotCXNwcmludGYoZm10LCAiV2FybmluZywgJXMuIiwgZm10MCk7 DQorCXNucHJpbnRmKGZtdCwgc2l6ZW9mIGZtdCwgIldhcm5pbmcsICVzLiIs IGZtdDApOw0KICAgICB2bG9nRXJyb3IoZm10LCBhcCk7DQogfQ0KIA0KQEAg LTE3Miw5ICsxNzIsOSBAQA0KIHsNCiAgICAgY2hhciBmbXRbMTI4XTsNCiAg ICAgaWYgKG1vZHVsZSAhPSBOVUxMKQ0KLQlzcHJpbnRmKGZtdCwgIiVzOiBX YXJuaW5nLCAlcy4iLCBtb2R1bGUsIGZtdDApOw0KKwlzbnByaW50ZihmbXQs IHNpemVvZiBmbXQsICIlczogV2FybmluZywgJXMuIiwgbW9kdWxlLCBmbXQw KTsNCiAgICAgZWxzZQ0KLQlzcHJpbnRmKGZtdCwgIldhcm5pbmcsICVzLiIs IGZtdDApOw0KKwlzbnByaW50ZihmbXQsIHNpemVvZiBmbXQsICJXYXJuaW5n LCAlcy4iLCBmbXQwKTsNCiAgICAgdmxvZ1dhcm5pbmcoZm10LCBhcCk7DQog fQ0KIA0KQEAgLTUzMCw3ICs1MzAsNyBAQA0KIAkgICAgZmlsZW5hbWUsIGxp bmUpOw0KIAlzZXFudW0gPSAxOw0KICAgICB9DQotICAgIHNwcmludGYobGlu ZSwgIiV1IiwgTkVYVFNFUU5VTShzZXFudW0rY291bnQpKTsNCisgICAgc25w cmludGYobGluZSwgc2l6ZW9mIGxpbmUsICIldSIsIE5FWFRTRVFOVU0oc2Vx bnVtK2NvdW50KSk7DQogICAgIGxzZWVrKGZkLCAwLCBTRUVLX1NFVCk7DQog ICAgIGlmIChTeXM6OndyaXRlKGZkLCBsaW5lLCBzdHJsZW4obGluZSkpICE9 IHN0cmxlbihsaW5lKSB8fA0KIAkJZnRydW5jYXRlKGZkLHN0cmxlbihsaW5l KSkpIHsNCmRpZmYgLXJ1IC90bXAvb2xkL2h5bGFmYXgvd29yay9oeWxhZmF4 LXY0LjBwbDIvaGZheGQvSm9icy5jKysgLi9oZmF4ZC9Kb2JzLmMrKw0KLS0t IC90bXAvb2xkL2h5bGFmYXgvd29yay9oeWxhZmF4LXY0LjBwbDIvaGZheGQv Sm9icy5jKysJU2F0IEZlYiAxNCAxMTo1MDowNSAxOTk4DQorKysgLi9oZmF4 ZC9Kb2JzLmMrKwlTdW4gRmViIDIwIDIyOjE5OjI3IDIwMDANCkBAIC0xNjQ2 LDcgKzE2NDYsNyBAQA0KIAkJZnByaW50ZihmZCwgZnNwZWMsIChjb25zdCBj aGFyKikgam9iLmNvbXBhbnkpOw0KIAkJYnJlYWs7DQogCSAgICBjYXNlICdE JzoNCi0JCXNwcmludGYodG1wYnVmLCAiJTJ1OiUtMnUiLCBqb2IudG90ZGlh bHMsIGpvYi5tYXhkaWFscyk7DQorCQlzbnByaW50Zih0bXBidWYsIHNpemVv ZiB0bXBidWYsICIlMnU6JS0ydSIsIGpvYi50b3RkaWFscywgam9iLm1heGRp YWxzKTsNCiAJCWZwcmludGYoZmQsIGZzcGVjLCB0bXBidWYpOw0KIAkJYnJl YWs7DQogCSAgICBjYXNlICdFJzoNCkBAIC0xNjgzLDcgKzE2ODMsNyBAQA0K IAkJZnByaW50ZihmZCwgZnNwZWMsICJOICJbam9iLnVzZWNjb3Zlcl0pOw0K IAkJYnJlYWs7DQogCSAgICBjYXNlICdQJzoNCi0JCXNwcmludGYodG1wYnVm LCAiJTJ1OiUtMnUiLCBqb2IubnBhZ2VzLCBqb2IudG90cGFnZXMpOw0KKwkJ c25wcmludGYodG1wYnVmLCBzaXplb2YgdG1wYnVmLCAiJTJ1OiUtMnUiLCBq b2IubnBhZ2VzLCBqb2IudG90cGFnZXMpOw0KIAkJZnByaW50ZihmZCwgZnNw ZWMsIHRtcGJ1Zik7DQogCQlicmVhazsNCiAJICAgIGNhc2UgJ1EnOg0KQEAg LTE2OTYsMTEgKzE2OTYsMTEgQEANCiAJCWZwcmludGYoZmQsIGZzcGVjLCAo Y29uc3QgY2hhciopIGpvYi5zZW5kZXIpOw0KIAkJYnJlYWs7DQogCSAgICBj YXNlICdUJzoNCi0JCXNwcmludGYodG1wYnVmLCAiJTJ1OiUtMnUiLCBqb2Iu dG90dHJpZXMsIGpvYi5tYXh0cmllcyk7DQorCQlzbnByaW50Zih0bXBidWYs IHNpemVvZiB0bXBidWYsICIlMnU6JS0ydSIsIGpvYi50b3R0cmllcywgam9i Lm1heHRyaWVzKTsNCiAJCWZwcmludGYoZmQsIGZzcGVjLCB0bXBidWYpOw0K IAkJYnJlYWs7DQogCSAgICBjYXNlICdVJzoNCi0JCXNwcmludGYodG1wYnVm LCAiJS4xZiIsIGpvYi5jaG9wdGhyZXNob2xkKTsNCisJCXNucHJpbnRmKHRt cGJ1Ziwgc2l6ZW9mIHRtcGJ1ZiwgIiUuMWYiLCBqb2IuY2hvcHRocmVzaG9s ZCk7DQogCQlmcHJpbnRmKGZkLCBmc3BlYywgdG1wYnVmKTsNCiAJCWJyZWFr Ow0KIAkgICAgY2FzZSAnVic6DQpkaWZmIC1ydSAvdG1wL29sZC9oeWxhZmF4 L3dvcmsvaHlsYWZheC12NC4wcGwyL2hmYXhkL09sZFByb3RvY29sLmMrKyAu L2hmYXhkL09sZFByb3RvY29sLmMrKw0KLS0tIC90bXAvb2xkL2h5bGFmYXgv d29yay9oeWxhZmF4LXY0LjBwbDIvaGZheGQvT2xkUHJvdG9jb2wuYysrCU1v biBGZWIgMjEgMTU6MTk6NDQgMjAwMA0KKysrIC4vaGZheGQvT2xkUHJvdG9j b2wuYysrCVN1biBGZWIgMjAgMjI6MTk6MjggMjAwMA0KQEAgLTM1Miw4ICsz NTIsOCBAQA0KIE9sZFByb3RvY29sU2VydmVyOjp2c2VuZENsaWVudChjb25z dCBjaGFyKiB0YWcsIGNvbnN0IGNoYXIqIGZtdCwgdmFfbGlzdCBhcCkNCiB7 DQogICAgIGNoYXIgYnVmWzIwNDhdOw0KLSAgICBzcHJpbnRmKGJ1ZiwgIiVz OiIsIHRhZyk7DQotICAgIHZzcHJpbnRmKHN0cmNocihidWYsJ1wwJyksIGZt dCwgYXApOw0KKyAgICBzbnByaW50ZihidWYsIHNpemVvZiBidWYsICIlczoi LCB0YWcpOw0KKyAgICB2c25wcmludGYoc3RyY2hyKGJ1ZiwnXDAnKSwgc2l6 ZW9mIGJ1ZiAtIChzdHJjaHIoYnVmLCAnXDAnKSAtIGJ1ZiksIGZtdCwgYXAp Ow0KICAgICBmcHJpbnRmKHN0ZG91dCwgIiVzXG4iLCBidWYpOw0KICAgICBp ZiAoVFJBQ0UoUFJPVE9DT0wpKQ0KIAlsb2dEZWJ1ZygiJXMiLCBidWYpOw0K QEAgLTQ3MiwxOSArNDcyLDE5IEBADQogICAgIGJ1ZlswXSA9ICdcMCc7DQog ICAgIGlmIChwd2QtPnB3X2dlY29zKSB7DQogCWlmIChwd2QtPnB3X2dlY29z WzBdID09ICcmJykgew0KLQkgICAgc3RyY3B5KGJ1ZiwgcHdkLT5wd19uYW1l KTsNCi0JICAgIHN0cmNhdChidWYsIHB3ZC0+cHdfZ2Vjb3MrMSk7DQorCSAg ICBzdHJsY3B5KGJ1ZiwgcHdkLT5wd19uYW1lLCBzaXplb2YgYnVmKTsNCisJ ICAgIHN0cmxjYXQoYnVmLCBwd2QtPnB3X2dlY29zKzEsIHNpemVvZiBidWYp Ow0KIAkgICAgaWYgKGlzbG93ZXIoYnVmWzBdKSkNCiAJCWJ1ZlswXSA9IHRv dXBwZXIoYnVmWzBdKTsNCiAJfSBlbHNlDQotCSAgICBzdHJjcHkoYnVmLCBw d2QtPnB3X2dlY29zKTsNCisJICAgIHN0cmxjcHkoYnVmLCBwd2QtPnB3X2dl Y29zLCBzaXplb2YgYnVmKTsNCiAJaWYgKChjcCA9IHN0cmNocihidWYsJywn KSkgIT0gMCkNCiAJICAgICpjcCA9ICdcMCc7DQogCS8qIHNlZSBGYXhDbGll bnQ6OnNldHVwVXNlcklkZW50aXR5OyBzdHJpcCBTeXNWIGp1bmsgKi8NCiAJ aWYgKChjcCA9IHN0cmNocihidWYsJygnKSkgIT0gMCkNCiAJICAgICpjcCA9 ICdcMCc7DQogICAgIH0gZWxzZQ0KLQlzdHJjcHkoYnVmLCBwd2QtPnB3X25h bWUpOw0KKwlzdHJsY3B5KGJ1ZiwgcHdkLT5wd19uYW1lLCBzaXplb2YgYnVm KTsNCiAgICAgaWYgKFRSQUNFKFBST1RPQ09MKSkgew0KIAlpZiAoKmJ1ZikN CiAJICAgICBsb2dEZWJ1ZygiJXMgdXNlcjogXCIlc1wiIiwgcHdkLT5wd19u YW1lLCBidWYpOw0KZGlmZiAtcnUgL3RtcC9vbGQvaHlsYWZheC93b3JrL2h5 bGFmYXgtdjQuMHBsMi9oZmF4ZC9TdGF0dXMuYysrIC4vaGZheGQvU3RhdHVz LmMrKw0KLS0tIC90bXAvb2xkL2h5bGFmYXgvd29yay9oeWxhZmF4LXY0LjBw bDIvaGZheGQvU3RhdHVzLmMrKwlTYXQgRmViIDE0IDExOjUwOjA5IDE5OTgN CisrKyAuL2hmYXhkL1N0YXR1cy5jKysJU3VuIEZlYiAyMCAyMjoxOToyOCAy MDAwDQpAQCAtMjYyLDE0ICsyNjIsMTQgQEANCiAJCWlmIChjb25maWcubWF4 UmVjdlBhZ2VzID09ICh1X2ludCkgLTEpDQogCQkgICAgc3RyY3B5KHRtcGJ1 ZiwgIklORiIpOw0KIAkJZWxzZQ0KLQkJICAgIHNwcmludGYodG1wYnVmLCAi JXUiLCBjb25maWcubWF4UmVjdlBhZ2VzKTsNCisJCSAgICBzbnByaW50Zih0 bXBidWYsIHNpemVvZiB0bXBidWYsICIldSIsIGNvbmZpZy5tYXhSZWN2UGFn ZXMpOw0KIAkJZnByaW50ZihmZCwgZnNwZWMsIGNvbmZpZy5tYXhSZWN2UGFn ZXMpOw0KIAkJYnJlYWs7DQogCSAgICBjYXNlICdzJzoNCiAJCWZwcmludGYo ZmQsIGZzcGVjLCAoY29uc3QgY2hhciopIGNvbmZpZy5zdGF0dXMpOw0KIAkJ YnJlYWs7DQogCSAgICBjYXNlICd0JzoNCi0JCXNwcmludGYodG1wYnVmLCAi JTA1eDolMDV4IiwNCisJCXNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mIHRtcGJ1 ZiwgIiUwNXg6JTA1eCIsDQogCQkgICAgY29uZmlnLnRyYWNpbmdMZXZlbCYw eGZmZmZmLA0KIAkJICAgIGNvbmZpZy5sb2dUcmFjaW5nTGV2ZWwmMHhmZmZm Zik7DQogCQlmcHJpbnRmKGZkLCBmc3BlYywgdG1wYnVmKTsNCmRpZmYgLXJ1 IC90bXAvb2xkL2h5bGFmYXgvd29yay9oeWxhZmF4LXY0LjBwbDIvbWFuL2Nv bmZpZy40ZiAuL21hbi9jb25maWcuNGYNCi0tLSAvdG1wL29sZC9oeWxhZmF4 L3dvcmsvaHlsYWZheC12NC4wcGwyL21hbi9jb25maWcuNGYJU2F0IEZlYiAx NCAxMTo1MDo0NiAxOTk4DQorKysgLi9tYW4vY29uZmlnLjRmCVN1biBGZWIg MjAgMjI6MTk6MjggMjAwMA0KQEAgLTE0NDYsNyArMTQ0Niw3IEBADQogVGhl IGNvbW1hbmQgdG8gcGxhY2UgYSBwaG9uZSBjYWxsLg0KIFRoZSBzdHJpbmcg aXMgYXNzdW1lZCB0byBiZSBzdWl0YWJsZSBmb3IgdXNlDQogYXMgYSBwYXJh bWV0ZXIgdG8gdGhlDQotLklSIHNwcmludGYgKDNTKQ0KKy5JUiBzbnByaW50 ZiAoM1MpDQogZnVuY3Rpb247IHNvIHRoZSBgYCUnJyBjaGFyYWN0ZXIgc2hv dWxkIGJlIGVzY2FwZWQgYXMgYGAlJScnLg0KIFRoZSBkaWFsIGNvbW1hbmQg bXVzdCBpbmNsdWRlIGEgc2luZ2xlIGBgJXMnJyB3aGVyZSB0aGUgbnVtYmVy DQogdGhhdCBpcyB0byBiZSBkaWFsZWQgaXMgdG8gYmUgc3Vic3RpdHV0ZWQu DQpkaWZmIC1ydSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4w cGwyL3BvcnQvc3lzbG9nLmMgLi9wb3J0L3N5c2xvZy5jDQotLS0gL3RtcC9v bGQvaHlsYWZheC93b3JrL2h5bGFmYXgtdjQuMHBsMi9wb3J0L3N5c2xvZy5j CVNhdCBGZWIgMTQgMTE6NTA6NDIgMTk5OA0KKysrIC4vcG9ydC9zeXNsb2cu YwlNb24gRmViIDIxIDE1OjA5OjA3IDIwMDANCkBAIC04OCw3ICs4OCw3IEBA DQogCXJlZ2lzdGVyIGludCBjbnQ7DQogCXJlZ2lzdGVyIGNoYXIgKnA7DQog CXRpbWVfdCBub3csIHRpbWUoKTsNCi0JaW50IGZkLCBzYXZlZF9lcnJubzsN CisJaW50IGZkLCBzYXZlZF9lcnJubywgbjsNCiAJY2hhciB0YnVmWzIwNDhd LCBmbXRfY3B5WzEwMjRdLCAqc3RkcCwgKmN0aW1lKCk7DQogDQogCS8qIGNo ZWNrIGZvciBpbnZhbGlkIGJpdHMgb3Igbm8gcHJpb3JpdHkgc2V0ICovDQpA QCAtMTA0LDIxICsxMDQsMjEgQEANCiANCiAJLyogYnVpbGQgdGhlIG1lc3Nh Z2UgKi8NCiAJKHZvaWQpdGltZSgmbm93KTsNCi0JKHZvaWQpc3ByaW50Zih0 YnVmLCAiPCVkPiUuMTVzICIsIHByaSwgY3RpbWUoJm5vdykgKyA0KTsNCi0J Zm9yIChwID0gdGJ1ZjsgKnA7ICsrcCk7DQorCSh2b2lkKXNucHJpbnRmKHRi dWYsIHNpemVvZiB0YnVmLCAiPCVkPiUuMTVzICIsIHByaSwgY3RpbWUoJm5v dykgKyA0KTsNCisJZm9yIChwID0gdGJ1Ziwgbj0wOyAqcDsgKytwLCBuKysp Ow0KIAlpZiAoTG9nU3RhdCAmIExPR19QRVJST1IpDQogCQlzdGRwID0gcDsN CiAJaWYgKExvZ1RhZykgew0KIAkJKHZvaWQpc3RyY3B5KHAsIExvZ1RhZyk7 DQotCQlmb3IgKDsgKnA7ICsrcCk7DQorCQlmb3IgKDsgKnA7ICsrcCwgbisr KTsNCiAJfQ0KIAlpZiAoTG9nU3RhdCAmIExPR19QSUQpIHsNCi0JCSh2b2lk KXNwcmludGYocCwgIlslZF0iLCBnZXRwaWQoKSk7DQotCQlmb3IgKDsgKnA7 ICsrcCk7DQorCQkodm9pZClzbnByaW50ZihwLCBzaXplb2YgdGJ1ZiAtIG4s ICJbJWRdIiwgZ2V0cGlkKCkpOw0KKwkJZm9yICg7ICpwOyArK3AsIG4rKyk7 DQogCX0NCiAJaWYgKExvZ1RhZykgew0KLQkJKnArKyA9ICc6JzsNCi0JCSpw KysgPSAnICc7DQorCQkqcCsrID0gJzonOyBuKys7DQorCQkqcCsrID0gJyAn OyBuKys7DQogCX0NCiANCiAJLyogc3Vic3RpdHV0ZSBlcnJvciBtZXNzYWdl IGZvciAlbSAqLw0KQEAgLTEzNyw3ICsxMzcsNyBAQA0KIAkJKnQxID0gJ1ww JzsNCiAJfQ0KIA0KLQkodm9pZCl2c3ByaW50ZihwLCBmbXRfY3B5LCBhcCk7 DQorCSh2b2lkKXZzbnByaW50ZihwLCBzaXplb2YgdGJ1ZiAtIG4sIGZtdF9j cHksIGFwKTsNCiANCiAJY250ID0gc3RybGVuKHRidWYpOw0KIA0KQEAgLTE3 MCw3ICsxNzAsNyBAQA0KIAkgKiBpcyB0aGUgb25lIGZyb20gdGhlIHN5c2xv Z2QgZmFpbHVyZS4NCiAJICovDQogCWlmICgoZmQgPSBvcGVuKF9QQVRIX0NP TlNPTEUsIE9fV1JPTkxZLCAwKSkgPj0gMCkgew0KLQkJKHZvaWQpc3RyY2F0 KHRidWYsICJcclxuIik7DQorCQkodm9pZClzdHJsY2F0KHRidWYsICJcclxu Iiwgc2l6ZW9mIHRidWYpOw0KIAkJY250ICs9IDI7DQogCQlwID0gaW5kZXgo dGJ1ZiwgJz4nKSArIDE7DQogCQkodm9pZCl3cml0ZShmZCwgcCwgY250IC0g KHAgLSB0YnVmKSk7DQpkaWZmIC1ydSAvdG1wL29sZC9oeWxhZmF4L3dvcmsv aHlsYWZheC12NC4wcGwyL3BvcnQvdnN5c2xvZy5jIC4vcG9ydC92c3lzbG9n LmMNCi0tLSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4wcGwy L3BvcnQvdnN5c2xvZy5jCVNhdCBGZWIgMTQgMTE6NTA6NDIgMTk5OA0KKysr IC4vcG9ydC92c3lzbG9nLmMJU3VuIEZlYiAyMCAyMjoxOToyOCAyMDAwDQpA QCAtNDksNiArNDksNiBAQA0KIAkJKmNwKysgPSBjOw0KIAkgICAgKmNwID0g J1wwJzsNCiAJfQ0KLQkodm9pZCkgdnNwcmludGYodGJ1ZiwgZm10X2NweSwg YXApOw0KKwkodm9pZCkgdnNucHJpbnRmKHRidWYsIHNpemVvZiB0YnVmLCBm bXRfY3B5LCBhcCk7DQogCSh2b2lkKSBzeXNsb2cocHJpLCAiJXMiLCB0YnVm KTsNCiB9DQpkaWZmIC1ydSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZh eC12NC4wcGwyL3JlZ2V4L2VuZ2luZS5jIC4vcmVnZXgvZW5naW5lLmMNCi0t LSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4wcGwyL3JlZ2V4 L2VuZ2luZS5jCVNhdCBGZWIgMTQgMTE6NDg6MTkgMTk5OA0KKysrIC4vcmVn ZXgvZW5naW5lLmMJU3VuIEZlYiAyMCAyMjoxOToyOCAyMDAwDQpAQCAtMTA2 NSw5ICsxMDY1LDkgQEANCiAJc3RhdGljIGNoYXIgcGJ1ZlsxMF07DQogDQog CWlmIChpc3ByaW50KGNoKSB8fCBjaCA9PSAnICcpDQotCQlzcHJpbnRmKHBi dWYsICIlYyIsIGNoKTsNCisJCXNucHJpbnRmKHBidWYsIHNpemVvZiBwYnVm LCAiJWMiLCBjaCk7DQogCWVsc2UNCi0JCXNwcmludGYocGJ1ZiwgIlxcJW8i LCBjaCk7DQorCQlzbnByaW50ZihwYnVmLCBzaXplb2YgcGJ1ZiwgIlxcJW8i LCBjaCk7DQogCXJldHVybihwYnVmKTsNCiB9DQogI2VuZGlmDQpkaWZmIC1y dSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4wcGwyL3JlZ2V4 L3JlZ2Vycm9yLmMgLi9yZWdleC9yZWdlcnJvci5jDQotLS0gL3RtcC9vbGQv aHlsYWZheC93b3JrL2h5bGFmYXgtdjQuMHBsMi9yZWdleC9yZWdlcnJvci5j CVNhdCBGZWIgMTQgMTE6NDg6MjEgMTk5OA0KKysrIC4vcmVnZXgvcmVnZXJy b3IuYwlNb24gRmViIDIxIDE1OjAzOjMxIDIwMDANCkBAIC01Nyw3ICs1Nyw3 IEBADQogI2VuZGlmDQogDQogLyogPT09IHJlZ2Vycm9yLmMgPT09ICovDQot c3RhdGljIGNoYXIgKnJlZ2F0b2koY29uc3QgcmVnZXhfdCAqcHJlZywgY2hh ciAqbG9jYWxidWYpOw0KK3N0YXRpYyBjaGFyICpyZWdhdG9pKGNvbnN0IHJl Z2V4X3QgKnByZWcsIGNoYXIgKmxvY2FsYnVmLCBpbnQgbWF4bik7DQogDQog I2lmZGVmIF9fY3BsdXNwbHVzDQogfQ0KQEAgLTEyNiw3ICsxMjYsNyBAQA0K IAljaGFyIGNvbnZidWZbNTBdOw0KIA0KIAlpZiAoZXJyY29kZSA9PSBSRUdf QVRPSSkNCi0JCXMgPSByZWdhdG9pKHByZWcsIGNvbnZidWYpOw0KKwkJcyA9 IHJlZ2F0b2kocHJlZywgY29udmJ1ZiwgNTApOw0KIAllbHNlIHsNCiAJCWZv ciAociA9IHJlcnJzOyByLT5jb2RlICE9IDA7IHIrKykNCiAJCQlpZiAoci0+ Y29kZSA9PSB0YXJnZXQpDQpAQCAtMTM0LDkgKzEzNCw5IEBADQogCQ0KIAkJ aWYgKGVycmNvZGUmUkVHX0lUT0EpIHsNCiAJCQlpZiAoci0+Y29kZSAhPSAw KQ0KLQkJCQkodm9pZCkgc3RyY3B5KGNvbnZidWYsIHItPm5hbWUpOw0KKwkJ CQkodm9pZCkgc3RybGNweShjb252YnVmLCByLT5uYW1lLCBzaXplb2YgY29u dmJ1Zik7DQogCQkJZWxzZQ0KLQkJCQlzcHJpbnRmKGNvbnZidWYsICJSRUdf MHgleCIsIHRhcmdldCk7DQorCQkJCXNucHJpbnRmKGNvbnZidWYsIHNpemVv ZiBjb252YnVmLCAiUkVHXzB4JXgiLCB0YXJnZXQpOw0KIAkJCWFzc2VydChz dHJsZW4oY29udmJ1ZikgPCBzaXplb2YoY29udmJ1ZikpOw0KIAkJCXMgPSBj b252YnVmOw0KIAkJfSBlbHNlDQpAQCAtMTYxLDkgKzE2MSwxMCBAQA0KICA9 PSBzdGF0aWMgY2hhciAqcmVnYXRvaShjb25zdCByZWdleF90ICpwcmVnLCBj aGFyICpsb2NhbGJ1Zik7DQogICovDQogc3RhdGljIGNoYXIgKg0KLXJlZ2F0 b2kocHJlZywgbG9jYWxidWYpDQorcmVnYXRvaShwcmVnLCBsb2NhbGJ1Ziwg bWF4bikNCiBjb25zdCByZWdleF90ICpwcmVnOw0KIGNoYXIgKmxvY2FsYnVm Ow0KK2ludCBtYXhuOw0KIHsNCiAJcmVnaXN0ZXIgc3RydWN0IHJlcnIgKnI7 DQogDQpAQCAtMTczLDYgKzE3NCw2IEBADQogCWlmIChyLT5jb2RlID09IDAp DQogCQlyZXR1cm4oIjAiKTsNCiANCi0Jc3ByaW50Zihsb2NhbGJ1ZiwgIiVk Iiwgci0+Y29kZSk7DQorCXNucHJpbnRmKGxvY2FsYnVmLCBtYXhuLCAiJWQi LCByLT5jb2RlKTsNCiAJcmV0dXJuKGxvY2FsYnVmKTsNCiB9DQpkaWZmIC1y dSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4wcGwyL3NnaTJm YXgvaW1ndG9mYXguYyAuL3NnaTJmYXgvaW1ndG9mYXguYw0KLS0tIC90bXAv b2xkL2h5bGFmYXgvd29yay9oeWxhZmF4LXY0LjBwbDIvc2dpMmZheC9pbWd0 b2ZheC5jCVNhdCBGZWIgMTQgMTE6NTA6MjIgMTk5OA0KKysrIC4vc2dpMmZh eC9pbWd0b2ZheC5jCVN1biBGZWIgMjAgMjI6MTk6MjggMjAwMA0KQEAgLTIx NCw3ICsyMTQsNyBAQA0KICAgICBUSUZGU2V0RmllbGQodGlmLCBUSUZGVEFH X1BBR0VOVU1CRVIsIHBuLCBucGFnZXMpOw0KICAgICBUSUZGU2V0RmllbGQo dGlmLCBUSUZGVEFHX0NMRUFORkFYREFUQSwgQ0xFQU5GQVhEQVRBX0NMRUFO KTsNCiAgICAgeyBjaGFyIGJ1ZlsxMDI0XTsNCi0gICAgICBzcHJpbnRmKGJ1 ZiwgIkRpdGhlcmVyZWQgQiZXIHZlcnNpb24gb2YgJXMiLCBpbnB1dCk7DQor ICAgICAgc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiRGl0aGVyZXJlZCBC JlcgdmVyc2lvbiBvZiAlcyIsIGlucHV0KTsNCiAgICAgICBUSUZGU2V0Rmll bGQodGlmLCBUSUZGVEFHX0lNQUdFREVTQ1JJUFRJT04sIGJ1Zik7DQogICAg IH0NCiAgICAgVElGRlNldEZpZWxkKHRpZiwgVElGRlRBR19TT0ZUV0FSRSwg InNnaTJmYXgiKTsNCmRpZmYgLXJ1IC90bXAvb2xkL2h5bGFmYXgvd29yay9o eWxhZmF4LXY0LjBwbDIvdXRpbC9DbGFzczJQYXJhbXMuYysrIC4vdXRpbC9D bGFzczJQYXJhbXMuYysrDQotLS0gL3RtcC9vbGQvaHlsYWZheC93b3JrL2h5 bGFmYXgtdjQuMHBsMi91dGlsL0NsYXNzMlBhcmFtcy5jKysJU2F0IEZlYiAx NCAxMTo0NzoxMiAxOTk4DQorKysgLi91dGlsL0NsYXNzMlBhcmFtcy5jKysJ TW9uIEZlYiAyMSAxNTowNzoxMiAyMDAwDQpAQCAtNTksMTQgKzU5LDE1IEBA DQogfQ0KIA0KIHN0YXRpYyBjaGFyKg0KLWFkZFBhcmFtKGNoYXIqIGNwLCB1 X2ludCB2KQ0KK2FkZFBhcmFtKGNoYXIqIGNwLCB1X2ludCB2LCBpbnQgKm1h eG4pDQogew0KICAgICBpZiAodiAhPSAodV9pbnQpLTEpIHsNCi0Jc3ByaW50 ZihjcCwgIiwldSIsIHYpOw0KLQl3aGlsZSAoKmNwICE9ICdcMCcpIGNwKys7 DQorCXNucHJpbnRmKGNwLCAqbWF4biwgIiwldSIsIHYpOw0KKwl3aGlsZSAo KmNwICE9ICdcMCcpIHsgY3ArKzsgKCptYXhuKSsrOyB9DQogICAgIH0gZWxz ZSB7DQogCSpjcCsrID0gJywnOw0KIAkqY3AgPSAnXDAnOw0KKwkoKm1heG4p Kys7DQogICAgIH0NCiAgICAgcmV0dXJuIChjcCk7DQogfQ0KQEAgLTc2LDE4 ICs3NywxOSBAQA0KIHsNCiAgICAgY2hhciBidWZbMTAyNF07DQogICAgIGNo YXIqIGNwID0gYnVmOw0KKwlpbnQgbiA9IHNpemVvZiBidWY7DQogDQogICAg IGlmICh2ciAhPSAodV9pbnQpIC0xKSB7DQotCXNwcmludGYoY3AsICIldSIs IHZyKTsNCi0Jd2hpbGUgKCpjcCAhPSAnXDAnKSBjcCsrOw0KKwlzbnByaW50 ZihjcCwgbiwgIiV1IiwgdnIpOw0KKwl3aGlsZSAoKmNwICE9ICdcMCcpIHsg Y3ArKzsgbi0tOyB9Ow0KICAgICB9DQotICAgIGNwID0gYWRkUGFyYW0oY3As IGJyKTsNCi0gICAgY3AgPSBhZGRQYXJhbShjcCwgd2QpOw0KLSAgICBjcCA9 IGFkZFBhcmFtKGNwLCBsbik7DQotICAgIGNwID0gYWRkUGFyYW0oY3AsIGRm KTsNCi0gICAgY3AgPSBhZGRQYXJhbShjcCwgZWMpOw0KLSAgICBjcCA9IGFk ZFBhcmFtKGNwLCBiZik7DQotICAgIGNwID0gYWRkUGFyYW0oY3AsIHN0KTsN CisgICAgY3AgPSBhZGRQYXJhbShjcCwgYnIsICZuKTsNCisgICAgY3AgPSBh ZGRQYXJhbShjcCwgd2QsICZuKTsNCisgICAgY3AgPSBhZGRQYXJhbShjcCwg bG4sICZuKTsNCisgICAgY3AgPSBhZGRQYXJhbShjcCwgZGYsICZuKTsNCisg ICAgY3AgPSBhZGRQYXJhbShjcCwgZWMsICZuKTsNCisgICAgY3AgPSBhZGRQ YXJhbShjcCwgYmYsICZuKTsNCisgICAgY3AgPSBhZGRQYXJhbShjcCwgc3Qs ICZuKTsNCiAgICAgcmV0dXJuIGZ4U3RyKGJ1Zik7DQogfQ0KIA0KZGlmZiAt cnUgL3RtcC9vbGQvaHlsYWZheC93b3JrL2h5bGFmYXgtdjQuMHBsMi91dGls L0ZheENsaWVudC5jKysgLi91dGlsL0ZheENsaWVudC5jKysNCi0tLSAvdG1w L29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4wcGwyL3V0aWwvRmF4Q2xp ZW50LmMrKwlTYXQgRmViIDE0IDExOjQ3OjE2IDE5OTgNCisrKyAuL3V0aWwv RmF4Q2xpZW50LmMrKwlTdW4gRmViIDIwIDIyOjE5OjI4IDIwMDANCkBAIC02 MjIsNyArNjIyLDcgQEANCiAJICAgIHRyYWNlU2VydmVyKCItPiBBRE1JTiBY WFhYIik7DQogCWVsc2Ugew0KIAkgICAgY2hhciBidWZbMTI4XTsNCi0JICAg IHNwcmludGYoYnVmLCAiLT4gJXMiLCBmbXQpOw0KKwkgICAgc25wcmludGYo YnVmLCBzaXplb2YgYnVmLCAiLT4gJXMiLCBmbXQpOw0KIAkgICAgdnRyYWNl U2VydmVyKGJ1ZiwgYXApOw0KIAl9DQogICAgIH0NCmRpZmYgLXJ1IC90bXAv b2xkL2h5bGFmYXgvd29yay9oeWxhZmF4LXY0LjBwbDIvdXRpbC9QYWdlU2l6 ZS5jKysgLi91dGlsL1BhZ2VTaXplLmMrKw0KLS0tIC90bXAvb2xkL2h5bGFm YXgvd29yay9oeWxhZmF4LXY0LjBwbDIvdXRpbC9QYWdlU2l6ZS5jKysJU2F0 IEZlYiAxNCAxMTo0NzoyMSAxOTk4DQorKysgLi91dGlsL1BhZ2VTaXplLmMr KwlTdW4gRmViIDIwIDIyOjE5OjI4IDIwMDANCkBAIC03Miw3ICs3Miw3IEBA DQogUGFnZVNpemVJbmZvOjpyZWFkUGFnZUluZm9GaWxlKCkNCiB7DQogICAg IGNoYXIgZmlsZVsxMDI0XTsNCi0gICAgc3ByaW50ZihmaWxlLCAiJXMvJXMi LCBGQVhfTElCREFUQSwgRkFYX1BBR0VTSVpFUyk7DQorICAgIHNucHJpbnRm KGZpbGUsIHNpemVvZiBmaWxlLCAiJXMvJXMiLCBGQVhfTElCREFUQSwgRkFY X1BBR0VTSVpFUyk7DQogICAgIFBhZ2VJbmZvQXJyYXkqIGluZm8gPSBuZXcg UGFnZUluZm9BcnJheTsNCiAgICAgRklMRSogZnAgPSBmb3BlbihmaWxlLCAi ciIpOw0KICAgICB1X2ludCBsaW5lbm8gPSAwOw0KZGlmZiAtcnUgL3RtcC9v bGQvaHlsYWZheC93b3JrL2h5bGFmYXgtdjQuMHBsMi91dGlsL1NOUFBDbGll bnQuYysrIC4vdXRpbC9TTlBQQ2xpZW50LmMrKw0KLS0tIC90bXAvb2xkL2h5 bGFmYXgvd29yay9oeWxhZmF4LXY0LjBwbDIvdXRpbC9TTlBQQ2xpZW50LmMr KwlTYXQgRmViIDE0IDExOjQ3OjI1IDE5OTgNCisrKyAuL3V0aWwvU05QUENs aWVudC5jKysJU3VuIEZlYiAyMCAyMjoxOToyOCAyMDAwDQpAQCAtNjM4LDcg KzYzOCw3IEBADQogCSAgICB0cmFjZVNlcnZlcigiLT4gTE9HSSBYWFhYIik7 DQogCWVsc2Ugew0KIAkgICAgY2hhciBidWZbMTI4XTsNCi0JICAgIHNwcmlu dGYoYnVmLCAiLT4gJXMiLCBmbXQpOw0KKwkgICAgc25wcmludGYoYnVmLCBz aXplb2YgYnVmLCAiLT4gJXMiLCBmbXQpOw0KIAkgICAgdnRyYWNlU2VydmVy KGJ1ZiwgYXApOw0KIAl9DQogICAgIH0NCmRpZmYgLXJ1IC90bXAvb2xkL2h5 bGFmYXgvd29yay9oeWxhZmF4LXY0LjBwbDIvdXRpbC9TdGFja0J1ZmZlci5j KysgLi91dGlsL1N0YWNrQnVmZmVyLmMrKw0KLS0tIC90bXAvb2xkL2h5bGFm YXgvd29yay9oeWxhZmF4LXY0LjBwbDIvdXRpbC9TdGFja0J1ZmZlci5jKysJ U2F0IEZlYiAxNCAxMTo0NzoyNiAxOTk4DQorKysgLi91dGlsL1N0YWNrQnVm ZmVyLmMrKwlTdW4gRmViIDIwIDIyOjE5OjI4IDIwMDANCkBAIC0xMDUsNyAr MTA1LDcgQEANCiBmeFN0YWNrQnVmZmVyOjp2cHV0KGNvbnN0IGNoYXIqIGZt dCwgdmFfbGlzdCBhcCkNCiB7DQogICAgIGNoYXIgYnVmWzgqMTAyNF07DQot ICAgIHZzcHJpbnRmKGJ1ZiwgZm10LCBhcCk7DQorICAgIHZzbnByaW50Zihi dWYsIHNpemVvZiBidWYsIGZtdCwgYXApOw0KICAgICBwdXQoYnVmKTsNCiB9 DQogDQpkaWZmIC1ydSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12 NC4wcGwyL3V0aWwvU3RyLmMrKyAuL3V0aWwvU3RyLmMrKw0KLS0tIC90bXAv b2xkL2h5bGFmYXgvd29yay9oeWxhZmF4LXY0LjBwbDIvdXRpbC9TdHIuYysr CVNhdCBGZWIgMTQgMTE6NDc6MjcgMTk5OA0KKysrIC4vdXRpbC9TdHIuYysr CVN1biBGZWIgMjAgMjI6MTk6MjggMjAwMA0KQEAgLTkxLDcgKzkxLDcgQEAN CiB7DQogICAgIGNoYXIgYnVmZmVyW05VTUJVRlNJWkVdOw0KICAgICBpZiAo IWZvcm1hdCkgZm9ybWF0ID0gIiVkIjsNCi0gICAgc3ByaW50ZihidWZmZXIs Zm9ybWF0LGEpOw0KKyAgICBzbnByaW50ZihidWZmZXIsIE5VTUJVRlNJWkUs IGZvcm1hdCxhKTsNCiAgICAgc2xlbmd0aCA9IHN0cmxlbihidWZmZXIpICsg MTsNCiAgICAgZGF0YSA9IChjaGFyKikgbWFsbG9jKHNsZW5ndGgpOw0KICAg ICBtZW1jcHkoZGF0YSxidWZmZXIsc2xlbmd0aCk7DQpAQCAtMTAxLDcgKzEw MSw3IEBADQogew0KICAgICBjaGFyIGJ1ZmZlcltOVU1CVUZTSVpFXTsNCiAg ICAgaWYgKCFmb3JtYXQpIGZvcm1hdCA9ICIlbGQiOw0KLSAgICBzcHJpbnRm KGJ1ZmZlcixmb3JtYXQsYSk7DQorICAgIHNucHJpbnRmKGJ1ZmZlciwgTlVN QlVGU0laRSwgZm9ybWF0LGEpOw0KICAgICBzbGVuZ3RoID0gc3RybGVuKGJ1 ZmZlcikgKyAxOw0KICAgICBkYXRhID0gKGNoYXIqKSBtYWxsb2Moc2xlbmd0 aCk7DQogICAgIG1lbWNweShkYXRhLGJ1ZmZlcixzbGVuZ3RoKTsNCkBAIC0x MTEsNyArMTExLDcgQEANCiB7DQogICAgIGNoYXIgYnVmZmVyW05VTUJVRlNJ WkVdOw0KICAgICBpZiAoIWZvcm1hdCkgZm9ybWF0ID0gIiVnIjsNCi0gICAg c3ByaW50ZihidWZmZXIsZm9ybWF0LGEpOw0KKyAgICBzbnByaW50ZihidWZm ZXIsIE5VTUJVRlNJWkUsIGZvcm1hdCxhKTsNCiAgICAgc2xlbmd0aCA9IHN0 cmxlbihidWZmZXIpICsgMTsNCiAgICAgZnhBc3NlcnQoc2xlbmd0aD4xLCAi U3RyOjpTdHIoZmxvYXQpOiBib2d1cyBjb252ZXJzaW9uIik7DQogICAgIGRh dGEgPSAoY2hhciopIG1hbGxvYyhzbGVuZ3RoKTsNCkBAIC0xMjIsNyArMTIy LDcgQEANCiB7DQogICAgIGNoYXIgYnVmZmVyW05VTUJVRlNJWkVdOw0KICAg ICBpZiAoIWZvcm1hdCkgZm9ybWF0ID0gIiVsZyI7DQotICAgIHNwcmludGYo YnVmZmVyLGZvcm1hdCxhKTsNCisgICAgc25wcmludGYoYnVmZmVyLCBOVU1C VUZTSVpFLCBmb3JtYXQsYSk7DQogICAgIHNsZW5ndGggPSBzdHJsZW4oYnVm ZmVyKSArIDE7DQogICAgIGZ4QXNzZXJ0KHNsZW5ndGg+MSwgIlN0cjo6U3Ry KGRvdWJsZSk6IGJvZ3VzIGNvbnZlcnNpb24iKTsNCiAgICAgZGF0YSA9IChj aGFyKikgbWFsbG9jKHNsZW5ndGgpOyAvLyBYWFggYXNzdW1lIHNsZW5ndGg+ MQ0KQEAgLTE0MSw3ICsxNDEsNyBAQA0KICAgICBjaGFyIGJ1Zls0MDk2XTsN CiAgICAgdmFfbGlzdCBhcDsNCiAgICAgdmFfc3RhcnQoYXAsIGZtdCk7DQot ICAgIHZzcHJpbnRmKGJ1ZiwgZm10LCBhcCk7DQorICAgIHZzbnByaW50Zihi dWYsIHNpemVvZiBidWYsIGZtdCwgYXApOw0KICAgICB2YV9lbmQoYXApOw0K ICAgICByZXR1cm4gZnhTdHIoYnVmKTsNCiB9DQpAQCAtMTUwLDcgKzE1MCw3 IEBADQogZnhTdHI6OnZmb3JtYXQoY29uc3QgY2hhciogZm10LCB2YV9saXN0 IGFwKQ0KIHsNCiAgICAgY2hhciBidWZbNDA5Nl07DQotICAgIHZzcHJpbnRm KGJ1ZiwgZm10LCBhcCk7DQorICAgIHZzbnByaW50ZihidWYsIHNpemVvZiBi dWYsIGZtdCwgYXApOw0KICAgICByZXR1cm4gZnhTdHIoYnVmKTsNCiB9DQog DQpkaWZmIC1ydSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4w cGwyL3V0aWwvU3RyLmggLi91dGlsL1N0ci5oDQotLS0gL3RtcC9vbGQvaHls YWZheC93b3JrL2h5bGFmYXgtdjQuMHBsMi91dGlsL1N0ci5oCVNhdCBGZWIg MTQgMTE6NDc6NTAgMTk5OA0KKysrIC4vdXRpbC9TdHIuaAlTdW4gRmViIDIw IDIyOjE5OjI4IDIwMDANCkBAIC05Myw4ICs5Myw4IEBADQogICAgIGZ4U3Ry KGNvbnN0IGZ4VGVtcFN0ciYpOw0KICAgICB+ZnhTdHIoKTsNCiANCi0gICAg c3RhdGljIGZ4U3RyIGZvcm1hdChjb25zdCBjaGFyKiBmbXQgLi4uKTsJLy8g c3ByaW50ZiBzb3J0IG9mDQotICAgIHN0YXRpYyBmeFN0ciB2Zm9ybWF0KGNv bnN0IGNoYXIqIGZtdCwgdmFfbGlzdCBhcCk7CS8vIHZzcHJpbnRmIHNvcnQg b2YNCisgICAgc3RhdGljIGZ4U3RyIGZvcm1hdChjb25zdCBjaGFyKiBmbXQg Li4uKTsJLy8gc25wcmludGYgc29ydCBvZg0KKyAgICBzdGF0aWMgZnhTdHIg dmZvcm1hdChjb25zdCBjaGFyKiBmbXQsIHZhX2xpc3QgYXApOwkvLyB2c25w cmludGYgc29ydCBvZg0KICAgICBzdGF0aWMgZnhTdHIgbnVsbDsJCQkJLy8g bnVsbCBzdHJpbmcgZm9yIGdlbmVyYWwgdXNlDQogICAgIC8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQog ICAgIHVfbG9uZyBoYXNoKCkgY29uc3Q7DQpkaWZmIC1ydSAvdG1wL29sZC9o eWxhZmF4L3dvcmsvaHlsYWZheC12NC4wcGwyL3V0aWwvZmF4Y29uZmlnLmMg Li91dGlsL2ZheGNvbmZpZy5jDQotLS0gL3RtcC9vbGQvaHlsYWZheC93b3Jr L2h5bGFmYXgtdjQuMHBsMi91dGlsL2ZheGNvbmZpZy5jCU1vbiBGZWIgMjEg MTU6MTk6NDQgMjAwMA0KKysrIC4vdXRpbC9mYXhjb25maWcuYwlTdW4gRmVi IDIwIDIyOjE5OjI4IDIwMDANCkBAIC04Myw3ICs4Myw3IEBADQogCWlmIChk ZXZpZFswXSA9PSBGQVhfRklGT1swXSkNCiAJICAgIHN0cmNweShmaWZvbmFt ZSwgZGV2aWQpOw0KIAllbHNlDQotCSAgICBzcHJpbnRmKGZpZm9uYW1lLCAi JXMuJS4qcyIsIEZBWF9GSUZPLA0KKwkgICAgc25wcmludGYoZmlmb25hbWUs IHNpemVvZiBmaWZvbmFtZSwgIiVzLiUuKnMiLCBGQVhfRklGTywNCiAJCXNp emVvZiAoZmlmb25hbWUpIC0gc2l6ZW9mIChGQVhfRklGTyksIGRldmlkKTsN CiAgICAgfSBlbHNlDQogCXN0cmNweShmaWZvbmFtZSwgRkFYX0ZJRk8pOw0K QEAgLTExMSwxMCArMTExLDEwIEBADQogCQlxdW90ZSA9IDE7DQogCSAgICBj bWQgPSBtYWxsb2Moc3RybGVuKGFyZ3Zbb3B0aW5kXSkrc3RybGVuKGFyZ3Zb b3B0aW5kKzFdKSsxMCk7DQogCSAgICBpZiAocXVvdGUpDQotCQlzcHJpbnRm KGNtZCwgIkMlcyVzOlwiJXNcIiIsDQorCQlzbnByaW50ZihjbWQsIHN0cmxl bihhcmd2W29wdGluZF0pK3N0cmxlbihhcmd2W29wdGluZCsxXSkrMTAsICJD JXMlczpcIiVzXCIiLA0KIAkJICAgIGlzUXVldWVyID8gIjoiIDogIiIsIGFy Z3Zbb3B0aW5kXSwgYXJndltvcHRpbmQrMV0pOw0KIAkgICAgZWxzZQ0KLQkJ c3ByaW50ZihjbWQsICJDJXMlczolcyIsDQorCQlzbnByaW50ZihjbWQsIHN0 cmxlbihhcmd2W29wdGluZF0pK3N0cmxlbihhcmd2W29wdGluZCsxXSkrMTAs IkMlcyVzOiVzIiwNCiAJCSAgICBpc1F1ZXVlciA/ICI6IiA6ICIiLCBhcmd2 W29wdGluZF0sIGFyZ3Zbb3B0aW5kKzFdKTsNCiAJICAgIGlmICh3cml0ZShm aWZvLCBjbWQsIHN0cmxlbihjbWQpKSAhPSBzdHJsZW4oY21kKSkNCiAJCWZh dGFsKCIlczogRklGTyB3cml0ZSBmYWlsZWQgZm9yIGNvbW1hbmQgKCVzKSIs DQpkaWZmIC1ydSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4w cGwyL3V0aWwvZmF4bW9kZW0uYyAuL3V0aWwvZmF4bW9kZW0uYw0KLS0tIC90 bXAvb2xkL2h5bGFmYXgvd29yay9oeWxhZmF4LXY0LjBwbDIvdXRpbC9mYXht b2RlbS5jCU1vbiBGZWIgMjEgMTU6MTk6NDQgMjAwMA0KKysrIC4vdXRpbC9m YXhtb2RlbS5jCVN1biBGZWIgMjAgMjI6MTk6MjggMjAwMA0KQEAgLTI0Myw5 ICsyNDMsOSBAQA0KICAgICBpZiAob3B0aW5kICE9IGFyZ2MtMSkNCiAJZmF0 YWwoIk1pc3NpbmcgbW9kZW0gZGV2aWNlLlxudXNhZ2U6ICVzICVzIG1vZGVt IiwgYXJndlswXSwgdXNhZ2UpOw0KICAgICBpZiAoc3RybmNtcChhcmd2W29w dGluZF0sIF9QQVRIX0RFViwgc3RybGVuKF9QQVRIX0RFVikpID09IDApDQot CXN0cmNweShkZXZuYW1lLCBhcmd2W29wdGluZF0rc3RybGVuKF9QQVRIX0RF VikpOw0KKwlzdHJsY3B5KGRldm5hbWUsIGFyZ3Zbb3B0aW5kXStzdHJsZW4o X1BBVEhfREVWKSwgc2l6ZW9mIGRldm5hbWUpOw0KICAgICBlbHNlDQotCXN0 cmNweShkZXZuYW1lLCBhcmd2W29wdGluZF0pOw0KKwlzdHJsY3B5KGRldm5h bWUsIGFyZ3Zbb3B0aW5kXSwgc2l6ZW9mIGRldm5hbWUpOw0KICAgICBmb3Ig KGNwID0gZGV2bmFtZTsgY3AgPSBzdHJjaHIoY3AsICcvJyk7ICpjcCsrID0g J18nKQ0KIAk7DQogICAgIGlmIChjaGRpcihzcG9vbGRpcikgPCAwKQ0KQEAg LTI1NCw5ICsyNTQsOSBAQA0KICAgICBpZiAoZmlmbyA8IDApDQogCWZhdGFs KCIlczogb3BlbjogJXMiLCBGQVhfRklGTywgc3RyZXJyb3IoZXJybm8pKTsN CiAgICAgaWYgKHByaW9yaXR5ICE9IC0xKQ0KLQlzcHJpbnRmKGNtZCwgIisl czpSJWMlMDh4OiV4IiwgZGV2bmFtZSwgY2FucG9sbCwgY2FwcywgcHJpb3Jp dHkpOw0KKwlzbnByaW50ZihjbWQsIHNpemVvZiBjbWQsICIrJXM6UiVjJTA4 eDoleCIsIGRldm5hbWUsIGNhbnBvbGwsIGNhcHMsIHByaW9yaXR5KTsNCiAg ICAgZWxzZQ0KLQlzcHJpbnRmKGNtZCwgIislczpSJWMlMDh4IiwgZGV2bmFt ZSwgY2FucG9sbCwgY2Fwcyk7DQorCXNucHJpbnRmKGNtZCwgc2l6ZW9mIGNt ZCwgIislczpSJWMlMDh4IiwgZGV2bmFtZSwgY2FucG9sbCwgY2Fwcyk7DQog ICAgIGlmICh3cml0ZShmaWZvLCBjbWQsIHN0cmxlbihjbWQpKSAhPSBzdHJs ZW4oY21kKSkNCiAJZmF0YWwoIiVzOiBGSUZPIHdyaXRlIGZhaWxlZCBmb3Ig Y29tbWFuZCAoJXMpIiwNCiAJICAgIGFyZ3ZbMF0sIHN0cmVycm9yKGVycm5v KSk7DQpkaWZmIC1ydSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12 NC4wcGwyL3V0aWwvZmF4bXNnLmMgLi91dGlsL2ZheG1zZy5jDQotLS0gL3Rt cC9vbGQvaHlsYWZheC93b3JrL2h5bGFmYXgtdjQuMHBsMi91dGlsL2ZheG1z Zy5jCU1vbiBGZWIgMjEgMTU6MTk6NDQgMjAwMA0KKysrIC4vdXRpbC9mYXht c2cuYwlTdW4gRmViIDIwIDIyOjE5OjI4IDIwMDANCkBAIC0xMDgsMTIgKzEw OCwxMiBAQA0KIAl9DQogICAgIGlmIChvcHRpbmQgPT0gYXJnYy0xKSB7DQog CWlmIChhcmd2W29wdGluZF1bMF0gPT0gRkFYX0ZJRk9bMF0pDQotCSAgICBz dHJjcHkoZmlmb25hbWUsIGFyZ3Zbb3B0aW5kXSk7DQorCSAgICBzdHJsY3B5 KGZpZm9uYW1lLCBhcmd2W29wdGluZF0sIHNpemVvZiBmaWZvbmFtZSk7DQog CWVsc2UNCi0JICAgIHNwcmludGYoZmlmb25hbWUsICIlcy4lLipzIiwgRkFY X0ZJRk8sDQorCSAgICBzbnByaW50ZihmaWZvbmFtZSwgc2l6ZW9mIGZpZm9u YW1lLCAiJXMuJS4qcyIsIEZBWF9GSUZPLA0KIAkJc2l6ZW9mIChmaWZvbmFt ZSkgLSBzaXplb2YgKEZBWF9GSUZPKSwgYXJndltvcHRpbmRdKTsNCiAgICAg fSBlbHNlIGlmICghbW9kZW1SZXF1aXJlZCkgew0KLQlzdHJjcHkoZmlmb25h bWUsIEZBWF9GSUZPKTsNCisJc3RybGNweShmaWZvbmFtZSwgRkFYX0ZJRk8s IHNpemVvZiBmaWZvbmFtZSk7DQogICAgIH0gZWxzZQ0KIAlmYXRhbCgidXNh Z2U6ICVzICVzIiwgYXJndlswXSwgdXNhZ2UpOw0KICAgICBmb3IgKGNwID0g Zmlmb25hbWU7IGNwID0gc3RyY2hyKGNwLCAnLycpOyAqY3ArKyA9ICdfJykN CkBAIC0xMjMsNyArMTIzLDcgQEANCiAgICAgZmlmbyA9IG9wZW4oZmlmb25h bWUsIE9fV1JPTkxZfE9fTkRFTEFZKTsNCiAgICAgaWYgKGZpZm8gPCAwKQ0K IAlmYXRhbCgiJXM6IG9wZW46ICVzIiwgZmlmb25hbWUsIHN0cmVycm9yKGVy cm5vKSk7DQotICAgIHNwcmludGYoY21kLCBjbWRmbXQsIGFyZyk7DQorICAg IHNucHJpbnRmKGNtZCwgc2l6ZW9mIGNtZCwgY21kZm10LCBhcmcpOw0KICAg ICBpZiAod3JpdGUoZmlmbywgY21kLCBzdHJsZW4oY21kKSkgIT0gc3RybGVu KGNtZCkpDQogCWZhdGFsKCJGSUZPIHdyaXRlIGZhaWxlZCBmb3IgY29tbWFu ZCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsNCiAgICAgKHZvaWQpIGNsb3Nl KGZpZm8pOw0KZGlmZiAtcnUgL3RtcC9vbGQvaHlsYWZheC93b3JrL2h5bGFm YXgtdjQuMHBsMi91dGlsL2ZheHN0YXRlLmMgLi91dGlsL2ZheHN0YXRlLmMN Ci0tLSAvdG1wL29sZC9oeWxhZmF4L3dvcmsvaHlsYWZheC12NC4wcGwyL3V0 aWwvZmF4c3RhdGUuYwlNb24gRmViIDIxIDE1OjE5OjQ0IDIwMDANCisrKyAu L3V0aWwvZmF4c3RhdGUuYwlTdW4gRmViIDIwIDIyOjE5OjI4IDIwMDANCkBA IC0xMTMsNyArMTEzLDcgQEANCiAJfQ0KICAgICBpZiAob3B0aW5kICE9IGFy Z2MtMSkNCiAJZmF0YWwoIkJhZCBvcHRpb24gYCVjJzsgdXNhZ2U6ICVzICVz IG1vZGVtIiwgYywgYXJndlswXSwgdXNhZ2UpOw0KLSAgICBzdHJjcHkoZGV2 aWQsIGFyZ3Zbb3B0aW5kXSk7DQorICAgIHN0cmxjcHkoZGV2aWQsIGFyZ3Zb b3B0aW5kXSwgMjU2KTsNCiAgICAgZm9yIChjcCA9IGRldmlkOyBjcCA9IHN0 cmNocihjcCwgJy8nKTsgKmNwKysgPSAnXycpDQogCTsNCiAgICAgaWYgKGNo ZGlyKHNwb29sZGlyKSA8IDApDQpAQCAtMTI2LDE2ICsxMjYsMTYgQEANCiAJ ZmlmbyA9IG9wZW4oRkFYX0ZJRk8sIE9fV1JPTkxZfE9fTkRFTEFZKTsNCiAJ aWYgKGZpZm8gPCAwKQ0KIAkgICAgZmF0YWwoIiVzOiBvcGVuOiAlcyIsIEZB WF9GSUZPLCBzdHJlcnJvcihlcnJubykpOw0KLQlzcHJpbnRmKGNtZCwgIisl czolcyIsIGRldmlkLCBhcmcpOw0KKwlzbnByaW50ZihjbWQsIHNpemVvZiBj bWQsICIrJXM6JXMiLCBkZXZpZCwgYXJnKTsNCiAJaWYgKHdyaXRlKGZpZm8s IGNtZCwgc3RybGVuKGNtZCkpICE9IHN0cmxlbihjbWQpKQ0KIAkgICAgZmF0 YWwoIkZJRk8gd3JpdGUgZmFpbGVkIGZvciBjb21tYW5kICglcykiLCBzdHJl cnJvcihlcnJubykpOw0KICAgICB9IGVsc2Ugew0KLQlzcHJpbnRmKGZpZm9u YW1lLCAiJXMuJS4qcyIsIEZBWF9GSUZPLA0KKwlzbnByaW50ZihmaWZvbmFt ZSwgc2l6ZW9mIGZpZm9uYW1lLCAiJXMuJS4qcyIsIEZBWF9GSUZPLA0KIAkg ICAgc2l6ZW9mIChmaWZvbmFtZSkgLSBzaXplb2YgKEZBWF9GSUZPKSwgZGV2 aWQpOw0KIAlmaWZvID0gb3BlbihmaWZvbmFtZSwgT19XUk9OTFl8T19OREVM QVkpOw0KIAlpZiAoZmlmbyA8IDApIA0KIAkgICAgZmF0YWwoIiVzOiBvcGVu OiAlcyIsIGZpZm9uYW1lLCBzdHJlcnJvcihlcnJubykpOw0KLQlzcHJpbnRm KGNtZCwgIlMlcyIsIGFyZyk7DQorCXNucHJpbnRmKGNtZCwgc2l6ZW9mIGNt ZCwgIlMlcyIsIGFyZyk7DQogCWlmICh3cml0ZShmaWZvLCBjbWQsIHN0cmxl bihjbWQpKSAhPSBzdHJsZW4oY21kKSkNCiAJICAgIGZhdGFsKCJGSUZPIHdy aXRlIGZhaWxlZCBmb3IgY29tbWFuZCAoJXMpIiwgc3RyZXJyb3IoZXJybm8p KTsNCiAgICAgfQ0K --_=XFMail.1.4.4.FreeBSD:20000226110039:9639=_-- End of MIME message To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message