mirror of
https://github.com/samba-team/samba.git
synced 2025-11-15 16:23:49 +03:00
Doing this required reworking ejsnet, particularly so it could take a set of credentials, not just a username and password argument. This required fixing the ejsnet.js test script, which now adds and deletes a user, and is run from 'make test'. This should prevent it being broken again. Deleting a user from ejsnet required that the matching backend be added to libnet, hooking fortunetly onto already existing code for the actual deletion. The js credentials interface now handles the 'set machine account' flag. New functions have been added to provision.js to wrap the basic operations (so we can write a command line version, as well as the web based version). Andrew Bartlett
127 lines
3.3 KiB
C
127 lines
3.3 KiB
C
/*
|
|
Samba Unix/Linux SMB client library
|
|
Distributed SMB/CIFS Server Management Utility
|
|
|
|
Copyright (C) Rafal Szczesniak <mimir@samba.org> 2005
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
#include "includes.h"
|
|
#include "utils/net/net.h"
|
|
#include "libnet/libnet.h"
|
|
|
|
static int net_user_add(struct net_context *ctx, int argc, const char **argv)
|
|
{
|
|
NTSTATUS status;
|
|
struct libnet_context *lnet_ctx;
|
|
struct libnet_CreateUser r;
|
|
char *user_name;
|
|
|
|
/* command line argument preparation */
|
|
switch (argc) {
|
|
case 0:
|
|
return net_user_usage(ctx, argc, argv);
|
|
break;
|
|
case 1:
|
|
user_name = talloc_strdup(ctx->mem_ctx, argv[0]);
|
|
break;
|
|
default:
|
|
return net_user_usage(ctx, argc, argv);
|
|
}
|
|
|
|
/* libnet context init and its params */
|
|
lnet_ctx = libnet_context_init(NULL);
|
|
if (!lnet_ctx) return -1;
|
|
|
|
lnet_ctx->cred = ctx->credentials;
|
|
|
|
/* calling CreateUser function */
|
|
r.level = LIBNET_CREATE_USER_GENERIC;
|
|
r.in.user_name = user_name;
|
|
r.in.domain_name = cli_credentials_get_domain(lnet_ctx->cred);
|
|
|
|
status = libnet_CreateUser(lnet_ctx, ctx->mem_ctx, &r);
|
|
if (!NT_STATUS_IS_OK(status)) {
|
|
DEBUG(0, ("Failed to add user account: %s\n",
|
|
r.out.error_string));
|
|
return -1;
|
|
}
|
|
|
|
talloc_free(lnet_ctx);
|
|
return 0;
|
|
}
|
|
|
|
static int net_user_delete(struct net_context *ctx, int argc, const char **argv)
|
|
{
|
|
NTSTATUS status;
|
|
struct libnet_context *lnet_ctx;
|
|
struct libnet_DeleteUser r;
|
|
char *user_name;
|
|
|
|
/* command line argument preparation */
|
|
switch (argc) {
|
|
case 0:
|
|
return net_user_usage(ctx, argc, argv);
|
|
break;
|
|
case 1:
|
|
user_name = talloc_strdup(ctx->mem_ctx, argv[0]);
|
|
break;
|
|
default:
|
|
return net_user_usage(ctx, argc, argv);
|
|
}
|
|
|
|
/* libnet context init and its params */
|
|
lnet_ctx = libnet_context_init(NULL);
|
|
if (!lnet_ctx) return -1;
|
|
|
|
lnet_ctx->cred = ctx->credentials;
|
|
|
|
/* calling DeleteUser function */
|
|
r.level = LIBNET_DELETE_USER_GENERIC;
|
|
r.in.user_name = user_name;
|
|
r.in.domain_name = cli_credentials_get_domain(lnet_ctx->cred);
|
|
|
|
status = libnet_DeleteUser(lnet_ctx, ctx->mem_ctx, &r);
|
|
if (!NT_STATUS_IS_OK(status)) {
|
|
DEBUG(0, ("Failed to delete user account: %s\n",
|
|
r.out.error_string));
|
|
return -1;
|
|
}
|
|
|
|
talloc_free(lnet_ctx);
|
|
return 0;
|
|
}
|
|
|
|
|
|
static const struct net_functable net_user_functable[] = {
|
|
{ "add", "create new user account\n", net_user_add, net_user_usage },
|
|
{ "delete", "delete an existing user account\n", net_user_delete, net_user_usage },
|
|
{ NULL, NULL }
|
|
};
|
|
|
|
|
|
int net_user(struct net_context *ctx, int argc, const char **argv)
|
|
{
|
|
return net_run_function(ctx, argc, argv, net_user_functable, net_user_usage);
|
|
}
|
|
|
|
|
|
int net_user_usage(struct net_context *ctx, int argc, const char **argv)
|
|
{
|
|
d_printf("net user <command> [options]\n");
|
|
return 0;
|
|
}
|