From shijialee at gmail.com Mon Jan 2 21:38:47 2006 From: shijialee at gmail.com (Qiang ( James ) Li) Date: Tue, 3 Jan 2006 00:38:47 -0500 Subject: [PerlChina] =?gb2312?b?ztLDx9TatuDC17bgIDIwMDUtMTItMzAgtcS3x7y8?= =?gb2312?b?yvXQ1L7bu+E=?= References: <74646cb40512292110v7454c10au@mail.gmail.com> Message-ID: <005701c61027$f83cf030$3201a8c0@cozy505> 所谓非技术性聚会就是,没有演讲,大家聚在饭桌,酒桌边聊 Perl。我们是纯中国人 聚会。因为我们多伦多老外的聚会已经是每个月一次( 技术会 + 会后到酒吧喝酒吃 饭),每次都有 20 个人左右, 所以我们也就没打算搞技术会议。多伦多的 Perl 小 组在 http://to.pm.org , 我们的聚会目前暂在我的 blog 上发布 http://www.livejournal.com/users/shijialee/ 以前我们聚过三次,所以我提前一个星期就发 email 通知,和所有人联系上了,有 6 个人确认来。其中一位朋友是在多伦多 web application security 小组聚会里碰到 的,做安全的人还是很受欢迎的,他对 perl 的聚会也感兴趣,所以我也把他请了过 来。 12 月 30 号晚上我们来了 6 个人,在多伦多北约克区的味香村饭店聚会。大家聊了最 近都在忙什么。 Jim 谈了谈他们的 mod_perl 使用情况,我讲了一下 unix 下使用 Perl 做不同系统下软件自动打包和 Perl / Perl 6 的新闻,Hui.Z 是我们的安全专 家,从他那里我们了解了不少电脑安全行业的情况:比如说很好找工作 :) 。Larry 正 在找工作,我们也共享了一下 job hunting 的方法。我们是 7 点进去的好像待到了 11点,所以我们走的时候多给了些小费。这次聚会的缺憾是没有把酒谈 Perl,对于我 这个酒鬼可是有些意犹未尽的感觉。^_^ 这次聚会我还是有意想把讨论话题多放在 Perl 上,算是实现了一些吧,不过可以做的 更好,下次努力。另外聚会的地方比较安静,适合大家交流。下次聚会计划放到农历新 年后。 多伦多是个 Perl 用户社区比较丰富的城市,I am so happy with it! 这次聚会的一张照片 http://xrl.us/je6m 这里把以前的聚会也做个简单的归档: 10.7.2005 星期五晚酒吧 3 个人 (me + Leo + Larry ) 10.21.2005 星期五晚酒吧 3 个人 (me + Leo + Larry ) 11.11.2005 星期五晚火锅店 6 个人 (me + Leo + Larry + Lei + Jim + Charlie) 12.30.2005 星期五晚味香村饭店 6 个人 (me + Leo + Larry + Lei + Jim + Hui.Z) Qiang From joejiang799 at gmail.com Mon Jan 2 23:08:17 2006 From: joejiang799 at gmail.com (Joe Jiang) Date: Tue, 3 Jan 2006 15:08:17 +0800 Subject: =?UTF-8?Q?Re:_[PerlChina]_=E6=88=91=E4=BB=AC=E5=9C=A8=E5=A4=9A?= =?UTF-8?Q?=E4=BC=A6=E5=A4=9A_2005-12?= =?UTF-8?Q?-30_=E7=9A=84?= =?UTF-8?Q?=E9=9D=9E=E6=8A=80=E6=9C=AF=E6=80=A7=E8=81=9A=E4=BC=9A?= In-Reply-To: <005701c61027$f83cf030$3201a8c0@cozy505> References: <74646cb40512292110v7454c10au@mail.gmail.com> <005701c61027$f83cf030$3201a8c0@cozy505> Message-ID: well done qiang, 可否按照片逐个介绍姓名?这样方便我介绍在多伦多的朋友认识 :D On 1/3/06, Qiang ( James ) Li wrote: > > 所谓非技术性聚会就是,没有演讲,大家聚在饭桌,酒桌边聊 Perl。 -------------- next part -------------- q0!,rmTDmj+bj)rjjZr?M:]7n]]u!٥ From shijialee at gmail.com Mon Jan 2 23:21:06 2006 From: shijialee at gmail.com (Qiang ( James ) Li) Date: Tue, 3 Jan 2006 02:21:06 -0500 Subject: =?utf-8?B?UmU6IFtQZXJsQ2hpbmFdIOaIkeS7rOWcqOWkmuS8puWkmiAyMDA1LTEyLTM=?= =?utf-8?B?MCDnmoTpnZ7mioDmnK/mgKfogZrkvJo=?= References: <74646cb40512292110v7454c10au@mail.gmail.com> <005701c61027$f83cf030$3201a8c0@cozy505> Message-ID: <004101c61036$43e41fa0$3201a8c0@cozy505> From: "Joe Jiang" > well done qiang, 可否按照片逐个介绍姓名?这样方便我介绍在多伦多的朋友认识 :D thanks. from left to right : Larry, Leo, me , Lei, Jim, Zhu.H 如果你要介绍多伦多的朋友认识,参加一次聚会不就可以了 =) Qiang From rebylist at gmail.com Wed Jan 4 04:12:27 2006 From: rebylist at gmail.com (rebylist) Date: Wed, 04 Jan 2006 20:12:27 +0800 Subject: [PerlChina] =?utf-8?b?56ys5LiK5qyh5p2l6L+Z6YeM77yM5YWI5oql5Liq?= =?utf-8?b?5Yiw77yM5biM5pyb5aSn5a625pSv5oyB5ZaU77ya77yJ?= Message-ID: <43BBBBAB.3000609@gmail.com> 第上次来这里,先报个到,希望大家支持喔:) From fayland at gmail.com Wed Jan 4 05:48:34 2006 From: fayland at gmail.com (fayland) Date: Wed, 04 Jan 2006 21:48:34 +0800 Subject: [PerlChina] =?UTF-8?B?56ys5LiK5qyh5p2l6L+Z6YeM77yM5YWI5oql5Liq?= =?UTF-8?B?5Yiw77yM5biM5pyb5aSn5a625pSv5oyB5ZaU77ya77yJ?= In-Reply-To: <43BBBBAB.3000609@gmail.com> References: <43BBBBAB.3000609@gmail.com> Message-ID: <43BBD232.2010609@gmail.com> welcome. 兄弟自我介绍下。讲讲平时怎么用 perl 好了。 或许可以去 http://member.perlchina.org/ 找一些志同道合的 perler rebylist wrote: > 第上次来这里,先报个到,希望大家支持喔:) > _______________________________________________ > China-pm mailing list > China-pm at pm.org > http://mail.pm.org/mailman/listinfo/china-pm -- Fayland Lam /// http://www.fayland.org/ From hylinux at gmail.com Sun Jan 8 23:11:56 2006 From: hylinux at gmail.com (=?GB2312?B?u8bStg==?=) Date: Mon, 9 Jan 2006 15:11:56 +0800 Subject: [PerlChina] =?gb2312?b?0ru49sbmuda1xM7KzOI=?= Message-ID: <74646cb40601082311i4682b2cex@mail.gmail.com> 我在看autoflush(1); while ( my $msg_out = <> ) { print SOCK $msg_out; my $msg_in = ; print $msg_in; $bytes_out += length($msg_out); $bytes_in += length($msg_in); } close SOCK; print "bytes send = $bytes_out, bytes received = $bytes_in\n"; 再是服务器端 ( 我们称之为服务端1 ): #!/usr/bin/perl use strict; use warnings; use Socket; use IO::Handle; use constant MY_ECHO_PORT => 2007; my ( $bytes_out, $bytes_in ) = (0, 0); my $port = shift || MY_ECHO_PORT; my $protocol = getprotobyname('tcp'); $SIG{INT} = sub { print STDERR "bytes_send = $bytes_out, bytes_received = $bytes_in\n"; exit 0; }; socket(SOCK, AF_INET, SOCK_STREAM, $protocol) or die "Socket failed: $!"; setsockopt(SOCK, SOL_SOCKET, SO_REUSEADDR, 1) or die "$!\n"; my $my_addr = sockaddr_in($port, INADDR_ANY); bind(SOCK, $my_addr); listen(SOCK, SOMAXCONN) or die "Listen() failed:$!\n"; warn "Waitng for incoming connection on port $port...\n"; while (1) { next unless my $remote_addr = accept(SESSION, SOCK); my ($port, $hisaddr ) = sockaddr_in($remote_addr); warn "Connection from [", inet_ntoa($hisaddr), ", $port]\n"; SESSION->autoflush(1); while ( ) { $bytes_in += length($_); chomp; my $msg_out = (scalar reverse $_). "\n"; print SESSION $msg_out; $bytes_out += length($msg_out); } warn "Connection from [", inet_ntoa($hisaddr), ", $port]\n"; close SESSION; } close SOCK; 然后再使用IO::Socket模块重写: 客户端 ( 我们称之为客户端2): #!/usr/bin/perl use strict; use warnings; use IO::Socket; my ($bytes_out, $bytes_in) = (0, 0); my $host = shift || 'localhost'; my $port = shift || 'echo'; $SIG{PIPE} = sub { print "it had a PIPE error.\n"; exit 0; }; my $socket = IO::Socket::INET->new("$host:$port") or die "$@\n"; while ( defined( my $msg_out = STDIN->getline ) ) { print $socket $msg_out; my $msg_in = <$socket>; print $msg_in; $bytes_out += length $msg_out; $bytes_in += length $msg_in; } $socket->close; print STDERR "bytes send = $bytes_out, bytes_received = $bytes_in\n"; 服务器端(我们称之为:服务端2): #!/usr/bin/perl use strict; use warnings; use IO::Socket qw(:DEFAULT :crlf); use constant MY_ECHO_PORT => 2007; $/ = CRLF; my ($bytes_out, $bytes_in) = (0, 0); my $quit = 0; $SIG{INT} = sub { $quit++; }; my $port = shift || MY_ECHO_PORT; my $socket = IO::Socket::INET->new( Listen => 20, LocalPort => $port, Timeout => 60 * 60, Reuse => 1 ) or die "Can't create listen port: $!\n"; warn "Waiting for incoming connections on port $port ......\n"; while ( !$quit ) { next unless my $session = $socket->accept; $session->autoflush(1); my $peer = gethostbyaddr( $session->peeraddr, AF_INET) || $session->peerhost; my $port = $session->peerport; warn "Connection from [$peer, $port]\n"; while ( my $str = <$session> ) { print $str, "\n"; $bytes_in += length $str; chomp $str; my $msg_out = (scalar reverse $str)."\n"; print $msg_out, "\n"; print $session $msg_out; $bytes_out += length $msg_out; } warn "Connection from [$peer, $port] finished\n"; close $session; } print STDERR "bytes send = $bytes_out, bytes received = $bytes_in\n"; close $socket; 现在问题就来了。 如果我们使用客户端1和客户端2连接服务器端1, 没有问题,很正常。 但是如果我使用客户端1和客户端2连接服务器端2是就有问题, 发现客户端接受不到任何返回。 比较奇怪,请帮我看看。 谢谢。 -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:?=?o?!??? From joejiang799 at gmail.com Mon Jan 9 01:41:53 2006 From: joejiang799 at gmail.com (Joe Jiang) Date: Mon, 9 Jan 2006 17:41:53 +0800 Subject: =?UTF-8?Q?Re:_[PerlCh?= =?UTF-8?Q?ina]_=E4=B8=80?= =?UTF-8?Q?=E4=B8=AA=E5=A5=87=E6=80=AA=E7=9A=84=E9=97=AE=E9=A2=98?= In-Reply-To: <74646cb40601082311i4682b2cex@mail.gmail.com> References: <74646cb40601082311i4682b2cex@mail.gmail.com> Message-ID: crlf? 可以用 telnet 来测试 echo On 1/9/06, 黄叶 wrote: > > 我在看 分别是第四章和第五章的例子。 > 显示使用模块Socket > > 客户端 (我们称之为客户端1 ): > #!/usr/bin/perl -w > use strict; > use Socket; > use IO::Handle; > > my ($bytes_out, $bytes_in) = (0, 0); > my $host = shift || 'localhost'; > my $port = shift || getservbyname('echo', 'tcp'); > > my $protocol = getprotobyname('tcp'); > > $host = inet_aton($host); > my $data_addr = sockaddr_in($port, $host); > > socket(SOCK, AF_INET, SOCK_STREAM, $protocol) or die "$!\n"; > # connect the server > connect(SOCK, $data_addr) or die "Can't Connect the Server: $!\n"; > > SOCK->autoflush(1); > > while ( my $msg_out = <> ) { > print SOCK $msg_out; > my $msg_in = ; > print $msg_in; > > $bytes_out += length($msg_out); > $bytes_in += length($msg_in); > } > > close SOCK; > print "bytes send = $bytes_out, bytes received = $bytes_in\n"; > > > 再是服务器端 ( 我们称之为服务端1 ): > #!/usr/bin/perl > use strict; > use warnings; > use Socket; > use IO::Handle; > use constant MY_ECHO_PORT => 2007; > > my ( $bytes_out, $bytes_in ) = (0, 0); > > my $port = shift || MY_ECHO_PORT; > my $protocol = getprotobyname('tcp'); > > $SIG{INT} = sub { > print STDERR "bytes_send = $bytes_out, bytes_received = $bytes_in\n"; > exit 0; > }; > > socket(SOCK, AF_INET, SOCK_STREAM, $protocol) or die "Socket failed: $!"; > setsockopt(SOCK, SOL_SOCKET, SO_REUSEADDR, 1) or die "$!\n"; > > my $my_addr = sockaddr_in($port, INADDR_ANY); > > bind(SOCK, $my_addr); > listen(SOCK, SOMAXCONN) or die "Listen() failed:$!\n"; > > warn "Waitng for incoming connection on port $port...\n"; > > while (1) { > next unless my $remote_addr = accept(SESSION, SOCK); > my ($port, $hisaddr ) = sockaddr_in($remote_addr); > > warn "Connection from [", inet_ntoa($hisaddr), ", $port]\n"; > > SESSION->autoflush(1); > > while ( ) { > $bytes_in += length($_); > chomp; > > my $msg_out = (scalar reverse $_). "\n"; > print SESSION $msg_out; > $bytes_out += length($msg_out); > } > > warn "Connection from [", inet_ntoa($hisaddr), ", $port]\n"; > close SESSION; > } > > close SOCK; > > > 然后再使用IO::Socket模块重写: > > 客户端 ( 我们称之为客户端2): > #!/usr/bin/perl > use strict; > use warnings; > use IO::Socket; > > my ($bytes_out, $bytes_in) = (0, 0); > > my $host = shift || 'localhost'; > my $port = shift || 'echo'; > > $SIG{PIPE} = sub { > print "it had a PIPE error.\n"; > exit 0; > }; > > my $socket = IO::Socket::INET->new("$host:$port") or die "$@\n"; > > while ( defined( my $msg_out = STDIN->getline ) ) { > print $socket $msg_out; > my $msg_in = <$socket>; > > print $msg_in; > > $bytes_out += length $msg_out; > $bytes_in += length $msg_in; > } > > $socket->close; > print STDERR "bytes send = $bytes_out, bytes_received = $bytes_in\n"; > > 服务器端(我们称之为:服务端2): > #!/usr/bin/perl > use strict; > use warnings; > use IO::Socket qw(:DEFAULT :crlf); > use constant MY_ECHO_PORT => 2007; > > $/ = CRLF; > > my ($bytes_out, $bytes_in) = (0, 0); > > my $quit = 0; > > $SIG{INT} = sub { $quit++; }; > > my $port = shift || MY_ECHO_PORT; > > my $socket = IO::Socket::INET->new( > Listen => 20, > LocalPort => $port, > Timeout => 60 * 60, > Reuse => 1 > ) or die "Can't create listen port: $!\n"; > > warn "Waiting for incoming connections on port $port ......\n"; > > while ( !$quit ) { > next unless my $session = $socket->accept; > > $session->autoflush(1); > > my $peer = gethostbyaddr( $session->peeraddr, AF_INET) || > > $session->peerhost; > > my $port = $session->peerport; > > warn "Connection from [$peer, $port]\n"; > > while ( my $str = <$session> ) { > print $str, "\n"; > $bytes_in += length $str; > chomp $str; > my $msg_out = (scalar reverse $str)."\n"; > print $msg_out, "\n"; > print $session $msg_out; > > $bytes_out += length $msg_out; > } > > warn "Connection from [$peer, $port] finished\n"; > close $session; > } > > print STDERR "bytes send = $bytes_out, bytes received = $bytes_in\n"; > > close $socket; > > > 现在问题就来了。 > 如果我们使用客户端1和客户端2连接服务器端1, 没有问题,很正常。 > 但是如果我使用客户端1和客户端2连接服务器端2是就有问题, > 发现客户端接受不到任何返回。 > > 比较奇怪,请帮我看看。 > 谢谢。 > > > > _______________________________________________ > China-pm mailing list > China-pm at pm.org > http://mail.pm.org/mailman/listinfo/china-pm > -- God May Always Inspire Life => Gmail -------------- next part -------------- q0!,rmTDmj+bj)rjjZr?M:]=}|!M5٥ From hylinux at gmail.com Mon Jan 9 17:01:03 2006 From: hylinux at gmail.com (=?GB2312?B?u8bStg==?=) Date: Tue, 10 Jan 2006 09:01:03 +0800 Subject: =?GB2312?B?UmU6IFtQZXJsQ2hpbmFdINK7uPbG5rnWtcTOyszi?= In-Reply-To: References: <74646cb40601082311i4682b2cex@mail.gmail.com> Message-ID: <74646cb40601091701n41ba83b8p@mail.gmail.com> 使用Telnet测试可以的。 但是其他的两个客户端都不行。 哪位朋友网络可以指点一下? 谢谢。 -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:?t??8?????!??? From hylinux at gmail.com Tue Jan 10 22:21:21 2006 From: hylinux at gmail.com (=?GB2312?B?u8bStg==?=) Date: Wed, 11 Jan 2006 14:21:21 +0800 Subject: [PerlChina] =?gb2312?b?1NnOytK7uPbN+MLntcSx4LPMzsrM4g==?= Message-ID: <74646cb40601102221j6317fffeg@mail.gmail.com> 我写了两个脚本。 都是使用进程做服务器的。 这两个代码几乎是一模一样的,但是运行后,就是结果不一样。 请那位朋友帮我看一下。 谢谢。 #!/usr/bin/perl use strict; use warnings; use Chatbot::Eliza; use IO::Socket; use IO::File; use POSIX qw(WNOHANG setsid); use constant PORT => 12000; use constant PID_FILE => '/var/tmp/eliza.pid'; my $quit = 0; # signal handler for child die event $SIG{INT} = sub { $quit++; }; $SIG{CHLD} = sub { while ( waitpid(-1, WNOHANG) > 0 ) { } }; my $fh = open_pid_file(PID_FILE); # create a sock file my $listen_sock = IO::Socket::INET->new( LocalPort => PORT, Listen => 20, Reuse => 1, Timeout => 60 * 60 ); die "Can't create a listenling socket: $@ \n" unless defined $listen_sock; warn "$0 Starting...\n"; my $pid = become_daemon(); print $fh $pid; close $fh; while ( !$quit ) { next unless my $connection = $listen_sock->accept; my $child = fork; die "Can't fork: $!\n" unless defined $child; if ( $child == 0 ) { $listen_sock->close; interact($connection); exit 0; } $connection->close; } sub interact { my $sock = shift; STDIN->fdopen($sock, "<") or die "Can't reopen the STDIN: $!\n"; STDOUT->fdopen($sock, ">") or die "Can't reopen the STDOUT: $!\n"; SDTERR->fdopen($sock, ">") or die "Can't reopen the STDERR: $!\n"; $| = 1; my $bot = Chatbot::Eliza->new; $bot->name('Doctor Jane'); $bot->command_interface; } sub open_pid_file { my $file = shift; if ( -e $file ) { my $fh = IO::File->new($file) || return; my $pid = <$fh>; die "Server already running with PID $pid" if kill 0 => $pid; warn "Removing PID file for defunct server process $pid.\n"; die "Can't unlink PID file $file\n" unless -w $file && unlink $file; } return IO::File->new($file, O_WRONLY|O_CREAT|O_EXCL, 0644) or die "Can't create $file:$!\n"; } sub become_daemon { die "Can't fork: $!" unless defined (my $child = fork); exit 0 if $child; setsid(); open(STDIN, "/dev/null") or die "Can't reopen the STDOUT to /dev/null"; open(STDERR, ">&STDOUT") or die "Can't reopen the STDERR to /dev/null"; chdir "/"; umask(0); $ENV{PATH} = "/bin:/sbin:/usr/bin:/usr/sbin"; return $$; } 第二个脚本: #!/usr/bin/perl use strict; use warnings; use Chatbot::Eliza; use IO::Socket; use IO::File; use POSIX qw(WNOHANG setsid); use constant PORT=> 12000; use constant PID_FILE => '/var/tmp/eliza.pid'; my $quit = 0; $SIG{CHLD} = sub { while ( waitpid(-1, WNOHANG) > 0 ) { } }; $SIG{INT} = sub { $quit++; }; my $fh = open_pid_file(PID_FILE); my $listen_port = IO::Socket::INET->new( LocalPort => PORT, Listen => 20, Reuse => 1, Timeout => 60 * 60 ); die "Can't create the socket" unless defined $listen_port; warn "Server Ready: Waiting for connections...\n"; my $pid = become_daemon(); print $fh $pid; close $fh; while ( !$quit ) { next unless my $connection = $listen_port->accept; my $child = fork; die 'Can not fork a new process.' unless defined $child; if ( $child == 0 ) { # it is child process. # will close the socket copy $listen_port->close; interact($connection); exit 0; } $connection->close; } sub interact { my $sock = shift; STDIN->fdopen($sock, "<") or die "Can't reopen STDIN:$!\n"; STDOUT->fdopen($sock, ">") or die "Can't reopen STDOUT: $!\n"; STDERR->fdopen($sock, ">") or die "Can't reopen STDERR: $!\n"; $| = 1; my $bot = Chatbot::Eliza->new; $bot->name('Doctor Jane'); $bot->command_interface; } sub become_daemon { die "Can't fork" unless defined ( my $child = fork ); exit 0 if $child; setsid(); open(STDIN, "/dev/null"); open(STDERR, ">&STDOUT"); chdir "/"; umask(0); $ENV{PATH} = '/bin:/sbin:/usr/bin:/usr/sbin'; return $$; } sub open_pid_file { my $file = shift; if ( -e $file ) { my $fh = IO::File->new($file) || return; my $pid = <$fh>; die "Server already running with PID $pid" if kill 0 => $pid; warn "Removing PID file for defunct server process $pid.\n"; die "Can't unlink PID file $file\n" unless -w $file && unlink $file; } return IO::File->new($file, O_WRONLY|O_CREAT|O_EXCL, 0644) or die "Can't create $file:$!\n"; } 谢谢。请高手们帮帮我的忙。 谢谢。 -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:?u?m q?????!??? From hylinux at gmail.com Sun Jan 15 05:58:50 2006 From: hylinux at gmail.com (=?GB2312?B?u8bStg==?=) Date: Sun, 15 Jan 2006 21:58:50 +0800 Subject: [PerlChina] =?gb2312?b?zai5/WNnaS5wbcnPtKvOxLz+?= Message-ID: <74646cb40601150558s77585737q@mail.gmail.com> 好冷清啊。 我来提一个问题呵呵。大家帮帮忙。 我使用cgi.pm来上传文件, 使用mod_perl. 下面是我的mod_perl的配置: Alias /perl/ /home/ghw/myperl/webproject/ PerlSwitches -T SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders Options +ExecCGI Order allow,deny Allow from all 代码很简单: #!/usr/bin/perl -T use strict; use warnings; use CGI; use CGI::Carp qw(fatalsToBrowser); $CGI::DISABLE_UPLOADS = 0; $CGI::POST_MAX = -1; my $q = CGI->new; my $filename = $q->param("file"); print $q->header("text/html;charset=gb2312"); print $filename; open OUTPUT, ">upload/$filename" or die "$!"; binmode $filename; binmode OUTPUT; my $buffer; while ( read($filename, $buffer, 1024) ) { print OUTPUT $buffer; } close(OUTPUT); 运行后,出现这样的错误: Software error: Insecure dependency in open while running setgid at /home/ghw/myperl/webproject/upload.pl line 22. For help, please send mail to the webmaster (you at example.com), giving this error message and the time and date of the error. 日志记录: [Sun Jan 15 22:05:23 2006] [error] [Sun Jan 15 22:05:23 2006] -e: Insecure dependency in open while running setgid at /home/ghw/myperl/webproject/upload.pl line 22.\n 我隐约觉的是-T的关系。 但是不知道如何去修正这个问题。请知道的朋友支个招。 谢谢。 -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:?y?~??!??? From hylinux at gmail.com Sun Jan 15 06:15:35 2006 From: hylinux at gmail.com (=?GB2312?B?u8bStg==?=) Date: Sun, 15 Jan 2006 22:15:35 +0800 Subject: [PerlChina] =?gb2312?b?zai5/WNnaS5wbcnPtKvOxLz+?= In-Reply-To: <74646cb40601150558s77585737q@mail.gmail.com> References: <74646cb40601150558s77585737q@mail.gmail.com> Message-ID: <74646cb40601150615v472a69ccg@mail.gmail.com> 另外我还发现一个问题。 就是我使用Alias 设定perl目录后。 mod_perl把这个目录里所有的文件都当成了perl代码。 我传入一个jpg格式的图像文件都会被当成perl脚本来解析。我想是不是应该有一个选项能够改变这种情况。 也请给位帮帮忙看看。 谢谢。 -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:?y?????!??? From fayland at gmail.com Sun Jan 15 06:58:43 2006 From: fayland at gmail.com (fayland) Date: Sun, 15 Jan 2006 22:58:43 +0800 Subject: [PerlChina] =?GB2312?B?zai5/WNnaS5wbcnPtKvOxLz+?= In-Reply-To: <74646cb40601150615v472a69ccg@mail.gmail.com> References: <74646cb40601150558s77585737q@mail.gmail.com> <74646cb40601150615v472a69ccg@mail.gmail.com> Message-ID: <43CA6323.1020702@gmail.com> SetHandler default-handler 另外第一个问题大致可能是因为 my $filename = $q->param("file"); 这样子默认传入的都似 untaint 模式的,需要将其过滤下才行。比如去掉 .. 之 类的。 黄叶 wrote: > 另外我还发现一个问题。 > 就是我使用Alias 设定perl目录后。 > mod_perl把这个目录里所有的文件都当成了perl代码。 > 我传入一个jpg格式的图像文件都会被当成perl脚本来解析。我想是不是应该有 > 一个选项能够改变这种情况。 > > 也请给位帮帮忙看看。 > > 谢谢。 > > ------------------------------------------------------------------------ > > _______________________________________________ > China-pm mailing list > China-pm at pm.org > http://mail.pm.org/mailman/listinfo/china-pm -- Fayland Lam // http://www.fayland.org/ From cnhacktnt at gmail.com Sun Jan 15 06:57:54 2006 From: cnhacktnt at gmail.com (cnhack TNT) Date: Sun, 15 Jan 2006 22:57:54 +0800 Subject: =?GB2312?B?UmU6IFtQZXJsQ2hpbmFdIM2ouf1jZ2kucG3Jz7SrzsS8/g==?= In-Reply-To: <74646cb40601150558s77585737q@mail.gmail.com> References: <74646cb40601150558s77585737q@mail.gmail.com> Message-ID: hi~黄叶, 是 -T 的关系,你可以看看 perldoc perlsec 的描述。 解决的方法是去掉 apache 配置文件中的 PerlSwitches -T 及程序首行的 -T 选项。 或者按照 perlsec 里所描述的方法对有污染的存在安全隐患的变量进行清洗,试试增改过的代码: #!/usr/bin/perl -T use strict; use warnings; use CGI; use CGI::Carp qw(fatalsToBrowser); $CGI::DISABLE_UPLOADS = 0; $CGI::POST_MAX = -1; my $q = CGI->new; my $filename = $q->param("file"); #=========Untaint================== if($filename=~ /^([-\@\w.]+)$/){ $filename=$1; }else{ die "bad $filename\n"; } #================================ print $q->header("text/html;charset=gb2312"); print $filename; open OUTPUT, ">upload/$filename" or die "$!"; binmode $filename; binmode OUTPUT; my $buffer; while ( read($filename, $buffer, 1024) ) { print OUTPUT $buffer; } close(OUTPUT); -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:?y?k?!??? From cnhacktnt at gmail.com Sun Jan 15 07:01:17 2006 From: cnhacktnt at gmail.com (cnhack TNT) Date: Sun, 15 Jan 2006 23:01:17 +0800 Subject: =?GB2312?B?UmU6IFtQZXJsQ2hpbmFdIM2ouf1jZ2kucG3Jz7SrzsS8/g==?= In-Reply-To: References: <74646cb40601150558s77585737q@mail.gmail.com> Message-ID: 哈,真巧啊,发现 fayland 和黄叶都正在关注 mail list 嘛呵呵 -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:?y??u??!??? From hylinux at gmail.com Sun Jan 15 16:58:40 2006 From: hylinux at gmail.com (=?GB2312?B?u8bStg==?=) Date: Mon, 16 Jan 2006 08:58:40 +0800 Subject: =?GB2312?B?UmU6IFtQZXJsQ2hpbmFdIM2ouf1jZ2kucG3Jz7SrzsS8/g==?= In-Reply-To: References: <74646cb40601150558s77585737q@mail.gmail.com> Message-ID: <74646cb40601151658vb380d4es@mail.gmail.com> 谢谢几位。 我以前没有用perl做过web开发。 所以问题就多一些。 呵呵。 -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:?z??u??!??? From hylinux at gmail.com Sun Jan 15 17:21:00 2006 From: hylinux at gmail.com (=?GB2312?B?u8bStg==?=) Date: Mon, 16 Jan 2006 09:21:00 +0800 Subject: =?GB2312?B?UmU6IFtQZXJsQ2hpbmFdIM2ouf1jZ2kucG3Jz7SrzsS8/g==?= In-Reply-To: <74646cb40601151658vb380d4es@mail.gmail.com> References: <74646cb40601150558s77585737q@mail.gmail.com> <74646cb40601151658vb380d4es@mail.gmail.com> Message-ID: <74646cb40601151721t263148ccw@mail.gmail.com> Hi, fayland. 关于第二个问题, 就是显示不出jpg或者是其他图片的问题,mod_perl把所有的文件都当成了perl代码。 我改过配置成这样: Alias /perl/ /home/ghw/myperl/webproject/ 1038 PerlSwitches -T 1039 1040 1041 SetHandler default-handler 1042 1043 1044 1045 SetHandler perl-script 1046 PerlResponseHandler ModPerl::Registry 1047 PerlOptions +ParseHeaders 1048 Options +ExecCGI 1049 Order allow,deny 1050 Allow from all 1051 1052 1053 1054 SetHandler perl-script 1055 PerlResponseHandler Apache::Tutorial::First 1056 请恕我愚昧, 好像好事不能解决这个问题。 谢谢。 -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:?z?v???!??? From hylinux at gmail.com Sun Jan 15 17:55:53 2006 From: hylinux at gmail.com (=?GB2312?B?u8bStg==?=) Date: Mon, 16 Jan 2006 09:55:53 +0800 Subject: =?GB2312?B?UmU6IFtQZXJsQ2hpbmFdIM2ouf1jZ2kucG3Jz7SrzsS8/g==?= In-Reply-To: <74646cb40601151721t263148ccw@mail.gmail.com> References: <74646cb40601150558s77585737q@mail.gmail.com> <74646cb40601151658vb380d4es@mail.gmail.com> <74646cb40601151721t263148ccw@mail.gmail.com> Message-ID: <74646cb40601151755y28cb9b13m@mail.gmail.com> 如果我使用Directory指令进行配置的话,例如这样: Alias /perl/ /home/ghw/myperl/webproject/ PerlSwitches -T AddHandler perl-script .pl SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders Options +ExecCGI Order allow,deny Allow from all 运行的时候就会提示: [Mon Jan 16 09:59:14 2006] [error] [client 127.0.0.1] Options ExecCGI is off in this directory: /home/ghw/myperl/webproject/li1.pl, referer: http://127.0.0.1/perl/ 有点摸不着首尾了。 -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:?z???4???!??? From fayland at gmail.com Sun Jan 15 20:26:40 2006 From: fayland at gmail.com (fayland) Date: Mon, 16 Jan 2006 12:26:40 +0800 Subject: [PerlChina] =?GB2312?B?zai5/WNnaS5wbcnPtKvOxLz+?= In-Reply-To: <74646cb40601151755y28cb9b13m@mail.gmail.com> References: <74646cb40601150558s77585737q@mail.gmail.com> <74646cb40601151658vb380d4es@mail.gmail.com> <74646cb40601151721t263148ccw@mail.gmail.com> <74646cb40601151755y28cb9b13m@mail.gmail.com> Message-ID: <43CB2080.7030101@gmail.com> SetHandler default-handler 比如你的图片放在 perl/img 下就可以这么写 或许你可以试试全路径 /home/ghw/myperl/webproject/img/ +ExecCGI 的意思是让这个文件夹可以运行 .cgi 这种文件。按道理讲是正确的, Apache 的默认设置为 SetHandler perl-script PerlResponseHandler ModPerl::Registry Options +ExecCGI PerlOptions +ParseHeaders PerlOptions +SetupEnv 我挺正常的。 黄叶 wrote: > 如果我使用Directory指令进行配置的话,例如这样: > Alias /perl/ /home/ghw/myperl/webproject/ > PerlSwitches -T > > AddHandler perl-script .pl > SetHandler perl-script > PerlResponseHandler ModPerl::Registry > PerlOptions +ParseHeaders > Options +ExecCGI > Order allow,deny > Allow from all > > > > 运行的时候就会提示: > > [Mon Jan 16 09:59:14 2006] [error] [client 127.0.0.1 > ] Options ExecCGI is off in this directory: > /home/ghw/myperl/webproject/li1.pl, referer: http://127.0.0.1/perl/ > > 有点摸不着首尾了。 > > > ------------------------------------------------------------------------ > > _______________________________________________ > China-pm mailing list > China-pm at pm.org > http://mail.pm.org/mailman/listinfo/china-pm -- Fayland Lam // http://www.fayland.org/ From shijialee at gmail.com Sun Jan 15 20:33:27 2006 From: shijialee at gmail.com (Qiang ( James ) Li) Date: Sun, 15 Jan 2006 23:33:27 -0500 Subject: =?gb2312?B?udjT2rCyyKsgUmU6IFtQZXJsQ2hpbmFdIM2ouf1jZ2kucG3Jz7SrzsS8/g==?= References: <74646cb40601150558s77585737q@mail.gmail.com> <74646cb40601150615v472a69ccg@mail.gmail.com> Message-ID: <00d201c61a55$ff4ee260$3201a8c0@cozy505> ----- Original Message ----- From: "黄叶" To: Sent: Sunday, January 15, 2006 9:15 AM Subject: Re: [PerlChina] 通过cgi.pm上传文件 > 另外我还发现一个问题。 > 就是我使用Alias 设定perl目录后。 > mod_perl把这个目录里所有的文件都当成了perl代码。 > 我传入一个jpg格式的图像文件都会被当成perl脚本来解析。我想是不是应该有一个 选项能够改变这种情况。 > > 也请给位帮帮忙看看。 apache 的设置可能可以做你想要的。但是,从程序设计来说,上传的文件不应该放到 可以被外部执行的地方(或者说,在 apache 可执行目录里应该只放你认可的可执行文 件)。试想,如果我上传了一个搞破坏的 Perl 程序 ( 比如说 email 你的 /etc/passwd 文件给我),那么我就可以从外部来调用这个程序,来做任何运行 apache 的用户可以做的事情。 所以,你应该上传到 /var/tmp 或 /tmp 上传完后对文件也要做适当的检查,你的情况 是看是否图象文件,符合要求的才放到其他目录。 另外,-T 可以帮助你找到程序里可能的安全漏洞,推荐使用。对 -T 提示的错误也一 定要小心处理,很多不安全的程序都是因为对于从外部来的输入不作或作不够的检查而 造成的。 运行 perldoc perlsec ,我建议你把里面的建议仔细学习一下。 Qiang From hylinux at gmail.com Mon Jan 16 18:17:50 2006 From: hylinux at gmail.com (=?GB2312?B?u8bStg==?=) Date: Tue, 17 Jan 2006 10:17:50 +0800 Subject: =?GB2312?B?UmU6ILnY09qwssirIFJlOiBbUGVybENoaW5hXSDNqLn9Y2dpLnBtyc+0q87EvP4=?= In-Reply-To: <00d201c61a55$ff4ee260$3201a8c0@cozy505> References: <74646cb40601150558s77585737q@mail.gmail.com> <74646cb40601150615v472a69ccg@mail.gmail.com> <00d201c61a55$ff4ee260$3201a8c0@cozy505> Message-ID: <74646cb40601161817y67afcce5t@mail.gmail.com> Ok. 谢谢你的建议。 但是我还是需要上传到我的服务器上。是通过http上传不是其他的方式。 关于安全的问题,我想这是一个很大,也很矛盾的问题。 OK? 请帮助我如何解决这个问题。 谢谢。 -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:?{?o?!??? From hylinux at gmail.com Mon Jan 16 18:35:46 2006 From: hylinux at gmail.com (=?GB2312?B?u8bStg==?=) Date: Tue, 17 Jan 2006 10:35:46 +0800 Subject: [PerlChina] =?gb2312?b?udjT2mFwYWNoZbXEtO3O8w==?= Message-ID: <74646cb40601161835q5a0d6ee6p@mail.gmail.com> 我从apache的日志里总能看到这样的错误: [Tue Jan 17 10:35:51 2006] [error] [client 127.0.0.1] File does not exist: /home/ghw/phpproject/favicon.ico 这个错误非常讨厌,请问一下,我要如何配置一下。避免出现这个呢? -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:?{?n??{?!??? From fayland at gmail.com Mon Jan 16 19:52:30 2006 From: fayland at gmail.com (fayland) Date: Tue, 17 Jan 2006 11:52:30 +0800 Subject: [PerlChina] =?GB2312?B?udjT2mFwYWNoZbXEtO3O8w==?= In-Reply-To: <74646cb40601161835q5a0d6ee6p@mail.gmail.com> References: <74646cb40601161835q5a0d6ee6p@mail.gmail.com> Message-ID: <43CC69FE.2060500@gmail.com> 找一个 favicon.ico 传上去是最简单的办法。 这是 Firefox 之类的浏览器请求的。 黄叶 wrote: > 我从apache的日志里总能看到这样的错误: > [Tue Jan 17 10:35:51 2006] [error] [client 127.0.0.1 > ] File does not exist: /home/ghw/phpproject/favicon.ico > > 这个错误非常讨厌,请问一下,我要如何配置一下。避免出现这个呢? > > ------------------------------------------------------------------------ > > _______________________________________________ > China-pm mailing list > China-pm at pm.org > http://mail.pm.org/mailman/listinfo/china-pm -- Fayland Lam // http://www.fayland.org/ From shijialee at gmail.com Mon Jan 16 20:41:11 2006 From: shijialee at gmail.com (Qiang ( James ) Li) Date: Mon, 16 Jan 2006 23:41:11 -0500 Subject: =?gb2312?B?UmU6ILnY09qwssirIFJlOiBbUGVybENoaW5hXSDNqLn9Y2dpLnBtyc+0q87E?= =?gb2312?B?vP4=?= References: <74646cb40601150558s77585737q@mail.gmail.com> <74646cb40601150615v472a69ccg@mail.gmail.com> <00d201c61a55$ff4ee260$3201a8c0@cozy505> <74646cb40601161817y67afcce5t@mail.gmail.com> Message-ID: <002901c61b20$3e5acf80$3201a8c0@cozy505> ----- Original Message ----- From: "黄叶" To: "Qiang ( James ) Li" ; Sent: Monday, January 16, 2006 9:17 PM Subject: Re: 关于安全 Re: [PerlChina] 通过cgi.pm上传文件 > Ok. > 谢谢你的建议。 > 但是我还是需要上传到我的服务器上。是通过http上传不是其他的方式。 > 关于安全的问题,我想这是一个很大,也很矛盾的问题。 > OK? > 请帮助我如何解决这个问题。 > 谢谢。 > 这和使用 http 方式上传没有什么关系,安全的问题你具体那里不了解请问。另外, perlsec 文档请务必阅读。 Qiang From hylinux at gmail.com Tue Jan 17 06:34:31 2006 From: hylinux at gmail.com (=?GB2312?B?u8bStg==?=) Date: Tue, 17 Jan 2006 22:34:31 +0800 Subject: =?GB2312?B?UmU6ILnY09qwssirIFJlOiBbUGVybENoaW5hXSDNqLn9Y2dpLnBtyc+0q87EvP4=?= In-Reply-To: <002901c61b20$3e5acf80$3201a8c0@cozy505> References: <74646cb40601150558s77585737q@mail.gmail.com> <74646cb40601150615v472a69ccg@mail.gmail.com> <00d201c61a55$ff4ee260$3201a8c0@cozy505> <74646cb40601161817y67afcce5t@mail.gmail.com> <002901c61b20$3e5acf80$3201a8c0@cozy505> Message-ID: <74646cb40601170634u7ddeaf24o@mail.gmail.com> 呵呵。我的问题是,好像使用了taint模式后,上传文件的话,就会提示出错。 如果不使用taint模式,我又比较担心。 我应该好好的看看前面的兄弟说的。 -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:?{????k?!??? From hylinux at gmail.com Tue Jan 17 16:48:21 2006 From: hylinux at gmail.com (=?GB2312?B?u8bStg==?=) Date: Wed, 18 Jan 2006 08:48:21 +0800 Subject: =?GB2312?B?UmU6IFtQZXJsQ2hpbmFdIM2ouf1jZ2kucG3Jz7SrzsS8/g==?= In-Reply-To: <43CB2080.7030101@gmail.com> References: <74646cb40601150558s77585737q@mail.gmail.com> <74646cb40601151658vb380d4es@mail.gmail.com> <74646cb40601151721t263148ccw@mail.gmail.com> <74646cb40601151755y28cb9b13m@mail.gmail.com> <43CB2080.7030101@gmail.com> Message-ID: <74646cb40601171648lca58e45i@mail.gmail.com> 呵呵总算明白什么是taint模式和如何u taint模式了。 谢谢各位。 -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:?|???!??? From hylinux at gmail.com Thu Jan 19 21:32:19 2006 From: hylinux at gmail.com (=?GB2312?B?u8bStg==?=) Date: Fri, 20 Jan 2006 13:32:19 +0800 Subject: [PerlChina] =?gb2312?b?udjT2lBlcmy1xL34s8w=?= Message-ID: <74646cb40601192132n77ea3030t@mail.gmail.com> 有哪位大大能够讲一下Perl的进程的编程么? 我写了一个进程的代码,结构总发现会有些问题。 -------------- next part -------------- q?????!???,r??m??m???????j+??j)r?j??j?r????:???{?!???