[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Fri May 28 06:32:04 MDT 2010


The branch, master has been updated
       via  93ac516... s3-auth: Added a function to get the server_info from the system user.
      from  8703700... s3-samr: Fix crash bug in _samr_QueryUserInfo{2} level 18.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 93ac516e15ab771b6ed4eeacc556a2ec916387bb
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Apr 14 15:15:32 2010 +0200

    s3-auth: Added a function to get the server_info from the system user.
    
    Signed-off-by: Günther Deschner <gd at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source3/auth/auth_util.c |   39 +++++++++++++++++++++++++++++++++++++++
 source3/include/proto.h  |    3 +++
 source3/smbd/server.c    |    5 +++++
 3 files changed, 47 insertions(+), 0 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c
index 7869637..bccec80 100644
--- a/source3/auth/auth_util.c
+++ b/source3/auth/auth_util.c
@@ -756,6 +756,27 @@ static NTSTATUS make_new_server_info_guest(struct auth_serversupplied_info **ser
 	return NT_STATUS_OK;
 }
 
+/***************************************************************************
+ Make (and fill) a user_info struct for a system user login.
+ This *must* succeed for smbd to start.
+***************************************************************************/
+
+static NTSTATUS make_new_server_info_system(TALLOC_CTX *mem_ctx,
+					    struct auth_serversupplied_info **server_info)
+{
+	struct passwd *pwd;
+
+	pwd = getpwuid_alloc(mem_ctx, sec_initial_uid());
+	if (pwd == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	return make_serverinfo_from_username(mem_ctx,
+					     pwd->pw_name,
+					     false,
+					     server_info);
+}
+
 /****************************************************************************
   Fake a auth_serversupplied_info just from a username
 ****************************************************************************/
@@ -888,6 +909,24 @@ NTSTATUS make_server_info_guest(TALLOC_CTX *mem_ctx,
 	return (*server_info != NULL) ? NT_STATUS_OK : NT_STATUS_NO_MEMORY;
 }
 
+static struct auth_serversupplied_info *system_info = NULL;
+
+bool init_system_info(void)
+{
+	if (system_info != NULL)
+		return True;
+
+	return NT_STATUS_IS_OK(make_new_server_info_system(talloc_autofree_context(), &system_info));
+}
+
+NTSTATUS make_server_info_system(TALLOC_CTX *mem_ctx,
+				struct auth_serversupplied_info **server_info)
+{
+	if (system_info == NULL) return NT_STATUS_UNSUCCESSFUL;
+	*server_info = copy_serverinfo(mem_ctx, system_info);
+	return (*server_info != NULL) ? NT_STATUS_OK : NT_STATUS_NO_MEMORY;
+}
+
 bool copy_current_user(struct current_user *dst, struct current_user *src)
 {
 	gid_t *groups;
diff --git a/source3/include/proto.h b/source3/include/proto.h
index cc14658..f53c52c 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -133,10 +133,13 @@ NTSTATUS make_serverinfo_from_username(TALLOC_CTX *mem_ctx,
 struct auth_serversupplied_info *copy_serverinfo(TALLOC_CTX *mem_ctx,
 						 const struct auth_serversupplied_info *src);
 bool init_guest_info(void);
+bool init_system_info(void);
 bool server_info_set_session_key(struct auth_serversupplied_info *info,
 				 DATA_BLOB session_key);
 NTSTATUS make_server_info_guest(TALLOC_CTX *mem_ctx,
 				struct auth_serversupplied_info **server_info);
+NTSTATUS make_server_info_system(TALLOC_CTX *mem_ctx,
+				 struct auth_serversupplied_info **server_info);
 bool copy_current_user(struct current_user *dst, struct current_user *src);
 struct passwd *smb_getpwnam( TALLOC_CTX *mem_ctx, char *domuser,
 			     fstring save_username, bool create );
diff --git a/source3/smbd/server.c b/source3/smbd/server.c
index fcfabcd..7cd6946 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -1318,6 +1318,11 @@ extern void build_options(bool screen);
                 exit(1);
 #endif
 
+	if (!init_system_info()) {
+		DEBUG(0,("ERROR: failed to setup system user info.\n"));
+		return -1;
+	}
+
 	if (!print_backend_init(smbd_messaging_context()))
 		exit(1);
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list