CVS: ispman/lib/ISPMan Handlers.pm,1.2,1.3 Portal.pm,1.4,1.5 ApacheMan.pm,1.33,1.34 LDAP.pm,1.74,1.75 MailGroupMan.pm,1.5,1.6 Utils.pm,1.18,1.19 Client.pm,1.1,NONE Daemon.pm,1.3,NONE
Joerg Delker <[email protected]>
| Newsgroups | gmane.comp.isp.ispman.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/ispman/ispman/lib/ISPMan
In directory sc8-pr-cvs1:/tmp/cvs-serv23200/lib/ISPMan
Modified Files:
ApacheMan.pm LDAP.pm MailGroupMan.pm Utils.pm
Added Files:
Handlers.pm Portal.pm
Removed Files:
Client.pm Daemon.pm
Log Message:
rollback of HEAD to REL_1_0 versions
former HEAD development will continue in "experimental-branch" and merged back here
(more info on ispman-developer maillist and upcoming README.cvs in HEAD)
Index: ApacheMan.pm
===================================================================
RCS file: /cvsroot/ispman/ispman/lib/ISPMan/ApacheMan.pm,v
retrieving revision 1.33
retrieving revision 1.34
diff -C2 -r1.33 -r1.34
*** ApacheMan.pm 7 Oct 2003 15:33:20 -0000 1.33
--- ApacheMan.pm 4 Jan 2004 18:56:15 -0000 1.34
***************
*** 80,85 ****
sub editVhost {
! my $self=shift;
! my $r=shift;
my $dn;
if ($r->param("dn")) {
--- 80,85 ----
sub editVhost {
! my $self=shift;
! my $r=shift;
my $dn;
if ($r->param("dn")) {
***************
*** 89,105 ****
}
! $self->{'vhost'}=$self->getVhostInfo($dn);
my $vhostDN=$self->getVhostDN($r->param("ispmanDomain"), $r->param("ispmanVhostName"));
! my $template;
my $tmpl;
my $text=$self->getTemplate("vhosts/edit_header.tmpl")->fill_in(PACKAGE => "ISPMan");
! if ($self->isDomainEditable($r->param("ispmanDomain"))) {
$tmpl=($r->param("section"))? join "_", ("edit", $r->param("section")) : "edit";
$template=$self->getTemplate("vhosts/$tmpl\.tmpl");
! } else {
! $template=$self->getTemplate("vhosts/view.tmpl");
! }
$text.=$template->fill_in(PACKAGE => "ISPMan");
print $text;
--- 89,105 ----
}
! $self->{'vhost'}=$self->getVhostInfo($dn);
my $vhostDN=$self->getVhostDN($r->param("ispmanDomain"), $r->param("ispmanVhostName"));
! my $template;
my $tmpl;
my $text=$self->getTemplate("vhosts/edit_header.tmpl")->fill_in(PACKAGE => "ISPMan");
! if ($self->isDomainEditable($r->param("ispmanDomain"))) {
$tmpl=($r->param("section"))? join "_", ("edit", $r->param("section")) : "edit";
$template=$self->getTemplate("vhosts/$tmpl\.tmpl");
! } else {
! $template=$self->getTemplate("vhosts/view.tmpl");
! }
$text.=$template->fill_in(PACKAGE => "ISPMan");
print $text;
***************
*** 111,126 ****
sub getApacheVhosts {
! my $self=shift;
! my $dn=shift;
! unless ($dn=~/^(ispmanVhostName|ou=)/){
! #its a domain name instead
$dn=$self->getVhostsBranchDN($dn);
}
! my $vhostsHash=$self->getEntriesAsHashRef($dn, "objectclass=ispmanVirtualHost", ["ispmanVhostName"]);
! my $vhosts;
! for (keys %$vhostsHash) {
! $vhosts->{$vhostsHash->{$_}{'ispmanVhostName'}}=$_;
! }
! return $vhosts;
}
--- 111,127 ----
sub getApacheVhosts {
! my $self=shift;
! my $dn=shift;
!
! unless ($dn=~/^(ispmanVhostName|ou=)/){
! #its a domain name instead
$dn=$self->getVhostsBranchDN($dn);
}
! my $vhostsHash=$self->getEntriesAsHashRef($dn, "objectclass=ispmanVirtualHost", ["ispmanVhostName"]);
! my $vhosts;
! for (keys %$vhostsHash) {
! $vhosts->{$vhostsHash->{$_}{'ispmanVhostName'}}=$_;
! }
! return $vhosts;
}
***************
*** 169,228 ****
sub update_vhost {
! my $self=shift;
! my $r=shift;
my $dn=$self->getVhostDN($r->param("ispmanDomain"), $r->param("ispmanVhostName"));
! my $domain=$r->param("ispmanDomain");
! my $domain_info=$self->getDomainInfo($domain);
!
! if ($r->param("ispmanVhostServerAlias")) {
! my $serveralias=[split(/\s\s*/, $r->param("ispmanVhostServerAlias"))];
! $r->param("ispmanVhostServerAlias", $serveralias) if $serveralias;
! } else {
! $r->param("ispmanVhostServerAlias", " ");
! }
! my $data;
! $data ={
! "ispmanVhostName" => $r->param("ispmanVhostName"),
! "cn" => $r->param("ispmanVhostName"),
! 'uidNumber' => $domain_info->{'uidNumber'},
! 'gidNumber' => $domain_info->{'gidNumber'},
! "ispmanDomain" => $domain,
! };
! $data->{'uid'}=join '.' , ($r->param("ispmanVhostName"), $r->param("ispmanDomain"));
! $data->{'homeDirectory'}=join '/' , ($domain_info->{'homeDirectory'}, "vhosts", $r->param("ispmanVhostName"));
!
! for (qw(ispmanVhostServerAlias ispmanVhostExtraConf ispmanVhostIpAddress
! ispmanVhostDocumentRoot ispmanVhostScriptDir
! FTPQuotaMBytes FTPStatus ispmanVhostStats ispmanVhostLogdir
! ispmanVhostStatdir)) {
! if ($r->param($_)) {
$data->{$_}=$r->param($_);
! }
! }
!
! $data->{'userPassword'}=$self->encryptPassWithMethod($r->param("userPassword"),$self->getConf('userPassHashMethod'));
! #update the objectclasses if they are different
! $data->{'objectClass'}=$self->{'Config'}{'ispmanVhostObjectclasses'};
! for (qw(ispmanVhostDocumentRootOption ispmanVhostScriptDirOption)) {
! if ($r->param($_)) {
$data->{$_}=[$r->param($_)];
! } else {
! $data->{$_}="";
! }
! }
!
!
!
! if ($self->{'ldap'}->updateEntryWithData($dn, $data)) {
! $self->addVhostProcess($r->param("ispmanDomain"), $r->param("ispmanVhostName"), "ModifyVirtualHost" , $r->param("ispmanVhostName"));
! }
return 1;
--- 170,227 ----
sub update_vhost {
! my $self=shift;
! my $r=shift;
my $dn=$self->getVhostDN($r->param("ispmanDomain"), $r->param("ispmanVhostName"));
! my $domain=$r->param("ispmanDomain");
! my $domain_info=$self->getDomainInfo($domain);
!
! if ($r->param("ispmanVhostServerAlias")){
! my $serveralias=[split(/\s\s*/, $r->param("ispmanVhostServerAlias"))];
! $r->param("ispmanVhostServerAlias", $serveralias) if $serveralias;
! } else {
! $r->param("ispmanVhostServerAlias", " ");
! }
!
! my $data;
! $data ={
! "ispmanVhostName" => $r->param("ispmanVhostName"),
! "cn" => $r->param("ispmanVhostName"),
! 'uidNumber' => $domain_info->{'uidNumber'},
! 'gidNumber' => $domain_info->{'gidNumber'},
! "ispmanDomain" => $domain,
! };
! $data->{'uid'}=join '.' , ($r->param("ispmanVhostName"), $r->param("ispmanDomain"));
! $data->{'homeDirectory'}=join '/' , ($domain_info->{'homeDirectory'}, "vhosts", $r->param("ispmanVhostName"));
! for (qw(ispmanVhostServerAlias ispmanVhostExtraConf ispmanVhostIpAddress ispmanVhostDocumentRoot ispmanVhostScriptDir
! FTPQuotaMBytes FTPStatus)) {
! if ($r->param($_)) {
$data->{$_}=$r->param($_);
! }
! }
!
! $data->{'userPassword'}=$self->encryptPassWithMethod($r->param("userPassword"),$self->getConf('userPassHashMethod'));
! #update the objectclasses if they are different
! $data->{'objectClass'}=$self->{'Config'}{'ispmanVhostObjectclasses'};
! for (qw(ispmanVhostDocumentRootOption ispmanVhostScriptDirOption)) {
! if ($r->param($_)) {
$data->{$_}=[$r->param($_)];
! } else {
! $data->{$_}="";
! }
! }
!
!
!
! if ($self->{'ldap'}->updateEntryWithData($dn, $data)){
! $self->addVhostProcess($r->param("ispmanDomain"), $r->param("ispmanVhostName"), "ModifyVirtualHost", $r->param("ispmanVhostName"));
! }
return 1;
***************
*** 264,268 ****
my $ispmanVhostName=$r->param("ispmanVhostName");
$ispmanVhostName=lc($ispmanVhostName);
- # Vhostname can have a-z . and -
$ispmanVhostName=~s/[^a-zA-Z0-9\.-]//g;
$r->param("ispmanVhostName", $ispmanVhostName);
--- 263,266 ----
***************
*** 271,287 ****
my $dn=$self->getVhostDN($domain, $ispmanVhostName);
$r->param("dn", $dn);
!
$self->prepareBranchForDN($self->getVhostsBranchDN($domain));
!
my $documentrootoptions=$self->as_arrayref($r->param("ispmanVhostDocumentRootOption"));
my $scriptdiroptions=$self->as_arrayref($r->param("ispmanVhostScriptDirOption"));;
- if ($r->param("ispmanVhostServerAlias")) {
-
- my $serveralias=[split(/\s\s*/, $r->param("ispmanVhostServerAlias"))];
- $r->param("ispmanVhostServerAlias", $serveralias) if $serveralias;
- } else {
- $r->param("ispmanVhostServerAlias", " ");
- }
my $data;
--- 269,278 ----
my $dn=$self->getVhostDN($domain, $ispmanVhostName);
$r->param("dn", $dn);
!
$self->prepareBranchForDN($self->getVhostsBranchDN($domain));
!
my $documentrootoptions=$self->as_arrayref($r->param("ispmanVhostDocumentRootOption"));
my $scriptdiroptions=$self->as_arrayref($r->param("ispmanVhostScriptDirOption"));;
my $data;
***************
*** 295,311 ****
};
$data->{'uid'}=join '.' , ($r->param("ispmanVhostName"), $r->param("ispmanDomain"));
!
$data->{'objectClass'}=$self->{'Config'}{'ispmanVhostObjectclasses'};
$data->{'homeDirectory'}=join '/' , ($domain_info->{'homeDirectory'}, "vhosts", $r->param("ispmanVhostName"));
$data->{'userPassword'}=$self->encryptPassWithMethod($r->param("userPassword"),$self->getConf('userPassHashMethod'));
$data->{"FTPStatus"} = $r->param("FTPStatus");
- $data->{"ispmanVhostStats"} = $r->param("ispmanVhostStats");
$data->{"FTPQuotaMBytes"} = $r->param("FTPQuotaMBytes");
$data->{"cn"} = join '.', ($r->param("ispmanVhostName"), $domain);
!
$data->{"ispmanVhostExtraConf"} = $r->param("ispmanVhostExtraConf") if $r->param("ispmanVhostExtraConf");
!
$data->{"ispmanVhostDocumentRootOption"} = $documentrootoptions;
$data->{"ispmanVhostScriptDirOption"} = $scriptdiroptions;
--- 286,301 ----
};
$data->{'uid'}=join '.' , ($r->param("ispmanVhostName"), $r->param("ispmanDomain"));
!
$data->{'objectClass'}=$self->{'Config'}{'ispmanVhostObjectclasses'};
$data->{'homeDirectory'}=join '/' , ($domain_info->{'homeDirectory'}, "vhosts", $r->param("ispmanVhostName"));
$data->{'userPassword'}=$self->encryptPassWithMethod($r->param("userPassword"),$self->getConf('userPassHashMethod'));
$data->{"FTPStatus"} = $r->param("FTPStatus");
$data->{"FTPQuotaMBytes"} = $r->param("FTPQuotaMBytes");
$data->{"cn"} = join '.', ($r->param("ispmanVhostName"), $domain);
!
$data->{"ispmanVhostExtraConf"} = $r->param("ispmanVhostExtraConf") if $r->param("ispmanVhostExtraConf");
!
$data->{"ispmanVhostDocumentRootOption"} = $documentrootoptions;
$data->{"ispmanVhostScriptDirOption"} = $scriptdiroptions;
***************
*** 314,351 ****
$data->{"ispmanVhostDocumentRoot"} = $r->param("ispmanVhostDocumentRoot") || join '/', ($r->param("ispmanVhostName"), "htdocs");
$data->{"ispmanVhostScriptDir"} = $r->param("ispmanVhostScriptDir") || join '/', ($r->param("ispmanVhostName"), "cgi-bin");
!
! ### STAT AN LOG DIR ###
! ### Upgrade to make sure there is a value
! if ($r->param("ispmanVhostLogdir") ne "") {
! $data->{"ispmanVhostLogdir"} = $r->param("ispmanVhostLogdir");
! } else {
! if (lc($self->getConf('apacheLogsDirectory')) eq 'none') {
! $data->{"ispmanVhostLogdir"} = join "/",($domain_info->{'homeDirectory'},"vhosts", $r->param("ispmanVhostName"), "logs");
! } else {
! $data->{"ispmanVhostLogdir"} = $r->param("ispmanVhostLogdir") || join "/", ($self->getConf('apacheLogsDirectory'), "vhosts");
! }
! }
!
! ### Upgrade to make sure there is a value
! if ($r->param("ispmanVhostStatdir") ne "") {
! $data->{"ispmanVhostStatdir"} = $r->param("ispmanVhostStatdir");
! } else {
! if (lc($self->getConf('apacheLogsDirectory')) eq 'none') {
! $data->{"ispmanVhostLogdir"} = join "/",($domain_info->{'homeDirectory'},"vhosts", $r->param("ispmanVhostName"), "stats");
! } else {
! $data->{"ispmanVhostStatdir"} = $r->param("ispmanVhostLogdir") || join "/", ($self->getConf('apacheLogsDirectory'), "domains", $data->{"ispmanDomain"}, $data->{"ispmanVhostName"});
! }
! }
! ### STAT AN LOG DIR ###
!
! $data->{"ispmanVhostIpAddress"} = $r->param("ispmanVhostIpAddress") || $self->getHostIp($data->{'webHost'}) || $self->getConf("apacheVhostsIP") || "*";
$data->{"webHost"} = $r->param("webHost") || $domain_info->{'ispmanDomainDefaultWebHost'};
$data->{"fileHost"} = $r->param("fileHost") || $domain_info->{'ispmanDomainDefaultFileServer'};
! my $IpAddress;
! if ($data->{"ispmanVhostIpAddress"} eq "*") {
! $IpAddress = $self->getHostIp($data->{'webHost'});
! } else {
! $IpAddress = $data->{"ispmanVhostIpAddress"};
! }
--- 304,311 ----
$data->{"ispmanVhostDocumentRoot"} = $r->param("ispmanVhostDocumentRoot") || join '/', ($r->param("ispmanVhostName"), "htdocs");
$data->{"ispmanVhostScriptDir"} = $r->param("ispmanVhostScriptDir") || join '/', ($r->param("ispmanVhostName"), "cgi-bin");
! $data->{"ispmanVhostIpAddress"} = $r->param("ispmanVhostIpAddress") || $self->getConf("apacheVhostsIP") || "*";
$data->{"webHost"} = $r->param("webHost") || $domain_info->{'ispmanDomainDefaultWebHost'};
$data->{"fileHost"} = $r->param("fileHost") || $domain_info->{'ispmanDomainDefaultFileServer'};
! $data->{"DestinationAddress"} = $r->param("fileHost") || $domain_info->{'ispmanDomainDefaultFileServer'};
***************
*** 353,376 ****
if ($data->{"webHost"}){
if ($self->addNewEntryWithData($dn, $data)){
! if (! $self->isArecord($r->param("ispmanVhostName"), $r->param("ispmanDomain"))) {
! $self->newDNSRecord($r->param("ispmanDomain"), "aRecord", $r->param("ispmanVhostName"), $IpAddress, {'tXTRecord' => "ispmanVirtualHost:$data->{'cn'}"} );
! }
$self->addProcessToHost($r->param("ispmanDomain"), $data->{"webHost"}, "AddVirtualHost", $r->param("ispmanVhostName"));
!
$self->addVirtualHostDirectoriesProcess(
! $r->param("ispmanDomain"),
! $r->param("ispmanVhostName"),
"AddVirtualHostDirectories",
! join ",", (
! $r->param("ispmanVhostName"),
! $domain_info->{'homeDirectory'},
! $data->{"ispmanVhostDocumentRoot"},
! $data->{"ispmanVhostScriptDir"},
! $domain_info->{'uidNumber'},
! $domain_info->{'gidNumber'},
! $data->{"ispmanVhostLogdir"},
! $data->{"ispmanVhostStatdir"},
! )
! );
return 1;
}
--- 313,332 ----
if ($data->{"webHost"}){
if ($self->addNewEntryWithData($dn, $data)){
! $self->addVhostDNSRecord($r->param("ispmanDomain"), $r->param("ispmanVhostName"), $self->getHostIp($data->{'webHost'}));
$self->addProcessToHost($r->param("ispmanDomain"), $data->{"webHost"}, "AddVirtualHost", $r->param("ispmanVhostName"));
!
$self->addVirtualHostDirectoriesProcess(
! $r->param("ispmanDomain"),
! $r->param("ispmanVhostName"),
"AddVirtualHostDirectories",
! join ",", (
! $r->param("ispmanVhostName"),
! $domain_info->{'homeDirectory'},
! $data->{"ispmanVhostDocumentRoot"},
! $data->{"ispmanVhostScriptDir"},
! $domain_info->{'uidNumber'},
! $domain_info->{'gidNumber'}
! )
! );
return 1;
}
***************
*** 415,421 ****
$vhostInfo->{"ispmanVhostScriptDir"},
)
! );
$self->addVhostProcess($ispmanDomain, $ispmanVhostName, "DeleteVirtualHost", $ispmanVhostName);
if ($self->delTree($dn)) {
--- 371,381 ----
$vhostInfo->{"ispmanVhostScriptDir"},
)
! );
$self->addVhostProcess($ispmanDomain, $ispmanVhostName, "DeleteVirtualHost", $ispmanVhostName);
+ # Delete the A Record from DNS for this vhost
+ # It will only be deleted if it was added bythis vhost process
+ $self->deleteVhostDNSRecord($ispmanDomain, $ispmanVhostName);
+
if ($self->delTree($dn)) {
***************
*** 539,550 ****
# delete web direcory
! my $self=shift;
! my ($domain, $vhost, $process, $param)=@_;
! my $vhostInfo=$self->getVhostInfo($vhost, $domain);
if ($vhostInfo->{'fileHost'}){
$self->addProcessToHost($domain, $vhostInfo->{'fileHost'} , $process, $param);
} elsif ($vhostInfo->{'webHost'}){
! $self->addProcessToHost($domain, $vhostInfo->{'webHost'} , $process, $param);
! } else {
$self->addProcessToGroup($domain, 'fileservergroup' , $process, $param);
}
--- 499,510 ----
# delete web direcory
! my $self=shift;
! my ($domain, $vhost, $process, $param)=@_;
! my $vhostInfo=$self->getVhostInfo($vhost, $domain);
if ($vhostInfo->{'fileHost'}){
$self->addProcessToHost($domain, $vhostInfo->{'fileHost'} , $process, $param);
} elsif ($vhostInfo->{'webHost'}){
! $self->addProcessToHost($domain, $vhostInfo->{'webHost'} , $process, $param);
! } else {
$self->addProcessToGroup($domain, 'fileservergroup' , $process, $param);
}
***************
*** 566,569 ****
--- 526,530 ----
1;
+
__END__
Index: LDAP.pm
===================================================================
RCS file: /cvsroot/ispman/ispman/lib/ISPMan/LDAP.pm,v
retrieving revision 1.74
retrieving revision 1.75
diff -C2 -r1.74 -r1.75
*** LDAP.pm 2 Jan 2004 14:33:59 -0000 1.74
--- LDAP.pm 4 Jan 2004 18:56:15 -0000 1.75
***************
*** 99,103 ****
if (!$LDAP || $reconnect) {
#if ($LDAP=Net::LDAP->new($self->{'host'} , onerror => \&LDAPERROR) ){
! if ($LDAP=Net::LDAP->new($self->{'host'},version=>$self->{'Config'}->{'ldapVersion'}) ){
$self->ldap_bind();
} else {
--- 99,103 ----
if (!$LDAP || $reconnect) {
#if ($LDAP=Net::LDAP->new($self->{'host'} , onerror => \&LDAPERROR) ){
! if ($LDAP=Net::LDAP->new($self->{'host'}) ){
$self->ldap_bind();
} else {
Index: MailGroupMan.pm
===================================================================
RCS file: /cvsroot/ispman/ispman/lib/ISPMan/MailGroupMan.pm,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** MailGroupMan.pm 14 May 2003 10:31:34 -0000 1.5
--- MailGroupMan.pm 4 Jan 2004 18:56:15 -0000 1.6
***************
*** 1,3 ****
-
=head1 NAME
ISPMan::MailGroupMail - Functions to manage rfc822MailGroups
--- 1,2 ----
***************
*** 46,52 ****
deleteMailGroup
removeMailGroup
- getMailGroupAttributeValues
- addMailGroupAttributeValues
-
);
--- 45,48 ----
***************
*** 79,83 ****
-
sub createMailGroup {
my $self=shift;
--- 75,78 ----
***************
*** 147,167 ****
}
-
-
- sub getMailGroupAttributeValues {
- my $self=shift;
- my ($domain, $group, $attribute)=@_;
- print "Returning $attribute for $group\@$domain\n";
- my $groupInfo=$self->get_mail_group_info($domain, $group);
- return $groupInfo->{$attribute};
- }
-
-
- sub addMailGroupAttributeValues {
- my $self=shift;
- my ($domain, $group, $attribute, $values)=@_;
- my $_values=$self->as_arrayref($self->getMailGroupAttributeValues($domain, $group, $attribute), $values);
- $self->updateEntryWithData($self->getMailGroupDN($domain, $group), {$attribute => $_values});
- }
--- 142,145 ----
Index: Utils.pm
===================================================================
RCS file: /cvsroot/ispman/ispman/lib/ISPMan/Utils.pm,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -r1.18 -r1.19
*** Utils.pm 26 Apr 2003 17:52:03 -0000 1.18
--- Utils.pm 4 Jan 2004 18:56:15 -0000 1.19
***************
*** 65,69 ****
-
$VERSION = '0.01';
--- 65,68 ----
***************
*** 79,98 ****
! my $source;
! my $tmpl_directory;
! if ($file=~/^\//){
! $source=$file;
! } else {
! if ( -d join "/", ($self->getConf("installDir") , "cgi-bin")){
! $tmpl_directory=join "/", ($self->getConf("installDir") , "cgi-bin/tmpl");
! } else {
! # ispman-web/cgi-bin (for maintainers)
! $tmpl_directory=join "/", ($self->getConf("installDir") , "ispman-web/cgi-bin/tmpl");
! }
- $source= join "/", ($tmpl_directory, $file);
- }
-
$self->log_event("opening $source as template") if $self->getConfig("debug")>1;
--- 78,97 ----
! my $source;
! my $tmpl_directory;
! if ($file=~/^\//){
! $source=$file;
! } else {
! if ( -d join "/", ($self->getConf("installDir") , "cgi-bin")){
! $tmpl_directory=join "/", ($self->getConf("installDir") , "cgi-bin/tmpl");
! } else {
! # ispman-web/cgi-bin (for maintainers)
! $tmpl_directory=join "/", ($self->getConf("installDir") , "ispman-web/cgi-bin/tmpl");
! }
!
! $source= join "/", ($tmpl_directory, $file);
! }
$self->log_event("opening $source as template") if $self->getConfig("debug")>1;
***************
*** 506,510 ****
} else {
# dont add if $_ is undef
! push @l, $_ if $_;
}
}
--- 505,509 ----
} else {
# dont add if $_ is undef
! push @l, $_ if $_;
}
}
--- Client.pm DELETED ---
--- Daemon.pm DELETED ---
-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills. Sign up for IBM's
Free Linux Tutorials. Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click