Arquivo

Arquivo da Categoria ‘Linux’

Zimbra: Recuperando MySQL corrompido

10, fevereiro, 2011 Sem comentários

Opa,

Recentemente tive um problema grave com o servidor de colaboração Zimbra, todo o tráfego de e-mail estava parado e, após uma busca nos logs, descobri que o problema estava no banco de dados MySQL que estava com algumas tabelas corrompidas, segue abaixo os passos que foram necessários para fazer um dump de todas as tabelas relacionadas, limpeza da base e importação dos dados.

OBS.: Mantenha sempre um backup, essa opção pode não funcionar em alguns casos! Não me responsabilizo pelo que pode ocorrer ao seu banco, realize esses passos por sua conta e risco!

Primeiro pare os serviços do Zimbra:

[zimbra@meuservidoremail ~]$ zmcontrol stop

Adicione a variável abaixo no arquivo de configuração do banco MySQL dentro da sessão [mysqld]:

[zimbra@meuservidoremail ~]$ vim /opt/zimbra/conf/my.cnf

innodb_force_recovery = 1

Inicie o serviço do MySQL:

[zimbra@meuservidoremail ~]$ mysql.server start

Carregue as variáveis do Zimbra:

[zimbra@meuservidoremail ~]$ source ~/bin/zmshutil ; zmsetvars

Crie uma lista dos bancos de dados existentes:

[zimbra@meuservidoremail ~]$ mysql –batch –skip-column-names -e “show databases” | grep -e mbox -e zimbra > /tmp/mysql.db.list

Crie um diretório na pasta tmp para armazenar os dumps dos bancos:

[zimbra@meuservidoremail ~]$ mkdir /tmp/mysql.sql

Faça o dump dos bancos:

[zimbra@meuservidoremail ~]$ for db in $(cat /tmp/mysql.db.list); do
~/mysql/bin/mysqldump $db -S $mysql_socket -u root –password=$mysql_root_password > /tmp/mysql.sql/$db.sql
echo “Dumped $db”
done

OBS1.: Se forem apresentados erros na execução dos dumps dos bancos, incremente o valor da variável innodb_force_recovery (o valor máximo é 6), reinicie o banco e execute o comando novamente até não obter erros.

OBS2.: Caso tenha problemas em executar os dumps acesse esse link para resetar a senha do banco MySQL.

Remova todos os bancos existentes e possivelmente corrompidos:

[zimbra@meuservidoremail ~]$ for db in $(cat /tmp/mysql.db.list |grep mbox)
do
mysql -u root –password=$mysql_root_password -e “drop database $db”
echo -e “Dropped $db”
done

[zimbra@meuservidoremail ~]$ mysql -u root –password=$mysql_root_password -e “drop database zimbra”

Remova a váriavel innodb_force_recovery do arquivo de configuração do banco MySQL e reinicie o serviço:

[zimbra@meuservidoremail ~]$ vim /opt/zimbra/conf/my.cnf
[zimbra@meuservidoremail ~]$ mysql.server restart

Crie os bancos e importe os dumps:

[zimbra@meuservidoremail ~]$ for db in $(cat /tmp/mysql.db.list)
do
mysql -e “create database $db character set utf8”
echo “Created $db”
done

[zimbra@meuservidoremail ~]$ mysql zimbra < /tmp/mysql.sql/zimbra.sql

[zimbra@meuservidoremail ~]$ for sql in /tmp/mysql.sql/mbox*
do
mysql $(basename $sql .sql) < $sql
echo -e “Updated $(basename $sql .sql) \n”
done

Teste o acesso ao banco e inicie os serviços do Zimbra:

[zimbra@meuservidoremail ~]$ mysql zimbra -e “select * from mailbox order by id desc limit 1”
[zimbra@meuservidoremail ~]$ zmcontrol start

Pronto! Verifique nos logs se os erros continuam e lembre-se de executar backup’s!

Abraço!

Fonte: http://wiki.zimbra.com/index.php?title=Mysql_Crash_Recovery

Categories: Linux Tags: , ,

Logando remotamente no seu Desktop

8, fevereiro, 2011 Sem comentários

Opa,

Recentemente precisei logar no meu Desktop do trabalho remotamente, mas não tinha configurado/ativado nenhum serviço do tipo, após uma breve busca na Internet encontrei o que estava precisando. Esses passos foram utilizados no Ubuntu, mas acredito que funcionem em outras distros sem problemas.

