summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2011-04-01 11:54:49 +0200
committerJeremy Allison <jra@samba.org>2011-04-11 22:10:22 +0200
commitb137156acbf7c39c86f306100cccc65b441a3209 (patch)
tree2140b16b5ed46b3e56eb0d4edd64b0069f5a7472
parent27cb378283f2cf072151f1c624837741f40c298a (diff)
downloadsamba-b137156acbf7c39c86f306100cccc65b441a3209.tar.gz
samba-b137156acbf7c39c86f306100cccc65b441a3209.tar.bz2
samba-b137156acbf7c39c86f306100cccc65b441a3209.zip
s3-smbd: Added a become_user_by_session() function.
This uses the provided session_info instead of searching the user via the vuid. This is useful to work with fake connnection you need to create if someone connects directly to a rpc service. Signed-off-by: Jeremy Allison <jra@samba.org>
-rw-r--r--source3/smbd/proto.h2
-rw-r--r--source3/smbd/uid.c17
2 files changed, 19 insertions, 0 deletions
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index 75fc5f8341..a0c94b46c6 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -1058,6 +1058,8 @@ bool unbecome_authenticated_pipe_user(void);
void become_root(void);
void unbecome_root(void);
bool become_user(connection_struct *conn, uint16 vuid);
+bool become_user_by_session(connection_struct *conn,
+ const struct auth_serversupplied_info *session_info);
bool unbecome_user(void);
uid_t get_current_uid(connection_struct *conn);
gid_t get_current_gid(connection_struct *conn);
diff --git a/source3/smbd/uid.c b/source3/smbd/uid.c
index 96c4574827..b554b36054 100644
--- a/source3/smbd/uid.c
+++ b/source3/smbd/uid.c
@@ -528,6 +528,23 @@ bool become_user(connection_struct *conn, uint16 vuid)
return True;
}
+bool become_user_by_session(connection_struct *conn,
+ const struct auth_serversupplied_info *session_info)
+{
+ if (!push_sec_ctx())
+ return false;
+
+ push_conn_ctx();
+
+ if (!change_to_user_by_session(conn, session_info)) {
+ pop_sec_ctx();
+ pop_conn_ctx();
+ return false;
+ }
+
+ return true;
+}
+
bool unbecome_user(void)
{
pop_sec_ctx();