From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: phillip.lord@russet.org.uk Newsgroups: gmane.emacs.bugs Subject: bug#36598: 26.1; (error "=?UTF-8?Q?=E2=80=98/tmp/emacs1000=E2=80=99?= is not a safe directory because it is a symlink") Date: Sat, 13 Jul 2019 16:56:19 +0100 Message-ID: <44a502116d2c0568d120b7328913b26a@russet.org.uk> References: <87muhkr79y.fsf@silk.nichework.com> <87k1cmwnu6.fsf@mouse.gnus.org> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="144761"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Roundcube Webmail/1.3.8 Cc: mah@everybody.org, 36598@debbugs.gnu.org To: Lars Ingebrigtsen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Jul 13 17:57:13 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hmKOf-000bWP-0K for geb-bug-gnu-emacs@m.gmane.org; Sat, 13 Jul 2019 17:57:13 +0200 Original-Received: from localhost ([::1]:56964 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hmKOd-0005pf-Ap for geb-bug-gnu-emacs@m.gmane.org; Sat, 13 Jul 2019 11:57:11 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:41412) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hmKOZ-0005pY-Ca for bug-gnu-emacs@gnu.org; Sat, 13 Jul 2019 11:57:09 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hmKOX-0000S5-Du for bug-gnu-emacs@gnu.org; Sat, 13 Jul 2019 11:57:07 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:34404) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hmKOU-0000OB-My for bug-gnu-emacs@gnu.org; Sat, 13 Jul 2019 11:57:04 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hmKOU-0005D6-5p for bug-gnu-emacs@gnu.org; Sat, 13 Jul 2019 11:57:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: phillip.lord@russet.org.uk Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 13 Jul 2019 15:57:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 36598 X-GNU-PR-Package: emacs Original-Received: via spool by 36598-submit@debbugs.gnu.org id=B36598.156303339319987 (code B ref 36598); Sat, 13 Jul 2019 15:57:02 +0000 Original-Received: (at 36598) by debbugs.gnu.org; 13 Jul 2019 15:56:33 +0000 Original-Received: from localhost ([127.0.0.1]:43225 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hmKO0-0005CJ-KN for submit@debbugs.gnu.org; Sat, 13 Jul 2019 11:56:33 -0400 Original-Received: from cloud103.planethippo.com ([78.129.138.110]:50540) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hmKNu-0005Bt-Qw for 36598@debbugs.gnu.org; Sat, 13 Jul 2019 11:56:30 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=russet.org.uk; s=default; h=Message-ID:References:In-Reply-To:Subject:Cc:To :From:Date:Content-Transfer-Encoding:Content-Type:MIME-Version:Sender: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=szbCO2hY/FcBiNw81Qw/9f2nyIBXzjDzLjvpTrDXzbo=; b=TwXG7YOtJbiMURicFNkm3WUVQr mq1/H18pw2QXXRz93Gk5LzU90tPP/lpVlAAUivVSoYYswiAUygmQYjZgtfy3w6cNcfkdiF0SLS9/t W8Cey5JQGg6NHaYnIKNOaSWXZ5o/MgkDSvy/JdoQA2luCbYiFvBJjPNqEpuYiC697+i3BhV/nwPi9 y4HnrH+/I1csMjD2D3e31XzfFnQmNPq2R+ZrUtiVtW6CwQPXKK+vX8BYrHyF5TejVvNWL+kCqh6WW eH838+j5fA78xWqm6Xonknivvr5geplgqeibEDaBGjapYeWbGSZ/oZegnnUPVvX/zUn+bcK8hx9Xv s1/qkjUQ==; Original-Received: from [::1] (port=41208 helo=cloud103.planethippo.com) by cloud103.planethippo.com with esmtpa (Exim 4.92) (envelope-from ) id 1hmKNn-0006fm-UQ; Sat, 13 Jul 2019 16:56:20 +0100 In-Reply-To: X-Sender: phillip.lord@russet.org.uk X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - cloud103.planethippo.com X-AntiAbuse: Original Domain - debbugs.gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - russet.org.uk X-Get-Message-Sender-Via: cloud103.planethippo.com: authenticated_id: phillip.lord@russet.org.uk X-Authenticated-Sender: cloud103.planethippo.com: phillip.lord@russet.org.uk X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:162916 Archived-At: On 2019-07-13 15:45, Lars Ingebrigtsen wrote: > phillip.lord@russet.org.uk writes: > >> Launch emacs-27, start the server. Now launch emacs-26 and start the >> server with a different. The problem is that >> emacs-27 creates the file /tmp/emacs($PID) as a symlink, while >> emacs-26 doesn't like it. >> >> Probably created by >> >> b663c837249 (Stefan Monnier 2019-05-03 538) > > Could you post a backtrace for the "doesn't like it" case? Sure. It is Emacs-26 that errors. As far as I can see, this will only affect the edge case of someone running two versions of Emacs. I tend to do this (I run gnus in a standalone release emacs, and everything else in another emacs). Phil Debugger entered--Lisp error: (error "‘/tmp/emacs1000’ is not a safe directory because it is a symlink") signal(error ("‘/tmp/emacs1000’ is not a safe directory because it is a symlink")) error("`%s' is not a safe directory because %s" "/tmp/emacs1000" "it is a symlink") (progn (error "`%s' is not a safe directory because %s" (expand-file-name dir) unsafe)) (if unsafe (progn (error "`%s' is not a safe directory because %s" (expand-file-name dir) unsafe))) (let* ((uid (nth 2 attrs)) (w32 (eq system-type (quote windows-nt))) (unsafe (cond ((not (eq t (car attrs))) (if (null attrs) "its attributes can't be checked" (format "it is a %s" (if ... "symlink" "file")))) ((and w32 (= 0 uid)) (display-warning (quote server) (format-message "Using `%s' to store Emacs-server authentication files.\nDirectories on FAT32 filesystems are NOT secure against tampering.\nSee variable `server-auth-dir' for details." (file-name-as-directory dir)) :warning) nil) ((and (/= uid (user-uid)) (or (not w32) (/= uid 544) (/= ... 500))) (format "it is not owned by you (owner = %s (%d))" (user-full-name uid) uid)) (w32 nil) ((/= 0 (logand 63 (file-modes dir))) (format "it is accessible by others (%03o)" (file-modes dir))) (t nil)))) (if unsafe (progn (error "`%s' is not a safe directory because %s" (expand-file-name dir) unsafe)))) (let ((attrs (file-attributes dir (quote integer)))) (if attrs nil (let* ((old (default-file-modes))) (unwind-protect (progn (progn (set-default-file-modes 448) 448) (make-directory dir t)) (let* ((v old)) (progn (set-default-file-modes v) v)))) (setq attrs (file-attributes dir (quote integer)))) (let* ((uid (nth 2 attrs)) (w32 (eq system-type (quote windows-nt))) (unsafe (cond ((not (eq t ...)) (if (null attrs) "its attributes can't be checked" (format "it is a %s" ...))) ((and w32 (= 0 uid)) (display-warning (quote server) (format-message "Using `%s' to store Emacs-server authentication files.\nDirectories on FAT32 filesystems are NOT secure against tampering.\nSee variable `server-auth-dir' for details." ...) :warning) nil) ((and (/= uid ...) (or ... ... ...)) (format "it is not owned by you (owner = %s (%d))" (user-full-name uid) uid)) (w32 nil) ((/= 0 (logand 63 ...)) (format "it is accessible by others (%03o)" (file-modes dir))) (t nil)))) (if unsafe (progn (error "`%s' is not a safe directory because %s" (expand-file-name dir) unsafe))))) server-ensure-safe-dir("/tmp/emacs1000") (if leave-dead (progn (if (eq t leave-dead) nil (server-log (message "Server stopped"))) (setq server-process nil)) (server-ensure-safe-dir server-dir) (if server-process (progn (server-log (message "Restarting server")))) (let* ((old (default-file-modes))) (unwind-protect (progn (progn (set-default-file-modes 448) 448) (add-hook (quote suspend-tty-functions) (quote server-handle-suspend-tty)) (add-hook (quote delete-frame-functions) (quote server-handle-delete-frame)) (add-hook (quote kill-emacs-query-functions) (quote server-kill-emacs-query-function)) (add-hook (quote kill-emacs-hook) (quote server-force-stop) t) (setq server-process (apply (function make-network-process) :name server-name :server t :noquery t :sentinel (function server-sentinel) :filter (function server-process-filter) :use-external-socket t :coding (quote raw-text-unix) (if server-use-tcp (list :family ... :service ... :host ... :plist ...) (list :family ... :service server-file :plist ...)))) (if server-process nil (error "Could not start server process")) (process-put server-process :server-file server-file) (if server-use-tcp (progn (let (...) (process-put server-process :auth-key auth-key) (let ... ...))))) (let* ((v old)) (progn (set-default-file-modes v) v))))) (let* ((server-dir (if server-use-tcp server-auth-dir server-socket-dir)) (server-file (expand-file-name server-name server-dir))) (if server-process (progn (condition-case nil (progn (delete-process server-process)) (error nil)))) (if (not (eq t (server-running-p server-name))) (condition-case nil (progn (let (delete-by-moving-to-trash) (delete-file server-file))) (error nil)) (setq server-mode nil) (display-warning (quote server) (concat "Unable to start the Emacs server.\n" (format "There is an existing Emacs server, named %S.\n" server-name) (substitute-command-keys "To start the server in this Emacs process, stop the existing\nserver or call `\\[server-force-delete]' to forcibly disconnect it.")) :warning) (setq leave-dead t)) (while server-clients (server-delete-client (car server-clients))) (if leave-dead (progn (if (eq t leave-dead) nil (server-log (message "Server stopped"))) (setq server-process nil)) (server-ensure-safe-dir server-dir) (if server-process (progn (server-log (message "Restarting server")))) (let* ((old (default-file-modes))) (unwind-protect (progn (progn (set-default-file-modes 448) 448) (add-hook (quote suspend-tty-functions) (quote server-handle-suspend-tty)) (add-hook (quote delete-frame-functions) (quote server-handle-delete-frame)) (add-hook (quote kill-emacs-query-functions) (quote server-kill-emacs-query-function)) (add-hook (quote kill-emacs-hook) (quote server-force-stop) t) (setq server-process (apply (function make-network-process) :name server-name :server t :noquery t :sentinel (function server-sentinel) :filter (function server-process-filter) :use-external-socket t :coding (quote raw-text-unix) (if server-use-tcp ... ...))) (if server-process nil (error "Could not start server process")) (process-put server-process :server-file server-file) (if server-use-tcp (progn (let ... ... ...)))) (let* ((v old)) (progn (set-default-file-modes v) v)))))) (progn (let* ((server-dir (if server-use-tcp server-auth-dir server-socket-dir)) (server-file (expand-file-name server-name server-dir))) (if server-process (progn (condition-case nil (progn (delete-process server-process)) (error nil)))) (if (not (eq t (server-running-p server-name))) (condition-case nil (progn (let (delete-by-moving-to-trash) (delete-file server-file))) (error nil)) (setq server-mode nil) (display-warning (quote server) (concat "Unable to start the Emacs server.\n" (format "There is an existing Emacs server, named %S.\n" server-name) (substitute-command-keys "To start the server in this Emacs process, stop the existing\nserver or call `\\[server-force-delete]' to forcibly disconnect it.")) :warning) (setq leave-dead t)) (while server-clients (server-delete-client (car server-clients))) (if leave-dead (progn (if (eq t leave-dead) nil (server-log (message "Server stopped"))) (setq server-process nil)) (server-ensure-safe-dir server-dir) (if server-process (progn (server-log (message "Restarting server")))) (let* ((old (default-file-modes))) (unwind-protect (progn (progn (set-default-file-modes 448) 448) (add-hook (quote suspend-tty-functions) (quote server-handle-suspend-tty)) (add-hook (quote delete-frame-functions) (quote server-handle-delete-frame)) (add-hook (quote kill-emacs-query-functions) (quote server-kill-emacs-query-function)) (add-hook (quote kill-emacs-hook) (quote server-force-stop) t) (setq server-process (apply ... :name server-name :server t :noquery t :sentinel ... :filter ... :use-external-socket t :coding ... ...)) (if server-process nil (error "Could not start server process")) (process-put server-process :server-file server-file) (if server-use-tcp (progn ...))) (let* ((v old)) (progn (set-default-file-modes v) v))))))) (if (or (not server-clients) (cond ((and (daemonp) (null (cdr (frame-list))) (eq (selected-frame) terminal-frame)) leave-dead) (inhibit-prompt t) (t (yes-or-no-p "The current server still has clients; delete them? ")))) (progn (let* ((server-dir (if server-use-tcp server-auth-dir server-socket-dir)) (server-file (expand-file-name server-name server-dir))) (if server-process (progn (condition-case nil (progn (delete-process server-process)) (error nil)))) (if (not (eq t (server-running-p server-name))) (condition-case nil (progn (let (delete-by-moving-to-trash) (delete-file server-file))) (error nil)) (setq server-mode nil) (display-warning (quote server) (concat "Unable to start the Emacs server.\n" (format "There is an existing Emacs server, named %S.\n" server-name) (substitute-command-keys "To start the server in this Emacs process, stop the existing\nserver or call `\\[server-force-delete]' to forcibly disconnect it.")) :warning) (setq leave-dead t)) (while server-clients (server-delete-client (car server-clients))) (if leave-dead (progn (if (eq t leave-dead) nil (server-log (message "Server stopped"))) (setq server-process nil)) (server-ensure-safe-dir server-dir) (if server-process (progn (server-log (message "Restarting server")))) (let* ((old (default-file-modes))) (unwind-protect (progn (progn ... 448) (add-hook ... ...) (add-hook ... ...) (add-hook ... ...) (add-hook ... ... t) (setq server-process ...) (if server-process nil ...) (process-put server-process :server-file server-file) (if server-use-tcp ...)) (let* (...) (progn ... v)))))))) server-start(nil) funcall-interactively(server-start nil) call-interactively(server-start record nil) command-execute(server-start record) execute-extended-command(nil "server-start" "server-start") funcall-interactively(execute-extended-command nil "server-start" "server-start") call-interactively(execute-extended-command nil nil) command-execute(execute-extended-command)