X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=server%2Flogin.c;h=a2a11e9a903cb4de91b5508b819c4ed6efc8595b;hb=1780973fb10ed5ef2a69d861b14e8f58cdc4369f;hp=2aa702d65fac384fdf8bc9e2f3afb86b4d061d70;hpb=e2c333035c595ef6e48ff66d46a811ca17f97a26;p=matches%2FMCTX3420.git diff --git a/server/login.c b/server/login.c index 2aa702d..a2a11e9 100644 --- a/server/login.c +++ b/server/login.c @@ -149,8 +149,9 @@ int Login_LDAP_Bind(const char * uri, const char * dn, const char * pass) * @param params - Parameter string, UNUSED */ void Logout_Handler(FCGIContext * context, char * params) -{ +{ FCGI_ReleaseControl(context); + FCGI_AcceptJSON(context, "Logged out", "0"); } @@ -161,13 +162,6 @@ void Logout_Handler(FCGIContext * context, char * params) */ void Login_Handler(FCGIContext * context, char * params) { - - if (context->control_key[0] != '\0') - { - FCGI_RejectJSON(context, "Already logged in."); - return; - } - char * user; // The username supplied through CGI char * pass; // The password supplied through CGI @@ -216,16 +210,19 @@ void Login_Handler(FCGIContext * context, char * params) char dn[BUFSIZ]; // On a simple LDAP server: - int len = sprintf(dn, "uid=%s,%s", user, g_options.ldap_base_dn); + //int len = sprintf(dn, "uid=%s,%s", user, g_options.ldap_base_dn); // At UWA (hooray) - //char * user_type = (user[0] != '0') : "Students" ? "Staff"; - //int len = sprintf(dn, "cn=%s,ou=%s", user, user_type, g_options.ldap_dn_base); + char * user_type = "Students"; + if (user[0] == '0') + user_type = "Staff"; + int len = sprintf(dn, "cn=%s,ou=%s,%s", user, user_type, g_options.ldap_base_dn); if (len >= BUFSIZ) { FCGI_RejectJSON(context, "DN too long! Recompile with increased BUFSIZ"); + return; } authenticated = (Login_LDAP_Bind(g_options.auth_uri, dn, pass) == LDAP_SUCCESS); @@ -247,14 +244,22 @@ void Login_Handler(FCGIContext * context, char * params) if (!authenticated) { - FCGI_RejectJSON(context, "Authentication failure."); - return; + FCGI_RejectJSONEx(context, STATUS_UNAUTHORIZED, "Authentication failure."); } + else + { + if (FCGI_LockControl(context, false)) + { + //Todo: change this to something better than the username if using LDAP. + snprintf(context->friendly_name, 31, "%s", user); + FCGI_EscapeText(context->friendly_name); //Don't break javascript pls - FCGI_LockControl(context, false); - - // Give the user a cookie - FCGI_PrintRaw("Content-type: text\r\n"); - FCGI_PrintRaw("Set-Cookie: %s\r\n\r\n", context->control_key); - FCGI_PrintRaw("Logged in"); + // Give the user a cookie + FCGI_AcceptJSON(context, "Logged in", context->control_key); + } + else + { + FCGI_RejectJSON(context, "Someone else is already logged in"); + } + } }