Olá, Indo no vácuo do faw estou enviando o script Python que venho utilizando para o envio das DSAs para a lista debian-news-portuguese. Resalto que sou iniciante na linguagem Python, portanto pode ter muita coisa "porca" aí no meio. Grande parte do trabalho "sujo" o script já faz, mas algumas coisas ainda tem que ser feitas na mão. Junto com esse script eu uso um outro bem simples em shell script: ------mail_dsa.sh------- #!/bin/sh python extract_dsa.py $1 > dsa.draft # Como meu sistema está em utf-8 preciso converter o arquivo gerado iconv dsa.draft -f iso8859-1 -t utf-8 > dsa.txt mutt -H dsa.txt ------------------------ Segue em anexo o arquivo extract_dsa.py Se alguém quiser melhorar o script, esteja a vontade :) Abraços
#!/bin/env python # -*- coding: latin-1 -*- """ extract_dsa.py Extrai o conteudo da pagina HTML de avisos de seguranca Debian (DSAs) e gera um template de e-mail para o mutt. Uso: extract_dsa.py <numero_da_dsa> > arquivo_template. ex: extract_dsa 960 > dsa_960.txt Apos gerar o template carregue-o com: ~$ mutt -H arquivo_template """ import sys import urllib import sgmllib import re dsa_regex = re.compile(r"(DSA-\d+-\d+\s+.+\s+--\s+.+)") cve_regex = re.compile(r"(CVE-\d+-\d+)") dsa_data = re.compile(r"(?P<dd>..)/(?P<mm>..)/(?P<aaaa>....)") Meses=('Janeiro','Fevereiro','Mar�,'Abril','Maio','Junho', 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro') class DsaParser(sgmllib.SGMLParser): inside_text = False text = '' matches = [] cve = [] last_item = '' lista = [] def start_div(self, attrs): for attr, value in attrs: if value == "inner": self.inside_text = True def end_div(self): self.inside_text = False def handle_data(self, data): if self.inside_text and data: m = dsa_regex.match(data) if m is not None: self.matches.extend(m.groups()) self.dsa_string = self.matches[0].split(' ',3) m = cve_regex.match(data) if m is not None: self.cve.extend(m.groups()) self.lista = uniq(self.cve) m = dsa_data.search(data) if m is not None: self.dia = m.group('dd') self.mes = Meses[int(m.group('mm'))-1] self.ano = m.group('aaaa') self.text = self.text + data def uniq(l): res = [] for x in l: if x not in res: res.append(x) return res def main(): for url in sys.argv[1:]: try: myurl = "http://www.us.debian.org/security/2006/dsa-%s.pt.html" % url file = open(myurl) except IOError: file = urllib.urlopen(myurl) cve_items ='' p = DsaParser() p.feed(file.read()) p.close() dsa = p.dsa_string[0] package = p.dsa_string[1] separator = p.dsa_string[2] issue = p.dsa_string[3] if p.lista: for item, obj in enumerate(p.lista): cve_items = cve_items + "[" + str(item+3) + "]" + obj + ", " else: cve_items = "Nenhuma outra base de dados externas de refer�ias de seguran�est�ispon�l atualmente." text = '' lines = p.text.splitlines() for item in lines[14:]: text = text + item + "\n" header="""To: debian-news-portuguese@lists.debian.org Cc: Bcc: Subject: [SEGURANCA][%s] %s (%s) Reply-To: debian-user-portuguese@lists.debian.org -------------------------------------------------------------------------- Alerta de Seguran�Debian %s security@debian.org http://www.debian.org/security/%s/%s %s de %s de %s http://www.debian.org/security/faq -------------------------------------------------------------------------- Essa �ma tradu� do DSA (Debian Security Advisory - Alerta de Seguran�Debian) que �nviado para a lista [1]debian-security-announce e, por esse motivo, h�m atraso entre o an� original em ingl�e esta tradu�. Caso queira receber os alertas em ingl� [2]inscreva-se na lista. 1.http://lists.debian.org/debian-security-announce 2. Envie um e-mail para debian-security-announce-request@lists.debian.org e coloque no campo assunto a palavra \"subscribe\". -------------------------------------------------------------------------- Vulnerabilidade : %s CVE ID : %s """ % (dsa,package,issue,dsa,p.ano,dsa.lower(),p.dia,p.mes,p.ano,issue,cve_items) footer=""" 3. 4. -- Marco Carvalho (macs) <marcocarvalho89@yahoo.com.br> ******************************************************************* .''`. Debian Weekly News: <http://www.debian.org/News/weekly> : :' : Debian BR.........: <http://debianbrasil.org> `. `'` Equipe de Imprensa e Tradu�s do Debian-BR `- O que voc�uer saber hoje? """ print header print text print footer file.close if __name__ == "__main__": main()
Attachment:
signature.asc
Description: Digital signature