Changeset 2006 for pykota/trunk/pykota/tool.py
- Timestamp:
- 01/06/05 23:52:53 (19 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
pykota/trunk/pykota/tool.py
r1977 r2006 22 22 # 23 23 # $Log$ 24 # Revision 1.147 2005/01/06 22:52:53 jalet 25 # Implemented the dropping of priviledges. Beware, beware... 26 # 24 27 # Revision 1.146 2004/12/09 23:03:57 jalet 25 28 # Fixed a bug when pkbanner's output was piped into another command (e.g. gs) … … 575 578 def __init__(self, lang="", charset=None, doc="PyKota %s (c) 2003-2004 %s" % (version.__version__, version.__author__)) : 576 579 """Initializes the command line tool.""" 580 # did we drop priviledges ? 581 self.privdropped = 0 582 577 583 # locale stuff 578 584 defaultToCLocale = 0 … … 611 617 # try to find the configuration files in user's 'pykota' home directory. 612 618 try : 613 pykotauser = pwd.getpwnam("pykota")619 self.pykotauser = pwd.getpwnam("pykota") 614 620 except KeyError : 621 self.pykotauser = None 615 622 confdir = "/etc/pykota" 616 623 missingUser = 1 617 624 else : 618 confdir = pykotauser[5]625 confdir = self.pykotauser[5] 619 626 missingUser = 0 620 627 … … 635 642 raise 636 643 644 # now drop priviledge if possible 645 self.dropPriv() 646 637 647 # We NEED this here, even when not in an accounting filter/backend 638 648 self.softwareJobSize = 0 … … 647 657 arguments = " ".join(['"%s"' % arg for arg in sys.argv]) 648 658 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 649 694 650 695 def getCharset(self) :