libmisc: implement get_session_host()
Implement `get_session_host()` in `utmp.c` and `logind.c`. Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
This commit is contained in:
committed by
Serge Hallyn
parent
fb35ad15ae
commit
f40bdfa66a
@@ -472,7 +472,19 @@ extern int set_filesize_limit (int blocks);
|
|||||||
/* user_busy.c */
|
/* user_busy.c */
|
||||||
extern int user_busy (const char *name, uid_t uid);
|
extern int user_busy (const char *name, uid_t uid);
|
||||||
|
|
||||||
/* utmp.c */
|
/*
|
||||||
|
* Session management: utmp.c or logind.c
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get host for the current session
|
||||||
|
*
|
||||||
|
* @param[out] out Host name
|
||||||
|
*
|
||||||
|
* @return 0 or a positive integer if the host was obtained properly,
|
||||||
|
* another value on error.
|
||||||
|
*/
|
||||||
|
extern int get_session_host (char **out);
|
||||||
extern /*@null@*/struct utmp *get_current_utmp (void);
|
extern /*@null@*/struct utmp *get_current_utmp (void);
|
||||||
extern struct utmp *prepare_utmp (const char *name,
|
extern struct utmp *prepare_utmp (const char *name,
|
||||||
const char *line,
|
const char *line,
|
||||||
|
|||||||
@@ -94,4 +94,4 @@ endif
|
|||||||
|
|
||||||
if ENABLE_LASTLOG
|
if ENABLE_LASTLOG
|
||||||
libmisc_la_SOURCES += log.c
|
libmisc_la_SOURCES += log.c
|
||||||
endif
|
endif
|
||||||
36
libmisc/logind.c
Normal file
36
libmisc/logind.c
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2023, Iker Pedrosa <ipedrosa@redhat.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#ident "$Id$"
|
||||||
|
|
||||||
|
#include "defines.h"
|
||||||
|
#include "prototypes.h"
|
||||||
|
|
||||||
|
#include <systemd/sd-login.h>
|
||||||
|
|
||||||
|
int get_session_host (char **out)
|
||||||
|
{
|
||||||
|
char *host = NULL;
|
||||||
|
char *session = NULL;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = sd_pid_get_session (getpid(), &session);
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
ret = sd_session_get_remote_host (session, &host);
|
||||||
|
if (ret < 0) {
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
*out = host;
|
||||||
|
|
||||||
|
done:
|
||||||
|
free (session);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
@@ -101,6 +101,32 @@ static bool is_my_tty (const char tty[UT_LINESIZE])
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int get_session_host (char **out)
|
||||||
|
{
|
||||||
|
char *hostname = NULL;
|
||||||
|
struct utmp *ut = NULL;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
ut = get_current_utmp();
|
||||||
|
|
||||||
|
#ifdef HAVE_STRUCT_UTMP_UT_HOST
|
||||||
|
if ((ut != NULL) && (ut->ut_host[0] != '\0')) {
|
||||||
|
hostname = XMALLOC(sizeof(ut->ut_host) + 1, char);
|
||||||
|
strncpy (hostname, ut->ut_host, sizeof (ut->ut_host));
|
||||||
|
hostname[sizeof (ut->ut_host)] = '\0';
|
||||||
|
*out = hostname;
|
||||||
|
free (ut);
|
||||||
|
} else {
|
||||||
|
*out = NULL;
|
||||||
|
ret = -2;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
*out = NULL;
|
||||||
|
ret = -2;
|
||||||
|
#endif /* HAVE_STRUCT_UTMP_UT_HOST */
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef USE_PAM
|
#ifndef USE_PAM
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user