Removed a few dependencies on kernel32 functions.
[wine] / dlls / mpr / wnet.c
1 /*
2  * MPR WNet functions
3  */
4
5 #include <ctype.h>
6 #include <string.h>
7 #include <sys/types.h>
8 #include <pwd.h>
9 #include <unistd.h>
10
11 #include "winbase.h"
12 #include "wine/winestring.h"
13 #include "winnetwk.h"
14 #include "drive.h"
15 #include "heap.h"
16 #include "debugtools.h"
17
18 DEFAULT_DEBUG_CHANNEL(mpr)
19
20
21 /*
22  * Browsing Functions
23  */
24
25 /*********************************************************************
26  * WNetOpenEnumA [MPR.92]
27  */
28 DWORD WINAPI WNetOpenEnumA( DWORD dwScope, DWORD dwType, DWORD dwUsage,
29                             LPNETRESOURCEA lpNet, LPHANDLE lphEnum )
30 {
31     FIXME( "(%08lX, %08lX, %08lX, %p, %p): stub\n",
32             dwScope, dwType, dwUsage, lpNet, lphEnum );
33
34     SetLastError(WN_NO_NETWORK);
35     return WN_NO_NETWORK;
36 }
37
38 /*********************************************************************
39  * WNetOpenEnumW [MPR.93]
40  */
41 DWORD WINAPI WNetOpenEnumW( DWORD dwScope, DWORD dwType, DWORD dwUsage,
42                             LPNETRESOURCEW lpNet, LPHANDLE lphEnum )
43 {
44    FIXME( "(%08lX, %08lX, %08lX, %p, %p): stub\n",
45           dwScope, dwType, dwUsage, lpNet, lphEnum );
46
47    SetLastError(WN_NO_NETWORK);
48    return WN_NO_NETWORK;
49 }
50
51 /*********************************************************************
52  * WNetEnumResourceA [MPR.66]
53  */
54 DWORD WINAPI WNetEnumResourceA( HANDLE hEnum, LPDWORD lpcCount, 
55                                 LPVOID lpBuffer, LPDWORD lpBufferSize )
56 {
57     FIXME( "(%04X, %p, %p, %p): stub\n", 
58             hEnum, lpcCount, lpBuffer, lpBufferSize );
59
60     SetLastError(WN_NO_NETWORK);
61     return WN_NO_NETWORK;
62 }
63
64 /*********************************************************************
65  * WNetEnumResourceW [MPR.67]
66  */
67 DWORD WINAPI WNetEnumResourceW( HANDLE hEnum, LPDWORD lpcCount, 
68                                 LPVOID lpBuffer, LPDWORD lpBufferSize )
69 {
70     FIXME( "(%04X, %p, %p, %p): stub\n", 
71             hEnum, lpcCount, lpBuffer, lpBufferSize );
72
73     SetLastError(WN_NO_NETWORK);
74     return WN_NO_NETWORK;
75 }
76
77 /*********************************************************************
78  * WNetCloseEnum [MPR.58]
79  */
80 DWORD WINAPI WNetCloseEnum( HANDLE hEnum )
81 {
82     FIXME( "(%04X): stub\n", hEnum );
83
84     SetLastError(WN_NO_NETWORK);
85     return WN_NO_NETWORK;
86 }
87
88 /*********************************************************************
89  * WNetGetResourceInformationA [MPR.80]
90  */
91 DWORD WINAPI WNetGetResourceInformationA( LPNETRESOURCEA lpNetResource, 
92                                           LPVOID lpBuffer, LPDWORD cbBuffer, 
93                                           LPSTR *lplpSystem )
94 {
95     FIXME( "(%p, %p, %p, %p): stub\n",
96            lpNetResource, lpBuffer, cbBuffer, lplpSystem );
97
98     SetLastError(WN_NO_NETWORK);
99     return WN_NO_NETWORK;
100 }
101
102 /*********************************************************************
103  * WNetGetResourceInformationW [MPR.80]
104  */
105 DWORD WINAPI WNetGetResourceInformationW( LPNETRESOURCEW lpNetResource, 
106                                           LPVOID lpBuffer, LPDWORD cbBuffer, 
107                                           LPWSTR *lplpSystem )
108 {
109     FIXME( "(%p, %p, %p, %p): stub\n",
110            lpNetResource, lpBuffer, cbBuffer, lplpSystem );
111
112     SetLastError(WN_NO_NETWORK);
113     return WN_NO_NETWORK;
114 }
115
116 /*********************************************************************
117  * WNetGetResourceParentA [MPR.83]
118  */
119 DWORD WINAPI WNetGetResourceParentA( LPNETRESOURCEA lpNetResource,
120                                      LPVOID lpBuffer, LPDWORD lpBufferSize )
121 {
122     FIXME( "(%p, %p, %p): stub\n", 
123            lpNetResource, lpBuffer, lpBufferSize );
124
125     SetLastError(WN_NO_NETWORK);
126     return WN_NO_NETWORK;
127 }
128
129 /*********************************************************************
130  * WNetGetResourceParentW [MPR.84]
131  */
132 DWORD WINAPI WNetGetResourceParentW( LPNETRESOURCEW lpNetResource,
133                                      LPVOID lpBuffer, LPDWORD lpBufferSize )
134 {
135     FIXME( "(%p, %p, %p): stub\n", 
136            lpNetResource, lpBuffer, lpBufferSize );
137
138     SetLastError(WN_NO_NETWORK);
139     return WN_NO_NETWORK;
140 }
141
142
143
144 /*
145  * Connection Functions
146  */
147
148 /*********************************************************************
149  *  WNetAddConnectionA [MPR.50] 
150  */
151 DWORD WINAPI WNetAddConnectionA( LPCSTR lpRemoteName, LPCSTR lpPassword,
152                                  LPCSTR lpLocalName )
153 {
154     FIXME( "(%s, %p, %s): stub\n", 
155            debugstr_a(lpRemoteName), lpPassword, debugstr_a(lpLocalName) );
156
157     SetLastError(WN_NO_NETWORK);
158     return WN_NO_NETWORK;
159 }
160
161 /*********************************************************************
162  *  WNetAddConnectionW [MPR.51] 
163  */
164 DWORD WINAPI WNetAddConnectionW( LPCWSTR lpRemoteName, LPCWSTR lpPassword,
165                                  LPCWSTR lpLocalName )
166 {
167     FIXME( "(%s, %p, %s): stub\n", 
168            debugstr_w(lpRemoteName), lpPassword, debugstr_w(lpLocalName) );
169
170     SetLastError(WN_NO_NETWORK);
171     return WN_NO_NETWORK;
172 }
173
174 /*********************************************************************
175  *  WNetAddConnection2A [MPR.46] 
176  */
177 DWORD WINAPI WNetAddConnection2A( LPNETRESOURCEA lpNetResource,
178                                   LPCSTR lpPassword, LPCSTR lpUserID, 
179                                   DWORD dwFlags )
180 {
181     FIXME( "(%p, %p, %s, 0x%08lX): stub\n", 
182            lpNetResource, lpPassword, debugstr_a(lpUserID), dwFlags );
183
184     SetLastError(WN_NO_NETWORK);
185     return WN_NO_NETWORK;
186 }
187
188 /*********************************************************************
189  * WNetAddConnection2W [MPR.47]
190  */
191 DWORD WINAPI WNetAddConnection2W( LPNETRESOURCEW lpNetResource,
192                                   LPCWSTR lpPassword, LPCWSTR lpUserID, 
193                                   DWORD dwFlags )
194 {
195     FIXME( "(%p, %p, %s, 0x%08lX): stub\n", 
196            lpNetResource, lpPassword, debugstr_w(lpUserID), dwFlags );
197
198     SetLastError(WN_NO_NETWORK);
199     return WN_NO_NETWORK;
200 }
201
202 /*********************************************************************
203  * WNetAddConnection3A [MPR.48]
204  */
205 DWORD WINAPI WNetAddConnection3A( HWND hwndOwner, LPNETRESOURCEA lpNetResource,
206                                   LPCSTR lpPassword, LPCSTR lpUserID, 
207                                   DWORD dwFlags )
208 {
209     FIXME( "(%04x, %p, %p, %s, 0x%08lX), stub\n", 
210            hwndOwner, lpNetResource, lpPassword, debugstr_a(lpUserID), dwFlags );
211
212     SetLastError(WN_NO_NETWORK);
213     return WN_NO_NETWORK;
214 }
215
216 /*********************************************************************
217  * WNetAddConnection3W [MPR.49]
218  */
219 DWORD WINAPI WNetAddConnection3W( HWND hwndOwner, LPNETRESOURCEW lpNetResource,
220                                   LPCWSTR lpPassword, LPCWSTR lpUserID, 
221                                   DWORD dwFlags )
222 {
223     FIXME( "(%04x, %p, %p, %s, 0x%08lX), stub\n", 
224            hwndOwner, lpNetResource, lpPassword, debugstr_w(lpUserID), dwFlags );
225
226     SetLastError(WN_NO_NETWORK);
227     return WN_NO_NETWORK;
228
229
230 /*****************************************************************
231  *  WNetUseConnectionA [MPR.100]
232  */
233 DWORD WINAPI WNetUseConnectionA( HWND hwndOwner, LPNETRESOURCEA lpNetResource,
234                                  LPCSTR lpPassword, LPCSTR lpUserID, DWORD dwFlags,
235                                  LPSTR lpAccessName, LPDWORD lpBufferSize, 
236                                  LPDWORD lpResult )
237 {
238     FIXME( "(%04x, %p, %p, %s, 0x%08lX, %s, %p, %p), stub\n", 
239            hwndOwner, lpNetResource, lpPassword, debugstr_a(lpUserID), dwFlags,
240            debugstr_a(lpAccessName), lpBufferSize, lpResult );
241
242     SetLastError(WN_NO_NETWORK);
243     return WN_NO_NETWORK;
244 }
245
246 /*****************************************************************
247  *  WNetUseConnectionW [MPR.101]
248  */
249 DWORD WINAPI WNetUseConnectionW( HWND hwndOwner, LPNETRESOURCEW lpNetResource,
250                                  LPCWSTR lpPassword, LPCWSTR lpUserID, DWORD dwFlags,
251                                  LPWSTR lpAccessName, LPDWORD lpBufferSize,
252                                  LPDWORD lpResult )
253 {
254     FIXME( "(%04x, %p, %p, %s, 0x%08lX, %s, %p, %p), stub\n", 
255            hwndOwner, lpNetResource, lpPassword, debugstr_w(lpUserID), dwFlags,
256            debugstr_w(lpAccessName), lpBufferSize, lpResult );
257
258     SetLastError(WN_NO_NETWORK);
259     return WN_NO_NETWORK;
260 }
261
262 /*********************************************************************
263  *  WNetCancelConnectionA [MPR.55]
264  */
265 DWORD WINAPI WNetCancelConnectionA( LPCSTR lpName, BOOL fForce )
266 {
267     FIXME( "(%s, %d), stub\n", debugstr_a(lpName), fForce );
268
269     return WN_SUCCESS;
270 }
271
272 /*********************************************************************
273  *  WNetCancelConnectionW [MPR.56]
274  */
275 DWORD WINAPI WNetCancelConnectionW( LPCWSTR lpName, BOOL fForce ) 
276 {
277     FIXME( "(%s, %d), stub\n", debugstr_w(lpName), fForce );
278
279     return WN_SUCCESS;
280 }
281
282 /*********************************************************************
283  *  WNetCancelConnection2A [MPR.53]
284  */
285 DWORD WINAPI WNetCancelConnection2A( LPCSTR lpName, DWORD dwFlags, BOOL fForce ) 
286 {
287     FIXME( "(%s, %08lX, %d), stub\n", debugstr_a(lpName), dwFlags, fForce );
288
289     return WN_SUCCESS;
290 }
291
292 /*********************************************************************
293  *  WNetCancelConnection2W [MPR.54]
294  */
295 DWORD WINAPI WNetCancelConnection2W( LPCWSTR lpName, DWORD dwFlags, BOOL fForce ) 
296 {
297     FIXME( "(%s, %08lX, %d), stub\n", debugstr_w(lpName), dwFlags, fForce );
298
299     return WN_SUCCESS;
300 }
301
302 /*****************************************************************
303  *  WNetRestoreConnectionA [MPR.96]
304  */
305 DWORD WINAPI WNetRestoreConnectionA( HWND hwndOwner, LPSTR lpszDevice )
306 {
307     FIXME( "(%04X, %s), stub\n", hwndOwner, debugstr_a(lpszDevice) );
308
309     SetLastError(WN_NO_NETWORK);
310     return WN_NO_NETWORK;
311 }
312
313 /*****************************************************************
314  *  WNetRestoreConnectionW [MPR.97]
315  */
316 DWORD WINAPI WNetRestoreConnectionW( HWND hwndOwner, LPWSTR lpszDevice )
317 {
318     FIXME( "(%04X, %s), stub\n", hwndOwner, debugstr_w(lpszDevice) );
319
320     SetLastError(WN_NO_NETWORK);
321     return WN_NO_NETWORK;
322 }
323
324 /**************************************************************************
325  * WNetGetConnectionA [MPR.71]
326  *
327  * RETURNS
328  * - WN_BAD_LOCALNAME     lpLocalName makes no sense
329  * - WN_NOT_CONNECTED     drive is a local drive
330  * - WN_MORE_DATA         buffer isn't big enough
331  * - WN_SUCCESS           success (net path in buffer)  
332  *
333  */
334 DWORD WINAPI WNetGetConnectionA( LPCSTR lpLocalName, 
335                                  LPSTR lpRemoteName, LPDWORD lpBufferSize )
336 {
337     const char *path;
338
339     TRACE( "local %s\n", lpLocalName );
340     if (lpLocalName[1] == ':')
341     {
342         int drive = toupper(lpLocalName[0]) - 'A';
343         switch(DRIVE_GetType(drive))
344         {
345         case TYPE_INVALID:
346             return WN_BAD_LOCALNAME;
347         case TYPE_NETWORK:
348             path = DRIVE_GetLabel(drive);
349             if (strlen(path) + 1 > *lpBufferSize)
350             {
351                 *lpBufferSize = strlen(path) + 1;
352                 return WN_MORE_DATA;
353             }
354             strcpy( lpRemoteName, path );
355             *lpBufferSize = strlen(lpRemoteName) + 1;
356             return WN_SUCCESS;
357         case TYPE_FLOPPY:
358         case TYPE_HD:
359         case TYPE_CDROM:
360           TRACE("file is local\n");
361           return WN_NOT_CONNECTED;
362         default:
363             return WN_BAD_LOCALNAME;
364         }
365     }
366     return WN_BAD_LOCALNAME;
367 }
368
369 /**************************************************************************
370  * WNetGetConnectionW [MPR.72]
371  */
372 DWORD WINAPI WNetGetConnectionW( LPCWSTR lpLocalName, 
373                                  LPWSTR lpRemoteName, LPDWORD lpBufferSize )
374 {
375     DWORD x;
376     CHAR  buf[200];
377     LPSTR lnA = HEAP_strdupWtoA( GetProcessHeap(), 0, lpLocalName );
378     DWORD ret = WNetGetConnectionA( lnA, buf, &x );
379
380     lstrcpyAtoW( lpRemoteName, buf );
381     *lpBufferSize=lstrlenW( lpRemoteName );
382     HeapFree( GetProcessHeap(), 0, lnA );
383     return ret;
384 }
385
386 /**************************************************************************
387  * WNetSetConnectionA [MPR.72]
388  */
389 DWORD WINAPI WNetSetConnectionA( LPCSTR lpName, DWORD dwProperty, 
390                                  LPVOID pvValue )
391 {
392     FIXME( "(%s, %08lX, %p): stub\n", debugstr_a(lpName), dwProperty, pvValue );
393
394     SetLastError(WN_NO_NETWORK);
395     return WN_NO_NETWORK;
396 }
397
398 /**************************************************************************
399  * WNetSetConnectionW [MPR.72]
400  */
401 DWORD WINAPI WNetSetConnectionW( LPCWSTR lpName, DWORD dwProperty, 
402                                  LPVOID pvValue )
403 {
404     FIXME( "(%s, %08lX, %p): stub\n", debugstr_w(lpName), dwProperty, pvValue );
405
406     SetLastError(WN_NO_NETWORK);
407     return WN_NO_NETWORK;
408 }
409
410 /*****************************************************************
411  * WNetGetUniversalNameA [MPR.85]
412  */
413 DWORD WINAPI WNetGetUniversalNameA ( LPCSTR lpLocalPath, DWORD dwInfoLevel, 
414                                      LPVOID lpBuffer, LPDWORD lpBufferSize )
415 {
416     FIXME( "(%s, 0x%08lX, %p, %p): stub\n", 
417            debugstr_a(lpLocalPath), dwInfoLevel, lpBuffer, lpBufferSize);
418
419     SetLastError(WN_NO_NETWORK);
420     return WN_NO_NETWORK;
421 }
422
423 /*****************************************************************
424  * WNetGetUniversalNameW [MPR.86]
425  */
426 DWORD WINAPI WNetGetUniversalNameW ( LPCWSTR lpLocalPath, DWORD dwInfoLevel, 
427                                      LPVOID lpBuffer, LPDWORD lpBufferSize )
428 {
429     FIXME( "(%s, 0x%08lX, %p, %p): stub\n", 
430            debugstr_w(lpLocalPath), dwInfoLevel, lpBuffer, lpBufferSize);
431
432     SetLastError(WN_NO_NETWORK);
433     return WN_NO_NETWORK;
434 }
435
436
437
438 /*
439  * Other Functions
440  */
441
442 /**************************************************************************
443  * WNetGetUserA [MPR.86]
444  *
445  * FIXME: we should not return ourselves, but the owner of the drive lpName
446  */
447 DWORD WINAPI WNetGetUserA( LPCSTR lpName, LPSTR lpUserID, LPDWORD lpBufferSize )
448 {
449     struct passwd *pwd = getpwuid(getuid());
450
451     FIXME( "(%s, %p, %p): mostly stub\n", 
452            debugstr_a(lpName), lpUserID, lpBufferSize );
453
454     if (pwd)
455     {
456         if ( strlen(pwd->pw_name) + 1 > *lpBufferSize )
457         {
458             *lpBufferSize = strlen(pwd->pw_name) + 1;
459
460             SetLastError(ERROR_MORE_DATA);
461             return ERROR_MORE_DATA;
462         }
463
464         strcpy( lpUserID, pwd->pw_name );
465         *lpBufferSize = strlen(pwd->pw_name) + 1;
466         return WN_SUCCESS;
467     }
468
469     /* FIXME: wrong return value */
470     SetLastError(ERROR_NO_NETWORK);
471     return ERROR_NO_NETWORK;
472 }
473
474 /*****************************************************************
475  * WNetGetUserW [MPR.87]
476  */
477 DWORD WINAPI WNetGetUserW( LPCWSTR lpName, LPWSTR lpUserID, LPDWORD lpBufferSize ) 
478 {
479     FIXME( "(%s, %p, %p): mostly stub\n", 
480            debugstr_w(lpName), lpUserID, lpBufferSize );
481
482     SetLastError(WN_NO_NETWORK);
483     return WN_NO_NETWORK;
484 }
485
486 /*********************************************************************
487  * WNetConnectionDialog [MPR.61]
488  */ 
489 DWORD WINAPI WNetConnectionDialog( HWND hwnd, DWORD dwType )
490
491     FIXME( "(%04x, %08lX): stub\n", hwnd, dwType );
492
493     SetLastError(WN_NO_NETWORK);
494     return ERROR_NO_NETWORK;
495 }
496
497 /*********************************************************************
498  * WNetConnectionDialog1A [MPR.59]
499  */
500 DWORD WINAPI WNetConnectionDialog1A( LPCONNECTDLGSTRUCTA lpConnDlgStruct )
501
502     FIXME( "(%p): stub\n", lpConnDlgStruct );
503
504     SetLastError(WN_NO_NETWORK);
505     return ERROR_NO_NETWORK;
506 }
507
508 /*********************************************************************
509  * WNetConnectionDialog1W [MPR.60]
510  */ 
511 DWORD WINAPI WNetConnectionDialog1W( LPCONNECTDLGSTRUCTW lpConnDlgStruct )
512
513     FIXME( "(%p): stub\n", lpConnDlgStruct );
514
515     SetLastError(WN_NO_NETWORK);
516     return ERROR_NO_NETWORK;
517 }
518
519 /*********************************************************************
520  * WNetDisconnectDialog [MPR.64]
521  */ 
522 DWORD WINAPI WNetDisconnectDialog( HWND hwnd, DWORD dwType )
523
524     FIXME( "(%04x, %08lX): stub\n", hwnd, dwType );
525
526     SetLastError(WN_NO_NETWORK);
527     return ERROR_NO_NETWORK;
528 }
529
530 /*********************************************************************
531  * WNetDisconnectDialog1A [MPR.62]
532  */ 
533 DWORD WINAPI WNetDisconnectDialog1A( LPDISCDLGSTRUCTA lpConnDlgStruct )
534
535     FIXME( "(%p): stub\n", lpConnDlgStruct );
536
537     SetLastError(WN_NO_NETWORK);
538     return ERROR_NO_NETWORK;
539 }
540
541 /*********************************************************************
542  * WNetDisconnectDialog1W [MPR.63]
543  */ 
544 DWORD WINAPI WNetDisconnectDialog1W( LPDISCDLGSTRUCTW lpConnDlgStruct )
545
546     FIXME( "(%p): stub\n", lpConnDlgStruct );
547
548     SetLastError(WN_NO_NETWORK);
549     return ERROR_NO_NETWORK;
550 }
551
552 /*********************************************************************
553  * WNetGetLastErrorA [MPR.75]
554  */ 
555 DWORD WINAPI WNetGetLastErrorA( LPDWORD lpError,
556                                 LPSTR lpErrorBuf, DWORD nErrorBufSize,
557                                 LPSTR lpNameBuf, DWORD nNameBufSize )
558 {
559     FIXME( "(%p, %p, %ld, %p, %ld): stub\n", 
560            lpError, lpErrorBuf, nErrorBufSize, lpNameBuf, nNameBufSize );
561
562     SetLastError(WN_NO_NETWORK);
563     return ERROR_NO_NETWORK;
564 }
565
566 /*********************************************************************
567  * WNetGetLastErrorW [MPR.76]
568  */ 
569 DWORD WINAPI WNetGetLastErrorW( LPDWORD lpError,
570                                 LPWSTR lpErrorBuf, DWORD nErrorBufSize,
571                          LPWSTR lpNameBuf, DWORD nNameBufSize )
572 {
573     FIXME( "(%p, %p, %ld, %p, %ld): stub\n", 
574            lpError, lpErrorBuf, nErrorBufSize, lpNameBuf, nNameBufSize );
575
576     SetLastError(WN_NO_NETWORK);
577     return ERROR_NO_NETWORK;
578 }
579
580 /*********************************************************************
581  * WNetGetNetworkInformationA [MPR.77]
582  */ 
583 DWORD WINAPI WNetGetNetworkInformationA( LPCSTR lpProvider, 
584                                          LPNETINFOSTRUCT lpNetInfoStruct )
585 {
586     FIXME( "(%s, %p): stub\n", debugstr_a(lpProvider), lpNetInfoStruct );
587
588     SetLastError(WN_NO_NETWORK);
589     return ERROR_NO_NETWORK;
590 }
591
592 /*********************************************************************
593  * WNetGetNetworkInformationW [MPR.77]
594  */ 
595 DWORD WINAPI WNetGetNetworkInformationW( LPCWSTR lpProvider, 
596                                          LPNETINFOSTRUCT lpNetInfoStruct )
597 {
598     FIXME( "(%s, %p): stub\n", debugstr_w(lpProvider), lpNetInfoStruct );
599
600     SetLastError(WN_NO_NETWORK);
601     return ERROR_NO_NETWORK;
602 }
603
604 /*****************************************************************
605  *  WNetGetProviderNameA [MPR.79]
606  */
607 DWORD WINAPI WNetGetProviderNameA( DWORD dwNetType, 
608                                    LPSTR lpProvider, LPDWORD lpBufferSize )
609 {
610     FIXME( "(%ld, %p, %p): stub\n", dwNetType, lpProvider, lpBufferSize );
611
612     SetLastError(WN_NO_NETWORK);
613     return WN_NO_NETWORK;
614 }
615
616 /*****************************************************************
617  *  WNetGetProviderNameW [MPR.80]
618  */
619 DWORD WINAPI WNetGetProviderNameW( DWORD dwNetType,
620                                    LPWSTR lpProvider, LPDWORD lpBufferSize ) 
621 {
622     FIXME( "(%ld, %p, %p): stub\n", dwNetType, lpProvider, lpBufferSize );
623
624     SetLastError(WN_NO_NETWORK);
625     return WN_NO_NETWORK;
626 }
627