[squid-users] Debugging an external acl helper that uses the %SRC format

From: WGS <tech@dont-contact.us>
Date: Thu, 21 Oct 2004 11:34:56 -0700 (PDT)

I'm working on an acl helper in c, that needs to access a pid file.

The name of the file is the ip address of a client in dot notation. Inside
the file is a username, and I want to pass to squid. I wrote an acl
helper, and setup external_acl_type to pass %SRC.

SQUID never grants access to the client.

I'm not that familar with c, but combed through the source of every other
acl helper I could find. The program I wrote works wonderfully from the
command line, but does not work from squid.

I wrote an acl helper that works well when I test it from the command
line, but has never worked when squid passes %SRC.

using stderr, I think the program fails to open the pid file (named ex:
192.168.100.109) when passed %SRC by squid from machine 192.168.100.109,
even when the %Src is printed to stderr as 192.168.100.109.

I have used strchr to change \n to \0 and also just chopping it off with a
strncat(var, var, strlen(squidsrc) -1). Neither worked. Checked and
rechecked file perms. I've even played around with ttls.

Here's the code:

int main( )
{
        char squidsrc[256];
        while ( fgets(squidsrc, sizeof(squidsrc), stdin ) != NULL ) {

                FILE *FH;
                char line[1024];
                char filename[MAXPATHLEN] = "/var/userlock/";
                char username[MAXLOGNAME + 10];
                char squidreturnok[1024] = "OK user="
                char *p;
                if ((p = strchr(squidsrc, '\n')) != NULL) {
                p = '\0';}

                 if ((FH = fopen( filename , "r" )) != NULL ) {

                        while ( fgets ( line , sizeof(line), FH ) != NULL ) {
                                strcpy( username , line );
                        }

                        fclose ( FH );

                        strcat( squidreturnok, username);
                        printf (squidreturnok "\n");

                } else {
                        printf ( "ERR\n" ); }

}

}

My acl's are simple
external_acl_type pid_file %SRC /var/squid/helpers/pid_squid
acl lab external pid_file
http_access allow lab

Any input would be much appreciated! I need to wrap this project up, and
the helper is the last step. Thanks.

(ALL PRAISE THE MIGHTY SQUID)
Received on Thu Oct 21 2004 - 12:34:57 MDT

This archive was generated by hypermail pre-2.1.9 : Mon Nov 01 2004 - 12:00:02 MST