equal
deleted
inserted
replaced
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: |