diff options
author | Andreas Schneider <asn@samba.org> | 2011-04-01 11:54:49 +0200 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2011-04-11 22:10:22 +0200 |
commit | b137156acbf7c39c86f306100cccc65b441a3209 (patch) | |
tree | 2140b16b5ed46b3e56eb0d4edd64b0069f5a7472 /source3/smbd | |
parent | 27cb378283f2cf072151f1c624837741f40c298a (diff) | |
download | samba-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>
Diffstat (limited to 'source3/smbd')
-rw-r--r-- | source3/smbd/proto.h | 2 | ||||
-rw-r--r-- | source3/smbd/uid.c | 17 |
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(); |