mercurial/ui.py
changeset 8133 57a2a0070d6b
parent 8132 cece135ffcf0
child 8134 e74e0c259bd3
equal deleted inserted replaced
8132:cece135ffcf0 8133:57a2a0070d6b
    42             self.trusted_groups = {}
    42             self.trusted_groups = {}
    43             # if ucdata is not None, its keys must be a superset of cdata's
    43             # if ucdata is not None, its keys must be a superset of cdata's
    44             self.cdata = util.configparser()
    44             self.cdata = util.configparser()
    45             self.ucdata = None
    45             self.ucdata = None
    46             # we always trust global config files
    46             # we always trust global config files
    47             self.check_trusted = False
    47             self.readconfig(util.rcpath(), assumetrusted=True)
    48             self.readconfig(util.rcpath())
       
    49             self.check_trusted = True
       
    50             self.updateopts(verbose, debug, quiet, interactive)
    48             self.updateopts(verbose, debug, quiet, interactive)
    51         else:
    49         else:
    52             # parentui may point to an ui object which is already a child
    50             # parentui may point to an ui object which is already a child
    53             self.parentui = parentui.parentui or parentui
    51             self.parentui = parentui.parentui or parentui
    54             self.trusted_users = parentui.trusted_users.copy()
    52             self.trusted_users = parentui.trusted_users.copy()
   101             self.quiet = False
    99             self.quiet = False
   102         elif self.verbose and self.quiet:
   100         elif self.verbose and self.quiet:
   103             self.quiet = self.verbose = False
   101             self.quiet = self.verbose = False
   104 
   102 
   105     def _is_trusted(self, fp, f, warn=True):
   103     def _is_trusted(self, fp, f, warn=True):
   106         if not self.check_trusted:
       
   107             return True
       
   108         st = util.fstat(fp)
   104         st = util.fstat(fp)
   109         if util.isowner(fp, st):
   105         if util.isowner(fp, st):
   110             return True
   106             return True
   111         tusers = self.trusted_users
   107         tusers = self.trusted_users
   112         tgroups = self.trusted_groups
   108         tgroups = self.trusted_groups
   123                     self.warn(_('Not trusting file %s from untrusted '
   119                     self.warn(_('Not trusting file %s from untrusted '
   124                                 'user %s, group %s\n') % (f, user, group))
   120                                 'user %s, group %s\n') % (f, user, group))
   125                 return False
   121                 return False
   126         return True
   122         return True
   127 
   123 
   128     def readconfig(self, fn, root=None):
   124     def readconfig(self, fn, root=None, assumetrusted=False):
   129         if isinstance(fn, basestring):
   125         if isinstance(fn, basestring):
   130             fn = [fn]
   126             fn = [fn]
   131         for f in fn:
   127         for f in fn:
   132             try:
   128             try:
   133                 fp = open(f)
   129                 fp = open(f)
   134             except IOError:
   130             except IOError:
   135                 continue
   131                 continue
   136             cdata = self.cdata
   132             cdata = self.cdata
   137             trusted = self._is_trusted(fp, f)
   133             trusted = assumetrusted or self._is_trusted(fp, f)
   138             if not trusted:
   134             if not trusted:
   139                 if self.ucdata is None:
   135                 if self.ucdata is None:
   140                     self.ucdata = dupconfig(self.cdata)
   136                     self.ucdata = dupconfig(self.cdata)
   141                 cdata = self.ucdata
   137                 cdata = self.ucdata
   142             elif self.ucdata is not None:
   138             elif self.ucdata is not None: