mirror of
git://git.psyced.org/git/psyced
synced 2024-08-15 03:25:10 +00:00
introducing TLS requirement for IRC users
This commit is contained in:
parent
372e704a58
commit
fbc563a94e
4 changed files with 28 additions and 2 deletions
|
@ -613,10 +613,15 @@ htget(prot, query, headers, qs) {
|
||||||
#ifdef CHALLENGE_MATCH
|
#ifdef CHALLENGE_MATCH
|
||||||
#include <sys/regexp.h>
|
#include <sys/regexp.h>
|
||||||
|
|
||||||
|
#define CHALOG(verb) log_file("CHALLENGE", "%s %s %O A:%O P:%O C:%O\n", \
|
||||||
|
MYNICK, verb, query_ip_name(), \
|
||||||
|
query["answer"], query["parameters"], headers["cookie"])
|
||||||
|
|
||||||
// maybe this all belongs into archetype.gen.. chesmo!
|
// maybe this all belongs into archetype.gen.. chesmo!
|
||||||
htget(prot, query, headers, qs, data, noprocess) {
|
htget(prot, query, headers, qs, data, noprocess) {
|
||||||
if (stringp(headers["cookie"]) && regmatch(headers["cookie"],
|
if (stringp(headers["cookie"]) && regmatch(headers["cookie"],
|
||||||
"challenge=complete&answer="+ md5(CHALLENGE_MATCH))) {
|
"challenge=complete&answer="+ md5(CHALLENGE_MATCH))) {
|
||||||
|
CHALOG("completes");
|
||||||
htnotify(query, headers, "_accomplished_web",
|
htnotify(query, headers, "_accomplished_web",
|
||||||
"Challenge accomplished in [_nick_place] by [_web_on] coming from [_web_from].");
|
"Challenge accomplished in [_nick_place] by [_web_on] coming from [_web_from].");
|
||||||
# ifdef CHALLENGE_REDIRECT
|
# ifdef CHALLENGE_REDIRECT
|
||||||
|
@ -638,6 +643,7 @@ htget(prot, query, headers, qs, data, noprocess) {
|
||||||
string nu = stringp(query["parameters"]) &&
|
string nu = stringp(query["parameters"]) &&
|
||||||
strlen(query["parameters"]) ?
|
strlen(query["parameters"]) ?
|
||||||
item +"?"+ query["parameters"] : item;
|
item +"?"+ query["parameters"] : item;
|
||||||
|
CHALOG("reloads");
|
||||||
htredirect(prot, nu, "Reload, please", 0, "Set-Cookie: psycplace=\"challenge=complete&answer="+ md5(CHALLENGE_MATCH) +"\"; path="+ item +";\n");
|
htredirect(prot, nu, "Reload, please", 0, "Set-Cookie: psycplace=\"challenge=complete&answer="+ md5(CHALLENGE_MATCH) +"\"; path="+ item +";\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -646,6 +652,7 @@ htget(prot, query, headers, qs, data, noprocess) {
|
||||||
// url that allows other people to bypass the challenge.
|
// url that allows other people to bypass the challenge.
|
||||||
// could add a timeout here...
|
// could add a timeout here...
|
||||||
htok3(prot, 0, "Set-Cookie: psycplace=\"challenge=given\"; path="+ item +";\n");
|
htok3(prot, 0, "Set-Cookie: psycplace=\"challenge=given\"; path="+ item +";\n");
|
||||||
|
CHALOG("challenges");
|
||||||
w("_PAGES_group_challenge", 0,
|
w("_PAGES_group_challenge", 0,
|
||||||
([ "_challenge" : htquote(CHALLENGE_QUESTION),
|
([ "_challenge" : htquote(CHALLENGE_QUESTION),
|
||||||
// if the user failed the challenge,
|
// if the user failed the challenge,
|
||||||
|
@ -655,6 +662,7 @@ htget(prot, query, headers, qs, data, noprocess) {
|
||||||
// printf("%O vs %O\n", query, headers);
|
// printf("%O vs %O\n", query, headers);
|
||||||
htnotify(query, headers, "_challenged_web",
|
htnotify(query, headers, "_challenged_web",
|
||||||
"[_nick_place] challenges [_web_on] coming from [_web_from].");
|
"[_nick_place] challenges [_web_on] coming from [_web_from].");
|
||||||
|
// (query [_web_query], cookie [_web_cookie]).");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -38,6 +38,12 @@ createUser(nick) {
|
||||||
return named_clone(IRC_PATH "user", nick);
|
return named_clone(IRC_PATH "user", nick);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef _flag_enable_unencrypted_users
|
||||||
|
ignorance(a) {
|
||||||
|
if (ME) next_input_to(#'ignorance);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
parse(a) {
|
parse(a) {
|
||||||
::parse(a);
|
::parse(a);
|
||||||
if (ME) next_input_to(#'parse);
|
if (ME) next_input_to(#'parse);
|
||||||
|
@ -158,15 +164,26 @@ tls_logon(a) {
|
||||||
|
|
||||||
logon(failure) {
|
logon(failure) {
|
||||||
if (this_interactive()) set_prompt(""); // case of failure?
|
if (this_interactive()) set_prompt(""); // case of failure?
|
||||||
next_input_to(#'parse);
|
|
||||||
#if __EFUN_DEFINED__(tls_query_connection_state)
|
#if __EFUN_DEFINED__(tls_query_connection_state)
|
||||||
|
# ifdef _flag_enable_unencrypted_users
|
||||||
if (tls_query_connection_state(ME) == 0) {
|
if (tls_query_connection_state(ME) == 0) {
|
||||||
// DONT ::logon if this is to be done by tls_logon
|
// DONT ::logon if this is to be done by tls_logon
|
||||||
::logon(failure);
|
::logon(failure);
|
||||||
}
|
}
|
||||||
|
# else
|
||||||
|
if (probably_private(ME) <= PRIVACY_SURVEILLED) {
|
||||||
|
log_file("IRCPLAIN", "[%s] %O(%O)\n", ctime(),
|
||||||
|
query_ip_number(), query_ip_name());
|
||||||
|
w("_error_mandatory_encryption", "Your connection does not satisfy our privacy requirements. Please fix your configuration.");
|
||||||
|
next_input_to(#'ignorance);
|
||||||
|
write("\n"); // why is this needed?
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
::logon(failure);
|
::logon(failure);
|
||||||
#endif
|
#endif
|
||||||
|
next_input_to(#'parse);
|
||||||
#ifdef _flag_log_sockets_IRC
|
#ifdef _flag_log_sockets_IRC
|
||||||
log_file("RAW_IRC", "\nnew connection %O from %O\n",
|
log_file("RAW_IRC", "\nnew connection %O from %O\n",
|
||||||
ME,
|
ME,
|
||||||
|
|
|
@ -33,7 +33,7 @@ inherit NET_PATH "queue";
|
||||||
// this mapping has to be *volatile* or it will carry old hostnames
|
// this mapping has to be *volatile* or it will carry old hostnames
|
||||||
// that may no longer be valid, then cause wild illogical behaviour
|
// that may no longer be valid, then cause wild illogical behaviour
|
||||||
volatile mapping localhosts = ([
|
volatile mapping localhosts = ([
|
||||||
"localhost": "127.0.0.1",
|
"localhost": "127.0.0.1", // what if remote hosts dns-resolve to "localhost" ?
|
||||||
"127.0.0.1": "localhost",
|
"127.0.0.1": "localhost",
|
||||||
// unusual but valid syntax for localhost
|
// unusual but valid syntax for localhost
|
||||||
// then again usually any 127.* leads to localhost so it's
|
// then again usually any 127.* leads to localhost so it's
|
||||||
|
|
|
@ -203,6 +203,7 @@ int probably_private(object source) {
|
||||||
// LPC variable, so it is fine we call it often
|
// LPC variable, so it is fine we call it often
|
||||||
|| query_ip_number(source) == __HOST_IP_NUMBER__
|
|| query_ip_number(source) == __HOST_IP_NUMBER__
|
||||||
# ifdef SECURE_IP_NUMBER
|
# ifdef SECURE_IP_NUMBER
|
||||||
|
// problem: apparently this macro isn't defined when library is compiled
|
||||||
|| SECURE_IP_NUMBER(query_ip_number(source))
|
|| SECURE_IP_NUMBER(query_ip_number(source))
|
||||||
# endif
|
# endif
|
||||||
// People coming from localhost have either made it
|
// People coming from localhost have either made it
|
||||||
|
|
Loading…
Reference in a new issue