if (empty($filename)) {
$filename = $this->getHeader('content-type', '/name="?([^"]+)"?/');
}
- }
+ }
list($type, $subtype) = explode('/', $content_type);
switch ($type) {
case 'text': case 'message':
$newpart = new BananaMimePart($part);
if (!is_null($newpart->content_type)) {
if ($signed && $newpart->content_type == $this->signature['protocole']) {
- $signature = $newpart->body;
+ $signature = $newpart->body;
} elseif ($signed) {
$signed_message = $part;
}
{
if ($is_filename) {
$type = mime_content_type($data);
+ if ($type == 'text/plain') { // XXX Workaround a bug of php 5.2.0+etch10 (fallback for mime_content_type is text/plain)
+ $type = preg_replace('/;.*/', '', trim(shell_exec('file -bi ' . escapeshellarg($data))));
+ }
} else {
$arg = escapeshellarg($data);
$type = preg_replace('/;.*/', '', trim(shell_exec("echo $arg | file -bi -")));
}
if (!is_null($this->charset)) {
- $body = iconv($this->charset, 'UTF-8//IGNORE', $this->body);
+ $body = @iconv($this->charset, 'UTF-8//IGNORE', $this->body);
if (empty($body)) {
return;
}
$signed =& $this->getSignedPart();
if ($signed !== $this) {
return $signed->getText();
- }
+ }
$this->decodeContent();
return $this->body;
}
'artid' => Banana::$artid,
'part' => $part)))
. '" alt="' . banana_htmlentities($this->filename) . '" />';
+ } else if ($type == 'multipart' && $subtype == 'alternative') {
+ $types =& Banana::$msgshow_mimeparts;
+ foreach ($types as $type) {
+ @list($type, $subtype) = explode('/', $type);
+ $part = $this->getParts($type, $subtype);
+ if (count($part) > 0) {
+ return $part[0]->toHtml();
+ }
+ }
} elseif ((!in_array($type, Banana::$msgshow_mimeparts)
&& !in_array($this->content_type, Banana::$msgshow_mimeparts))
|| $this->disposition == 'attachment') {
private function checkPGPSignature($signature, $message = null)
{
+ if (!Banana::$msgshow_pgpcheck) {
+ return true;
+ }
$signname = tempnam(Banana::$spool_root, 'banana_pgp_');
+ $gpg = 'LC_ALL="en_US" ' . Banana::$msgshow_pgppath . ' ' . Banana::$msgshow_pgpoptions . ' --verify '
+ . $signname . '.asc ';
file_put_contents($signname. '.asc', $signature);
$gpg_check = array();
if (!is_null($message)) {
file_put_contents($signname, str_replace(array("\r\n", "\n"), array("\n", "\r\n"), $message));
- exec('LC_ALL="en_US" gpg --verify ' . $signname . '.asc ' . $signname . ' 2>&1', $gpg_check, $result);
+ exec($gpg . $signname . ' 2>&1', $gpg_check, $result);
unlink($signname);
} else {
- exec('LC_ALL="en_US" gpg --verify ' . $signname . '.asc 2&>1', $gpg_check, $result);
+ exec($gpg . '2&>1', $gpg_check, $result);
}
unlink("$signname.asc");
if (preg_match('/Signature made (.+) using (.+) key ID (.+)/', array_shift($gpg_check), $matches)) {
if (preg_match('/Good signature from "(.+)"/', $signature, $matches)) {
$this->signature['verify'] = true;
$this->signature['identity'] = array($matches[1]);
+ $this->signature['certified'] = true;
} elseif (preg_match('/BAD signature from "(.+)"/', $signature, $matches)) {
$this->signature['verify'] = false;
$this->signature['identity'] = array($matches[1]);
+ $this->signature['certified'] = false;
} else {
return false;
}
if (preg_match('/aka "(.+)"/', $aka, $matches)) {
$this->signature['identity'][] = $matches[1];
}
+ if (preg_match('/This key is not certified with a trusted signature!/', $aka)) {
+ $this->signature['certified'] = false;
+ $this->signature['certification_error'] = _b_("identité non confirmée");
+ }
}
return true;
}