@@ -155,9 +155,9 @@ void sinsp_threadinfo::init()
155155 m_exe_ino_ctime_duration_clone_ts = 0 ;
156156 m_exe_ino_ctime_duration_pidns_start = 0 ;
157157
158- memset (& m_user, 0 , sizeof (scap_userinfo) );
159- memset (&m_group, 0 , sizeof (scap_groupinfo) );
160- memset (&m_loginuser, 0 , sizeof (scap_userinfo) );
158+ m_user = std::make_shared<sinsp_userinfo>( );
159+ m_loginuser = std::make_shared<sinsp_userinfo>( );
160+ m_group = std::make_shared<sinsp_groupinfo>( );
161161}
162162
163163sinsp_threadinfo::~sinsp_threadinfo ()
@@ -574,19 +574,27 @@ void sinsp_threadinfo::set_user(uint32_t uid)
574574 if (!user)
575575 {
576576 auto notify = m_inspector->is_live () || m_inspector->is_syscall_plugin ();
577- user = m_inspector->m_usergroup_manager .add_user (m_container_id, m_pid, uid, m_group. gid , NULL , NULL , NULL , notify);
577+ user = m_inspector->m_usergroup_manager .add_user (m_container_id, m_pid, uid, m_group-> gid () , NULL , NULL , NULL , notify);
578578 }
579+
579580 if (user)
580581 {
581- memcpy (&m_user, user, sizeof (scap_userinfo));
582+ m_user->set_uid (user->uid );
583+ m_user->set_gid (m_group->gid ());
584+
585+ if (m_inspector->is_user_details_enabled ())
586+ {
587+ m_user->set_name (user->name , sizeof (user->name ));
588+ m_user->set_homedir (user->homedir , sizeof (user->homedir ));
589+ m_user->set_shell (user->shell , sizeof (user->shell ));
590+ }
582591 }
583592 else
584593 {
585- m_user.uid = uid;
586- m_user.gid = m_group.gid ;
587- strlcpy (m_user.name , (uid == 0 ) ? " root" : " <NA>" , sizeof (m_user.name ));
588- strlcpy (m_user.homedir , (uid == 0 ) ? " /root" : " <NA>" , sizeof (m_user.homedir ));
589- strlcpy (m_user.shell , " <NA>" , sizeof (m_user.shell ));
594+ // No need to set name/homedir/shell, the default values from
595+ // sinsp_userinfo are going to be used.
596+ m_user->set_uid (uid);
597+ m_user->set_gid (m_group->gid ());
590598 }
591599}
592600
@@ -600,30 +608,44 @@ void sinsp_threadinfo::set_group(uint32_t gid)
600608 }
601609 if (group)
602610 {
603- memcpy (&m_group, group, sizeof (scap_groupinfo));
611+ m_group->set_gid (group->gid );
612+
613+ if (m_inspector->is_user_details_enabled ())
614+ {
615+ m_group->set_name (group->name , sizeof (group->name ));
616+ }
604617 }
605618 else
606619 {
607- m_group.gid = gid;
608- strlcpy (m_group.name , (gid == 0 ) ? " root" : " <NA>" , sizeof (m_group.name ));
620+ // No need to set name/homedir/shell, the default values from
621+ // sinsp_userinfo are going to be used.
622+ m_group->set_gid (gid);
609623 }
610- m_user. gid = m_group. gid ;
624+ m_user-> set_gid ( m_group-> gid ()) ;
611625}
612626
613627void sinsp_threadinfo::set_loginuser (uint32_t loginuid)
614628{
615629 scap_userinfo *login_user = m_inspector->m_usergroup_manager .get_user (m_container_id, loginuid);
630+
616631 if (login_user)
617632 {
618- memcpy (&m_loginuser, login_user, sizeof (scap_userinfo));
633+ m_loginuser->set_uid (login_user->uid );
634+ m_loginuser->set_gid (m_group->gid ());
635+
636+ if (m_inspector->is_user_details_enabled ())
637+ {
638+ m_loginuser->set_name (login_user->name , sizeof (login_user->name ));
639+ m_loginuser->set_homedir (login_user->homedir , sizeof (login_user->homedir ));
640+ m_loginuser->set_shell (login_user->shell , sizeof (login_user->shell ));
641+ }
619642 }
620643 else
621644 {
622- m_loginuser.uid = loginuid;
623- m_loginuser.gid = m_group.gid ;
624- strlcpy (m_loginuser.name , loginuid == 0 ? " root" : " <NA>" , sizeof (m_loginuser.name ));
625- strlcpy (m_loginuser.homedir , loginuid == 0 ? " /root" : " <NA>" , sizeof (m_loginuser.homedir ));
626- strlcpy (m_loginuser.shell , " <NA>" , sizeof (m_loginuser.shell ));
645+ // No need to set name/homedir/shell, the default values from
646+ // sinsp_userinfo are going to be used.
647+ m_loginuser->set_uid (loginuid);
648+ m_loginuser->set_gid (m_group->gid ());
627649 }
628650}
629651
@@ -1945,8 +1967,8 @@ void sinsp_thread_manager::thread_to_scap(sinsp_threadinfo& tinfo, scap_threadi
19451967
19461968 sctinfo->flags = tinfo.m_flags ;
19471969 sctinfo->fdlimit = tinfo.m_fdlimit ;
1948- sctinfo->uid = tinfo.m_user . uid ;
1949- sctinfo->gid = tinfo.m_group . gid ;
1970+ sctinfo->uid = tinfo.m_user -> uid () ;
1971+ sctinfo->gid = tinfo.m_group -> gid () ;
19501972 sctinfo->vmsize_kb = tinfo.m_vmsize_kb ;
19511973 sctinfo->vmrss_kb = tinfo.m_vmrss_kb ;
19521974 sctinfo->vmswap_kb = tinfo.m_vmswap_kb ;
@@ -1955,7 +1977,7 @@ void sinsp_thread_manager::thread_to_scap(sinsp_threadinfo& tinfo, scap_threadi
19551977 sctinfo->vtid = tinfo.m_vtid ;
19561978 sctinfo->vpid = tinfo.m_vpid ;
19571979 sctinfo->fdlist = NULL ;
1958- sctinfo->loginuid = tinfo.m_loginuser . uid ;
1980+ sctinfo->loginuid = tinfo.m_loginuser -> uid () ;
19591981 sctinfo->filtered_out = false ;
19601982}
19611983
@@ -2181,9 +2203,9 @@ threadinfo_map_t::ptr_t sinsp_thread_manager::get_thread_ref(int64_t tid, bool q
21812203 newti->m_not_expired_children = 0 ;
21822204 newti->m_comm = " <NA>" ;
21832205 newti->m_exe = " <NA>" ;
2184- newti->m_user . uid = 0xffffffff ;
2185- newti->m_group . gid = 0xffffffff ;
2186- newti->m_loginuser . uid = 0xffffffff ;
2206+ newti->m_user -> set_uid ( 0xffffffff ) ;
2207+ newti->m_group -> set_gid ( 0xffffffff ) ;
2208+ newti->m_loginuser -> set_uid ( 0xffffffff ) ;
21872209 }
21882210
21892211 //
0 commit comments