]>
sourceware.org Git - newlib-cygwin.git/blob - winsup/cygserver/pwdgrp.cc
1 /* pwdgrp.cc: Request account information
3 Copyright 2014, 2015 Red Hat, Inc.
5 This file is part of Cygwin.
7 This software is a copyrighted work licensed under the terms of the
8 Cygwin license. Please consult the file "CYGWIN_LICENSE" for
11 #ifdef __OUTSIDE_CYGWIN__
18 #include <sys/cygwin.h>
20 #include "cygserver.h"
22 #include "transport.h"
24 #include "cygserver_pwdgrp.h"
28 client_request_pwdgrp::client_request_pwdgrp ()
29 : client_request (CYGSERVER_REQUEST_PWDGRP
,
30 &_parameters
, sizeof (_parameters
))
35 client_request_pwdgrp::pwd_serve ()
37 struct passwd
*pwd
= NULL
;
39 switch (_parameters
.in
.type
)
42 pwd
= (struct passwd
*) cygwin_internal (CW_GETPWSID
, 0,
43 &_parameters
.in
.arg
.sid
);
46 pwd
= getpwnam (_parameters
.in
.arg
.name
);
49 pwd
= getpwuid (_parameters
.in
.arg
.id
);
55 msglen (snprintf (_parameters
.out
.line
, sizeof _parameters
.out
.line
,
56 "%s:%s:%u:%u:%s:%s:%s",
59 (uint32_t) pwd
->pw_uid
,
60 (uint32_t) pwd
->pw_gid
,
63 pwd
->pw_shell
?: "") + 1);
66 switch (_parameters
.in
.type
)
71 if (ConvertSidToStringSid (&_parameters
.in
.arg
.sid
, &str
))
73 debug_printf ("User <%s> failed", str
);
79 debug_printf ("User <%s> failed", _parameters
.in
.arg
.name
);
82 debug_printf ("User <%u> failed", _parameters
.in
.arg
.id
);
87 _parameters
.out
.line
[0] = '\0';
94 client_request_pwdgrp::grp_serve ()
96 struct group
*grp
= NULL
;
98 switch (_parameters
.in
.type
)
101 grp
= (struct group
*) cygwin_internal (CW_GETGRSID
, 0,
102 &_parameters
.in
.arg
.sid
);
105 grp
= getgrnam (_parameters
.in
.arg
.name
);
108 grp
= getgrgid (_parameters
.in
.arg
.id
);
114 msglen (snprintf (_parameters
.out
.line
, sizeof _parameters
.out
.line
,
117 grp
->gr_passwd
?: "",
118 (uint32_t) grp
->gr_gid
) + 1);
121 switch (_parameters
.in
.type
)
126 if (ConvertSidToStringSid (&_parameters
.in
.arg
.sid
, &str
))
128 debug_printf ("Group <%s> failed", str
);
134 debug_printf ("Group <%s> failed", _parameters
.in
.arg
.name
);
137 debug_printf ("Group <%u> failed", _parameters
.in
.arg
.id
);
142 _parameters
.out
.line
[0] = '\0';
149 client_request_pwdgrp::serve (transport_layer_base
*const conn
,
150 process_cache
*const cache
)
152 debug_printf ("Request account information");
153 if (msglen () < __builtin_offsetof (struct _pwdgrp_param_t::_pwdgrp_in_t
, arg
)
155 || msglen () > sizeof (_parameters
.in
))
157 syscall_printf ("bad request body length: got %lu", msglen ());
163 if (_parameters
.in
.group
)
167 debug_printf ("Request account information returns <%s> error %d", _parameters
.out
.line
, error_code ());
169 #endif /* __OUTSIDE_CYGWIN__ */
This page took 0.039813 seconds and 5 git commands to generate.