marc 97/07/12 13:20:36
Modified: src mod_mime_magic.c Log: General mod_mime_magic cleanup. The fixes include: - change DEBUG define to MIME_MAGIC_DEBUG to avoid namespace collisions. - change fprintf(stderr, ...) into log_printf - remove '\n's from log_printf calls - couple of possible buffer overflow cleanups - minor spelling cleanup Reviewed by: Ian Kluft, Jim Jagielski Revision Changes Path 1.3 +124 -168 apache/src/mod_mime_magic.c Index: mod_mime_magic.c =================================================================== RCS file: /export/home/cvs/apache/src/mod_mime_magic.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C3 -r1.2 -r1.3 *** mod_mime_magic.c 1997/07/08 23:11:41 1.2 --- mod_mime_magic.c 1997/07/12 20:20:35 1.3 *************** *** 53,59 **** /* * mod_mime_magic: MIME type lookup via file magic numbers * Copyright (c) 1996-1997 Cisco Systems, Inc. - * $Revision: 1.2 $ * * This software was submitted by Cisco Systems to the Apache Group in July * 1997. Future revisions and derivatives of this source code must --- 53,58 ---- *************** *** 87,93 **** * 4. This notice may not be removed or altered. * ------------------------------------------------------------------------- * ! * For complicance with Mr Darwin's terms: this has been very significantly * modified from the free "file" command. * - all-in-one file for compilation convenience when moving from one * version of Apache to the next. --- 86,92 ---- * 4. This notice may not be removed or altered. * ------------------------------------------------------------------------- * ! * For compliance with Mr Darwin's terms: this has been very significantly * modified from the free "file" command. * - all-in-one file for compilation convenience when moving from one * version of Apache to the next. *************** *** 121,127 **** #include <sys/wait.h> #include <sys/stat.h> - #include <sys/sysmacros.h> #include <time.h> #include <utime.h> #include <stdarg.h> --- 120,125 ---- *************** *** 138,144 **** */ #define MODNAME "mod_mime_magic" ! #define DEBUG 0 #ifndef MAGIC #define MAGIC "conf/magic" --- 136,142 ---- */ #define MODNAME "mod_mime_magic" ! #define MIME_MAGIC_DEBUG 0 #ifndef MAGIC #define MAGIC "conf/magic" *************** *** 250,256 **** static int getvalue(server_rec *, struct magic *, char **); static int hextoint(int); ! static char *getstr(char *, char *, int, int *); static int parse(server_rec *, pool * p, char *, int); static int match(request_rec *, unsigned char *, int); --- 248,254 ---- static int getvalue(server_rec *, struct magic *, char **); static int hextoint(int); ! static char *getstr(server_rec *, char *, char *, int, int *); static int parse(server_rec *, pool * p, char *, int); static int match(request_rec *, unsigned char *, int); *************** *** 262,268 **** static int mconvert(request_rec *, union VALUETYPE *, struct magic *); static int ! uncompress(server_rec *, int, const unsigned char *, unsigned char **, int); static long from_oct(int, char *); static int fsmagic(request_rec * r, const char *fn, struct stat * sb); --- 260,266 ---- static int mconvert(request_rec *, union VALUETYPE *, struct magic *); static int ! uncompress(request_rec *, int, const unsigned char *, unsigned char **, int); static long from_oct(int, char *); static int fsmagic(request_rec * r, const char *fn, struct stat * sb); *************** *** 342,348 **** }, { "/*", L_C ! }, /* must preced "The", "the", etc. */ { "#include", L_C }, --- 340,346 ---- }, { "/*", L_C ! }, /* must precede "The", "the", etc. */ { "#include", L_C }, *************** *** 577,585 **** palloc(r->pool, sizeof(magic_req_rec)); if (!req_dat) { ! fprintf(stderr, MODNAME ": memory allocation " ! "failure in magic_set_config()\n"); ! fflush(stderr); return NULL; } req_dat->head = req_dat->tail = (magic_rsl *) NULL; --- 575,582 ---- palloc(r->pool, sizeof(magic_req_rec)); if (!req_dat) { ! log_printf(r->server, "%s: memory allocation failure in " ! "magic_set_config()", MODNAME); return NULL; } req_dat->head = req_dat->tail = (magic_rsl *) NULL; *************** *** 598,606 **** /* make sure we have a list to put it in */ if (!req_dat) { ! fprintf(stderr, MODNAME ": request config " ! "should not be NULL\n"); ! fflush(stderr); if (!(req_dat = magic_set_config(r))) { /* failure */ return -1; --- 595,602 ---- /* make sure we have a list to put it in */ if (!req_dat) { ! log_printf(r->server, "%s: request config should not be NULL", ! MODNAME); if (!(req_dat = magic_set_config(r))) { /* failure */ return -1; *************** *** 610,617 **** /* allocate the list entry */ if (!(rsl = (magic_rsl *) palloc(r->pool, sizeof(magic_rsl)))) { log_printf(r->server, MODNAME ": " ! "memory allocation failure in magic_rsl_add()\n"); ! fflush(stderr); /* failure */ return -1; } --- 606,612 ---- /* allocate the list entry */ if (!(rsl = (magic_rsl *) palloc(r->pool, sizeof(magic_rsl)))) { log_printf(r->server, MODNAME ": " ! "memory allocation failure in magic_rsl_add()"); /* failure */ return -1; } *************** *** 646,657 **** { va_list ap; - /* make sure this is long enough since most OS's have no vsnprintf() */ char buf[MAXMIMESTRING]; /* assemble the string into the buffer */ va_start(ap, str); ! vsprintf(buf, str, ap); va_end(ap); /* add the buffer to the list */ --- 641,651 ---- { va_list ap; char buf[MAXMIMESTRING]; /* assemble the string into the buffer */ va_start(ap, str); ! ap_vsnprintf(buf, sizeof(buf), str, ap); va_end(ap); /* add the buffer to the list */ *************** *** 686,692 **** /* allocate the result string */ if (!(result = (char *) palloc(r->pool, len + 1))) { log_printf(r->server, MODNAME ": " ! "memory allocation failure in rsl_strdup()\n"); return NULL; } --- 680,686 ---- /* allocate the result string */ if (!(result = (char *) palloc(r->pool, len + 1))) { log_printf(r->server, MODNAME ": " ! "memory allocation failure in rsl_strdup()"); return NULL; } *************** *** 716,726 **** /* clean up and return */ result[res_pos] = 0; ! #if DEBUG ! fprintf(stderr, MODNAME ": rsl_strdup() %d chars: %s\n", res_pos - 1, result); - fflush(stderr); - fflush(stderr); #endif return result; } --- 710,718 ---- /* clean up and return */ result[res_pos] = 0; ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, MODNAME ": rsl_strdup() %d chars: %s", res_pos - 1, result); #endif return result; } *************** *** 793,799 **** /* should not be possible */ /* abandon malfunctioning module */ log_printf(r->server, ! "%s: bad state %d (ws)\n", MODNAME); return DECLINED; } --- 785,791 ---- /* should not be possible */ /* abandon malfunctioning module */ log_printf(r->server, ! "%s: bad state %d (ws)", MODNAME); return DECLINED; } *************** *** 838,844 **** /* should not be possible */ /* abandon malfunctioning module */ log_printf(r->server, ! "%s: bad state %d (ns)\n", MODNAME); return DECLINED; } --- 830,836 ---- /* should not be possible */ /* abandon malfunctioning module */ log_printf(r->server, ! "%s: bad state %d (ns)", MODNAME); return DECLINED; } *************** *** 868,874 **** /* detect memory allocation errors */ if (!r->content_type || (state == rsl_encoding && !r->content_encoding)) { ! return 500; } /* success! */ --- 860,866 ---- /* detect memory allocation errors */ if (!r->content_type || (state == rsl_encoding && !r->content_encoding)) { ! return HTTP_INTERNAL_SERVER_ERROR; } /* success! */ *************** *** 877,883 **** /* * magic_process - process input file r Apache API request record ! * (formerly caled "process" in file command, prefix added for clarity) Opens * the file and reads a fixed-size buffer to begin processing the contents. */ static void --- 869,875 ---- /* * magic_process - process input file r Apache API request record ! * (formerly called "process" in file command, prefix added for clarity) Opens * the file and reads a fixed-size buffer to begin processing the contents. */ static void *************** *** 900,909 **** if ((fd = open(r->filename, O_RDONLY)) < 0) { /* We can't open it, but we were able to stat it. */ /* ! * if (sb.st_mode & 0002) magic_rsl_puts(r,"writeable, "); if * (sb.st_mode & 0111) magic_rsl_puts(r,"executable, "); */ ! log_printf(r->server, "can't read `%s' (%s).\n", r->filename, strerror(errno)); return; } --- 892,901 ---- if ((fd = open(r->filename, O_RDONLY)) < 0) { /* We can't open it, but we were able to stat it. */ /* ! * if (sb.st_mode & 0002) magic_rsl_puts(r,"writable, "); if * (sb.st_mode & 0111) magic_rsl_puts(r,"executable, "); */ ! log_printf(r->server, "can't read `%s' (%s).", r->filename, strerror(errno)); return; } *************** *** 912,918 **** * try looking at the first HOWMANY bytes */ if ((nbytes = read(fd, (char *) buf, HOWMANY)) == -1) { ! log_printf(r->server, "read failed (%s).\n", strerror(errno)); /* NOTREACHED */ } --- 904,910 ---- * try looking at the first HOWMANY bytes */ if ((nbytes = read(fd, (char *) buf, HOWMANY)) == -1) { ! log_printf(r->server, "read failed (%s).", strerror(errno)); /* NOTREACHED */ } *************** *** 975,982 **** char line[BUFSIZ + 1]; int errs = 0; int lineno; ! #if DEBUG ! int rule; struct magic *m, *prevm; #endif char *fname; --- 967,974 ---- char line[BUFSIZ + 1]; int errs = 0; int lineno; ! #if MIME_MAGIC_DEBUG ! int rule = 0; struct magic *m, *prevm; #endif char *fname; *************** *** 990,1000 **** fname = server_root_relative(p, conf->magicfile); f = pfopen(p, fname, "r"); if (f == NULL) { ! (void) fprintf(stderr, "%s: can't read magic file %s\n", ! MODNAME, fname); ! fflush(stderr); ! perror(MODNAME); ! fflush(stderr); return -1; } --- 982,989 ---- fname = server_root_relative(p, conf->magicfile); f = pfopen(p, fname, "r"); if (f == NULL) { ! log_printf(s, "%s: can't read magic file %s: %s", ! MODNAME, fname, strerror(errno)); return -1; } *************** *** 1025,1031 **** if (line[ws_offset] == '#') continue; ! #if DEBUG /* if we get here, we're going to use it so count it */ rule++; #endif --- 1014,1020 ---- if (line[ws_offset] == '#') continue; ! #if MIME_MAGIC_DEBUG /* if we get here, we're going to use it so count it */ rule++; #endif *************** *** 1037,1066 **** (void) pfclose(p, f); ! #if DEBUG ! fprintf(stderr, ! "%s: apprentice conf=%x file=%s m=%s m->next=%s last=%s\n", MODNAME, conf, conf->magicfile ? conf->magicfile : "NULL", conf->magic ? "set" : "NULL", (conf->magic && conf->magic->next) ? "set" : "NULL", conf->last ? "set" : "NULL"); ! fprintf(stderr, "%s: apprentice read %d lines, %d rules, %d errors\n", MODNAME, lineno, rule, errs); - fflush(stderr); #endif ! #if DEBUG prevm = 0; ! fprintf(stderr, "%s: apprentice test\n", MODNAME); for (m = conf->magic; m; m = m->next) { if (isprint((((unsigned long) m) >> 24) & 255) && isprint((((unsigned long) m) >> 16) & 255) && isprint((((unsigned long) m) >> 8) & 255) && isprint(((unsigned long) m) & 255)) { ! fprintf(stderr, "%s: apprentice: " "POINTER CLOBBERED! " ! "m=\"%c%c%c%c\" line=%d\n", MODNAME, (((unsigned long) m) >> 24) & 255, (((unsigned long) m) >> 16) & 255, (((unsigned long) m) >> 8) & 255, --- 1026,1054 ---- (void) pfclose(p, f); ! #if MIME_MAGIC_DEBUG ! log_printf(s, ! "%s: apprentice conf=%x file=%s m=%s m->next=%s last=%s", MODNAME, conf, conf->magicfile ? conf->magicfile : "NULL", conf->magic ? "set" : "NULL", (conf->magic && conf->magic->next) ? "set" : "NULL", conf->last ? "set" : "NULL"); ! log_printf(s, "%s: apprentice read %d lines, %d rules, %d errors", MODNAME, lineno, rule, errs); #endif ! #if MIME_MAGIC_DEBUG prevm = 0; ! log_printf(s, "%s: apprentice test", MODNAME); for (m = conf->magic; m; m = m->next) { if (isprint((((unsigned long) m) >> 24) & 255) && isprint((((unsigned long) m) >> 16) & 255) && isprint((((unsigned long) m) >> 8) & 255) && isprint(((unsigned long) m) & 255)) { ! log_printf(s, "%s: apprentice: " "POINTER CLOBBERED! " ! "m=\"%c%c%c%c\" line=%d", MODNAME, (((unsigned long) m) >> 24) & 255, (((unsigned long) m) >> 16) & 255, (((unsigned long) m) >> 8) & 255, *************** *** 1070,1076 **** } prevm = m; } - fflush(stderr); #endif return (errs ? -1 : 0); --- 1058,1063 ---- *************** *** 1108,1117 **** case STRING: break; default: ! fprintf(stderr, "%s: can't happen: m->type=%d\n", MODNAME, m->type); - fflush(stderr); - fflush(stderr); return -1; } return v; --- 1095,1102 ---- case STRING: break; default: ! log_printf(s, "%s: can't happen: m->type=%d", MODNAME, m->type); return -1; } return v; *************** *** 1131,1138 **** /* allocate magic structure entry */ if ((m = (struct magic *) pcalloc(p, sizeof(struct magic))) == NULL) { ! (void) fprintf(stderr, "%s: Out of memory.\n", MODNAME); ! fflush(stderr); return -1; } --- 1116,1122 ---- /* allocate magic structure entry */ if ((m = (struct magic *) pcalloc(p, sizeof(struct magic))) == NULL) { ! (void) log_printf(serv, "%s: Out of memory.", MODNAME); return -1; } *************** *** 1164,1171 **** /* get offset, then skip over it */ m->offset = (int) strtol(l, &t, 0); if (l == t) { ! fprintf(stderr, "%s: offset %s invalid", MODNAME, l); ! fflush(stderr); } l = t; --- 1148,1154 ---- /* get offset, then skip over it */ m->offset = (int) strtol(l, &t, 0); if (l == t) { ! log_printf(serv, "%s: offset %s invalid", MODNAME, l); } l = t; *************** *** 1187,1194 **** m->in.type = BYTE; break; default: ! fprintf(stderr, "%s: indirect offset type %c invalid", MODNAME, *l); ! fflush(stderr); break; } l++; --- 1170,1176 ---- m->in.type = BYTE; break; default: ! log_printf(serv, "%s: indirect offset type %c invalid", MODNAME, *l); break; } l++; *************** *** 1204,1212 **** else t = l; if (*t++ != ')') { ! fprintf(stderr, "%s: missing ')' in indirect offset", MODNAME); - fflush(stderr); } l = t; } --- 1186,1193 ---- else t = l; if (*t++ != ')') { ! log_printf(serv, "%s: missing ')' in indirect offset", MODNAME); } l = t; } *************** *** 1279,1286 **** l += NLEDATE; } else { ! fprintf(stderr, "%s: type %s invalid", MODNAME, l); ! fflush(stderr); return -1; } /* New-style anding: "0 byte&0x80 =0x80 dynamically linked" */ --- 1260,1266 ---- l += NLEDATE; } else { ! log_printf(serv, "%s: type %s invalid", MODNAME, l); return -1; } /* New-style anding: "0 byte&0x80 =0x80 dynamically linked" */ *************** *** 1342,1353 **** while ((m->desc[i++] = *l++) != '\0' && i < MAXDESC) /* NULLBODY */ ; ! #if DEBUG ! fprintf(stderr, "%s: parse line=%d m=%x next=%x cont=%d desc=%s\n", MODNAME, lineno, m, m->next, m->cont_level, m->desc ? m->desc : "NULL"); ! fflush(stderr); ! #endif /* DEBUG */ return 0; } --- 1322,1332 ---- while ((m->desc[i++] = *l++) != '\0' && i < MAXDESC) /* NULLBODY */ ; ! #if MIME_MAGIC_DEBUG ! log_printf(serv, "%s: parse line=%d m=%x next=%x cont=%d desc=%s", MODNAME, lineno, m, m->next, m->cont_level, m->desc ? m->desc : "NULL"); ! #endif /* MIME_MAGIC_DEBUG */ return 0; } *************** *** 1363,1369 **** int slen; if (m->type == STRING) { ! *p = getstr(*p, m->value.s, sizeof(m->value.s), &slen); m->vallen = slen; } else if (m->reln != 'x') --- 1342,1348 ---- int slen; if (m->type == STRING) { ! *p = getstr(s, *p, m->value.s, sizeof(m->value.s), &slen); m->vallen = slen; } else if (m->reln != 'x') *************** *** 1377,1386 **** * *slen. Return updated scan pointer as function result. */ static char * ! getstr(s, p, plen, slen) ! register char *s; ! register char *p; ! int plen, *slen; { char *origs = s, *origp = p; char *pmax = p + plen - 1; --- 1356,1363 ---- * *slen. Return updated scan pointer as function result. */ static char * ! getstr(server_rec *serv, register char *s, register char *p, ! int plen, int *slen) { char *origs = s, *origp = p; char *pmax = p + plen - 1; *************** *** 1391,1398 **** if (isspace((unsigned char) c)) break; if (p >= pmax) { ! fprintf(stderr, "String too long: %s\n", origs); ! fflush(stderr); break; } if (c == '\\') { --- 1368,1374 ---- if (isspace((unsigned char) c)) break; if (p >= pmax) { ! log_printf(serv, "String too long: %s", origs); break; } if (c == '\\') { *************** *** 1517,1525 **** ret = stat(fn, sb); /* don't merge into if; see "ret =" above */ if (ret) { - log_printf(r->server, - /* No \n, caller will provide. */ - "can't stat `%s' (%s).", fn, strerror(errno)); return 1; } --- 1493,1498 ---- *************** *** 1593,1602 **** * anyway */ } else { ! strcpy(buf2, fn); /* take directory part */ ! buf2[tmp - fn + 1] = '\0'; ! strcat(buf2, buf); /* plus (relative) ! * symlink */ tmp = buf2; } if (stat(tmp, &tstatbuf) < 0) { --- 1566,1574 ---- * anyway */ } else { ! /* directory part plus (relative) symlink */ ! ap_snprintf(buf2, sizeof(buf2), "%s%s", ! fn, buf); tmp = buf2; } if (stat(tmp, &tstatbuf) < 0) { *************** *** 1626,1632 **** case S_IFREG: break; default: ! log_printf(r->server, "%s: invalid mode 0%o.\n", MODNAME, sb->st_mode); /* NOTREACHED */ } --- 1598,1604 ---- case S_IFREG: break; default: ! log_printf(r->server, "%s: invalid mode 0%o.", MODNAME, sb->st_mode); /* NOTREACHED */ } *************** *** 1684,1691 **** static int match(request_rec * r, unsigned char *s, int nbytes) { ! #if DEBUG ! int rule_counter; #endif int cont_level = 0; int need_separator = 0; --- 1656,1663 ---- static int match(request_rec * r, unsigned char *s, int nbytes) { ! #if MIME_MAGIC_DEBUG ! int rule_counter = 0; #endif int cont_level = 0; int need_separator = 0; *************** *** 1694,1734 **** get_module_config(r->server->module_config, &mime_magic_module); struct magic *m; ! #if DEBUG ! fprintf(stderr, ! "%s: match conf=%x file=%s m=%s m->next=%s last=%s\n", MODNAME, conf, conf->magicfile ? conf->magicfile : "NULL", conf->magic ? "set" : "NULL", (conf->magic && conf->magic->next) ? "set" : "NULL", conf->last ? "set" : "NULL"); - fflush(stderr); #endif ! #if DEBUG for (m = conf->magic; m; m = m->next) { if (isprint((((unsigned long) m) >> 24) & 255) && isprint((((unsigned long) m) >> 16) & 255) && isprint((((unsigned long) m) >> 8) & 255) && isprint(((unsigned long) m) & 255)) { ! fprintf(stderr, "%s: match: POINTER CLOBBERED! " ! "m=\"%c%c%c%c\"\n", MODNAME, (((unsigned long) m) >> 24) & 255, (((unsigned long) m) >> 16) & 255, (((unsigned long) m) >> 8) & 255, ((unsigned long) m) & 255); - fflush(stderr); break; } } #endif for (m = conf->magic; m; m = m->next) { ! #if DEBUG rule_counter++; ! fprintf(stderr, "%s: line=%d desc=%s\n", MODNAME, m->lineno, m->desc); - fflush(stderr); #endif /* check if main entry matches */ --- 1666,1703 ---- get_module_config(r->server->module_config, &mime_magic_module); struct magic *m; ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, ! "%s: match conf=%x file=%s m=%s m->next=%s last=%s", MODNAME, conf, conf->magicfile ? conf->magicfile : "NULL", conf->magic ? "set" : "NULL", (conf->magic && conf->magic->next) ? "set" : "NULL", conf->last ? "set" : "NULL"); #endif ! #if MIME_MAGIC_DEBUG for (m = conf->magic; m; m = m->next) { if (isprint((((unsigned long) m) >> 24) & 255) && isprint((((unsigned long) m) >> 16) & 255) && isprint((((unsigned long) m) >> 8) & 255) && isprint(((unsigned long) m) & 255)) { ! log_printf(r->server, "%s: match: POINTER CLOBBERED! " ! "m=\"%c%c%c%c\"", MODNAME, (((unsigned long) m) >> 24) & 255, (((unsigned long) m) >> 16) & 255, (((unsigned long) m) >> 8) & 255, ((unsigned long) m) & 255); break; } } #endif for (m = conf->magic; m; m = m->next) { ! #if MIME_MAGIC_DEBUG rule_counter++; ! log_printf(r->server, "%s: line=%d desc=%s", MODNAME, m->lineno, m->desc); #endif /* check if main entry matches */ *************** *** 1745,1759 **** m_cont = m->next; while (m_cont && (m_cont->cont_level != 0)) { ! #if DEBUG rule_counter++; ! fprintf(stderr, "%s: line=%d mc=%x mc->next=%x " ! "cont=%d desc=%s\n", MODNAME, m_cont->lineno, m_cont, m_cont->next, m_cont->cont_level, m_cont->desc ? m_cont->desc : "NULL"); - fflush(stderr); #endif /* * this trick allows us to keep *m in sync --- 1714,1727 ---- m_cont = m->next; while (m_cont && (m_cont->cont_level != 0)) { ! #if MIME_MAGIC_DEBUG rule_counter++; ! log_printf(r->server, "%s: line=%d mc=%x mc->next=%x " ! "cont=%d desc=%s", MODNAME, m_cont->lineno, m_cont, m_cont->next, m_cont->cont_level, m_cont->desc ? m_cont->desc : "NULL"); #endif /* * this trick allows us to keep *m in sync *************** *** 1767,1777 **** /* if we get here, the main entry rule was a match */ /* this will be the last run through the loop */ ! #if DEBUG ! fprintf(stderr, "%s: rule matched, line=%d type=%d %s\n", MODNAME, m->lineno, m->type, (m->type == STRING) ? m->value.s : ""); - fflush(stderr); #endif /* print the match */ --- 1735,1744 ---- /* if we get here, the main entry rule was a match */ /* this will be the last run through the loop */ ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "%s: rule matched, line=%d type=%d %s", MODNAME, m->lineno, m->type, (m->type == STRING) ? m->value.s : ""); #endif /* print the match */ *************** *** 1791,1802 **** */ m = m->next; while (m && (m->cont_level != 0)) { ! #if DEBUG ! fprintf(stderr, ! "%s: match line=%d cont=%d type=%d %s\n", MODNAME, m->lineno, m->cont_level, m->type, (m->type == STRING) ? m->value.s : ""); - fflush(stderr); #endif if (cont_level >= m->cont_level) { if (cont_level > m->cont_level) { --- 1758,1768 ---- */ m = m->next; while (m && (m->cont_level != 0)) { ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, ! "%s: match line=%d cont=%d type=%d %s", MODNAME, m->lineno, m->cont_level, m->type, (m->type == STRING) ? m->value.s : ""); #endif if (cont_level >= m->cont_level) { if (cont_level > m->cont_level) { *************** *** 1837,1852 **** /* move to next continuation record */ m = m->next; } ! #if DEBUG ! fprintf(stderr, "%s: matched after %d rules\n", MODNAME, rule_counter); - fflush(stderr); #endif return 1; /* all through */ } ! #if DEBUG ! fprintf(stderr, "%s: failed after %d rules\n", MODNAME, rule_counter); ! fflush(stderr); #endif return 0; /* no match at all */ } --- 1803,1816 ---- /* move to next continuation record */ m = m->next; } ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "%s: matched after %d rules", MODNAME, rule_counter); #endif return 1; /* all through */ } ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "%s: failed after %d rules", MODNAME, rule_counter); #endif return 0; /* no match at all */ } *************** *** 1893,1899 **** (void) magic_rsl_printf(r, m->desc, pp); return; default: ! log_printf(r->server, "%s: invalid m->type (%d) in mprint().\n", MODNAME, m->type); return; } --- 1857,1863 ---- (void) magic_rsl_printf(r, m->desc, pp); return; default: ! log_printf(r->server, "%s: invalid m->type (%d) in mprint().", MODNAME, m->type); return; } *************** *** 1939,1945 **** ((p->hl[3] << 24) | (p->hl[2] << 16) | (p->hl[1] << 8) | (p->hl[0])); return 1; default: ! log_printf(r->server, "%s: invalid type %d in mconvert().\n", MODNAME, m->type); return 0; } --- 1903,1909 ---- ((p->hl[3] << 24) | (p->hl[2] << 16) | (p->hl[1] << 8) | (p->hl[0])); return 1; default: ! log_printf(r->server, "%s: invalid type %d in mconvert().", MODNAME, m->type); return 0; } *************** *** 1993,2000 **** int matched; if ((m->value.s[0] == 'x') && (m->value.s[1] == '\0')) { ! fprintf(stderr, "BOINK"); ! fflush(stderr); return 1; } --- 1957,1963 ---- int matched; if ((m->value.s[0] == 'x') && (m->value.s[1] == '\0')) { ! log_printf(r->server, "BOINK"); return 1; } *************** *** 2038,2044 **** } break; default: ! log_printf(r->server, "%s: invalid type %d in mcheck().\n", MODNAME, m->type); return 0; /* NOTREACHED */ } --- 2001,2007 ---- } break; default: ! log_printf(r->server, "%s: invalid type %d in mcheck().", MODNAME, m->type); return 0; /* NOTREACHED */ } *************** *** 2047,2070 **** switch (m->reln) { case 'x': ! #if DEBUG ! (void) fprintf(stderr, "%lu == *any* = 1\n", v); #endif matched = 1; break; case '!': matched = v != l; ! #if DEBUG ! (void) fprintf(stderr, "%lu != %lu = %d\n", v, l, matched); #endif break; case '=': matched = v == l; ! #if DEBUG ! (void) fprintf(stderr, "%lu == %lu = %d\n", v, l, matched); #endif break; --- 2010,2033 ---- switch (m->reln) { case 'x': ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "%lu == *any* = 1", v); #endif matched = 1; break; case '!': matched = v != l; ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "%lu != %lu = %d", v, l, matched); #endif break; case '=': matched = v == l; ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "%lu == %lu = %d", v, l, matched); #endif break; *************** *** 2072,2086 **** case '>': if (m->flag & UNSIGNED) { matched = v > l; ! #if DEBUG ! (void) fprintf(stderr, "%lu > %lu = %d\n", v, l, matched); #endif } else { matched = (long) v > (long) l; ! #if DEBUG ! (void) fprintf(stderr, "%ld > %ld = %d\n", v, l, matched); #endif } --- 2035,2049 ---- case '>': if (m->flag & UNSIGNED) { matched = v > l; ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "%lu > %lu = %d", v, l, matched); #endif } else { matched = (long) v > (long) l; ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "%ld > %ld = %d", v, l, matched); #endif } *************** *** 2089,2136 **** case '<': if (m->flag & UNSIGNED) { matched = v < l; ! if (DEBUG) ! (void) fprintf(stderr, "%lu < %lu = %d\n", ! v, l, matched); } else { matched = (long) v < (long) l; ! #if DEBUG ! (void) fprintf(stderr, "%ld < %ld = %d\n", ! v, l, matched); #endif } break; case '&': matched = (v & l) == l; ! #if DEBUG ! (void) fprintf(stderr, "((%lx & %lx) == %lx) = %d\n", v, l, l, matched); #endif break; case '^': matched = (v & l) != l; ! #if DEBUG ! (void) fprintf(stderr, "((%lx & %lx) != %lx) = %d\n", v, l, l, matched); #endif break; default: matched = 0; ! log_printf(r->server, "%s: mcheck: can't happen: invalid relation %d.\n", MODNAME, m->reln); break; /* NOTREACHED */ } - #if DEBUG - fflush(stderr); - #endif return matched; } ! /* an optimisation over plain strcmp() */ #define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0) static int --- 2052,2095 ---- case '<': if (m->flag & UNSIGNED) { matched = v < l; ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "%lu < %lu = %d", v, l, matched); ! #endif } else { matched = (long) v < (long) l; ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "%ld < %ld = %d", v, l, matched); #endif } break; case '&': matched = (v & l) == l; ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "((%lx & %lx) == %lx) = %d", v, l, l, matched); #endif break; case '^': matched = (v & l) != l; ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "((%lx & %lx) != %lx) = %d", v, l, l, matched); #endif break; default: matched = 0; ! log_printf(r->server, "%s: mcheck: can't happen: invalid relation %d.", MODNAME, m->reln); break; /* NOTREACHED */ } return matched; } ! /* an optimization over plain strcmp() */ #define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0) static int *************** *** 2267,2275 **** if (i == ncompr) return 0; ! if ((newsize = uncompress(r->server, i, buf, &newbuf, nbytes)) != 0) { tryit(r, newbuf, newsize); - free(newbuf); /* set encoding type in the request record */ r->content_encoding = pstrdup(r->pool, compr[i].encoding); --- 2226,2233 ---- if (i == ncompr) return 0; ! if ((newsize = uncompress(r, i, buf, &newbuf, nbytes)) != 0) { tryit(r, newbuf, newsize); /* set encoding type in the request record */ r->content_encoding = pstrdup(r->pool, compr[i].encoding); *************** *** 2279,2291 **** static int ! uncompress(server_rec * s, int method, const unsigned char *old, unsigned char **newch, int n) { int fdin[2], fdout[2]; if (pipe(fdin) == -1 || pipe(fdout) == -1) { ! log_printf(s, "%s: cannot create pipe (%s).\n", MODNAME, strerror(errno)); return -1; } --- 2237,2249 ---- static int ! uncompress(request_rec *r, int method, const unsigned char *old, unsigned char **newch, int n) { int fdin[2], fdout[2]; if (pipe(fdin) == -1 || pipe(fdout) == -1) { ! log_printf(r->server, "%s: cannot create pipe (%s).", MODNAME, strerror(errno)); return -1; } *************** *** 2304,2314 **** (void) close(2); execvp(compr[method].argv[0], compr[method].argv); ! log_printf(s, "%s: could not execute `%s' (%s).\n", MODNAME, compr[method].argv[0], strerror(errno)); return -1; case -1: ! log_printf(s, "%s: could not fork (%s).\n", MODNAME, strerror(errno)); return -1; --- 2262,2272 ---- (void) close(2); execvp(compr[method].argv[0], compr[method].argv); ! log_printf(r->server, "%s: could not execute `%s' (%s).", MODNAME, compr[method].argv[0], strerror(errno)); return -1; case -1: ! log_printf(r->server, "%s: could not fork (%s).", MODNAME, strerror(errno)); return -1; *************** *** 2316,2334 **** (void) close(fdin[0]); (void) close(fdout[1]); if (write(fdin[1], old, n) != n) { ! log_printf(s, "%s: write failed (%s).\n", MODNAME, strerror(errno)); return -1; } (void) close(fdin[1]); ! if ((*newch = (unsigned char *) malloc(n)) == NULL) { ! log_printf(s, "%s: out of memory in uncompress()\n", MODNAME); return -1; } if ((n = read(fdout[0], *newch, n)) <= 0) { ! free(*newch); ! log_printf(s, "%s: read failed (%s).\n", MODNAME, strerror(errno)); return -1; } --- 2274,2291 ---- (void) close(fdin[0]); (void) close(fdout[1]); if (write(fdin[1], old, n) != n) { ! log_printf(r->server, "%s: write failed (%s).", MODNAME, strerror(errno)); return -1; } (void) close(fdin[1]); ! if ((*newch = (unsigned char *) palloc(r->pool, n)) == NULL) { ! log_printf(r->server, "%s: out of memory in uncompress()", MODNAME); return -1; } if ((n = read(fdout[0], *newch, n)) <= 0) { ! log_printf(r->server, "%s: read failed (%s).", MODNAME, strerror(errno)); return -1; } *************** *** 2429,2435 **** * Check for file-revision suffix * * This is for an obscure document control system used on an intranet. ! * The web respresentation of each file's revision has an @1, @2, etc * appended with the revision number. This needs to be stripped off to * find the file suffix, which can be recognized by sending the name back * through a sub-request. The base file name (without the @num suffix) --- 2386,2392 ---- * Check for file-revision suffix * * This is for an obscure document control system used on an intranet. ! * The web representation of each file's revision has an @1, @2, etc * appended with the revision number. This needs to be stripped off to * find the file suffix, which can be recognized by sending the name back * through a sub-request. The base file name (without the @num suffix) *************** *** 2442,2451 **** char *sub_filename; request_rec *sub; ! #if DEBUG ! fprintf(stderr, "%s: revision_suffix checking%s\n", MODNAME, r->filename); ! #endif /* DEBUG */ /* check for recognized revision suffix */ suffix_pos = strlen(r->filename) - 1; --- 2399,2408 ---- char *sub_filename; request_rec *sub; ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "%s: revision_suffix checking%s", MODNAME, r->filename); ! #endif /* MIME_MAGIC_DEBUG */ /* check for recognized revision suffix */ suffix_pos = strlen(r->filename) - 1; *************** *** 2461,2478 **** /* perform sub-request for the file name without the suffix */ result = 0; sub_filename = pstrndup(r->pool, r->filename, suffix_pos); ! #if DEBUG ! fprintf(stderr, "%s: subrequest lookup for %s\n", MODNAME, sub_filename); ! #endif /* DEBUG */ sub = sub_req_lookup_file(sub_filename, r); /* extract content type/encoding/language from sub-request */ if (sub->content_type) { r->content_type = pstrdup(r->pool, sub->content_type); ! #if DEBUG ! fprintf(stderr, "%s: subrequest %s got %s\n", MODNAME, sub_filename, r->content_type); ! #endif /* DEBUG */ if (sub->content_encoding) r->content_encoding = pstrdup(r->pool, sub->content_encoding); --- 2418,2435 ---- /* perform sub-request for the file name without the suffix */ result = 0; sub_filename = pstrndup(r->pool, r->filename, suffix_pos); ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "%s: subrequest lookup for %s", MODNAME, sub_filename); ! #endif /* MIME_MAGIC_DEBUG */ sub = sub_req_lookup_file(sub_filename, r); /* extract content type/encoding/language from sub-request */ if (sub->content_type) { r->content_type = pstrdup(r->pool, sub->content_type); ! #if MIME_MAGIC_DEBUG ! log_printf(r->server, "%s: subrequest %s got %s", MODNAME, sub_filename, r->content_type); ! #endif /* MIME_MAGIC_DEBUG */ if (sub->content_encoding) r->content_encoding = pstrdup(r->pool, sub->content_encoding); *************** *** 2498,2523 **** int result; magic_server_config_rec *conf = (magic_server_config_rec *) get_module_config(s->module_config, &mime_magic_module); ! #if DEBUG struct magic *m, *prevm; ! #endif /* DEBUG */ /* on the first time through we read the magic file */ if (conf->magicfile && !conf->magic) { result = apprentice(s, p); if (result == -1) return; ! #if DEBUG prevm = 0; ! fprintf(stderr, "%s: magic_init 1 test\n", MODNAME); for (m = conf->magic; m; m = m->next) { if (isprint((((unsigned long) m) >> 24) & 255) && isprint((((unsigned long) m) >> 16) & 255) && isprint((((unsigned long) m) >> 8) & 255) && isprint(((unsigned long) m) & 255)) { ! fprintf(stderr, "%s: magic_init 1: " "POINTER CLOBBERED! " ! "m=\"%c%c%c%c\" line=%d\n", MODNAME, (((unsigned long) m) >> 24) & 255, (((unsigned long) m) >> 16) & 255, (((unsigned long) m) >> 8) & 255, --- 2455,2480 ---- int result; magic_server_config_rec *conf = (magic_server_config_rec *) get_module_config(s->module_config, &mime_magic_module); ! #if MIME_MAGIC_DEBUG struct magic *m, *prevm; ! #endif /* MIME_MAGIC_DEBUG */ /* on the first time through we read the magic file */ if (conf->magicfile && !conf->magic) { result = apprentice(s, p); if (result == -1) return; ! #if MIME_MAGIC_DEBUG prevm = 0; ! log_printf(s, "%s: magic_init 1 test", MODNAME); for (m = conf->magic; m; m = m->next) { if (isprint((((unsigned long) m) >> 24) & 255) && isprint((((unsigned long) m) >> 16) & 255) && isprint((((unsigned long) m) >> 8) & 255) && isprint(((unsigned long) m) & 255)) { ! log_printf(s, "%s: magic_init 1: " "POINTER CLOBBERED! " ! "m=\"%c%c%c%c\" line=%d", MODNAME, (((unsigned long) m) >> 24) & 255, (((unsigned long) m) >> 16) & 255, (((unsigned long) m) >> 8) & 255, *************** *** 2527,2533 **** } prevm = m; } - fflush(stderr); #endif } --- 2484,2489 ---- *************** *** 2580,2586 **** module mime_magic_module = { STANDARD_MODULE_STUFF, magic_init, /* initializer */ ! NULL, /* dir config creater */ NULL, /* dir merger --- default is to override */ create_magic_server_config, /* server config */ merge_magic_server_config, /* merge server config */ --- 2536,2542 ---- module mime_magic_module = { STANDARD_MODULE_STUFF, magic_init, /* initializer */ ! NULL, /* dir config creator */ NULL, /* dir merger --- default is to override */ create_magic_server_config, /* server config */ merge_magic_server_config, /* merge server config */