mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
Revert "libwbclient4: Add wbc_sids_to_xids"
This reverts commit fefc59619b
.
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
This commit is contained in:
parent
c4efff1013
commit
97a62e2279
@ -22,10 +22,6 @@
|
|||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
#include <tevent.h>
|
#include <tevent.h>
|
||||||
#include "libcli/wbclient/wbclient.h"
|
#include "libcli/wbclient/wbclient.h"
|
||||||
#include "nsswitch/wb_reqtrans.h"
|
|
||||||
#include "system/network.h"
|
|
||||||
#include "libcli/util/error.h"
|
|
||||||
#include "libcli/security/dom_sid.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize the wbclient context, talloc_free() when done.
|
* Initialize the wbclient context, talloc_free() when done.
|
||||||
@ -198,166 +194,3 @@ NTSTATUS wbc_xids_to_sids_recv(struct composite_context *ctx,
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int wb_simple_trans(struct tevent_context *ev, int fd,
|
|
||||||
struct winbindd_request *wb_req,
|
|
||||||
TALLOC_CTX *mem_ctx,
|
|
||||||
struct winbindd_response **resp, int *err)
|
|
||||||
{
|
|
||||||
struct tevent_req *req;
|
|
||||||
bool polled;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
req = wb_simple_trans_send(ev, ev, NULL, fd, wb_req);
|
|
||||||
if (req == NULL) {
|
|
||||||
*err = ENOMEM;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
polled = tevent_req_poll(req, ev);
|
|
||||||
if (!polled) {
|
|
||||||
*err = errno;
|
|
||||||
DEBUG(10, ("tevent_req_poll returned %s\n",
|
|
||||||
strerror(*err)));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = wb_simple_trans_recv(req, mem_ctx, resp, err);
|
|
||||||
TALLOC_FREE(req);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char *winbindd_socket_dir(void)
|
|
||||||
{
|
|
||||||
#ifdef SOCKET_WRAPPER
|
|
||||||
const char *env_dir;
|
|
||||||
|
|
||||||
env_dir = getenv(WINBINDD_SOCKET_DIR_ENVVAR);
|
|
||||||
if (env_dir) {
|
|
||||||
return env_dir;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return WINBINDD_SOCKET_DIR;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int winbindd_pipe_sock(void)
|
|
||||||
{
|
|
||||||
struct sockaddr_un sunaddr = {};
|
|
||||||
int ret, fd;
|
|
||||||
char *path;
|
|
||||||
|
|
||||||
ret = asprintf(&path, "%s/%s", winbindd_socket_dir(),
|
|
||||||
WINBINDD_SOCKET_NAME);
|
|
||||||
if (ret == -1) {
|
|
||||||
errno = ENOMEM;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
sunaddr.sun_family = AF_UNIX;
|
|
||||||
strlcpy(sunaddr.sun_path, path, sizeof(sunaddr.sun_path));
|
|
||||||
free(path);
|
|
||||||
|
|
||||||
fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
|
||||||
if (fd == -1) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = connect(fd, (struct sockaddr *)&sunaddr, sizeof(sunaddr));
|
|
||||||
if (ret == -1) {
|
|
||||||
int err = errno;
|
|
||||||
close(fd);
|
|
||||||
errno = err;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
NTSTATUS wbc_sids_to_xids(struct tevent_context *ev, struct id_map *ids,
|
|
||||||
uint32_t count)
|
|
||||||
{
|
|
||||||
TALLOC_CTX *mem_ctx;
|
|
||||||
struct winbindd_request req = {};
|
|
||||||
struct winbindd_response *resp;
|
|
||||||
uint32_t i;
|
|
||||||
int fd, ret, err;
|
|
||||||
char *sids, *p;
|
|
||||||
size_t sidslen;
|
|
||||||
|
|
||||||
fd = winbindd_pipe_sock();
|
|
||||||
if (fd == -1) {
|
|
||||||
return map_nt_error_from_unix_common(errno);
|
|
||||||
}
|
|
||||||
|
|
||||||
mem_ctx = talloc_new(NULL);
|
|
||||||
if (mem_ctx == NULL) {
|
|
||||||
close(fd);
|
|
||||||
return NT_STATUS_NO_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
sidslen = count * (DOM_SID_STR_BUFLEN + 1);
|
|
||||||
|
|
||||||
sids = talloc_array(mem_ctx, char, sidslen);
|
|
||||||
if (sids == NULL) {
|
|
||||||
close(fd);
|
|
||||||
TALLOC_FREE(mem_ctx);
|
|
||||||
return NT_STATUS_NO_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
p = sids;
|
|
||||||
for (i=0; i<count; i++) {
|
|
||||||
p += dom_sid_string_buf(ids[i].sid, p, sidslen - (p - sids));
|
|
||||||
*p++ = '\n';
|
|
||||||
}
|
|
||||||
*p++ = '\0';
|
|
||||||
|
|
||||||
DEBUG(10, ("sids=\n%s", sids));
|
|
||||||
|
|
||||||
req.length = sizeof(struct winbindd_request);
|
|
||||||
req.cmd = WINBINDD_SIDS_TO_XIDS;
|
|
||||||
req.pid = getpid();
|
|
||||||
req.extra_data.data = sids;
|
|
||||||
req.extra_len = sidslen;
|
|
||||||
|
|
||||||
ret = wb_simple_trans(ev, fd, &req, mem_ctx, &resp, &err);
|
|
||||||
if (ret == -1) {
|
|
||||||
return map_nt_error_from_unix_common(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
close(fd);
|
|
||||||
|
|
||||||
p = resp->extra_data.data;
|
|
||||||
|
|
||||||
for (i=0; i<count; i++) {
|
|
||||||
struct unixid *id = &ids[i].xid;
|
|
||||||
char *q;
|
|
||||||
|
|
||||||
switch (p[0]) {
|
|
||||||
case 'U':
|
|
||||||
id->type = ID_TYPE_UID;
|
|
||||||
id->id = strtoul(p+1, &q, 10);
|
|
||||||
break;
|
|
||||||
case 'G':
|
|
||||||
id->type = ID_TYPE_GID;
|
|
||||||
id->id = strtoul(p+1, &q, 10);
|
|
||||||
break;
|
|
||||||
case 'B':
|
|
||||||
id->type = ID_TYPE_BOTH;
|
|
||||||
id->id = strtoul(p+1, &q, 10);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
id->type = ID_TYPE_NOT_SPECIFIED;
|
|
||||||
id->id = UINT32_MAX;
|
|
||||||
q = strchr(p, '\n');
|
|
||||||
break;
|
|
||||||
};
|
|
||||||
ids[i].status = ID_MAPPED;
|
|
||||||
|
|
||||||
if (q == NULL || q[0] != '\n') {
|
|
||||||
TALLOC_FREE(mem_ctx);
|
|
||||||
return NT_STATUS_INTERNAL_ERROR;
|
|
||||||
}
|
|
||||||
p = q+1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NT_STATUS_OK;
|
|
||||||
}
|
|
||||||
|
@ -39,9 +39,6 @@ struct composite_context *wbc_sids_to_xids_send(struct wbc_context *wbc_ctx,
|
|||||||
NTSTATUS wbc_sids_to_xids_recv(struct composite_context *ctx,
|
NTSTATUS wbc_sids_to_xids_recv(struct composite_context *ctx,
|
||||||
struct id_map **ids);
|
struct id_map **ids);
|
||||||
|
|
||||||
NTSTATUS wbc_sids_to_xids(struct tevent_context *ev, struct id_map *ids,
|
|
||||||
uint32_t count);
|
|
||||||
|
|
||||||
struct composite_context *wbc_xids_to_sids_send(struct wbc_context *wbc_ctx,
|
struct composite_context *wbc_xids_to_sids_send(struct wbc_context *wbc_ctx,
|
||||||
TALLOC_CTX *mem_ctx,
|
TALLOC_CTX *mem_ctx,
|
||||||
uint32_t count,
|
uint32_t count,
|
||||||
@ -50,5 +47,3 @@ struct composite_context *wbc_xids_to_sids_send(struct wbc_context *wbc_ctx,
|
|||||||
NTSTATUS wbc_xids_to_sids_recv(struct composite_context *ctx,
|
NTSTATUS wbc_xids_to_sids_recv(struct composite_context *ctx,
|
||||||
struct id_map **ids);
|
struct id_map **ids);
|
||||||
|
|
||||||
NTSTATUS wbc_xids_to_sids(struct tevent_context *ev, struct id_map *ids,
|
|
||||||
uint32_t count);
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
bld.SAMBA_LIBRARY('LIBWBCLIENT_OLD',
|
bld.SAMBA_LIBRARY('LIBWBCLIENT_OLD',
|
||||||
source='wbclient.c',
|
source='wbclient.c',
|
||||||
public_deps='errors events',
|
public_deps='errors events',
|
||||||
deps='WB_REQTRANS NDR_WINBIND MESSAGING RPC_NDR_WINBIND',
|
deps='NDR_WINBIND MESSAGING RPC_NDR_WINBIND',
|
||||||
private_library=True
|
private_library=True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user