42 Commits

Author SHA1 Message Date
Philip Meulengracht
13a1c0ca10 multiple: add a spread test for the auto-removal of expired system-users. Make use of --force when removing users due to expiration, otherwise it is possible to block the removal the user if the user left a process open. 2022-10-31 14:05:48 +01:00
Philip Meulengracht
24437a0c4a daemon: support for expiration date in REST API 2022-10-20 12:14:40 +02:00
Philip Meulengracht
0dde00cdbd o/auth: rename NewUserData to NewUserParams 2022-10-04 13:35:45 +02:00
Ondrej
a044081e73 daemon: move user add, remove operations to overlord device state (#11796)
* daemon,o/devicestate: move user creation and removal helpers to o/devicestate

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* daemon,o/devicestate: move user create,remove tests to o/devicestate

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* daemon: add new tests for user create,remove requests

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* o/devicestate: removed unused variable in users test

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* o/devicestate: move users test export to common export

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* o/devicestate: remove left behind commented code

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* o/devicestate: clean syntax in user helper

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* daemon: use testutil.Backup() in api export tests

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* o/devicestate: use testutil.Backup() in api export tests

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* daemon: cleanup user tests

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* overlord/devicestate: join helper variables for mocking

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* overlord/devicestate: remove extra line in addUser function

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* overlord/devicestat: rename internal_err -> internalErr

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* overlord/devicestate: change addUser fnc signature

addUser adds single user. Change function signarure to return single UserResponse
Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* overlord/devicestate: update error handling in CreateUser

Update error handling after merge from master

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* overlord/devicestate: remove accidental file from merge conflict

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* daemon,overlord: user error wrapper for user account actions

CreateUser, RemoveUser can fail for multiple reasons.
There is a need to distinguish between internal error and bad request.
Use UserError structure to wrap/ return error information.

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* daemon,overlord: address review issues

- renaming UserResponse to CreatedUser
- fix typos
- fix error wrapping
- rename ue to error
- code cleanup

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* overlord/devicestate: rework createUserOpts helper for user creation

- remove unused and confusing safe flag for create user operations
- remove state from struct and pass it as function argument

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* overlord/devicestate: add test for missing email in user creation

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* daemon,overlord: split CreateUser function for known and unknown users

Split CreateUser functionality into two new functions
- CreateKnownUsers for creation of known users
- CreateUser for creation of user defined by email

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* overlord: use new auth.NewUserData structure

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>

* overlord/devicestate,daemon: review feedback

Reorder functions, drop wrapping internal errors, assume state lock on function entry to match the style in managers

* daemon,overlord/devicestate: review feedback

add missing unit test, remove devicemanager parameter, fix doc string

* daemon: review feedback

simplify some else conditions, rename function and variable

* overlord/devicestate: review feedback

move createUser down to the structure it belongs to

* daemon: review feedback + changes to how we return users

simplify a lot of the methods, change to pointer instead so we can return nil's instead of empty structures. Remove the option structure for creating new users, update some docs

* daemon: review feedback

rename doUserWrapper/doCreateUser

* daemon: restore tests, restore the backwards compatible way of creating users

* daemon,overlord: review feedback

rewrite testPostCreateUserFromAssertion, it was no longer valid after code seperation, instead focus on testing the code in api_users.go
update checks in users_test.go, one was invalid (overwritten), rest was missing verification of calling

* daemon,overlord/devicestate: review feedback

redo some of the error messages, move the logic check for creating known users in compat-mode, update comments a bit

Signed-off-by: Ondrej Kubik <ondrej.kubik@canonical.com>
Co-authored-by: Philip Meulengracht <the_meulengracht@hotmail.com>
2022-09-30 09:33:37 +02:00
Alberto Mardegan
0d80185347 daemon/api_users.go
Remove extra arguments in printf calls.

Co-authored-by: Miguel Pires <miguelpires94@gmail.com>
2022-09-21 09:48:50 +03:00
Alberto Mardegan
c45782e846 many: don't concatenate non-constant format strings
We should be careful not to concatenate variable strings into the first
argument of Sprintf/Printf/Errorf: if these variable strings end up
containing a percent character, it will break the way that the printfs
arguments are interpreted. Luckily, golang is smarter than C and is able
to detect mismatches between the number of '%' and the number of
arguments, but it still can lead to unexpected results:

    $ sudo snap set core refresh.rate-limit='%[2]#v'
    error: cannot perform the following tasks:
    - Run configure hook of "core" snap (run hook "configure": cannot parse "%!#(BADINDEX)v": no numerical prefix)

also:

    $ sudo snap set core refresh.rate-limit='%#v'
    error: cannot perform the following tasks:
    - Run configure hook of "core" snap (run hook "configure": cannot parse "&errors.errorString{s:"no numerical prefix"}": %!s(MISSING))

Moreover, it appears that all the occurrences of such pattern in our
code are situated either on unprivileged processes (like the `snap`
client), or, when in snapd, can only be triggered by the root user
(notice the `sudo` in the commands above).

Nevertheless, let's be defensive and fix these.

There are also other occurrences of concatenations in formatting
strings, but those are only constants so they don't pose a problem. But
to avoid the risk of these strings getting updated in the future with a
mutable version, let's explicitly mark these format prefixes as `const`.
2022-09-20 17:16:22 +03:00
Philip Meulengracht
aa5b512e0a multiple: refactor arguments given to NewUser into a struct instead 2022-08-26 11:14:16 +02:00
Miguel Pires
d8eb8dc9df many: replace ErrNoState equality checks w/ errors.Is() 2022-05-20 10:07:29 +01:00
Michael Vogt
718717e5c5 daemon: make marker clearer (thanks to Samuele) 2021-11-22 13:19:02 +01:00
Michael Vogt
47b7888897 daemon: amend ssh keys coming from the store
This commit adds a comment to ssh keys writen to ~/.authorized_keys
that come from the store. This will enable us in the future to
update keys that come from the store because we now have the
information what keys got added by snapd and which were added by
other means.
2021-09-10 17:31:54 +02:00
Samuele Pedroni
716b13b5f9 daemon: simplify SyncResponse
it doesn't take Meta anymore
2021-06-03 13:49:26 +02:00
Samuele Pedroni
7a84ff7d01 daemon: switch api_users.go to apiError, also cover related paths
this also adds some unit tests to cover some of the touched code paths
that weren't tested before
2021-06-01 18:48:43 +02:00
James Henstridge
eebe1636b2 Merge remote-tracking branch 'upstream/master' into daemon-access-check 2021-04-07 17:02:42 +08:00
James Henstridge
63be0de66e Merge remote-tracking branch 'upstream/master' into daemon-access-check 2021-03-18 12:15:16 +08:00
Samuele Pedroni
d0a7d7f357 daemon: rename getStore to storeFrom 2021-03-16 11:42:38 +01:00
Samuele Pedroni
926de177e3 daemon: change getStore(*Command) -> getStore(*Daemon)
this helps avoiding passing *Command around which complicates exposing
helpers if they actually want to be tested

with this we don't need to export ThemesCmd to the tests anymore
2021-03-16 11:42:38 +01:00
Samuele Pedroni
4567f6ec37 daemon,o/c/configcore: introduce users.create.automatic
the option if set to false disables automatic user creation on assertion
auto-import

it is processed early which means its setting available
before snapd starts serving users API requests
2021-03-01 17:06:18 +01:00
James Henstridge
885de6ed72 Merge remote-tracking branch 'upstream/master' into daemon-access-check 2021-01-04 15:28:41 +08:00
Michael Vogt
a954d35a91 client,daemon,snap: auto-import does not error on managed devices
The snap auto-import code right will always try to create all
known system-users when it imports any assertions. However this
leads to systemd errors and a degraded boot when a device is already
managed and a removable device with a user assertion is attached
to the device.

This commit changes the auto-import code to send a new
`automatic: true` json when running auto-imports. With that
option already managed device just return that no users are
created and no error.

This fixes https://bugs.launchpad.net/newparis/+bug/1893331
2020-10-13 11:30:41 +02:00
James Henstridge
6dca0bae80 daemon: reorder access checkers after method functions, to match struct layout 2020-08-27 13:48:57 +08:00
James Henstridge
89b0f97d4f daemon: use constants for polkit action IDs 2020-08-07 10:27:33 +08:00
James Henstridge
8dd53dfad6 Merge remote-tracking branch 'upstream/master' into daemon-access-check 2020-08-07 08:52:36 +08:00
James Henstridge
ea3c3c4b6a daemon: don't export access checkers, and rename RootOnlyAccess to rootAccess 2020-08-07 08:42:36 +08:00
James Henstridge
14b9e7ec62 daemon: have each command list a ReadAccess and/or WriteAccess policy directly.
This is simpler than determining how the current set of flags
interoperate, and more closely matches how API access is documented to
work.
2020-08-07 08:32:56 +08:00
Samuele Pedroni
3c944b608b daemon: switch to use client.ErrorKind and drop the local errorKind... 2020-08-02 16:22:51 +02:00