diff mbox

cifs-utils: Add uid/gid to SID mapping functions

Message ID 1308607287-17061-1-git-send-email-shirishpargaonkar@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Shirish Pargaonkar June 20, 2011, 10:01 p.m. UTC
From: Shirish Pargaonkar <shirishpargaonkar@gmail.com>

Add functions to map a uid and gid to a SID.  These functions are
similar to SID to uid and gid mapping functions.

Signed-off-by: Shirish Pargaonkar <shirishpargaonkar@gmail.com>
---
 cifs.idmap.c |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)
diff mbox

Patch

diff --git a/cifs.idmap.c b/cifs.idmap.c
index 56edb58..80802d7 100644
--- a/cifs.idmap.c
+++ b/cifs.idmap.c
@@ -134,6 +134,43 @@  cifs_idmap(const key_serial_t key, const char *key_descr)
 		goto cifs_idmap_ret;
 	}
 
+	sidstr = strget(key_descr, "oi:");
+	if (sidstr) {
+		uid = atoi(sidstr);
+		syslog(LOG_DEBUG, "SID: %s, uid: %d", sidstr, uid);
+		rc = wbcUidToSid(uid, &sid);
+		if (rc)
+			syslog(LOG_DEBUG, "uid %d to SID  error: %d", uid, rc);
+		if (!rc) { /* SID has been mapped to a uid */
+			rc = keyctl_instantiate(key, &sid,
+					sizeof(struct wbcDomainSid), 0);
+			if (rc)
+				syslog(LOG_ERR, "%s: key inst: %s",
+					__func__, strerror(errno));
+		}
+
+		goto cifs_idmap_ret;
+	}
+
+	sidstr = strget(key_descr, "gi:");
+	if (sidstr) {
+		gid = atoi(sidstr);
+		syslog(LOG_DEBUG, "SID: %s, gid: %d", sidstr, gid);
+		rc = wbcGidToSid(gid, &sid);
+		if (rc)
+			syslog(LOG_DEBUG, "gid %d to SID error: %d", gid, rc);
+		if (!rc) { /* SID has been mapped to a gid */
+			rc = keyctl_instantiate(key, &sid,
+					sizeof(struct wbcDomainSid), 0);
+			if (rc)
+				syslog(LOG_ERR, "%s: key inst: %s",
+					__func__, strerror(errno));
+		}
+
+		goto cifs_idmap_ret;
+	}
+
+
 	syslog(LOG_DEBUG, "Invalid key: %s", key_descr);
 
 cifs_idmap_ret: