* libmisc/utmp.c: The ut argument of prepare_utmp() might be NULL.
ut_id needs to be forged in that case.
This commit is contained in:
parent
811288df64
commit
7fb1063ccd
|
@ -1,3 +1,8 @@
|
||||||
|
2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
|
||||||
|
|
||||||
|
* libmisc/utmp.c: The ut argument of prepare_utmp() might be NULL.
|
||||||
|
ut_id needs to be forged in that case.
|
||||||
|
|
||||||
2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
|
2009-04-22 Nicolas François <nicolas.francois@centraliens.net>
|
||||||
|
|
||||||
* libmisc/utmp.c: Removed old documentation of setutmp().
|
* libmisc/utmp.c: Removed old documentation of setutmp().
|
||||||
|
|
|
@ -169,12 +169,14 @@ static void updwtmpx (const char *filename, const struct utmpx *utx)
|
||||||
* prepare_utmp - prepare an utmp entry so that it can be logged in a
|
* prepare_utmp - prepare an utmp entry so that it can be logged in a
|
||||||
* utmp/wtmp file.
|
* utmp/wtmp file.
|
||||||
*
|
*
|
||||||
* It requires an utmp entry in input (ut) to return an entry with
|
* It accepts an utmp entry in input (ut) to return an entry with
|
||||||
* the right ut_id. This is typically an entry returned by
|
* the right ut_id. This is typically an entry returned by
|
||||||
* get_current_utmp
|
* get_current_utmp
|
||||||
|
* If ut is NULL, ut_id will be forged based on the line argument.
|
||||||
*
|
*
|
||||||
* The ut_host field of the input structure may also be kept, and to
|
* The ut_host field of the input structure may also be kept, and is
|
||||||
* define the ut_addr/ut_addr_v6 fields. (if these fields exist)
|
* used to define the ut_addr/ut_addr_v6 fields. (if these fields
|
||||||
|
* exist)
|
||||||
*
|
*
|
||||||
* Other fields are discarded and filed with new values (if they
|
* Other fields are discarded and filed with new values (if they
|
||||||
* exist).
|
* exist).
|
||||||
|
@ -192,7 +194,6 @@ struct utmp *prepare_utmp (const char *name,
|
||||||
|
|
||||||
assert (NULL != name);
|
assert (NULL != name);
|
||||||
assert (NULL != line);
|
assert (NULL != line);
|
||||||
assert (NULL != ut);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -201,7 +202,8 @@ struct utmp *prepare_utmp (const char *name,
|
||||||
hostname = (char *) xmalloc (strlen (host) + 1);
|
hostname = (char *) xmalloc (strlen (host) + 1);
|
||||||
strcpy (hostname, host);
|
strcpy (hostname, host);
|
||||||
#ifdef HAVE_STRUCT_UTMP_UT_HOST
|
#ifdef HAVE_STRUCT_UTMP_UT_HOST
|
||||||
} else if ( (NULL != ut->ut_host)
|
} else if ( (NULL != ut)
|
||||||
|
&& (NULL != ut->ut_host)
|
||||||
&& ('\0' != ut->ut_host[0])) {
|
&& ('\0' != ut->ut_host[0])) {
|
||||||
hostname = (char *) xmalloc (sizeof (ut->ut_host) + 1);
|
hostname = (char *) xmalloc (sizeof (ut->ut_host) + 1);
|
||||||
strncpy (hostname, ut->ut_host, sizeof (ut->ut_host));
|
strncpy (hostname, ut->ut_host, sizeof (ut->ut_host));
|
||||||
|
@ -225,7 +227,12 @@ struct utmp *prepare_utmp (const char *name,
|
||||||
utent->ut_pid = getpid ();
|
utent->ut_pid = getpid ();
|
||||||
strncpy (utent->ut_line, line, sizeof (utent->ut_line));
|
strncpy (utent->ut_line, line, sizeof (utent->ut_line));
|
||||||
#ifdef HAVE_STRUCT_UTMP_UT_ID
|
#ifdef HAVE_STRUCT_UTMP_UT_ID
|
||||||
strncpy (utent->ut_id, ut->ut_id, sizeof (utent->ut_id));
|
if (NULL != ut) {
|
||||||
|
strncpy (utent->ut_id, ut->ut_id, sizeof (utent->ut_id));
|
||||||
|
} else {
|
||||||
|
/* XXX - assumes /dev/tty?? */
|
||||||
|
strncpy (utent->ut_id, line + 3, sizeof (utent->ut_id));
|
||||||
|
}
|
||||||
#endif /* HAVE_STRUCT_UTMP_UT_ID */
|
#endif /* HAVE_STRUCT_UTMP_UT_ID */
|
||||||
#ifdef HAVE_STRUCT_UTMP_UT_NAME
|
#ifdef HAVE_STRUCT_UTMP_UT_NAME
|
||||||
strncpy (utent->ut_name, name, sizeof (utent->ut_name));
|
strncpy (utent->ut_name, name, sizeof (utent->ut_name));
|
||||||
|
@ -329,7 +336,6 @@ struct utmpx *prepare_utmpx (const char *name,
|
||||||
|
|
||||||
assert (NULL != name);
|
assert (NULL != name);
|
||||||
assert (NULL != line);
|
assert (NULL != line);
|
||||||
assert (NULL != ut);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -338,7 +344,8 @@ struct utmpx *prepare_utmpx (const char *name,
|
||||||
hostname = (char *) xmalloc (strlen (host) + 1);
|
hostname = (char *) xmalloc (strlen (host) + 1);
|
||||||
strcpy (hostname, host);
|
strcpy (hostname, host);
|
||||||
#ifdef HAVE_STRUCT_UTMP_UT_HOST
|
#ifdef HAVE_STRUCT_UTMP_UT_HOST
|
||||||
} else if ( (NULL != ut->ut_host)
|
} else if ( (NULL != ut)
|
||||||
|
&& (NULL != ut->ut_host)
|
||||||
&& ('\0' != ut->ut_host[0])) {
|
&& ('\0' != ut->ut_host[0])) {
|
||||||
hostname = (char *) xmalloc (sizeof (ut->ut_host) + 1);
|
hostname = (char *) xmalloc (sizeof (ut->ut_host) + 1);
|
||||||
strncpy (hostname, ut->ut_host, sizeof (ut->ut_host));
|
strncpy (hostname, ut->ut_host, sizeof (ut->ut_host));
|
||||||
|
@ -362,7 +369,12 @@ struct utmpx *prepare_utmpx (const char *name,
|
||||||
// FIXME: move to configure.in
|
// FIXME: move to configure.in
|
||||||
# error "No support for systems with utmpx and no ut_id field in utmp"
|
# error "No support for systems with utmpx and no ut_id field in utmp"
|
||||||
#endif /* !HAVE_STRUCT_UTMP_UT_ID */
|
#endif /* !HAVE_STRUCT_UTMP_UT_ID */
|
||||||
strncpy (utxent->ut_id, ut->ut_id, sizeof (utxent->ut_id));
|
if (NULL != ut) {
|
||||||
|
strncpy (utxent->ut_id, ut->ut_id, sizeof (utxent->ut_id));
|
||||||
|
} else {
|
||||||
|
/* XXX - assumes /dev/tty?? */
|
||||||
|
strncpy (utxent->ut_id, line + 3, sizeof (utxent->ut_id));
|
||||||
|
}
|
||||||
#ifdef HAVE_STRUCT_UTMPX_UT_NAME
|
#ifdef HAVE_STRUCT_UTMPX_UT_NAME
|
||||||
strncpy (utxent->ut_name, name, sizeof (utxent->ut_name));
|
strncpy (utxent->ut_name, name, sizeof (utxent->ut_name));
|
||||||
#endif /* HAVE_STRUCT_UTMPX_UT_NAME */
|
#endif /* HAVE_STRUCT_UTMPX_UT_NAME */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user