Primeiro foi necessário instalar o software x11vnc no meu Desktop do trabalho, que fez a “mágica” de exibir o meu gerenciador de login (GDM):

# sudo apt-get install x11vnc

Depois iniciei o programa:

# sudo x11vnc -ncache 10 -display :0 -q

Pronto! Com isso já foi possível acessar via VNC na porta 5900 o gerenciador de login!

OBS.: No link da fonte pode-se criar um túnel entre o computador local e remoto via SSH!

Abraço!

Fonte: http://ubuntuforums.org/showthread.php?t=1544847&page=1

Categories: Linux Tags: , ,

Ubuntu enviando ID de conta para multifuncional Kyocera

30, dezembro, 2010 7 comentários

Opa,

Recentemente me deparei com um problema que estava me incomodando bastante no Ubuntu 10.04, imprimir na nova impressora da empresa, uma multifuncional KM-2820 da Kyocera. O primeiro problema eram os drivers que não existiam no meu Desktop, solucionado fazendo uma busca no CD de instalação que veio junto com a multifuncional. Já o segundo problema me deixou irritado por algum tempo, como enviar o ID de conta, já que a impressora foi configurada para imprimir somente com um ID de conta válido? A solução foi simples, mas acredito que em novo driver deverão corrigir isso, vamos aos passos:

Primeiro, antes de instalar a impressora com o driver do CD, copie o driver para o seu Desktop e abra-o no seu editor de texto preferido, procure pelas linhas abaixo e altere para o número do seu ID de conta, é eu sei que no Windows o ID de conta é solicitado durante a impressão, mas como não consegui ativar essa opção com o driver fornecido pelo fabricante, tive que defini-lo diretamente no arquivo PPD, isso pode ser um problema em uma máquina que seja utilizada por várias pessoas, mas não foi o meu caso.

# vim Kyocera_KM-2820.PPD

*% Management Code Definitions
*OpenUI *KmManagment/Controle de trabalho: PickOne
*OrderDependency: 60 AnySetup *KmManagment
*DefaultKmManagment: Default
*KmManagment Default/Desactivado: ""
*KmManagment MG00000000/00000000: "(00000000) statusdict /setmanagementnumber get exec"

Na linha KmManagment MG00000000/00000000: “(00000000) statusdict /setmanagementnumber get exec” altere os valores 00000000 para o número do seu ID de conta, ex.: KmManagment MG123456/123456: “(123456) statusdict /setmanagementnumber get exec”, salve o arquivo e instale a impressora utilizando esse arquivo PPD.

Atualização: Abra o gerenciador de impressão do Ubuntu, clique com o botão direito na impressora e escolha Propriedades, depois “Opções da impressora”, vá até a opção “Controle de trabalho” e escolha o seu ID.

Pronto! Quando for imprimir já será enviado o número do seu ID de conta!

OBS.: Nesse link de um fórum italiano foi criado um script para solicitar o ID de conta do usuário, mas não cheguei a testar!

Abraço!

Categories: Linux Tags: , , ,

Milestone atualizado com o ShadowMOD-BR via Ubuntu

26, novembro, 2010 49 comentários

Opa,

Só criei esse post para informar que finalmente criei coragem e atualizei meu Motorola Milestone para a versão 2.2.1 do Android (Froyo). Utilizei a versão do ShadowMOD-BR e a instalação e utilização, até agora, não apresentou nenhum problema, como a maioria das instalações informou como fazer utilizando o Windows eu vou mudar um pouco e falar como atualizar utilizando o Ubuntu Linux (OBS.: algumas pessoas não conseguiram executar o sbf_flash na versão 64bits).

OBS.: NÃO ME RESPONSABILIZO POR QUAISQUER DANOS QUE POSSAM OCORRER NO SEU APARELHO! NO MEU E EM VÁRIOS OUTROS FUNCIONARAM COM SUCESSO, MAS NÃO GARANTO QUE ESSES PASSOS IRÃO SERVIR PARA O SEU CASO!

Primeiro acesse o site do ShadowMOD-BR e baixe os pacotes:

– SBF base 2.2.1;
OpenRecovery 1.46;
Ultima ShadowMOD-BR disponível;

