Show
Ignore:
Timestamp:
01/08/08 00:03:01 (16 years ago)
Author:
jerome
Message:

Doesn't drop and regain priviledges anymore : no added security since we could regain them (we needed to regain them for PAM and some end user scripts). This is also more consistent.
Removed SGTERM handling stuff in cupspykota : now only SIGINT can be used.
Now outputs an error message when printing (but doesn't fail) if CUPS is
not v1.3.4 or higher : we need 1.3.4 or higher because it fixes some
problematic charset handling bugs (by only accepting ascii and utf-8,
but this is a different story...)
Now ensures only the supported exit codes are returned by cupspykota :
we used to exit -1 in some cases (see man backend for details).

Files:
1 modified

Legend:

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

    r3275 r3276  
    132132        self.logger = logger.openLogger("stderr") 
    133133         
    134         # did we drop priviledges ? 
    135         self.privdropped = 0 
    136          
    137134        # locale stuff 
    138135        try : 
     
    167164        # pykota specific stuff 
    168165        self.documentation = doc 
     166         
     167        # Extract the effective username 
     168        uid = os.geteuid() 
     169        try : 
     170            self.effectiveUserName = pwd.getpwuid(uid)[0] 
     171        except (KeyError, IndexError), msg :     
     172            self.printInfo(_("Strange problem with uid(%s) : %s") % (uid, msg), "warn") 
     173            self.effectiveUserName = os.getlogin() 
    169174         
    170175    def deferredInit(self) :         
     
    190195        self.logger = logger.openLogger(self.config.getLoggingBackend()) 
    191196             
    192         # now drop priviledge if possible 
    193         self.dropPriv()     
    194          
    195197        # We NEED this here, even when not in an accounting filter/backend     
    196198        self.softwareJobSize = 0 
     
    208210        arguments = " ".join(['"%s"' % arg for arg in sys.argv]) 
    209211        self.logdebug("Command line arguments : %s" % arguments) 
    210          
    211     def dropPriv(self) :     
    212         """Drops priviledges.""" 
    213         uid = os.geteuid() 
    214         try : 
    215             self.originalUserName = pwd.getpwuid(uid)[0] 
    216         except (KeyError, IndexError), msg :     
    217             self.printInfo(_("Strange problem with uid(%s) : %s") % (uid, msg), "warn") 
    218             self.originalUserName = None 
    219         else : 
    220             if uid : 
    221                 self.logdebug(_("Running as user '%s'.") % self.originalUserName) 
    222             else : 
    223                 if self.pykotauser is None : 
    224                     self.logdebug(_("No user named 'pykota'. Not dropping priviledges.")) 
    225                 else :     
    226                     try : 
    227                         os.setegid(self.pykotauser[3]) 
    228                         os.seteuid(self.pykotauser[2]) 
    229                     except OSError, msg :     
    230                         self.printInfo(_("Impossible to drop priviledges : %s") % msg, "warn") 
    231                     else :     
    232                         self.logdebug(_("Priviledges dropped. Now running as user 'pykota'.")) 
    233                         self.privdropped = 1 
    234              
    235     def regainPriv(self) :     
    236         """Drops priviledges.""" 
    237         if self.privdropped : 
    238             try : 
    239                 os.seteuid(0) 
    240                 os.setegid(0) 
    241             except OSError, msg :     
    242                 self.printInfo(_("Impossible to regain priviledges : %s") % msg, "warn") 
    243             else :     
    244                 self.logdebug(_("Regained priviledges. Now running as root.")) 
    245                 self.privdropped = 0 
    246212         
    247213    def UTF8ToUserCharset(self, text) :