Offset 1, 10 lines modified | Offset 1, 10 lines modified | ||
1 | ·dbb557ea81f07b9bfecbe15596346a8c·122480·debug·optional·cockpit-bridge-dbgsym_316-1_i386.deb | 1 | ·dbb557ea81f07b9bfecbe15596346a8c·122480·debug·optional·cockpit-bridge-dbgsym_316-1_i386.deb |
2 | · | 2 | ·2ec09f8b557ce31aed2d819d304fcd7f·362636·admin·optional·cockpit-bridge_316-1_i386.deb |
3 | ·b244333d93e755b8795d5de9bfd74a75·131516·doc·optional·cockpit-doc_316-1_all.deb | 3 | ·b244333d93e755b8795d5de9bfd74a75·131516·doc·optional·cockpit-doc_316-1_all.deb |
4 | ·5f5f51363cccd25ac69165e1bfe089be·829340·admin·optional·cockpit-networkmanager_316-1_all.deb | 4 | ·5f5f51363cccd25ac69165e1bfe089be·829340·admin·optional·cockpit-networkmanager_316-1_all.deb |
5 | ·b259a5a3925e9a8e04317b97aff99eea·941992·admin·optional·cockpit-packagekit_316-1_all.deb | 5 | ·b259a5a3925e9a8e04317b97aff99eea·941992·admin·optional·cockpit-packagekit_316-1_all.deb |
6 | ·4253022206c0b874f0c4653384d6fc0c·197736·debug·optional·cockpit-pcp-dbgsym_316-1_i386.deb | 6 | ·4253022206c0b874f0c4653384d6fc0c·197736·debug·optional·cockpit-pcp-dbgsym_316-1_i386.deb |
7 | ·57350f2af699c3a2ef4cb051eefa067f·86552·admin·optional·cockpit-pcp_316-1_i386.deb | 7 | ·57350f2af699c3a2ef4cb051eefa067f·86552·admin·optional·cockpit-pcp_316-1_i386.deb |
8 | ·ca337edae770f17961c72b2ed6a3a2e1·558888·admin·optional·cockpit-sosreport_316-1_all.deb | 8 | ·ca337edae770f17961c72b2ed6a3a2e1·558888·admin·optional·cockpit-sosreport_316-1_all.deb |
9 | ·510e4876abdbe0222c7a9eaf8eed0969·879356·admin·optional·cockpit-storaged_316-1_all.deb | 9 | ·510e4876abdbe0222c7a9eaf8eed0969·879356·admin·optional·cockpit-storaged_316-1_all.deb |
Offset 1, 3 lines modified | Offset 1, 3 lines modified | ||
1 | -rw-r--r--···0········0········0········4·2024-04-26·05:46:21.000000·debian-binary | 1 | -rw-r--r--···0········0········0········4·2024-04-26·05:46:21.000000·debian-binary |
2 | -rw-r--r--···0········0········0·····3884·2024-04-26·05:46:21.000000·control.tar.xz | 2 | -rw-r--r--···0········0········0·····3884·2024-04-26·05:46:21.000000·control.tar.xz |
3 | -rw-r--r--···0········0········0···35 | 3 | -rw-r--r--···0········0········0···358560·2024-04-26·05:46:21.000000·data.tar.xz |
Offset 1, 13 lines modified | Offset 1, 13 lines modified | ||
1 | Package:·cockpit-bridge | 1 | Package:·cockpit-bridge |
2 | Source:·cockpit | 2 | Source:·cockpit |
3 | Version:·316-1 | 3 | Version:·316-1 |
4 | Architecture:·i386 | 4 | Architecture:·i386 |
5 | Maintainer:·Utopia·Maintenance·Team·<pkg-utopia-maintainers@lists.alioth.debian.org> | 5 | Maintainer:·Utopia·Maintenance·Team·<pkg-utopia-maintainers@lists.alioth.debian.org> |
6 | Installed-Size:·86 | 6 | Installed-Size:·867 |
7 | Depends:·libc6·(>=·2.34),·libglib2.0-0t64·(>=·2.68.0),·libjson-glib-1.0-0·(>=·1.5.2),·libssh-4·(>=·0.10.4),·libsystemd0·(>=·235),·python3:any,·glib-networking | 7 | Depends:·libc6·(>=·2.34),·libglib2.0-0t64·(>=·2.68.0),·libjson-glib-1.0-0·(>=·1.5.2),·libssh-4·(>=·0.10.4),·libsystemd0·(>=·235),·python3:any,·glib-networking |
8 | Recommends:·openssh-client | 8 | Recommends:·openssh-client |
9 | Breaks:·cockpit-ws·(<<·181.x) | 9 | Breaks:·cockpit-ws·(<<·181.x) |
10 | Replaces:·cockpit-dashboard·(<<·170.x),·cockpit-ws·(<<·181.x) | 10 | Replaces:·cockpit-dashboard·(<<·170.x),·cockpit-ws·(<<·181.x) |
11 | Provides:·cockpit-ssh | 11 | Provides:·cockpit-ssh |
12 | Section:·admin | 12 | Section:·admin |
13 | Priority:·optional | 13 | Priority:·optional |
Offset 60, 15 lines modified | Offset 60, 15 lines modified | ||
60 | -rw-r--r--···0·root·········(0)·root·········(0)·····6653·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/channels/metrics.py | 60 | -rw-r--r--···0·root·········(0)·root·········(0)·····6653·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/channels/metrics.py |
61 | -rw-r--r--···0·root·········(0)·root·········(0)·····4058·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/channels/packages.py | 61 | -rw-r--r--···0·root·········(0)·root·········(0)·····4058·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/channels/packages.py |
62 | -rw-r--r--···0·root·········(0)·root·········(0)·····4872·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/channels/stream.py | 62 | -rw-r--r--···0·root·········(0)·root·········(0)·····4872·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/channels/stream.py |
63 | -rw-r--r--···0·root·········(0)·root·········(0)·····1171·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/channels/trivial.py | 63 | -rw-r--r--···0·root·········(0)·root·········(0)·····1171·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/channels/trivial.py |
64 | -rw-r--r--···0·root·········(0)·root·········(0)·····3188·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/config.py | 64 | -rw-r--r--···0·root·········(0)·root·········(0)·····3188·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/config.py |
65 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/data/ | 65 | drwxr-xr-x···0·root·········(0)·root·········(0)········0·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/data/ |
66 | -rw-r--r--···0·root·········(0)·root·········(0)······574·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/data/__init__.py | 66 | -rw-r--r--···0·root·········(0)·root·········(0)······574·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/data/__init__.py |
67 | -rw-r--r--···0·root·········(0)·root·········(0)····8 | 67 | -rw-r--r--···0·root·········(0)·root·········(0)····86268·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/data/cockpit-bridge.beipack.xz |
68 | -rw-r--r--···0·root·········(0)·root·········(0)·····3212·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/data/fail.html | 68 | -rw-r--r--···0·root·········(0)·root·········(0)·····3212·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/data/fail.html |
69 | -rw-r--r--···0·root·········(0)·root·········(0)·····5517·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/internal_endpoints.py | 69 | -rw-r--r--···0·root·········(0)·root·········(0)·····5517·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/internal_endpoints.py |
70 | -rw-r--r--···0·root·········(0)·root·········(0)·····7242·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/jsonutil.py | 70 | -rw-r--r--···0·root·········(0)·root·········(0)·····7242·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/jsonutil.py |
71 | -rw-r--r--···0·root·········(0)·root·········(0)····21539·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/packages.py | 71 | -rw-r--r--···0·root·········(0)·root·········(0)····21539·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/packages.py |
72 | -rw-r--r--···0·root·········(0)·root·········(0)····12729·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/peer.py | 72 | -rw-r--r--···0·root·········(0)·root·········(0)····12729·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/peer.py |
73 | -rw-r--r--···0·root·········(0)·root·········(0)·····7580·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/polkit.py | 73 | -rw-r--r--···0·root·········(0)·root·········(0)·····7580·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/polkit.py |
74 | -rw-r--r--···0·root·········(0)·root·········(0)·····2031·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/polyfills.py | 74 | -rw-r--r--···0·root·········(0)·root·········(0)·····2031·2024-04-26·05:46:21.000000·./usr/lib/python3/dist-packages/cockpit/polyfills.py |
Offset 64, 187 lines modified | Offset 64, 15 lines modified | ||
64 | ······)·->·Optional[importlib.machinery.ModuleSpec]: | 64 | ······)·->·Optional[importlib.machinery.ModuleSpec]: |
65 | ········if·fullname·not·in·self.modules: | 65 | ········if·fullname·not·in·self.modules: |
66 | ············return·None | 66 | ············return·None |
67 | ········return·importlib.util.spec_from_loader(fullname,·self) | 67 | ········return·importlib.util.spec_from_loader(fullname,·self) |
68 | import·sys | 68 | import·sys |
69 | sys.meta_path.insert(0,·BeipackLoader({ | 69 | sys.meta_path.insert(0,·BeipackLoader({ |
70 | ··'cockpit/p | 70 | ··'cockpit/peer.py':·r'''#·This·file·is·part·of·Cockpit. |
71 | # | ||
72 | #·Copyright·(C)·2023·Red·Hat,·Inc. | ||
73 | # | ||
74 | #·This·program·is·free·software:·you·can·redistribute·it·and/or·modify | ||
75 | #·it·under·the·terms·of·the·GNU·General·Public·License·as·published·by | ||
76 | #·the·Free·Software·Foundation,·either·version·3·of·the·License,·or | ||
77 | #·(at·your·option)·any·later·version. | ||
78 | # | ||
79 | #·This·program·is·distributed·in·the·hope·that·it·will·be·useful, | ||
80 | #·but·WITHOUT·ANY·WARRANTY;·without·even·the·implied·warranty·of | ||
81 | #·MERCHANTABILITY·or·FITNESS·FOR·A·PARTICULAR·PURPOSE.··See·the | ||
82 | #·GNU·General·Public·License·for·more·details. | ||
83 | # | ||
84 | #·You·should·have·received·a·copy·of·the·GNU·General·Public·License | ||
85 | #·along·with·this·program.··If·not,·see·<https://www.gnu.org/licenses/>. | ||
86 | import·asyncio | ||
87 | import·locale | ||
88 | import·logging | ||
89 | import·os | ||
90 | import·pwd | ||
91 | from·typing·import·Dict,·List,·Sequence,·Tuple | ||
92 | from·cockpit._vendor.ferny·import·AskpassHandler | ||
93 | from·cockpit._vendor.systemd_ctypes·import·Variant,·bus | ||
94 | #·that·path·is·valid·on·at·least·Debian,·Fedora/RHEL,·and·Arch | ||
95 | HELPER_PATH·=·'/usr/lib/polkit-1/polkit-agent-helper-1' | ||
96 | AGENT_DBUS_PATH·=·'/PolkitAgent' | ||
97 | logger·=·logging.getLogger(__name__) | ||
98 | Identity·=·Tuple[str,·Dict[str,·Variant]] | ||
99 | #·https://www.freedesktop.org/software/polkit/docs/latest/eggdbus-interface-org.freedesktop.PolicyKit1.AuthenticationAgent.html | ||
100 | #·Note·that·we·don't·implement·the·CancelAuthentication()·API.·pkexec·gets·called·in·a·way·that·has·no·opportunity·to | ||
101 | #·cancel·an·ongoing·authentication·from·the·pkexec·side.·On·the·UI·side·cancellation·is·implemented·via·the·standard | ||
102 | #·asyncio·process·mechanism.·If·we·ever·need·CancelAuthentication(),·we·could·keep·a·cookie·→·get_current_task() | ||
103 | #·mapping,·but·that·method·is·not·available·for·Python·3.6·yet. | ||
104 | class·org_freedesktop_PolicyKit1_AuthenticationAgent(bus.Object): | ||
105 | ····def·__init__(self,·responder:·AskpassHandler): | ||
106 | ········super().__init__() | ||
107 | ········self.responder·=·responder | ||
108 | ····#·confusingly·named:·this·actually·does·the·whole·authentication·dialog,·see·docs | ||
109 | ····@bus.Interface.Method('',·['s',·'s',·'s',·'a{ss}',·'s',·'a(sa{sv})']) | ||
110 | ····async·def·begin_authentication(self,·action_id:·str,·message:·str,·icon_name:·str, | ||
111 | ···································details:·Dict[str,·str],·cookie:·str,·identities:·Sequence[Identity])·->·None: | ||
112 | ········logger.debug('BeginAuthentication:·action·%s,·message·"%s",·icon·%s,·details·%s,·cookie·%s,·identities·%r', | ||
113 | ·····················action_id,·message,·icon_name,·details,·cookie,·identities) | ||
114 | ········#·only·support·authentication·as·ourselves,·as·we·don't·yet·have·the | ||
115 | ········#·protocol·plumbing·and·UI·to·select·an·admin·user | ||
116 | ········my_uid·=·os.geteuid() | ||
117 | ········for·(auth_type,·subject)·in·identities: | ||
118 | ············if·auth_type·==·'unix-user'·and·'uid'·in·subject·and·subject['uid'].value·==·my_uid: | ||
119 | ················logger.debug('Authentication·subject·%s·matches·our·uid·%d',·subject,·my_uid) | ||
120 | ················break | ||
121 | ········else: | ||
122 | ············logger.warning('Not·supporting·authentication·as·any·of·%s',·identities) | ||
123 | ············return | ||
124 | ········user_name·=·pwd.getpwuid(my_uid).pw_name | ||
125 | ········process·=·await·asyncio.create_subprocess_exec(HELPER_PATH,·user_name,·cookie, | ||
126 | ·······················································stdin=asyncio.subprocess.PIPE, | ||
127 | ·······················································stdout=asyncio.subprocess.PIPE) | ||
128 | ········try: | ||
129 | ············await·self._communicate(process) | ||
130 | ········except·asyncio.CancelledError: | ||
131 | ············logger.debug('Cancelled·authentication') | ||
132 | ············process.terminate() | ||
133 | ········finally: | ||
134 | ············res·=·await·process.wait() | ||
135 | ············logger.debug('helper·exited·with·code·%i',·res) | ||
136 | ····async·def·_communicate(self,·process:·asyncio.subprocess.Process)·->·None: | ||
137 | ········assert·process.stdin | ||
138 | ········assert·process.stdout | ||
139 | ········messages:·List[str]·=·[] | ||
140 | ········async·for·line·in·process.stdout: | ||
141 | ············logger.debug('Read·line·from·helper:·%s',·line) | ||
142 | ············command,·_,·value·=·line.strip().decode().partition('·') | ||
143 | ············#·usually:·PAM_PROMPT_ECHO_OFF·Password:·\n | ||
144 | ············if·command.startswith('PAM_PROMPT'): | ||
145 | ················#·Don't·pass·this·to·the·UI·if·it's·"Password"·(the·usual·case), | ||
146 | ················#·so·that·superuser.py·uses·the·translated·default | ||
147 | ················if·value.startswith('Password'): | ||
148 | ····················value·=·'' | ||
149 | ················#·flush·out·accumulated·info/error·messages | ||
150 | ················passwd·=·await·self.responder.do_askpass('\n'.join(messages),·value,·'') | ||
151 | ················messages.clear() | ||
152 | ················if·passwd·is·None: | ||
153 | ····················logger.debug('got·PAM_PROMPT·%s,·but·do_askpass·returned·None',·value) | ||
154 | ····················raise·asyncio.CancelledError('no·password·given') | ||
155 | ················logger.debug('got·PAM_PROMPT·%s,·do_askpass·returned·a·password',·value) | ||
156 | ················process.stdin.write(passwd.encode()) | ||
157 | ················process.stdin.write(b'\n') | ||
158 | ················del·passwd··#·don't·keep·this·around·longer·than·necessary | ||
159 | ················await·process.stdin.drain() | ||
160 | ················logger.debug('got·PAM_PROMPT,·wrote·password·to·helper') | ||
161 | ············elif·command·in·('PAM_TEXT_INFO',·'PAM_ERROR'): | ||
162 | ················messages.append(value) | ||
163 | ············elif·command·==·'SUCCESS': | ||
164 | ················logger.debug('Authentication·succeeded') | ||
165 | ················break | ||
166 | ············elif·command·==·'FAILURE': | ||
167 | ················logger.warning('Authentication·failed') | ||
168 | ················break | ||
169 | ············else: | ||
170 | ················logger.warning('Unknown·line·from·helper,·aborting:·%s',·line) | ||
171 | ················process.terminate() | ||
172 | ················break | ||
Max diff block lines reached; 522772/530957 bytes (98.46%) of diff not shown. |
Offset 1, 9 lines modified | Offset 1, 9 lines modified | ||
1 | { | 1 | { |
2 | ····"archive_info":·{ | 2 | ····"archive_info":·{ |
3 | ········"hash":·"sha256= | 3 | ········"hash":·"sha256=416867dd53d3dff2b9af8d58d826eed5855337a35d66d066a1de0d77e1ddf0be", |
4 | ········"hashes":·{ | 4 | ········"hashes":·{ |
5 | ············"sha256":·" | 5 | ············"sha256":·"416867dd53d3dff2b9af8d58d826eed5855337a35d66d066a1de0d77e1ddf0be" |
6 | ········} | 6 | ········} |
7 | ····}, | 7 | ····}, |
8 | ····"url":·"file:///build/reproducible-path/cockpit-316/tmp/wheel/cockpit-316-py3-none-any.whl" | 8 | ····"url":·"file:///build/reproducible-path/cockpit-316/tmp/wheel/cockpit-316-py3-none-any.whl" |
9 | } | 9 | } |