From: b Date: Wed, 23 Dec 2015 09:01:46 +0000 (+0000) Subject: Started working on interface, X-Git-Url: http://bicyclesonthemoon.info/git-projects/?a=commitdiff_plain;h=bb81a87ec2e427af5b0040e2aaf092ec8bf0a105;p=yplom%2Ffacebug1 Started working on interface, key() moved to library git-svn-id: svn://botcastle1b/yplom/facebug1@10 7dec801f-c475-4e67-ba99-809552d69c55 --- diff --git a/bot.1.pl b/bot.1.pl index 1ddcf58..04a9288 100644 --- a/bot.1.pl +++ b/bot.1.pl @@ -10,7 +10,9 @@ use strict; use Fcntl; use File::Copy; ###PROXY_LIB; +###FACEBUG_LIB; use proxy_lib qw(url2path urldiv2path path2urldiv getcgi divideurl joinurl readconfigfile entitydecode urldecode readheaderfile); +use facebug_lib qw(key); use POSIX qw(strftime); ###ARCH_PATH; @@ -1329,24 +1331,6 @@ sub taginfo { return %tag; } -# Function to generate a random hexadecimal number (key) with a defined number -# of bits. -sub key { - (my $bits) = @_; - my $p = int($bits / 16); - my $q = $bits % 16; - my $keytext; - - if ($q){ - my $r = int(($q+3)/4); - $keytext=sprintf('%0'.$r.'x',int(rand(1<<$q))); - } - for(my $ind = 0; $ind < $p; ++$ind){ - $keytext.=sprintf('%04x',int(rand(65536))); - } - return $keytext; -} - # The function to save an image from proxy archive # Arguments: # 1 - url of image diff --git a/configure.pl b/configure.pl index 423c95d..3d3abaf 100644 --- a/configure.pl +++ b/configure.pl @@ -32,29 +32,44 @@ close ($configfile); # Now generate things to be inserted. -$def{'PROXY_ARCH_PATH'} = "use constant PROXY_ARCH_PATH => '".$set{'proxy_data_path'}."archive/';"; -$def{'ARCH_PATH'} = "use constant ARCH_PATH => '".$set{'data_path'}."group/';"; -$def{'GROUPSETTINGS_PATH'}= "use constant GROUPSETTINGS_PATH => '".$set{'data_path'}."groupsettings/';"; -$def{'KEY_BITS'} = "use constant KEY_BITS => ".$set{'key_bits'}.";"; -$def{'MAX_REDIRECTIONS'} = "use constant MAX_REDIRECTIONS => ".$set{'max_redirections'}.";"; - - -$def{'PROXY_LIB'} = "use lib '".$set{'proxy_lib_path'}."';"; +$def{'PROXY_ARCH_PATH'} = "use constant PROXY_ARCH_PATH => '".$set{'proxy_data_path'}."archive/';"; +$def{'ARCH_PATH'} = "use constant ARCH_PATH => '".$set{'data_path'}."group/';"; +$def{'GROUPSETTINGS_PATH'} = "use constant GROUPSETTINGS_PATH => '".$set{'data_path'}."groupsettings/';"; +$def{'KEY_BITS'} = "use constant KEY_BITS => ".$set{'key_bits'}.";"; +$def{'MAX_REDIRECTIONS'} = "use constant MAX_REDIRECTIONS => ".$set{'max_redirections'}.";"; +$def{'IF_CSS_PATH'} = "use constant IF_CSS_PATH => '".$set{'interface_path'}."/if.css';"; +$def{'INTERFACE_PATH'} = "use constant INTERFACE_PATH => '".$set{'interface_path'}."/view';"; +$def{'LOGIN_PATH'} = "use constant LOGIN_PATH => '".$set{'interface_path'}."/view/login';"; +$def{'LIST_PATH'} = "use constant LIST_PATH => '".$set{'interface_path'}."/view/list';"; +$def{'GROUP_PATH'} = "use constant GROUP_PATH => '".$set{'interface_path'}."/view/group';"; +$def{'PASS_PATH'} = "use constant PASS_PATH => '".$set{'data_path'}."pass/';"; +$def{'ACCESS_PATH'} = "use constant ACCESS_PATH => '".$set{'data_path'}."access/';"; +$def{'TIMEOUT_UNLOCK'} = "use constant TIMEOUT_UNLOCK => ".$set{'timeout_unlock'}.";"; +$def{'TIMEOUT_INACT'} = "use constant TIMEOUT_INACT => ".$set{'timeout_inact'}.";"; + + +$def{'PROXY_LIB'} = "use lib '".$set{'proxy_lib_path'}."';"; +$def{'FACEBUG_LIB'} = "use lib '".$set{'lib_path'}."';"; $def{'PATH'} = "\$ENV{'PATH'} = '".$set{'path'}."';"; $def{'PERL'} = "#!".$set{'perl'}; -$def{'BOT_CRONTAB'} = $set{'bot_crontab'}.' '.$set{'bin_path'}.'bot'.(($set{'bot_args'} ne '')?(' '.$set{'bot_args'}):''); +$def{'INTERFACE_PL'} = '#define INTERFACE_PL "'.$set{'bin_path'}.'interface.pl"'; +$def{'INTERFACE_PL_ERRLOG'} = '#define INTERFACE_PL_ERRLOG "'.$set{'log_path'}.'interface-stderr.log"'; + +$def{'BOT_CRONTAB'} = $set{'bot_crontab'}.' '.$set{'bin_path'}.'bot'.(($set{'bot_args'} ne '')?(' '.$set{'bot_args'}):'').' >'.$set{'log_path'}.'bot.log'; $def{'CC'} = 'CC='.$set{'gcc'}; $def{'CF'} = 'CF='.$set{'c_flags'}; $def{'PL'} = 'PL='.$set{'perl'}; $def{'MV'} = 'MV='.$set{'mv'}; -$def{'CP'} = 'CM='.$set{'cp'}; +$def{'CP'} = 'CP='.$set{'cp'}; $def{'RM'} = 'RM='.$set{'rm'}; $def{'OD'} = 'OD='.$set{'bin_path'}; +$def{'WD'} = 'WD='.$set{'www_path'}; +$def{'LD'} = 'LD='.$set{'lib_path'}; $def{'CM'} = 'CM='.$set{'chmod'}; diff --git a/facebug_lib.1.pm b/facebug_lib.1.pm new file mode 100644 index 0000000..360cb4f --- /dev/null +++ b/facebug_lib.1.pm @@ -0,0 +1,34 @@ +# facebug_lib.pm is generated from facebug_lib.1.pm + +package facebug_lib; + +use strict; +#use warnings +use Exporter; +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); + +$VERSION = 0.000000; +@ISA = qw(Exporter); +@EXPORT = (); +@EXPORT_OK = qw(key); +%EXPORT_TAGS = (); + +# Function to generate a random hexadecimal number (key) with a defined number +# of bits. +sub key { + (my $bits) = @_; + my $p = int($bits / 16); + my $q = $bits % 16; + my $keytext; + + if ($q){ + my $r = int(($q+3)/4); + $keytext=sprintf('%0'.$r.'x',int(rand(1<<$q))); + } + for(my $ind = 0; $ind < $p; ++$ind){ + $keytext.=sprintf('%04x',int(rand(65536))); + } + return $keytext; +} + +1; diff --git a/if.css b/if.css new file mode 100644 index 0000000..45f55e7 --- /dev/null +++ b/if.css @@ -0,0 +1,235 @@ +/* Currently, it's identical to botm.css, the default style of + 1190.bicyclesonthemoon.info. May be changed in the future. */ + +html +{ + background-color: #ffffff; + border-color: #000000; + color: #000000; +} +a +{ + border-color: #0057af; + color: #0057af; + text-decoration:underline; +} +a:visited +{ + border-color: #bb6622; + color: #bb6622; +} +a:hover +{ + border-color: #bb6622; + color: #bb6622; +} +a:hover:visited +{ + border-color: #0057af; + color: #0057af; +} +::selection +{ + color: #ffffff; + background-color: #bb6622; +} +.br +{ + border-color: #bb6622!important; + color: #bb6622!important; +} +.ni +{ + border-color: #0057af!important; + color: #0057af!important; +} +.bi +{ + border-color: #ffffff!important; + color: #ffffff!important; +} + +form.hl { + display: inline; +} + +table.pl +{ + border-color: #0057af; + border-width: 4px 16px 16px 16px; + border-style: solid; + border-spacing: 0px; +} +div.pl +{ + border-color: #0057af; + border-width: 4px 16px 16px 16px; + border-style: solid; + /* border-spacing: 0px; */ +} +div.in +{ + display: inline-block; +} +div.le +{ + float: left; +} +div.pr +{ + float: right; +} +.tp +{ + text-align: right; +} +div.pls +{ + text-align: center; + font-weight: bold; + color: #ffffff; + background-color: #0057af; + width: 100%; +} +div.plt +{ + color: #ffffff; + background-color: #0057af; + width: 100%; + clear: both; +} +div.plw +{ + background-color: #ffffff; + color: #000000; + padding: 4px; + clear: both; +} +tr.plw +{ + background-color: #ffffff; + color: #000000; +} +tr.plv +{ + background-color: #D9ECFF; + color: #000000; +} +tr.plt +{ + color: #ffffff; + background-color: #0057af; +} +tr.pls +{ + text-align: center; + font-weight: bold; + color: #ffffff; + background-color: #0057af; +} +td.plk +{ + padding: 4px 8px; +} +input.hl { + background:none!important; + border:none!important; + padding:0!important; +/* font-family:inherit; + font-size:inherit; */ + font: inherit; + text-decoration:underline; + border-color: #0057af; + color: #0057af; +} +input.hl:hover { + border-color: #bb6622; + color: #bb6622; +} +input.pt +{ + border-color: #0057af; + color: #000000; + background-color: #ffffff; + border-width: 2px; + border-style: solid; + margin: 2px; +} +input.pt:focus +{ + border-color: #bb6622; +} +select.pk +{ + border-color: #0057af; + color: #000000; + background-color: #ffffff; + border-width: 2px; + border-style: solid; + margin: 2px; +} +select.pk:focus +{ + border-color: #bb6622; +} +input.pk +{ + border-color: #0057af; + color: #000000; + background-color: #ffffff; + border-width: 2px; + border-style: solid; + margin: 2px; +} +input.pk:focus +{ + border-color: #bb6622; +} +textarea.pt +{ + border-color: #0057af; + color: #000000; + background-color: #ffffff; + border-width: 0px; + border-style: solid; + width: 100%; + resize: none; +} +blockquote.pq +{ + color: #000000; + background-color: #ffffff; + text-decoration: inherit; + font: inherit; + border-color: #bb6622; + border-width: 4px; + border-style: solid; + padding: 2px; +} +cite.pq +{ + text-decoration: inherit; + font: inherit; + /* font-weight: bold; */ +} +dl.pq +{ + color: #000000; + background-color: #ffffff; + border-color: #0057af; + border-width: 4px; + border-style: solid; + padding: 2px; +} +dt.pq +{ + color: #0057af; + font-weight: bold; +} +code.pq +{ + max-height: 200px; + overflow: auto; + white-space: normal; + display: block; +} \ No newline at end of file diff --git a/interface.1.c b/interface.1.c new file mode 100644 index 0000000..183bba8 --- /dev/null +++ b/interface.1.c @@ -0,0 +1,18 @@ +// interface.c is generated from interface.1.c +// +// This is the wrapper for interface.pl. +// It's run with SETUID to have accesss to some files where the www server +// should not. That's why it has a C wrapper. In modern systems running scripts +// directly with SETUID is considered unsafe and not allowed. + +#include +#include + +###INTERFACE_PL; +###INTERFACE_PL_ERRLOG; + +int main(int argc, char *argv[], char *envp[]) +{ + freopen(INTERFACE_PL_ERRLOG,"at",stderr); + return execve(INTERFACE_PL,argv,envp); +} diff --git a/interface.1.pl b/interface.1.pl new file mode 100644 index 0000000..7f8c512 --- /dev/null +++ b/interface.1.pl @@ -0,0 +1,408 @@ +###PERL; + +# interface.pl is generated from interface.1.pl + +#interface list/thread/post/postreply ??? + +use strict; +#use warnings; +###PROXY_LIB; +###FACEBUG_LIB; +use proxy_lib qw(entityencode getcgi urldecode readconfigfile); +use facebug_lib qw(key); + +###IF_CSS_PATH; +###LOGIN_PATH; +###PASS_PATH; +###ACCESS_PATH; +###INTERFACE_PATH; +###LIST_PATH; +###GROUP_PATH; +###KEY_BITS; +###TIMEOUT_UNLOCK; +###TIMEOUT_INACT; +###GROUPSETTINGS_PATH; + +my %http; +my %cgi; + +my $mode; +my $method; +my $IP; +my $id; +my $skey; + +my $time = time(); +srand ($time-$$); + +delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; +###PATH; + + +if ($ENV{'REQUEST_METHOD'} =~ /^(HEAD|GET|POST)$/) { + $method=$1; +} +else{ + exit failpage("Status: 405 Method Not Allowed\nAllow: GET, POST, HEAD\n","405 Method Not Allowed","The interface does not support the $ENV{'REQUEST_METHOD'} method."); +} + +%http = gethttpheader (\%ENV); +%cgi = getcgi($ENV{'QUERY_STRING'}); + +if ($method eq 'POST') { + if ($http{'content-type'} eq 'application/x-www-form-urlencoded') { + my %cgipost=getcgi( ); + foreach my $ind (keys %cgipost) { + $cgi{$ind}=$cgipost{$ind}; + } + } + else{ + exit failpage("Status: 415 Unsupported Media Type\n","415 Unsupported Media Type","Unsupported Content-type: $http{'content-type'}."); + } +} + +if ($ENV{'PATH_INFO'} =~ /^\/(list|group|thread|post|image|login|logout)(\/((.+)\/?)?)?$/) { + $mode = $1; + $id = $4; +} +elsif ($ENV{'PATH_INFO'} =~ /^\/?$/) { + $mode = 'list'; + $id = ''; +} +else{ + exit failpage("Status: 404 Not Found\n","404 Not Found\n","Path \"$ENV{'PATH_INFO'}\" is not part of the interface."); +} + +if($cgi{'id'} ne '') { + $id = $cgi{'id'}; +} + + +if(defined($http{'expect'})) { + exit failpage("Status: 406 Not Acceptable\n","406 Not Acceptable","\"Expect\" header field not supported."); +} + +if ($ENV{'REMOTE_ADDR'} =~ /^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)$/) { + $IP=$1; +} +else{ + exit failpage("Status: 500 Internal Server Error\n","500 Internal Server Error","Can't get your IP."); +} + +if ($mode !~ /^(login|logout)$/) { + unless ($skey=access($time,$IP,$cgi{'skey'})) { + exit loginpage ("You must log in to access this $mode.","Status: 403 Forbidden\n"); + } + if($id =~ /^([0-9\/]*)$/) { + $id = $1; + } + elsif ($mode !~ /^(list)$/) { + exit failpage("Status: 404 Not Found\n","404 Not Found\n"," \"$id\" is not a valid $mode ID."); + } +} + + +if($mode eq 'login') { + exit login(); +} +elsif ($mode eq 'list') { + exit list(); +} + +exit loginpage ("$mode --- $id"); + + +sub list { + my $dir; + my $groupfile; + my %group; + my $even; + my $groupid; + + if ($method eq 'HEAD') { + print "Status: 200 Ok\n\n"; + return; + } + + opendir ($dir, GROUPSETTINGS_PATH) or return failpage("Status: 500 Internal Server Error\n","500 Internal Server Error","Can't access group list."); + + print "Content-type: text/html\n\n"; + print ''."\n"; + print ''."\n"; + print 'List of facebook groups'."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print '

