]>
sourceware.org Git - newlib-cygwin.git/blob - winsup/cygserver/pwdgrp.cc
1 /* pwdgrp.cc: Request account information
3 This file is part of Cygwin.
5 This software is a copyrighted work licensed under the terms of the
6 Cygwin license. Please consult the file "CYGWIN_LICENSE" for
9 #ifdef __OUTSIDE_CYGWIN__
16 #include <sys/cygwin.h>
18 #include "cygserver.h"
20 #include "transport.h"
22 #include "cygserver_pwdgrp.h"
26 client_request_pwdgrp::client_request_pwdgrp ()
27 : client_request (CYGSERVER_REQUEST_PWDGRP
,
28 &_parameters
, sizeof (_parameters
))
33 client_request_pwdgrp::pwd_serve ()
35 struct passwd
*pwd
= NULL
;
37 switch (_parameters
.in
.type
)
40 pwd
= (struct passwd
*) cygwin_internal (CW_GETPWSID
, 0,
41 &_parameters
.in
.arg
.sid
);
44 pwd
= getpwnam (_parameters
.in
.arg
.name
);
47 pwd
= getpwuid (_parameters
.in
.arg
.id
);
53 msglen (snprintf (_parameters
.out
.line
, sizeof _parameters
.out
.line
,
54 "%s:%s:%u:%u:%s:%s:%s",
57 (uint32_t) pwd
->pw_uid
,
58 (uint32_t) pwd
->pw_gid
,
61 pwd
->pw_shell
?: "") + 1);
64 switch (_parameters
.in
.type
)
69 if (ConvertSidToStringSid (&_parameters
.in
.arg
.sid
, &str
))
71 debug_printf ("User <%s> failed", str
);
77 debug_printf ("User <%s> failed", _parameters
.in
.arg
.name
);
80 debug_printf ("User <%u> failed", _parameters
.in
.arg
.id
);
85 _parameters
.out
.line
[0] = '\0';
92 client_request_pwdgrp::grp_serve ()
94 struct group
*grp
= NULL
;
96 switch (_parameters
.in
.type
)
99 grp
= (struct group
*) cygwin_internal (CW_GETGRSID
, 0,
100 &_parameters
.in
.arg
.sid
);
103 grp
= getgrnam (_parameters
.in
.arg
.name
);
106 grp
= getgrgid (_parameters
.in
.arg
.id
);
112 msglen (snprintf (_parameters
.out
.line
, sizeof _parameters
.out
.line
,
115 grp
->gr_passwd
?: "",
116 (uint32_t) grp
->gr_gid
) + 1);
119 switch (_parameters
.in
.type
)
124 if (ConvertSidToStringSid (&_parameters
.in
.arg
.sid
, &str
))
126 debug_printf ("Group <%s> failed", str
);
132 debug_printf ("Group <%s> failed", _parameters
.in
.arg
.name
);
135 debug_printf ("Group <%u> failed", _parameters
.in
.arg
.id
);
140 _parameters
.out
.line
[0] = '\0';
147 client_request_pwdgrp::serve (transport_layer_base
*const conn
,
148 process_cache
*const cache
)
150 debug_printf ("Request account information");
151 if (msglen () < __builtin_offsetof (struct _pwdgrp_param_t::_pwdgrp_in_t
, arg
)
153 || msglen () > sizeof (_parameters
.in
))
155 syscall_printf ("bad request body length: got %lu", msglen ());
161 if (_parameters
.in
.group
)
165 debug_printf ("Request account information returns <%s> error %d", _parameters
.out
.line
, error_code ());
167 #endif /* __OUTSIDE_CYGWIN__ */
This page took 0.042907 seconds and 5 git commands to generate.