Skip to content

Commit 979aff2

Browse files
authored
pallet-sudo: Accept Root origin as valid sudo (paritytech#2783)
This changes `pallet-sudo` to also accept `Root` origin for `ensure_sudo`. This can be useful for parachains who allow the relay chain to have superuser rights to setup the sudo pallet for example.
1 parent db455ff commit 979aff2

2 files changed

Lines changed: 21 additions & 5 deletions

File tree

substrate/frame/sudo/src/lib.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -349,12 +349,16 @@ pub mod pallet {
349349
impl<T: Config> Pallet<T> {
350350
/// Ensure that the caller is the sudo key.
351351
pub(crate) fn ensure_sudo(origin: OriginFor<T>) -> DispatchResult {
352-
let sender = ensure_signed(origin)?;
353-
354-
if Self::key().map_or(false, |k| k == sender) {
355-
Ok(())
352+
let sender = ensure_signed_or_root(origin)?;
353+
354+
if let Some(sender) = sender {
355+
if Self::key().map_or(false, |k| k == sender) {
356+
Ok(())
357+
} else {
358+
Err(Error::<T>::RequireSudo.into())
359+
}
356360
} else {
357-
Err(Error::<T>::RequireSudo.into())
361+
Ok(())
358362
}
359363
}
360364
}

substrate/frame/sudo/src/tests.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,18 @@ fn remove_key_works() {
169169
});
170170
}
171171

172+
#[test]
173+
fn using_root_origin_works() {
174+
new_test_ext(1).execute_with(|| {
175+
assert_ok!(Sudo::remove_key(RuntimeOrigin::root()));
176+
assert!(Sudo::key().is_none());
177+
System::assert_has_event(TestEvent::Sudo(Event::KeyRemoved {}));
178+
179+
assert_ok!(Sudo::set_key(RuntimeOrigin::root(), 1));
180+
assert_eq!(Some(1), Sudo::key());
181+
});
182+
}
183+
172184
#[test]
173185
fn sudo_as_basics() {
174186
new_test_ext(1).execute_with(|| {

0 commit comments

Comments
 (0)