Message-Id: <200505041505.j44F5kiS059494@repoman.freebsd.org> From: Takanori Watanabe Date: Wed, 4 May 2005 15:05:46 +0000 (UTC) To: src-committers@FreeBSD.ORG, cvs-src@FreeBSD.ORG, cvs-all@FreeBSD.ORG Subject: cvs commit: src/contrib/smbfs/lib/smb ctx.c src/sys/fs/smbfs smbfs_smb.c smbfs_subr.c smbfs_subr.h src/usr.sbin/mount_smbfs Makefile src/usr.bin/smbutil Makefile takawata 2005-05-04 15:05:46 UTC FreeBSD src repository Modified files: contrib/smbfs/lib/smb ctx.c sys/fs/smbfs smbfs_smb.c smbfs_subr.c smbfs_subr.h usr.sbin/mount_smbfs Makefile usr.bin/smbutil Makefile Log: Make smbfs capable to use 16bit char set in filenames. PR:78110 Revision Changes Path 1.4 +4 -15 src/contrib/smbfs/lib/smb/ctx.c 1.15 +2 -2 src/sys/fs/smbfs/smbfs_smb.c 1.6 +28 -8 src/sys/fs/smbfs/smbfs_subr.c 1.6 +1 -1 src/sys/fs/smbfs/smbfs_subr.h 1.2 +2 -2 src/usr.bin/smbutil/Makefile 1.7 +2 -2 src/usr.sbin/mount_smbfs/Makefile Index: src/contrib/smbfs/lib/smb/ctx.c diff -u src/contrib/smbfs/lib/smb/ctx.c:1.3 src/contrib/smbfs/lib/smb/ctx.c:1.4 --- src/contrib/smbfs/lib/smb/ctx.c:1.3 Sun Jul 27 11:41:38 2003 +++ src/contrib/smbfs/lib/smb/ctx.c Wed May 4 15:05:46 2005 @@ -473,8 +473,6 @@ struct sockaddr *sap; struct sockaddr_nb *salocal, *saserver; char *cp; - u_char cstbl[256]; - u_int i; int error = 0; ctx->ct_flags &= ~SMBCF_RESOLVED; @@ -496,7 +494,7 @@ if (error) return error; if (ssn->ioc_localcs[0] == 0) - strcpy(ssn->ioc_localcs, "default"); /* XXX: locale name ? */ + strcpy(ssn->ioc_localcs, "ISO8859-1"); error = smb_addiconvtbl("tolower", ssn->ioc_localcs, nls_lower); if (error) return error; @@ -504,18 +502,9 @@ if (error) return error; if (ssn->ioc_servercs[0] != 0) { - for(i = 0; i < sizeof(cstbl); i++) - cstbl[i] = i; - nls_mem_toext(cstbl, cstbl, sizeof(cstbl)); - error = smb_addiconvtbl(ssn->ioc_servercs, ssn->ioc_localcs, cstbl); - if (error) - return error; - for(i = 0; i < sizeof(cstbl); i++) - cstbl[i] = i; - nls_mem_toloc(cstbl, cstbl, sizeof(cstbl)); - error = smb_addiconvtbl(ssn->ioc_localcs, ssn->ioc_servercs, cstbl); - if (error) - return error; + error = kiconv_add_xlat16_cspairs + (ssn->ioc_localcs, ssn->ioc_servercs); + if (error) return error; } if (ctx->ct_srvaddr) { error = nb_resolvehost_in(ctx->ct_srvaddr, &sap); Index: src/sys/fs/smbfs/smbfs_smb.c diff -u src/sys/fs/smbfs/smbfs_smb.c:1.14 src/sys/fs/smbfs/smbfs_smb.c:1.15 --- src/sys/fs/smbfs/smbfs_smb.c:1.14 Thu Jan 6 18:10:41 2005 +++ src/sys/fs/smbfs/smbfs_smb.c Wed May 4 15:05:46 2005 @@ -1449,8 +1449,8 @@ continue; break; } - smbfs_fname_tolocal(SSTOVC(ctx->f_ssp), ctx->f_name, ctx->f_nmlen, - ctx->f_dnp->n_mount->sm_caseopt); + smbfs_fname_tolocal(SSTOVC(ctx->f_ssp), ctx->f_name, &ctx->f_nmlen, + ctx->f_dnp->n_mount->sm_caseopt); ctx->f_attr.fa_ino = smbfs_getino(ctx->f_dnp, ctx->f_name, ctx->f_nmlen); return 0; } Index: src/sys/fs/smbfs/smbfs_subr.c diff -u src/sys/fs/smbfs/smbfs_subr.c:1.5 src/sys/fs/smbfs/smbfs_subr.c:1.6 --- src/sys/fs/smbfs/smbfs_subr.c:1.5 Thu Jan 6 18:10:41 2005 +++ src/sys/fs/smbfs/smbfs_subr.c Wed May 4 15:05:46 2005 @@ -316,13 +316,33 @@ } int -smbfs_fname_tolocal(struct smb_vc *vcp, char *name, int nmlen, int caseopt) +smbfs_fname_tolocal(struct smb_vc *vcp, char *name, int *nmlen, int caseopt) { -/* if (caseopt & SMB_CS_UPPER) - iconv_convmem(vcp->vc_toupper, name, name, nmlen); - else if (caseopt & SMB_CS_LOWER) - iconv_convmem(vcp->vc_tolower, name, name, nmlen);*/ - if (vcp->vc_tolocal) - iconv_convmem(vcp->vc_tolocal, name, name, nmlen); - return 0; + int copt = (caseopt == SMB_CS_LOWER ? KICONV_FROM_LOWER : + (caseopt == SMB_CS_UPPER ? KICONV_FROM_UPPER : 0)); + int error = 0; + int ilen = *nmlen; + int olen; + char *ibuf = name; + char outbuf[SMB_MAXFNAMELEN]; + char *obuf = outbuf; + + if (vcp->vc_tolocal) { + olen = sizeof(outbuf); + bzero(outbuf, sizeof(outbuf)); + + /* + error = iconv_conv_case + (vcp->vc_tolocal, NULL, NULL, &obuf, &olen, copt); + if (error) return error; + */ + + error = iconv_conv_case + (vcp->vc_tolocal, (const char **)&ibuf, &ilen, &obuf, &olen, copt); + if (!error) { + *nmlen = sizeof(outbuf) - olen; + memcpy(name, outbuf, *nmlen); + } + } + return error; } Index: src/sys/fs/smbfs/smbfs_subr.h diff -u src/sys/fs/smbfs/smbfs_subr.h:1.5 src/sys/fs/smbfs/smbfs_subr.h:1.6 --- src/sys/fs/smbfs/smbfs_subr.h:1.5 Thu Feb 10 12:07:02 2005 +++ src/sys/fs/smbfs/smbfs_subr.h Wed May 4 15:05:46 2005 @@ -174,7 +174,7 @@ int smbfs_smb_lookup(struct smbnode *dnp, const char *name, int nmlen, struct smbfattr *fap, struct smb_cred *scred); -int smbfs_fname_tolocal(struct smb_vc *vcp, char *name, int nmlen, int caseopt); +int smbfs_fname_tolocal(struct smb_vc *vcp, char *name, int *nmlen, int caseopt); void smb_time_local2server(struct timespec *tsp, int tzoff, u_long *seconds); void smb_time_server2local(u_long seconds, int tzoff, struct timespec *tsp); Index: src/usr.bin/smbutil/Makefile diff -u src/usr.bin/smbutil/Makefile:1.1 src/usr.bin/smbutil/Makefile:1.2 --- src/usr.bin/smbutil/Makefile:1.1 Fri Dec 14 11:41:22 2001 +++ src/usr.bin/smbutil/Makefile Wed May 4 15:05:46 2005 @@ -3,8 +3,8 @@ PROG= smbutil SRCS= smbutil.c dumptree.c login.c lookup.c view.c print.c -DPADD= ${LIBSMB} -LDADD= -lsmb +DPADD= ${LIBSMB} ${LIBKICONV} +LDADD= -lsmb -lkiconv CONTRIBDIR= ${.CURDIR}/../../contrib/smbfs CFLAGS+= -I${CONTRIBDIR}/include Index: src/usr.sbin/mount_smbfs/Makefile diff -u src/usr.sbin/mount_smbfs/Makefile:1.6 src/usr.sbin/mount_smbfs/Makefile:1.7 --- src/usr.sbin/mount_smbfs/Makefile:1.6 Tue Dec 21 09:59:44 2004 +++ src/usr.sbin/mount_smbfs/Makefile Wed May 4 15:05:46 2005 @@ -9,8 +9,8 @@ CONTRIBDIR= ${.CURDIR}/../../contrib/smbfs CFLAGS+= -DSMBFS -I${MOUNTDIR} -I${CONTRIBDIR}/include -LDADD= -lsmb -DPADD= ${LIBSMB} +LDADD= -lsmb -lkiconv +DPADD= ${LIBSMB} ${LIBKICONV} # Needs to be dynamically linked for optional dlopen() access to # userland libiconv (see the -E option). Message-Id: <200505050702.j4572pwC026804@repoman.freebsd.org> From: Takanori Watanabe Date: Thu, 5 May 2005 07:02:51 +0000 (UTC) To: src-committers@FreeBSD.ORG, cvs-src@FreeBSD.ORG, cvs-all@FreeBSD.ORG Subject: cvs commit: src/sys/fs/smbfs smbfs_subr.c takawata 2005-05-05 07:02:51 UTC FreeBSD src repository Modified files: sys/fs/smbfs smbfs_subr.c Log: Fix breakage on alpha. Pointed out by: hrs via IRC Revision Changes Path 1.7 +2 -2 src/sys/fs/smbfs/smbfs_subr.c Index: src/sys/fs/smbfs/smbfs_subr.c diff -u src/sys/fs/smbfs/smbfs_subr.c:1.6 src/sys/fs/smbfs/smbfs_subr.c:1.7 --- src/sys/fs/smbfs/smbfs_subr.c:1.6 Wed May 4 15:05:46 2005 +++ src/sys/fs/smbfs/smbfs_subr.c Thu May 5 07:02:51 2005 @@ -321,8 +321,8 @@ int copt = (caseopt == SMB_CS_LOWER ? KICONV_FROM_LOWER : (caseopt == SMB_CS_UPPER ? KICONV_FROM_UPPER : 0)); int error = 0; - int ilen = *nmlen; - int olen; + size_t ilen = *nmlen; + size_t olen; char *ibuf = name; char outbuf[SMB_MAXFNAMELEN]; char *obuf = outbuf; Message-Id: <200507291456.j6TEuGvT067018@repoman.freebsd.org> From: "R. Imura" Date: Fri, 29 Jul 2005 14:56:16 +0000 (UTC) To: src-committers@FreeBSD.ORG, cvs-src@FreeBSD.ORG, cvs-all@FreeBSD.ORG Subject: cvs commit: src/contrib/smbfs/lib/smb ctx.c imura 2005-07-29 14:56:16 UTC FreeBSD src repository Modified files: contrib/smbfs/lib/smb ctx.c Log: Correct argument order of kiconv_add_xlat16_cspairs(). Security: Revision Changes Path 1.5 +1 -1 src/contrib/smbfs/lib/smb/ctx.c Index: src/contrib/smbfs/lib/smb/ctx.c diff -u src/contrib/smbfs/lib/smb/ctx.c:1.4 src/contrib/smbfs/lib/smb/ctx.c:1.5 --- src/contrib/smbfs/lib/smb/ctx.c:1.4 Wed May 4 15:05:46 2005 +++ src/contrib/smbfs/lib/smb/ctx.c Fri Jul 29 14:56:16 2005 @@ -503,7 +503,7 @@ return error; if (ssn->ioc_servercs[0] != 0) { error = kiconv_add_xlat16_cspairs - (ssn->ioc_localcs, ssn->ioc_servercs); + (ssn->ioc_servercs, ssn->ioc_localcs); if (error) return error; } if (ctx->ct_srvaddr) {