Depois baixe o aplicativo sbf_flash, consegui encontrá-lo aqui.

Agora vamos aos passos para a instalação (a maioria delas está no site do desenvolvedor, só adaptei algumas linhas referentes a instalação no Ubuntu Linux):

1. Descompacte o OpenRecovery e copie o update.zip e o diretório OpenRecovery para o diretório raiz do seu SD Card.

2. Copie o arquivo zip da ShadowMOD-BR para o diretorio /OpenRecovery/updates.

3. Desligue seu telefone.

4. Aperte e segure o botão de abaixar volume e câmera e ligue o telefone. Continue segurando o botão de abaixar volume/câmera mesmo apos ligado.

5. Irá aparecer uma tela escrito BootLoader (xx.xx), se não aparecer repita o passo anterior.

6. Conecte seu cabo USB no telefone, o Linux já deverá reconhecê-lo e mostrar os dados da conexão pelo comando dmesg, algo como:

scsi 6:0:0:0: Direct-Access     Motorola A853             0001 PQ: 0 ANSI: 2

7. Agora execute o aplicativo sbf_flash (lembre-se de dar permissão de execução ao mesmo):

$ chmod +x sbf_flash
$ sudo ./sbf_flash MILESTONE_BASE_2.2.1.sbf

[sudo] password for fl0cker:
SBF FLASH 1.11 (mbm)

=== MILESTONE_BASE_2.2.1.sbf ===
00: RDL03 0x82000000-0x8204CFFF 00C1 AP
01: CG31 0xB01C0000-0xB01C47FF 24FE AP
02: CG33 0xD13FB000-0xD1BB783F E479 AP
03: CG34 0xB03A0000-0xB03A47FF CC19 AP
04: CG35 0xB07A0000-0xB0A607FF 888E AP
05: CG36 0xF0B7D000-0xF0BE083F 26E7 AP
06: CG37 0xE4034000-0xE40379BF 9325 AP
07: CG40 0xDD2E4000-0xDD2E483F FDFF AP
08: CG42 0xB06A0000-0xB06DFFFF 73E3 AP
09: CG45 0xB0B20000-0xB0E207FF 79ED AP
10: CG47 0xB0EE0000-0xB12A07FF 679E AP
11: CG53 0xCFD80000-0xCFD807FF FDFF AP
12: CG61 0xB0640000-0xB06607FF 6C74 AP

Milestone found.
>> uploading RDL03
Uploading: 100% OK
>> verifying ramloader
-- OK
>> executing ramloader
Milestone found.
>> sending erase
>> uploading CG31
Uploading: 100% OK
>> uploading CG33
Uploading: 100% OK
>> uploading CG34
Uploading: 100% OK
>> uploading CG35
Uploading: 100% OK
>> uploading CG36
Uploading: 100% OK
>> uploading CG37
Uploading: 100% OK
>> uploading CG40
Uploading: 100% OK
>> uploading CG42
Uploading: 100% OK
>> uploading CG45
Uploading: 100% OK
>> uploading CG47
Uploading: 100% OK
>> uploading CG53
Uploading: 100% OK
>> uploading CG61
Uploading: 100% OK
>> verifying CG31
-- OK
>> verifying CG33
-- OK
>> verifying CG34
-- OK
>> verifying CG35
-- OK
>> verifying CG36
-- OK
>> verifying CG37
-- OK
>> verifying CG40
-- OK
>> verifying CG42
-- OK
>> verifying CG45
-- OK
>> verifying CG47
-- OK
>> verifying CG53
-- OK
>> verifying CG61
-- OK
>> rebooting

8. Quando terminar o procedimento o telefone ira reiniciar (apagando e acendendo ou travado no logo da Motorola).

9. Desligue o telefone novamente.

10. Entre em modo de recovery apertando e segurando o botão X do teclado (em alguns modelos de Milestone, o meu foi assim, é o botão da câmera ao invés do X) e ligue-o telefone. Continue segurando o botão X ou câmera mesmo após ligado.

11. Irá aparecer um triangulo com uma exclamação, nesse momento aperte o botão de aumentar volume e da câmera (juntos).

12. Irá aparecer um menu com algumas opções. Usando o D-pad do teclado, selecione a opção “apply sdcard:update.zip”.

13. Selecione “Wipe Data/Factory Reset” e escolha “Yes”.

