On 28 Sep 2010 20:08:14 GMT, Rob <nomail@example.com> wrote:
> Ik vraag me af of het ook mogelijk is om in een Apache configuratie
> (de .conf files of .htaccess files) een enkele file te specificeren
> waar acties aan moeten hangen (authenticatie in dit geval).
>
> Ik heb de <Directory> <Location> en <Files> directives uitgebreid
> bestudeerd maar alles wijst er op dat je altijd praat over een
> directory EN ALLE SUBDIRECTORIES als je iets instelt.
>
> Bijv als ik <Files "index.pl"> neerzet in een .htaccess file in een
> bepaalde directory, dan werkt dit niet alleen voor de index.pl in
> die directory maar ook voor alle eventuele index.pl files in
> subdirectories daarvan.
>
> Is er werkelijk geen enkele mogelijkheid om dit tegen te gaan?
>
> Ik zie nergens een mogelijkheid om een volledige pathname of URL
> op te geven en dan alleen op die file te werken en verder nergens
> op.
Werkt dit niet gewoon:
<Location "/index.pl">
[...]
</Location>
Of als het om een subdirectory van de docroot gaat:
<Location "/subdirectory/index.pl">
[...]
</Location>
?
Maarten
Evenementen voor de komende 60 Dag(en)
Resultaten 1 tot 6 van de 6
Onderwerp: Re: Apache config voor 1 of enkele files
-
Re: Apache config voor 1 of enkele files
-
Re: Apache config voor 1 of enkele files
Maarten te Paske <maarten@tepaske.net.invalid> wrote:
> On 28 Sep 2010 20:08:14 GMT, Rob <nomail@example.com> wrote:
>
>> Ik vraag me af of het ook mogelijk is om in een Apache configuratie
>> (de .conf files of .htaccess files) een enkele file te specificeren
>> waar acties aan moeten hangen (authenticatie in dit geval).
>>
>> Ik heb de <Directory> <Location> en <Files> directives uitgebreid
>> bestudeerd maar alles wijst er op dat je altijd praat over een
>> directory EN ALLE SUBDIRECTORIES als je iets instelt.
>>
>> Bijv als ik <Files "index.pl"> neerzet in een .htaccess file in een
>> bepaalde directory, dan werkt dit niet alleen voor de index.pl in
>> die directory maar ook voor alle eventuele index.pl files in
>> subdirectories daarvan.
>>
>> Is er werkelijk geen enkele mogelijkheid om dit tegen te gaan?
>>
>> Ik zie nergens een mogelijkheid om een volledige pathname of URL
>> op te geven en dan alleen op die file te werken en verder nergens
>> op.
>
> Werkt dit niet gewoon:
>
> <Location "/index.pl">
> [...]
> </Location>
Dit werkt wel een beetje maar ik loop hier tegen hetzelfde probleem
aan als in .htaccess:
De file waar het om gaat is weliswaar /index.pl maar de manier waarop
die wordt aangeroepen door de gebruiker is http://sitenaam/
Dus dat index.pl staat er niet achter. Het is de default index.
Nu gaat er wat fout als ik alleen "/index.pl" opgeef, ik krijg dan
een 500 error. Wellicht heeft dit te maken met de brakke NTLM module.
In ieder geval om het goed te krijgen moet ik ook de lege filenaam
opgeven, in jouw voorbeeld wordt dit dan <Location "/">. Maar dat
kan ik er niet inzetten want dan word ik weer gebeten door die idiote
eigenschap van Apache dat al dit soort regels alleen links-matchend
zijn en dus een "/" matcht met de hele website!
Dat zou met "/index.pl" alleen een theoretisch probleem zijn maar dat
is dus niet voldoende om op te geven.
Het enige doel van de hele exercitie is om de usernaam van de bezoeker
beschikbaar te krijgen. De afgelopen 10 jaar heeft dit gewerkt door
dat ik op de werkstations een identd geinstalleerd heb en de paar
pagina's die de usernaam nodig hebben die doen een ident verzoek en
krijgen keurig die naam terug.
Maar nou is er bedacht dat we Citrix desktops moeten gaan gebruiken voor
bepaalde toepassingen, en wat ik ook gezocht heb, er is geen werkende
identd te vinden voor Citrix (dwz een die ook daadwerkelijk de user
terug geeft die hoort bij de opgevraagde connectie, niet de user van
het console ofzo).
Vandaar dat ik dacht laat ik het zo doen als Microsoft het altijd doet,
dwz met NTLM. In een IIS omgeving geen probleem natuurlijk, maar voor
Apache is het niet zo simpel. Ik gebruik nu de mod_auth_ntlm_winbind
en die moet je dan via de Apache config aan je pagina's koppelen, wat
een probleem is met de bestaande structuur.
Daarnaast heb ik een aantal PHP pagina's en daar is het me zowaar
gelukt om in die scriptjes zelf een stukje PHP toe te voegen wat de
NTLM functie afhandelt zonder dat Apache daar bij betrokken is.
Als me dit ook zou lukken voor Perl pagina's dan ben ik eruit want dan
hoef ik heel die Apache config niet te doen en vervalt het hele probleem
van deze thread.
Maar helaas, dat PHP script doet iets wat in mijn Perl scripts kennelijk
niet zomaar kan: spelen met de Authorization en WWW-Authenticate headers.
Dat komt denk ik door de CGI interface.
Dit is dus ook nog wat uitzoekwerk.
-
Re: Apache config voor 1 of enkele files
On 03-10-10 13:22, Rob wrote:
> Maarten te Paske<maarten@tepaske.net.invalid> wrote:
>> On 28 Sep 2010 20:08:14 GMT, Rob<nomail@example.com> wrote:
>>
>>> Ik vraag me af of het ook mogelijk is om in een Apache configuratie
>>> (de .conf files of .htaccess files) een enkele file te specificeren
>>> waar acties aan moeten hangen (authenticatie in dit geval).
>>>
>>> Ik heb de<Directory> <Location> en<Files> directives uitgebreid
>>> bestudeerd maar alles wijst er op dat je altijd praat over een
>>> directory EN ALLE SUBDIRECTORIES als je iets instelt.
>>>
>>> Bijv als ik<Files "index.pl"> neerzet in een .htaccess file in een
>>> bepaalde directory, dan werkt dit niet alleen voor de index.pl in
>>> die directory maar ook voor alle eventuele index.pl files in
>>> subdirectories daarvan.
>>>
>>> Is er werkelijk geen enkele mogelijkheid om dit tegen te gaan?
>>>
>>> Ik zie nergens een mogelijkheid om een volledige pathname of URL
>>> op te geven en dan alleen op die file te werken en verder nergens
>>> op.
>>
>> Werkt dit niet gewoon:
>>
>> <Location "/index.pl">
>> [...]
>> </Location>
>
> Dit werkt wel een beetje maar ik loop hier tegen hetzelfde probleem
> aan als in .htaccess:
>
> De file waar het om gaat is weliswaar /index.pl maar de manier waarop
> die wordt aangeroepen door de gebruiker is http://sitenaam/
>
> Dus dat index.pl staat er niet achter. Het is de default index.
>
> Nu gaat er wat fout als ik alleen "/index.pl" opgeef, ik krijg dan
> een 500 error. Wellicht heeft dit te maken met de brakke NTLM module.
>
> In ieder geval om het goed te krijgen moet ik ook de lege filenaam
> opgeven, in jouw voorbeeld wordt dit dan<Location "/">. Maar dat
> kan ik er niet inzetten want dan word ik weer gebeten door die idiote
> eigenschap van Apache dat al dit soort regels alleen links-matchend
> zijn en dus een "/" matcht met de hele website!
>
> Dat zou met "/index.pl" alleen een theoretisch probleem zijn maar dat
> is dus niet voldoende om op te geven.
>
>
> Het enige doel van de hele exercitie is om de usernaam van de bezoeker
> beschikbaar te krijgen. De afgelopen 10 jaar heeft dit gewerkt door
> dat ik op de werkstations een identd geinstalleerd heb en de paar
> pagina's die de usernaam nodig hebben die doen een ident verzoek en
> krijgen keurig die naam terug.
> Maar nou is er bedacht dat we Citrix desktops moeten gaan gebruiken voor
> bepaalde toepassingen, en wat ik ook gezocht heb, er is geen werkende
> identd te vinden voor Citrix (dwz een die ook daadwerkelijk de user
> terug geeft die hoort bij de opgevraagde connectie, niet de user van
> het console ofzo).
>
> Vandaar dat ik dacht laat ik het zo doen als Microsoft het altijd doet,
> dwz met NTLM. In een IIS omgeving geen probleem natuurlijk, maar voor
> Apache is het niet zo simpel. Ik gebruik nu de mod_auth_ntlm_winbind
> en die moet je dan via de Apache config aan je pagina's koppelen, wat
> een probleem is met de bestaande structuur.
>
> Daarnaast heb ik een aantal PHP pagina's en daar is het me zowaar
> gelukt om in die scriptjes zelf een stukje PHP toe te voegen wat de
> NTLM functie afhandelt zonder dat Apache daar bij betrokken is.
> Als me dit ook zou lukken voor Perl pagina's dan ben ik eruit want dan
> hoef ik heel die Apache config niet te doen en vervalt het hele probleem
> van deze thread.
>
> Maar helaas, dat PHP script doet iets wat in mijn Perl scripts kennelijk
> niet zomaar kan: spelen met de Authorization en WWW-Authenticate headers.
> Dat komt denk ik door de CGI interface.
> Dit is dus ook nog wat uitzoekwerk.
hmm, zou dit dan je oplossing zijn:
"index.pl"uit je DirectoryIndex halen,
en "index.html" doorsturen naar "index.pl"
als de bezoeker naar http://example.com/ gaat,
wordt via de DirectoryIndex "index.html" opgehaald,
en die verwijst door naar jouw "index.pl"
die je m.b.v. de <Location> de NTLM-zooi laat doen....
--
Luuk
-
Re: Apache config voor 1 of enkele files
Luuk <Luuk@invalid.lan> wrote:
> hmm, zou dit dan je oplossing zijn:
>
> "index.pl"uit je DirectoryIndex halen,
> en "index.html" doorsturen naar "index.pl"
>
> als de bezoeker naar http://example.com/ gaat,
> wordt via de DirectoryIndex "index.html" opgehaald,
> en die verwijst door naar jouw "index.pl"
> die je m.b.v. de <Location> de NTLM-zooi laat doen....
Miquel heeft een truuk met rewrite laten zien waarmee dit gedeelte
van het probleem kan worden opgelost.
Wellicht ga ik het zo doen als het me niet op de andere manier lukt.
Die andere manier is de NTLM handling in de index.pl zelf te doen
dus niet in Apache authenticatie modules.
Ik heb dit stukje PHP (gevonden en nog wat gestript):
<?php
// Gebruik NTLM protocol om usernaam op te halen van PC
// loune 25/3/2006, updated 22/08/2009
// For more information see:
// http://siphon9.net/loune/2007/10/sim...t-ntlm-in-php/
function get_msg_str($msg,$start) {
$len = (ord($msg[$start+1]) * 256) + ord($msg[$start]);
$off = (ord($msg[$start+5]) * 256) + ord($msg[$start+4]);
return str_replace("\0",'',substr($msg,$off,$len));
}
function ntlmident () {
$headers = apache_request_headers();
if (!isset($headers['Authorization'])){
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: NTLM');
exit;
}
$auth = $headers['Authorization'];
if (substr($auth,0,5) == 'NTLM ') {
$msg = base64_decode(substr($auth,5));
if (substr($msg,0,8) != "NTLMSSP\x00")
die('error header not recognised');
if ($msg[8] == "\x01") {
$msg2 = "NTLMSSP\x00\x02\x00\x00\x00".
"\x00\x00\x00\x00". // target name len/alloc
"\x00\x00\x00\x00". // target name offset
"\x01\x02\x81\x00". // flags
"\x00\x00\x00\x00\x00\x00\x00\x00". // challenge
"\x00\x00\x00\x00\x00\x00\x00\x00". // context
"\x00\x00\x00\x00\x00\x00\x00\x00"; // target info len/alloc/offset
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: NTLM '.trim(base64_encode($msg2)));
exit;
}
else if ($msg[8] == "\x03") {
$user = get_msg_str($msg,36);
$domain = get_msg_str($msg,28);
$workstation = get_msg_str($msg,44);
return preg_replace('/\b([a-z])/e',"ucfirst($1)",$user);
}
}
return "!No.Ident";
}
?>
Dit doet precies wat ik nodig heb: de usernaam opvragen. Geen echte
authenticatie, dat heb ik niet nodig.
Nou wil ik proberen dit naar perl om te zetten, en wel zo dat het kan
draaien onder mod_perl met de CGI compatible mode.
<Files "*\.pl">
# mod_perl mode
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
</Files>
Dit staat in de server config.
Wat ik nog moet uitzoeken is hoe ik het equivalent van die
apache_request_headers in PHP kan doen in deze Perl omgeving.
Als dat lukt dan heb ik dat hele configuratie probleem niet meer.
- advertentie
-
Re: Apache config voor 1 of enkele files
Rob <nomail@example.com> writes:
> Die andere manier is de NTLM handling in de index.pl zelf te doen
> dus niet in Apache authenticatie modules.
CPAN is your friend: http://search.cpan.org/search?query=NTLM&mode=all
En nee, je hoeft geen root te zijn om Perl modules te installeren, je
kan die gewoon lokaal neer zetten en de locatie opnemen in het zoekpad
van Perl, b.v.
use lib '/home/rob/perl-modules/';
use Foo::Bar;
> Nou wil ik proberen dit naar perl om te zetten,
Welnee, shop op CPAN, wat het allermooiste aan Perl is: zoveel modules,
niet nodig om wielen uit te vinden.
--
John Bokma j3b
Blog: http://johnbokma.com/ Facebook: http://www.facebook.com/j.j.j.bokma
Freelance Perl & Python Development: http://castleamber.com/
-
Re: Apache config voor 1 of enkele files
John Bokma <john@castleamber.com> wrote:
> Rob <nomail@example.com> writes:
>
>> Die andere manier is de NTLM handling in de index.pl zelf te doen
>> dus niet in Apache authenticatie modules.
>
> CPAN is your friend: http://search.cpan.org/search?query=NTLM&mode=all
Daar heb ik uiteraard al op gezocht maar ik krijg het idee dat daar
alleen client-side en Apache authenticatie modules te vinden zijn.
Het equivalent van wat ik gepost heb in PHP heb ik er nog niet kunnen
vinden.



LinkBack URL
About LinkBacks
