blob: 58a2d9aea7e7b69a5fb17abc60fd7b7195e4cf64 [file] [log] [blame]
#include "shttpd_defs.h"
#include "adapter.h"
#ifdef SHTTPD_GSS
void getGssName(struct conn *c, char **user);
#endif
void
shttpd_get_credentials(struct shttpd_arg *arg,
char **user, char **pwd)
{
char *p, *pp;
struct conn *c = (struct conn *)arg->priv;
struct vec *auth_vec = &c->ch.auth.v_vec;
if (auth_vec->len > 10 && !strncasecmp(auth_vec->ptr, "Basic ", 6)) {
char buf[4096];
int l;
p = (char *) auth_vec->ptr + 5;
while ((*p == ' ') || (*p == '\t')) {
p++;
}
pp = p;
while ((*p != ' ') && (*p != '\t') && (*p != '\r')
&& (*p != '\n') && (*p != 0)) {
p++;
}
if (pp == p) {
return ;
}
*p = 0;
l = ws_base64_decode(pp, p - pp, buf, 4095);
if (l <= 0) {
return ;
}
buf[l] = 0;
p = buf;
pp = p;
p = strchr(p, ':');
if (p == NULL) {
return ;
}
*p++ = 0;
*user = u_strdup(pp);
*pwd = u_strdup(p);
}
#ifdef SHHTPD_GSS
else if(!my_strncasecmp(auth_vec->ptr, "Kerberos ", 9))
{
getGssName(c, user);
*pwd = 0;
}
#endif
}
char *shttpd_reason_phrase(int code)
{
struct http_code_map {
int code;
char *reason_phrase;
};
struct http_code_map maps[] = {
{200, "OK"},
{400, "Bad request"},
{401, "Unauthorized"},
{403, "Forbidden"},
{404, "Not found"},
{500, "Internal Error"},
{501, "Not implemented"},
{415, "Unsupported Media Type"},
{0, NULL}
};
int i = 0;
while(maps[i].code) {
if(maps[i].code == code)
return maps[i].reason_phrase;
i++;
}
return NULL;
}