[SCM] Samba Shared Repository - branch v3-3-stable updated - release-3-3-0rc2-167-gc05bd1e

Karolin Seeger kseeger at samba.org
Fri Jan 23 08:17:46 GMT 2009


The branch, v3-3-stable has been updated
       via  c05bd1e52e7a56ae2233b5e2dbfe001994cb28da (commit)
       via  3d0da7fae928197a993f7411a95d36f4cb2f0f51 (commit)
       via  6c9843446df64fd7f517bfeeca0afab654a6f0f5 (commit)
       via  0e491f80e597f83a1b04d6abc8036fa1ba63f719 (commit)
       via  6b93dd04ee4dff93be3d66d7ab223e8b81e77d93 (commit)
      from  5739cc5eb4d222b435a3cc32c1733288bf3d5635 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-stable


- Log -----------------------------------------------------------------
commit c05bd1e52e7a56ae2233b5e2dbfe001994cb28da
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Jan 22 16:22:04 2009 -0800

    Apply same logic fix for #4308 Excel save operation corrupts file ACLs
    to NFSv4 ACL code as this uses the same flawed logic as posix_acls.c.
    Jeremy.
    (cherry picked from commit cad872fc385ba30fb72baab25ee6341a41396e39)

commit 3d0da7fae928197a993f7411a95d36f4cb2f0f51
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Jan 22 16:09:26 2009 -0800

    Fix logic error in try_chown - we shouldn't arbitrarily chown
    to ourselves unless that was passed in.
    Jeremy.
    (cherry picked from commit db2d56484e21daeb91df4b5e2286d242910336e8)

commit 6c9843446df64fd7f517bfeeca0afab654a6f0f5
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Jan 22 14:32:32 2009 -0800

    Second part of the attemt to fix #4308 - Excel save operation corrupts file ACLs.
    If the chown succeeds then the ACL set should also. Ensure this is the case
    (refactor some of this code to make it simpler to read also).
    Jeremy.
    (cherry picked from commit 90b660e2382711d005e8c4c4ae1c6adbd5e5b687)

