Changeset 817
- Timestamp:
 - Sep 27, 2013, 1:55:10 PM (12 years ago)
 - Location:
 - branches/client-2.1/src
 - Files:
 - 
      
- 7 edited
 
- 
          
  BuildAll.cmd (modified) (1 diff)
 - 
          
  Makefile.kmk (modified) (2 diffs)
 - 
          
  debug.c (modified) (1 diff)
 - 
          
  ndpsmb.c (modified) (36 diffs)
 - 
          
  nversion.tpl (modified) (1 diff)
 - 
          
  resources/ndpsmb.tpl (modified) (1 diff)
 - 
          
  smbwrp.c (modified) (11 diffs)
 
 
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 {ND_PROP_STRING, 0, "SPASSWORD", ""},106 {ND_PROP_STRING, 0, "SPASSWORD", ""}, 107 107 {ND_PROP_STRING, 0, "MASTER", "WORKGROUP"}, 108 108 {ND_PROP_ULONG, 0, "MASTERTYPE", "1"}, 109 {ND_PROP_ULONG, 0, "CTO", "10"},110 {ND_PROP_ULONG, 0, "CLD", "32"},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 lockInit();184 debugInit();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 debugDelete();193 lockClose();192 debugDelete(); 193 lockClose(); 194 194 return NO_ERROR; 195 195 } … … 218 218 stat->attrFile = (finfo->attr & 0x37); 219 219 220 fsphUnixTimeToDosDate(finfo->mtime, &stat->fdateLastWrite, &stat->ftimeLastWrite);221 fsphUnixTimeToDosDate(finfo->ctime, &stat->fdateCreation, &stat->ftimeCreation);222 fsphUnixTimeToDosDate(finfo->atime, &stat->fdateLastAccess, &stat->ftimeLastAccess);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 fsphUnixTimeToDosDate(finfo->mtime, &stat.fdateLastWrite, &stat.ftimeLastWrite);251 fsphUnixTimeToDosDate(finfo->ctime, &stat.fdateCreation, &stat.ftimeCreation);252 fsphUnixTimeToDosDate(finfo->atime, &stat.fdateLastAccess, &stat.ftimeLastAccess);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 return c - '0';266 } 267 265 return c - '0'; 266 } 267 268 268 if ('A' <= c && c <= 'F') 269 269 { 270 return c - 'A' + 0xA;271 } 272 270 return c - 'A' + 0xA; 271 } 272 273 273 if ('a' <= c && c <= 'f') 274 274 { 275 return c - 'a' + 0xA;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 pRes->pdc = NULL;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 * Create a directory cache with expiration time and cache listings476 * the above values come from the gui. default: timeout 10; listings: 32477 */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 // reconnect to server here, first test new connection580 // 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 debuglocal(9,"NdpQueryPathInfo upper path in <%s>, rc = %d\n", finfo.fname, rc);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 else if (rc != ERROR_REM_NOT_LIST)1047 {1048 rc = ERROR_PATH_NOT_FOUND;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 state.dir, state.dir_mask, state.mask, state.fullpath);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 // delete the dir cache1190 // 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 char *pchBuffer = (char *)malloc(cbBuffer);1309 if (!pchBuffer)1310 {1311 LEAVE();1312 return ERROR_NOT_ENOUGH_MEMORY;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 free(pchBuffer);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 char *pchBuffer = (char *)malloc(cbBuffer);1453 if (!pchBuffer)1454 {1455 LEAVE();1456 return ERROR_NOT_ENOUGH_MEMORY;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 free(pchBuffer);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 smbwrp_initthread();1797 debuglocal(9, "NdpIOCTL init thread\n");1798 return NO_ERROR;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 char *pchBuffer = (char *)malloc(cbBuffer);1866 if (!pchBuffer)1867 return ERROR_NOT_ENOUGH_MEMORY;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 free(pchBuffer);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 char *pchBuffer = (char *)malloc(cbBuffer);1981 if (!pchBuffer)1982 return ERROR_NOT_ENOUGH_MEMORY;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 free(pchBuffer);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 // delete the dir cache2028 // delete the dir cache 2034 2029 dircache_invalidate(pConn->file.fullname, pRes->pdc, 1); 2035 2030 … … 2182 2177 while (ulReadCompleted < ulRead) 2183 2178 { 2184 ULONG ulActual;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 /* delete the dir cache2232 this was moved from NdpFileClose() becasue if there are a lot files in the tree all are reread2233 the problem when moved to here is, that last accessed time is not refreshed2234 if this is needed, a new function needs to be done to update only one file in the cache */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 void (*fn)(const char *name,42 uint32 type,43 const char *comment,44 void *state),45 void *state)46 { 47 int i;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 WERROR werr;49 WERROR werr; 50 50 uint32_t resume_handle = 0; 51 uint32_t total_entries = 0;52 struct srvsvc_NetShareInfoCtr info_ctr;53 struct srvsvc_NetShareCtr1 ctr1;51 uint32_t total_entries = 0; 52 struct srvsvc_NetShareInfoCtr info_ctr; 53 struct srvsvc_NetShareCtr1 ctr1; 54 54 fstring name = ""; 55 fstring comment = "";56 void *mem_ctx;55 fstring comment = ""; 56 void *mem_ctx; 57 57 struct rpc_pipe_client *pipe_hnd; 58 58 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 */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 ZERO_STRUCT(ctr1);77 info_ctr.level = 1;78 info_ctr.ctr.ctr1 = &ctr1;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 pipe_hnd->desthost,81 &info_ctr,82 0xffffffff,83 &total_entries,84 &resume_handle,85 &werr);86 87 /* Was it successful? */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 /* Nope. Go clean up. */89 /* Nope. Go clean up. */ 90 90 goto done; 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 }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 /* 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;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 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 else137 {138 strncpy(slogfile, slogfilename, sizeof(slogfile) -1);139 }140 141 // init samba for debug messages142 setup_logging(slogfile, false);143 lp_set_logfile(slogfile);144 debug_parse_levels("10");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 return SAMBA_VERSION_STRING;149 return SAMBA_VERSION_STRING; 150 150 } 151 151 … … 169 169 initialised = 1; 170 170 171 lp_set_in_client(true); /* Make sure that we tell lp_load we are client */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 if (writeLog())187 {188 smbwrp_Logging();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 BlockSignals(True, SIGPIPE);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 size_t nlen = 2*(strlen(fname)+1);315 size_t nlen = 2*(strlen(fname)+1); 316 316 char *rparam=NULL, *rdata=NULL; 317 317 char *p; 318 319 param = SMB_MALLOC_ARRAY(char, 6+nlen+2);320 if (!param) {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 SAFE_FREE(param);342 SAFE_FREE(param); 343 343 if (!cli_receive_trans(cli, SMBtrans2, 344 &rparam, ¶m_len,345 &rdata, &data_len)) {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 &rparam, ¶m_len,415 &rdata, &data_len)) {414 &rparam, ¶m_len, 415 &rdata, &data_len)) { 416 416 return False; 417 417 } … … 503 503 504 504 again: 505 zero_sockaddr(&ss);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.
  