Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mb9lw-0002MZ-8j for pgsql-hackers@arkaria.postgresql.org; Thu, 14 Oct 2021 23:04:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mb9lv-0000Po-2y for pgsql-hackers@arkaria.postgresql.org; Thu, 14 Oct 2021 23:04:23 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mb9lu-0000Pd-MQ for pgsql-hackers@lists.postgresql.org; Thu, 14 Oct 2021 23:04:22 +0000 Received: from outgoing-exchange-7.mit.edu ([18.9.28.58]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mb9lp-00088a-Ps for pgsql-hackers@lists.postgresql.org; Thu, 14 Oct 2021 23:04:21 +0000 Received: from oc11exedge1.exchange.mit.edu (OC11EXEDGE1.EXCHANGE.MIT.EDU [18.9.3.17]) by outgoing-exchange-7.mit.edu (8.14.7/8.12.4) with ESMTP id 19EN4Esu030551 for ; Thu, 14 Oct 2021 19:04:15 -0400 Received: from w92expo7.exchange.mit.edu (18.7.74.61) by oc11exedge1.exchange.mit.edu (18.9.3.17) with Microsoft SMTP Server (TLS) id 15.0.1497.24; Thu, 14 Oct 2021 19:04:15 -0400 Received: from oc11expo7.exchange.mit.edu (18.9.4.12) by w92expo7.exchange.mit.edu (18.7.74.61) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Thu, 14 Oct 2021 19:04:14 -0400 Received: from oc11expo7.exchange.mit.edu ([18.9.4.12]) by oc11expo7.exchange.mit.edu ([18.9.4.12]) with mapi id 15.00.1497.023; Thu, 14 Oct 2021 19:04:14 -0400 From: Anders Kaseorg To: "pgsql-hackers@lists.postgresql.org" Subject: [PATCH] Prefer getenv("HOME") to find the UNIX home directory Thread-Topic: [PATCH] Prefer getenv("HOME") to find the UNIX home directory Thread-Index: AQHXwU9rP5wEBWvFuEa4ceeiLL6mMw== Date: Thu, 14 Oct 2021 23:04:14 +0000 Message-ID: <1634252654444.90107@mit.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [198.27.191.186] Content-Type: multipart/mixed; boundary="_002_163425265444490107mitedu_" MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_163425265444490107mitedu_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable According to getpwnam(3):=0A= =0A= An application that wants to determine its user's home directory=0A= should inspect the value of HOME (rather than the value=0A= getpwuid(getuid())->pw_dir) since this allows the user to modify=0A= their notion of "the home directory" during a login session.=0A= =0A= This is important for systems where many users share the same UID, and for = test systems that change HOME to avoid interference with the user=92s real = home directory. It matches what most applications do, as well as what glib= c does for glob("~", GLOB_TILDE, =85) and wordexp("~", =85).=0A= =0A= There was some previous discussion of this in 2016, where although there we= re some questions about the use case, there seemed to be general support fo= r the concept:=0A= =0A= https://www.postgresql.org/message-id/flat/CAEH6cQqbdbXoUHJBbX9ixwfjFFsUC-a= 8hFntKcci%3DdiWgBb3fQ%40mail.gmail.com=0A= =0A= Regardless of whether one thinks modifying HOME is a good idea, if we happe= n to find ourselves in that case, we should respect the modified HOME, so t= hat when the user creates (say) a ~/.pgpass file, we=92ll look for it at th= e same place the user=92s editor created it. getenv() also skips the overh= ead of reading /etc/passwd as an added bonus.=0A= =0A= The way I ran into this issue myself was in a test suite that runs on GitHu= b Actions, which automatically sets HOME=3D/github/home.=0A= =0A= Anders=0A= --_002_163425265444490107mitedu_ Content-Type: text/x-patch; name="v1-0001-Prefer-getenv-HOME-to-find-the-UNIX-home-director.patch" Content-Description: v1-0001-Prefer-getenv-HOME-to-find-the-UNIX-home-director.patch Content-Disposition: attachment; filename="v1-0001-Prefer-getenv-HOME-to-find-the-UNIX-home-director.patch"; size=3847; creation-date="Thu, 14 Oct 2021 23:01:29 GMT"; modification-date="Thu, 14 Oct 2021 23:01:29 GMT" Content-Transfer-Encoding: base64 RnJvbSBkZjljNDM1Yzc1OWZmZmU3N2M5YzkyZjcwZTdjMDk1ZmZiNjU1NmFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRlcnMgS2FzZW9yZyA8YW5kZXJza0BtaXQuZWR1PgpEYXRl OiBUaHUsIDE0IE9jdCAyMDIxIDE1OjIwOjEzIC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2MV0gUHJl ZmVyIGdldGVudigiSE9NRSIpIHRvIGZpbmQgdGhlIFVOSVggaG9tZSBkaXJlY3RvcnkKCkFjY29y ZGluZyB0byBnZXRwd25hbSgzKToKCiAgQW4gYXBwbGljYXRpb24gdGhhdCB3YW50cyB0byBkZXRl cm1pbmUgaXRzIHVzZXIncyBob21lIGRpcmVjdG9yeQogIHNob3VsZCBpbnNwZWN0IHRoZSB2YWx1 ZSBvZiBIT01FIChyYXRoZXIgdGhhbiB0aGUgdmFsdWUKICBnZXRwd3VpZChnZXR1aWQoKSktPnB3 X2Rpcikgc2luY2UgdGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gbW9kaWZ5CiAgdGhlaXIgbm90aW9u IG9mICJ0aGUgaG9tZSBkaXJlY3RvcnkiIGR1cmluZyBhIGxvZ2luIHNlc3Npb24uCgpTaWduZWQt b2ZmLWJ5OiBBbmRlcnMgS2FzZW9yZyA8YW5kZXJza0BtaXQuZWR1PgotLS0KIHNyYy9iaW4vcHNx bC9jb21tYW5kLmMgICAgICAgICAgICB8IDIwICsrKysrKysrKysrKy0tLS0tLS0tCiBzcmMvaW50 ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMgfCAxNCArKysrKysrKysrLS0tLQogc3JjL3BvcnQv cGF0aC5jICAgICAgICAgICAgICAgICAgIHwgMTQgKysrKysrKysrKy0tLS0KIDMgZmlsZXMgY2hh bmdlZCwgMzIgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wc3FsL2NvbW1hbmQuYyBiL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMKaW5kZXggNDlkNGMw ZTNjZS4uY2MyZmU2YmEwZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYworKysg Yi9zcmMvYmluL3BzcWwvY29tbWFuZC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8c3lz L3N0YXQuaD4JCQkvKiBmb3Igc3RhdCgpICovCiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4JCQkvKiBm b3Igc2V0aXRpbWVyKCkgKi8KICNpbmNsdWRlIDxmY250bC5oPgkJCQkvKiBvcGVuKCkgZmxhZ3Mg Ki8KKyNpbmNsdWRlIDxzdGRsaWIuaD4JCQkJLyogZm9yIGdldGVudigpICovCiAjaW5jbHVkZSA8 dW5pc3RkLmg+CQkJCS8qIGZvciBnZXRldWlkKCksIGdldHBpZCgpLCBzdGF0KCkgKi8KICNlbHNl CiAjaW5jbHVkZSA8d2luMzIuaD4KQEAgLTU1OCwxNSArNTU5LDE4IEBAIGV4ZWNfY29tbWFuZF9j ZChQc3FsU2NhblN0YXRlIHNjYW5fc3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCwgY29uc3QgY2hh ciAqY21kKQogCQkJdWlkX3QJCXVzZXJfaWQgPSBnZXRldWlkKCk7CiAKIAkJCWVycm5vID0gMDsJ CQkvKiBjbGVhciBlcnJubyBiZWZvcmUgY2FsbCAqLwotCQkJcHcgPSBnZXRwd3VpZCh1c2VyX2lk KTsKLQkJCWlmICghcHcpCi0JCQl7Ci0JCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgZ2V0IGhv bWUgZGlyZWN0b3J5IGZvciB1c2VyIElEICVsZDogJXMiLAotCQkJCQkJCSAobG9uZykgdXNlcl9p ZCwKLQkJCQkJCQkgZXJybm8gPyBzdHJlcnJvcihlcnJubykgOiBfKCJ1c2VyIGRvZXMgbm90IGV4 aXN0IikpOwotCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCWRpciA9IGdldGVudigiSE9NRSIp OworCQkJaWYgKGRpciA9PSBOVUxMIHx8IGRpclswXSA9PSAnXDAnKSB7CisJCQkJcHcgPSBnZXRw d3VpZCh1c2VyX2lkKTsKKwkJCQlpZiAoIXB3KQorCQkJCXsKKwkJCQkJcGdfbG9nX2Vycm9yKCJj b3VsZCBub3QgZ2V0IGhvbWUgZGlyZWN0b3J5IGZvciB1c2VyIElEICVsZDogJXMiLAorCQkJCQkJ CQkgKGxvbmcpIHVzZXJfaWQsCisJCQkJCQkJCSBlcnJubyA/IHN0cmVycm9yKGVycm5vKSA6IF8o InVzZXIgZG9lcyBub3QgZXhpc3QiKSk7CisJCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCQl9 CisJCQkJZGlyID0gcHctPnB3X2RpcjsKIAkJCX0KLQkJCWRpciA9IHB3LT5wd19kaXI7CiAjZWxz ZQkJCQkJCQkvKiBXSU4zMiAqLwogCiAJCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtY29ubmVjdC5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCmlu ZGV4IGIyODhkMzQ2ZjkuLmViZGQ4MTVjNzMgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLWNvbm5lY3QuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMK QEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGN0eXBlLmg+ CiAjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHVuaXN0 ZC5oPgogCiAjaW5jbHVkZSAiY29tbW9uL2lwLmgiCkBAIC03MjQyLDE0ICs3MjQzLDE5IEBAIGJv b2wKIHBxR2V0SG9tZURpcmVjdG9yeShjaGFyICpidWYsIGludCBidWZzaXplKQogewogI2lmbmRl ZiBXSU4zMgorCWNvbnN0IGNoYXIgKmhvbWU7CiAJY2hhcgkJcHdkYnVmW0JVRlNJWl07CiAJc3Ry dWN0IHBhc3N3ZCBwd2RzdHI7CiAJc3RydWN0IHBhc3N3ZCAqcHdkID0gTlVMTDsKIAotCSh2b2lk KSBwcUdldHB3dWlkKGdldGV1aWQoKSwgJnB3ZHN0ciwgcHdkYnVmLCBzaXplb2YocHdkYnVmKSwg JnB3ZCk7Ci0JaWYgKHB3ZCA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0Jc3RybGNweShidWYs IHB3ZC0+cHdfZGlyLCBidWZzaXplKTsKKwlob21lID0gZ2V0ZW52KCJIT01FIik7CisJaWYgKGhv bWUgPT0gTlVMTCB8fCBob21lWzBdID09ICdcMCcpIHsKKwkJKHZvaWQpIHBxR2V0cHd1aWQoZ2V0 ZXVpZCgpLCAmcHdkc3RyLCBwd2RidWYsIHNpemVvZihwd2RidWYpLCAmcHdkKTsKKwkJaWYgKHB3 ZCA9PSBOVUxMKQorCQkJcmV0dXJuIGZhbHNlOworCQlob21lID0gcHdkLT5wd19kaXI7CisJfQor CXN0cmxjcHkoYnVmLCBob21lLCBidWZzaXplKTsKIAlyZXR1cm4gdHJ1ZTsKICNlbHNlCiAJY2hh cgkJdG1wcGF0aFtNQVhfUEFUSF07CmRpZmYgLS1naXQgYS9zcmMvcG9ydC9wYXRoLmMgYi9zcmMv cG9ydC9wYXRoLmMKaW5kZXggYzM5ZDQ2ODhjZC4uNjA3YmQxNmMyMyAxMDA2NDQKLS0tIGEvc3Jj L3BvcnQvcGF0aC5jCisrKyBiL3NyYy9wb3J0L3BhdGguYwpAQCAtMzIsNiArMzIsNyBAQAogI2Rl ZmluZSBuZWFyCiAjaW5jbHVkZSA8c2hsb2JqLmg+CiAjZWxzZQorI2luY2x1ZGUgPHN0ZGxpYi5o PgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAKQEAgLTgwNywxNCArODA4LDE5IEBAIGJv b2wKIGdldF9ob21lX3BhdGgoY2hhciAqcmV0X3BhdGgpCiB7CiAjaWZuZGVmIFdJTjMyCisJY29u c3QgY2hhciAqaG9tZTsKIAljaGFyCQlwd2RidWZbQlVGU0laXTsKIAlzdHJ1Y3QgcGFzc3dkIHB3 ZHN0cjsKIAlzdHJ1Y3QgcGFzc3dkICpwd2QgPSBOVUxMOwogCi0JKHZvaWQpIHBxR2V0cHd1aWQo Z2V0ZXVpZCgpLCAmcHdkc3RyLCBwd2RidWYsIHNpemVvZihwd2RidWYpLCAmcHdkKTsKLQlpZiAo cHdkID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQlzdHJsY3B5KHJldF9wYXRoLCBwd2QtPnB3 X2RpciwgTUFYUEdQQVRIKTsKKwlob21lID0gZ2V0ZW52KCJIT01FIik7CisJaWYgKGhvbWUgPT0g TlVMTCB8fCBob21lWzBdID09ICdcMCcpIHsKKwkJKHZvaWQpIHBxR2V0cHd1aWQoZ2V0ZXVpZCgp LCAmcHdkc3RyLCBwd2RidWYsIHNpemVvZihwd2RidWYpLCAmcHdkKTsKKwkJaWYgKHB3ZCA9PSBO VUxMKQorCQkJcmV0dXJuIGZhbHNlOworCQlob21lID0gcHdkLT5wd19kaXI7CisJfQorCXN0cmxj cHkocmV0X3BhdGgsIGhvbWUsIE1BWFBHUEFUSCk7CiAJcmV0dXJuIHRydWU7CiAjZWxzZQogCWNo YXIJICAgKnRtcHBhdGg7Ci0tIAoyLjMzLjAKCg== --_002_163425265444490107mitedu_--