diff options
Diffstat (limited to 'usr/src/lib/libsmbfs')
| -rw-r--r-- | usr/src/lib/libsmbfs/smb/ctx.c | 3 | ||||
| -rw-r--r-- | usr/src/lib/libsmbfs/smb/getaddr.c | 27 | ||||
| -rw-r--r-- | usr/src/lib/libsmbfs/smb/negprot.c | 24 | 
3 files changed, 17 insertions, 37 deletions
| diff --git a/usr/src/lib/libsmbfs/smb/ctx.c b/usr/src/lib/libsmbfs/smb/ctx.c index be97571321..a4620bc457 100644 --- a/usr/src/lib/libsmbfs/smb/ctx.c +++ b/usr/src/lib/libsmbfs/smb/ctx.c @@ -1101,7 +1101,8 @@ smb_ctx_resolve(struct smb_ctx *ctx)  	if (error) {  		const char *ais = gai_strerror(error);  		smb_error(dgettext(TEXT_DOMAIN, -		    "can't get server address, %s"), 0, ais); +		    "can't resolve name\"%s\", %s"), +		    0, ctx->ct_fullserver, ais);  		return (ENODATA);  	}  	assert(ctx->ct_addrinfo != NULL); diff --git a/usr/src/lib/libsmbfs/smb/getaddr.c b/usr/src/lib/libsmbfs/smb/getaddr.c index 2847d858cb..67e61567a1 100644 --- a/usr/src/lib/libsmbfs/smb/getaddr.c +++ b/usr/src/lib/libsmbfs/smb/getaddr.c @@ -20,8 +20,7 @@   */  /* - * Copyright 2009 Sun Microsystems, Inc.  All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.   */  /* @@ -142,8 +141,6 @@ smb_ctx_getaddr(struct smb_ctx *ctx)  	/*  	 * Default the server name we'll use in the  	 * protocol (i.e. NTLM, tree connect). -	 * If we get a canonical name, we'll -	 * overwrite this below.  	 */  	strlcpy(ctx->ct_srvname, ctx->ct_fullserver,  	    sizeof (ctx->ct_srvname)); @@ -159,25 +156,6 @@ smb_ctx_getaddr(struct smb_ctx *ctx)  	hints.ai_socktype = SOCK_STREAM;  	gaierr = getaddrinfo(srvaddr_str, NULL, &hints, &res);  	if (gaierr == 0) { -#if 1 -		/* -		 * XXX Temporarily work-around CR 6831339: -		 * getaddrinfo() sets ai_canonname incorrectly -		 */ -		char tmphost[256]; -		gaierr2 = getnameinfo(res->ai_addr, res->ai_addrlen, -		    tmphost, sizeof (tmphost), -		    NULL, 0, NI_NAMEREQD); -		if (gaierr2 == 0) { -			DPRINT("cname: %s", tmphost); -			strlcpy(ctx->ct_srvname, tmphost, -			    sizeof (ctx->ct_srvname)); -		} -#else -		if (res->ai_canonname) -			strlcpy(ctx->ct_srvname, res->ai_canonname, -			    sizeof (ctx->ct_srvname)); -#endif  		ctx->ct_addrinfo = res;  		return (0);  	} @@ -186,9 +164,6 @@ smb_ctx_getaddr(struct smb_ctx *ctx)  	 * If regular IP name lookup failed, try NetBIOS,  	 * but only if given a valid NetBIOS name and if  	 * NetBIOS name lookup is enabled. -	 * -	 * Note: we only have ssn_srvname if the full name -	 * was also a valid NetBIOS name.  	 */  	if (nbc->nb_flags & NBCF_NS_ENABLE) {  		gaierr2 = nbns_getaddrinfo(ctx->ct_fullserver, nbc, &res); diff --git a/usr/src/lib/libsmbfs/smb/negprot.c b/usr/src/lib/libsmbfs/smb/negprot.c index cd6e2866df..9345cd8c47 100644 --- a/usr/src/lib/libsmbfs/smb/negprot.c +++ b/usr/src/lib/libsmbfs/smb/negprot.c @@ -31,8 +31,7 @@   */  /* - * Copyright 2009 Sun Microsystems, Inc.  All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.   */  /* @@ -111,13 +110,17 @@ smb_negprot(struct smb_ctx *ctx, struct mbdata *oblob)  	/*  	 * Initialize: vc_hflags and vc_hflags2.  	 * Note: ctx->ct_hflags* are copied into the -	 * (per request) rqp->rq_hflags* by smb_rq_init, -	 * so changing them after that call will not -	 * affect THIS request. +	 * (per request) rqp->rq_hflags* by smb_rq_init. +	 * +	 * Like Windows, set FLAGS2_UNICODE in our first request, +	 * even though technically we don't yet know whether the +	 * server supports Unicode.  Will clear this flag below +	 * if we find out it doesn't.  Need to do this because +	 * some servers reject all non-Unicode requests.  	 */  	ctx->ct_hflags = SMB_FLAGS_CASELESS; -	ctx->ct_hflags2 = (SMB_FLAGS2_ERR_STATUS | -	    SMB_FLAGS2_KNOWS_LONG_NAMES); +	ctx->ct_hflags2 = SMB_FLAGS2_KNOWS_LONG_NAMES | +	    SMB_FLAGS2_ERR_STATUS | SMB_FLAGS2_UNICODE;  	/*  	 * Sould we offer extended security? @@ -276,11 +279,12 @@ smb_negprot(struct smb_ctx *ctx, struct mbdata *oblob)  	}  	DPRINT("Security signatures: %d", will_sign); -	if (sv->sv_caps & SMB_CAP_UNICODE) { +	/* See comment above re. FLAGS2_UNICODE */ +	if (sv->sv_caps & SMB_CAP_UNICODE)  		ctx->ct_vcflags |= SMBV_UNICODE; -		ctx->ct_hflags2 |= SMB_FLAGS2_UNICODE; +	else +		ctx->ct_hflags2 &= ~SMB_FLAGS2_UNICODE; -	}  	if ((sv->sv_caps & SMB_CAP_STATUS32) == 0) {  		/*  		 * They don't do NT error codes. | 
