diff options
Diffstat (limited to 'net/samba411/files/patch-source3_smbd_utmp.c')
-rw-r--r-- | net/samba411/files/patch-source3_smbd_utmp.c | 261 |
1 files changed, 0 insertions, 261 deletions
diff --git a/net/samba411/files/patch-source3_smbd_utmp.c b/net/samba411/files/patch-source3_smbd_utmp.c deleted file mode 100644 index b8cedca303d0..000000000000 --- a/net/samba411/files/patch-source3_smbd_utmp.c +++ /dev/null @@ -1,261 +0,0 @@ ---- source3/smbd/utmp.c.orig 2019-01-15 10:07:00 UTC -+++ source3/smbd/utmp.c -@@ -257,7 +257,7 @@ static char *uw_pathname(TALLOC_CTX *ctx - Update utmp file directly. No subroutine interface: probably a BSD system. - ****************************************************************************/ - --static void pututline_my(const char *uname, struct utmp *u, bool claim) -+static void pututline_my(const char *uname, STRUCT_UTMP *u, bool claim) - { - DEBUG(1,("pututline_my: not yet implemented\n")); - /* BSD implementor: may want to consider (or not) adjusting "lastlog" */ -@@ -271,7 +271,7 @@ static void pututline_my(const char *una - Credit: Michail Vidiassov <master@iaas.msu.ru> - ****************************************************************************/ - --static void updwtmp_my(const char *wname, struct utmp *u, bool claim) -+static void updwtmp_my(const char *wname, STRUCT_UTMP *u, bool claim) - { - int fd; - struct stat buf; -@@ -303,7 +303,7 @@ static void updwtmp_my(const char *wname - if ((fd = open(wname, O_WRONLY|O_APPEND, 0)) < 0) - return; - if (fstat(fd, &buf) == 0) { -- if (write(fd, (char *)u, sizeof(struct utmp)) != sizeof(struct utmp)) -+ if (write(fd, (char *)u, sizeof(STRUCT_UTMP)) != sizeof(STRUCT_UTMP)) - (void) ftruncate(fd, buf.st_size); - } - (void) close(fd); -@@ -314,12 +314,12 @@ static void updwtmp_my(const char *wname - Update via utmp/wtmp (not utmpx/wtmpx). - ****************************************************************************/ - --static void utmp_nox_update(struct utmp *u, bool claim) -+static void utmp_nox_update(STRUCT_UTMP *u, bool claim) - { - char *uname = NULL; - char *wname = NULL; - #if defined(PUTUTLINE_RETURNS_UTMP) -- struct utmp *urc; -+ STRUCT_UTMP *urc; - #endif /* PUTUTLINE_RETURNS_UTMP */ - - uname = uw_pathname(talloc_tos(), "utmp", ut_pathname); -@@ -376,127 +376,52 @@ static void utmp_nox_update(struct utmp - } - } - --/**************************************************************************** -- Copy a string in the utmp structure. --****************************************************************************/ - --static void utmp_strcpy(char *dest, const char *src, size_t n) --{ -- size_t len = 0; - -- memset(dest, '\0', n); -- if (src) -- len = strlen(src); -- if (len >= n) { -- memcpy(dest, src, n); -- } else { -- if (len) -- memcpy(dest, src, len); -- } --} -+ - - /**************************************************************************** - Update via utmpx/wtmpx (preferred) or via utmp/wtmp. - ****************************************************************************/ - --static void sys_utmp_update(struct utmp *u, const char *hostname, bool claim) -+static void sys_utmp_update(STRUCT_UTMP *u, const char *hostname, bool claim) - { --#if !defined(HAVE_UTMPX_H) -- /* No utmpx stuff. Drop to non-x stuff */ -- utmp_nox_update(u, claim); --#elif !defined(HAVE_PUTUTXLINE) -- /* Odd. Have utmpx.h but no "pututxline()". Drop to non-x stuff */ -- DEBUG(1,("utmp_update: have utmpx.h but no pututxline() function\n")); -- utmp_nox_update(u, claim); --#elif !defined(HAVE_GETUTMPX) -- /* Odd. Have utmpx.h but no "getutmpx()". Drop to non-x stuff */ -- DEBUG(1,("utmp_update: have utmpx.h but no getutmpx() function\n")); -- utmp_nox_update(u, claim); --#elif !defined(HAVE_UPDWTMPX) -- /* Have utmpx.h but no "updwtmpx()". Drop to non-x stuff */ -- DEBUG(1,("utmp_update: have utmpx.h but no updwtmpx() function\n")); -- utmp_nox_update(u, claim); --#else -- char *uname = NULL; -- char *wname = NULL; -- struct utmpx ux, *uxrc; -- -- getutmpx(u, &ux); -- --#if defined(HAVE_UX_UT_SYSLEN) -- if (hostname) -- ux.ut_syslen = strlen(hostname) + 1; /* include end NULL */ -- else -- ux.ut_syslen = 0; --#endif --#if defined(HAVE_UX_UT_HOST) -- utmp_strcpy(ux.ut_host, hostname, sizeof(ux.ut_host)); --#endif -- -- uname = uw_pathname(talloc_tos(), "utmpx", ux_pathname); -- wname = uw_pathname(talloc_tos(), "wtmpx", wx_pathname); -- if (uname && wname) { -- DEBUG(2,("utmp_update: uname:%s wname:%s\n", uname, wname)); -- } -+ STRUCT_UTMP *urc; - -- /* -- * Check for either uname or wname being empty. -- * Some systems, such as Redhat 6, have a "utmpx.h" which doesn't -- * define default filenames. -- * Also, our local installation has not provided an override. -- * Drop to non-x method. (E.g. RH6 has good defaults in "utmp.h".) -- */ -- if (!uname || !wname || (strlen(uname) == 0) || (strlen(wname) == 0)) { -- utmp_nox_update(u, claim); -- } else { -- utmpxname(uname); -- setutxent(); -- uxrc = pututxline(&ux); -- endutxent(); -- if (uxrc == NULL) { -- DEBUG(2,("utmp_update: pututxline() failed\n")); -- return; -- } -- updwtmpx(wname, &ux); -+ setutxent(); -+ urc = pututxline(u); -+ endutxent(); -+ if (urc == NULL) { -+ DEBUG(2,("utmp_update: pututxline() failed\n")); -+ return; - } --#endif /* HAVE_UTMPX_H */ - } - - #if defined(HAVE_UT_UT_ID) - /**************************************************************************** - Encode the unique connection number into "ut_id". - ****************************************************************************/ -- --static int ut_id_encode(int i, char *fourbyte) -+static void ut_id_encode(char *buf, int id, size_t buf_size) - { -- int nbase; -- const char *ut_id_encstr = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; -- --/* -- * 'ut_id_encstr' is the character set on which modulo arithmetic is done. -- * Example: digits would produce the base-10 numbers from '001'. -- */ -- nbase = strlen(ut_id_encstr); -+ const char ut_id_encstr[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - -- fourbyte[0] = ut_id_encstr[i % nbase]; -- i /= nbase; -- fourbyte[1] = ut_id_encstr[i % nbase]; -- i /= nbase; -- fourbyte[3] = ut_id_encstr[i % nbase]; -- i /= nbase; -- fourbyte[2] = ut_id_encstr[i % nbase]; -- i /= nbase; -+ int nbase = sizeof(ut_id_encstr) - 1; -+ /* -+ * 'ut_id_encstr' is the character set on which modulo arithmetic is done. -+ * Example: digits would produce the base-10 numbers from '001'. -+ */ - -- /* we do not care about overflows as i is a random number */ -- return 0; -+ for(int i = 0; i < buf_size; i++) { -+ buf[i] = ut_id_encstr[id % nbase]; -+ id /= nbase; -+ } - } - #endif /* defined(HAVE_UT_UT_ID) */ - -- - /* - fill a system utmp structure given all the info we can gather - */ --static bool sys_utmp_fill(struct utmp *u, -+static bool sys_utmp_fill(STRUCT_UTMP *u, - const char *username, const char *hostname, - const char *id_str, int id_num) - { -@@ -509,16 +434,16 @@ static bool sys_utmp_fill(struct utmp *u - * rather than to try to detect and optimise. - */ - #if defined(HAVE_UT_UT_USER) -- utmp_strcpy(u->ut_user, username, sizeof(u->ut_user)); -+ strncpy(u->ut_user, username, sizeof(u->ut_user)); - #elif defined(HAVE_UT_UT_NAME) -- utmp_strcpy(u->ut_name, username, sizeof(u->ut_name)); -+ strncpy(u->ut_name, username, sizeof(u->ut_name)); - #endif - - /* - * ut_line: - * If size limit proves troublesome, then perhaps use "ut_id_encode()". - */ -- utmp_strcpy(u->ut_line, id_str, sizeof(u->ut_line)); -+ strncpy(u->ut_line, id_str, sizeof(u->ut_line)); - - #if defined(HAVE_UT_UT_PID) - u->ut_pid = getpid(); -@@ -535,20 +460,23 @@ static bool sys_utmp_fill(struct utmp *u - u->ut_time = timeval.tv_sec; - #elif defined(HAVE_UT_UT_TV) - GetTimeOfDay(&timeval); -- u->ut_tv = timeval; -+ u->ut_tv.tv_sec = timeval.tv_sec; -+ u->ut_tv.tv_usec = timeval.tv_usec; - #else - #error "with-utmp must have UT_TIME or UT_TV" - #endif - - #if defined(HAVE_UT_UT_HOST) -- utmp_strcpy(u->ut_host, hostname, sizeof(u->ut_host)); -+ if(hostname != NULL) { -+ strncpy(u->ut_host, hostname, sizeof(u->ut_host)); -+#if defined(HAVE_UT_UT_SYSLEN) -+ u->ut_syslen = strlen(hostname) + 1; /* include trailing NULL */ -+#endif -+ } - #endif - - #if defined(HAVE_UT_UT_ID) -- if (ut_id_encode(id_num, u->ut_id) != 0) { -- DEBUG(1,("utmp_fill: cannot encode id %d\n", id_num)); -- return False; -- } -+ ut_id_encode(u->ut_id, id_num, sizeof(u->ut_id)); - #endif - - return True; -@@ -561,7 +489,7 @@ static bool sys_utmp_fill(struct utmp *u - void sys_utmp_yield(const char *username, const char *hostname, - const char *id_str, int id_num) - { -- struct utmp u; -+ STRUCT_UTMP u; - - ZERO_STRUCT(u); - -@@ -587,7 +515,7 @@ void sys_utmp_yield(const char *username - void sys_utmp_claim(const char *username, const char *hostname, - const char *id_str, int id_num) - { -- struct utmp u; -+ STRUCT_UTMP u; - - ZERO_STRUCT(u); - |