aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki
Commit message (Collapse)AuthorAge
* git: don't redundantly pass "--" to git_sha1Simon McVittie2017-01-09
| | | | | | | | | | | | | | | git_sha1 already puts "--" before its arguments, so git_sha1_file($dir, 'doc/index.mdwn') would have incorrectly invoked git rev-list --max-count=1 HEAD -- -- doc/index.mdwn If there is no file in the wiki named "--", that's harmless, because it merely names the latest revision in which either "--" or "doc/index.mdwn" changed. However, it could return incorrect results if there is somehow a file named "--".
* git: use parameters, not global state, to swap working directorySimon McVittie2017-01-09
|
* Revert "git: Turn $git_dir into a stack"Simon McVittie2017-01-09
| | | | | | | Now that we have avoided using in_git_dir recursively, we don't need the stack any more. This reverts commit 39b8931ad31fe6b48afdc570caa459a0996c2092.
* git: do not mix in_git_dir with eval{}Simon McVittie2017-01-09
| | | | | | | | If we throw an exception (usually from run_or_die), in_git_dir won't unshift the current directory from the stack. That's usually fine, but in rcs_preprevert we catch exceptions and do some cleanup before returning, for which we need the git directory to be the root and not the temporary working tree.
* Use rel=nofollow microformat for dynamic (CGI-related) URLsSimon McVittie2017-01-09
| | | | | | | Some of these might be relatively expensive to dereference or result in messages being logged, and there's no reason why a search engine should need to index them. (In particular, we'd probably prefer search engines to index the rendered page, not its source code.)
* Enquote $background_command as surely intended.Amitai Schleier2017-01-02
|
* git: Do not disable commit hook for temporary working treeSimon McVittie2016-12-29
| | | | | | | | We exclude .git/hooks from symlinking into the temporary working tree, which avoids the commit hook being run for the temporary branch anyway. This avoids the wiki not being updated if an orthogonal change is received in process A, while process B prepares a revert that is subsequently cancelled.
* git: Attribute reverts to the user doing the revert, not the wiki itselfSimon McVittie2016-12-29
|
* git: write proposed attachment to temp file without going via system()Simon McVittie2016-12-28
|
* git: change calling convention of safe_git to have named argumentsSimon McVittie2016-12-28
|
* git: Do the revert operation in a secondary working treeSimon McVittie2016-12-28
| | | | | This avoids leaving the git directory in an inconsistent state if the host system is rebooted while we are processing a revert.
* git: Turn $git_dir into a stackSimon McVittie2016-12-28
| | | | | | This will be necessary when we use a secondary working tree to do reverts without leaving the primary working tree in an inconsistent state.
* Try revert operations (on a branch) before approving themSimon McVittie2016-12-28
| | | | | | | | | | | | | | | | | Otherwise, we have a time-of-check/time-of-use vulnerability: rcs_preprevert previously looked at what changed in the commit we are reverting, not at what would result from reverting it now. In particular, if some files were renamed since the commit we are reverting, a revert of changes that were within the designated subdirectory and allowed by check_canchange() might now affect files that are outside the designated subdirectory or disallowed by check_canchange(). It is not sufficient to disable rename detection, since git older than 2.8.0rc0 (in particular the version in Debian stable) silently accepts and ignores the relevant options. OVE-20161226-0002
* Revert "Tell `git revert` not to follow renames"Simon McVittie2016-12-28
| | | | | | | This doesn't work prior to git 2.8: `git revert` silently ignores the option and succeeds. We will have to fix CVE-2016-10026 some other way. This reverts commit 9cada49ed6ad24556dbe9861ad5b0a9f526167f9.
* Force CGI::FormBuilder->field to scalar context where necessarySimon McVittie2016-12-28
| | | | | | | | | | | | | | | | | | | | | | | | | | CGI::FormBuilder->field has behaviour similar to the CGI.pm misfeature we avoided in f4ec7b0. Force it into scalar context where it is used in an argument list. This prevents two (relatively minor) commit metadata forgery vulnerabilities: * In the comments plugin, an attacker who was able to post a comment could give it a user-specified author and author-URL even if the wiki configuration did not allow for that, by crafting multiple values to other fields. * In the editpage plugin, an attacker who was able to edit a page could potentially forge commit authorship by crafting multiple values for the rcsinfo field. The remaining plugins changed in this commit appear to have been protected by use of explicit scalar prototypes for the called functions, but have been changed anyway to make them more obviously correct. In particular, checkpassword() in passwordauth has a known prototype, so an attacker cannot trick it into treating multiple values of the name field as being the username, password and field to check for. OVE-20161226-0001
* git: do not fail to commit if committer is anonymousSimon McVittie2016-12-28
|
* git: don't issue a warning if rcsinfo is undefinedSimon McVittie2016-12-28
| | | | | | The intention here seems to be that $prev may be undefined, and the only way that can legitimately happen is for $params{token} to be undefined too.
* Make pagestats output more deterministic.intrigeri2016-12-19
| | | | Sort in lexical order the pages that have the same number of hits.
* Tell `git revert` not to follow renamesSimon McVittie2016-12-19
| | | | | | | | | | | | Otherwise, we have an authorization bypass vulnerability: rcs_preprevert looks at what changed in the commit we are reverting, not at what would result from reverting it now. In particular, if some files were renamed since the commit we are reverting, a revert of changes that were within the designated subdirectory and allowed by check_canchange() might now affect files that are outside the designated subdirectory or disallowed by check_canchange(). Signed-off-by: Simon McVittie <smcv@debian.org>
* cgitemplate: actually remove dead codeSimon McVittie2016-12-19
| | | | Signed-off-by: Simon McVittie <smcv@debian.org>
* inline: Prevent creating a file named ".mdwn" when the postform is submitted ↵Joey Hess2016-09-21
| | | | with an empty title.
* Update my surname to its new legal spelling.Amitai Schlair2016-09-14
|
* Use git log --no-renames for recentchangesSimon McVittie2016-09-03
| | | | | | | Otherwise, recent git releases show renames as renames, and we do not see that newdir/test5 was affected. Bug-Debian: https://bugs.debian.org/835612
* improve warning message for multiple sources for pageJoey Hess2016-05-31
|
* Wrapper: allocate new environment dynamicallySimon McVittie2016-05-11
| | | | | | | | | | | | | | Otherwise, if third-party plugins extend newenviron by more than 3 entries, we could overflow the array. It seems unlikely that any third-party plugin manipulates newenviron in practice, so this is mostly theoretical. Just in case, I have deliberately avoided using "i" as the variable name, so that any third-party plugin that was manipulating newenviron directly will now result in the wrapper failing to compile. I have not assumed that realloc(NULL, ...) works as an equivalent of malloc(...), in case there are still operating systems where that doesn't work.
* Detect image type from .JPG just like .jpg (etc.).Amitai Schlair2016-05-08
|
* img: make img_allowed_formats case-insensitiveSimon McVittie2016-05-07
|
* inline: expand show=N backwards compatibility to negative NSimon McVittie2016-05-06
| | | | | [[plugins/contrib]] uses show=-1 to show the post-creation widget without actually inlining anything.
* img: Add back support for SVG images, bypassing ImageMagick and simply ↵Simon McVittie2016-05-06
| | | | | | | | | | | | | | passing the SVG through to the browser SVG scaling by img directives has subtly changed; where before size=wxh would preserve aspect ratio, this cannot be done when passing them through and so specifying both a width and height can change the SVG's aspect ratio. (This patch looks significantly more complex than it was, because a large block of code had to be indented.) [smcv: drop trailing whitespace, fix some spelling]
* img: check magic number before giving common formats to ImageMagickSimon McVittie2016-05-05
| | | | | This mitigates CVE-2016-3714 and similar vulnerabilities by avoiding passing obviously-wrong input to ImageMagick decoders.
* img: restrict to JPEG, PNG and GIF images by defaultSimon McVittie2016-05-05
| | | | | | This mitigates CVE-2016-3714. Wiki administrators who know that they have prevented arbitrary code execution via other formats can re-enable the other formats if desired.
* img: force common Web formats to be interpreted according to extensionSimon McVittie2016-05-05
| | | | | | | | A site administrator might unwisely set allowed_attachments to something like '*.jpg or *.png'; if they do, an attacker could attach, for example, a SVG file named attachment.jpg. This mitigates CVE-2016-3714.
* HTML-escape error messages (OVE-20160505-0012)Simon McVittie2016-05-05
| | | | | | | | | | | | The instance in cgierror() is a potential cross-site scripting attack, because an attacker could conceivably cause some module to raise an exception that includes attacker-supplied HTML in its message, for example via a crafted filename. (OVE-20160505-0012) The instances in preprocess() is just correctness. It is not a cross-site scripting attack, because an attacker could equally well write the desired HTML themselves; the sanitize hook is what protects us from cross-site scripting here.
* Correctly handle filenames starting with a dash in add/rm/mv.Florian Wagner2016-03-17
|
* Process .md like .mdwn, but disallow web creation.Amitai Schlair2016-03-08
|
* loginselector: When only openid and emailauth are enabled, but passwordauth ↵Joey Hess2016-03-02
| | | | is not, avoid showing a "Other" box which opens an empty form.
* Fix typo.Amitai Schlair2016-02-20
|
* Compose relative URLs in RSS feeds correctlySimon McVittie2016-01-21
| | | | | | | If the relative link from the (page generating the) RSS to the target would start with "./" or "../", just concatenating it with the URL to the directory containing the RSS is not sufficient. Go via URI::new_abs to fix this.
* Force comments URL in RSS feeds to be absoluteSimon McVittie2016-01-21
| | | | | | | | Now I'm going to get bug reports about wanting the URLs to be protocol-relative, but we can't win there as long as we generate RSS, because RSS doesn't have well-defined semantics for relative URLs (and the W3C's validator complains about them). If absolute URLs are a problem for you, please use Atom feeds.
* Silence "used only once: possible typo" warnings for variables that are part ↵Simon McVittie2016-01-19
| | | | of modules' APIs
* Merge remote-tracking branch 'smcv/pagestats-show'Simon McVittie2015-11-30
|\
| * pagestats: rename disp to show, and document itSimon McVittie2014-09-14
| |
| * pagestats: consistent indentationSimon McVittie2014-09-14
| |
| * pagestats: add disp parameterLouis2014-09-14
| |
* | Merge remote-tracking branch 'smcv/ready/limit'Simon McVittie2015-11-30
|\|
| * Rename show parameter of [[!inline]] and [[!pagestats]] to limitSimon McVittie2014-09-14
| | | | | | | | | | | | | | The old name still works, if its value is numeric. This name allows a non-numeric "show" to mean the same thing it does for [[!map]] (show title, show description, etc.).
* | ensure_committer: don't do anything if we have the environment variablesSimon McVittie2015-11-30
| |
* | Don't memoize ensure_committerSimon McVittie2015-11-30
| | | | | | | | | | This makes it harder to test, and if we're invoking git anyway, a couple of extra subprocesses are no big deal.
* | git: if no committer identity is known, set it to "IkiWiki <ikiwiki.info>" ↵Simon McVittie2015-11-30
| | | | | | | | | | | | | | in .git/config This resolves commit errors in versions of git that require a non-trivial committer identity.
* | emailauth: Added emailauth_sender config.Joey Hess2015-10-02
| |