14. Selecione “Apply Update”.

15. Selecione “update-smbr-vX.X-signed.zip”.

16. Irá ser pedido uma confirmção se quer instalar, selecione “Yes”.

17. Terminado a instalação selecione “Go Back” e escolha “Reboot System”.

Pronto! Seu telefone já irá iniciar na versão 2.2.1 do Froyo! Abaixo alguns screenshots:

Abraço!

Fontes:
http://code.google.com/p/shadowmodbr/wiki/Tutorial
http://www.lucasleao.net/wordpress/archives/458

Categories: Linux Tags: , , , ,

Liberando Servidor NFS no Firewall do XenServer

18, novembro, 2010 Sem comentários

Opa,

Recentemente precisei adicionar mais dispositivos de armazenamento do que o limite permitido pelo XenServer em uma VM (7 para PV e 3 para HVM), portanto resolvi instalar o dispositivo no XenServer e compartilhá-lo via NFS com as VM’s, segue abaixo como foi realizada essa tarefa.

Primeiro foi necessário definir as portas por onde o tráfego NFS iria passar, pois será preciso liberá-las no Firewall, para isso edite o arquivo abaixo:

# vi /etc/sysconfig/nfs

LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
RQUOTAD_PORT=875
STATD_PORT=662
STATD_OUTGOING_PORT=2020

No XenServer o serviço portmap vem configurado para “escutar” somente localmente por padrão, será necessário alterar a variável PMAP_ARGS para que fique da mesma forma abaixo:

# vi /etc/sysconfig/portmap

PMAP_ARGS=""

Adicione os compartilhamentos desejados no arquivo exports (Lembre-se de adaptar para a sua faixa de rede):

# vi /etc/exports

/mnt/backup    192.168.100.0/24(rw,sync,no_subtree_check)

Reinicie os serviços:

# /etc/init.d/portmap restart
# /etc/init.d/nfs restart
# /etc/init.d/rpcsvcgssd restart

Atualize o arquivo com as regras do Iptables para o tráfego NFS (Lembre-se de adaptar para a sua faixa de rede):

# vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -s 192.168.100.0/24 -m state --state NEW -p udp --dport 111 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.100.0/24 -m state --state NEW -p tcp --dport 111 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.100.0/24 -m state --state NEW -p tcp --dport 2049 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.100.0/24  -m state --state NEW -p tcp --dport 32803 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.100.0/24  -m state --state NEW -p udp --dport 32769 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.100.0/24  -m state --state NEW -p tcp --dport 892 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.100.0/24  -m state --state NEW -p udp --dport 892 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.100.0/24  -m state --state NEW -p tcp --dport 875 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.100.0/24  -m state --state NEW -p udp --dport 875 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.100.0/24  -m state --state NEW -p tcp --dport 662 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.100.0/24 -m state --state NEW -p udp --dport 662 -j ACCEPT

Reinicie o serviço do Iptables e pronto!

# /etc/init.d/iptables restart

Agora já pode acessar os compartilhamentos via NFS!

Abraço!

Fontes:
1 – http://www.cyberciti.biz/faq/centos-fedora-rhel-iptables-open-nfs-server-ports/
2 – http://forums.citrix.com/thread.jspa?messageID=1511031

Categories: Linux Tags: , , , , ,

Combatendo SPAM com o Postgrey

3, novembro, 2010 Sem comentários

Opa,

Ultimamente notei no servidor de e-mail que o número de mensagens SPAM não paravam de crescer, resolvi então procurar uma solução de greylist (“espera”) para adicionar ao Postfix. Depois da implantação desse recurso obtive uma redução de cerca de 40% no número de SPAM recebido pelo servidor, seguem abaixo os passos utilizados em um OpenSuSE 10.3.

OBS.: Vale lembrar que após a ativação desse recurso as mensagens deverão sofrer um atraso na entrega, portanto use por sua conta e risco!

Instale o postgrey com o comando abaixo:

# zypper install postgrey

Ajuste o número em segundos da “espera” e coloque o serviço para executar no modo TCP:

# vim /etc/sysconfig/postgrey

POSTGREY_CONN_OPTIONS="--inet=127.0.0.1:60000"
POSTGREY_EXTRA_OPTIONS="--auto-whitelist-clients --delay=120"

