Path: csiph.com!goblin3!goblin1!goblin.stu.neva.ru!usenet.stanford.edu!not-for-mail From: Chet Ramey Newsgroups: gnu.bash.bug Subject: Re: difference between /tmp and other directory for loadable mkdir? Date: Thu, 27 Dec 2018 14:50:23 -0500 Organization: ITS, Case Western Reserve University Lines: 49 Approved: bug-bash@gnu.org Message-ID: References: <20181226195615.GB31843@debian.vc.shawcable.net> Reply-To: chet.ramey@case.edu NNTP-Posting-Host: lists.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: usenet.stanford.edu 1545940238 1229 208.118.235.17 (27 Dec 2018 19:50:38 GMT) X-Complaints-To: action@cs.stanford.edu Cc: chet.ramey@case.edu To: Peng Yu , bug-bash Envelope-to: bug-bash@gnu.org X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:cc:subject:to:references:from:openpgp :autocrypt:organization:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=v5wRVk5VkrkCyiVbD61LU2H+/ICkiCS1FNoWXS4Ayps=; b=ovPKbrbqDovTDwW9iGjkAXSsa91h9MYaYt8wd1Gipv0F6YV5c3AhKVR15Jd8j+Q+NW /2WSQbO7maYuk7w+97VmGhG4i7SqU53G4MzS2Xf5Rv9Sf28nbhabFl3ksW74yCtUmFtV ZRO5OkdtdTC/Ka2aAotRzghr/aJnCxtTNTL+8tmKn/vR4wREs1xErBBxt7H38fP8f/5Y S1laKTKnd8E6EiG8m6RL3EB2T0cmb9bijdpM+5vaW7t8SiNjrZ7sqfvMTuQF1joxmIHi ac1MHa6uvJBRir4SdcbxQGFei7umGD6FGJT31PrY80oo1jit/P0rYOGzhbdCScxf1Ptp TFCw== X-Gm-Message-State: AA+aEWYrtfVnVSukJYU+Ccs0Q4rHaaQQDkujNNPP86J347uvEVLx0YtV xDqKT7WfT7JX330/juNWXX5NE+BFncQn5uTvFiQO2XwNnMEWcUAKBcYPa3Wut340zqxKeX+55lx XbwEG8ipEOtk= X-Received: by 2002:a81:29d5:: with SMTP id p204mr25088408ywp.285.1545940226396; Thu, 27 Dec 2018 11:50:26 -0800 (PST) X-Google-Smtp-Source: AFSGD/WHPRSs395eeu6wy766Ao5s80hSju1woTR0PEFfdhS3Xetk70Wp9GwI0eyLpCzNVCeHyjrLMQ== X-Received: by 2002:a81:29d5:: with SMTP id p204mr25088396ywp.285.1545940226132; Thu, 27 Dec 2018 11:50:26 -0800 (PST) Openpgp: preference=signencrypt Autocrypt: addr=chet.ramey@case.edu; prefer-encrypt=mutual; keydata= xsDiBEEOsGwRBACFa0A1oa71HSZLWxAx0svXzhOZNQZOzqHmSuGOG92jIpQpr8DpvgRh40Yp AwdcXb8QG1J5yGAKeevNE1zCFaA725vGSdHUyypHouV0xoWwukYO6qlyyX+2BZU+okBUqoWQ koWxiYaCSfzB2Ln7pmdys1fJhcgBKf3VjWCjd2XJTwCgoFJOwyBFJdugjfwjSoRSwDOIMf0D /iQKqlWhIO1LGpMrGX0il0/x4zj0NAcSwAk7LaPZbN4UPjn5pqGEHBlf1+xDDQCkAoZ/VqES GZragl4VqJfxBr29Ag0UDvNbUbXoxQsARdero1M8GiAIRc50hj7HXFoERwenbNDJL86GPLAQ OTGOCa4W2o29nFfFjQrsrrYHzVtyA/9oyKvTeEMJ7NA3VJdWcmn7gOu0FxEmSNhSoV1T4vP2 1Wf7f5niCCRKQLNyUy0wEApQi4tSysdz+AbgAc0b/bHYVzIf2uO2lIEZQNNt+3g2bmXgloWm W5fsm/di50Gm1l1Na63d3RZ00SeFQos6WEwLUHEB0yp6KXluXLLIZitEJM0aQ2hldCBSYW1l eSA8Y2hldEBjd3J1LmVkdT7CYQQTEQIAIQIbAwYLCQgHAwIDFQIDAxYCAQIeAQIXgAUCQ+La kQIZAQAKCRC7WGnwZOp0q9rGAJ4sRGLmlF8klZTH75z7jyQScpU6aACeNMahjWIhumt4u96d 9mdMJqlabVnOwE0EQQ6wbxAEAJCukwDigRDPhAuI+lf+6P64lWanIFOXIndqhvU13cDbQ/Wt 5LwPzm2QTvd7F+fcHOgZ8KOFScbDpjJaRqwIybMTcIN0B2pBLX/C10W1aY+cUrXZgXUGVISE MmpaP9v02auToo7XXVEHC+XLO9IU7/xaU98FL69l6/K4xeNSBRM/AAMHA/wNAmRBpcyK0+Vg gZ5esQaIP/LyolAm2qwcmrd3dZi+g24s7yjV0EUwvRP7xHRDQFgkAo6++QbuecU/J90lxrVn QwucZmfz9zgWDkT/MpfB/CNRSKLFjhYq2yHmHWT6vEjw9Ry/hF6Pc0oh1a62USdfaKAiim0n VxxQmPmiRvtCmcJJBBgRAgAJBQJBDrBvAhsMAAoJELtYafBk6nSr43AAn2ZZFQg8Gs/zUzvX Mt7evaFqVTzcAJ0cHtKpP1i/4H4R9+OsYeQdxxWxTQ== User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 In-Reply-To: <20181226195615.GB31843@debian.vc.shawcable.net> Content-Language: en-US X-Junkmail-Status: score=7/90, host=mpv4-2015.case.edu X-Junkmail-PrAS-Raw: score=7/90, refid=2.7.2:2018.12.27.192416:17:7.944, ip=, rules=__YOUTUBE_RCVD, __X_GOOGLE_DKIM_SIGNATURE, __HAS_REPLYTO, __HAS_CC_HDR, __SUBJ_REPLY, __BOUNCE_CHALLENGE_SUBJ, __BOUNCE_NDR_SUBJ_EXEMPT, __TO_MALFORMED_2, __TO_NAME, __TO_NAME_DIFF_FROM_ACC, __REFERENCES, __HAS_FROM, FROM_EDU_TLD, __HAS_MSGID, __SANE_MSGID, DATE_TZ_NA, __USER_AGENT, __MOZILLA_USER_AGENT, __MIME_VERSION, __IN_REP_TO, __CT, __CT_TEXT_PLAIN, __CTE, __REPLYTO_SAMEAS_FROM_ADDY, __REPLYTO_SAMEAS_FROM_ACC, __FROM_DOMAIN_IN_ANY_CC1, __FROM_DOMAIN_IN_ANY_CC2, __REPLYTO_SAMEAS_FROM_DOMAIN, __ANY_URI, __URI_WITH_PATH, __URI_NO_WWW, __CP_URI_IN_BODY, __FRAUD_MONEY_CURRENCY_DOLLAR, __SUBJ_ALPHA_NEGATE, __MULTIPLE_URI_TEXT, __URI_IN_BODY, __URI_NOT_IMG, __FORWARDED_MSG, __NO_HTML_TAG_RAW, BODY_SIZE_1900_1999, BODYTEXTP_SIZE_3000_LESS, __MIME_TEXT_P1, __MIME_TEXT_ONLY, __URI_NS, HTML_00_01, HTML_00_10, __FRAUD_MONEY_CURRENCY, BODY_SIZE_5000_LESS, [TRUNCATED], so=2010-03-03 19:42:08, dmn=2016-08-03-0138 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] [fuzzy] X-Received-From: 129.22.103.195 X-BeenThere: bug-bash@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Bug reports for the GNU Bourne Again SHell List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Xref: csiph.com gnu.bash.bug:14971 On 12/26/18 2:56 PM, Eduardo A. Bustamante López wrote: > On Wed, Dec 26, 2018 at 12:40:09PM -0600, Peng Yu wrote: >> Hi, >> >> I can not mkdir -p . in /tmp/ via the loadable mkdir. What is the >> difference between /tmp/ and other directories? I am on Mac OS X. Is >> this a bug in mkdir? The difference between /tmp and your home directory, at least in this case, is that /tmp has the sticky bit (S_ISVTX) set. > mkdir("/tmp/", 0777) = -1 EEXIST (File exists) > stat("/tmp/", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0 > +++ exited with 0 +++ > > > My guess is that the "problem" has to do with how bash computes the `parent_mode': > > dualbus@debian:~/src/gnu/bash$ cat -n examples/loadables/mkdir.c | sed -n '106,114p' > 106 /* Make the new mode */ > 107 original_umask = umask (0); > 108 umask (original_umask); > 109 > 110 nmode = (S_IRWXU | S_IRWXG | S_IRWXO) & ~original_umask; > 111 parent_mode = nmode | (S_IWUSR|S_IXUSR); /* u+wx */ > 112 > 113 /* Adjust new mode based on mode argument */ > 114 nmode &= omode; That's the POSIX algorithm for creating the intermediate directories and setting the mode of the final created directory: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/mkdir.html#tag_20_79 but the code should probably perform the mkdir and chmod separately, as the text suggests. In any event, that's not the problem. The existing code tries to chmod the directory even if it already exists, and doesn't take the non-permission bits (SVTX/SUID/SGID) into account, as POSIX says it shouldn't. It should probably attempt the chmod only if the user has specified a mode using `-m mode'. -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU chet@case.edu http://tiswww.cwru.edu/~chet/