From fbcf6995b4af6c3a671bb946cd5ddbd522e83e50 Mon Sep 17 00:00:00 2001 From: Jeroen Nijhof Date: Mon, 12 Sep 2011 14:18:14 +0200 Subject: [PATCH] Finished websense support code --- TODO | 3 --- blacklist.example | 2 +- openufp.c | 2 +- websense.c | 62 +++++++++++++++++++++++++---------------------- websense.h | 3 ++- 5 files changed, 37 insertions(+), 35 deletions(-) delete mode 100644 TODO diff --git a/TODO b/TODO deleted file mode 100644 index 4ef087d..0000000 --- a/TODO +++ /dev/null @@ -1,3 +0,0 @@ -TODO - -- Do far more websense testing and add redirect support diff --git a/blacklist.example b/blacklist.example index 1c9504c..4c64bff 100644 --- a/blacklist.example +++ b/blacklist.example @@ -1,4 +1,4 @@ # # This file contains blacklisted urls # -http://www.test.com +http://www.sex.com diff --git a/openufp.c b/openufp.c index 6776c23..095c86b 100644 --- a/openufp.c +++ b/openufp.c @@ -226,7 +226,7 @@ int main(int argc, char**argv) { if (request.type == WEBSNSALIVE) { if (debug > 2) syslog(LOG_INFO, "websns: received alive request, sending accept response."); - websns_accept(cli_fd, cli_addr, request.id); + websns_alive(cli_fd, cli_addr, request.id); } // URL Request diff --git a/websense.c b/websense.c index 2d83c5b..514fc8f 100644 --- a/websense.c +++ b/websense.c @@ -8,64 +8,68 @@ #include "openufp.h" +void websns_alive(int fd, struct sockaddr_in cli_addr, char req_id[REQID]) { + char mesg_accept[WEBSNSHDR]; + int i = 0; + + mesg_accept[0] = 0; + mesg_accept[1] = WEBSNSHDR; + for(i = 0; i < 10; i++) + mesg_accept[2+i] = req_id[i]; + for(i = 0; i < 8; i++) + mesg_accept[12+i] = 0; + mesg_accept[14] = 255; + mesg_accept[15] = 255; + + // send accept response + sendto(fd, mesg_accept, WEBSNSHDR, 0, (struct sockaddr *)&cli_addr, sizeof(cli_addr)); +} + void websns_accept(int fd, struct sockaddr_in cli_addr, char req_id[REQID]) { - // reqsize(2),reqid(10),code(2),desc(2),category(2),cache?(4),cachecmd(2),cachetype(2),null(8) - char mesg_accept[WEBSNSRES]; + char mesg_accept[WEBSNSHDR]; int i = 0; mesg_accept[0] = 0; - mesg_accept[1] = WEBSNSRES; + mesg_accept[1] = WEBSNSHDR; for(i = 0; i < 10; i++) mesg_accept[2+i] = req_id[i]; - mesg_accept[12] = 0; - mesg_accept[13] = 0; - mesg_accept[14] = 4; - mesg_accept[15] = 10; - mesg_accept[16] = 0; - mesg_accept[17] = 153; - for(i = 0; i < 16; i++) - mesg_accept[18+i] = 0; + for(i = 0; i < 8; i++) + mesg_accept[12+i] = 0; // send accept response - sendto(fd, mesg_accept, WEBSNSRES, 0, (struct sockaddr *)&cli_addr, sizeof(cli_addr)); + sendto(fd, mesg_accept, WEBSNSHDR, 0, (struct sockaddr *)&cli_addr, sizeof(cli_addr)); } void websns_deny(int fd, struct sockaddr_in cli_addr, char req_id[REQID], char *redirect_url) { - // reqsize(2),reqid(10),code(2),desc(2),category(2),cache?(4),cachecmd(2),cachetype(2),null(8) - char mesg_denied[WEBSNSRES+URL]; + char mesg_denied[WEBSNSHDR+URL]; int redirect_url_len = 0; int i = 0; mesg_denied[0] = 0; - mesg_denied[1] = WEBSNSRES; + mesg_denied[1] = WEBSNSHDR; for(i = 0; i < 10; i++) mesg_denied[2+i] = req_id[i]; mesg_denied[12] = 0; // code mesg_denied[13] = 1; // code - mesg_denied[14] = 4; // desc - mesg_denied[15] = 10; // desc + mesg_denied[14] = 0; // desc + mesg_denied[15] = 1; // desc mesg_denied[16] = 0; // cat - mesg_denied[17] = 153; // cat - for(i = 0; i < 16; i++) - mesg_denied[18+i] = 0; + mesg_denied[17] = 0; // cat + mesg_denied[18] = 0; // url_size + mesg_denied[19] = 0; // url_size - // send custom redirect url if defined - // not working yet so disabled - redirect_url = NULL; if (redirect_url != NULL) { redirect_url_len = strlen(redirect_url) + 1; if (redirect_url_len <= URL) { - mesg_denied[30] = redirect_url_len / 768; - mesg_denied[31] = (redirect_url_len % 768) / 512; - mesg_denied[32] = ((redirect_url_len % 768) % 512) / 256; - mesg_denied[33] = ((redirect_url_len % 768) % 512) % 256; + mesg_denied[1] += redirect_url_len; + mesg_denied[19] = redirect_url_len; for(i = 0; i < redirect_url_len; i++) - mesg_denied[N2H2RES+i] = redirect_url[i]; + mesg_denied[WEBSNSHDR+i] = redirect_url[i]; } } // send denied response - sendto(fd, mesg_denied, WEBSNSRES, 0, (struct sockaddr *)&cli_addr, sizeof(cli_addr)); + sendto(fd, mesg_denied, WEBSNSHDR + redirect_url_len, 0, (struct sockaddr *)&cli_addr, sizeof(cli_addr)); } struct uf_request websns_request(char mesg[REQ]) { diff --git a/websense.h b/websense.h index 451b25b..9525935 100644 --- a/websense.h +++ b/websense.h @@ -9,8 +9,9 @@ #define WEBSNS 2 #define WEBSNSREQ 4 #define WEBSNSALIVE 6 -#define WEBSNSRES 34 +#define WEBSNSHDR 20 +extern void websns_alive(int fd, struct sockaddr_in cli_addr, char req_id[REQID]); extern void websns_accept(int fd, struct sockaddr_in cli_addr, char req_id[REQID]); extern void websns_deny(int fd, struct sockaddr_in cli_addr, char req_id[REQID], char *redirect_url); extern struct uf_request websns_request(char mesg[REQ]);