Why does os.stat() tell me that my file-group has no members?

S

saqib.ali.75

I'm using python 2.6.4 on Solaris 5-10.

I have a file named "myFile". It is owned by someone else, by I ("myuser") am in the file's group ("mygrp"). Below is my python code. Why does it tell me that mygrp has no members???

import os, pwd, grp
stat_info = os.stat("myFile")
fileUID = stat_info.st_uid
fileGID = stat_info.st_gid
fileGroup = grp.getgrgid(fileGID)[0]
fileUser = pwd.getpwuid(fileUID)[0]
print "grp.getgrgid(fileGID) = %s" % grp.getgrgid(fileGID)

grp.getgrgid(fileGID) = grp.struct_group(gr_name='mygrp', gr_passwd='', gr_gid=100, gr_mem=[])
 
H

Hans Mulder

I'm using python 2.6.4 on Solaris 5-10.

I have a file named "myFile". It is owned by someone else, by
I ("myuser") am in the file's group ("mygrp"). Below is my python
code. Why does it tell me that mygrp has no members???

import os, pwd, grp
stat_info = os.stat("myFile")
fileUID = stat_info.st_uid
fileGID = stat_info.st_gid
fileGroup = grp.getgrgid(fileGID)[0]
fileUser = pwd.getpwuid(fileUID)[0]
print "grp.getgrgid(fileGID) = %s" % grp.getgrgid(fileGID)

grp.getgrgid(fileGID) = grp.struct_group(gr_name='mygrp', gr_passwd='', gr_gid=100, gr_mem=[])

It doesn't say that your group has no members.

Every account has a primary group, and some accounts also
have addtional groups. The primary group is the one in the
..pw_gid attribute in the pwd entry. The additional groups
are those that mention the account in the .gr_mem attribute
in their grp entry.

Your experiment shows that nobody has "mygrp" as an additional
group. So if you're a member of mygrp, then it must be your
primary group, i.e. os.getgid() should return 100 for you.

You can get a complete list of members of group by adding
two lists:

def all_members(gid):
primary_members = [ user.pw_name
for user in pwd.getpwall() if user.pw_gid == gid ]
additional_members = grp.getgrgid(gid).gr_mem
return primary_members + additional_members


Hope this helps,

-- HansM
 
S

saqib.ali.75

Thanks!! This was very helpful. It worked perfectly.
I had no clue about the intricacies of how python represents the group data from the underlying OS.

This page doesn't go into to detailed explanation like you did: http://docs.python.org/2/library/grp.html



I'm using python 2.6.4 on Solaris 5-10.

I have a file named "myFile". It is owned by someone else, by
I ("myuser") am in the file's group ("mygrp"). Below is my python
code. Why does it tell me that mygrp has no members???
import os, pwd, grp
stat_info = os.stat("myFile")
fileUID = stat_info.st_uid
fileGID = stat_info.st_gid
fileGroup = grp.getgrgid(fileGID)[0]
fileUser = pwd.getpwuid(fileUID)[0]
print "grp.getgrgid(fileGID) = %s" % grp.getgrgid(fileGID)
grp.getgrgid(fileGID) = grp.struct_group(gr_name='mygrp', gr_passwd='', gr_gid=100, gr_mem=[])



It doesn't say that your group has no members.



Every account has a primary group, and some accounts also

have addtional groups. The primary group is the one in the

.pw_gid attribute in the pwd entry. The additional groups

are those that mention the account in the .gr_mem attribute

in their grp entry.



Your experiment shows that nobody has "mygrp" as an additional

group. So if you're a member of mygrp, then it must be your

primary group, i.e. os.getgid() should return 100 for you.



You can get a complete list of members of group by adding

two lists:



def all_members(gid):

primary_members = [ user.pw_name

for user in pwd.getpwall() if user.pw_gid == gid ]

additional_members = grp.getgrgid(gid).gr_mem

return primary_members + additional_members





Hope this helps,



-- HansM
 
C

Chris Angelico

Thanks!! This was very helpful. It worked perfectly.
I had no clue about the intricacies of how python represents the group data from the underlying OS.

This page doesn't go into to detailed explanation like you did: http://docs.python.org/2/library/grp.html

Want to show your appreciation in a lasting way? Write up a patch, or
a new paragraph or so of text for the page, and open a tracker issue
to improve the docs!

http://bugs.python.org/

ChrisA
 
K

Kushal Kumaran

Thanks!! This was very helpful. It worked perfectly.
I had no clue about the intricacies of how python represents the group data from the underlying OS.

This page doesn't go into to detailed explanation like you did: http://docs.python.org/2/library/grp.html

That's mostly because it represents the group data almost exactly as the
underlying OS, including using the same structure member names as
defined in pwd.h. The unix-specific modules often assume the user is
familiar with the underlying library calls and data structures, and is
looking for a way to use them from python.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,774
Messages
2,569,598
Members
45,152
Latest member
LorettaGur
Top