From 41dd2cb9365babb2a71b3bfc860f1d0cae16a552 Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Tue, 28 Jul 2015 21:53:21 +0200 Subject: [PATCH] Session cookie is now create with path base_uri or CONTEXT_PREFIX (closes #949). --- src/session.c | 27 +++++++++++++++++++++------ src/session.h | 3 ++- tests/session.c | 3 +-- tests/url.c | 5 ++++- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/session.c b/src/session.c index 8567c1b..6390c0d 100644 --- a/src/session.c +++ b/src/session.c @@ -47,6 +47,7 @@ typedef struct _ZakCgiSessionPrivate ZakCgiSessionPrivate; struct _ZakCgiSessionPrivate { ZakCgiMain *zakcgimain; + gchar *base_uri; gchar *sid; GFile *gfile; GKeyFile *kfile; @@ -72,17 +73,20 @@ zak_cgi_session_init (ZakCgiSession *zak_cgi_session) { ZakCgiSessionPrivate *priv = ZAK_CGI_SESSION_GET_PRIVATE (zak_cgi_session); - priv->zakcgimain; + priv->zakcgimain = NULL; + priv->base_uri = NULL; } /** * zak_cgi_session_new: * @zakcgimain: + * @base_uri: * * Returns: the newly created #ZakCgiSession object. */ ZakCgiSession -*zak_cgi_session_new (ZakCgiMain *zakcgimain) +*zak_cgi_session_new (ZakCgiMain *zakcgimain, + const gchar *base_uri) { GHashTable *ht_cookies; @@ -95,6 +99,10 @@ ZakCgiSession priv = ZAK_CGI_SESSION_GET_PRIVATE (zak_cgi_session); priv->zakcgimain = zakcgimain; + if (base_uri != NULL) + { + priv->base_uri = g_strdup (base_uri); + } ht_cookies = zak_cgi_main_get_cookies (priv->zakcgimain); priv->sid = g_hash_table_lookup (ht_cookies, "ZAKCGISID"); @@ -136,18 +144,21 @@ gchar GError *error; GFileIOStream *iostream; + guint32 i; + gchar *tmp; + + GHashTable *ht_env; + ZakCgiSessionPrivate *priv = ZAK_CGI_SESSION_GET_PRIVATE (session); if (priv->sid == NULL) { /* create new random name */ - guint32 i; - gchar *tmp; i = g_random_int (); tmp = g_strdup_printf ("%d", i); - + priv->sid = g_compute_checksum_for_string (G_CHECKSUM_MD5, tmp, strlen (tmp)); @@ -171,7 +182,11 @@ gchar g_object_unref (iostream); } - ret = zak_cgi_main_set_cookie ("ZAKCGISID", priv->sid, NULL, NULL, NULL, FALSE, FALSE); + ht_env = zak_cgi_main_get_env (priv->zakcgimain); + + ret = zak_cgi_main_set_cookie ("ZAKCGISID", priv->sid, NULL, NULL, + priv->base_uri != NULL ? priv->base_uri : g_value_get_string (g_hash_table_lookup (ht_env, "CONTEXT_PREFIX")), + FALSE, FALSE); } else { diff --git a/src/session.h b/src/session.h index f6f1839..3475ba2 100644 --- a/src/session.h +++ b/src/session.h @@ -51,7 +51,8 @@ struct _ZakCgiSessionClass GType zak_cgi_session_get_type (void); -ZakCgiSession *zak_cgi_session_new (ZakCgiMain *zakcgimain); +ZakCgiSession *zak_cgi_session_new (ZakCgiMain *zakcgimain, + const gchar *base_uri); gchar *zak_cgi_session_get_header (ZakCgiSession *session); diff --git a/tests/session.c b/tests/session.c index f86ffc7..6644d21 100644 --- a/tests/session.c +++ b/tests/session.c @@ -34,7 +34,7 @@ main (int argc, char *argv[]) gchar *method; - session = zak_cgi_session_new (NULL); + session = zak_cgi_session_new (NULL, NULL); str = g_string_new ("\n" "Session Cookie\n" @@ -110,4 +110,3 @@ main (int argc, char *argv[]) return 0; } - diff --git a/tests/url.c b/tests/url.c index 3a71c03..1b7fc77 100644 --- a/tests/url.c +++ b/tests/url.c @@ -55,6 +55,7 @@ hook (GMatchInfo *minfo, gpointer user_data) int main (int argc, char *argv[]) { + gchar *env; ZakCgiUrl *url; GString *str; @@ -63,13 +64,15 @@ main (int argc, char *argv[]) "\n" "FROM INIT

\n"); + env = zak_cgi_main_dump_env (NULL); + url = zak_cgi_url_new (NULL); zak_cgi_url_connect (url, "/(?[a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)", (ZakCgiUrlConnectedFunction)hook, str); zak_cgi_url_dispatch (url); - g_string_append_printf (str, "\n"); + g_string_append_printf (str, "
%s\n", env); zak_cgi_main_out (NULL, str->str); g_string_free (str, TRUE); -- 2.49.0