Search squid archive

external_acl program...

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I have a little problem with my external_acl C program.
Everything works fine with a php version, but my original C version, for some tricky reason, does not...
Tested both from the console and they seem to behave exactly in the same way...
I am calling either program with the same syntax:

  external_acl_type filter children=8 concurrency=0 ttl=0 negative_ttl=0 %PATH filter

The following in PHP works fine with squid:

  while (!feof(STDIN)) {
    $url = fgets(STDIN);
    fwrite(STDERR, 'filter: url='.$url."\n");
    fwrite(STDOUT, 'OK user=allowed'."\n");
    fwrite(STDERR, 'filter: end of while...'."\n");
  }

The following in C does not work well with squid:

  while (fgets(url, sizeof(url), stdin)) {
    // let's ignore the '\n' at the end of url, it only appear in the logs anyway...
    fprintf(stderr, "filter: url=%s\n", url);
    printf("OK user=allowed\n");
    fprintf(stderr, "filter: end of while...\n");
  }

With the C version, if I load a test page with 3 images going through squid, I will have the following in the squid_cache.log:

  filter: url=/path/to/img1.gif
  filter: end of while...
  filter: url=/path/to/img2.gif
  filter: end of while...
  filter: url=/path/to/img3.gif
  filter: end of while...

and then squid will just wait (for the 3 instances of my program?), blocking everything...
When I stop squid, I get 3 messages like:

  WARNING: Closing client 192.168.16.23 connection due to lifetime timeout
  2008/08/19 17:05:18|    http://localhost/path/to/img1.gif

Any idea what is wrong with my C code...?

Thx,
JD


      


[Index of Archives]     [Linux Audio Users]     [Samba]     [Big List of Linux Books]     [Linux USB]     [Yosemite News]

  Powered by Linux