File: dcc.mpi

package info (click to toggle)
madoka 4.2.3-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 960 kB
  • ctags: 45
  • sloc: perl: 1,006; makefile: 45; sh: 4
file content (91 lines) | stat: -rw-r--r-- 2,693 bytes parent folder | download
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");
  }
}