iT邦幫忙

0

有關將perl script 放入/usr/bin/ 問題請教

  • 分享至 

  • twitterImage

請問..我將寫好的perl script 放入到 /usr/bin/xxx.pl裡

然我在在CLI裡 輸入 XXX.PL 會出現ERR訊息
-bash: /usr/bin/pop3: /usr/bin/perl^M: bad interpreter: 沒有此一檔案或目錄

是什麼原因...我打開/usr/bin/裡的一些perl腳本..也執行系統原存在的perl腳本,執行它們都不會出現上述的err訊息....

因為我要在 radius 的 users設定檔裡..加上
DEFAULT Auth-Type = Accept, User-Name =~ "@mail.km.edu.tw"
<span style="color: #FF0000;">Exec-Program-Wait ="/usr/bin/xxx.pl mail.edu.tw %u %{Password}"</span>
Fall-Through = 1,

PS:另有一個問題是..我在radius server 的 users上面有設定了User-Name =~ "@mail.km.edu.tw" 導致了,我現在
只要在web認證畫面上只要內容有打"@mail.km.edu.tw,不管帳密如何..它竟然都能通過認證...= =|||
實在是不知要如何改...如有經驗的前輩還請指點一下...感恩...

呵...
看來..yaojie也研究的不錯..
POP3認證部份想由exec方式來做..
理論上,這應該也是可以Work的
不過exec執行完的output應該要正確的AV-Pair才行吧..??

你將原本print login-fail 的部份改成Auth-Type=Reject 試看看?

不過不確定啦..畢竟Auth-Type 是Freeradius系統用的屬性,
會不會二次解析我也有點不確定。
試過了..應該不Work. Auth-Type 似乎不能覆寫..
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
6
fillano
iT邦超人 1 級 ‧ 2010-03-14 19:53:29
最佳解答

看起來你的perl script第一行(#!/usr/bin/perl)多了一個dos/windows的分行符號,把他去掉試試看。

看更多先前的回應...收起先前的回應...
yaojie iT邦新手 5 級 ‧ 2010-03-14 20:58:51 檢舉

感謝你的回應..修改好之後就沒第一個問題了...
不過卻延伸另一個問題..
Can't call method "login" on an undefined value at /usr/bin/pop3 line 12.

可否再指點一下..如何解決..

fillano iT邦超人 1 級 ‧ 2010-03-15 09:22:17 檢舉

你執行這支程式時,有傳參數給他嗎?參數正確嗎?

我加參數測試是ok的喔。

fillano iT邦超人 1 級 ‧ 2010-03-15 09:26:53 檢舉

第一個參數是是pop3伺服器的的hostnamee,沒有這個的話,Net::POP3->new($hostname) 不會正確執行,所以$pop變數不是你要的物件,也不會有login方法可以用。

只傳第一個參數的話,應該會出現 login fail 訊息。正確登入時,則出現 give radius variable 訊息。

yaojie iT邦新手 5 級 ‧ 2010-03-23 19:21:34 檢舉

提供了三個參數後,目前測試上是可以....
大家都提供了很好的方法...就選你了..^^

6
tombo
iT邦高手 1 級 ‧ 2010-03-15 00:05:07

第一行是用來指定 Interrupter的路徑檔案
那個^M是 DOS/Windows才有的分行符號,請去掉。

另外,您要不要貼出 Code 讓大家看看呀。要不然人家怎麼知道第12行或是其他行出了問題?

看更多先前的回應...收起先前的回應...
yaojie iT邦新手 5 級 ‧ 2010-03-15 01:34:35 檢舉

use Net::POP3;

my $hostname=$ARGV[0];
my $username=$ARGV[1];
my $password=$ARGV[2];

$pop = Net::POP3->new($hostname);
if($pop->login($username,$password)){

login success

print "give radius variable";
}else{

login fail

print "login fail";
}
$pop->quit;

sula3065408 iT邦研究生 1 級 ‧ 2010-03-15 14:26:20 檢舉

你$username、$password應該沒定義過吧!

sula3065408 iT邦研究生 1 級 ‧ 2010-03-15 14:28:35 檢舉

Sorry~我看錯了,你$username以及$password有定義到,你要不要確定一下你$pop有沒有new成功。

sbl iT邦新手 5 級 ‧ 2010-03-15 16:15:50 檢舉

建議可以使用perl -d "你的程式"
來測試,看看是執行到哪個階段才出現問題
會比較好找出問題點

yaojie iT邦新手 5 級 ‧ 2010-03-23 19:20:11 檢舉

感謝你提供的測試方法....^^

4
pail
iT邦新手 4 級 ‧ 2010-03-16 10:06:30

(1) 原程式, 只要你有確實餵給它 3 個參數, 它就應該是 okay 的才是.
如: perl test.pl pop3Server username passwd
(2) 避免有 Windows 換行字元
可以用 cat -t test.pl 來驗證, 如果有看到 ^M 就是有 windows 換行字元.
消去方式, 常用的有兩種..
[1] 使用 dos2unix command
如: dos2unix test.pl
[2] 使用 col command
如: cat test.pl | col -b > newfile
(3) =~ 是 perl 的RE, 看起來你不太了解它, 請啃啃文件先.

yaojie iT邦新手 5 級 ‧ 2010-03-23 19:19:34 檢舉

對於perl我是不了解這語法,所以才會上來請教...
=~這個符號在設定檔內表示正規...所以還有些概念..
很感謝你的回覆..並提供一些測試方法..^^

我要發表回答

立即登入回答