Thread Fileserver Problem (6 answers)
Opened by blemmo at 2008-05-05 17:11

blemmo
 2008-05-05 17:11
#109208 #109208
User since
2008-05-05
3 Artikel
BenutzerIn
[default_avatar]
Hallo Leute,

ich hoffe ich bin im richtigen Forum gelandet....

Ich habe noch nie mit Perl gearbeitet, brauche nun aber einen simplen Fileserver unter Linux. Dazu habe ich ein Skript bekommen, was aber scheinbar noch Fehler enthält. Da ich nicht genau weiß wo, poste ich mal das ganze Skript, es ist nicht besonders umfangreich:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/perl
#
# in.flashpolicyd.pl
# Simple socket policy file server
#
# Usage: in.flashpolicyd.pl -file=FILE
# Logs to stderr
#

use strict;

my $NULLBYTE = pack( 'c', 0 );

my $filePath;
my $content;

### READ ARGS

while ( my $arg = shift @ARGV )
{
    if ( $arg =~ m/^--file=(.*)/ )
    {
        $filePath = $1;
    }
}

unless ( $filePath )
{
    die "Usage: in.flashpolicyd.pl --file=FILE\n";
}

### READ FILE

-f $filePath or die "No such file: '$filePath'\n";
-s $filePath < 10_000 or die "File probably too large to be a policy file: '$filePath'\n";

local $/ = undef;
open POLICYFILE, "<$filePath" or die "Can't open '$filePath': $!\n";
$content = <POLICYFILE>;
close POLICYFILE;

$content =~ m/cross-domain-policy/ or die "Not a valid policy file: '$filePath'\n";

### HANDLE CONNECTIONS

local $/ = $NULLBYTE;
my $request = <STDIN>;
chomp $request;

if ( $request eq '<policy-file-request/>' )
{
        print STDERR "Valid request received\n";
}
else
{
        print STDERR "Unrecognized request: $request\n\n";
        exit;
}

print STDOUT $content;

print STDERR "Sent policy file\n\n";

# End of file.


Wen es näher interessiert: das Skript kommt von Adobe und ist Teil einer neuen Sicherheitsarchitektur für Flash Socket Verbindungen. (siehe http://www.adobe.com/devnet/flashplayer/articles/s... )

Das ganze soll über den xinetd laufen.

Wenn ich nun testweise in der console dieses eingebe:
Code: (dl )
echo '<policy-file-request/>' | /usr/local/sbin/in.flashpolicyd.pl --file=/stuff/flashpolicy.xml

sagt das Skript
Code: (dl )
Unrecognized request: <policy-file-request/>

genauso wenn ich '<policy-file-request/>0' oder '<policy-file-request/>\0' reingebe.

Da ich mich mit Perl wie gesagt nicht weiter auskenne weiß ich nun nicht, wo ich nach Fehlern suchen kann. Stimmt etwas mit dem String-Vergleich nicht?
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
local $/ = $NULLBYTE;
my $request = <STDIN>;
chomp $request;

if ( $request eq '<policy-file-request/>' )
{
        print STDERR "Valid request received\n";
}
else
{
        print STDERR "Unrecognized request: $request\n\n";
        exit;
}

ist doch eigentlich ziemlich straight forward, und ich würde denken dass ein Input-String ohne Nullbyte am Ende trotzdem die Bedingung erfüllen müsste und als valider Request erkannt werden sollte. Dem scheint aber nicht so zu sein, genauso wie \0 am Ende nichts ändert.

Kann jemand helfen?

Gruß,
Hendrik

View full thread Fileserver Problem