Inicie o serviço:

# /etc/init.d/postgrey start

Edite o arquivo main.cf do Postfix para que o serviço seja utilizado, ajustando a variável smtpd_recipient_restrictions:

# vim /etc/postfix/main.cf

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access hash:/etc/postfix/client_access, reject_unauth_destination, check_policy_service inet:127.0.0.1:60000, reject_rbl_client sbl-xbl.spamhaus.org, reject_rbl_client dnsbl.sorbs.net, reject_rbl_client bl.spamcop.net, reject_rbl_client combined.rbl.msrbl.net, permit

Pronto, agora basta salvar o arquivo e reiniciar o serviço para que a “espera” comece a funcionar:

# /etc/init.d/postfix restart

Não esqueça de ativar o serviço do postgrey na inicialização do sistema:

# chkconfig postgrey on

Abraço!

Fonte: http://www.howtoforge.net/spam-control-for-postfix

Categories: Linux Tags: , , , ,

Configurando bonding de rede no Oracle Linux

7, outubro, 2010 Sem comentários

Opa,

Essa dica foi testada no Oracle Enterprise Linux 5.5 mas deve funcionar normalmente em qualquer outra distribuição que tenha suporte ao módulo bonding habilitado no kernel, seguem abaixo os passos que realizei para a configuração de 4 placas de rede trabalharem como “uma”, utilizando balanceamento de carga (load balance) e tolerância a falhas (fault tolerance).

Primeiro vamos criar o arquivo de configuração da interface bond0:

# vim /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
NETWORK=192.168.100.0
NETMASK=255.255.255.0
IPADDR=192.168.100.2
GATEWAY=192.168.100.1
USERCTL=no

Agora alteramos os arquivos de configuração das interfaces de rede para se tornarem parte da interface bond0 (mude o X pelo número das interfaces, ex.: eth0, eth1, eth2 e eth3):

# vim /etc/sysconfig/network-scripts/ifcfg-ethX

DEVICE=ethX
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no

Precisamos garantir agora que o módulo bonding será carregado na inicialização do sistema e o modo de operação do bonding (escolha o modo que melhor se adeque a sua situação, para maiores informações sobre os tipos disponíveis acesse o link 2 nas fontes disponíveis ao final desse post):

# vim /etc/modprobe.conf

alias bond0 bonding
options bond0 miimon=100 mode=6

Agora só nos resta carregar o módulo e reiniciar a rede:

# modprobe bonding
# /etc/init.d/network restart

Uma dica para realizar um teste simples é inserir os cabos de rede nas interfaces, enviar um ping para algum endereço e simular uma falha removendo um de cada vez.

Abraço!

Fontes:
1 – http://lists.us.dell.com/pipermail/oraclesolutions/2008-March/000005.html
2 – http://www.sheepguardingllama.com/2008/01/linux-bonding-modes/
3 – http://www.howtoforge.com/nic-bonding-on-debian-lenny

Categories: Linux Tags: , , ,

Desabilitando impressoras no servidor Samba

12, agosto, 2010 Sem comentários

Opa,

Já faz um tempo que não posto nada técnico por aqui (estou brincando bastante com o Android ainda), portanto resolvi postar essa dica para desabilitar o suporte a impressão no servidor Samba.

Para isso basta editar o arquivo smb.conf e alterar/adicionar as linhas abaixo:

# vim /etc/samba/smb.conf

load printers = no
printing = bsd
printcap name = /dev/null
show add printer wizard = no
disable spoolss = yes

Execute o comando testparm para verificar se existem erros no arquivo
de configuração e depois basta recarregar o samba com o comando abaixo:

# /etc/init.d/smb reload

Pronto!

Fonte: http://lists.samba.org/archive/samba/2006-December/127596.html

Categories: Linux Tags: , ,

Compilar driver ET131x no OpenSuSE 10.3

Opa,

Recentemente tive que compilar o driver et131x para a placa de rede Agere PCI Express ET-131x no OpenSuSE 10.3. Para isso primeiro é necessário instalar os fontes do kernel e também alguns pacotes necessários para compilação:

# zypper install make gcc kernel-source

Depois é necessário baixar os drivers atualizados no site do projeto:

# wget -c http://sourceforge.net/projects/et131x/files/et131x-1.2.3-3%20Source/et131x/et131x-1.2.3-3.tar.gz/download