List of facebook groups

'."\n"; + print ''."\n"; + print ''."\n"; + + $even=0; + + ###PAGE??? + while (defined ($groupid = readdir $dir)) { + if ($groupid =~ /^([0-9]+)$/) { + %group = readconfigfile(GROUPSETTINGS_PATH.$1); + } + else { + next; + } + if ($group{'id'} =~ /^([0-9]+)$/) { + $groupid=$1; + } + else { + next; + } + $even = !$even; + print ''."\n"; + } + + print '
Available groups
nameaction
'.entityencode($group{'name'}).'
'."\n"; + closedir ($dir); +} + +sub access { + (my $time, my $ip, my $key) = @_; + my $timeout_unlock = TIMEOUT_UNLOCK*60; + my $timeout_inact = TIMEOUT_INACT*60; + my $accesspath=''; + my $accessfile; + my $lasttime; + my $unlocktime; + my $lastip; + my $username; + + if($key =~ /^([0-9A-Fa-f]+)$/){ + $key=$1; + } + else{ + return 0; + } + if ($ip =~ /^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)$/) { + $ip = $1; + } + else { + return 0; + } + if ($time =~ /^([0-9]+)$/) { + $time=int($1); + } + else{ + return 0; + } + + $accesspath=ACCESS_PATH.$key; + + if (! (-e $accesspath)) { + return 0; + } + + elsif (open ($accessfile,"+<",$accesspath)) { + unless (flock ($accessfile, 2)) { + close ($accessfile); + return 0; + } + $unlocktime=<$accessfile>; + $lasttime=<$accessfile>; + $lastip=<$accessfile>; + $username=<$accessfile>; + + $unlocktime =~ s/[\r\n]//g; + $lasttime =~ s/[\r\n]//g; + $lastip =~ s/[\r\n]//g; + $username =~ s/[\r\n]//g; + + if ($unlocktime =~ /^([0-9]+)$/) { + $unlocktime=int($1); + } + else { + close ($accessfile); + return 0; + } + if ($lasttime =~ /^([0-9]+)$/) { + $lasttime=int($1); + } + else { + close ($accessfile); + return 0; + } + if ($lastip =~ /^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)$/) { + $ip = $1; + } + else { + close ($accessfile); + return 0; + } + + if ((abs($time-$unlocktime)>$timeout_unlock) or (abs($time-$lasttime)>$timeout_inact) or ($ip ne $lastip)){ + close ($accessfile); + unlink $accesspath; + return 0; + } + else { + if (seek($accessfile, 0, 0)) { + print $accessfile "$unlocktime\n$time\n$ip\n$username\n"; + truncate ($accessfile , tell($accessfile)); + } + close ($accessfile); + return $key; + } + } + else { + return 0; + } +} + +sub login { + my $passpath; + my $passfile; + my $accesspath; + my $accessfile; + my $pass; + my $key; + my $username; + + if($cgi{'username'} eq '') { + return loginpage ("Username missing.","Status: 403 Forbidden\n"); + } + if($cgi{'password'} eq '') { + return loginpage ("Password missing.","Status: 403 Forbidden\n"); + } + if ($cgi{'username'} =~ /^([A-Za-z0-9_]+)$/){ + $username = $1; + } + else { + return loginpage('Wrong username or password.',"Status: 403 Forbidden\n"); + } + + $passpath = PASS_PATH.$username; + open($passfile, "<", $passpath) or return loginpage('Wrong username or password.',"Status: 403 Forbidden\n"); + $pass = <$passfile>; + close($passfile); + $pass =~ s/[\r\n]//g; + $pass = urldecode($pass); + + if ($pass ne $cgi{'password'}){ + return loginpage('Wrong username or password.',"Status: 403 Forbidden\n"); + } + + $key=key(KEY_BITS); + $accesspath=ACCESS_PATH.$key; + + open ($accessfile,">",$accesspath) or return loginpage("Couldn't create temporary file $accesspath.","Status: 500 Internal Server Error\n"); + print $accessfile "$time\n$time\n$IP\n$username\n"; + close ($accessfile); + + if($method eq 'HEAD') { + print "Status: 200 Ok\n"; + return; + } + print "Content-type: text/html\n\n"; + print ''."\n"; + print ''."\n"; + print 'Login successful'."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print '

