def getGroup(self,mess,a): # %nss getGroup gr_gid=1000 gr_name=stud s='' p=None print a try: if (a.has_key('gr_gid')): p=grp.getgruid(a['gr_uid']) elif (a.has_key('gr_name')): p=grp.getgrnam(a['gr_name']) else: groups=grp.getgrall() i=0 while (i<len(groups)): groups[i]=self.grpStructToDict(groups[i]) i+=1 s='@'+mess.getID()+'\n'+self.d.packData(groups,'json') except: p=None if (s==''): if (p!=None): s='@'+mess.getID()+'\n'+self.d.packData(self.grpStructToDict(p),'json') else: s='@'+mess.getID()+'\n'+'success=false' out=xmpp.Message(mess.getFrom(),s) mid=self.d.genId() out.setID(mid) return out
def run(self): # drop privileges if requested if os.getuid() == 0: # change the GID if self.group != None: try: group = grp.getgrnam(self.group) except: try: group = grp.getgruid(int(self.group)) except: raise ServerError("no such group %s" % self.group) try: os.setgid(group.gr_gid) logger.debug("changed runtime group to %s" % group.gr_name) except Exception, e: raise ServerError("failed to set runtime group: %s" % e) # change the UID and supplementary groups if self.user != None: try: user = pwd.getpwnam(self.user) except: try: user = pwd.getpwuid(int(self.user)) except: raise ServerError("no such user %s" % self.user) groups = [ g.gr_gid for g in grp.getgrall() if user.pw_name in g.gr_mem ] try: os.setgroups(groups) os.setuid(user.pw_uid) logger.debug("changed runtime user to %s" % user.pw_name) except Exception, e: raise ServerError("failed to set runtime user: %s" % e)
def get_gid(grp_str): ''' Attempts to convert the input string to a gid. Args: group_str: A number stored as a string Returns: An int that is a gid ''' gid = int(grp_str) try: return grp.getgruid(int(grp_str)).gr_gid except: return gid