[python-win32] win32net.NetUseAdd buglet (or doc buglet)

Scott Prive scottprive at earthlink.net
Thu Apr 17 00:36:21 EDT 2003


----- Original Message -----
From: "Mark Hammond" <mhammond at skippinet.com.au>
To: "'Scott Prive'" <scottprive at earthlink.net>
Sent: Wednesday, April 16, 2003 7:10 PM
Subject: RE: [python-win32] win32net.NetUseAdd buglet (or doc buglet)


> > that share info is passed to the function in the form of a dictionary.
> > There's no example usage [sorry to complain, wish there
> > were...] but it does
> > point me to MSDN for more info.
>
> I think you will find examples in the Python Programming on Win32 book.

Actually I -have- your book :-)
Until I finish Lutz' Programming Python, your Win32 is serving as a
reference (it's next tho!).

Searching the index, I did not see win32net.NetUseAdd (other win32net
relatives are listed).
... It could be an index omission, in which case I'll see it eventually.

>
> >
> > The problem?
> >
> > The MSDN documentation has example usage (share path, user,
> > password etc.).
> > But in their example they call password, "password".... the
> > Pythin win32
> > wrapper doesn't understand ['password'] (and does not raise
> > an exception on
> > its use), but it DOES understand ['passwd'].
> >
> > So either MSDN is wrong or the wrapper's got a buglet. :-)
>
> None of these wrappers raise an exception on a bad attribute name - they
> should.  But in this case, the attribute is certainly named "password".  I
> expect that simply the underlying Win32 call is failing for you.
>
> Mark.

I'm certain it appears only to work with 'passwd', but if something's going
on under the hood it's quite interesting.  Below is an interactive session,
followed by the actual code.

You can see the difference between the two functions is the password entry.
I've tried this with other accounts. The same credentials were tested under
CMD.EXE using 'net use'. The accounts exist on a win2K Server PDC, which is
the same server I'm mounting the share from. Each time I tested, I started
from a clean slate and verified nothing (at all) is listed under plain 'net
use'

When I get a mount from my function (under 'passwd'), I validate it by
echoing text to a file on Z:\test.txt.
If the 'password' function ran, which never provided a mount, this step
yields a "system cannot find the path specified."

Any thoughts? Thanks.
-Scott

---------- interactive ------------
E:\scott\Komodo\ntlm_cifs>dir z:
The system cannot find the path specified.

E:\scott\Komodo\ntlm_cifs>python
ActivePython 2.2.2 Build 224 (ActiveState Corp.) based on
Python 2.2.2 (#37, Nov 26 2002, 10:24:37) [MSC 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from testmap import *
>>> mountShare
<function mountShare at 0x008B63E8>
>>> mountShare()
This drive letter was in use, so I'll unmount it
Good. Verified drive letter is not already mounted.
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "testmap.py", line 20, in mountShare
    win32net.NetUseAdd(None,1,data)
pywintypes.api_error: (1326, 'NetUseAdd', 'Logon failure: unknown user name
or b
ad password.')
>>> mountShare2()
This drive letter was in use, so I'll unmount it
Good. Verified drive letter is not already mounted.
>>>

----------------code---------------
#!/usr/bin/python

import string, sys, win32file, win32net

def mountShare():
    """A CIFS mount interface, wraps win32 API call NetUseAdd"""
    #see ASPN docs win32wnet.NetUseAdd and win32net.NetUseAdd
    try:
        print "This drive letter was in use, so I'll unmount it"
        unmountShare()
    except:
        print 'Good. Verified drive letter is not already mounted. '
    data = {
        'remote' : r'\\rogue.scottprive.com\account1',
        'local' : 'Z:',
        'password' : 'foo',
        'user' : 'foo',
        'asg_type' : 0,
        }
    win32net.NetUseAdd(None,1,data)

def mountShare2():
    """A CIFS mount interface, wraps win32 API call NetUseAdd"""
    #see ASPN docs win32wnet.NetUseAdd and win32net.NetUseAdd
    try:
        print "This drive letter was in use, so I'll unmount it"
        unmountShare()
    except:
        print 'Good. Verified drive letter is not already mounted. '
    data = {
        'remote' : r'\\rogue.scottprive.com\account1',
        'local' : 'Z:',
        'passwd' : 'foo',
        'user' : 'foo',
        'asg_type' : 0,
        }
    win32net.NetUseAdd(None,1,data)

def unmountShare():
    win32net.NetUseDel(None,'Z:',0)


def main():
    mountShare()
    mountShare2()

if __name__ == '__main__': main()








More information about the Python-win32 mailing list