~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/win32utils.py

  • Committer: Vincent Ladeuil
  • Date: 2007-11-04 15:24:27 UTC
  • mto: (2961.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 2962.
  • Revision ID: v.ladeuil+lp@free.fr-20071104152427-p9k7e4toywa87wfc
Review feedback.

* doc/en/user-guide/authentication_conf.txt: 
New file. Authentication configuration file documentation.

* doc/en/user-guide/configuration.txt: 
Slight modifications, add authentication.conf reference.

* doc/en/mini-tutorial/index.txt: 
Fix make docs warning.

* doc/developers/authentication-ring.txt: 
Small cleanups noticed during
doc/en/user-guide/authentication_conf.txt redaction.

* bzrlib/transport/http/_urllib.py:
(HttpTransport_urllib._perform): Use a dict() instead of {} syntax.

* bzrlib/tests/blackbox/test_whoami.py:
(TestWhoami.test_whoami_branch): Delete BZREMAIL related tests.

* bzrlib/config.py:
(Config.username): BZREMAIL deleted, has been obsolete for more
than a year.
(AuthenticationConfig.__init__): Review feedback, since keeping a
callback as an attribute is useless, call it now and keep the
filename itself as an attribute.
(AuthenticationConfig.get_credentials): Use a dict() instead of {}
syntax.

* NEWS: 
Updated as per Martin's suggestion.

Show diffs side-by-side

added added

removed removed

Lines of Context:
64
64
    else:
65
65
        create_buffer = ctypes.create_unicode_buffer
66
66
        suffix = 'W'
67
 
try:
68
 
    import win32file
69
 
    has_win32file = True
70
 
except ImportError:
71
 
    has_win32file = False
72
 
try:
73
 
    import win32api
74
 
    has_win32api = True
75
 
except ImportError:
76
 
    has_win32api = False
77
67
 
78
68
 
79
69
# Special Win32 API constants
207
197
    return os.environ.get('USERNAME', None)
208
198
 
209
199
 
210
 
# 1 == ComputerNameDnsHostname, which returns "The DNS host name of the local
211
 
# computer or the cluster associated with the local computer."
212
 
_WIN32_ComputerNameDnsHostname = 1
213
 
 
214
200
def get_host_name():
215
201
    """Return host machine name.
216
202
    If name cannot be obtained return None.
217
203
 
218
 
    :return: A unicode string representing the host name. On win98, this may be
219
 
        a plain string as win32 api doesn't support unicode.
 
204
    Returned value can be unicode or plain sring.
 
205
    To convert plain string to unicode use
 
206
    s.decode(bzrlib.user_encoding)
220
207
    """
221
 
    if has_win32api:
222
 
        try:
223
 
            return win32api.GetComputerNameEx(_WIN32_ComputerNameDnsHostname)
224
 
        except (NotImplementedError, win32api.error):
225
 
            # NotImplemented will happen on win9x...
226
 
            pass
227
208
    if has_ctypes:
228
209
        try:
229
210
            kernel32 = ctypes.windll.kernel32
 
211
            GetComputerName = getattr(kernel32, 'GetComputerName'+suffix)
230
212
        except AttributeError:
231
 
            pass # Missing the module we need
 
213
            pass
232
214
        else:
233
215
            buf = create_buffer(MAX_COMPUTERNAME_LENGTH+1)
234
216
            n = ctypes.c_int(MAX_COMPUTERNAME_LENGTH+1)
235
 
 
236
 
            # Try GetComputerNameEx which gives a proper Unicode hostname
237
 
            GetComputerNameEx = getattr(kernel32, 'GetComputerNameEx'+suffix,
238
 
                                        None)
239
 
            if (GetComputerNameEx is not None
240
 
                and GetComputerNameEx(_WIN32_ComputerNameDnsHostname,
241
 
                                      buf, ctypes.byref(n))):
242
 
                return buf.value
243
 
 
244
 
            # Try GetComputerName in case GetComputerNameEx wasn't found
245
 
            # It returns the NETBIOS name, which isn't as good, but still ok.
246
 
            # The first GetComputerNameEx might have changed 'n', so reset it
247
 
            n = ctypes.c_int(MAX_COMPUTERNAME_LENGTH+1)
248
 
            GetComputerName = getattr(kernel32, 'GetComputerName'+suffix,
249
 
                                      None)
250
 
            if (GetComputerName is not None
251
 
                and GetComputerName(buf, ctypes.byref(n))):
252
 
                return buf.value
253
 
    # otherwise try env variables, which will be 'mbcs' encoded
254
 
    # on Windows (Python doesn't expose the native win32 unicode environment)
255
 
    # According to this:
256
 
    # http://msdn.microsoft.com/en-us/library/aa246807.aspx
257
 
    # environment variables should always be encoded in 'mbcs'.
258
 
    try:
259
 
        return os.environ['COMPUTERNAME'].decode("mbcs")
260
 
    except KeyError:
261
 
        return None
 
217
            if GetComputerName(buf, ctypes.byref(n)):
 
218
                return buf.value
 
219
    # otherwise try env variables
 
220
    return os.environ.get('COMPUTERNAME', None)
262
221
 
263
222
 
264
223
def _ensure_unicode(s):
266
225
        import bzrlib
267
226
        s = s.decode(bzrlib.user_encoding)
268
227
    return s
269
 
 
 
228
    
270
229
 
271
230
def get_appdata_location_unicode():
272
231
    return _ensure_unicode(get_appdata_location())
360
319
        _winreg.CloseKey(hkey)
361
320
 
362
321
    return fullpath
363
 
 
364
 
 
365
 
def set_file_attr_hidden(path):
366
 
    """Set file attributes to hidden if possible"""
367
 
    if has_win32file:
368
 
        win32file.SetFileAttributes(path, win32file.FILE_ATTRIBUTE_HIDDEN)