changeset 13550:84f53d070f62

1863 gcc compiled libsmb coredumps in trim_whitespace 1866 libsmbns is passing constant string to mktemp(3C) 1867 mktemp(3) gives bad advice in EXAMPLES section Reviewed by: Richard Lowe <richlowe@richlowe.net> Reviewed by: Gordon Ross <gordon.w.ross@gmail.com> Approved by: Albert Lee <trisk@nexenta.com>
author Yuri Pankov <yuri.pankov@nexenta.com>
date Tue, 20 Dec 2011 11:35:17 +0400
parents 4bc299bbc356
children 022a137cd76d
files usr/src/lib/smbsrv/libsmb/common/smb_lgrp.c usr/src/lib/smbsrv/libsmbns/common/smbns_ads.c usr/src/man/man3c/mktemp.3c
diffstat 3 files changed, 16 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/lib/smbsrv/libsmb/common/smb_lgrp.c	Fri Dec 02 15:56:04 2011 -0500
+++ b/usr/src/lib/smbsrv/libsmb/common/smb_lgrp.c	Tue Dec 20 11:35:17 2011 +0400
@@ -1104,16 +1104,21 @@
 	(void) mutex_unlock(&smb_localgrp.lg_mutex);
 
 	for (i = 0; i < ngrp; i++) {
+		char	*tname;
+
 		if ((wka = smb_wka_lookup_name(builtin[i])) == NULL)
 			continue;
 
-		if (!smb_lgrp_exists(wka->wka_name)) {
-			rc = smb_lgrp_add(wka->wka_name, wka->wka_desc);
+		if ((tname = strdup(wka->wka_name)) == NULL)
+			return (SMB_LGRP_NO_MEMORY);
+		if (!smb_lgrp_exists(tname)) {
+			rc = smb_lgrp_add(tname, wka->wka_desc);
 			if (rc != SMB_LGRP_SUCCESS) {
 				syslog(LOG_DEBUG, "failed to add %s",
-				    wka->wka_name);
+				    tname);
 			}
 		}
+		free(tname);
 	}
 
 	return (SMB_LGRP_SUCCESS);
--- a/usr/src/lib/smbsrv/libsmbns/common/smbns_ads.c	Fri Dec 02 15:56:04 2011 -0500
+++ b/usr/src/lib/smbsrv/libsmbns/common/smbns_ads.c	Tue Dec 20 11:35:17 2011 +0400
@@ -2217,7 +2217,7 @@
 	int dclevel, num, usrctl_flags = 0;
 	smb_ads_qstat_t qstat;
 	char dn[SMB_ADS_DN_MAX];
-	char *tmpfile;
+	char tmpfile[] = SMBNS_KRB5_KEYTAB_TMP;
 	int cnt;
 	smb_krb5_pn_set_t spns;
 
@@ -2332,9 +2332,10 @@
 		goto adjoin_cleanup;
 	}
 
-	tmpfile = mktemp(SMBNS_KRB5_KEYTAB_TMP);
-	if (tmpfile == NULL)
-		tmpfile = SMBNS_KRB5_KEYTAB_TMP;
+	if (mktemp(tmpfile) == NULL) {
+		rc = SMB_ADJOIN_ERR_WRITE_KEYTAB;
+		goto adjoin_cleanup;
+	}
 
 	encptr = smb_ads_get_enctypes(dclevel, &num);
 	if (smb_krb5_kt_populate(ctx, ah->domain, krb5princs, cnt,
--- a/usr/src/man/man3c/mktemp.3c	Fri Dec 02 15:56:04 2011 -0500
+++ b/usr/src/man/man3c/mktemp.3c	Tue Dec 20 11:35:17 2011 +0400
@@ -32,8 +32,8 @@
 .SH RETURN VALUES
 .sp
 .LP
-The \fBmktemp()\fR function returns the pointer \fItemplate\fR. If a unique
-name cannot be created, \fItemplate\fR points to a null string.
+The \fBmktemp()\fR function returns a pointer to the \fItemplate\fR on success
+and \fBNULL\fR if unique name cannot be created.
 .SH ERRORS
 .sp
 .LP
@@ -52,7 +52,7 @@
 .nf
 #include <stdlib.h>
 \&...
-char *template = "/tmp/fileXXXXXX";
+char template[] = "/tmp/fileXXXXXX";
 char *ptr;
 ptr = mktemp(template);
 .fi