commit 0e491f80e597f83a1b04d6abc8036fa1ba63f719
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Jan 22 10:59:14 2009 -0800

    Another attempt to fix bug #4308 - Excel save operation corrupts file ACLs.
    Simo is completely correct. We should be doing the chown *first*, and fail the
    ACL set if this fails. The long standing assumption I made when writing the
    initial POSIX ACL code was that Windows didn't control who could chown a file
    in the same was as POSIX. In POSIX only root can do this whereas I wasn't sure
    who could do this in Windows at the time (I didn't understand the privilege
    model). So the assumption was that setting the ACL was more important (early
    tests showed many failed ACL set's due to inability to chown). But now we have
    privileges in smbd, and we must always fail an ACL set when we can't chown
    first. The key that Simo noticed is that the CREATOR_OWNER bits in the ACL
    incoming are relative to the *new* owner, not the old one. This is why the old
    user owner disappears on ACL set - their access was set via the USER_OBJ in the
    creator POSIX ACL and when the ownership changes they lose their access.
    
    Patch is simple - just ensure we do the chown first before evaluating the
    incoming ACL re-read the owners. We already have code to do this it just wasn't
    rigorously being applied.
    Jeremy.
    (cherry picked from commit 96b819e04cd71a6c899801ae68031bf55b54ea46)

commit 6b93dd04ee4dff93be3d66d7ab223e8b81e77d93
Author: todd stecher <todd.stecher at gmail.com>
Date:   Thu Jan 22 10:17:37 2009 -0800

    Memory leaks and other fixes found by Coverity
    (cherry picked from commit ba576efa8f884f3dd37bb5035fbb47ae0305c0b0)

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

Summary of changes:
 source/auth/pampass.c               |    4 +-
 source/include/proto.h              |    2 +-
 source/lib/dprintf.c                |   26 ++--
 source/libsmb/clikrb5.c             |   10 +-
 source/modules/nfs4_acls.c          |   84 ++++------
 source/modules/vfs_aixacl2.c        |    2 -
 source/nmbd/nmbd_incomingrequests.c |    4 +-
 source/nmbd/nmbd_serverlistdb.c     |    2 +-
 source/passdb/pdb_interface.c       |    6 +
 source/passdb/pdb_ldap.c            |    1 +
 source/rpc_client/cli_spoolss.c     |   66 +++++---
 source/rpc_parse/parse_buffer.c     |   11 +-
 source/rpc_server/srv_pipe.c        |    4 +-
 source/rpc_server/srv_spoolss_nt.c  |    3 +-
 source/rpc_server/srv_svcctl_nt.c   |    1 -
 source/smbd/posix_acls.c            |  313 +++++++++++++++++------------------
 source/utils/net_rpc.c              |   12 +-
 source/winbindd/winbindd_group.c    |    8 +-
 source/winbindd/winbindd_user.c     |    8 +-
 source/winbindd/winbindd_util.c     |   12 +-
 source/winbindd/winbindd_wins.c     |   10 +-
 21 files changed, 322 insertions(+), 267 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/auth/pampass.c b/source/auth/pampass.c
index 9345eed..4312b77 100644
--- a/source/auth/pampass.c
+++ b/source/auth/pampass.c
@@ -462,7 +462,9 @@ static bool smb_pam_end(pam_handle_t *pamh, struct pam_conv *smb_pam_conv_ptr)
 static bool smb_pam_start(pam_handle_t **pamh, const char *user, const char *rhost, struct pam_conv *pconv)
 {
 	int pam_error;
+#ifdef PAM_RHOST
 	const char *our_rhost;
+#endif
 	char addr[INET6_ADDRSTRLEN];
 
 	*pamh = (pam_handle_t *)NULL;
@@ -475,6 +477,7 @@ static bool smb_pam_start(pam_handle_t **pamh, const char *user, const char *rho
 		return False;
 	}
 
+#ifdef PAM_RHOST
 	if (rhost == NULL) {
 		our_rhost = client_name(get_client_fd());
 		if (strequal(our_rhost,"UNKNOWN"))
@@ -483,7 +486,6 @@ static bool smb_pam_start(pam_handle_t **pamh, const char *user, const char *rho
 		our_rhost = rhost;
 	}
 
-#ifdef PAM_RHOST
 	DEBUG(4,("smb_pam_start: PAM: setting rhost to: %s\n", our_rhost));
 	pam_error = pam_set_item(*pamh, PAM_RHOST, our_rhost);
 	if(!smb_pam_error_handler(*pamh, pam_error, "set rhost failed", 0)) {
diff --git a/source/include/proto.h b/source/include/proto.h
index 6b7291f..b1e3a08 100644
--- a/source/include/proto.h
+++ b/source/include/proto.h
@@ -7632,7 +7632,7 @@ NTSTATUS cli_do_rpc_ndr(struct rpc_pipe_client *cli,
 
 /* The following definitions come from rpc_parse/parse_buffer.c  */
 
-void rpcbuf_init(RPC_BUFFER *buffer, uint32 size, TALLOC_CTX *ctx);
+bool rpcbuf_init(RPC_BUFFER *buffer, uint32 size, TALLOC_CTX *ctx);
 bool prs_rpcbuffer(const char *desc, prs_struct *ps, int depth, RPC_BUFFER *buffer);
 bool prs_rpcbuffer_p(const char *desc, prs_struct *ps, int depth, RPC_BUFFER **buffer);
 bool rpcbuf_alloc_size(RPC_BUFFER *buffer, uint32 buffer_size);
diff --git a/source/lib/dprintf.c b/source/lib/dprintf.c
index a3bb5be..34cc92a 100644
--- a/source/lib/dprintf.c
+++ b/source/lib/dprintf.c
@@ -32,24 +32,27 @@
 
  int d_vfprintf(FILE *f, const char *format, va_list ap)
 {
-	char *p, *p2;
+	char *p = NULL, *p2 = NULL;
 	int ret, maxlen, clen;
 	const char *msgstr;
 	va_list ap2;
 
+	VA_COPY(ap2, ap);
+
 	/* do any message translations */
 	msgstr = lang_msg(format);
-	if (!msgstr) return -1;
-
-	VA_COPY(ap2, ap);
+	if (!msgstr) {
+		ret = -1;
+		goto out;
+	}
 
 	ret = vasprintf(&p, msgstr, ap2);
 
 	lang_msg_free(msgstr);
 
 	if (ret <= 0) {
-	  va_end(ap2);
-	  return ret;
+		ret = -1;
+		goto out;
 	}
 
 	/* now we have the string in unix format, convert it to the display
@@ -58,10 +61,10 @@
 again:
 	p2 = (char *)SMB_MALLOC(maxlen);
 	if (!p2) {
-		SAFE_FREE(p);
-		va_end(ap2);
-		return -1;
+		ret = -1;
+		goto out;
 	}
+
 	clen = convert_string(CH_UNIX, CH_DISPLAY, p, ret, p2, maxlen, True);
 
 	if (clen >= maxlen) {
@@ -72,10 +75,11 @@ again:
 	}
 
 	/* good, its converted OK */
-	SAFE_FREE(p);
 	ret = fwrite(p2, 1, clen, f);
-	SAFE_FREE(p2);
+out:
 
+	SAFE_FREE(p);
+	SAFE_FREE(p2);
 	va_end(ap2);
 
 	return ret;
diff --git a/source/libsmb/clikrb5.c b/source/libsmb/clikrb5.c
index b8afb57..da76c46 100644
--- a/source/libsmb/clikrb5.c
+++ b/source/libsmb/clikrb5.c
@@ -1407,7 +1407,7 @@ done:
 
 		addrs = (krb5_address **)SMB_MALLOC(sizeof(krb5_address *) * num_addr);
 		if (addrs == NULL) {
-			SAFE_FREE(kerb_addr);
+			SAFE_FREE(*kerb_addr);
 			return ENOMEM;
 		}
 
@@ -1416,7 +1416,7 @@ done:
 		addrs[0] = (krb5_address *)SMB_MALLOC(sizeof(krb5_address));
 		if (addrs[0] == NULL) {
 			SAFE_FREE(addrs);
-			SAFE_FREE(kerb_addr);
+			SAFE_FREE(*kerb_addr);
 			return ENOMEM;
 		}
 
@@ -1427,7 +1427,7 @@ done:
 		if (addrs[0]->contents == NULL) {
 			SAFE_FREE(addrs[0]);
 			SAFE_FREE(addrs);
-			SAFE_FREE(kerb_addr);
+			SAFE_FREE(*kerb_addr);
 			return ENOMEM;
 		}
 
@@ -1439,7 +1439,7 @@ done:
 	{
 		addrs = (krb5_addresses *)SMB_MALLOC(sizeof(krb5_addresses));
 		if (addrs == NULL) {
-			SAFE_FREE(kerb_addr);
+			SAFE_FREE(*kerb_addr);
 			return ENOMEM;
 		}
 
@@ -1459,7 +1459,7 @@ done:
 		if (addrs->val[0].address.data == NULL) {
 			SAFE_FREE(addrs->val);
 			SAFE_FREE(addrs);
-			SAFE_FREE(kerb_addr);
+			SAFE_FREE(*kerb_addr);
 			return ENOMEM;
 		}
 
diff --git a/source/modules/nfs4_acls.c b/source/modules/nfs4_acls.c
index f411176..556dad6 100644
--- a/source/modules/nfs4_acls.c
+++ b/source/modules/nfs4_acls.c
@@ -698,9 +698,10 @@ NTSTATUS smb_set_nt_acl_nfs4(files_struct *fsp,
 	bool	result;
 
 	SMB_STRUCT_STAT sbuf;
-	bool need_chown = False;
+	bool set_acl_as_root = false;
 	uid_t newUID = (uid_t)-1;
 	gid_t newGID = (gid_t)-1;
+	int saved_errno;
 
 	DEBUG(10, ("smb_set_nt_acl_nfs4 invoked for %s\n", fsp->fsp_name));
 
@@ -728,59 +729,48 @@ NTSTATUS smb_set_nt_acl_nfs4(files_struct *fsp,
 		}
 		if (((newUID != (uid_t)-1) && (sbuf.st_uid != newUID)) ||
 		    ((newGID != (gid_t)-1) && (sbuf.st_gid != newGID))) {
-			need_chown = True;
-		}
-		if (need_chown) {
-			if ((newUID == (uid_t)-1
-			     || newUID == fsp->conn->server_info->utok.uid)) {
-				if(try_chown(fsp->conn, fsp->fsp_name, newUID, newGID)) {
-					DEBUG(3,("chown %s, %u, %u failed. Error = %s.\n",
-						 fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID, 
-						 strerror(errno)));
-					return map_nt_error_from_unix(errno);
-				}
-
-				DEBUG(10,("chown %s, %u, %u succeeded.\n",
-					  fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID));
-				if (smbacl4_GetFileOwner(fsp->conn, fsp->fsp_name, &sbuf))
-					return map_nt_error_from_unix(errno);
-				need_chown = False;
-			} else { /* chown is needed, but _after_ changing acl */
-				sbuf.st_uid = newUID; /* OWNER@ in case of e_special */
-				sbuf.st_gid = newGID; /* GROUP@ in case of e_special */
+			if(try_chown(fsp->conn, fsp->fsp_name, newUID, newGID)) {
+				DEBUG(3,("chown %s, %u, %u failed. Error = %s.\n",
+					 fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID, 
+					 strerror(errno)));
+				return map_nt_error_from_unix(errno);
 			}
+
+			DEBUG(10,("chown %s, %u, %u succeeded.\n",
+				  fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID));
+			if (smbacl4_GetFileOwner(fsp->conn, fsp->fsp_name, &sbuf))
+				return map_nt_error_from_unix(errno);
+
+			/* If we successfully chowned, we know we must
+			 * be able to set the acl, so do it as root.
+			 */
+			set_acl_as_root = true;
 		}
 	}
 
-	if ((security_info_sent & DACL_SECURITY_INFORMATION)!=0 && psd->dacl!=NULL)
-	{
-		acl = smbacl4_win2nfs4(fsp->fsp_name, psd->dacl, &params, sbuf.st_uid, sbuf.st_gid);
-		if (!acl)
-			return map_nt_error_from_unix(errno);
+	if (!(security_info_sent & DACL_SECURITY_INFORMATION) || psd->dacl ==NULL) {
+		DEBUG(10, ("no dacl found; security_info_sent = 0x%x\n", security_info_sent));
+		return NT_STATUS_OK;
+	}
 
-		smbacl4_dump_nfs4acl(10, acl);
+	acl = smbacl4_win2nfs4(fsp->fsp_name, psd->dacl, &params, sbuf.st_uid, sbuf.st_gid);
+	if (!acl)
+		return map_nt_error_from_unix(errno);
 
-		result = set_nfs4_native(fsp, acl);
-		if (result!=True)
-		{
-			DEBUG(10, ("set_nfs4_native failed with %s\n", strerror(errno)));
-			return map_nt_error_from_unix(errno);
-		}
-	} else
-		DEBUG(10, ("no dacl found; security_info_sent = 0x%x\n", security_info_sent));
+	smbacl4_dump_nfs4acl(10, acl);
 
-	/* Any chown pending? */
-	if (need_chown) {
-		DEBUG(3,("chown#2 %s. uid = %u, gid = %u.\n",
-			 fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID));
-		if (try_chown(fsp->conn, fsp->fsp_name, newUID, newGID)) {
-			DEBUG(2,("chown#2 %s, %u, %u failed. Error = %s.\n",
-				 fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID,
-				 strerror(errno)));
-			return map_nt_error_from_unix(errno);
-		}
-		DEBUG(10,("chown#2 %s, %u, %u succeeded.\n",
-			  fsp->fsp_name, (unsigned int)newUID, (unsigned int)newGID));
+	if (set_acl_as_root) {
+		become_root();
+	}
+	result = set_nfs4_native(fsp, acl);
+	saved_errno = errno;
+	if (set_acl_as_root) {
+		unbecome_root();
+	}
+	if (result!=True) {
+		errno = saved_errno;
+		DEBUG(10, ("set_nfs4_native failed with %s\n", strerror(errno)));
+		return map_nt_error_from_unix(errno);
 	}
 
 	DEBUG(10, ("smb_set_nt_acl_nfs4 succeeded\n"));
diff --git a/source/modules/vfs_aixacl2.c b/source/modules/vfs_aixacl2.c
index a078b9f..5ebc3a1 100644
--- a/source/modules/vfs_aixacl2.c
+++ b/source/modules/vfs_aixacl2.c
@@ -25,8 +25,6 @@
 
 #define AIXACL2_MODULE_NAME "aixacl2"
 
-extern int try_chown(connection_struct *conn, const char *fname, uid_t uid, gid_t gid);
-
 extern SMB_ACL_T aixacl_to_smbacl( struct acl *file_acl);
 extern struct acl *aixacl_smb_to_aixacl(SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
 
diff --git a/source/nmbd/nmbd_incomingrequests.c b/source/nmbd/nmbd_incomingrequests.c
index ebe1948..63f9a3a 100644
--- a/source/nmbd/nmbd_incomingrequests.c
+++ b/source/nmbd/nmbd_incomingrequests.c
@@ -314,14 +314,14 @@ void process_node_status_request(struct subnet_record *subrec, struct packet_str
 	char rdata[MAX_DGRAM_SIZE];
 	char *countptr, *buf, *bufend, *buf0;
 	int names_added,i;
-	struct name_record *namerec;
+	struct name_record *namerec = NULL;
 
 	pull_ascii_nstring(qname, sizeof(qname), nmb->question.question_name.name);
 
 	DEBUG(3,("process_node_status_request: status request for name %s from IP %s on \
 subnet %s.\n", nmb_namestr(&nmb->question.question_name), inet_ntoa(p->ip), subrec->subnet_name));
 
-	if((namerec = find_name_on_subnet(subrec, &nmb->question.question_name, FIND_SELF_NAME)) == 0) {
+	if(find_name_on_subnet(subrec, &nmb->question.question_name, FIND_SELF_NAME) == 0) {
 		DEBUG(1,("process_node_status_request: status request for name %s from IP %s on \
 subnet %s - name not found.\n", nmb_namestr(&nmb->question.question_name),
 			inet_ntoa(p->ip), subrec->subnet_name));
diff --git a/source/nmbd/nmbd_serverlistdb.c b/source/nmbd/nmbd_serverlistdb.c
index 349c3f4..b35d8bb 100644
--- a/source/nmbd/nmbd_serverlistdb.c
+++ b/source/nmbd/nmbd_serverlistdb.c
@@ -128,7 +128,7 @@ struct server_record *create_server_on_workgroup(struct work_record *work,
 		return (NULL);
 	}
   
-	if((servrec = find_server_in_workgroup(work, name)) != NULL) {
+	if(find_server_in_workgroup(work, name) != NULL) {
 		DEBUG(0,("create_server_on_workgroup: Server %s already exists on \
 workgroup %s. This is a bug.\n", name, work->work_group));
 		return NULL;
diff --git a/source/passdb/pdb_interface.c b/source/passdb/pdb_interface.c
index b13644b..486b5b1 100644
--- a/source/passdb/pdb_interface.c
+++ b/source/passdb/pdb_interface.c
@@ -605,6 +605,9 @@ static NTSTATUS pdb_default_delete_dom_group(struct pdb_methods *methods,
 	struct group *grp;
 	const char *grp_name;
 
+	/* coverity */
+	map.gid = (gid_t) -1;
+
 	sid_compose(&group_sid, get_global_sam_sid(), rid);
 
 	if (!get_domain_group_from_sid(group_sid, &map)) {
@@ -780,6 +783,9 @@ static NTSTATUS pdb_default_add_groupmem(struct pdb_methods *methods,
 	const char *group_name;
 	uid_t uid;
 
+	/* coverity */
+	map.gid = (gid_t) -1;
+
 	sid_compose(&group_sid, get_global_sam_sid(), group_rid);
 	sid_compose(&member_sid, get_global_sam_sid(), member_rid);
 
diff --git a/source/passdb/pdb_ldap.c b/source/passdb/pdb_ldap.c
index f031483..043b620 100644
--- a/source/passdb/pdb_ldap.c
+++ b/source/passdb/pdb_ldap.c
@@ -4221,6 +4221,7 @@ const char **talloc_attrs(TALLOC_CTX *mem_ctx, ...)
 		result[i] = talloc_strdup(result, va_arg(ap, const char*));
 		if (result[i] == NULL) {
 			talloc_free(result);
+			va_end(ap);
 			return NULL;
 		}
 	}
diff --git a/source/rpc_client/cli_spoolss.c b/source/rpc_client/cli_spoolss.c
index 69cee6c..30a707f 100644
--- a/source/rpc_client/cli_spoolss.c
+++ b/source/rpc_client/cli_spoolss.c
@@ -521,7 +521,8 @@ WERROR rpccli_spoolss_enum_printers(struct rpc_pipe_client *cli, TALLOC_CTX *mem
 	ZERO_STRUCT(out);
 
 	offered = 0;
-	rpcbuf_init(&buffer, offered, mem_ctx);
+	if (!rpcbuf_init(&buffer, offered, mem_ctx))
+		return WERR_NOMEM;
 	make_spoolss_q_enumprinters( &in, flags, name, level, &buffer, offered );
 
 	CLI_DO_RPC_WERR( cli, mem_ctx, &syntax_spoolss, SPOOLSS_ENUMPRINTERS,
@@ -537,7 +538,8 @@ WERROR rpccli_spoolss_enum_printers(struct rpc_pipe_client *cli, TALLOC_CTX *mem
 		ZERO_STRUCT(in);
 		ZERO_STRUCT(out);
 
-		rpcbuf_init(&buffer, offered, mem_ctx);
+		if (!rpcbuf_init(&buffer, offered, mem_ctx))
+			return WERR_NOMEM;
 		make_spoolss_q_enumprinters( &in, flags, name, level, &buffer, offered );
 
 		CLI_DO_RPC_WERR( cli, mem_ctx, &syntax_spoolss, SPOOLSS_ENUMPRINTERS,
@@ -601,7 +603,8 @@ WERROR rpccli_spoolss_enum_ports(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ct
         strupper_m(server);
 
 	offered = 0;
-	rpcbuf_init(&buffer, offered, mem_ctx);
+	if (!rpcbuf_init(&buffer, offered, mem_ctx))
+		return WERR_NOMEM;
 	make_spoolss_q_enumports( &in, server, level, &buffer, offered );
 	
 	CLI_DO_RPC_WERR( cli, mem_ctx, &syntax_spoolss, SPOOLSS_ENUMPORTS,
@@ -617,7 +620,8 @@ WERROR rpccli_spoolss_enum_ports(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ct
 		ZERO_STRUCT(in);
 		ZERO_STRUCT(out);
 		
-		rpcbuf_init(&buffer, offered, mem_ctx);
+		if (!rpcbuf_init(&buffer, offered, mem_ctx))
+			return WERR_NOMEM;
 		make_spoolss_q_enumports( &in, server, level, &buffer, offered );
 
 		CLI_DO_RPC_WERR( cli, mem_ctx, &syntax_spoolss, SPOOLSS_ENUMPORTS,
@@ -670,7 +674,8 @@ WERROR rpccli_spoolss_getprinter(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ct
 	/* Initialise input parameters */
 
 	offered = 0;
-	rpcbuf_init(&buffer, offered, mem_ctx);
+	if (!rpcbuf_init(&buffer, offered, mem_ctx))
+		return WERR_NOMEM;
 	make_spoolss_q_getprinter( mem_ctx, &in, pol, level, &buffer, offered );
 	
 	CLI_DO_RPC_WERR( cli, mem_ctx, &syntax_spoolss, SPOOLSS_GETPRINTER,
@@ -686,7 +691,8 @@ WERROR rpccli_spoolss_getprinter(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ct
 		ZERO_STRUCT(in);
 		ZERO_STRUCT(out);
 		
-		rpcbuf_init(&buffer, offered, mem_ctx);
+		if (!rpcbuf_init(&buffer, offered, mem_ctx))
+			return WERR_NOMEM;
 		make_spoolss_q_getprinter( mem_ctx, &in, pol, level, &buffer, offered );
 
 		CLI_DO_RPC_WERR( cli, mem_ctx, &syntax_spoolss, SPOOLSS_GETPRINTER,
@@ -781,7 +787,8 @@ WERROR rpccli_spoolss_getprinterdriver(struct rpc_pipe_client *cli,
 	strupper_m(server);
 
 	offered = 0;
-	rpcbuf_init(&buffer, offered, mem_ctx);
+	if (!rpcbuf_init(&buffer, offered, mem_ctx))
+		return WERR_NOMEM;
 	make_spoolss_q_getprinterdriver2( &in, pol, env, level, 
 		version, 2, &buffer, offered);
 
@@ -798,7 +805,8 @@ WERROR rpccli_spoolss_getprinterdriver(struct rpc_pipe_client *cli,
 		ZERO_STRUCT(in);
 		ZERO_STRUCT(out);
 		
-		rpcbuf_init(&buffer, offered, mem_ctx);
+		if (!rpcbuf_init(&buffer, offered, mem_ctx))
+			return WERR_NOMEM;
 		make_spoolss_q_getprinterdriver2( &in, pol, env, level, 
 			version, 2, &buffer, offered);
 
@@ -859,7 +867,8 @@ WERROR rpccli_spoolss_enumprinterdrivers (struct rpc_pipe_client *cli,
         strupper_m(server);
 
 	offered = 0;
-	rpcbuf_init(&buffer, offered, mem_ctx);
+	if (!rpcbuf_init(&buffer, offered, mem_ctx))
+		return WERR_NOMEM;
 	make_spoolss_q_enumprinterdrivers( &in, server, env, level, 
 		&buffer, offered);
 	
@@ -876,7 +885,8 @@ WERROR rpccli_spoolss_enumprinterdrivers (struct rpc_pipe_client *cli,
 		ZERO_STRUCT(in);
 		ZERO_STRUCT(out);
 		
-		rpcbuf_init(&buffer, offered, mem_ctx);
+		if (!rpcbuf_init(&buffer, offered, mem_ctx))
+			return WERR_NOMEM;
 		make_spoolss_q_enumprinterdrivers( &in, server, env, level, 
 			&buffer, offered);
 	
@@ -942,7 +952,8 @@ WERROR rpccli_spoolss_getprinterdriverdir (struct rpc_pipe_client *cli,
         strupper_m(server);
 
 	offered = 0;
-	rpcbuf_init(&buffer, offered, mem_ctx);
+	if (!rpcbuf_init(&buffer, offered, mem_ctx))
+		return WERR_NOMEM;
 	make_spoolss_q_getprinterdriverdir( &in, server, env, level, 
 		&buffer, offered );
 
@@ -959,7 +970,8 @@ WERROR rpccli_spoolss_getprinterdriverdir (struct rpc_pipe_client *cli,
 		ZERO_STRUCT(in);
 		ZERO_STRUCT(out);
 		
-		rpcbuf_init(&buffer, offered, mem_ctx);
+		if (!rpcbuf_init(&buffer, offered, mem_ctx))
+			return WERR_NOMEM;
 		make_spoolss_q_getprinterdriverdir( &in, server, env, level, 
 			&buffer, offered );
 
@@ -1125,7 +1137,8 @@ WERROR rpccli_spoolss_getprintprocessordirectory(struct rpc_pipe_client *cli,
 	ZERO_STRUCT(out);
 
 	offered = 0;
-	rpcbuf_init(&buffer, offered, mem_ctx);
+	if (!rpcbuf_init(&buffer, offered, mem_ctx))
+		return WERR_NOMEM;
 	make_spoolss_q_getprintprocessordirectory( &in, name, 
 		environment, level, &buffer, offered );
 
@@ -1142,7 +1155,8 @@ WERROR rpccli_spoolss_getprintprocessordirectory(struct rpc_pipe_client *cli,
 		ZERO_STRUCT(in);
 		ZERO_STRUCT(out);
 		
-		rpcbuf_init(&buffer, offered, mem_ctx);
+		if (!rpcbuf_init(&buffer, offered, mem_ctx))
+			return WERR_NOMEM;
 		make_spoolss_q_getprintprocessordirectory( &in, name, 
 			environment, level, &buffer, offered );
 
@@ -1230,7 +1244,8 @@ WERROR rpccli_spoolss_getform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx,
 	ZERO_STRUCT(out);
 
 	offered = 0;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list