/* Author: Ram Samudrala (me@ram.org) * Version: O1.0 * Detail: * November 22, 1996. * * See the URL above for more information. */ #include "cgi_common.h" #include "cgi_defines.h" #include "cgi_error_handlers.h" #include "sc_defines.h" /******************************************************************/ int start_setting_cookies() { printf("Content-type: text/html%s", HEADER_DELIMITER); printf("%s", HEADER_DELIMITER); return TRUE; } /******************************************************************/ int end_setting_cookies() { printf("%s", HEADER_DELIMITER); return TRUE; } /******************************************************************/ int set_cookie(char name[], char value[], char path[], char expires[], char relative_url[]) { char buf[COOKIE_STRING_LENGTH]; sprintf(buf, "Set-Cookie: %s=%s", name, value); if (path[0] != '\0') { strcat(buf, "; path="); strcat(buf, path); } if (expires[0] != '\0') { strcat(buf, "; expires="); strcat(buf, expires); } strcat(buf, HEADER_DELIMITER); printf("%s", buf); if (relative_url[0] != '\0') { if (strcmp(relative_url, "none") == 0) printf("Status: 204 No Content%s", HEADER_DELIMITER); else printf("Location: %s%s%s", DEFAULT_URL, relative_url, HEADER_DELIMITER); printf("%s", HEADER_DELIMITER); } return TRUE; } /******************************************************************/ int get_cookie(char name[], char value[]) { char cookie_string[COOKIE_STRING_LENGTH]; char cookie_name[STRING_LENGTH]; char *cp; int i, j; if (getenv("HTTP_COOKIE") != NULL) { sprintf(cookie_string, "%s", getenv("HTTP_COOKIE")); /* Kludge to get around browsers that don't expire cookies * properly. */ /* sprintf(cookie_name, "%s=clear", name); if (strstr(cookie_string, cookie_name) != NULL) return FALSE; */ sprintf(cookie_name, "%s=", name); cp = strstr(cookie_string, cookie_name); if (cp != NULL) { for(i = 0; cp[i] != '='; i++) cookie_name[i] = cp[i]; cookie_name[i] = '\0'; i++; for(j = 0; (cp[i] != '\0') && (cp[i] != ';'); i++, j++) value[j] = cp[i]; value[j] = '\0'; return TRUE; } else return FALSE; } else return FALSE; } /******************************************************************/ int clear_cookie(char name[], char path[], char relative_url[]) { printf("Set-Cookie: %s=|; path=%s; expires=09-Nov-94 23:12:40 GMT%s", name, path, HEADER_DELIMITER); if (relative_url[0] != '\0') { if (strcmp(relative_url, "none") == 0) printf("Status: 204 No Content%s", HEADER_DELIMITER); else printf("Location: %s%s%s", DEFAULT_URL, relative_url, HEADER_DELIMITER); printf("%s", HEADER_DELIMITER); } return TRUE; } /******************************************************************/