Changeset 817
- Timestamp:
- Sep 27, 2013, 1:55:10 PM (12 years ago)
- Location:
- branches/client-2.1/src
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/client-2.1/src/BuildAll.cmd
r401 r817 5 5 kmk BUILD_TYPE=release 6 6 7 kmk BUILD_TYPE=debug install 8 kmk BUILD_TYPE=release install 9 7 10 kmk BUILD_TYPE=debug packing 8 11 kmk BUILD_TYPE=release packing -
branches/client-2.1/src/Makefile.kmk
r799 r817 92 92 | $(SED) "s;_WPIVERSION_;$(subst .,\\\,$(VERSION));g" \ 93 93 | $(SED) "s;_BUILD_;$(BUILD);g" \ 94 | $(SED) "s;_VENDOR_;$(VENDOR);g" \ 94 95 > rc/rc.rc 95 96 … … 132 133 | $(SED) "s;_WPIVERSION_;$(subst .,\\\,$(VERSION));g" \ 133 134 | $(SED) "s;_BUILD_;$(BUILD);g" \ 135 | $(SED) "s;_VENDOR_;$(VENDOR);g" \ 134 136 > nversion.h 135 137 -
branches/client-2.1/src/debug.c
r533 r817 138 138 { 139 139 fprintf(f, "Samba client %s build %s based on %s\n", VERSION, BUILD, smbwrp_getVersion()); 140 fprintf(f, "This build is maintained by %s\n", VENDOR); 140 141 firstLogLine = FALSE; 141 142 } -
branches/client-2.1/src/ndpsmb.c
r816 r817 104 104 {ND_PROP_STRING, 0, "USER", "guest"}, 105 105 {ND_PROP_STRING, 0, "PASSWORD", ""}, 106 106 {ND_PROP_STRING, 0, "SPASSWORD", ""}, 107 107 {ND_PROP_STRING, 0, "MASTER", "WORKGROUP"}, 108 108 {ND_PROP_ULONG, 0, "MASTERTYPE", "1"}, 109 110 109 {ND_PROP_ULONG, 0, "CTO", "10"}, 110 {ND_PROP_ULONG, 0, "CLD", "32"}, 111 111 {ND_PROP_ULONG, 0, "EASUPPORT", "1"}, 112 112 {ND_PROP_STRING, 0, NULL, NULL} … … 126 126 /* A mutex to serialize plugin calls because libsmb may not be thread safe. */ 127 127 static NDMUTEX mutex; 128 128 129 129 static int lockInit (void) 130 130 { 131 131 return ph->fsphCreateMutex (&mutex); 132 132 } 133 133 134 134 static void lockClose (void) 135 135 { 136 136 ph->fsphCloseMutex (mutex); 137 137 } 138 138 139 139 static int lockRequest (void) 140 140 { … … 150 150 151 151 #define ENTER() do { \ 152 int rcLock = lockRequest(); 153 if (rcLock != NO_ERROR) 154 return rcLock; 152 int rcLock = lockRequest(); \ 153 if (rcLock != NO_ERROR) \ 154 return rcLock; \ 155 155 } while (0) 156 156 157 #define LEAVE() do { 157 #define LEAVE() do { \ 158 158 lockRelease(); \ 159 159 } while (0) … … 181 181 ifL = 1; 182 182 } 183 184 183 lockInit(); 184 debugInit(); 185 185 debuglocal(9,"Working with %s bit fileio NDFS\n", ifL ? "64" : "32"); 186 186 return NO_ERROR; … … 190 190 int APIENTRY NdpPluginFree (void) 191 191 { 192 193 192 debugDelete(); 193 lockClose(); 194 194 return NO_ERROR; 195 195 } … … 218 218 stat->attrFile = (finfo->attr & 0x37); 219 219 220 221 222 220 fsphUnixTimeToDosDate(finfo->mtime, &stat->fdateLastWrite, &stat->ftimeLastWrite); 221 fsphUnixTimeToDosDate(finfo->ctime, &stat->fdateCreation, &stat->ftimeCreation); 222 fsphUnixTimeToDosDate(finfo->atime, &stat->fdateLastAccess, &stat->ftimeLastAccess); 223 223 } 224 224 … … 248 248 stat.attrFile = (finfo->attr & 0x37); 249 249 250 251 252 250 fsphUnixTimeToDosDate(finfo->mtime, &stat.fdateLastWrite, &stat.ftimeLastWrite); 251 fsphUnixTimeToDosDate(finfo->ctime, &stat.fdateCreation, &stat.ftimeCreation); 252 fsphUnixTimeToDosDate(finfo->atime, &stat.fdateLastAccess, &stat.ftimeLastAccess); 253 253 debug_printf( "fname %s\n", finfo->fname); 254 254 debug_printf( "mtime %d %s", finfo->mtime, ctime( (time_t*)&finfo->mtime)); … … 263 263 if ('0' <= c && c <= '9') 264 264 { 265 266 } 267 265 return c - '0'; 266 } 267 268 268 if ('A' <= c && c <= 'F') 269 269 { 270 271 } 272 270 return c - 'A' + 0xA; 271 } 272 273 273 if ('a' <= c && c <= 'f') 274 274 { 275 276 } 277 275 return c - 'a' + 0xA; 276 } 277 278 278 return 0; 279 279 } … … 282 282 { 283 283 b &= 0xF; 284 284 285 285 if (b <= 9) 286 286 { 287 287 return b + '0'; 288 288 } 289 289 290 290 return 'A' + (b - 0xA); 291 291 } … … 296 296 const char *s = pszCrypt; 297 297 char *d = pszPlain; 298 298 299 299 while (*s) 300 300 { 301 301 *d++ = (char)((fromhex (*s++) << 4) + fromhex (*s++)); 302 302 } 303 303 304 304 *d++ = 0; 305 305 } … … 310 310 const char *s = pszPlain; 311 311 char *d = pszCrypt; 312 312 313 313 while (*s) 314 314 { … … 317 317 s++; 318 318 } 319 319 320 320 *d++ = 0; 321 321 } … … 338 338 pRes->krb5support = 0; 339 339 #endif 340 340 pRes->pdc = NULL; 341 341 342 342 t = 0, q = NULL; … … 380 380 381 381 t = 0, q = NULL; 382 rc = ph->fsphQueryStringProperty (properties, "SPASSWORD", &q, &t); 383 if ( rc == NO_ERROR 384 && *q != '\0' 385 && defaultPassword) 386 { 387 char p[1024]; 388 p[0] = 0; 389 390 decryptPassword (q, p); 391 392 if (*p) 393 { 394 strncpy(pRes->srv.password, p, sizeof(pRes->srv.password) - 1); 395 396 /* clear the plain password */ 397 ph->fsphSetProperty (properties, "PASSWORD", ""); 398 } 399 } 400 else 401 { 402 char c[1024]; 403 encryptPassword (pRes->srv.password, c); 404 405 ph->fsphSetProperty (properties, "SPASSWORD", c); 406 407 // clear the plain password 382 rc = ph->fsphQueryStringProperty (properties, "SPASSWORD", &q, &t); 383 if ( rc == NO_ERROR && *q != '\0' && defaultPassword) 384 { 385 char p[1024]; 386 p[0] = 0; 387 388 decryptPassword (q, p); 389 390 if (*p) 391 { 392 strncpy(pRes->srv.password, p, sizeof(pRes->srv.password) - 1); 393 394 /* clear the plain password */ 408 395 ph->fsphSetProperty (properties, "PASSWORD", ""); 409 396 } 397 } 398 else 399 { 400 char c[1024]; 401 encryptPassword (pRes->srv.password, c); 402 403 ph->fsphSetProperty (properties, "SPASSWORD", c); 404 405 // clear the plain password 406 ph->fsphSetProperty (properties, "PASSWORD", ""); 407 } 410 408 411 409 t = 0, q = NULL; … … 473 471 474 472 /* 475 476 477 473 * Create a directory cache with expiration time and cache listings 474 * the above values come from the gui. default: timeout 10; listings: 32 475 */ 478 476 dircache_create(&pRes->pdc, pRes->cachetimeout, pRes->cachedepth); 479 477 … … 580 578 if (newlevel) 581 579 { 582 580 // reconnect to server here, first test new connection 583 581 cli_state* tmp_cli = NULL; 584 582 rc = smbwrp_connect( &tmpRes, &tmp_cli); … … 918 916 /* 919 917 * NdpQueryPathInfo is the most important function :) netdrive always calls 920 * the function before every operation to find out the path status: does it exist, is it a file, does a921 * parent directory exist, etc.918 * the function before every operation to find out the path status: 919 * does it exist, is it a file, does a parent directory exist, etc. 922 920 * Plugin must return one of the following error codes: 923 * NO_ERROR - path exists and the path information have been successfully retrieved. 921 * NO_ERROR - path exists and the path information have been successfully 922 * retrieved. 924 923 * ERROR_FILE_NOT_FOUND - all but the last component of the path exist and the 925 * path without the last component is a directory. dir1_ok\dir2_ok\does_not_exist.926 * the wildcard can not exist, so the plugin returns FILE_NOT_FOUND, if the parent927 * directory exist.924 * path without the last component is a directory. dir1_ok\dir2_ok\does_not_exist. 925 * the wildcard can not exist, so the plugin returns FILE_NOT_FOUND, if the parent 926 * directory exist. 928 927 * ERROR_PATH_NOT_FOUND - any of not last path components does not exist, or all 929 * but the last component exist and is a file: \dir_ok\dir2_ok\file_ok\non_existing.928 * but the last component exist and is a file: \dir_ok\dir2_ok\file_ok\non_existing. 930 929 * ERROR_REM_NOT_LIST - resource is temporarily unavailable for some reasons. 931 930 * Any other error codes means an internal plugin error, not related to the status … … 1002 1001 rcCon = smbwrp_connect( pRes, &pConn->cli); 1003 1002 if (rcCon != NO_ERROR) 1004 debuglocal(9,"NdpQueryPathInfo smbwrp_connect rc = %d\n", rcCon);1003 debuglocal(9,"NdpQueryPathInfo smbwrp_connect rc = %d\n", rcCon); 1005 1004 1006 1005 // try file list again if reconnecting worked 1007 1006 if (rcCon == NO_ERROR) 1008 rc = smbwrp_getattr( &pRes->srv, pConn->cli, &finfo);1007 rc = smbwrp_getattr( &pRes->srv, pConn->cli, &finfo); 1009 1008 } 1010 1009 debuglocal(9,"NdpQueryPathInfo smbwrp_getattr, rc = %d\n", rc); … … 1037 1036 *p = 0; 1038 1037 rc = smbwrp_getattr( &pRes->srv, pConn->cli, &finfo); 1039 1038 debuglocal(9,"NdpQueryPathInfo upper path in <%s>, rc = %d\n", finfo.fname, rc); 1040 1039 if (rc == NO_ERROR) 1041 1040 { 1042 1041 rc = (finfo.attr & FILE_DIRECTORY) !=0 ? 1043 ERROR_FILE_NOT_FOUND: 1044 ERROR_PATH_NOT_FOUND; 1042 ERROR_FILE_NOT_FOUND:ERROR_PATH_NOT_FOUND; 1045 1043 } 1046 1047 1048 1044 else if (rc != ERROR_REM_NOT_LIST) 1045 { 1046 rc = ERROR_PATH_NOT_FOUND; 1049 1047 } 1050 1048 } … … 1133 1131 } 1134 1132 debuglocal(9,"NdpFindStart: dir [%s], dir_mask [%s], mask [%s], szPath [%s]\n", 1135 1133 state.dir, state.dir_mask, state.mask, state.fullpath); 1136 1134 rc = smbwrp_filelist( &pRes->srv, pConn->cli, &state); 1137 1135 // we need to handle reconnection also here, because NdpQueryPathInfo … … 1190 1188 debug_printf("NdpSetPathInfo in [%p]\n", pConn); 1191 1189 1192 1190 // delete the dir cache 1193 1191 dircache_invalidate(szPathName, pRes->pdc, 1); 1194 1192 … … 1306 1304 debuglocal(9,"NdpEAQuery in [%p] <%s> %08x %d\n", pConn, path, pGEAList, pGEAList ? pGEAList->cbList : 0); 1307 1305 1308 1309 1310 1311 1312 1313 1306 char *pchBuffer = (char *)malloc(cbBuffer); 1307 if (!pchBuffer) 1308 { 1309 LEAVE(); 1310 return ERROR_NOT_ENOUGH_MEMORY; 1311 } 1314 1312 1315 1313 do { … … 1342 1340 } 1343 1341 } while (0); 1344 1342 free(pchBuffer); 1345 1343 debuglocal(9,"NdpEAQuery <%s> %d %d %d\n", pfi->pszName, rc, pFEASrc->cbList, pFEAList->cbList); 1346 1344 LEAVE(); … … 1423 1421 return ERROR_EAS_NOT_SUPPORTED; 1424 1422 } 1425 1426 debuglocal(9, "remove me NdpEASize before fsphGetFileInfoData\n"); 1423 1427 1424 rc = ph->fsphGetFileInfoData(pfi, &fdata, 0); 1428 1425 if (rc || !fdata.ulSize || !fdata.pData) … … 1434 1431 ENTER(); 1435 1432 1436 debuglocal(9, "remove me NdpEASize before finfo =\n");1437 1433 finfo = (smbwrp_fileinfo *)fdata.pData; 1438 debuglocal(9, "remove me NdpEASize after finfo=\n");1439 1434 easize = finfo->easize; 1440 1435 finfo->easize = -1; … … 1450 1445 debuglocal(9,"NdpEASize in [%p] <%s> \n", pConn, path); 1451 1446 1452 1453 1454 1455 1456 1457 1447 char *pchBuffer = (char *)malloc(cbBuffer); 1448 if (!pchBuffer) 1449 { 1450 LEAVE(); 1451 return ERROR_NOT_ENOUGH_MEMORY; 1452 } 1458 1453 1459 1454 do { … … 1482 1477 *pulEASize = pfealist->cbList; 1483 1478 } while (0); 1484 1479 free(pchBuffer); 1485 1480 debuglocal(9,"NdpEASize <%s> %d %d\n", pfi->pszName, *pulEASize, rc); 1486 1481 LEAVE(); … … 1793 1788 { 1794 1789 if (function == ND_PL_INIT_THREAD) 1795 1796 1797 1798 1799 1790 { 1791 smbwrp_initthread(); 1792 debuglocal(9, "NdpIOCTL init thread\n"); 1793 return NO_ERROR; 1794 } 1800 1795 1801 1796 debuglocal(9,"NdpIOCTL <%s> %d\n", path, function); … … 1803 1798 if (in && insize > 4096) 1804 1799 { 1805 char out[4096];1806 sprintf (out, "SAMBA IOCTL function = %d, parms [%s] insize = %d, *poutlen = %d", function, in, insize, *poutlen);1807 *poutlen = strlen(out);1808 strcpy (in, out);1809 return NO_ERROR;1800 char out[4096]; 1801 sprintf (out, "SAMBA IOCTL function = %d, parms [%s] insize = %d, *poutlen = %d", function, in, insize, *poutlen); 1802 *poutlen = strlen(out); 1803 strcpy (in, out); 1804 return NO_ERROR; 1810 1805 } 1811 1806 … … 1863 1858 debuglocal(9,"NdpFileEAQuery in [%p] <%s>/%d pGEAList=%08x\n", pConn, pConn->file.fname, pConn->file.fd, pGEAList); 1864 1859 1865 1866 1867 1860 char *pchBuffer = (char *)malloc(cbBuffer); 1861 if (!pchBuffer) 1862 return ERROR_NOT_ENOUGH_MEMORY; 1868 1863 1869 1864 ENTER(); … … 1903 1898 } 1904 1899 } while (0); 1905 1900 free(pchBuffer); 1906 1901 debuglocal(9,"NdpFileEAQuery out <%s>/%d pFEASrc->cbList=%d pFEAList->cbList=%d rc=%d\n", pConn->file.fname, pConn->file.fd, pFEASrc->cbList, pFEAList->cbList, rc); 1907 1902 LEAVE(); … … 1978 1973 debuglocal(9,"NdpFileEASize in [%p] <%s>/%d \n", pConn, pConn->file.fname, pConn->file.fd); 1979 1974 1980 1981 1982 1975 char *pchBuffer = (char *)malloc(cbBuffer); 1976 if (!pchBuffer) 1977 return ERROR_NOT_ENOUGH_MEMORY; 1983 1978 1984 1979 ENTER(); … … 2014 2009 *pulEASize = pFEAList->cbList; 2015 2010 } while (0); 2016 2011 free(pchBuffer); 2017 2012 debuglocal(9,"NdpFileEASize %d %d\n", *pulEASize, rc); 2018 2013 LEAVE(); … … 2031 2026 debug_printf("NdpFileSetInfo in [%p]\n", pConn); 2032 2027 2033 2028 // delete the dir cache 2034 2029 dircache_invalidate(pConn->file.fullname, pRes->pdc, 1); 2035 2030 … … 2182 2177 while (ulReadCompleted < ulRead) 2183 2178 { 2184 2179 ULONG ulActual; 2185 2180 ULONG ulToRead = ulRead - ulReadCompleted; 2186 2181 debuglocal(9,"NdpFileRead completed %d, to read %d\n", ulReadCompleted, ulToRead); … … 2229 2224 debuglocal(9,"NdpFileWrite in [%p]\n", pConn); 2230 2225 2231 2232 2233 2234 2226 /* delete the dir cache 2227 this was moved from NdpFileClose() becasue if there are a lot files in the tree all are reread 2228 the problem when moved to here is, that last accessed time is not refreshed 2229 if this is needed, a new function needs to be done to update only one file in the cache */ 2235 2230 dircache_invalidate(pConn->file.fullname, pRes->pdc, 1); 2236 2231 -
branches/client-2.1/src/nversion.tpl
r679 r817 3 3 #define __nversion__H 4 4 5 #define NDPSMB_VERSION _VERSION_ 6 #define NDPSMB_BUILD _BUILD_ 7 #define NDPSMB_INSTALL _WPIVERSION_ 8 #define VERSION "_VERSION_" 9 #define BUILD "_BUILD_" 10 #define OS eCS (OS/2) 11 #define ND NetDrive 5 #define NDPSMB_VERSION _VERSION_ 6 #define NDPSMB_BUILD _BUILD_ 7 #define NDPSMB_INSTALL _WPIVERSION_ 8 #define VERSION "_VERSION_" 9 #define BUILD "_BUILD_" 10 #define OS eCS (OS/2) 11 #define ND NetDrive 12 #define VENDOR "_VENDOR_" 12 13 13 14 #endif // __nversion__H -
branches/client-2.1/src/resources/ndpsmb.tpl
r801 r817 113 113 =("chkndenv") 114 114 =("ChkREQ LIBC065.DLL Package:netlabs.org\kLIBC\LIBC 0.6 Runtime\0\6\5") 115 =("ChkREQ GCC44 2.DLL Package:netlabs.org\GCC4\Core\1\2\0")115 =("ChkREQ GCC446.DLL Package:netlabs.org\GCC4\Core\1\2\0") 116 116 =("ChkREQ STDCPP.DLL Package:netlabs.org\GCC4\Core\1\2\1") 117 117 TITLE="Samba Client Plugin for Netdrive and EVFS" -
branches/client-2.1/src/smbwrp.c
r816 r817 39 39 static int 40 40 net_share_enum_rpc(struct cli_state *cli, 41 42 43 44 45 46 { 47 41 void (*fn)(const char *name, 42 uint32 type, 43 const char *comment, 44 void *state), 45 void *state) 46 { 47 int i; 48 48 NTSTATUS status; 49 49 WERROR werr; 50 50 uint32_t resume_handle = 0; 51 52 53 51 uint32_t total_entries = 0; 52 struct srvsvc_NetShareInfoCtr info_ctr; 53 struct srvsvc_NetShareCtr1 ctr1; 54 54 fstring name = ""; 55 56 55 fstring comment = ""; 56 void *mem_ctx; 57 57 struct rpc_pipe_client *pipe_hnd; 58 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 59 /* Open the server service pipe */ 60 status = cli_rpc_pipe_open_noauth(cli, &ndr_table_srvsvc.syntax_id, &pipe_hnd); 61 if (!NT_STATUS_IS_OK(status)) { 62 DEBUG(1, ("net_share_enum_rpc pipe open fail!\n")); 63 return -1; 64 } 65 66 /* Allocate a context for parsing and for the entries in "ctr" */ 67 mem_ctx = talloc_init("libsmbclient: net_share_enum_rpc"); 68 if (mem_ctx == NULL) { 69 DEBUG(0, ("out of memory for net_share_enum_rpc!\n")); 70 TALLOC_FREE(pipe_hnd); 71 return -1; 72 } 73 74 /* Issue the NetShareEnum RPC call and retrieve the response */ 75 75 ZERO_STRUCT(info_ctr); 76 77 78 76 ZERO_STRUCT(ctr1); 77 info_ctr.level = 1; 78 info_ctr.ctr.ctr1 = &ctr1; 79 79 status = rpccli_srvsvc_NetShareEnumAll(pipe_hnd, mem_ctx, 80 81 82 83 84 85 86 87 80 pipe_hnd->desthost, 81 &info_ctr, 82 0xffffffff, 83 &total_entries, 84 &resume_handle, 85 &werr); 86 87 /* Was it successful? */ 88 88 if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(werr) || info_ctr.ctr.ctr1->count == 0) { 89 89 /* Nope. Go clean up. */ 90 90 goto done; 91 92 93 94 95 96 97 98 99 91 } 92 93 /* For each returned entry... */ 94 for (i = 0; i < info_ctr.ctr.ctr1->count; i++) { 95 struct srvsvc_NetShareInfo1 info = info_ctr.ctr.ctr1->array[i]; 96 97 /* Add this share to the list */ 98 (*fn)(info.name, info.type, info.comment, state); 99 } 100 100 101 101 done: 102 103 104 105 106 107 108 109 102 /* Close the server service pipe */ 103 TALLOC_FREE(pipe_hnd); 104 105 /* Free all memory which was allocated for this request */ 106 TALLOC_FREE(mem_ctx); 107 108 /* Tell 'em if it worked */ 109 return W_ERROR_IS_OK(status) ? 0 : -1; 110 110 } 111 111 … … 125 125 void smbwrp_Logging() 126 126 { 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 127 char slogfile[_MAX_PATH +1] = {0}; 128 char slogfilename[] = "log.smbc"; 129 char *env = getenv("LOGFILES"); 130 if (env != NULL) 131 { 132 strncpy(slogfile, env, sizeof(slogfile) -1); 133 strncat(slogfile, "\\", sizeof(slogfile) - strlen(slogfile) -1); 134 strncat(slogfile, slogfilename, sizeof(slogfile) - strlen(slogfile) -1); 135 } 136 else 137 { 138 strncpy(slogfile, slogfilename, sizeof(slogfile) -1); 139 } 140 141 // init samba for debug messages 142 setup_logging(slogfile, false); 143 lp_set_logfile(slogfile); 144 debug_parse_levels("10"); 145 145 146 146 } 147 147 const char * smbwrp_getVersion() 148 148 { 149 149 return SAMBA_VERSION_STRING; 150 150 } 151 151 … … 169 169 initialised = 1; 170 170 171 171 lp_set_in_client(true); /* Make sure that we tell lp_load we are client */ 172 172 173 173 load_case_tables(); … … 184 184 } 185 185 186 187 188 189 186 if (writeLog()) 187 { 188 smbwrp_Logging(); 189 } 190 190 191 191 /* … … 200 200 void smbwrp_initthread(void) 201 201 { 202 203 *Block SIGPIPE (from lib/util_sock.c: write())204 *It is not needed and should not stop execution205 206 202 /* 203 Block SIGPIPE (from lib/util_sock.c: write()) 204 It is not needed and should not stop execution 205 */ 206 BlockSignals(True, SIGPIPE); 207 207 } 208 208 … … 313 313 uint16 setup = TRANSACT2_QPATHINFO; 314 314 char *param; 315 315 size_t nlen = 2*(strlen(fname)+1); 316 316 char *rparam=NULL, *rdata=NULL; 317 317 char *p; 318 319 320 318 319 param = SMB_MALLOC_ARRAY(char, 6+nlen+2); 320 if (!param) { 321 321 return false; 322 322 } … … 331 331 332 332 if (!cli_send_trans(cli, SMBtrans2, 333 NULL,/* name */334 -1, 0,/* fid, flags */335 &setup, 1, 0,/* setup, length, max */336 param, param_len, 10,/* param, length, max */337 NULL, data_len, cli->max_xmit/* data, length, max */338 333 NULL, /* name */ 334 -1, 0, /* fid, flags */ 335 &setup, 1, 0, /* setup, length, max */ 336 param, param_len, 10, /* param, length, max */ 337 NULL, data_len, cli->max_xmit /* data, length, max */ 338 )) { 339 339 return False; 340 340 } 341 341 342 342 SAFE_FREE(param); 343 343 if (!cli_receive_trans(cli, SMBtrans2, 344 345 344 &rparam, ¶m_len, 345 &rdata, &data_len)) { 346 346 return False; 347 347 } … … 402 402 403 403 if (!cli_send_trans(cli, SMBtrans2, 404 NULL,/* name */405 -1, 0,/* fid, flags */406 &setup, 1, 0,/* setup, length, max */407 param, param_len, 2,/* param, length, max */408 NULL, data_len, cli->max_xmit/* data, length, max */409 404 NULL, /* name */ 405 -1, 0, /* fid, flags */ 406 &setup, 1, 0, /* setup, length, max */ 407 param, param_len, 2, /* param, length, max */ 408 NULL, data_len, cli->max_xmit /* data, length, max */ 409 )) { 410 410 return False; 411 411 } 412 412 413 413 if (!cli_receive_trans(cli, SMBtrans2, 414 415 414 &rparam, ¶m_len, 415 &rdata, &data_len)) { 416 416 return False; 417 417 } … … 503 503 504 504 again: 505 505 zero_sockaddr(&ss); 506 506 507 507 /* have to open a new connection */ … … 695 695 debuglocal(4,"cli_close new mtime %lu\n", file->mtime); 696 696 } 697 698 if (file->updatetime == 2 && !cli_setattrE(cli, file->fd, file->ctime, 0, file->mtime))699 {700 debuglocal(4,"Set attrE on close failed %d\n", os2cli_errno(cli));701 }702 697 703 698 if (!cli_close(cli, file->fd)) … … 706 701 } 707 702 708 if (!rc && (file->openattr || file->mtime ))709 { 710 debuglocal(4,"Set attr on close %s %08x %d %d\n", file->fname, file->openattr, file->mtime, file->mtime);711 if (!cli_set atr(cli, file->fname, file->openattr, file->mtime))712 { 713 debuglocal(4,"Set attron close failed %d\n", os2cli_errno(cli));703 if (!rc && (file->openattr || file->mtime || file->ctime)) 704 { 705 debuglocal(4,"Set pathinfo on close %s %08x %d %d\n", file->fname, file->openattr, file->mtime, file->ctime); 706 if (!cli_setpathinfo(cli, file->fname, file->ctime, 0, file->mtime, 0, file->openattr)) 707 { 708 debuglocal(4,"Set pathinfo on close failed %d\n", os2cli_errno(cli)); 714 709 //rc = os2cli_errno(cli); 715 710 } 716 717 711 } 718 712 719 713 file->openattr = 0; 720 714 file->mtime = 0; 721 file->updatetime = 0; 715 file->ctime = 0; 716 file->updatetime = 0; 722 717 file->fd = -1; 723 718 file->offset = 0;
Note:
See TracChangeset
for help on using the changeset viewer.