sd-login: improve error handling
let's return ENXIO whenever we don't know something rather than ENOENT. ENOENT suggests this was really about a file or directory, while ENXIO is a more generic "not found" indicator.
This commit is contained in:
parent
9660efb82f
commit
fc60d8153c
|
@ -237,11 +237,13 @@ _public_ int sd_uid_get_display(uid_t uid, char **session) {
|
|||
return r;
|
||||
|
||||
r = parse_env_file(p, NEWLINE, "DISPLAY", &s, NULL);
|
||||
if (r == -ENOENT)
|
||||
return -ENXIO;
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (isempty(s))
|
||||
return -ENOENT;
|
||||
return -ENXIO;
|
||||
|
||||
*session = s;
|
||||
s = NULL;
|
||||
|
@ -465,7 +467,7 @@ static int session_get_string(const char *session, const char *field, char **val
|
|||
return r;
|
||||
|
||||
if (isempty(s))
|
||||
return -ENOENT;
|
||||
return -ENXIO;
|
||||
|
||||
*value = s;
|
||||
s = NULL;
|
||||
|
|
|
@ -33,7 +33,7 @@ static void test_login(void) {
|
|||
_cleanup_free_ char *pp = NULL, *qq = NULL;
|
||||
int r, k;
|
||||
uid_t u, u2;
|
||||
char *seat, *type, *class, *display, *remote_user, *remote_host;
|
||||
char *seat, *type, *class, *display, *remote_user, *remote_host, *display_session;
|
||||
char *session;
|
||||
char *state;
|
||||
char *session2;
|
||||
|
@ -50,6 +50,12 @@ static void test_login(void) {
|
|||
assert_se(sd_pid_get_owner_uid(0, &u2) == 0);
|
||||
printf("user = "UID_FMT"\n", u2);
|
||||
|
||||
display_session = NULL;
|
||||
r = sd_uid_get_display(u2, &display_session);
|
||||
assert_se(r >= 0 || r == -ENXIO);
|
||||
printf("user's display session = %s\n", strna(display_session));
|
||||
free(display_session);
|
||||
|
||||
assert_se(socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == 0);
|
||||
sd_peer_get_session(pair[0], &pp);
|
||||
sd_peer_get_session(pair[1], &qq);
|
||||
|
@ -100,16 +106,22 @@ static void test_login(void) {
|
|||
printf("class = %s\n", class);
|
||||
free(class);
|
||||
|
||||
assert_se(sd_session_get_display(session, &display) >= 0);
|
||||
printf("display = %s\n", display);
|
||||
display = NULL;
|
||||
r = sd_session_get_display(session, &display);
|
||||
assert_se(r >= 0 || r == -ENXIO);
|
||||
printf("display = %s\n", strna(display));
|
||||
free(display);
|
||||
|
||||
assert_se(sd_session_get_remote_user(session, &remote_user) >= 0);
|
||||
printf("remote_user = %s\n", remote_user);
|
||||
remote_user = NULL;
|
||||
r = sd_session_get_remote_user(session, &remote_user);
|
||||
assert_se(r >= 0 || r == -ENXIO);
|
||||
printf("remote_user = %s\n", strna(remote_user));
|
||||
free(remote_user);
|
||||
|
||||
assert_se(sd_session_get_remote_host(session, &remote_host) >= 0);
|
||||
printf("remote_host = %s\n", remote_host);
|
||||
remote_host = NULL;
|
||||
r = sd_session_get_remote_host(session, &remote_host);
|
||||
assert_se(r >= 0 || r == -ENXIO);
|
||||
printf("remote_host = %s\n", strna(remote_host));
|
||||
free(remote_host);
|
||||
|
||||
assert_se(sd_session_get_seat(session, &seat) >= 0);
|
||||
|
|
Loading…
Reference in New Issue