Author: jerry Date: 2007-05-25 04:02:25 +0000 (Fri, 25 May 2007) New Revision: 23130
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=23130 Log: merge Derrell's change from SAMBA_3_0_25 svn r23120 Modified: branches/SAMBA_3_0_RELEASE/WHATSNEW.txt branches/SAMBA_3_0_RELEASE/source/include/nterr.h branches/SAMBA_3_0_RELEASE/source/libsmb/clierror.c branches/SAMBA_3_0_RELEASE/source/libsmb/clitrans.c Changeset: Modified: branches/SAMBA_3_0_RELEASE/WHATSNEW.txt =================================================================== --- branches/SAMBA_3_0_RELEASE/WHATSNEW.txt 2007-05-24 23:38:46 UTC (rev 23129) +++ branches/SAMBA_3_0_RELEASE/WHATSNEW.txt 2007-05-25 04:02:25 UTC (rev 23130) @@ -98,8 +98,10 @@ * BUG 4599: Fix failure when setting attributes. * BUG 4634: Type of the size parameter to getpeername in libsmbclient code was wrong. + * Fix libsmbclient interaction with links on Vista and properly + detect non-NTSTATUS errors. + - o Jim McDonough <[EMAIL PROTECTED]> * BUG 4630: Fix special case of unix_to_nt_time() for TIME_T_MAX and the output from http_timestring(). Modified: branches/SAMBA_3_0_RELEASE/source/include/nterr.h =================================================================== --- branches/SAMBA_3_0_RELEASE/source/include/nterr.h 2007-05-24 23:38:46 UTC (rev 23129) +++ branches/SAMBA_3_0_RELEASE/source/include/nterr.h 2007-05-25 04:02:25 UTC (rev 23130) @@ -30,6 +30,9 @@ #define STATUS_NO_MORE_FILES NT_STATUS(0x80000006) #define NT_STATUS_NO_MORE_ENTRIES NT_STATUS(0x8000001a) +/* Vista Status codes. */ +#define STATUS_INACCESSIBLE_SYSTEM_SHORTCUT NT_STATUS(0x8000002d) + #define STATUS_MORE_ENTRIES NT_STATUS(0x0105) #define STATUS_SOME_UNMAPPED NT_STATUS(0x0107) #define ERROR_INVALID_PARAMETER NT_STATUS(0x0057) Modified: branches/SAMBA_3_0_RELEASE/source/libsmb/clierror.c =================================================================== --- branches/SAMBA_3_0_RELEASE/source/libsmb/clierror.c 2007-05-24 23:38:46 UTC (rev 23129) +++ branches/SAMBA_3_0_RELEASE/source/libsmb/clierror.c 2007-05-25 04:02:25 UTC (rev 23130) @@ -380,6 +380,15 @@ return cli_errno_from_nt(status); } + /* + * Yuck! A special case for this Vista error. Since its high-order + * byte isn't 0xc0, it doesn't match cli_is_nt_error() above. + */ + status = cli_nt_error(cli); + if (NT_STATUS_V(status) == NT_STATUS_V(STATUS_INACCESSIBLE_SYSTEM_SHORTCUT)) { + return EACCES; + } + /* for other cases */ return EINVAL; } Modified: branches/SAMBA_3_0_RELEASE/source/libsmb/clitrans.c =================================================================== --- branches/SAMBA_3_0_RELEASE/source/libsmb/clitrans.c 2007-05-24 23:38:46 UTC (rev 23129) +++ branches/SAMBA_3_0_RELEASE/source/libsmb/clitrans.c 2007-05-25 04:02:25 UTC (rev 23130) @@ -197,7 +197,9 @@ */ status = cli_nt_error(cli); - if (NT_STATUS_IS_ERR(status) || NT_STATUS_EQUAL(status,STATUS_NO_MORE_FILES)) { + if (NT_STATUS_IS_ERR(status) || + NT_STATUS_EQUAL(status,STATUS_NO_MORE_FILES) || + NT_STATUS_EQUAL(status,STATUS_INACCESSIBLE_SYSTEM_SHORTCUT)) { goto out; }
