View | Details | Raw Unified | Return to bug 80288
Collapse All | Expand All

(-)source/smbd/vfs.c (-2 / +7 lines)
Lines 717-722 Link Here
717
	pstring savedir;
717
	pstring savedir;
718
	pstring realdir;
718
	pstring realdir;
719
	size_t reallen;
719
	size_t reallen;
720
	int linklen;
720
721
721
	if (!vfs_GetWd(conn, savedir)) {
722
	if (!vfs_GetWd(conn, savedir)) {
722
		DEBUG(0,("couldn't vfs_GetWd for %s %s\n", name, dir));
723
		DEBUG(0,("couldn't vfs_GetWd for %s %s\n", name, dir));
Lines 740-751 Link Here
740
		realdir[reallen] = 0;
741
		realdir[reallen] = 0;
741
	}
742
	}
742
743
743
	if (conn->vfs_ops.readlink(conn, name, flink, sizeof(pstring) -1) != -1) {
744
	if( (linklen = conn->vfs_ops.readlink(conn, name, flink, sizeof(pstring) -1)) != -1 ) {
745
		flink[linklen] = '\0';
744
		DEBUG(3,("reduce_name: file path name %s is a symlink\nChecking it's path\n", name));
746
		DEBUG(3,("reduce_name: file path name %s is a symlink\nChecking it's path\n", name));
745
		if (*flink == '/') {
747
		if (*flink == '/') {
746
			pstrcpy(cleanlink, flink);
748
			pstrcpy(cleanlink, flink);
747
		} else {
749
		} else {
748
			pstrcpy(cleanlink, realdir);
750
			char* cp;
751
			pstrcpy( cleanlink, name );
752
			if( (cp = strrchr( cleanlink, '/' )) != NULL )
753
			  *cp = '\0';
749
			pstrcat(cleanlink, "/");
754
			pstrcat(cleanlink, "/");
750
			pstrcat(cleanlink, flink);
755
			pstrcat(cleanlink, flink);
751
		}
756
		}

Return to bug 80288