libc/winsup/cygwin/cygserver_pwdgrp.h
Corinna Vinschen bef55bb5c3 * autoload.cc (LsaLookupSids): Import.
* cygserver_pwdgrp.h: Include userinfo.h.  Drop workaround defining
	fetch_user_arg_type_t locally.
	* grp.cc (internal_getgrsid_cachedonly): New function.
	(internal_getgrfull): Ditto.
	(internal_getgroups): Rearrange function.  Center around fetching all
	cached group info first, calling LsaLookupSids on all so far non-cached
	groups second.  Pass all available info to new internal_getgrfull call.
	* pwdgrp.h: Include userinfo.h.  Move definitions of
	fetch_user_arg_type_t and fetch_user_arg_t there.
	(pwdgrp::add_group_from_windows): Declare with getting full group info.
	Called from internal_getgrfull.
	* uinfo.cc (pwdgrp::add_group_from_windows): Define.
	(pwdgrp::fetch_account_from_line): Add default case.
	(pwdgrp::fetch_account_from_file): Ditto.
	(pwdgrp::fetch_account_from_windows): Handle FULL_grp_arg.
	(client_request_pwdgrp::client_request_pwdgrp): Add default case.
	* userinfo.h: New header.
	(enum fetch_user_arg_type_t): Add FULL_grp_arg.
	(struct fetch_full_grp_t): New datatype.
2015-02-23 20:51:12 +00:00

64 lines
1.2 KiB
C++

/* cygserver_pwdgrp.h: Request account information
Copyright 2014, 2015 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"
#include "userinfo.h"
class transport_layer_base;
class process_cache;
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__ */