summaryrefslogtreecommitdiffstats
path: root/source/a/nvi/patches/nvi-21-exrc_writability_check.patch
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2020-01-13 00:11:55 +0000
committer Eric Hameleers <alien@slackware.com>2020-01-13 08:59:48 +0100
commitba4217f7183fb76ae1774062c06ae5d77cc1b2f7 (patch)
tree640c8f162254a4b20617d19329f8549ae757443b /source/a/nvi/patches/nvi-21-exrc_writability_check.patch
parented2eb16b1115533f646c6a631c2576f139096e6d (diff)
downloadcurrent-ba4217f7183fb76ae1774062c06ae5d77cc1b2f7.tar.gz
current-ba4217f7183fb76ae1774062c06ae5d77cc1b2f7.tar.xz
Mon Jan 13 00:11:55 UTC 202020200113001155
a/elvis-2.2_0-x86_64-5.txz: Rebuilt. Don't make /usr/bin/{ex,vi} symlinks. a/kernel-generic-5.4.11-x86_64-1.txz: Upgraded. a/kernel-huge-5.4.11-x86_64-1.txz: Upgraded. a/kernel-modules-5.4.11-x86_64-1.txz: Upgraded. a/nvi-1.81.6-x86_64-1.txz: Added. This is an implementation of the classic ex/vi text editor written by Keith Bostic. Due to this having UTF8 support which elvis lacks, we'll have it take over the ex/vi symlinks if they aren't already pointing to a different choice. Note that the removal of vi/ex symlinks from the elvis and vim packages might cause your ex/vi symlinks to point to this after all the ex/vi packages have been upgraded. You can set them to your preferences using pkgtool -> Setup -> vi-ex. a/pkgtools-15.0-noarch-29.txz: Rebuilt. Added an installer/pkgtool menu to select the default ex/vi editor. ap/vim-8.2.0114-x86_64-1.txz: Upgraded. Don't make /usr/bin/{ex,vi} symlinks. d/kernel-headers-5.4.11-x86-1.txz: Upgraded. d/python-setuptools-45.0.0-x86_64-1.txz: Upgraded. k/kernel-source-5.4.11-noarch-1.txz: Upgraded. l/imagemagick-7.0.9_15-x86_64-1.txz: Upgraded. n/ethtool-5.4-x86_64-1.txz: Upgraded. xap/vim-gvim-8.2.0114-x86_64-1.txz: Upgraded. isolinux/initrd.img: Rebuilt. kernels/*: Upgraded. usb-and-pxe-installers/usbboot.img: Rebuilt.
Diffstat (limited to 'source/a/nvi/patches/nvi-21-exrc_writability_check.patch')
-rw-r--r--source/a/nvi/patches/nvi-21-exrc_writability_check.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/source/a/nvi/patches/nvi-21-exrc_writability_check.patch b/source/a/nvi/patches/nvi-21-exrc_writability_check.patch
new file mode 100644
index 000000000..a93dbc5bc
--- /dev/null
+++ b/source/a/nvi/patches/nvi-21-exrc_writability_check.patch
@@ -0,0 +1,61 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 21exrc_writability_check.dpatch by <hesso@pool.math.tu-berlin.de>
+##
+## DP: No description.
+
+@DPATCH@
+diff -Naur nvi-1.81.6.orig/ex/ex_init.c nvi-1.81.6/ex/ex_init.c
+--- nvi-1.81.6.orig/ex/ex_init.c 2007-11-18 17:41:42.000000000 +0100
++++ nvi-1.81.6/ex/ex_init.c 2008-05-01 18:24:45.000000000 +0200
+@@ -26,6 +26,9 @@
+ #include <string.h>
+ #include <unistd.h>
+
++#include <pwd.h>
++#include <grp.h>
++
+ #include "../common/common.h"
+ #include "tag.h"
+ #include "pathnames.h"
+@@ -346,6 +349,9 @@
+ int nf1, nf2;
+ char *a, *b, buf[MAXPATHLEN];
+
++ struct group *grp_p;
++ struct passwd *pwd_p;
++
+ /* Check for the file's existence. */
+ if (stat(path, sbp))
+ return (NOEXIST);
+@@ -359,10 +365,30 @@
+ }
+
+ /* Check writeability. */
+- if (sbp->st_mode & (S_IWGRP | S_IWOTH)) {
++ if (sbp->st_mode & S_IWOTH) {
+ etype = WRITER;
+ goto denied;
+ }
++ if (sbp->st_mode & S_IWGRP) {
++ /* on system error (getgrgid or getpwnam return NULL) set etype to WRITER
++ * and continue execution */
++ if( (grp_p = getgrgid(sbp->st_gid)) == NULL) {
++ etype = WRITER;
++ goto denied;
++ }
++
++ /* lookup the group members' uids for an uid different from euid */
++ while( ( *(grp_p->gr_mem) ) != NULL) { /* gr_mem is a null-terminated array */
++ if( (pwd_p = getpwnam(*(grp_p->gr_mem)++)) == NULL) {
++ etype = WRITER;
++ goto denied;
++ }
++ if(pwd_p->pw_uid != euid) {
++ etype = WRITER;
++ goto denied;
++ }
++ }
++ }
+ return (RCOK);
+
+ denied: a = msg_print(sp, path, &nf1);