Login successful

'."\n"; + print '

You have successfully logged in.

'."\n"; + print '
'."\n"; + print '
'."\n"; + print ''."\n"; + print '
'."\n"; +} + + +sub gethttpheader { + (my $env) = @_; + + my %http; + + foreach my $ind (keys %$env) { + my $name = ''; + my $value= ''; + + if ($ind =~ /^HTTP_([A-Z0-9_]+)$/) { + $name=$1; + } + elsif ($ind =~ /^(CONTENT_[A-Z0-9_]+)$/) { + $name=$1; + } + else{ + next; + } + $name =~ s/_/-/g; + $name = lc($name); + if ($$env{$ind} =~ /^([\x20-\x7e]*)$/) { + $value=$1; + } + else { + next; + } + $http{$name}=$value; + } + return %http; +} + + +# Function for showing the login form page. +# arguments: 1 - additional message (optional), 2 - additional header fields +# (optional) +sub loginpage { + (my $message, my $header)=@_; + if($header ne ''){ + print $header; + } + if($method eq 'HEAD') { + print "\n"; + return; + } + print "Content-type: text/html\n\n"; + print ''."\n"; + print ''."\n"; + print 'Log in to the facebook interface'."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print '

Log in to the facebook interface

'."\n"; + if($message ne ''){ + print '

