The branch, v3-2-test has been updated via 4868b4ea1a18d4218330c49bf57818c4b5117d1d (commit) via 0105770c1598e6fcbcaa29e17f3b7fd33114a333 (commit) via 9bbb6cea0b21d98ae13f7a41226b437515bd5a2f (commit) via 82803186febfe6a55c1a598073657c2c4a513000 (commit) via dc165e1c80586664ddb4d3d68182598d02ba204a (commit) from 020b1e6431601fadf44dbfe8393908c096ecfa4c (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test - Log ----------------------------------------------------------------- commit 4868b4ea1a18d4218330c49bf57818c4b5117d1d Author: Günther Deschner <[EMAIL PROTECTED]> Date: Wed Apr 16 02:41:52 2008 +0200 net: Use NetUserAdd for "net rpc user add". Guenther commit 0105770c1598e6fcbcaa29e17f3b7fd33114a333 Author: Günther Deschner <[EMAIL PROTECTED]> Date: Wed Apr 16 02:39:41 2008 +0200 net: use NetUserDel for "net rpc user delete". Guenther commit 9bbb6cea0b21d98ae13f7a41226b437515bd5a2f Author: Günther Deschner <[EMAIL PROTECTED]> Date: Wed Apr 16 02:38:13 2008 +0200 libnetapi: Let NetUserAdd_l/NetUserDel_l talk to the local RPC server. Guenther commit 82803186febfe6a55c1a598073657c2c4a513000 Author: Günther Deschner <[EMAIL PROTECTED]> Date: Wed Apr 16 02:37:27 2008 +0200 errors: Add WERR_NO_SUCH_USER. Guenther commit dc165e1c80586664ddb4d3d68182598d02ba204a Author: Günther Deschner <[EMAIL PROTECTED]> Date: Wed Apr 16 02:23:20 2008 +0200 errors: Add WERR_NONE_MAPPED. Guenther ----------------------------------------------------------------------- Summary of changes: source/include/doserr.h | 2 + source/lib/netapi/user.c | 30 ++++++++++++++------- source/libsmb/doserr.c | 4 +++ source/utils/net_rpc.c | 64 ++++++++++++++++++++++++++++++++++++++++++--- 4 files changed, 85 insertions(+), 15 deletions(-) Changeset truncated at 500 lines: diff --git a/source/include/doserr.h b/source/include/doserr.h index 684f172..65892d3 100644 --- a/source/include/doserr.h +++ b/source/include/doserr.h @@ -207,9 +207,11 @@ #define WERR_NO_LOGON_SERVERS W_ERROR(1311) #define WERR_NO_SUCH_LOGON_SESSION W_ERROR(1312) #define WERR_USER_ALREADY_EXISTS W_ERROR(1316) +#define WERR_NO_SUCH_USER W_ERROR(1317) #define WERR_PASSWORD_RESTRICTION W_ERROR(1325) #define WERR_LOGON_FAILURE W_ERROR(1326) #define WERR_NO_SUCH_DOMAIN W_ERROR(1355) +#define WERR_NONE_MAPPED W_ERROR(1332) #define WERR_INVALID_SECURITY_DESCRIPTOR W_ERROR(1338) #define WERR_INVALID_DOMAIN_STATE W_ERROR(1353) #define WERR_INVALID_DOMAIN_ROLE W_ERROR(1354) diff --git a/source/lib/netapi/user.c b/source/lib/netapi/user.c index 55d9795..05a0510 100644 --- a/source/lib/netapi/user.c +++ b/source/lib/netapi/user.c @@ -27,15 +27,6 @@ /**************************************************************** ****************************************************************/ -WERROR NetUserAdd_l(struct libnetapi_ctx *ctx, - struct NetUserAdd *r) -{ - return WERR_NOT_SUPPORTED; -} - -/**************************************************************** -****************************************************************/ - static void convert_USER_INFO_1_to_samr_user_info25(struct USER_INFO_1 *info1, DATA_BLOB *user_session_key, struct samr_UserInfo25 *info25) @@ -344,6 +335,20 @@ WERROR NetUserAdd_r(struct libnetapi_ctx *ctx, /**************************************************************** ****************************************************************/ +WERROR NetUserAdd_l(struct libnetapi_ctx *ctx, + struct NetUserAdd *r) +{ + /* for now just talk to local RPC server */ + if (!r->in.server_name) { + r->in.server_name = "localhost"; + } + + return NetUserAdd_r(ctx, r); +} + +/**************************************************************** +****************************************************************/ + WERROR NetUserDel_r(struct libnetapi_ctx *ctx, struct NetUserDel *r) { @@ -515,7 +520,12 @@ WERROR NetUserDel_r(struct libnetapi_ctx *ctx, WERROR NetUserDel_l(struct libnetapi_ctx *ctx, struct NetUserDel *r) { - return WERR_NOT_SUPPORTED; + /* for now just talk to local RPC server */ + if (!r->in.server_name) { + r->in.server_name = "localhost"; + } + + return NetUserDel_r(ctx, r); } /**************************************************************** diff --git a/source/libsmb/doserr.c b/source/libsmb/doserr.c index fb5f2e1..8761106 100644 --- a/source/libsmb/doserr.c +++ b/source/libsmb/doserr.c @@ -67,6 +67,7 @@ werror_code_struct dos_errs[] = { "WERR_NO_LOGON_SERVERS", WERR_NO_LOGON_SERVERS }, { "WERR_NO_SUCH_LOGON_SESSION", WERR_NO_SUCH_LOGON_SESSION }, { "WERR_USER_ALREADY_EXISTS", WERR_USER_ALREADY_EXISTS }, + { "WERR_NO_SUCH_USER", WERR_NO_SUCH_USER }, { "WERR_PRINTER_DRIVER_IN_USE", WERR_PRINTER_DRIVER_IN_USE }, { "WERR_STATUS_MORE_ENTRIES ", WERR_STATUS_MORE_ENTRIES }, { "WERR_DFS_NO_SUCH_VOL", WERR_DFS_NO_SUCH_VOL }, @@ -85,6 +86,7 @@ werror_code_struct dos_errs[] = { "WERR_LOGON_FAILURE", WERR_LOGON_FAILURE }, { "WERR_PASSWORD_RESTRICTION", WERR_PASSWORD_RESTRICTION }, { "WERR_NO_SUCH_DOMAIN", WERR_NO_SUCH_DOMAIN }, + { "WERR_NONE_MAPPED", WERR_NONE_MAPPED }, { "WERR_INVALID_SECURITY_DESCRIPTOR", WERR_INVALID_SECURITY_DESCRIPTOR }, { "WERR_INVALID_DOMAIN_STATE", WERR_INVALID_DOMAIN_STATE }, { "WERR_INVALID_DOMAIN_ROLE", WERR_INVALID_DOMAIN_ROLE }, @@ -130,6 +132,8 @@ werror_str_struct dos_err_strs[] = { { WERR_TIME_SKEW, "Time difference between client and server" }, { WERR_USER_ALREADY_EXISTS, "User already exists" }, { WERR_PASSWORD_RESTRICTION, "Password does not meet restrictions" }, + { WERR_NONE_MAPPED, "Could not map names to SIDs" }, + { WERR_NO_SUCH_USER, "No such User" }, }; /***************************************************************************** diff --git a/source/utils/net_rpc.c b/source/utils/net_rpc.c index 5663680..d0e0487 100644 --- a/source/utils/net_rpc.c +++ b/source/utils/net_rpc.c @@ -730,8 +730,34 @@ static NTSTATUS rpc_user_add_internals(const DOM_SID *domain_sid, static int rpc_user_add(int argc, const char **argv) { - return run_rpc_command(NULL, PI_SAMR, 0, rpc_user_add_internals, - argc, argv); + NET_API_STATUS status; + struct USER_INFO_1 info1; + uint32_t parm_error = 0; + + if (argc < 1) { + d_printf("User must be specified\n"); + rpc_user_usage(argc, argv); + return 0; + } + + ZERO_STRUCT(info1); + + info1.usri1_name = argv[0]; + if (argc == 2) { + info1.usri1_password = argv[1]; + } + + status = NetUserAdd(opt_host, 1, (uint8_t *)&info1, &parm_error); + + if (status != 0) { + d_fprintf(stderr, "Failed to add user '%s' with: %s.\n", + argv[0], libnetapi_get_error_string(NULL, status)); + return -1; + } else { + d_printf("Added user '%s'.\n", argv[0]); + } + + return 0; } /** @@ -987,8 +1013,26 @@ static int rpc_user_rename(int argc, const char **argv) static int rpc_user_delete(int argc, const char **argv) { - return run_rpc_command(NULL, PI_SAMR, 0, rpc_user_del_internals, - argc, argv); + NET_API_STATUS status; + + if (argc < 1) { + d_printf("User must be specified\n"); + rpc_user_usage(argc, argv); + return 0; + } + + status = NetUserDel(opt_host, argv[0]); + + if (status != 0) { + d_fprintf(stderr, "Failed to delete user '%s' with: %s.\n", + argv[0], + libnetapi_get_error_string(NULL, status)); + return -1; + } else { + d_printf("Deleted user '%s'.\n", argv[0]); + } + + return 0; } /** @@ -1360,6 +1404,9 @@ static NTSTATUS rpc_user_list_internals(const DOM_SID *domain_sid, int net_rpc_user(int argc, const char **argv) { + struct libnetapi_ctx *ctx = NULL; + NET_API_STATUS status; + struct functable func[] = { {"add", rpc_user_add}, {"info", rpc_user_info}, @@ -1368,7 +1415,14 @@ int net_rpc_user(int argc, const char **argv) {"rename", rpc_user_rename}, {NULL, NULL} }; - + + status = libnetapi_init(&ctx); + if (status != 0) { + return -1; + } + libnetapi_set_username(ctx, opt_user_name); + libnetapi_set_password(ctx, opt_password); + if (argc == 0) { return run_rpc_command(NULL,PI_SAMR, 0, rpc_user_list_internals, -- Samba Shared Repository