Descompactar e compilar o driver:

# tar -xvzf et131x-1.2.3-3.tar.gz
# cd et131x-1.2.3-3/
# make

Caso não seja apresentado nenhum erro na compilação, instalar o módulo no sistema através do comando:

# make modules_install

Carregue o módulo no sistema:

# modprobe et131x

Verifique com o comando dmesg se o driver foi carregado:

# dmesg

10/100/1000 Base-T Ethernet Driver for the ET1310, v1.2.3 01/31/2006 15:40:00 by Agere Systems, http://www.agere.com
ACPI: PCI Interrupt 0000:03:00.0[A] → GSI 16 (level, low) → IRQ 16
PCI: Setting latency timer of device 0000:03:00.0 to 64

Agora basta configurar a interface pelo YaST:

# yast network

Abraço!

Categories: Linux Tags: , ,

Patch fix para a quarentena do Dspam 3.8.0

Opa,

Recentemente encontrei um problema em uma instalação de um servidor de e-mail com o software Dspam (anti-spam). O problema aconteceu quando um e-mail legítimo foi considerado spam (falso positivo) e decidi recuperá-lo através da interface Web, removendo-o da quarentena. O primeiro erro que detectei foi na visualização da mensagem pois não era exibido o código fonte, o segundo erro foi quando cliquei no botão “Deliver message”, nada ocorreu! Após uma busca rápida pela Internet encontrei um patch para o arquivo dspam.cgi que conserta esse problema, segue abaixo:

--- webui.orig/cgi-bin/dspam.cgi	2007-02-14 13:18:59.000000000 -0500
+++ webui/cgi-bin/dspam.cgi	2007-03-27 16:43:46.000000000 -0400
@@ -531,10 +532,13 @@
   foreach my $period (qw( daily weekly )) {
     my $uc_period=uc($period);
     my $hk="DATA_$uc_period";
-    my %lst=();
+    my %lst=(
+	spam => [],
+	nonspam => [],
+	title	=> []
+    );
     foreach my $hr (sort {$a->{idx}<=>$b->{idx}} (values %{$Stats{$period}})) {
       foreach my $type (qw( spam nonspam title )) {
-        (exists $lst{$type}) || ($lst{$type}=[]);
         push(@{$lst{$type}},$hr->{$type});
         my $totk="";
         if ($type eq "spam") { $totk="S"; }
@@ -546,9 +550,9 @@
       }
     }
     $DATA{$hk}=join("_",
-		join(",",@{$lst{spam}}),
-		join(",",@{$lst{nonspam}}),
-		join(",",@{$lst{title}}),
+		join(",",@{$lst{spam}}    || [0]),
+		join(",",@{$lst{nonspam}} || [0]),
+		join(",",@{$lst{title}}   || [0]),
 	);
   }
 
@@ -698,7 +702,7 @@
   }
   open(FILE, "<$MAILBOX");
   while(<FILE>) {
-    chomp;
+    s/\r?\n$//;
     push(@buffer, $_);
   }
   close(FILE);
@@ -759,7 +763,7 @@
 
   open(FILE, "<$MAILBOX");
   while(<FILE>) {
-    chomp;
+    s/\r?\n$//;
     push(@buffer, $_);
   }
   close(FILE);
@@ -839,7 +843,7 @@
 
   open(FILE, "<$MAILBOX");
   while(<FILE>) {
-    chomp;
+    s/\r?\n//;
     push(@buffer, $_);
   }
   close(FILE);
@@ -907,7 +911,7 @@
   }
   open(FILE, "<$MAILBOX");
   while(<FILE>) {
-    chomp;
+    s/\r?\n//;
     push(@buffer, $_);
   }
   close(FILE);
@@ -980,7 +984,7 @@
   $rowclass="rowEven";
   open(FILE, "<$MAILBOX");
   while(<FILE>) {
-    chomp;
+    s/\r?\n//;
     if ($_ ne "") {
       if ($mode eq "") { 
         if ($_ =~ /^From /) {

Após aplicar o patch o código da mensagem passou a ser exibido normalmente e o botão “Deliver message” também. Abraço!

Fonte: http://www.mail-archive.com/dspam-users@lists.nuclearelephant.com/msg00675.html

Categories: Linux Tags: , ,