Browse code

fixes for Windows not including a pwd module

Matt Domsch authored on 2014/01/04 11:59:37
Showing 3 changed files
... ...
@@ -477,4 +477,30 @@ def calculateChecksum(buffer, mfile, offset, chunk_size, send_chunk):
477 477
 
478 478
 __all__.append("calculateChecksum")
479 479
 
480
+
481
+# Deal with the fact that pwd and grp modules don't exist for Windos
482
+try:
483
+    import pwd
484
+    def getpwuid_username(uid):
485
+        """returns a username from the password databse for the given uid"""
486
+        return pwd.getpwuid(uid).pw_name
487
+except ImportError:
488
+    def getpwuid_username(uid):
489
+        return getpass.getuser()
490
+__all__.append("getpwuid_username")
491
+
492
+try:
493
+    import grp
494
+    def getgrgid_grpname(gid):
495
+        """returns a groupname from the group databse for the given gid"""
496
+        return  grp.getgrgid(gid).gr_name
497
+except ImportError:
498
+    def getgrgid_grpname(gid):
499
+        return "nobody"
500
+
501
+__all__.append("getgrgid_grpname")
502
+
503
+
504
+
480 505
 # vim:et:ts=4:sts=4:ai
506
+
... ...
@@ -11,7 +11,7 @@ import os
11 11
 import re
12 12
 from subprocess import Popen, PIPE, STDOUT
13 13
 import locale
14
-import pwd
14
+import getpass
15 15
 
16 16
 count_pass = 0
17 17
 count_fail = 0
... ...
@@ -206,11 +206,7 @@ def test_copy(label, src_file, dst_file):
206 206
     cmd.append(dst_file)
207 207
     return test(label, cmd)
208 208
 
209
-try:
210
-    pwd = pwd.getpwuid(os.getuid())
211
-    bucket_prefix = "%s.%s-" % (pwd.pw_name, pwd.pw_uid)
212
-except:
213
-    bucket_prefix = ''
209
+bucket_prefix = u"%s-" % getpass.getuser()
214 210
 print "Using bucket prefix: '%s'" % bucket_prefix
215 211
 
216 212
 argv = sys.argv[1:]
... ...
@@ -1024,20 +1024,20 @@ def remote_copy(s3, copy_pairs, destination_base):
1024 1024
             failed_copy_list[dst2] = src_obj
1025 1025
     return (len(copy_pairs), saved_bytes, failed_copy_list)
1026 1026
 
1027
+
1027 1028
 def _build_attr_header(local_list, src):
1028
-    import pwd, grp
1029 1029
     attrs = {}
1030 1030
     for attr in cfg.preserve_attrs_list:
1031 1031
         if attr == 'uname':
1032 1032
             try:
1033
-                val = pwd.getpwuid(local_list[src]['uid']).pw_name
1033
+                val = Utils.getpwuid_username(local_list[src]['uid'])
1034 1034
             except KeyError:
1035 1035
                 attr = "uid"
1036 1036
                 val = local_list[src].get('uid')
1037 1037
                 warning(u"%s: Owner username not known. Storing UID=%d instead." % (src, val))
1038 1038
         elif attr == 'gname':
1039 1039
             try:
1040
-                val = grp.getgrgid(local_list[src].get('gid')).gr_name
1040
+                val = Utils.getgrgid_grpname(local_list[src].get('gid'))
1041 1041
             except KeyError:
1042 1042
                 attr = "gid"
1043 1043
                 val = local_list[src].get('gid')