[SCM] Samba Shared Repository - branch master updated
Andrew Bartlett
abartlet at samba.org
Thu Oct 26 23:28:02 UTC 2023
The branch, master has been updated
via b6ae5d66819 codespell: Ignore .git
via b436720e16e s3:rpc_server/wkssvc: Remove get logged on user list from utmp
from 853ae7a913e smbd: add inode marshalling in smb3_file_posix_information_init()
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit b6ae5d6681919ef600e44fbf613d675f760dde07
Author: Andrew Bartlett <abartlet at samba.org>
Date: Thu Oct 26 11:17:43 2023 +1300
codespell: Ignore .git
Otherwise the first line of commit messages is checked,
because text is found in .git/logs/HEAD, but only on
autobuild and not in CI (which does a shallow clone),
and not the whole commit message either, which is inconsistent.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15503
Signed-off-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Andreas Schneider <asn at samba.org>
Autobuild-User(master): Andrew Bartlett <abartlet at samba.org>
Autobuild-Date(master): Thu Oct 26 23:27:29 UTC 2023 on atb-devel-224
commit b436720e16eeeff0c08cb61fc539b6c53ffdac4a
Author: Samuel Cabrero <scabrero at samba.org>
Date: Tue Oct 24 11:31:17 2023 +0200
s3:rpc_server/wkssvc: Remove get logged on user list from utmp
utmp is not Y2038 safe.
Signed-off-by: Samuel Cabrero <scabrero at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
-----------------------------------------------------------------------
Summary of changes:
.codespellrc | 2 +-
source3/rpc_server/wkssvc/srv_wkssvc_nt.c | 163 ++----------------------------
source3/wscript | 2 +-
3 files changed, 10 insertions(+), 157 deletions(-)
Changeset truncated at 500 lines:
diff --git a/.codespellrc b/.codespellrc
index de4f0fbbbae..1faf9ba9194 100644
--- a/.codespellrc
+++ b/.codespellrc
@@ -1,4 +1,4 @@
[codespell]
-skip = ./bin,./docs-xml/archives,./docs-xml/manpages/vfs_fruit.8.xml,./docs-xml/smbdotconf/browse/preferredmaster.xml,./lib/ldb/ldb_sqlite3/trees.ps,./libcli/util/ntstatus.h,./libcli/util/hresult.c,./python/samba/tests/blackbox/testdata,./source3/include/MacExtensions.h,./source3/selftest/ktest-krb5_ccache-2.txt,./source4/setup/display-specifiers,./source4/ldap_server/devdocs,./source4/selftest/provisions,./source4/setup/adprep/WindowsServerDocs,./source4/setup/display-specifiers,./source4/torture/vfs/fruit.c,./testdata,./third_party,*.IBM-DS,*.config,*.diff,*.dump,*.ldif,*.ldf,*.pdml,*.pem,*.po,*.schema
+skip = ./.git,./bin,./docs-xml/archives,./docs-xml/manpages/vfs_fruit.8.xml,./docs-xml/smbdotconf/browse/preferredmaster.xml,./lib/ldb/ldb_sqlite3/trees.ps,./libcli/util/ntstatus.h,./libcli/util/hresult.c,./python/samba/tests/blackbox/testdata,./source3/include/MacExtensions.h,./source3/selftest/ktest-krb5_ccache-2.txt,./source4/setup/display-specifiers,./source4/ldap_server/devdocs,./source4/selftest/provisions,./source4/setup/adprep/WindowsServerDocs,./source4/setup/display-specifiers,./source4/torture/vfs/fruit.c,./testdata,./third_party,*.IBM-DS,*.config,*.diff,*.dump,*.ldif,*.ldf,*.pdml,*.pem,*.po,*.schema
ignore-regex = \\[t]
ignore-words = .codespellignore
diff --git a/source3/rpc_server/wkssvc/srv_wkssvc_nt.c b/source3/rpc_server/wkssvc/srv_wkssvc_nt.c
index 592e8668cd3..0724dd00af5 100644
--- a/source3/rpc_server/wkssvc/srv_wkssvc_nt.c
+++ b/source3/rpc_server/wkssvc/srv_wkssvc_nt.c
@@ -45,96 +45,6 @@ struct dom_usr {
time_t login_time;
};
-#ifdef HAVE_GETUTXENT
-
-#include <utmpx.h>
-
-struct usrinfo {
- char *name;
- struct timeval login_time;
-};
-
-static int usr_info_cmp(const struct usrinfo *usr1, const struct usrinfo *usr2)
-{
- /* Called from qsort to compare two users in a usrinfo_t array for
- * sorting by login time. Return >0 if usr1 login time was later than
- * usr2 login time, <0 if it was earlier */
- return timeval_compare(&usr1->login_time, &usr2->login_time);
-}
-
-/*******************************************************************
- Get a list of the names of all users logged into this machine
- ********************************************************************/
-
-static int get_logged_on_userlist(TALLOC_CTX *mem_ctx, char ***pusers)
-{
- char **users;
- int i, num_users = 0;
- struct usrinfo *usr_infos = NULL;
- struct utmpx *u;
-
- while ((u = getutxent()) != NULL) {
- struct usrinfo *tmp;
- if (u->ut_type != USER_PROCESS) {
- continue;
- }
- for (i = 0; i < num_users; i++) {
- /* getutxent can return multiple user entries for the
- * same user, so ignore any dups */
- int cmp = strncmp(u->ut_user, usr_infos[i].name, sizeof(u->ut_user));
- if (cmp == 0) {
- break;
- }
- }
- if (i < num_users) {
- continue;
- }
-
- tmp = talloc_realloc(mem_ctx, usr_infos, struct usrinfo,
- num_users+1);
- if (tmp == NULL) {
- TALLOC_FREE(tmp);
- endutxent();
- return ENOMEM;
- }
- usr_infos = tmp;
- usr_infos[num_users].name = talloc_strdup(usr_infos,
- u->ut_user);
- if (usr_infos[num_users].name == NULL) {
- TALLOC_FREE(usr_infos);
- endutxent();
- return ENOMEM;
- }
- usr_infos[num_users].login_time.tv_sec = u->ut_tv.tv_sec;
- usr_infos[num_users].login_time.tv_usec = u->ut_tv.tv_usec;
- num_users += 1;
- }
-
- /* Sort the user list by time, oldest first */
- TYPESAFE_QSORT(usr_infos, num_users, usr_info_cmp);
-
- users = (char**)talloc_array(mem_ctx, char*, num_users);
- if (users) {
- for (i = 0; i < num_users; i++) {
- users[i] = talloc_move(users, &usr_infos[i].name);
- }
- }
- TALLOC_FREE(usr_infos);
- endutxent();
- *pusers = users;
- return 0;
-}
-
-#else
-
-static int get_logged_on_userlist(TALLOC_CTX *mem_ctx, char ***pusers)
-{
- *pusers = NULL;
- return 0;
-}
-
-#endif
-
static int dom_user_cmp(const struct dom_usr *usr1, const struct dom_usr *usr2)
{
/* Called from qsort to compare two domain users in a dom_usr_t array
@@ -324,8 +234,6 @@ static struct wkssvc_NetWkstaInfo101 *create_wks_info_101(TALLOC_CTX *mem_ctx)
static struct wkssvc_NetWkstaInfo102 *create_wks_info_102(TALLOC_CTX *mem_ctx)
{
struct wkssvc_NetWkstaInfo102 *info102;
- char **users;
- int ret;
info102 = talloc(mem_ctx, struct wkssvc_NetWkstaInfo102);
if (info102 == NULL) {
@@ -341,16 +249,7 @@ static struct wkssvc_NetWkstaInfo102 *create_wks_info_102(TALLOC_CTX *mem_ctx)
info102->domain_name = talloc_asprintf_strupper_m(
info102, "%s", lp_workgroup());
info102->lan_root = "";
-
- ret = get_logged_on_userlist(talloc_tos(), &users);
- if (ret != 0) {
- TALLOC_FREE(info102);
- errno = ret;
- return NULL;
- }
- info102->logged_on_users = talloc_array_length(users);
-
- TALLOC_FREE(users);
+ info102->logged_on_users = 0;
return info102;
}
@@ -445,38 +344,19 @@ static struct wkssvc_NetWkstaEnumUsersCtr0 *create_enum_users0(
TALLOC_CTX *mem_ctx)
{
struct wkssvc_NetWkstaEnumUsersCtr0 *ctr0;
- char **users;
- int i, num_users, ret;
ctr0 = talloc(mem_ctx, struct wkssvc_NetWkstaEnumUsersCtr0);
if (ctr0 == NULL) {
return NULL;
}
- ret = get_logged_on_userlist(talloc_tos(), &users);
- if (ret != 0) {
- DBG_WARNING("get_logged_on_userlist error %d: %s\n",
- ret,
- strerror(ret));
- TALLOC_FREE(ctr0);
- errno = ret;
- return NULL;
- }
-
- num_users = talloc_array_length(users);
- ctr0->entries_read = num_users;
- ctr0->user0 = talloc_array(ctr0, struct wkssvc_NetrWkstaUserInfo0,
- num_users);
+ ctr0->entries_read = 0;
+ ctr0->user0 = talloc_array(ctr0, struct wkssvc_NetrWkstaUserInfo0, 0);
if (ctr0->user0 == NULL) {
TALLOC_FREE(ctr0);
- TALLOC_FREE(users);
return NULL;
}
- for (i=0; i<num_users; i++) {
- ctr0->user0[i].user_name = talloc_move(ctr0->user0, &users[i]);
- }
- TALLOC_FREE(users);
return ctr0;
}
@@ -494,42 +374,28 @@ static struct wkssvc_NetWkstaEnumUsersCtr1 *create_enum_users1(
TALLOC_CTX *mem_ctx)
{
struct wkssvc_NetWkstaEnumUsersCtr1 *ctr1;
- char **users;
struct dom_usr *dom_users;
const char *pwd_server;
char *pwd_tmp;
- int i, j, num_users, num_dom_users, ret;
+ int i, num_dom_users, ret;
ctr1 = talloc(mem_ctx, struct wkssvc_NetWkstaEnumUsersCtr1);
if (ctr1 == NULL) {
return NULL;
}
- ret = get_logged_on_userlist(talloc_tos(), &users);
- if (ret != 0) {
- DBG_WARNING("get_logged_on_userlist error %d: %s\n",
- ret,
- strerror(ret));
- TALLOC_FREE(ctr1);
- errno = ret;
- return NULL;
- }
- num_users = talloc_array_length(users);
-
ret = get_domain_userlist(talloc_tos(), &dom_users);
if (ret != 0) {
TALLOC_FREE(ctr1);
- TALLOC_FREE(users);
errno = ret;
return NULL;
}
num_dom_users = talloc_array_length(dom_users);
ctr1->user1 = talloc_array(ctr1, struct wkssvc_NetrWkstaUserInfo1,
- num_users+num_dom_users);
+ num_dom_users);
if (ctr1->user1 == NULL) {
TALLOC_FREE(ctr1);
- TALLOC_FREE(users);
TALLOC_FREE(dom_users);
errno = ENOMEM;
return NULL;
@@ -553,24 +419,12 @@ static struct wkssvc_NetWkstaEnumUsersCtr1 *create_enum_users1(
pwd_server = pwd_tmp;
}
- /* Put in local users first */
- for (i=0; i<num_users; i++) {
- ctr1->user1[i].user_name = talloc_move(ctr1->user1, &users[i]);
-
- /* For a local user the domain name and logon server are
- * both returned as the local machine's NetBIOS name */
- ctr1->user1[i].logon_domain = ctr1->user1[i].logon_server =
- talloc_asprintf_strupper_m(ctr1->user1, "%s", lp_netbios_name());
-
- ctr1->user1[i].other_domains = NULL; /* Maybe in future? */
- }
-
/* Now domain users */
- for (j=0; j<num_dom_users; j++) {
+ for (i=0; i<num_dom_users; i++) {
ctr1->user1[i].user_name =
- talloc_strdup(ctr1->user1, dom_users[j].name);
+ talloc_strdup(ctr1->user1, dom_users[i].name);
ctr1->user1[i].logon_domain =
- talloc_strdup(ctr1->user1, dom_users[j].domain);
+ talloc_strdup(ctr1->user1, dom_users[i].domain);
ctr1->user1[i].logon_server = pwd_server;
ctr1->user1[i++].other_domains = NULL; /* Maybe in future? */
@@ -578,7 +432,6 @@ static struct wkssvc_NetWkstaEnumUsersCtr1 *create_enum_users1(
ctr1->entries_read = i;
- TALLOC_FREE(users);
TALLOC_FREE(dom_users);
return ctr1;
}
diff --git a/source3/wscript b/source3/wscript
index 93cd68d042f..2eaa21ae44d 100644
--- a/source3/wscript
+++ b/source3/wscript
@@ -804,7 +804,7 @@ msg.msg_accrightslen = sizeof(fd);
if Options.options.with_utmp:
conf.env.with_utmp = True
if not conf.CHECK_HEADERS('utmp.h'): conf.env.with_utmp = False
- conf.CHECK_FUNCS('pututline pututxline updwtmp updwtmpx getutmpx getutxent')
+ conf.CHECK_FUNCS('pututline pututxline updwtmp updwtmpx getutmpx')
conf.CHECK_STRUCTURE_MEMBER('struct utmp', 'ut_name', headers='utmp.h',
define='HAVE_UT_UT_NAME')
conf.CHECK_STRUCTURE_MEMBER('struct utmp', 'ut_user', headers='utmp.h',
--
Samba Shared Repository
More information about the samba-cvs
mailing list