[Pmwiki-users] autodetect diff and patch
Patrick R. Michaud
pmichaud at pobox.com
Thu Jul 3 16:54:38 CDT 2003
Actually, I recommend against automatically running the `which diff`/
`which patch` command to determine the location of the diff(1)
program--that's a bit of an expensive command to be running on every
execution of PmWiki (i.e., every time that a PmWiki page is accessed).
Plus a lot of system administrators will be wary of executing programs
where a full path isn't specified--lots of room for some trojan horsing
to take place there.
I will release a version of PmWiki with the locations of diff(1) and
patch(1) as configuration variables (but not automatically located); I'll
also set up an option that makes it easy to have PmWiki search for the
locations of diff/patch if they aren't available.
Many thanks for the excellent suggestion.
Pm
On Thu, Jul 03, 2003 at 02:04:27PM -0700, jdkim at socrates.Berkeley.EDU wrote:
> Okay, with the following patch, pmwiki will try to detect the location of
> diff and patch. But if it fails, you can still set the variable in
> local.php. For some reason, when I run "which patch" from within a php
> code, it returns /usr/bin/patch, even though the same command returns
> /usr/local/bin/patch when run in shell.
>
>
> *** pmwiki-old.php Thu Jul 3 12:55:04 2003
> --- pmwiki.php Thu Jul 3 13:45:52 2003
> ***************
> *** 33,38 ****
> --- 33,40 ----
> $ScriptUrl = 'http://'.$HTTP_SERVER_VARS['HTTP_HOST'];
> $ScriptUrl .= $HTTP_SERVER_VARS['SCRIPT_NAME'];
> $ScriptDir = preg_replace("#/[^/]*\$#","",$ScriptUrl,1);
> + $SysDiff = trim(`which diff`);
> + $SysPatch = trim(`which patch`);
> $WikiImgUrl = "$ScriptDir/pmwiki-50.gif";
> $DiffKeepDays = 3650;
> $WikiDir = "wiki.d";
> ***************
> *** 425,431 ****
> }
>
> function Diff($oldtext,$newtext) {
> ! global $WikiDir;
> $tempold = tempnam($WikiDir,"old");
> if ($oldfp = fopen($tempold,"w")) {
> fputs($oldfp,$oldtext);
> --- 427,433 ----
> }
>
> function Diff($oldtext,$newtext) {
> ! global $WikiDir, $SysDiff;
> $tempold = tempnam($WikiDir,"old");
> if ($oldfp = fopen($tempold,"w")) {
> fputs($oldfp,$oldtext);
> ***************
> *** 436,448 ****
> fputs($newfp,$newtext);
> fclose($newfp);
> }
> ! @$diff = `/usr/bin/diff $tempold $tempnew`;
> @unlink($tempold); @unlink($tempnew);
> return $diff;
> }
>
> function Patch($page,$restore) {
> ! global $WikiDir;
> Lock(2);
> $txtfile = tempnam($WikiDir,"txt");
> $patfile = tempnam($WikiDir,"pat");
> --- 438,450 ----
> fputs($newfp,$newtext);
> fclose($newfp);
> }
> ! @$diff = `$SysDiff $tempold $tempnew`;
> @unlink($tempold); @unlink($tempnew);
> return $diff;
> }
>
> function Patch($page,$restore) {
> ! global $WikiDir, $SysPatch;
> Lock(2);
> $txtfile = tempnam($WikiDir,"txt");
> $patfile = tempnam($WikiDir,"pat");
> ***************
> *** 458,464 ****
> fputs($patfp,$v);
> fclose($patfp);
> }
> ! $diff = `/usr/bin/patch $txtfile $patfile 2>/dev/null`;
> }
> $text = implode('',file($txtfile));
> @unlink($txtfile); @unlink($patfile);
> --- 460,466 ----
> fputs($patfp,$v);
> fclose($patfp);
> }
> ! $diff = `$SysPatch $txtfile $patfile 2>/dev/null`;
> }
> $text = implode('',file($txtfile));
> @unlink($txtfile); @unlink($patfile);
> ___
>
> John Kim
>
>
>
> _______________________________________________
> Pmwiki-users mailing list
> Pmwiki-users at pmichaud.com
> http://pmichaud.com/mailman/listinfo/pmwiki-users_pmichaud.com
>
More information about the pmwiki-users
mailing list