Index: wb_ntlm_auth.c =================================================================== RCS file: /server/cvs-server/squid/squid/helpers/ntlm_auth/winbind/wb_ntlm_auth.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -w -r1.2 -r1.3 --- wb_ntlm_auth.c 1 Jul 2002 10:17:43 -0000 1.2 +++ wb_ntlm_auth.c 18 Jul 2002 10:19:24 -0000 1.3 @@ -266,8 +266,10 @@ char buf[BUFFER_SIZE + 1]; char *c, *decoded; ntlmhdr *fast_header; + int oversized = 0; +try_again: if (fgets(buf, BUFFER_SIZE, stdin) == NULL) { warn("fgets() failed! dying..... errno=%d (%s)\n", errno, strerror(errno)); @@ -275,11 +277,18 @@ } c = memchr(buf, '\n', BUFFER_SIZE); - if (c) + if (c) { + if (oversized) { + helperfail("illegal request received"); + warn("Illegal request received: '%s'\n", buf); + return; + } *c = '\0'; + } else { - warn("No newline in '%s'. Dying.\n", buf); - exit(1); + warn("No newline in '%s'\n", buf); + oversized = 1; + goto try_again; } debug("Got '%s' from squid.\n", buf); @@ -349,25 +358,44 @@ return domain; } +static void +usage(char *program) +{ + fprintf(stderr,"Usage: %s [-d] [-h] [domain]\n" + " -d enable debugging\n" + " -hi this message\n" + " domain target domain, if different from the winbind configuration\n", + program); +} + char * process_options(int argc, char *argv[]) { int opt; char *target_domain = NULL; - while (-1 != (opt = getopt(argc, argv, "d"))) { + while (-1 != (opt = getopt(argc, argv, "dh"))) { switch (opt) { case 'd': debug_enabled = 1; break; + case 'h': + usage(argv[0]); + exit(0); default: - warn("Unknown option: -%c. Exiting\n", opt); + warn("Unknown option: -%c\n\n", opt); + usage(argv[0]); exit(1); break; /* not reached */ } - if (optind >= argc - 1) { - target_domain = argv[optind]; + } + if (optind < argc) { + target_domain = argv[optind++]; warn("target domain is %s\n", target_domain); + if (optind < argc) { + warn("Unknown argument: %s\n\n", argv[optind]); + usage(argv[0]); + exit(1); } } return target_domain;