'.entityencode($message).'

'."\n"; + } + print '
'."\n"; + print ''."\n"; + print ''."\n"; + print '
Username:
Password:
'."\n"; + print '
'."\n"; +} + +sub failpage { + (my $header, my $title, my $message)=@_; + if($header ne ''){ + print $header; + } + if($method eq 'HEAD') { + print "\n"; + return; + } + print "Content-type: text/html\n\n"; + print ''."\n"; + print ''."\n"; + if($title ne ''){ + print ''.entityencode($title).''."\n"; + } + print ''."\n"; + print ''."\n"; + print ''."\n"; + if($title ne ''){ + print "

$title

"."\n"; + } + if($message ne ''){ + print '

'.entityencode($message).'

'."\n"; + } + print '
'; + if($cgi{'skey'} =~ /^([A-Fa-f0-9]+)$/){ + print ''; + } + print '
'."\n"; + print ''."\n"; +} diff --git a/makefile.1.mak b/makefile.1.mak index f502c24..9472bf7 100644 --- a/makefile.1.mak +++ b/makefile.1.mak @@ -8,28 +8,45 @@ ###RM; ###CM; ###OD; +###WD; +###LD; -all: moveout copyout remove config.txt +all: moveout moveoutlib copyoutwww remove config.txt -moveout: bot setuid exec - $(MV) bot $(OD) +moveout: bot interface interface.pl setuid exec + $(MV) bot interface interface.pl $(OD) -copyout: setuid exec -# $(CP) access.pl $(OD) +moveoutlib: facebug_lib.pm setuid exec + $(MV) facebug_lib.pm $(LD) -setuid: - # $(CM) u+s proxy access +copyoutwww: if.css setuid exec + $(CP) if.css $(WD) -exec: bot - $(CM) +x bot +setuid: interface + $(CM) u+s interface -remove: copyout moveout setuid exec - # $(RM) proxy.c access.c +exec: bot interface.pl + $(CM) +x bot interface.pl +remove: interface interface.c copyoutwww moveout moveoutlib setuid exec + $(RM) interface.c + + +interface.pl: interface.1.pl configure.pl settings + $(PL) configure.pl settings interface.pl + +interface.c: interface.1.c configure.pl settings + $(PL) configure.pl settings interface.c + +interface: interface.c + $(CC) $(CF) -o interface interface.c bot: bot.1.pl configure.pl settings $(PL) configure.pl settings bot config.txt: config.1.txt configure.pl settings $(PL) configure.pl settings config.txt + +facebug_lib.pm: facebug_lib.1.pm configure.pl settings + $(PL) configure.pl settings facebug_lib.pm diff --git a/settings b/settings index 2cff094..3bb3b7b 100644 --- a/settings +++ b/settings @@ -6,11 +6,20 @@ data_path = /yplom/data/facebug1/ #where the software will remember data; subdi log_path = /yplom/log/facebug1/ #where the software will remember data tmp_path = /yplom/tmp/facebug1/ #for temporary fies www_path = /yplom/www/facebug1/ #for the www server unused +lib_path = /yplom/lib/facebug1/ proxy_bin_path = /yplom/bin/proxy/ #where the proxy software is located proxy_data_path = /yplom/data/proxy/ #where the proxy remembers data proxy_lib_path = /yplom/lib/proxy/ #where the proxy library is located +interface_domain = 1190.bicyclesonthemoon.info +interface_path = /facebug #Please WITHOUT "/" at the end! It's an URL path and + #not a directory path + +#Time in minutes +timeout_unlock = 90 # lock the proxy this many minutes after unlocking +timeout_inact = 15 # lock the proxy this many minutes after last activity + path = /usr/local/bin:/usr/bin:/bin #The path environment variable. Must be #overwritten if SETUID. Otherwise #launching programs may fail. (Perl @@ -26,7 +35,7 @@ gcc = /usr/bin/gcc gzip = /bin/gzip c_flags = -g -Wall -key_bits = 256 +key_bits = 512 max_redirections = 16 log_size_limit = 65536 # How big can a log file be