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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
# madoka 4.2 rc_dcc
#
# rc/dcc.mpi
# Copyright(c)1998- cookie / The madoka project
#
my($var, $arg) = split(/=\s*/, $rc_line, 2);
&redo('ctcp/dcc.mpi');
$dcc_state = pack("b*", '10000000') if !defined($dcc_state);
if ($var eq 'dir') {
$arg = './' unless $arg;
$arg =~ s/^~\//$homedir\//;
$arg =~ s/\/$//;
if (!-e $arg) {
mkdir($arg, 0711);
warn("[dcc] mkdir: $arg\n");
}
$arg .= '/';
$dcc_dir = $arg;
} elsif ($var eq 'log') {
$arg =~ s/^~\//$homedir\//;
&down("[ERROR] log in [dcc]\n") if $arg =~ /\/$/ || !$arg;
$dcc_log = $arg;
} elsif ($var eq 'mode') {
&down("[ERROR] mode in [log]\n") if $arg =~ /[^\d]/ || !$arg;
$dcc_mode = oct($arg);
} elsif ($var eq 'get') {
vec($at_state, 6, 1) = vec($dcc_state, 0, 1) = 0;
if ($arg eq 'on' || $arg eq '+') {
vec($at_state, 6, 1) = vec($dcc_state, 0, 1) = 1;
} elsif ($arg eq 'off' || $arg eq '-') {
vec($at_state, 6, 1) = vec($dcc_state, 0, 1) = 0;
} else {
&down("[ERROR] get in [dcc]\n");
}
} elsif ($var eq 'ext') {
my($ext, $dir) = split(/\s+/, $arg, 2);
$ext = lc($ext);
$dir =~ s/\/$//;
if ($dir eq '..' || $dir =~ /[^\.]\.\.$/ || $dir =~ /[^\.]?\.\.\//) {
&down("[ERROR] cannot use '..'\n");
} elsif ($dir =~ /^\// || $dir =~ /^~\//) {
&down("[ERROR] cannot use full path.\n");
}
if (!-e "$dcc_dir$dir") {
mkdir("$dcc_dir$dir", 0711);
warn("[dcc] mkdir: $dcc_dir$dir\n");
}
$dir .= '/' unless $dir =~ /\/$/;
foreach (split(/\//, $ext)) {
next unless $_;
unless ($dcc_ext{$_}) {
$dcc_ext{$_} = $dir;
} else {
warn("[dcc] .$_ is already set: $dcc_ext{$_}\n");
}
}
} elsif ($var eq 'refuse') {
&down("[ERROR] $var in [dcc]\n")
if $arg =~ /[^\w\d\-\[\]\{\}\`\|\^\\\.]/ ||
($arg =~ /\./ && $arg !~ /^\d+\.\d+\.\d+\.\d+$/);
my $l = join('.', unpack("C4", (gethostbyname($arg))[4]));
&list_add($dcc_refuse, $l) if $l =~ /^\d+\.\d+\.\d+\.\d+$/;
} elsif ($var eq 'refusename') {
vec($dcc_state, 2, 1) = 0;
if ($arg eq 'on' || $arg eq '+') {
vec($dcc_state, 2, 1) = 1;
} elsif ($arg eq 'off' || $arg eq '-') {
vec($dcc_state, 2, 1) = 0;
} else {
&down("[ERROR] refusename in [dcc]\n");
}
} elsif ($var eq 'allowinchannel') {
vec($dcc_state, 1, 1) = 0;
if ($arg eq 'on' || $arg eq '+') {
vec($dcc_state, 1, 1) = 1;
} elsif ($arg eq 'off' || $arg eq '-') {
vec($dcc_state, 1, 1) = 0;
} else {
&down("[ERROR] allowinchannel in [dcc]\n");
}
} elsif ($var eq 'client') {
if ($arg eq 'on' || $arg eq '+') {
vec($dcc_state, 3, 1) = 1;
} elsif ($arg eq 'off' || $arg eq '-') {
vec($dcc_state, 3, 1) = 0;
} else {
&down("[ERROR] client in [dcc]\n");
}
}
|