summaryrefslogtreecommitdiff
path: root/daemon/httpauthd.c
diff options
context:
space:
mode:
authorStef Walter <stef@memberwebs.com>2004-04-24 22:38:50 +0000
committerStef Walter <stef@memberwebs.com>2004-04-24 22:38:50 +0000
commitcbbe71752d7f9c6204ab0f16600fe7f10490f203 (patch)
tree365e6e472d239d117b5f849c45f3c08fc6617c0a /daemon/httpauthd.c
parentff76efc3e5e1b0e4ca3b10b7402406f619509bba (diff)
Completed implementation of ldap/ntlm/simple handlers
Diffstat (limited to 'daemon/httpauthd.c')
-rw-r--r--daemon/httpauthd.c65
1 files changed, 37 insertions, 28 deletions
diff --git a/daemon/httpauthd.c b/daemon/httpauthd.c
index 8af5d7f..2b74586 100644
--- a/daemon/httpauthd.c
+++ b/daemon/httpauthd.c
@@ -15,17 +15,22 @@
#include "usuals.h"
#include "httpauthd.h"
+#include "defaults.h"
/* -----------------------------------------------------------------------
* Handlers Registered Here
*/
-extern ha_handler_t basic_handler;
+extern ha_handler_t simple_handler;
+extern ha_handler_t ldap_handler;
+extern ha_handler_t ntlm_handler;
/* This is the list of all available handlers */
-const ha_handler_t* g_handlerlist[] =
+ha_handler_t* g_handlerlist[] =
{
- &basic_handler
+ &simple_handler,
+ &ldap_handler,
+ &ntlm_handler
};
typedef struct httpauth_loaded
@@ -63,7 +68,7 @@ const char* kAuthHeaders[] =
/* The command definitions */
const httpauth_command_t kCommands[] =
{
- { "auth", REQTYPE_AUTH, 2, kAuthHeaders },
+ { "auth", REQTYPE_AUTH, 3, kAuthHeaders },
{ "quit", REQTYPE_QUIT, 0, 0 },
{ NULL, -1, -1 }
};
@@ -123,7 +128,7 @@ int main(int argc, char* argv[])
{
const char* conf = DEFAULT_CONFIG;
httpauth_thread_t* threads = NULL;
- const httpauth_loaded_t* h;
+ httpauth_loaded_t* h;
int daemonize = 1;
ha_buffer_t cbuf;
int r, i, sock;
@@ -392,7 +397,7 @@ int httpauth_read(int ifd, ha_request_t* req,
/* This guarantees a bit of memory allocated, and resets buffer */
ha_bufreset(buf);
- r = ha_readline(ifd, buf);
+ r = ha_bufreadline(ifd, buf);
if(r == -1)
return -1;
@@ -408,7 +413,7 @@ int httpauth_read(int ifd, ha_request_t* req,
}
/* Find the first space in the line */
- t = ha_parseword(buf, " \t");
+ t = ha_bufparseword(buf, " \t");
if(t)
{
@@ -429,7 +434,7 @@ int httpauth_read(int ifd, ha_request_t* req,
/* Now parse the arguments if any */
for(i = 0; i < cmd->args; i++)
- req->args[i] = ha_parseword(buf, " \t");
+ req->args[i] = ha_bufparseword(buf, " \t");
/* Now skip anything else we have in the buffer */
@@ -449,7 +454,7 @@ int httpauth_read(int ifd, ha_request_t* req,
if(!more)
break;
- r = ha_readline(ifd, buf);
+ r = ha_bufreadline(ifd, buf);
if(r == -1)
return -1;
@@ -477,7 +482,7 @@ int httpauth_read(int ifd, ha_request_t* req,
with a space continues the previous header */
if(valid && i > 0)
{
- t = ha_parseline(buf, 0);
+ t = ha_bufparseline(buf, 0);
if(t)
{
char* t2 = (char*)req->headers[i - 1].data + strlen(req->headers[i - 1].data);
@@ -492,7 +497,7 @@ int httpauth_read(int ifd, ha_request_t* req,
{
if(i < MAX_HEADERS)
{
- t = ha_parseword(buf, ":");
+ t = ha_bufparseword(buf, ":");
if(t)
{
@@ -512,7 +517,7 @@ int httpauth_read(int ifd, ha_request_t* req,
if(t)
{
req->headers[i].name = t;
- req->headers[i].data = ha_parseline(buf, 1);
+ req->headers[i].data = ha_bufparseline(buf, 1);
i++;
}
@@ -631,11 +636,15 @@ int httpauth_ready(int ofd, ha_buffer_t* buf)
httpauth_loaded_t* h;
/* We send a ready banner to our client */
- ha_bufnext(buf);
for(h = g_handlers; h; h = h->next)
- ha_bufcat(buf, (h == g_handlers) ? "" : " ",
+ {
+ if(h != g_handlers)
+ ha_bufjoin(buf);
+
+ ha_bufmcat(buf, (h != g_handlers) ? " " : "",
h->ctx.name, NULL);
+ }
if(ha_buferr(buf))
return httpauth_respond(ofd, HA_SERVER_ERROR, NULL);
@@ -731,7 +740,7 @@ finally:
int process_auth(ha_request_t* req, ha_response_t* resp,
ha_buffer_t* outb)
{
- const httpauth_loaded_t* h;
+ httpauth_loaded_t* h;
/* Clear out our response */
memset(resp, 0, sizeof(*resp));
@@ -769,7 +778,7 @@ int process_auth(ha_request_t* req, ha_response_t* resp,
*/
ha_context_t* config_addhandler(ha_buffer_t* buf, const char* alias,
- const ha_handler_t* handler, const ha_context_t* defaults)
+ ha_handler_t* handler, const ha_context_t* defaults)
{
httpauth_loaded_t* loaded;
int len = sizeof(httpauth_loaded_t) + handler->context_size;
@@ -834,7 +843,7 @@ int config_parse(const char* file, ha_buffer_t* buf)
int fd;
const char** t;
char* name;
- const char* value;
+ char* value;
int more = 1;
int recog;
int r, i;
@@ -856,7 +865,7 @@ int config_parse(const char* file, ha_buffer_t* buf)
{
ha_bufskip(buf);
- if((more = ha_readline(fd, buf)) == -1)
+ if((more = ha_bufreadline(fd, buf)) == -1)
return -1;
line++;
@@ -876,11 +885,11 @@ int config_parse(const char* file, ha_buffer_t* buf)
/* Check for a handler */
if(ha_bufchar(buf) == '[')
{
- const ha_handler_t* handler = NULL;
+ ha_handler_t* handler = NULL;
const char* x;
ha_bufeat(buf);
- name = ha_parseline(buf, 1);
+ name = ha_bufparseline(buf, 1);
if(!name || name[strlen(name) - 1] != ']')
errx(1, "configuration section invalid (line %d)", line);
@@ -905,7 +914,7 @@ int config_parse(const char* file, ha_buffer_t* buf)
errx(1, "unknown handler type '%s' (line %d)", name, line);
/* If we had a last handler then add it to handlers */
- loaded = config_addhandler(buf, name, handler, defaults);
+ ctx = config_addhandler(buf, name, handler, &defaults);
/* Rest doesn't apply to handler headers */
continue;
@@ -913,14 +922,14 @@ int config_parse(const char* file, ha_buffer_t* buf)
/* Parse out the name */
- name = ha_parseword(buf, ":");
+ name = ha_bufparseword(buf, ":");
if(!name || !name[0])
errx(1, "configuration file invalid (line %d)", line);
strlwr(name);
/* And get the rest of the line */
- value = ha_parseline(buf, 1);
+ value = ha_bufparseline(buf, 1);
if(value == NULL)
errx(1, "configuration missing value at (line %d)", line);
@@ -939,8 +948,8 @@ int config_parse(const char* file, ha_buffer_t* buf)
else if(strcmp("maxthreads", name) == 0)
{
- if(ha_confint(value, 1, 256, &g_maxthreads) == -1)
- errx(1, "invalid value for '%s'. must be a number between 1 and 256", name);
+ if(ha_confint(name, value, 1, 256, &g_maxthreads) == -1)
+ exit(1);
recog = 1;
}
@@ -951,13 +960,13 @@ int config_parse(const char* file, ha_buffer_t* buf)
{
if(strcmp("alias", name) == 0)
{
- loaded->alias = value;
+ ctx->name = value;
recog = 1;
}
- if(loaded->ctx.handler->f_config)
+ if(ctx->handler->f_config)
{
- r = (loaded->ctx.handler->f_config)(&(loaded->ctx), name, value);
+ r = (ctx->handler->f_config)(ctx, name, value);
if(r == -1)
return -1;