int otype_setcookie(pblock *pb, Session *sn, Request *rq)
{
    rq->directive_is_cacheable = 1;

    const char *name = pblock_findkeyval(pb_key_name, pb);
    if (!name) {
        log_error(LOG_MISCONFIG, "set-cookie", sn, rq,
                  XP_GetAdminStr(DBT_ntransError7));
        return REQ_ABORTED;
    }

    PRInt64 max_age = COOKIE_MAX_AGE_SESSION;
    if (const char *max_age_str = pblock_findkeyval(pb_key_max_age, pb))
        max_age = util_atoi64(max_age_str);

    PRBool secure = PR_FALSE;
    if (const char *secure_str = pblock_findkeyval(pb_key_secure, pb))
        secure = util_getboolean(secure_str, PR_TRUE);

    int res = cookie_set(sn, rq, name,
                         pblock_findkeyval(pb_key_value, pb),
                         pblock_findkeyval(pb_key_path, pb),
                         pblock_findkeyval(pb_key_domain, pb),
                         pblock_findkeyval(pb_key_expires, pb),
                         max_age, secure);
    if (res != REQ_PROCEED)
        return res;

    return REQ_NOACTION;
}
예제 #2
0
static void exec_asp( connection* conn )
{
	char key[20];
	key[16] = '\0';
	cookie_get( conn, "SESSIONKEY", key, 16 );
	conn->session = session_get( conn->client, key );
	if( !conn->session ){
		conn->code = 500;
	}else{
		if( !(*key) || strcmp( conn->session->key, key ) != 0 )
			cookie_set( conn, "SESSIONKEY", "/", -1, conn->session->key );
		NEW( conn->data_send, MAX_DATASEND+4 );
		conn->data_size = 0;
		if( vdir_exec( conn->server, conn->current_dir, conn ) < 0 ){
			conn->code = 404;
		}
		if( !conn->data_size )
			conn->data_size = strlen( conn->data_send );
	}
}