* cygheap.h (enum cygheap_pwdgrp::cache_t): Remove.
(cygheap_pwdgrp::caching): Convert to bool. (cygheap_pwdgrp::pwd_cache): Add cygserver member. (cygheap_pwdgrp::grp_cache): Ditto. (cygheap_pwdgrp::nss_db_caching): Drop. (cygheap_pwdgrp::nss_db_full_caching): Drop. (cygheap_pwdgrp::nss_cygserver_caching): New method. (cygheap_pwdgrp::nss_disable_cygserver_caching): New method. * cygserver.h (client_request::request_code_t): Add CYGSERVER_REQUEST_PWDGRP. * cygserver_pwdgrp.h: New file. * cygtls.h (struct _local_storage): Remove pwbuf and grbuf members. * grp.cc (pwdgrp::prep_tls_grbuf): Drop. (internal_getgrsid): Handle cygserver caching and rearrange to check the caches first. (internal_getgrnam): Ditto. (internal_getgrgid): Ditto. (gr_ent::enumerate_caches): Handle cygserver cache. * passwd.cc (pwdgrp::prep_tls_pwbuf): Drop. (internal_getpwsid): Handle cygserver caching and rearrange to check the caches first. (internal_getpwnam): Ditto. (internal_getpwuid): Ditto. (pw_ent::enumerate_caches): Handle cygserver cache. * pwdgrp.h (pwdgrp::add_account_from_cygserver): New method declaration. (pwdgrp::fetch_account_from_cygserver): New method declaration. (pwdgrp::prep_tls_pwbuf): Drop declaration. (pwdgrp::prep_tls_grbuf): Drop declaration. (pwdgrp::add_user_from_cygserver): New inline methods. (pwdgrp::add_group_from_cygserver): New inline methods. * tlsoffsets.h: Regenerate. * tlsoffsets64.h: Regenerate. * uinfo.cc (internal_getlogin): Call internal_getgroups if cygserver caching is not available. (cygheap_pwdgrp::init): Initialize pwd_cache.cygserver and grp_cache.cygserver. Set caching to true. (cygheap_pwdgrp::nss_init_line): Drop db_cache handling entirely. (pwdgrp::add_account_from_windows): Drop no caching handling. (client_request_pwdgrp::client_request_pwdgrp): New method. (pwdgrp::fetch_account_from_cygserver): New method. (pwdgrp::add_account_from_cygserver): New method. * fhandler_disk_file.cc (fhandler_base::fstat_helper): Fix formatting. * include/sys/cygwin.h: Ditto.
This commit is contained in:
parent
681bb2f78a
commit
29b7313d22
|
@ -1,3 +1,50 @@
|
|||
2014-03-12 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* cygheap.h (enum cygheap_pwdgrp::cache_t): Remove.
|
||||
(cygheap_pwdgrp::caching): Convert to bool.
|
||||
(cygheap_pwdgrp::pwd_cache): Add cygserver member.
|
||||
(cygheap_pwdgrp::grp_cache): Ditto.
|
||||
(cygheap_pwdgrp::nss_db_caching): Drop.
|
||||
(cygheap_pwdgrp::nss_db_full_caching): Drop.
|
||||
(cygheap_pwdgrp::nss_cygserver_caching): New method.
|
||||
(cygheap_pwdgrp::nss_disable_cygserver_caching): New method.
|
||||
* cygserver.h (client_request::request_code_t): Add
|
||||
CYGSERVER_REQUEST_PWDGRP.
|
||||
* cygserver_pwdgrp.h: New file.
|
||||
* cygtls.h (struct _local_storage): Remove pwbuf and grbuf members.
|
||||
* grp.cc (pwdgrp::prep_tls_grbuf): Drop.
|
||||
(internal_getgrsid): Handle cygserver caching and rearrange to check
|
||||
the caches first.
|
||||
(internal_getgrnam): Ditto.
|
||||
(internal_getgrgid): Ditto.
|
||||
(gr_ent::enumerate_caches): Handle cygserver cache.
|
||||
* passwd.cc (pwdgrp::prep_tls_pwbuf): Drop.
|
||||
(internal_getpwsid): Handle cygserver caching and rearrange to check
|
||||
the caches first.
|
||||
(internal_getpwnam): Ditto.
|
||||
(internal_getpwuid): Ditto.
|
||||
(pw_ent::enumerate_caches): Handle cygserver cache.
|
||||
* pwdgrp.h (pwdgrp::add_account_from_cygserver): New method declaration.
|
||||
(pwdgrp::fetch_account_from_cygserver): New method declaration.
|
||||
(pwdgrp::prep_tls_pwbuf): Drop declaration.
|
||||
(pwdgrp::prep_tls_grbuf): Drop declaration.
|
||||
(pwdgrp::add_user_from_cygserver): New inline methods.
|
||||
(pwdgrp::add_group_from_cygserver): New inline methods.
|
||||
* tlsoffsets.h: Regenerate.
|
||||
* tlsoffsets64.h: Regenerate.
|
||||
* uinfo.cc (internal_getlogin): Call internal_getgroups if cygserver
|
||||
caching is not available.
|
||||
(cygheap_pwdgrp::init): Initialize pwd_cache.cygserver and
|
||||
grp_cache.cygserver. Set caching to true.
|
||||
(cygheap_pwdgrp::nss_init_line): Drop db_cache handling entirely.
|
||||
(pwdgrp::add_account_from_windows): Drop no caching handling.
|
||||
(client_request_pwdgrp::client_request_pwdgrp): New method.
|
||||
(pwdgrp::fetch_account_from_cygserver): New method.
|
||||
(pwdgrp::add_account_from_cygserver): New method.
|
||||
|
||||
* fhandler_disk_file.cc (fhandler_base::fstat_helper): Fix formatting.
|
||||
* include/sys/cygwin.h: Ditto.
|
||||
|
||||
2014-03-12 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* uinfo.cc (pwdgrp::fetch_account_from_windows): Avoid crash on
|
||||
|
|
|
@ -400,17 +400,12 @@ class cygheap_pwdgrp
|
|||
NSS_PRIMARY,
|
||||
NSS_ALWAYS
|
||||
};
|
||||
enum cache_t {
|
||||
NSS_NO_CACHING = 0,
|
||||
NSS_CACHING,
|
||||
NSS_FULL_CACHING
|
||||
};
|
||||
bool nss_inited;
|
||||
int pwd_src;
|
||||
int grp_src;
|
||||
pfx_t prefix;
|
||||
WCHAR separator[2];
|
||||
cache_t caching;
|
||||
bool caching;
|
||||
int enums;
|
||||
PWCHAR enum_tdoms;
|
||||
|
||||
|
@ -419,10 +414,12 @@ class cygheap_pwdgrp
|
|||
|
||||
public:
|
||||
struct {
|
||||
pwdgrp cygserver;
|
||||
pwdgrp file;
|
||||
pwdgrp win;
|
||||
} pwd_cache;
|
||||
struct {
|
||||
pwdgrp cygserver;
|
||||
pwdgrp file;
|
||||
pwdgrp win;
|
||||
} grp_cache;
|
||||
|
@ -438,9 +435,8 @@ public:
|
|||
inline bool nss_prefix_primary () const { return prefix == NSS_PRIMARY; }
|
||||
inline bool nss_prefix_always () const { return prefix == NSS_ALWAYS; }
|
||||
inline PCWSTR nss_separator () const { return separator; }
|
||||
inline bool nss_db_caching () const { return caching != NSS_NO_CACHING; }
|
||||
inline bool nss_db_full_caching () const
|
||||
{ return caching == NSS_FULL_CACHING; }
|
||||
inline bool nss_cygserver_caching () const { return caching; }
|
||||
inline void nss_disable_cygserver_caching () { caching = false; }
|
||||
inline int nss_db_enums () const { return enums; }
|
||||
inline PCWSTR nss_db_enum_tdoms () const { return enum_tdoms; }
|
||||
};
|
||||
|
|
|
@ -52,6 +52,7 @@ protected:
|
|||
CYGSERVER_REQUEST_SEM,
|
||||
CYGSERVER_REQUEST_SHM,
|
||||
CYGSERVER_REQUEST_SETPWD,
|
||||
CYGSERVER_REQUEST_PWDGRP,
|
||||
CYGSERVER_REQUEST_LAST
|
||||
} request_code_t;
|
||||
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
/* cygserver_pwdgrp.h: Request account information
|
||||
|
||||
Copyright 2014 Red Hat, Inc.
|
||||
|
||||
This file is part of Cygwin.
|
||||
|
||||
This software is a copyrighted work licensed under the terms of the
|
||||
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
|
||||
details. */
|
||||
|
||||
#ifndef __CYGSERVER_PWDGRP_H__
|
||||
#define __CYGSERVER_PWDGRP_H__
|
||||
|
||||
#include <sys/types.h>
|
||||
#include "cygserver.h"
|
||||
|
||||
class transport_layer_base;
|
||||
class process_cache;
|
||||
|
||||
#ifdef __INSIDE_CYGWIN__
|
||||
#include "pwdgrp.h"
|
||||
#else
|
||||
/* Don't include pwdgrp.h, but keep this in sync. */
|
||||
enum fetch_user_arg_type_t {
|
||||
SID_arg,
|
||||
NAME_arg,
|
||||
ID_arg
|
||||
};
|
||||
#endif
|
||||
|
||||
class client_request_pwdgrp : public client_request
|
||||
{
|
||||
friend class client_request;
|
||||
|
||||
private:
|
||||
union _pwdgrp_param_t
|
||||
{
|
||||
struct _pwdgrp_in_t
|
||||
{
|
||||
bool group;
|
||||
fetch_user_arg_type_t type;
|
||||
union
|
||||
{
|
||||
BYTE sid[40];
|
||||
char name[UNLEN + 1];
|
||||
uint32_t id;
|
||||
} arg;
|
||||
} in;
|
||||
|
||||
struct
|
||||
{
|
||||
char line[1024];
|
||||
} out;
|
||||
} _parameters;
|
||||
|
||||
#ifndef __INSIDE_CYGWIN__
|
||||
client_request_pwdgrp ();
|
||||
virtual void serve (transport_layer_base *, process_cache *);
|
||||
void pwd_serve ();
|
||||
void grp_serve ();
|
||||
#endif
|
||||
|
||||
public:
|
||||
|
||||
#ifdef __INSIDE_CYGWIN__
|
||||
client_request_pwdgrp (fetch_user_arg_t &arg, bool group);
|
||||
#endif
|
||||
|
||||
const char *line () const { return (msglen () > 0) ? _parameters.out.line
|
||||
: NULL; }
|
||||
};
|
||||
|
||||
#endif /* __CYGSERVER_PWDGRP_H__ */
|
|
@ -80,12 +80,8 @@ public:
|
|||
struct _local_storage
|
||||
{
|
||||
/* passwd.cc */
|
||||
void *pwbuf;
|
||||
char pass[_PASSWORD_LEN];
|
||||
|
||||
/* grp.cc */
|
||||
void *grbuf;
|
||||
|
||||
/* dlfcn.cc */
|
||||
int dl_error;
|
||||
char dl_buffer[256];
|
||||
|
|
|
@ -534,8 +534,7 @@ fhandler_base::fstat_fs (struct stat *buf)
|
|||
}
|
||||
|
||||
int __reg3
|
||||
fhandler_base::fstat_helper (struct stat *buf,
|
||||
DWORD nNumberOfLinks)
|
||||
fhandler_base::fstat_helper (struct stat *buf, DWORD nNumberOfLinks)
|
||||
{
|
||||
IO_STATUS_BLOCK st;
|
||||
FILE_COMPRESSION_INFORMATION fci;
|
||||
|
|
|
@ -68,27 +68,6 @@ pwdgrp::init_grp ()
|
|||
parse = &pwdgrp::parse_group;
|
||||
}
|
||||
|
||||
pwdgrp *
|
||||
pwdgrp::prep_tls_grbuf ()
|
||||
{
|
||||
if (!_my_tls.locals.grbuf)
|
||||
{
|
||||
_my_tls.locals.grbuf = ccalloc_abort (HEAP_BUF, 1,
|
||||
sizeof (pwdgrp) + sizeof (pg_grp));
|
||||
pwdgrp *gr = (pwdgrp *) _my_tls.locals.grbuf;
|
||||
gr->init_grp ();
|
||||
gr->pwdgrp_buf = (void *) (gr + 1);
|
||||
gr->max_lines = 1;
|
||||
}
|
||||
pwdgrp *gr = (pwdgrp *) _my_tls.locals.grbuf;
|
||||
if (gr->curr_lines)
|
||||
{
|
||||
cfree (gr->group ()[0].g.gr_name);
|
||||
gr->curr_lines = 0;
|
||||
}
|
||||
return gr;
|
||||
}
|
||||
|
||||
struct group *
|
||||
pwdgrp::find_group (cygpsid &sid)
|
||||
{
|
||||
|
@ -122,20 +101,28 @@ internal_getgrsid (cygpsid &sid, cyg_ldap *pldap)
|
|||
struct group *ret;
|
||||
|
||||
cygheap->pg.nss_init ();
|
||||
/* Check caches first. */
|
||||
if (cygheap->pg.nss_cygserver_caching ()
|
||||
&& (ret = cygheap->pg.grp_cache.cygserver.find_group (sid)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_grp_files ()
|
||||
&& (ret = cygheap->pg.grp_cache.file.find_group (sid)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_grp_db ()
|
||||
&& (ret = cygheap->pg.grp_cache.win.find_group (sid)))
|
||||
return ret;
|
||||
/* Ask sources afterwards. */
|
||||
if (cygheap->pg.nss_cygserver_caching ()
|
||||
&& (ret = cygheap->pg.grp_cache.cygserver.add_group_from_cygserver (sid)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_grp_files ())
|
||||
{
|
||||
cygheap->pg.grp_cache.file.check_file ();
|
||||
if ((ret = cygheap->pg.grp_cache.file.find_group (sid)))
|
||||
return ret;
|
||||
if ((ret = cygheap->pg.grp_cache.file.add_group_from_file (sid)))
|
||||
return ret;
|
||||
}
|
||||
if (cygheap->pg.nss_grp_db ())
|
||||
{
|
||||
if ((ret = cygheap->pg.grp_cache.win.find_group (sid)))
|
||||
return ret;
|
||||
return cygheap->pg.grp_cache.win.add_group_from_windows (sid, pldap);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -153,20 +140,28 @@ internal_getgrnam (const char *name, cyg_ldap *pldap)
|
|||
struct group *ret;
|
||||
|
||||
cygheap->pg.nss_init ();
|
||||
/* Check caches first. */
|
||||
if (cygheap->pg.nss_cygserver_caching ()
|
||||
&& (ret = cygheap->pg.grp_cache.cygserver.find_group (name)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_grp_files ()
|
||||
&& (ret = cygheap->pg.grp_cache.file.find_group (name)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_grp_db ()
|
||||
&& (ret = cygheap->pg.grp_cache.win.find_group (name)))
|
||||
return ret;
|
||||
/* Ask sources afterwards. */
|
||||
if (cygheap->pg.nss_cygserver_caching ()
|
||||
&& (ret = cygheap->pg.grp_cache.cygserver.add_group_from_cygserver (name)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_grp_files ())
|
||||
{
|
||||
cygheap->pg.grp_cache.file.check_file ();
|
||||
if ((ret = cygheap->pg.grp_cache.file.find_group (name)))
|
||||
return ret;
|
||||
if ((ret = cygheap->pg.grp_cache.file.add_group_from_file (name)))
|
||||
return ret;
|
||||
}
|
||||
if (cygheap->pg.nss_grp_db ())
|
||||
{
|
||||
if ((ret = cygheap->pg.grp_cache.win.find_group (name)))
|
||||
return ret;
|
||||
return cygheap->pg.grp_cache.win.add_group_from_windows (name, pldap);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -176,21 +171,27 @@ internal_getgrgid (gid_t gid, cyg_ldap *pldap)
|
|||
struct group *ret;
|
||||
|
||||
cygheap->pg.nss_init ();
|
||||
/* Check caches first. */
|
||||
if (cygheap->pg.nss_cygserver_caching ()
|
||||
&& (ret = cygheap->pg.grp_cache.cygserver.find_group (gid)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_grp_files ()
|
||||
&& (ret = cygheap->pg.grp_cache.file.find_group (gid)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_grp_db ()
|
||||
&& (ret = cygheap->pg.grp_cache.win.find_group (gid)))
|
||||
return ret;
|
||||
/* Ask sources afterwards. */
|
||||
if (cygheap->pg.nss_cygserver_caching ()
|
||||
&& (ret = cygheap->pg.grp_cache.cygserver.add_group_from_cygserver (gid)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_grp_files ())
|
||||
{
|
||||
cygheap->pg.grp_cache.file.check_file ();
|
||||
if ((ret = cygheap->pg.grp_cache.file.find_group (gid)))
|
||||
return ret;
|
||||
if ((ret = cygheap->pg.grp_cache.file.add_group_from_file (gid)))
|
||||
return ret;
|
||||
}
|
||||
if (cygheap->pg.nss_grp_db ())
|
||||
{
|
||||
if ((ret = cygheap->pg.grp_cache.win.find_group (gid)))
|
||||
return ret;
|
||||
return cygheap->pg.grp_cache.win.add_group_from_windows (gid);
|
||||
}
|
||||
else if (gid == ILLEGAL_GID)
|
||||
if (cygheap->pg.nss_grp_db () || gid == ILLEGAL_GID)
|
||||
return cygheap->pg.grp_cache.win.add_group_from_windows (gid, pldap);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -327,21 +328,38 @@ static gr_ent grent;
|
|||
void *
|
||||
gr_ent::enumerate_caches ()
|
||||
{
|
||||
if (!max && from_files)
|
||||
switch (max)
|
||||
{
|
||||
case 0:
|
||||
if (cygheap->pg.nss_cygserver_caching ())
|
||||
{
|
||||
pwdgrp &grc = cygheap->pg.grp_cache.cygserver;
|
||||
if (cnt < grc.cached_groups ())
|
||||
return &grc.group ()[cnt++].g;
|
||||
}
|
||||
cnt = 0;
|
||||
max = 1;
|
||||
/*FALLTHRU*/
|
||||
case 1:
|
||||
if (from_files)
|
||||
{
|
||||
pwdgrp &grf = cygheap->pg.grp_cache.file;
|
||||
grf.check_file ();
|
||||
if (cnt < grf.cached_groups ())
|
||||
return &grf.group ()[cnt++].g;
|
||||
}
|
||||
cnt = 0;
|
||||
max = 1;
|
||||
}
|
||||
if (from_db && cygheap->pg.nss_db_caching ())
|
||||
/*FALLTHRU*/
|
||||
case 2:
|
||||
if (from_db)
|
||||
{
|
||||
pwdgrp &grw = cygheap->pg.grp_cache.win;
|
||||
if (cnt < grw.cached_groups ())
|
||||
return &grw.group ()[cnt++].g;
|
||||
}
|
||||
break;
|
||||
}
|
||||
cnt = max = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -51,27 +51,6 @@ pwdgrp::init_pwd ()
|
|||
parse = &pwdgrp::parse_passwd;
|
||||
}
|
||||
|
||||
pwdgrp *
|
||||
pwdgrp::prep_tls_pwbuf ()
|
||||
{
|
||||
if (!_my_tls.locals.pwbuf)
|
||||
{
|
||||
_my_tls.locals.pwbuf = ccalloc_abort (HEAP_BUF, 1,
|
||||
sizeof (pwdgrp) + sizeof (pg_pwd));
|
||||
pwdgrp *pw = (pwdgrp *) _my_tls.locals.pwbuf;
|
||||
pw->init_pwd ();
|
||||
pw->pwdgrp_buf = (void *) (pw + 1);
|
||||
pw->max_lines = 1;
|
||||
}
|
||||
pwdgrp *pw = (pwdgrp *) _my_tls.locals.pwbuf;
|
||||
if (pw->curr_lines)
|
||||
{
|
||||
cfree (pw->passwd ()[0].p.pw_name);
|
||||
pw->curr_lines = 0;
|
||||
}
|
||||
return pw;
|
||||
}
|
||||
|
||||
struct passwd *
|
||||
pwdgrp::find_user (cygpsid &sid)
|
||||
{
|
||||
|
@ -106,20 +85,28 @@ internal_getpwsid (cygpsid &sid, cyg_ldap *pldap)
|
|||
struct passwd *ret;
|
||||
|
||||
cygheap->pg.nss_init ();
|
||||
/* Check caches first. */
|
||||
if (cygheap->pg.nss_cygserver_caching ()
|
||||
&& (ret = cygheap->pg.pwd_cache.cygserver.find_user (sid)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_pwd_files ()
|
||||
&& (ret = cygheap->pg.pwd_cache.file.find_user (sid)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_pwd_db ()
|
||||
&& (ret = cygheap->pg.pwd_cache.win.find_user (sid)))
|
||||
return ret;
|
||||
/* Ask sources afterwards. */
|
||||
if (cygheap->pg.nss_cygserver_caching ()
|
||||
&& (ret = cygheap->pg.pwd_cache.cygserver.add_user_from_cygserver (sid)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_pwd_files ())
|
||||
{
|
||||
cygheap->pg.pwd_cache.file.check_file ();
|
||||
if ((ret = cygheap->pg.pwd_cache.file.find_user (sid)))
|
||||
return ret;
|
||||
if ((ret = cygheap->pg.pwd_cache.file.add_user_from_file (sid)))
|
||||
return ret;
|
||||
}
|
||||
if (cygheap->pg.nss_pwd_db ())
|
||||
{
|
||||
if ((ret = cygheap->pg.pwd_cache.win.find_user (sid)))
|
||||
return ret;
|
||||
return cygheap->pg.pwd_cache.win.add_user_from_windows (sid, pldap);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -137,20 +124,28 @@ internal_getpwnam (const char *name, cyg_ldap *pldap)
|
|||
struct passwd *ret;
|
||||
|
||||
cygheap->pg.nss_init ();
|
||||
/* Check caches first. */
|
||||
if (cygheap->pg.nss_cygserver_caching ()
|
||||
&& (ret = cygheap->pg.pwd_cache.cygserver.find_user (name)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_pwd_files ()
|
||||
&& (ret = cygheap->pg.pwd_cache.file.find_user (name)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_pwd_db ()
|
||||
&& (ret = cygheap->pg.pwd_cache.win.find_user (name)))
|
||||
return ret;
|
||||
/* Ask sources afterwards. */
|
||||
if (cygheap->pg.nss_cygserver_caching ()
|
||||
&& (ret = cygheap->pg.pwd_cache.cygserver.add_user_from_cygserver (name)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_pwd_files ())
|
||||
{
|
||||
cygheap->pg.pwd_cache.file.check_file ();
|
||||
if ((ret = cygheap->pg.pwd_cache.file.find_user (name)))
|
||||
return ret;
|
||||
if ((ret = cygheap->pg.pwd_cache.file.add_user_from_file (name)))
|
||||
return ret;
|
||||
}
|
||||
if (cygheap->pg.nss_pwd_db ())
|
||||
{
|
||||
if ((ret = cygheap->pg.pwd_cache.win.find_user (name)))
|
||||
return ret;
|
||||
return cygheap->pg.pwd_cache.win.add_user_from_windows (name, pldap);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -160,22 +155,28 @@ internal_getpwuid (uid_t uid, cyg_ldap *pldap)
|
|||
struct passwd *ret;
|
||||
|
||||
cygheap->pg.nss_init ();
|
||||
/* Check caches first. */
|
||||
if (cygheap->pg.nss_cygserver_caching ()
|
||||
&& (ret = cygheap->pg.pwd_cache.cygserver.find_user (uid)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_pwd_files ()
|
||||
&& (ret = cygheap->pg.pwd_cache.file.find_user (uid)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_pwd_db ()
|
||||
&& (ret = cygheap->pg.pwd_cache.win.find_user (uid)))
|
||||
return ret;
|
||||
/* Ask sources afterwards. */
|
||||
if (cygheap->pg.nss_cygserver_caching ()
|
||||
&& (ret = cygheap->pg.pwd_cache.cygserver.add_user_from_cygserver (uid)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_pwd_files ())
|
||||
{
|
||||
cygheap->pg.pwd_cache.file.check_file ();
|
||||
if ((ret = cygheap->pg.pwd_cache.file.find_user (uid)))
|
||||
return ret;
|
||||
if ((ret = cygheap->pg.pwd_cache.file.add_user_from_file (uid)))
|
||||
return ret;
|
||||
}
|
||||
if (cygheap->pg.nss_pwd_db ())
|
||||
{
|
||||
if ((ret = cygheap->pg.pwd_cache.win.find_user (uid)))
|
||||
return ret;
|
||||
if (cygheap->pg.nss_pwd_db () || uid == ILLEGAL_UID)
|
||||
return cygheap->pg.pwd_cache.win.add_user_from_windows (uid, pldap);
|
||||
}
|
||||
else if (uid == ILLEGAL_UID)
|
||||
return cygheap->pg.pwd_cache.win.add_user_from_windows (uid);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -596,21 +597,38 @@ pg_ent::enumerate_ad ()
|
|||
void *
|
||||
pw_ent::enumerate_caches ()
|
||||
{
|
||||
if (!max && from_files)
|
||||
switch (max)
|
||||
{
|
||||
case 0:
|
||||
if (cygheap->pg.nss_cygserver_caching ())
|
||||
{
|
||||
pwdgrp &prc = cygheap->pg.pwd_cache.cygserver;
|
||||
if (cnt < prc.cached_users ())
|
||||
return &prc.passwd ()[cnt++].p;
|
||||
}
|
||||
cnt = 0;
|
||||
max = 1;
|
||||
/*FALLTHRU*/
|
||||
case 1:
|
||||
if (from_files)
|
||||
{
|
||||
pwdgrp &prf = cygheap->pg.pwd_cache.file;
|
||||
prf.check_file ();
|
||||
if (cnt < prf.cached_users ())
|
||||
return &prf.passwd ()[cnt++].p;
|
||||
cnt = 0;
|
||||
max = 1;
|
||||
}
|
||||
if (from_db && cygheap->pg.nss_db_caching ())
|
||||
cnt = 0;
|
||||
max = 2;
|
||||
/*FALLTHRU*/
|
||||
default:
|
||||
if (from_db)
|
||||
{
|
||||
pwdgrp &prw = cygheap->pg.pwd_cache.win;
|
||||
if (cnt < prw.cached_users ())
|
||||
return &prw.passwd ()[cnt++].p;
|
||||
}
|
||||
break;
|
||||
}
|
||||
cnt = max = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -111,12 +111,14 @@ class pwdgrp
|
|||
void *add_account_from_windows (cygpsid &sid, cyg_ldap *pldap = NULL);
|
||||
void *add_account_from_windows (const char *name, cyg_ldap *pldap = NULL);
|
||||
void *add_account_from_windows (uint32_t id, cyg_ldap *pldap = NULL);
|
||||
void *add_account_from_cygserver (cygpsid &sid);
|
||||
void *add_account_from_cygserver (const char *name);
|
||||
void *add_account_from_cygserver (uint32_t id);
|
||||
char *fetch_account_from_line (fetch_user_arg_t &arg, const char *line);
|
||||
char *fetch_account_from_file (fetch_user_arg_t &arg);
|
||||
char *fetch_account_from_windows (fetch_user_arg_t &arg,
|
||||
cyg_ldap *pldap = NULL);
|
||||
pwdgrp *prep_tls_pwbuf ();
|
||||
pwdgrp *prep_tls_grbuf ();
|
||||
char *fetch_account_from_cygserver (fetch_user_arg_t &arg);
|
||||
|
||||
public:
|
||||
ULONG cached_users () const { return curr_lines; }
|
||||
|
@ -127,7 +129,13 @@ public:
|
|||
void init_pwd ();
|
||||
bool is_passwd () const { return pwdgrp_buf_elem_size == sizeof (pg_pwd); }
|
||||
pg_pwd *passwd () const { return (pg_pwd *) pwdgrp_buf; };
|
||||
inline struct passwd *add_user_from_file (cygpsid &sid)
|
||||
struct passwd *add_user_from_cygserver (cygpsid &sid)
|
||||
{ return (struct passwd *) add_account_from_cygserver (sid); }
|
||||
struct passwd *add_user_from_cygserver (const char *name)
|
||||
{ return (struct passwd *) add_account_from_cygserver (name); }
|
||||
struct passwd *add_user_from_cygserver (uint32_t id)
|
||||
{ return (struct passwd *) add_account_from_cygserver (id); }
|
||||
struct passwd *add_user_from_file (cygpsid &sid)
|
||||
{ return (struct passwd *) add_account_from_file (sid); }
|
||||
struct passwd *add_user_from_file (const char *name)
|
||||
{ return (struct passwd *) add_account_from_file (name); }
|
||||
|
@ -147,6 +155,12 @@ public:
|
|||
void init_grp ();
|
||||
bool is_group () const { return pwdgrp_buf_elem_size == sizeof (pg_grp); }
|
||||
pg_grp *group () const { return (pg_grp *) pwdgrp_buf; };
|
||||
struct group *add_group_from_cygserver (cygpsid &sid)
|
||||
{ return (struct group *) add_account_from_cygserver (sid); }
|
||||
struct group *add_group_from_cygserver (const char *name)
|
||||
{ return (struct group *) add_account_from_cygserver (name); }
|
||||
struct group *add_group_from_cygserver (uint32_t id)
|
||||
{ return (struct group *) add_account_from_cygserver (id); }
|
||||
struct group *add_group_from_file (cygpsid &sid)
|
||||
{ return (struct group *) add_account_from_file (sid); }
|
||||
struct group *add_group_from_file (const char *name)
|
||||
|
|
|
@ -3,115 +3,115 @@
|
|||
//; $tls::start_offset = -12700;
|
||||
//; $tls::locals = -12700;
|
||||
//; $tls::plocals = 0;
|
||||
//; $tls::local_clib = -11292;
|
||||
//; $tls::plocal_clib = 1408;
|
||||
//; $tls::__dontuse = -11292;
|
||||
//; $tls::p__dontuse = 1408;
|
||||
//; $tls::func = -10204;
|
||||
//; $tls::pfunc = 2496;
|
||||
//; $tls::saved_errno = -10200;
|
||||
//; $tls::psaved_errno = 2500;
|
||||
//; $tls::sa_flags = -10196;
|
||||
//; $tls::psa_flags = 2504;
|
||||
//; $tls::oldmask = -10192;
|
||||
//; $tls::poldmask = 2508;
|
||||
//; $tls::deltamask = -10188;
|
||||
//; $tls::pdeltamask = 2512;
|
||||
//; $tls::errno_addr = -10184;
|
||||
//; $tls::perrno_addr = 2516;
|
||||
//; $tls::sigmask = -10180;
|
||||
//; $tls::psigmask = 2520;
|
||||
//; $tls::sigwait_mask = -10176;
|
||||
//; $tls::psigwait_mask = 2524;
|
||||
//; $tls::sigwait_info = -10172;
|
||||
//; $tls::psigwait_info = 2528;
|
||||
//; $tls::signal_arrived = -10168;
|
||||
//; $tls::psignal_arrived = 2532;
|
||||
//; $tls::will_wait_for_signal = -10164;
|
||||
//; $tls::pwill_wait_for_signal = 2536;
|
||||
//; $tls::thread_context = -10160;
|
||||
//; $tls::pthread_context = 2540;
|
||||
//; $tls::thread_id = -9948;
|
||||
//; $tls::pthread_id = 2752;
|
||||
//; $tls::infodata = -9944;
|
||||
//; $tls::pinfodata = 2756;
|
||||
//; $tls::tid = -9796;
|
||||
//; $tls::ptid = 2904;
|
||||
//; $tls::_ctinfo = -9792;
|
||||
//; $tls::p_ctinfo = 2908;
|
||||
//; $tls::andreas = -9788;
|
||||
//; $tls::pandreas = 2912;
|
||||
//; $tls::wq = -9784;
|
||||
//; $tls::pwq = 2916;
|
||||
//; $tls::sig = -9756;
|
||||
//; $tls::psig = 2944;
|
||||
//; $tls::incyg = -9752;
|
||||
//; $tls::pincyg = 2948;
|
||||
//; $tls::spinning = -9748;
|
||||
//; $tls::pspinning = 2952;
|
||||
//; $tls::stacklock = -9744;
|
||||
//; $tls::pstacklock = 2956;
|
||||
//; $tls::stackptr = -9740;
|
||||
//; $tls::pstackptr = 2960;
|
||||
//; $tls::stack = -9736;
|
||||
//; $tls::pstack = 2964;
|
||||
//; $tls::initialized = -8712;
|
||||
//; $tls::pinitialized = 3988;
|
||||
//; $tls::local_clib = -11300;
|
||||
//; $tls::plocal_clib = 1400;
|
||||
//; $tls::__dontuse = -11300;
|
||||
//; $tls::p__dontuse = 1400;
|
||||
//; $tls::func = -10212;
|
||||
//; $tls::pfunc = 2488;
|
||||
//; $tls::saved_errno = -10208;
|
||||
//; $tls::psaved_errno = 2492;
|
||||
//; $tls::sa_flags = -10204;
|
||||
//; $tls::psa_flags = 2496;
|
||||
//; $tls::oldmask = -10200;
|
||||
//; $tls::poldmask = 2500;
|
||||
//; $tls::deltamask = -10196;
|
||||
//; $tls::pdeltamask = 2504;
|
||||
//; $tls::errno_addr = -10192;
|
||||
//; $tls::perrno_addr = 2508;
|
||||
//; $tls::sigmask = -10188;
|
||||
//; $tls::psigmask = 2512;
|
||||
//; $tls::sigwait_mask = -10184;
|
||||
//; $tls::psigwait_mask = 2516;
|
||||
//; $tls::sigwait_info = -10180;
|
||||
//; $tls::psigwait_info = 2520;
|
||||
//; $tls::signal_arrived = -10176;
|
||||
//; $tls::psignal_arrived = 2524;
|
||||
//; $tls::will_wait_for_signal = -10172;
|
||||
//; $tls::pwill_wait_for_signal = 2528;
|
||||
//; $tls::thread_context = -10168;
|
||||
//; $tls::pthread_context = 2532;
|
||||
//; $tls::thread_id = -9956;
|
||||
//; $tls::pthread_id = 2744;
|
||||
//; $tls::infodata = -9952;
|
||||
//; $tls::pinfodata = 2748;
|
||||
//; $tls::tid = -9804;
|
||||
//; $tls::ptid = 2896;
|
||||
//; $tls::_ctinfo = -9800;
|
||||
//; $tls::p_ctinfo = 2900;
|
||||
//; $tls::andreas = -9796;
|
||||
//; $tls::pandreas = 2904;
|
||||
//; $tls::wq = -9792;
|
||||
//; $tls::pwq = 2908;
|
||||
//; $tls::sig = -9764;
|
||||
//; $tls::psig = 2936;
|
||||
//; $tls::incyg = -9760;
|
||||
//; $tls::pincyg = 2940;
|
||||
//; $tls::spinning = -9756;
|
||||
//; $tls::pspinning = 2944;
|
||||
//; $tls::stacklock = -9752;
|
||||
//; $tls::pstacklock = 2948;
|
||||
//; $tls::stackptr = -9748;
|
||||
//; $tls::pstackptr = 2952;
|
||||
//; $tls::stack = -9744;
|
||||
//; $tls::pstack = 2956;
|
||||
//; $tls::initialized = -8720;
|
||||
//; $tls::pinitialized = 3980;
|
||||
//; __DATA__
|
||||
|
||||
#define tls_locals (-12700)
|
||||
#define tls_plocals (0)
|
||||
#define tls_local_clib (-11292)
|
||||
#define tls_plocal_clib (1408)
|
||||
#define tls___dontuse (-11292)
|
||||
#define tls_p__dontuse (1408)
|
||||
#define tls_func (-10204)
|
||||
#define tls_pfunc (2496)
|
||||
#define tls_saved_errno (-10200)
|
||||
#define tls_psaved_errno (2500)
|
||||
#define tls_sa_flags (-10196)
|
||||
#define tls_psa_flags (2504)
|
||||
#define tls_oldmask (-10192)
|
||||
#define tls_poldmask (2508)
|
||||
#define tls_deltamask (-10188)
|
||||
#define tls_pdeltamask (2512)
|
||||
#define tls_errno_addr (-10184)
|
||||
#define tls_perrno_addr (2516)
|
||||
#define tls_sigmask (-10180)
|
||||
#define tls_psigmask (2520)
|
||||
#define tls_sigwait_mask (-10176)
|
||||
#define tls_psigwait_mask (2524)
|
||||
#define tls_sigwait_info (-10172)
|
||||
#define tls_psigwait_info (2528)
|
||||
#define tls_signal_arrived (-10168)
|
||||
#define tls_psignal_arrived (2532)
|
||||
#define tls_will_wait_for_signal (-10164)
|
||||
#define tls_pwill_wait_for_signal (2536)
|
||||
#define tls_thread_context (-10160)
|
||||
#define tls_pthread_context (2540)
|
||||
#define tls_thread_id (-9948)
|
||||
#define tls_pthread_id (2752)
|
||||
#define tls_infodata (-9944)
|
||||
#define tls_pinfodata (2756)
|
||||
#define tls_tid (-9796)
|
||||
#define tls_ptid (2904)
|
||||
#define tls__ctinfo (-9792)
|
||||
#define tls_p_ctinfo (2908)
|
||||
#define tls_andreas (-9788)
|
||||
#define tls_pandreas (2912)
|
||||
#define tls_wq (-9784)
|
||||
#define tls_pwq (2916)
|
||||
#define tls_sig (-9756)
|
||||
#define tls_psig (2944)
|
||||
#define tls_incyg (-9752)
|
||||
#define tls_pincyg (2948)
|
||||
#define tls_spinning (-9748)
|
||||
#define tls_pspinning (2952)
|
||||
#define tls_stacklock (-9744)
|
||||
#define tls_pstacklock (2956)
|
||||
#define tls_stackptr (-9740)
|
||||
#define tls_pstackptr (2960)
|
||||
#define tls_stack (-9736)
|
||||
#define tls_pstack (2964)
|
||||
#define tls_initialized (-8712)
|
||||
#define tls_pinitialized (3988)
|
||||
#define tls_local_clib (-11300)
|
||||
#define tls_plocal_clib (1400)
|
||||
#define tls___dontuse (-11300)
|
||||
#define tls_p__dontuse (1400)
|
||||
#define tls_func (-10212)
|
||||
#define tls_pfunc (2488)
|
||||
#define tls_saved_errno (-10208)
|
||||
#define tls_psaved_errno (2492)
|
||||
#define tls_sa_flags (-10204)
|
||||
#define tls_psa_flags (2496)
|
||||
#define tls_oldmask (-10200)
|
||||
#define tls_poldmask (2500)
|
||||
#define tls_deltamask (-10196)
|
||||
#define tls_pdeltamask (2504)
|
||||
#define tls_errno_addr (-10192)
|
||||
#define tls_perrno_addr (2508)
|
||||
#define tls_sigmask (-10188)
|
||||
#define tls_psigmask (2512)
|
||||
#define tls_sigwait_mask (-10184)
|
||||
#define tls_psigwait_mask (2516)
|
||||
#define tls_sigwait_info (-10180)
|
||||
#define tls_psigwait_info (2520)
|
||||
#define tls_signal_arrived (-10176)
|
||||
#define tls_psignal_arrived (2524)
|
||||
#define tls_will_wait_for_signal (-10172)
|
||||
#define tls_pwill_wait_for_signal (2528)
|
||||
#define tls_thread_context (-10168)
|
||||
#define tls_pthread_context (2532)
|
||||
#define tls_thread_id (-9956)
|
||||
#define tls_pthread_id (2744)
|
||||
#define tls_infodata (-9952)
|
||||
#define tls_pinfodata (2748)
|
||||
#define tls_tid (-9804)
|
||||
#define tls_ptid (2896)
|
||||
#define tls__ctinfo (-9800)
|
||||
#define tls_p_ctinfo (2900)
|
||||
#define tls_andreas (-9796)
|
||||
#define tls_pandreas (2904)
|
||||
#define tls_wq (-9792)
|
||||
#define tls_pwq (2908)
|
||||
#define tls_sig (-9764)
|
||||
#define tls_psig (2936)
|
||||
#define tls_incyg (-9760)
|
||||
#define tls_pincyg (2940)
|
||||
#define tls_spinning (-9756)
|
||||
#define tls_pspinning (2944)
|
||||
#define tls_stacklock (-9752)
|
||||
#define tls_pstacklock (2948)
|
||||
#define tls_stackptr (-9748)
|
||||
#define tls_pstackptr (2952)
|
||||
#define tls_stack (-9744)
|
||||
#define tls_pstack (2956)
|
||||
#define tls_initialized (-8720)
|
||||
#define tls_pinitialized (3980)
|
||||
|
|
|
@ -3,115 +3,115 @@
|
|||
//; $tls::start_offset = -12800;
|
||||
//; $tls::locals = -12800;
|
||||
//; $tls::plocals = 0;
|
||||
//; $tls::local_clib = -11248;
|
||||
//; $tls::plocal_clib = 1552;
|
||||
//; $tls::__dontuse = -11248;
|
||||
//; $tls::p__dontuse = 1552;
|
||||
//; $tls::func = -9360;
|
||||
//; $tls::pfunc = 3440;
|
||||
//; $tls::saved_errno = -9352;
|
||||
//; $tls::psaved_errno = 3448;
|
||||
//; $tls::sa_flags = -9348;
|
||||
//; $tls::psa_flags = 3452;
|
||||
//; $tls::oldmask = -9344;
|
||||
//; $tls::poldmask = 3456;
|
||||
//; $tls::deltamask = -9336;
|
||||
//; $tls::pdeltamask = 3464;
|
||||
//; $tls::errno_addr = -9328;
|
||||
//; $tls::perrno_addr = 3472;
|
||||
//; $tls::sigmask = -9320;
|
||||
//; $tls::psigmask = 3480;
|
||||
//; $tls::sigwait_mask = -9312;
|
||||
//; $tls::psigwait_mask = 3488;
|
||||
//; $tls::sigwait_info = -9304;
|
||||
//; $tls::psigwait_info = 3496;
|
||||
//; $tls::signal_arrived = -9296;
|
||||
//; $tls::psignal_arrived = 3504;
|
||||
//; $tls::will_wait_for_signal = -9288;
|
||||
//; $tls::pwill_wait_for_signal = 3512;
|
||||
//; $tls::thread_context = -9280;
|
||||
//; $tls::pthread_context = 3520;
|
||||
//; $tls::thread_id = -8448;
|
||||
//; $tls::pthread_id = 4352;
|
||||
//; $tls::infodata = -8444;
|
||||
//; $tls::pinfodata = 4356;
|
||||
//; $tls::tid = -8296;
|
||||
//; $tls::ptid = 4504;
|
||||
//; $tls::_ctinfo = -8288;
|
||||
//; $tls::p_ctinfo = 4512;
|
||||
//; $tls::andreas = -8280;
|
||||
//; $tls::pandreas = 4520;
|
||||
//; $tls::wq = -8272;
|
||||
//; $tls::pwq = 4528;
|
||||
//; $tls::sig = -8224;
|
||||
//; $tls::psig = 4576;
|
||||
//; $tls::incyg = -8220;
|
||||
//; $tls::pincyg = 4580;
|
||||
//; $tls::spinning = -8216;
|
||||
//; $tls::pspinning = 4584;
|
||||
//; $tls::stacklock = -8212;
|
||||
//; $tls::pstacklock = 4588;
|
||||
//; $tls::stackptr = -8208;
|
||||
//; $tls::pstackptr = 4592;
|
||||
//; $tls::stack = -8200;
|
||||
//; $tls::pstack = 4600;
|
||||
//; $tls::initialized = -6152;
|
||||
//; $tls::pinitialized = 6648;
|
||||
//; $tls::local_clib = -11264;
|
||||
//; $tls::plocal_clib = 1536;
|
||||
//; $tls::__dontuse = -11264;
|
||||
//; $tls::p__dontuse = 1536;
|
||||
//; $tls::func = -9376;
|
||||
//; $tls::pfunc = 3424;
|
||||
//; $tls::saved_errno = -9368;
|
||||
//; $tls::psaved_errno = 3432;
|
||||
//; $tls::sa_flags = -9364;
|
||||
//; $tls::psa_flags = 3436;
|
||||
//; $tls::oldmask = -9360;
|
||||
//; $tls::poldmask = 3440;
|
||||
//; $tls::deltamask = -9352;
|
||||
//; $tls::pdeltamask = 3448;
|
||||
//; $tls::errno_addr = -9344;
|
||||
//; $tls::perrno_addr = 3456;
|
||||
//; $tls::sigmask = -9336;
|
||||
//; $tls::psigmask = 3464;
|
||||
//; $tls::sigwait_mask = -9328;
|
||||
//; $tls::psigwait_mask = 3472;
|
||||
//; $tls::sigwait_info = -9320;
|
||||
//; $tls::psigwait_info = 3480;
|
||||
//; $tls::signal_arrived = -9312;
|
||||
//; $tls::psignal_arrived = 3488;
|
||||
//; $tls::will_wait_for_signal = -9304;
|
||||
//; $tls::pwill_wait_for_signal = 3496;
|
||||
//; $tls::thread_context = -9296;
|
||||
//; $tls::pthread_context = 3504;
|
||||
//; $tls::thread_id = -8464;
|
||||
//; $tls::pthread_id = 4336;
|
||||
//; $tls::infodata = -8460;
|
||||
//; $tls::pinfodata = 4340;
|
||||
//; $tls::tid = -8312;
|
||||
//; $tls::ptid = 4488;
|
||||
//; $tls::_ctinfo = -8304;
|
||||
//; $tls::p_ctinfo = 4496;
|
||||
//; $tls::andreas = -8296;
|
||||
//; $tls::pandreas = 4504;
|
||||
//; $tls::wq = -8288;
|
||||
//; $tls::pwq = 4512;
|
||||
//; $tls::sig = -8240;
|
||||
//; $tls::psig = 4560;
|
||||
//; $tls::incyg = -8236;
|
||||
//; $tls::pincyg = 4564;
|
||||
//; $tls::spinning = -8232;
|
||||
//; $tls::pspinning = 4568;
|
||||
//; $tls::stacklock = -8228;
|
||||
//; $tls::pstacklock = 4572;
|
||||
//; $tls::stackptr = -8224;
|
||||
//; $tls::pstackptr = 4576;
|
||||
//; $tls::stack = -8216;
|
||||
//; $tls::pstack = 4584;
|
||||
//; $tls::initialized = -6168;
|
||||
//; $tls::pinitialized = 6632;
|
||||
//; __DATA__
|
||||
|
||||
#define tls_locals (-12800)
|
||||
#define tls_plocals (0)
|
||||
#define tls_local_clib (-11248)
|
||||
#define tls_plocal_clib (1552)
|
||||
#define tls___dontuse (-11248)
|
||||
#define tls_p__dontuse (1552)
|
||||
#define tls_func (-9360)
|
||||
#define tls_pfunc (3440)
|
||||
#define tls_saved_errno (-9352)
|
||||
#define tls_psaved_errno (3448)
|
||||
#define tls_sa_flags (-9348)
|
||||
#define tls_psa_flags (3452)
|
||||
#define tls_oldmask (-9344)
|
||||
#define tls_poldmask (3456)
|
||||
#define tls_deltamask (-9336)
|
||||
#define tls_pdeltamask (3464)
|
||||
#define tls_errno_addr (-9328)
|
||||
#define tls_perrno_addr (3472)
|
||||
#define tls_sigmask (-9320)
|
||||
#define tls_psigmask (3480)
|
||||
#define tls_sigwait_mask (-9312)
|
||||
#define tls_psigwait_mask (3488)
|
||||
#define tls_sigwait_info (-9304)
|
||||
#define tls_psigwait_info (3496)
|
||||
#define tls_signal_arrived (-9296)
|
||||
#define tls_psignal_arrived (3504)
|
||||
#define tls_will_wait_for_signal (-9288)
|
||||
#define tls_pwill_wait_for_signal (3512)
|
||||
#define tls_thread_context (-9280)
|
||||
#define tls_pthread_context (3520)
|
||||
#define tls_thread_id (-8448)
|
||||
#define tls_pthread_id (4352)
|
||||
#define tls_infodata (-8444)
|
||||
#define tls_pinfodata (4356)
|
||||
#define tls_tid (-8296)
|
||||
#define tls_ptid (4504)
|
||||
#define tls__ctinfo (-8288)
|
||||
#define tls_p_ctinfo (4512)
|
||||
#define tls_andreas (-8280)
|
||||
#define tls_pandreas (4520)
|
||||
#define tls_wq (-8272)
|
||||
#define tls_pwq (4528)
|
||||
#define tls_sig (-8224)
|
||||
#define tls_psig (4576)
|
||||
#define tls_incyg (-8220)
|
||||
#define tls_pincyg (4580)
|
||||
#define tls_spinning (-8216)
|
||||
#define tls_pspinning (4584)
|
||||
#define tls_stacklock (-8212)
|
||||
#define tls_pstacklock (4588)
|
||||
#define tls_stackptr (-8208)
|
||||
#define tls_pstackptr (4592)
|
||||
#define tls_stack (-8200)
|
||||
#define tls_pstack (4600)
|
||||
#define tls_initialized (-6152)
|
||||
#define tls_pinitialized (6648)
|
||||
#define tls_local_clib (-11264)
|
||||
#define tls_plocal_clib (1536)
|
||||
#define tls___dontuse (-11264)
|
||||
#define tls_p__dontuse (1536)
|
||||
#define tls_func (-9376)
|
||||
#define tls_pfunc (3424)
|
||||
#define tls_saved_errno (-9368)
|
||||
#define tls_psaved_errno (3432)
|
||||
#define tls_sa_flags (-9364)
|
||||
#define tls_psa_flags (3436)
|
||||
#define tls_oldmask (-9360)
|
||||
#define tls_poldmask (3440)
|
||||
#define tls_deltamask (-9352)
|
||||
#define tls_pdeltamask (3448)
|
||||
#define tls_errno_addr (-9344)
|
||||
#define tls_perrno_addr (3456)
|
||||
#define tls_sigmask (-9336)
|
||||
#define tls_psigmask (3464)
|
||||
#define tls_sigwait_mask (-9328)
|
||||
#define tls_psigwait_mask (3472)
|
||||
#define tls_sigwait_info (-9320)
|
||||
#define tls_psigwait_info (3480)
|
||||
#define tls_signal_arrived (-9312)
|
||||
#define tls_psignal_arrived (3488)
|
||||
#define tls_will_wait_for_signal (-9304)
|
||||
#define tls_pwill_wait_for_signal (3496)
|
||||
#define tls_thread_context (-9296)
|
||||
#define tls_pthread_context (3504)
|
||||
#define tls_thread_id (-8464)
|
||||
#define tls_pthread_id (4336)
|
||||
#define tls_infodata (-8460)
|
||||
#define tls_pinfodata (4340)
|
||||
#define tls_tid (-8312)
|
||||
#define tls_ptid (4488)
|
||||
#define tls__ctinfo (-8304)
|
||||
#define tls_p_ctinfo (4496)
|
||||
#define tls_andreas (-8296)
|
||||
#define tls_pandreas (4504)
|
||||
#define tls_wq (-8288)
|
||||
#define tls_pwq (4512)
|
||||
#define tls_sig (-8240)
|
||||
#define tls_psig (4560)
|
||||
#define tls_incyg (-8236)
|
||||
#define tls_pincyg (4564)
|
||||
#define tls_spinning (-8232)
|
||||
#define tls_pspinning (4568)
|
||||
#define tls_stacklock (-8228)
|
||||
#define tls_pstacklock (4572)
|
||||
#define tls_stackptr (-8224)
|
||||
#define tls_pstackptr (4576)
|
||||
#define tls_stack (-8216)
|
||||
#define tls_pstack (4584)
|
||||
#define tls_initialized (-6168)
|
||||
#define tls_pinitialized (6632)
|
||||
|
|
|
@ -32,8 +32,8 @@ details. */
|
|||
#include "tls_pbuf.h"
|
||||
#include "miscfuncs.h"
|
||||
#include "ntdll.h"
|
||||
|
||||
#include "ldap.h"
|
||||
#include "cygserver_pwdgrp.h"
|
||||
|
||||
/* Initialize the part of cygheap_user that does not depend on files.
|
||||
The information is used in shared.cc for the user shared.
|
||||
|
@ -124,7 +124,7 @@ internal_getlogin (cygheap_user &user)
|
|||
and the primary group in the token. */
|
||||
pwd = internal_getpwsid (user.sid (), &cldap);
|
||||
pgrp = internal_getgrsid (user.groups.pgsid, &cldap);
|
||||
if (cygheap->pg.nss_db_full_caching ())
|
||||
if (!cygheap->pg.nss_cygserver_caching ())
|
||||
internal_getgroups (0, NULL, &cldap);
|
||||
if (!pwd)
|
||||
debug_printf ("user not found in passwd DB");
|
||||
|
@ -567,8 +567,10 @@ pwdgrp::add_line (char *eptr)
|
|||
void
|
||||
cygheap_pwdgrp::init ()
|
||||
{
|
||||
pwd_cache.cygserver.init_pwd ();
|
||||
pwd_cache.file.init_pwd ();
|
||||
pwd_cache.win.init_pwd ();
|
||||
grp_cache.cygserver.init_grp ();
|
||||
grp_cache.file.init_grp ();
|
||||
grp_cache.win.init_grp ();
|
||||
/* Default settings:
|
||||
|
@ -584,7 +586,7 @@ cygheap_pwdgrp::init ()
|
|||
grp_src = (NSS_FILES | NSS_DB);
|
||||
prefix = NSS_AUTO;
|
||||
separator[0] = L'+';
|
||||
caching = NSS_FULL_CACHING;
|
||||
caching = true;
|
||||
enums = (ENUM_CACHE | ENUM_BUILTIN);
|
||||
enum_tdoms = NULL;
|
||||
}
|
||||
|
@ -670,19 +672,6 @@ cygheap_pwdgrp::nss_init_line (const char *line)
|
|||
else
|
||||
debug_printf ("Invalid nsswitch.conf content: %s", line);
|
||||
}
|
||||
else if (!strncmp (c, "cache:", 6))
|
||||
{
|
||||
c += 6;
|
||||
c += strspn (c, " \t");
|
||||
if (!strncmp (c, "full", 3) && strchr (" \t", c[3]))
|
||||
caching = NSS_FULL_CACHING;
|
||||
else if (!strncmp (c, "yes", 3) && strchr (" \t", c[3]))
|
||||
caching = NSS_CACHING;
|
||||
else if (!strncmp (c, "no", 2) && strchr (" \t", c[2]))
|
||||
caching = NSS_NO_CACHING;
|
||||
else
|
||||
debug_printf ("Invalid nsswitch.conf content: %s", line);
|
||||
}
|
||||
else if (!strncmp (c, "enum:", 5))
|
||||
{
|
||||
tmp_pathbuf tp;
|
||||
|
@ -1001,11 +990,7 @@ pwdgrp::add_account_from_windows (cygpsid &sid, cyg_ldap *pldap)
|
|||
char *line = fetch_account_from_windows (arg, pldap);
|
||||
if (!line)
|
||||
return NULL;
|
||||
if (cygheap->pg.nss_db_caching ())
|
||||
return add_account_post_fetch (line, true);
|
||||
if (is_group ())
|
||||
return (prep_tls_grbuf ())->add_account_post_fetch (line, false);
|
||||
return (prep_tls_pwbuf ())->add_account_post_fetch (line, false);
|
||||
}
|
||||
|
||||
void *
|
||||
|
@ -1017,11 +1002,7 @@ pwdgrp::add_account_from_windows (const char *name, cyg_ldap *pldap)
|
|||
char *line = fetch_account_from_windows (arg, pldap);
|
||||
if (!line)
|
||||
return NULL;
|
||||
if (cygheap->pg.nss_db_caching ())
|
||||
return add_account_post_fetch (line, true);
|
||||
if (is_group ())
|
||||
return (prep_tls_grbuf ())->add_account_post_fetch (line, false);
|
||||
return (prep_tls_pwbuf ())->add_account_post_fetch (line, false);
|
||||
}
|
||||
|
||||
void *
|
||||
|
@ -1033,11 +1014,7 @@ pwdgrp::add_account_from_windows (uint32_t id, cyg_ldap *pldap)
|
|||
char *line = fetch_account_from_windows (arg, pldap);
|
||||
if (!line)
|
||||
return NULL;
|
||||
if (cygheap->pg.nss_db_caching ())
|
||||
return add_account_post_fetch (line, true);
|
||||
if (is_group ())
|
||||
return (prep_tls_grbuf ())->add_account_post_fetch (line, false);
|
||||
return (prep_tls_pwbuf ())->add_account_post_fetch (line, false);
|
||||
}
|
||||
|
||||
/* Check if file exists and if it has been written to since last checked.
|
||||
|
@ -1828,3 +1805,79 @@ pwdgrp::fetch_account_from_windows (fetch_user_arg_t &arg, cyg_ldap *pldap)
|
|||
debug_printf ("line: <%s>", line);
|
||||
return line;
|
||||
}
|
||||
|
||||
client_request_pwdgrp::client_request_pwdgrp (fetch_user_arg_t &arg, bool group)
|
||||
: client_request (CYGSERVER_REQUEST_PWDGRP, &_parameters, sizeof (_parameters))
|
||||
{
|
||||
size_t len = 0;
|
||||
char *p;
|
||||
|
||||
_parameters.in.group = group;
|
||||
_parameters.in.type = arg.type;
|
||||
switch (arg.type)
|
||||
{
|
||||
case SID_arg:
|
||||
RtlCopySid (sizeof (DBGSID), (PSID) &_parameters.in.arg.sid, *arg.sid);
|
||||
len = RtlLengthSid (*arg.sid);
|
||||
break;
|
||||
case NAME_arg:
|
||||
p = stpcpy (_parameters.in.arg.name, arg.name);
|
||||
len = p - _parameters.in.arg.name;
|
||||
break;
|
||||
case ID_arg:
|
||||
_parameters.in.arg.id = arg.id;
|
||||
len = sizeof (uint32_t);
|
||||
}
|
||||
msglen (__builtin_offsetof (struct _pwdgrp_param_t::_pwdgrp_in_t, arg) + len);
|
||||
}
|
||||
|
||||
char *
|
||||
pwdgrp::fetch_account_from_cygserver (fetch_user_arg_t &arg)
|
||||
{
|
||||
client_request_pwdgrp request (arg, is_group ());
|
||||
if (request.make_request () == -1 || request.error_code ())
|
||||
{
|
||||
/* Cygserver not running? Don't try again. This will automatically
|
||||
avoid an endless loop in cygserver itself. */
|
||||
if (request.error_code () == ENOSYS)
|
||||
cygheap->pg.nss_disable_cygserver_caching ();
|
||||
return NULL;
|
||||
}
|
||||
if (!request.line ())
|
||||
return NULL;
|
||||
return cstrdup (request.line ());
|
||||
}
|
||||
|
||||
void *
|
||||
pwdgrp::add_account_from_cygserver (cygpsid &sid)
|
||||
{
|
||||
/* No, Everyone is no group in terms of POSIX. */
|
||||
if (sid_id_auth (sid) == 1 /* SECURITY_WORLD_SID_AUTHORITY */
|
||||
&& sid_sub_auth (sid, 0) == SECURITY_WORLD_RID)
|
||||
return NULL;
|
||||
fetch_user_arg_t arg;
|
||||
arg.type = SID_arg;
|
||||
arg.sid = &sid;
|
||||
char *line = fetch_account_from_cygserver (arg);
|
||||
return (struct passwd *) add_account_post_fetch (line, true);
|
||||
}
|
||||
|
||||
void *
|
||||
pwdgrp::add_account_from_cygserver (const char *name)
|
||||
{
|
||||
fetch_user_arg_t arg;
|
||||
arg.type = NAME_arg;
|
||||
arg.name = name;
|
||||
char *line = fetch_account_from_cygserver (arg);
|
||||
return (struct passwd *) add_account_post_fetch (line, true);
|
||||
}
|
||||
|
||||
void *
|
||||
pwdgrp::add_account_from_cygserver (uint32_t id)
|
||||
{
|
||||
fetch_user_arg_t arg;
|
||||
arg.type = ID_arg;
|
||||
arg.id = id;
|
||||
char *line = fetch_account_from_cygserver (arg);
|
||||
return (struct passwd *) add_account_post_fetch (line, true);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue