mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-30 11:00:41 +08:00
* include/sys/strace.h (paranoid_printf): Define as not being part of "all"
output. * pwdgrp.h (pwdgrp::next_num): Rename from next_int. Returns true/false if parse operation succeeded. (pwdgrp::reparse): Remove. (pwdgrp::raw_ptr): New function. Returns pointer in line. (pwdgrp::next_num): New functions for parsing other than unsigned long. * grp.cc (pwdgrp::parse_group): Reinstate previous parsing behavior. Don't fill in fields with NULL and assign empty gr_mem to known pointer rather than doing a pointless calloc. Streamline gr_mem parsing. Don't increment curr_lines here. * passwd.cc (pwdgrp::parse_passwd): Use new behavior of next_num. Don't increment curr_lines here. * uinfo.cc (pwdgrp::next_str): Keep returning EOL if out of data. (pwdgrp::reparse): Remove. (pwdgrp::next_num): Rename from next_int. Return bool indicating success of parse, argument returns value parsed. (pwdgrp::add_line): Increment curr_lines here on successful parse. (pwdgrp::load): (from Pierre Humblet) Don't return status. Just report it here.
This commit is contained in:
parent
c9b99d0d2a
commit
6503705696
@ -1,3 +1,30 @@
|
||||
|
||||
2003-01-26 Christopher Faylor <cgf@redhat.com>
|
||||
|
||||
* include/sys/strace.h (paranoid_printf): Define as not being part of
|
||||
"all" output.
|
||||
|
||||
2003-01-25 Christopher Faylor <cgf@redhat.com>
|
||||
|
||||
* pwdgrp.h (pwdgrp::next_num): Rename from next_int. Returns
|
||||
true/false if parse operation succeeded.
|
||||
(pwdgrp::reparse): Remove.
|
||||
(pwdgrp::raw_ptr): New function. Returns pointer in line.
|
||||
(pwdgrp::next_num): New functions for parsing other than unsigned long.
|
||||
* grp.cc (pwdgrp::parse_group): Reinstate previous parsing behavior.
|
||||
Don't fill in fields with NULL and assign empty gr_mem to known pointer
|
||||
rather than doing a pointless calloc. Streamline gr_mem parsing.
|
||||
Don't increment curr_lines here.
|
||||
* passwd.cc (pwdgrp::parse_passwd): Use new behavior of next_num.
|
||||
Don't increment curr_lines here.
|
||||
* uinfo.cc (pwdgrp::next_str): Keep returning EOL if out of data.
|
||||
(pwdgrp::reparse): Remove.
|
||||
(pwdgrp::next_num): Rename from next_int. Return bool indicating
|
||||
success of parse, argument returns value parsed.
|
||||
(pwdgrp::add_line): Increment curr_lines here on successful parse.
|
||||
(pwdgrp::load): (from Pierre Humblet) Don't return status. Just report
|
||||
it here.
|
||||
|
||||
2003-01-25 Christopher Faylor <cgf@redhat.com>
|
||||
|
||||
* pwdgrp.cc (pwdgrp::reparse): Declare.
|
||||
|
@ -39,38 +39,36 @@ pwdgrp::parse_group ()
|
||||
char *dp;
|
||||
|
||||
# define grp (*group_buf)[curr_lines]
|
||||
|
||||
memset (&grp, 0, sizeof (grp));
|
||||
|
||||
grp.gr_name = next_str ();
|
||||
if (!grp.gr_name)
|
||||
if (!*grp.gr_name)
|
||||
return false;
|
||||
|
||||
grp.gr_passwd = next_str ();
|
||||
int n = next_int ();
|
||||
if (n >= 0)
|
||||
|
||||
if (!next_num (grp.gr_gid))
|
||||
return false;
|
||||
|
||||
int n;
|
||||
dp = raw_ptr ();
|
||||
for (n = 0; *next_str (','); n++)
|
||||
continue;
|
||||
|
||||
grp.gr_mem = &null_ptr;
|
||||
if (n)
|
||||
{
|
||||
grp.gr_gid = n;
|
||||
dp = next_str ();
|
||||
if (!dp)
|
||||
{
|
||||
static char empty[] = "";
|
||||
dp = empty;
|
||||
}
|
||||
int i = 0;
|
||||
for (char *cp = dp; (cp = strchr (cp, ',')) != NULL; cp++)
|
||||
i++;
|
||||
char **namearray = (char **) calloc (i + 2, sizeof (char *));
|
||||
char **namearray = (char **) calloc (n + 2, sizeof (char *));
|
||||
if (namearray)
|
||||
{
|
||||
reparse (dp);
|
||||
for (i = 0; (dp = next_str (',')); i++)
|
||||
for (int i = 0; i < n; i++, dp = strchr (dp, '\0') + 1)
|
||||
namearray[i] = dp;
|
||||
namearray[i] = NULL;
|
||||
grp.gr_mem = namearray;
|
||||
}
|
||||
curr_lines++;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
return true;
|
||||
# undef grp
|
||||
}
|
||||
|
||||
@ -85,8 +83,7 @@ pwdgrp::read_group ()
|
||||
if ((*group_buf)[i].gr_mem != &null_ptr)
|
||||
free ((*group_buf)[i].gr_mem);
|
||||
|
||||
if (!gr.load ("/etc/group"))
|
||||
debug_printf ("gr.load failed");
|
||||
load ("/etc/group");
|
||||
|
||||
/* Complete /etc/group in memory if needed */
|
||||
if (!internal_getgrgid (myself->gid))
|
||||
@ -106,11 +103,11 @@ pwdgrp::read_group ()
|
||||
snprintf (linebuf, sizeof (linebuf), "%s:%s:%lu:%s",
|
||||
group_name, strbuf, myself->gid, cygheap->user.name ());
|
||||
debug_printf ("Completing /etc/group: %s", linebuf);
|
||||
gr.add_line (linebuf);
|
||||
add_line (linebuf);
|
||||
}
|
||||
static char NO_COPY pretty_ls[] = "????????::-1:";
|
||||
if (wincap.has_security ())
|
||||
gr.add_line (pretty_ls);
|
||||
add_line (pretty_ls);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -142,7 +142,7 @@ void strace_printf (unsigned, const char *func, const char *, ...);
|
||||
}))
|
||||
|
||||
#define debug_printf(fmt, args...) strace_printf_wrap(DEBUG, fmt , ## args)
|
||||
#define paranoid_printf(fmt, args...) strace_printf_wrap(PARANOID, fmt , ## args)
|
||||
#define paranoid_printf(fmt, args...) strace_printf_wrap1(PARANOID, fmt , ## args)
|
||||
#define select_printf(fmt, args...) strace_printf_wrap(SELECT, fmt , ## args)
|
||||
#define sigproc_printf(fmt, args...) strace_printf_wrap(SIGP, fmt , ## args)
|
||||
#define syscall_printf(fmt, args...) strace_printf_wrap(SYSCALL, fmt , ## args)
|
||||
|
@ -37,28 +37,22 @@ static pwdgrp pr (passwd_buf);
|
||||
bool
|
||||
pwdgrp::parse_passwd ()
|
||||
{
|
||||
int n;
|
||||
# define res (*passwd_buf)[curr_lines]
|
||||
/* Allocate enough room for the passwd struct and all the strings
|
||||
in it in one go */
|
||||
|
||||
memset (&res, 0, sizeof (res));
|
||||
|
||||
res.pw_name = next_str ();
|
||||
res.pw_passwd = next_str ();
|
||||
|
||||
n = next_int ();
|
||||
if (n < 0)
|
||||
if (res.pw_name == res.pw_passwd)
|
||||
return false;
|
||||
res.pw_uid = n;
|
||||
|
||||
n = next_int ();
|
||||
if (n < 0)
|
||||
return false;
|
||||
res.pw_gid = n;
|
||||
res.pw_comment = 0;
|
||||
(void) next_num (res.pw_uid);
|
||||
(void) next_num (res.pw_gid);
|
||||
res.pw_comment = NULL;
|
||||
res.pw_gecos = next_str ();
|
||||
res.pw_dir = next_str ();
|
||||
res.pw_shell = next_str ();
|
||||
curr_lines++;
|
||||
return true;
|
||||
# undef res
|
||||
}
|
||||
@ -69,8 +63,7 @@ pwdgrp::parse_passwd ()
|
||||
void
|
||||
pwdgrp::read_passwd ()
|
||||
{
|
||||
if (!load ("/etc/passwd"))
|
||||
debug_printf ("load failed");
|
||||
load ("/etc/passwd");
|
||||
|
||||
char strbuf[128] = "";
|
||||
bool searchentry = true;
|
||||
@ -79,7 +72,7 @@ pwdgrp::read_passwd ()
|
||||
if (wincap.has_security ())
|
||||
{
|
||||
static char NO_COPY pretty_ls[] = "????????:*:-1:-1:";
|
||||
pr.add_line (pretty_ls);
|
||||
add_line (pretty_ls);
|
||||
cygsid tu = cygheap->user.sid ();
|
||||
tu.string (strbuf);
|
||||
if (myself->uid == ILLEGAL_UID)
|
||||
@ -101,7 +94,7 @@ pwdgrp::read_passwd ()
|
||||
myself->gid,
|
||||
strbuf, getenv ("HOME") ?: "");
|
||||
debug_printf ("Completing /etc/passwd: %s", linebuf);
|
||||
pr.add_line (linebuf);
|
||||
add_line (linebuf);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -45,14 +45,28 @@ class pwdgrp
|
||||
void read_passwd ();
|
||||
void read_group ();
|
||||
char *add_line (char *);
|
||||
char *raw_ptr () const {return lptr;}
|
||||
char *next_str (char = 0);
|
||||
int next_int (char = 0);
|
||||
void reparse (char *);
|
||||
bool next_num (unsigned long&);
|
||||
bool next_num (unsigned int& i)
|
||||
{
|
||||
unsigned long x;
|
||||
bool res = next_num (x);
|
||||
i = (unsigned int) x;
|
||||
return res;
|
||||
}
|
||||
bool next_num (int& i)
|
||||
{
|
||||
unsigned long x;
|
||||
bool res = next_num (x);
|
||||
i = (int) x;
|
||||
return res;
|
||||
}
|
||||
|
||||
public:
|
||||
int curr_lines;
|
||||
|
||||
bool load (const char *);
|
||||
void load (const char *);
|
||||
void refresh (bool check = true)
|
||||
{
|
||||
if (!check && initialized)
|
||||
|
@ -400,33 +400,23 @@ pwdgrp::next_str (char c)
|
||||
search[2] = c;
|
||||
char *res = lptr;
|
||||
char *p = strpbrk (lptr, search);
|
||||
if (!p)
|
||||
lptr = NULL;
|
||||
else
|
||||
if (p)
|
||||
{
|
||||
lptr = (*p == '\n') ? NULL : p + 1;
|
||||
lptr = (*p == '\n') ? p : p + 1;
|
||||
*p = '\0';
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
void
|
||||
pwdgrp::reparse (char *in_lptr)
|
||||
bool
|
||||
pwdgrp::next_num (unsigned long& n)
|
||||
{
|
||||
lptr = in_lptr;
|
||||
}
|
||||
|
||||
int
|
||||
pwdgrp::next_int (char c)
|
||||
{
|
||||
char *p = next_str (c);
|
||||
char *p = next_str ();
|
||||
if (!p)
|
||||
return -1;
|
||||
char *cp;
|
||||
unsigned n = strtoul (p, &cp, 10);
|
||||
if (p == cp)
|
||||
return -1;
|
||||
return n;
|
||||
n = strtoul (p, &cp, 10);
|
||||
return p != cp && !*cp;
|
||||
}
|
||||
|
||||
char *
|
||||
@ -447,14 +437,19 @@ pwdgrp::add_line (char *eptr)
|
||||
max_lines += 10;
|
||||
*pwdgrp_buf = realloc (*pwdgrp_buf, max_lines * pwdgrp_buf_elem_size);
|
||||
}
|
||||
(void) (this->*parse) ();
|
||||
if ((this->*parse) ())
|
||||
curr_lines++;
|
||||
}
|
||||
return eptr;
|
||||
}
|
||||
|
||||
bool
|
||||
void
|
||||
pwdgrp::load (const char *posix_fname)
|
||||
{
|
||||
const char *res;
|
||||
static const char failed[] = "failed";
|
||||
static const char succeeded[] = "succeeded";
|
||||
|
||||
if (buf)
|
||||
free (buf);
|
||||
buf = NULL;
|
||||
@ -464,26 +459,29 @@ pwdgrp::load (const char *posix_fname)
|
||||
|
||||
paranoid_printf ("%s", posix_fname);
|
||||
|
||||
bool res;
|
||||
if (pc.error || !pc.exists () || !pc.isdisk () || pc.isdir ())
|
||||
res = false;
|
||||
{
|
||||
paranoid_printf ("strange path_conv problem");
|
||||
res = failed;
|
||||
}
|
||||
else
|
||||
{
|
||||
HANDLE fh = CreateFile (pc, GENERIC_READ, wincap.shared (), NULL,
|
||||
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
|
||||
if (fh == INVALID_HANDLE_VALUE)
|
||||
res = false;
|
||||
res = failed;
|
||||
else
|
||||
{
|
||||
DWORD size = GetFileSize (fh, NULL), read_bytes;
|
||||
buf = (char *) malloc (size + 1);
|
||||
if (!ReadFile (fh, buf, size, &read_bytes, NULL))
|
||||
{
|
||||
paranoid_printf ("ReadFile failed, %E");
|
||||
CloseHandle (fh);
|
||||
if (buf)
|
||||
free (buf);
|
||||
buf = NULL;
|
||||
res = false;
|
||||
res = failed;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -494,11 +492,12 @@ pwdgrp::load (const char *posix_fname)
|
||||
while ((eptr = add_line (eptr)))
|
||||
continue;
|
||||
debug_printf ("%s curr_lines %d", posix_fname, curr_lines);
|
||||
res = true;
|
||||
res = succeeded;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
debug_printf ("load of %s %s", posix_fname, res);
|
||||
initialized = true;
|
||||
return res;
|
||||
return;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user