check for dfs referral
********************************************************************/
-static BOOL cli_dfs_check_error( struct cli_state *cli )
+static BOOL cli_dfs_check_error( struct cli_state *cli, NTSTATUS status )
{
uint32 flgs2 = SVAL(cli->inbuf,smb_flg2);
if ( !( (flgs2&FLAGS2_32_BIT_ERROR_CODES) && (flgs2&FLAGS2_UNICODE_STRINGS) ) )
return False;
- if ( NT_STATUS_EQUAL( NT_STATUS_PATH_NOT_COVERED, NT_STATUS(IVAL(cli->inbuf,smb_rcls)) ) )
+ if ( NT_STATUS_EQUAL( status, NT_STATUS(IVAL(cli->inbuf,smb_rcls)) ) )
return True;
return False;
return True;
}
+ /* special case where client asked for a path that does not exist */
+
+ if ( cli_dfs_check_error(rootcli, NT_STATUS_OBJECT_NAME_NOT_FOUND) ) {
+ *targetcli = rootcli;
+ pstrcpy( targetpath, path );
+ return True;
+ }
+
/* we got an error, check for DFS referral */
- if ( !cli_dfs_check_error(rootcli) )
+ if ( !cli_dfs_check_error(rootcli, NT_STATUS_PATH_NOT_COVERED) )
return False;
/* check for the referral */
DOM_SID alias;
DOM_SID *members;
int i, num;
- NTSTATUS result;
if ( (argc != 1) ||
!string_to_sid(&alias, argv[0]) ) {
}
if (!pdb_enum_aliasmem(&alias, &members, &num)) {
- d_printf("Could not list members for sid %s: %s\n",
- argv[0], nt_errstr(result));
+ d_printf("Could not list members for sid %s\n", argv[0]);
return -1;
}