Show
Ignore:
Timestamp:
01/06/05 23:52:53 (19 years ago)
Author:
jalet
Message:

Implemented the dropping of priviledges. Beware, beware...

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/pykota/tool.py

    r1977 r2006  
    2222# 
    2323# $Log$ 
     24# Revision 1.147  2005/01/06 22:52:53  jalet 
     25# Implemented the dropping of priviledges. Beware, beware... 
     26# 
    2427# Revision 1.146  2004/12/09 23:03:57  jalet 
    2528# Fixed a bug when pkbanner's output was piped into another command (e.g. gs) 
     
    575578    def __init__(self, lang="", charset=None, doc="PyKota %s (c) 2003-2004 %s" % (version.__version__, version.__author__)) : 
    576579        """Initializes the command line tool.""" 
     580        # did we drop priviledges ? 
     581        self.privdropped = 0 
     582         
    577583        # locale stuff 
    578584        defaultToCLocale = 0 
     
    611617        # try to find the configuration files in user's 'pykota' home directory. 
    612618        try : 
    613             pykotauser = pwd.getpwnam("pykota") 
     619            self.pykotauser = pwd.getpwnam("pykota") 
    614620        except KeyError :     
     621            self.pykotauser = None 
    615622            confdir = "/etc/pykota" 
    616623            missingUser = 1 
    617624        else :     
    618             confdir = pykotauser[5] 
     625            confdir = self.pykotauser[5] 
    619626            missingUser = 0 
    620627             
     
    635642            raise 
    636643             
     644        # now drop priviledge if possible 
     645        self.dropPriv()     
     646         
    637647        # We NEED this here, even when not in an accounting filter/backend     
    638648        self.softwareJobSize = 0 
     
    647657        arguments = " ".join(['"%s"' % arg for arg in sys.argv]) 
    648658        self.logdebug("Command line arguments : %s" % arguments) 
     659         
     660    def dropPriv(self) :     
     661        """Drops priviledges.""" 
     662        uid = os.geteuid() 
     663        if uid : 
     664            try : 
     665                username = pwd.getpwuid(uid)[0] 
     666            except (KeyError, IndexError), msg :     
     667                self.printInfo(_("Strange problem with uid(%s) : %s") % (uid, msg), "warn") 
     668            else : 
     669                self.logdebug(_("Running as user '%s'.") % username) 
     670        else : 
     671            if self.pykotauser is None : 
     672                self.logdebug(_("No user named 'pykota'. Not dropping priviledges.")) 
     673            else :     
     674                try : 
     675                    os.setegid(self.pykotauser[3]) 
     676                    os.seteuid(self.pykotauser[2]) 
     677                except OSError, msg :     
     678                    self.printInfo(_("Impossible to drop priviledges : %s") % msg, "warn") 
     679                else :     
     680                    self.logdebug(_("Priviledges dropped. Now running as user 'pykota'.")) 
     681                    self.privdropped = 1 
     682             
     683    def regainPriv(self) :     
     684        """Drops priviledges.""" 
     685        if self.privdropped : 
     686            try : 
     687                os.seteuid(0) 
     688                os.setegid(0) 
     689            except OSError, msg :     
     690                self.printInfo(_("Impossible to regain priviledges : %s") % msg, "warn") 
     691            else :     
     692                self.logdebug(_("Regained priviledges.")) 
     693                self.privdropped = 0 
    649694         
    650695    def getCharset(self) :