From: Amos Jeffries Date: Wed, 14 Nov 2012 06:15:15 +0000 (-0700) Subject: ext_file_userip_acl: Polish and missing file handling X-Git-Tag: SQUID_3_4_0_1~511 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ed7f08683a186453fe6ed3249b0bda0a85b092fd;p=thirdparty%2Fsquid.git ext_file_userip_acl: Polish and missing file handling * Display error when dictionary file is unaccessible instead of crashing. * Polish several useless assignments out of the code. Detected by Coverity Scan. Issues 740402, 740403, 740589, 740590. --- diff --git a/helpers/external_acl/file_userip/ext_file_userip_acl.cc b/helpers/external_acl/file_userip/ext_file_userip_acl.cc index d9a118470f..6f32aabfa2 100644 --- a/helpers/external_acl/file_userip/ext_file_userip_acl.cc +++ b/helpers/external_acl/file_userip/ext_file_userip_acl.cc @@ -75,9 +75,6 @@ load_dict(FILE * FH) { linked list */ char line[DICT_BUFFER_SIZE]; /* the buffer for the lines read from the dict file */ - char *cp; /* a char pointer used to parse - each line */ - char *username; /* for the username */ char *tmpbuf; /* for the address before the bitwise AND */ @@ -85,17 +82,28 @@ load_dict(FILE * FH) { first_entry = (struct ip_user_dict*)malloc(sizeof(struct ip_user_dict)); current_entry = first_entry; - while ((cp = fgets (line, DICT_BUFFER_SIZE, FH)) != NULL) { + unsigned int lineCount = 0; + while (fgets(line, sizeof(line), FH) != NULL) { + ++lineCount; if (line[0] == '#') { continue; } + + char *cp; // a char pointer used to parse each line. if ((cp = strchr (line, '\n')) != NULL) { /* chop \n characters */ *cp = '\0'; } - if ((cp = strtok (line, "\t ")) != NULL) { + if (strtok(line, "\t ") != NULL) { + // NP: line begins with IP/mask. Skipped to the end of it with this strtok() + /* get the username */ - username = strtok (NULL, "\t "); + char *username; + if ((username = strtok(NULL, "\t ")) == NULL) { + debug("Missing username on line %u of dictionary file\n", lineCount); + continue; + } + /* look for a netmask */ if ((cp = strtok (line, "/")) != NULL) { /* store the ip address in a temporary buffer */ @@ -241,7 +249,11 @@ main (int argc, char *argv[]) usage(program_name); exit(1); } - FH = fopen(filename, "r"); + FILE *FH = fopen(filename, "r"); + if (!FH) { + fprintf(stderr, "%s: FATAL: Unable to open file '%s': %s", program_name, filename, xstrerror()); + exit(1); + } current_entry = load_dict(FH); while (fgets(line, HELPER_INPUT_BUFFER, stdin)) {