sss_nfs_client.c revision e9553c2961fa4f25b9d004a6a65b90837a13d8e1
842ae4bd224140319ae7feec1872b93dfd491143fielding Copyright (C) Noam Meltzer <noam@primarydata.com> 2013-2014
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse Copyright (C) Noam Meltzer <tsnoam@gmail.com> 2014-
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse This program is free software; you can redistribute it and/or modify
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd it under the terms of the GNU General Public License as published by
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd the Free Software Foundation; either version 3 of the License, or
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd (at your option) any later version.
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd This program is distributed in the hope that it will be useful,
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd but WITHOUT ANY WARRANTY; without even the implied warranty of
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd GNU General Public License for more details.
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd You should have received a copy of the GNU General Public License
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd along with this program. If not, see <http://www.gnu.org/licenses/>.
c12917da693bae4028a1d5a5e8224bceed8c739dsf/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
7933d4a963def02417113b6798d87a36395053b0rse/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
7933d4a963def02417113b6798d87a36395053b0rse/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
7933d4a963def02417113b6798d87a36395053b0rse/* Forward declarations */
d1bb6e2664788e0437acc18e877562c9a796d7cersestatic int send_recv(uint8_t **repp, size_t *rep_lenp, enum sss_cli_command cmd,
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrsestatic int reply_to_id(id_t *idp, uint8_t *rep, size_t rep_len);
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrsestatic int reply_to_name(char *name, size_t len, uint8_t *rep, size_t rep_len);
7988a91d9a1c6413f2c1a2138847f513d20de856fuankg/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
7988a91d9a1c6413f2c1a2138847f513d20de856fuankg/* get from memcache functions */
7933d4a963def02417113b6798d87a36395053b0rse char *p = NULL;
7933d4a963def02417113b6798d87a36395053b0rse if (rc == 0) {
7a4e3510f3516132ff057ac986fd6350164b7950kbrandstatic int get_gid_from_mc(id_t *gid, const char *name)
7933d4a963def02417113b6798d87a36395053b0rse char *p = NULL;
77504f17963a8dd941a921d9ddfa25ddb0f348d6kbrand rc = sss_nss_mc_getgrnam(name, len, &grp, buf, buflen);
7933d4a963def02417113b6798d87a36395053b0rse if (rc == 0) {
a1de5cf47c9ccfbf493264e8a3fa7ddd5a9c80d1kbrandstatic int get_user_from_mc(char *name, size_t len, uid_t uid)
099c357f282d4aebf2b32264f7dce6ffc0497c37sf if (rc == 0) {
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse IDMAP_LOG(0, ("%s: reply too long; pw_name_len=%lu, len=%lu",
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrsestatic int get_group_from_mc(char *name, size_t len, id_t gid)
7933d4a963def02417113b6798d87a36395053b0rse char *p = NULL;
44985e4f931d3a75a7e5108705010cc21605ee34druggeri if (rc == 0) {
8f2700898323915da289644dc1f3ee11a5e5b4earpluem IDMAP_LOG(0, ("%s: reply too long; gr_name_len=%lu, len=%lu",
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrse/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
cc003103e52ff9d5fe9bed567ef9438613ab4fbfrsestatic int name_to_id(const char *name, id_t *id, enum sss_cli_command cmd)
39c7699ec0799d394d3f67145d4a12ed82f587b8jorton rc = send_recv(&rep, &rep_len, cmd, name, name_len + 1);
7988a91d9a1c6413f2c1a2138847f513d20de856fuankg if (rc == 0) {
a2558ec3af4391b7da7fe61e1e53383bbd0174b9jortonstatic int id_to_name(char *name, size_t len, id_t id,
89b8bbc89404e7071e573c4f0a17f528996e855djorton if (rc == 0) {
89b8bbc89404e7071e573c4f0a17f528996e855djorton/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
89b8bbc89404e7071e573c4f0a17f528996e855djortonstatic int send_recv(uint8_t **rep, size_t *rep_len, enum sss_cli_command cmd,
1366443dc565c33e7b449ae428bbfc4c86f33935drh req_rc = sss_nss_make_request(cmd, &rd, rep, rep_len, &err);
7933d4a963def02417113b6798d87a36395053b0rsestatic int reply_to_id(id_t *idp, uint8_t *rep, size_t rep_len)
2b7078b0c4fd5b6054f6f2d4f626177844f5c6f7wrowe IDMAP_LOG(0, ("%s: reply too small; rep_len=%lu", __func__, rep_len));
2b7078b0c4fd5b6054f6f2d4f626177844f5c6f7wrowe IDMAP_LOG(0, ("%s: too many results (%lu)", __func__, num_results));
56bd16e394f49423a22aa82643eb27f26db2c748jorton IDMAP_LOG(0, ("%s: reply too small(2); rep_len=%lu", __func__,
a73ec375db18806018eabc968baa85b250bbbf5djorton SAFEALIGN_COPY_UINT32(&id, rep + REPLY_ID_OFFSET, NULL);
2b7078b0c4fd5b6054f6f2d4f626177844f5c6f7wrowestatic int reply_to_name(char *name, size_t len, uint8_t *rep, size_t rep_len)
2b7078b0c4fd5b6054f6f2d4f626177844f5c6f7wrowe const char *buf;
7933d4a963def02417113b6798d87a36395053b0rse IDMAP_LOG(0, ("%s: reply too small; rep_len=%lu", __func__, rep_len));
b5451913a64155af2eab4f12ecbaf16e15acafc3wrowe IDMAP_LOG(0, ("%s: too many results (%lu)", __func__, num_results));
8a5120efd60acf0323371cb30cba489723b03819jorton IDMAP_LOG(0, ("%s: reply too small(2); rep_len=%lu", __func__,
af5dd1c93d2185f7e37f8783c593b64fd35ea8a6wrowe rc = sss_readrep_copy_string(buf, &offset, &buf_len, &len, &name, NULL);
af5dd1c93d2185f7e37f8783c593b64fd35ea8a6wrowe if (rc != 0) {
2792780a6fb0951dc304b940ba9274ed1e37fe26wrowe/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
11f2c481e1d57bedb3f758565307501e9a2730ddtrawick/* configuration parsing aids */
11f2c481e1d57bedb3f758565307501e9a2730ddtrawickstatic bool str_equal(const char *s1, const char *s2)
7933d4a963def02417113b6798d87a36395053b0rse bool res = false;
807c9f7266ad3a966b6714fe578f3c9da1ca868brpluemstatic int nfs_conf_get_bool(char *sect, char *attr, int def)
cde1010d880fb6230f80c9d697842ea0b1cb79c7dougm/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
cde1010d880fb6230f80c9d697842ea0b1cb79c7dougm/* libnfsidmap return-code aids */
621bd763d2e4d32f19013ac8b76b375b5a01851fdougm * we only want to return 0 or ENOENT; otherwise libnfsidmap will stop
621bd763d2e4d32f19013ac8b76b375b5a01851fdougm * translation instead of proceeding to the next translation plugin
807c9f7266ad3a966b6714fe578f3c9da1ca868brpluem/* log the actual rc from our code (to be used before normalising the rc) */
621bd763d2e4d32f19013ac8b76b375b5a01851fdougm/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
621bd763d2e4d32f19013ac8b76b375b5a01851fdougm/* The external interface */
9cb81d96f6b556cec1aa456191f43f7932aabaaedougmstatic int sss_nfs_init(void)
9cb81d96f6b556cec1aa456191f43f7932aabaaedougm nfs_use_mc = nfs_conf_get_bool(nfs_conf_sect, nfs_conf_use_mc,
8a2483ae14c7d9c1ee21a92e4251202456af5747jorton IDMAP_LOG(1, ("%s: use memcache: %i", __func__, nfs_use_mc));
8a2483ae14c7d9c1ee21a92e4251202456af5747jortonstatic int sss_nfs_princ_to_ids(char *secname, char *princ, uid_t *uid,
8a2483ae14c7d9c1ee21a92e4251202456af5747jortonstatic int sss_nfs_name_to_uid(char *name, uid_t *uid)
8a2483ae14c7d9c1ee21a92e4251202456af5747jorton if (rc != 0) {
8a2483ae14c7d9c1ee21a92e4251202456af5747jorton IDMAP_LOG(0, ("%s: no-strnlen; rc=%i", __func__, rc));
807c9f7266ad3a966b6714fe578f3c9da1ca868brpluem if (rc != 0) {
807c9f7266ad3a966b6714fe578f3c9da1ca868brpluemstatic int sss_nfs_name_to_gid(char *name, gid_t *gid)
9cb81d96f6b556cec1aa456191f43f7932aabaaedougm if (rc != 0) {
a943533fd4d91d114af622731a405407990c4fb1rse if (rc != 0) {
71c00f988beb28388702e14cb7fe06f08bd792bbdougmstatic int sss_nfs_uid_to_name(uid_t uid, char *domain, char *name, size_t len)
a943533fd4d91d114af622731a405407990c4fb1rse if (rc != 0) {
7933d4a963def02417113b6798d87a36395053b0rsestatic int sss_nfs_gid_to_name(gid_t gid, char *domain, char *name, size_t len)
a943533fd4d91d114af622731a405407990c4fb1rse if (rc != 0) {
a943533fd4d91d114af622731a405407990c4fb1rse char *secname, char *princ, gid_t *groups, int *ngroups,