summaryrefslogtreecommitdiff
path: root/source/utils/net_ads.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/utils/net_ads.c')
-rw-r--r--source/utils/net_ads.c1070
1 files changed, 380 insertions, 690 deletions
diff --git a/source/utils/net_ads.c b/source/utils/net_ads.c
index 7dbe518c3d..ef6b15122d 100644
--- a/source/utils/net_ads.c
+++ b/source/utils/net_ads.c
@@ -25,12 +25,48 @@
#ifdef HAVE_ADS
+int net_ads_usage(int argc, const char **argv)
+{
+ d_printf("join [createupn[=principal]] [createcomputer=<org_unit>]\n");
+ d_printf(" Join the local machine to a ADS realm\n");
+ d_printf("leave\n");
+ d_printf(" Remove the local machine from a ADS realm\n");
+ d_printf("testjoin\n");
+ d_printf(" Validates the machine account in the domain\n");
+ d_printf("user\n");
+ d_printf(" List, add, or delete users in the realm\n");
+ d_printf("group\n");
+ d_printf(" List, add, or delete groups in the realm\n");
+ d_printf("info\n");
+ d_printf(" Displays details regarding a specific AD server\n");
+ d_printf("status\n");
+ d_printf(" Display details regarding the machine's account in AD\n");
+ d_printf("lookup\n");
+ d_printf(" Performs CLDAP query of AD domain controllers\n");
+ d_printf("password <username@realm> <password> -Uadmin_username@realm%%admin_pass\n");
+ d_printf(" Change a user's password using an admin account\n");
+ d_printf(" (note: use realm in UPPERCASE, prompts if password is obmitted)\n");
+ d_printf("changetrustpw\n");
+ d_printf(" Change the trust account password of this machine in the AD tree\n");
+ d_printf("printer [info | publish | remove] <printername> <servername>\n");
+ d_printf(" Lookup, add, or remove directory entry for a printer\n");
+ d_printf("{search,dn,sid}\n");
+ d_printf(" Issue LDAP search queries using a general filter, by DN, or by SID\n");
+ d_printf("keytab\n");
+ d_printf(" Manage a local keytab file based on the machine account in AD\n");
+ d_printf("dns\n");
+ d_printf(" Issue a dynamic DNS update request the server's hostname\n");
+ d_printf(" (using the machine credentials)\n");
+
+ return -1;
+}
+
/* when we do not have sufficient input parameters to contact a remote domain
* we always fall back to our own realm - Guenther*/
-static const char *assume_own_realm(struct net_context *c)
+static const char *assume_own_realm(void)
{
- if (!c->opt_host && strequal(lp_workgroup(), c->opt_target_workgroup)) {
+ if (!opt_host && strequal(lp_workgroup(), opt_target_workgroup)) {
return lp_realm();
}
@@ -40,7 +76,7 @@ static const char *assume_own_realm(struct net_context *c)
/*
do a cldap netlogon query
*/
-static int net_ads_cldap_netlogon(struct net_context *c, ADS_STRUCT *ads)
+static int net_ads_cldap_netlogon(ADS_STRUCT *ads)
{
char addr[INET6_ADDRSTRLEN];
struct nbt_cldap_netlogon_5 reply;
@@ -79,9 +115,7 @@ static int net_ads_cldap_netlogon(struct net_context *c, ADS_STRUCT *ads)
"\tIs the closest DC: %s\n"
"\tIs writable: %s\n"
"\tHas a hardware clock: %s\n"
- "\tIs a non-domain NC serviced by LDAP server: %s\n"
- "\tIs NT6 DC that has some secrets: %s\n"
- "\tIs NT6 DC that has all secrets: %s\n",
+ "\tIs a non-domain NC serviced by LDAP server: %s\n",
(reply.server_type & NBT_SERVER_PDC) ? "yes" : "no",
(reply.server_type & NBT_SERVER_GC) ? "yes" : "no",
(reply.server_type & NBT_SERVER_LDAP) ? "yes" : "no",
@@ -91,10 +125,7 @@ static int net_ads_cldap_netlogon(struct net_context *c, ADS_STRUCT *ads)
(reply.server_type & NBT_SERVER_CLOSEST) ? "yes" : "no",
(reply.server_type & NBT_SERVER_WRITABLE) ? "yes" : "no",
(reply.server_type & NBT_SERVER_GOOD_TIMESERV) ? "yes" : "no",
- (reply.server_type & NBT_SERVER_NDNC) ? "yes" : "no",
- (reply.server_type & NBT_SERVER_SELECT_SECRET_DOMAIN_6) ? "yes" : "no",
- (reply.server_type & NBT_SERVER_FULL_SECRET_DOMAIN_6) ? "yes" : "no");
-
+ (reply.server_type & DS_SERVER_NDNC) ? "yes" : "no");
printf("Forest:\t\t\t%s\n", reply.forest);
printf("Domain:\t\t\t%s\n", reply.dns_domain);
@@ -119,46 +150,31 @@ static int net_ads_cldap_netlogon(struct net_context *c, ADS_STRUCT *ads)
this implements the CLDAP based netlogon lookup requests
for finding the domain controller of a ADS domain
*/
-static int net_ads_lookup(struct net_context *c, int argc, const char **argv)
+static int net_ads_lookup(int argc, const char **argv)
{
ADS_STRUCT *ads;
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads lookup\n"
- " Find the ADS DC using CLDAP lookup.\n");
- return 0;
- }
-
- if (!ADS_ERR_OK(ads_startup_nobind(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup_nobind(False, &ads))) {
d_fprintf(stderr, "Didn't find the cldap server!\n");
return -1;
}
if (!ads->config.realm) {
- ads->config.realm = CONST_DISCARD(char *, c->opt_target_workgroup);
+ ads->config.realm = CONST_DISCARD(char *, opt_target_workgroup);
ads->ldap.port = 389;
}
- return net_ads_cldap_netlogon(c, ads);
+ return net_ads_cldap_netlogon(ads);
}
-static int net_ads_info(struct net_context *c, int argc, const char **argv)
+static int net_ads_info(int argc, const char **argv)
{
ADS_STRUCT *ads;
char addr[INET6_ADDRSTRLEN];
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads info\n"
- " Display information about an Active Directory "
- "server.\n");
- return 0;
- }
-
- if (!ADS_ERR_OK(ads_startup_nobind(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup_nobind(False, &ads))) {
d_fprintf(stderr, "Didn't find the ldap server!\n");
return -1;
}
@@ -196,16 +212,15 @@ static void use_in_memory_ccache(void) {
setenv(KRB5_ENV_CCNAME, "MEMORY:net_ads", 1);
}
-static ADS_STATUS ads_startup_int(struct net_context *c, bool only_own_domain,
- uint32 auth_flags, ADS_STRUCT **ads_ret)
+static ADS_STATUS ads_startup_int(bool only_own_domain, uint32 auth_flags, ADS_STRUCT **ads_ret)
{
ADS_STRUCT *ads = NULL;
ADS_STATUS status;
- bool need_password = false;
- bool second_time = false;
+ bool need_password = False;
+ bool second_time = False;
char *cp;
const char *realm = NULL;
- bool tried_closest_dc = false;
+ bool tried_closest_dc = False;
/* lp_realm() should be handled by a command line param,
However, the join requires that realm be set in smb.conf
@@ -218,37 +233,37 @@ retry_connect:
if (only_own_domain) {
realm = lp_realm();
} else {
- realm = assume_own_realm(c);
+ realm = assume_own_realm();
}
- ads = ads_init(realm, c->opt_target_workgroup, c->opt_host);
+ ads = ads_init(realm, opt_target_workgroup, opt_host);
- if (!c->opt_user_name) {
- c->opt_user_name = "administrator";
+ if (!opt_user_name) {
+ opt_user_name = "administrator";
}
- if (c->opt_user_specified) {
- need_password = true;
+ if (opt_user_specified) {
+ need_password = True;
}
retry:
- if (!c->opt_password && need_password && !c->opt_machine_pass) {
- c->opt_password = net_prompt_pass(c, c->opt_user_name);
- if (!c->opt_password) {
+ if (!opt_password && need_password && !opt_machine_pass) {
+ opt_password = net_prompt_pass(opt_user_name);
+ if (!opt_password) {
ads_destroy(&ads);
return ADS_ERROR(LDAP_NO_MEMORY);
}
}
- if (c->opt_password) {
+ if (opt_password) {
use_in_memory_ccache();
SAFE_FREE(ads->auth.password);
- ads->auth.password = smb_xstrdup(c->opt_password);
+ ads->auth.password = smb_xstrdup(opt_password);
}
ads->auth.flags |= auth_flags;
SAFE_FREE(ads->auth.user_name);
- ads->auth.user_name = smb_xstrdup(c->opt_user_name);
+ ads->auth.user_name = smb_xstrdup(opt_user_name);
/*
* If the username is of the form "name@realm",
@@ -274,8 +289,8 @@ retry:
}
if (!need_password && !second_time && !(auth_flags & ADS_AUTH_NO_BIND)) {
- need_password = true;
- second_time = true;
+ need_password = True;
+ second_time = True;
goto retry;
} else {
ads_destroy(&ads);
@@ -287,9 +302,9 @@ retry:
* This is done by reconnecting to ADS because only the first call to
* ads_connect will give us our own sitename */
- if ((only_own_domain || !c->opt_host) && !tried_closest_dc) {
+ if ((only_own_domain || !opt_host) && !tried_closest_dc) {
- tried_closest_dc = true; /* avoid loop */
+ tried_closest_dc = True; /* avoid loop */
if (!ads->config.tried_closest_dc) {
@@ -307,14 +322,14 @@ retry:
return status;
}
-ADS_STATUS ads_startup(struct net_context *c, bool only_own_domain, ADS_STRUCT **ads)
+ADS_STATUS ads_startup(bool only_own_domain, ADS_STRUCT **ads)
{
- return ads_startup_int(c, only_own_domain, 0, ads);
+ return ads_startup_int(only_own_domain, 0, ads);
}
-ADS_STATUS ads_startup_nobind(struct net_context *c, bool only_own_domain, ADS_STRUCT **ads)
+ADS_STATUS ads_startup_nobind(bool only_own_domain, ADS_STRUCT **ads)
{
- return ads_startup_int(c, only_own_domain, ADS_AUTH_NO_BIND, ads);
+ return ads_startup_int(only_own_domain, ADS_AUTH_NO_BIND, ads);
}
/*
@@ -342,39 +357,32 @@ static int net_ads_check_int(const char *realm, const char *workgroup, const cha
return 0;
}
-int net_ads_check_our_domain(struct net_context *c)
+int net_ads_check_our_domain(void)
{
return net_ads_check_int(lp_realm(), lp_workgroup(), NULL);
}
-int net_ads_check(struct net_context *c)
+int net_ads_check(void)
{
- return net_ads_check_int(NULL, c->opt_workgroup, c->opt_host);
+ return net_ads_check_int(NULL, opt_workgroup, opt_host);
}
/*
determine the netbios workgroup name for a domain
*/
-static int net_ads_workgroup(struct net_context *c, int argc, const char **argv)
+static int net_ads_workgroup(int argc, const char **argv)
{
ADS_STRUCT *ads;
char addr[INET6_ADDRSTRLEN];
struct nbt_cldap_netlogon_5 reply;
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads workgroup\n"
- " Print the workgroup name\n");
- return 0;
- }
-
- if (!ADS_ERR_OK(ads_startup_nobind(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup_nobind(False, &ads))) {
d_fprintf(stderr, "Didn't find the cldap server!\n");
return -1;
}
if (!ads->config.realm) {
- ads->config.realm = CONST_DISCARD(char *, c->opt_target_workgroup);
+ ads->config.realm = CONST_DISCARD(char *, opt_target_workgroup);
ads->ldap.port = 389;
}
@@ -409,24 +417,24 @@ static bool usergrp_display(ADS_STRUCT *ads, char *field, void **values, void *d
}
SAFE_FREE(disp_fields[0]);
SAFE_FREE(disp_fields[1]);
- return true;
+ return True;
}
if (!values) /* must be new field, indicate string field */
- return true;
+ return True;
if (StrCaseCmp(field, "sAMAccountName") == 0) {
disp_fields[0] = SMB_STRDUP((char *) values[0]);
}
if (StrCaseCmp(field, "description") == 0)
disp_fields[1] = SMB_STRDUP((char *) values[0]);
- return true;
+ return True;
}
-static int net_ads_user_usage(struct net_context *c, int argc, const char **argv)
+static int net_ads_user_usage(int argc, const char **argv)
{
- return net_user_usage(c, argc, argv);
+ return net_help_user(argc, argv);
}
-static int ads_user_add(struct net_context *c, int argc, const char **argv)
+static int ads_user_add(int argc, const char **argv)
{
ADS_STRUCT *ads;
ADS_STATUS status;
@@ -435,10 +443,9 @@ static int ads_user_add(struct net_context *c, int argc, const char **argv)
int rc = -1;
char *ou_str = NULL;
- if (argc < 1 || c->display_usage)
- return net_ads_user_usage(c, argc, argv);
+ if (argc < 1) return net_ads_user_usage(argc, argv);
- if (!ADS_ERR_OK(ads_startup(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(False, &ads))) {
return -1;
}
@@ -454,13 +461,13 @@ static int ads_user_add(struct net_context *c, int argc, const char **argv)
goto done;
}
- if (c->opt_container) {
- ou_str = SMB_STRDUP(c->opt_container);
+ if (opt_container) {
+ ou_str = SMB_STRDUP(opt_container);
} else {
ou_str = ads_default_ou_string(ads, WELL_KNOWN_GUID_USERS);
}
- status = ads_add_user_acct(ads, argv[0], ou_str, c->opt_comment);
+ status = ads_add_user_acct(ads, argv[0], ou_str, opt_comment);
if (!ADS_ERR_OK(status)) {
d_fprintf(stderr, "Could not add user %s: %s\n", argv[0],
@@ -505,7 +512,7 @@ static int ads_user_add(struct net_context *c, int argc, const char **argv)
return rc;
}
-static int ads_user_info(struct net_context *c, int argc, const char **argv)
+static int ads_user_info(int argc, const char **argv)
{
ADS_STRUCT *ads;
ADS_STATUS rc;
@@ -515,8 +522,8 @@ static int ads_user_info(struct net_context *c, int argc, const char **argv)
char **grouplist;
char *escaped_user;
- if (argc < 1 || c->display_usage) {
- return net_ads_user_usage(c, argc, argv);
+ if (argc < 1) {
+ return net_ads_user_usage(argc, argv);
}
escaped_user = escape_ldap_string_alloc(argv[0]);
@@ -526,7 +533,7 @@ static int ads_user_info(struct net_context *c, int argc, const char **argv)
return -1;
}
- if (!ADS_ERR_OK(ads_startup(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(False, &ads))) {
SAFE_FREE(escaped_user);
return -1;
}
@@ -562,7 +569,7 @@ static int ads_user_info(struct net_context *c, int argc, const char **argv)
return 0;
}
-static int ads_user_delete(struct net_context *c, int argc, const char **argv)
+static int ads_user_delete(int argc, const char **argv)
{
ADS_STRUCT *ads;
ADS_STATUS rc;
@@ -570,10 +577,10 @@ static int ads_user_delete(struct net_context *c, int argc, const char **argv)
char *userdn;
if (argc < 1) {
- return net_ads_user_usage(c, argc, argv);
+ return net_ads_user_usage(argc, argv);
}
- if (!ADS_ERR_OK(ads_startup(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(False, &ads))) {
return -1;
}
@@ -599,34 +606,13 @@ static int ads_user_delete(struct net_context *c, int argc, const char **argv)
return -1;
}
-int net_ads_user(struct net_context *c, int argc, const char **argv)
+int net_ads_user(int argc, const char **argv)
{
struct functable func[] = {
- {
- "add",
- ads_user_add,
- NET_TRANSPORT_ADS,
- "Add an AD user",
- "net ads user add\n"
- " Add an AD user"
- },
- {
- "info",
- ads_user_info,
- NET_TRANSPORT_ADS,
- "Display information about an AD user",
- "net ads user info\n"
- " Display information about an AD user"
- },
- {
- "delete",
- ads_user_delete,
- NET_TRANSPORT_ADS,
- "Delete an AD user",
- "net ads user delete\n"
- " Delete an AD user"
- },
- {NULL, NULL, 0, NULL, NULL}
+ {"ADD", ads_user_add},
+ {"INFO", ads_user_info},
+ {"DELETE", ads_user_delete},
+ {NULL, NULL}
};
ADS_STRUCT *ads;
ADS_STATUS rc;
@@ -635,41 +621,33 @@ int net_ads_user(struct net_context *c, int argc, const char **argv)
char *disp_fields[2] = {NULL, NULL};
if (argc == 0) {
- if (c->display_usage) {
- d_printf("Usage:\n");
- d_printf("net ads user\n"
- " List AD users\n");
- net_display_usage_from_functable(func);
- return 0;
- }
-
- if (!ADS_ERR_OK(ads_startup(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(False, &ads))) {
return -1;
}
- if (c->opt_long_list_entries)
- d_printf("\nUser name Comment"
+ if (opt_long_list_entries)
+ d_printf("\nUser name Comment"\
"\n-----------------------------\n");
rc = ads_do_search_all_fn(ads, ads->config.bind_path,
LDAP_SCOPE_SUBTREE,
"(objectCategory=user)",
- c->opt_long_list_entries ? longattrs :
+ opt_long_list_entries ? longattrs :
shortattrs, usergrp_display,
disp_fields);
ads_destroy(&ads);
return ADS_ERR_OK(rc) ? 0 : -1;
}
- return net_run_function(c, argc, argv, "net ads user", func);
+ return net_run_function(argc, argv, func, net_ads_user_usage);
}
-static int net_ads_group_usage(struct net_context *c, int argc, const char **argv)
+static int net_ads_group_usage(int argc, const char **argv)
{
- return net_group_usage(c, argc, argv);
+ return net_help_group(argc, argv);
}
-static int ads_group_add(struct net_context *c, int argc, const char **argv)
+static int ads_group_add(int argc, const char **argv)
{
ADS_STRUCT *ads;
ADS_STATUS status;
@@ -677,11 +655,11 @@ static int ads_group_add(struct net_context *c, int argc, const char **argv)
int rc = -1;
char *ou_str = NULL;
- if (argc < 1 || c->display_usage) {
- return net_ads_group_usage(c, argc, argv);
+ if (argc < 1) {
+ return net_ads_group_usage(argc, argv);
}
- if (!ADS_ERR_OK(ads_startup(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(False, &ads))) {
return -1;
}
@@ -697,13 +675,13 @@ static int ads_group_add(struct net_context *c, int argc, const char **argv)
goto done;
}
- if (c->opt_container) {
- ou_str = SMB_STRDUP(c->opt_container);
+ if (opt_container) {
+ ou_str = SMB_STRDUP(opt_container);
} else {
ou_str = ads_default_ou_string(ads, WELL_KNOWN_GUID_USERS);
}
- status = ads_add_group_acct(ads, argv[0], ou_str, c->opt_comment);
+ status = ads_add_group_acct(ads, argv[0], ou_str, opt_comment);
if (ADS_ERR_OK(status)) {
d_printf("Group %s added\n", argv[0]);
@@ -721,18 +699,18 @@ static int ads_group_add(struct net_context *c, int argc, const char **argv)
return rc;
}
-static int ads_group_delete(struct net_context *c, int argc, const char **argv)
+static int ads_group_delete(int argc, const char **argv)
{
ADS_STRUCT *ads;
ADS_STATUS rc;
LDAPMessage *res = NULL;
char *groupdn;
- if (argc < 1 || c->display_usage) {
- return net_ads_group_usage(c, argc, argv);
+ if (argc < 1) {
+ return net_ads_group_usage(argc, argv);
}
- if (!ADS_ERR_OK(ads_startup(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(False, &ads))) {
return -1;
}
@@ -758,26 +736,12 @@ static int ads_group_delete(struct net_context *c, int argc, const char **argv)
return -1;
}
-int net_ads_group(struct net_context *c, int argc, const char **argv)
+int net_ads_group(int argc, const char **argv)
{
struct functable func[] = {
- {
- "add",
- ads_group_add,
- NET_TRANSPORT_ADS,
- "Add an AD group",
- "net ads group add\n"
- " Add an AD group"
- },
- {
- "delete",
- ads_group_delete,
- NET_TRANSPORT_ADS,
- "Delete an AD group",
- "net ads group delete\n"
- " Delete an AD group"
- },
- {NULL, NULL, 0, NULL, NULL}
+ {"ADD", ads_group_add},
+ {"DELETE", ads_group_delete},
+ {NULL, NULL}
};
ADS_STRUCT *ads;
ADS_STATUS rc;
@@ -786,48 +750,33 @@ int net_ads_group(struct net_context *c, int argc, const char **argv)
char *disp_fields[2] = {NULL, NULL};
if (argc == 0) {
- if (c->display_usage) {
- d_printf("Usage:\n");
- d_printf("net ads group\n"
- " List AD groups\n");
- net_display_usage_from_functable(func);
- return 0;
- }
-
- if (!ADS_ERR_OK(ads_startup(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(False, &ads))) {
return -1;
}
- if (c->opt_long_list_entries)
- d_printf("\nGroup name Comment"
+ if (opt_long_list_entries)
+ d_printf("\nGroup name Comment"\
"\n-----------------------------\n");
rc = ads_do_search_all_fn(ads, ads->config.bind_path,
LDAP_SCOPE_SUBTREE,
"(objectCategory=group)",
- c->opt_long_list_entries ? longattrs :
+ opt_long_list_entries ? longattrs :
shortattrs, usergrp_display,
disp_fields);
ads_destroy(&ads);
return ADS_ERR_OK(rc) ? 0 : -1;
}
- return net_run_function(c, argc, argv, "net ads group", func);
+ return net_run_function(argc, argv, func, net_ads_group_usage);
}
-static int net_ads_status(struct net_context *c, int argc, const char **argv)
+static int net_ads_status(int argc, const char **argv)
{
ADS_STRUCT *ads;
ADS_STATUS rc;
LDAPMessage *res;
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads status\n"
- " Display machine account details\n");
- return 0;
- }
-
- if (!ADS_ERR_OK(ads_startup(c, true, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(True, &ads))) {
return -1;
}
@@ -856,19 +805,12 @@ static int net_ads_status(struct net_context *c, int argc, const char **argv)
with full control to the computer object's ACL.
*******************************************************************/
-static int net_ads_leave(struct net_context *c, int argc, const char **argv)
+static int net_ads_leave(int argc, const char **argv)
{
TALLOC_CTX *ctx;
struct libnet_UnjoinCtx *r = NULL;
WERROR werr;
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads leave\n"
- " Leave an AD domain\n");
- return 0;
- }
-
if (!*lp_realm()) {
d_fprintf(stderr, "No realm set, are we joined ?\n");
return -1;
@@ -879,9 +821,7 @@ static int net_ads_leave(struct net_context *c, int argc, const char **argv)
return -1;
}
- if (!c->opt_kerberos) {
- use_in_memory_ccache();
- }
+ use_in_memory_ccache();
werr = libnet_init_UnjoinCtx(ctx, &r);
if (!W_ERROR_IS_OK(werr)) {
@@ -890,11 +830,10 @@ static int net_ads_leave(struct net_context *c, int argc, const char **argv)
}
r->in.debug = true;
- r->in.use_kerberos = c->opt_kerberos;
- r->in.dc_name = c->opt_host;
+ r->in.dc_name = opt_host;
r->in.domain_name = lp_realm();
- r->in.admin_account = c->opt_user_name;
- r->in.admin_password = net_prompt_pass(c, c->opt_user_name);
+ r->in.admin_account = opt_user_name;
+ r->in.admin_password = net_prompt_pass(opt_user_name);
r->in.modify_config = lp_config_backend_is_registry();
r->in.unjoin_flags = WKSSVC_JOIN_FLAGS_JOIN_TYPE |
WKSSVC_JOIN_FLAGS_ACCOUNT_DELETE;
@@ -935,7 +874,7 @@ static int net_ads_leave(struct net_context *c, int argc, const char **argv)
return -1;
}
-static NTSTATUS net_ads_join_ok(struct net_context *c)
+static NTSTATUS net_ads_join_ok(void)
{
ADS_STRUCT *ads = NULL;
ADS_STATUS status;
@@ -945,9 +884,9 @@ static NTSTATUS net_ads_join_ok(struct net_context *c)
return NT_STATUS_ACCESS_DENIED;
}
- net_use_krb_machine_account(c);
+ net_use_krb_machine_account();
- status = ads_startup(c, true, &ads);
+ status = ads_startup(True, &ads);
if (!ADS_ERR_OK(status)) {
return ads_ntstatus(status);
}
@@ -959,20 +898,13 @@ static NTSTATUS net_ads_join_ok(struct net_context *c)
/*
check that an existing join is OK
*/
-int net_ads_testjoin(struct net_context *c, int argc, const char **argv)
+int net_ads_testjoin(int argc, const char **argv)
{
NTSTATUS status;
use_in_memory_ccache();
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads testjoin\n"
- " Test if the existing join is ok\n");
- return 0;
- }
-
/* Display success or failure */
- status = net_ads_join_ok(c);
+ status = net_ads_join_ok();
if (!NT_STATUS_IS_OK(status)) {
fprintf(stderr,"Join to domain is not valid: %s\n",
get_friendly_nt_error_msg(status));
@@ -1140,7 +1072,7 @@ static NTSTATUS net_update_dns(TALLOC_CTX *mem_ctx, ADS_STRUCT *ads)
/*******************************************************************
********************************************************************/
-static int net_ads_join_usage(struct net_context *c, int argc, const char **argv)
+static int net_ads_join_usage(int argc, const char **argv)
{
d_printf("net ads join [options]\n");
d_printf("Valid options:\n");
@@ -1163,13 +1095,13 @@ static int net_ads_join_usage(struct net_context *c, int argc, const char **argv
/*******************************************************************
********************************************************************/
-int net_ads_join(struct net_context *c, int argc, const char **argv)
+int net_ads_join(int argc, const char **argv)
{
TALLOC_CTX *ctx = NULL;
struct libnet_JoinCtx *r = NULL;
const char *domain = lp_realm();
WERROR werr = WERR_SETUP_NOT_JOINED;
- bool createupn = false;
+ bool createupn = False;
const char *machineupn = NULL;
const char *create_in_ou = NULL;
int i;
@@ -1177,9 +1109,6 @@ int net_ads_join(struct net_context *c, int argc, const char **argv)
const char *os_version = NULL;
bool modify_config = lp_config_backend_is_registry();
- if (c->display_usage)
- return net_ads_join_usage(c, argc, argv);
-
if (!modify_config) {
werr = check_ads_config();
@@ -1195,9 +1124,7 @@ int net_ads_join(struct net_context *c, int argc, const char **argv)
goto fail;
}
- if (!c->opt_kerberos) {
- use_in_memory_ccache();
- }
+ use_in_memory_ccache();
werr = libnet_init_JoinCtx(ctx, &r);
if (!W_ERROR_IS_OK(werr)) {
@@ -1208,7 +1135,7 @@ int net_ads_join(struct net_context *c, int argc, const char **argv)
for ( i=0; i<argc; i++ ) {
if ( !StrnCaseCmp(argv[i], "createupn", strlen("createupn")) ) {
- createupn = true;
+ createupn = True;
machineupn = get_string_param(argv[i]);
}
else if ( !StrnCaseCmp(argv[i], "createcomputer", strlen("createcomputer")) ) {
@@ -1251,11 +1178,10 @@ int net_ads_join(struct net_context *c, int argc, const char **argv)
r->in.account_ou = create_in_ou;
r->in.os_name = os_name;
r->in.os_version = os_version;
- r->in.dc_name = c->opt_host;
- r->in.admin_account = c->opt_user_name;
- r->in.admin_password = net_prompt_pass(c, c->opt_user_name);
+ r->in.dc_name = opt_host;
+ r->in.admin_account = opt_user_name;
+ r->in.admin_password = net_prompt_pass(opt_user_name);
r->in.debug = true;
- r->in.use_kerberos = c->opt_kerberos;
r->in.modify_config = modify_config;
r->in.join_flags = WKSSVC_JOIN_FLAGS_JOIN_TYPE |
WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE |
@@ -1329,7 +1255,24 @@ fail:
/*******************************************************************
********************************************************************/
-static int net_ads_dns_register(struct net_context *c, int argc, const char **argv)
+static int net_ads_dns_usage(int argc, const char **argv)
+{
+#if defined(WITH_DNS_UPDATES)
+ d_printf("net ads dns <command>\n");
+ d_printf("Valid commands:\n");
+ d_printf(" register Issue a dynamic DNS update request for our hostname\n");
+
+ return 0;
+#else
+ d_fprintf(stderr, "DNS update support not enabled at compile time!\n");
+ return -1;
+#endif
+}
+
+/*******************************************************************
+ ********************************************************************/
+
+static int net_ads_dns_register(int argc, const char **argv)
{
#if defined(WITH_DNS_UPDATES)
ADS_STRUCT *ads;
@@ -1340,10 +1283,8 @@ static int net_ads_dns_register(struct net_context *c, int argc, const char **ar
talloc_enable_leak_report();
#endif
- if (argc > 0 || c->display_usage) {
- d_printf("Usage:\n"
- "net ads dns register\n"
- " Register hostname with DNS\n");
+ if (argc > 0) {
+ d_fprintf(stderr, "net ads dns register\n");
return -1;
}
@@ -1352,7 +1293,7 @@ static int net_ads_dns_register(struct net_context *c, int argc, const char **ar
return -1;
}
- status = ads_startup(c, true, &ads);
+ status = ads_startup(True, &ads);
if ( !ADS_ERR_OK(status) ) {
DEBUG(1, ("error on ads_startup: %s\n", ads_errstr(status)));
TALLOC_FREE(ctx);
@@ -1382,7 +1323,7 @@ static int net_ads_dns_register(struct net_context *c, int argc, const char **ar
DNS_ERROR do_gethostbyname(const char *server, const char *host);
#endif
-static int net_ads_dns_gethostbyname(struct net_context *c, int argc, const char **argv)
+static int net_ads_dns_gethostbyname(int argc, const char **argv)
{
#if defined(WITH_DNS_UPDATES)
DNS_ERROR err;
@@ -1391,12 +1332,9 @@ static int net_ads_dns_gethostbyname(struct net_context *c, int argc, const char
talloc_enable_leak_report();
#endif
- if (argc != 2 || c->display_usage) {
- d_printf("Usage:\n"
- "net ads dns gethostbyname <server> <name>\n"
- " Look up hostname from the AD\n"
- " server\tName server to use\n"
- " name\tName to look up\n");
+ if (argc != 2) {
+ d_fprintf(stderr, "net ads dns gethostbyname <server> "
+ "<name>\n");
return -1;
}
@@ -1407,35 +1345,21 @@ static int net_ads_dns_gethostbyname(struct net_context *c, int argc, const char
return 0;
}
-static int net_ads_dns(struct net_context *c, int argc, const char *argv[])
+static int net_ads_dns(int argc, const char *argv[])
{
struct functable func[] = {
- {
- "register",
- net_ads_dns_register,
- NET_TRANSPORT_ADS,
- "Add host dns entry to AD",
- "net ads dns register\n"
- " Add host dns entry to AD"
- },
- {
- "gethostbyname",
- net_ads_dns_gethostbyname,
- NET_TRANSPORT_ADS,
- "Look up host",
- "net ads dns gethostbyname\n"
- " Look up host"
- },
- {NULL, NULL, 0, NULL, NULL}
+ {"REGISTER", net_ads_dns_register},
+ {"GETHOSTBYNAME", net_ads_dns_gethostbyname},
+ {NULL, NULL}
};
- return net_run_function(c, argc, argv, "net ads dns", func);
+ return net_run_function(argc, argv, func, net_ads_dns_usage);
}
/*******************************************************************
********************************************************************/
-int net_ads_printer_usage(struct net_context *c, int argc, const char **argv)
+int net_ads_printer_usage(int argc, const char **argv)
{
d_printf(
"\nnet ads printer search <printer>"
@@ -1455,20 +1379,13 @@ int net_ads_printer_usage(struct net_context *c, int argc, const char **argv)
/*******************************************************************
********************************************************************/
-static int net_ads_printer_search(struct net_context *c, int argc, const char **argv)
+static int net_ads_printer_search(int argc, const char **argv)
{
ADS_STRUCT *ads;
ADS_STATUS rc;
LDAPMessage *res = NULL;
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads printer search\n"
- " List printers in the AD\n");
- return 0;
- }
-
- if (!ADS_ERR_OK(ads_startup(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(False, &ads))) {
return -1;
}
@@ -1494,23 +1411,14 @@ static int net_ads_printer_search(struct net_context *c, int argc, const char **
return 0;
}
-static int net_ads_printer_info(struct net_context *c, int argc, const char **argv)
+static int net_ads_printer_info(int argc, const char **argv)
{
ADS_STRUCT *ads;
ADS_STATUS rc;
const char *servername, *printername;
LDAPMessage *res = NULL;
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads printer info [printername [servername]]\n"
- " Display printer info from AD\n"
- " printername\tPrinter name or wildcard\n"
- " servername\tName of the print server\n");
- return 0;
- }
-
- if (!ADS_ERR_OK(ads_startup(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(False, &ads))) {
return -1;
}
@@ -1550,7 +1458,7 @@ static int net_ads_printer_info(struct net_context *c, int argc, const char **ar
return 0;
}
-static int net_ads_printer_publish(struct net_context *c, int argc, const char **argv)
+static int net_ads_printer_publish(int argc, const char **argv)
{
ADS_STRUCT *ads;
ADS_STATUS rc;
@@ -1565,19 +1473,14 @@ static int net_ads_printer_publish(struct net_context *c, int argc, const char *
char *srv_cn_escaped = NULL, *printername_escaped = NULL;
LDAPMessage *res = NULL;
- if (argc < 1 || c->display_usage) {
- d_printf("Usage:\n"
- "net ads printer publish <printername> [servername]\n"
- " Publish printer in AD\n"
- " printername\tName of the printer\n"
- " servername\tName of the print server\n");
+ if (!ADS_ERR_OK(ads_startup(True, &ads))) {
talloc_destroy(mem_ctx);
return -1;
}
- if (!ADS_ERR_OK(ads_startup(c, true, &ads))) {
+ if (argc < 1) {
talloc_destroy(mem_ctx);
- return -1;
+ return net_ads_printer_usage(argc, argv);
}
printername = argv[0];
@@ -1595,8 +1498,8 @@ static int net_ads_printer_publish(struct net_context *c, int argc, const char *
nt_status = cli_full_connection(&cli, global_myname(), servername,
&server_ss, 0,
"IPC$", "IPC",
- c->opt_user_name, c->opt_workgroup,
- c->opt_password ? c->opt_password : "",
+ opt_user_name, opt_workgroup,
+ opt_password ? opt_password : "",
CLI_FULL_CONNECTION_USE_KERBEROS,
Undefined, NULL);
@@ -1639,8 +1542,8 @@ static int net_ads_printer_publish(struct net_context *c, int argc, const char *
SAFE_FREE(srv_cn_escaped);
SAFE_FREE(printername_escaped);
- nt_status = cli_rpc_pipe_open_noauth(cli, &syntax_spoolss, &pipe_hnd);
- if (!NT_STATUS_IS_OK(nt_status)) {
+ pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SPOOLSS, &nt_status);
+ if (!pipe_hnd) {
d_fprintf(stderr, "Unable to open a connnection to the spoolss pipe on %s\n",
servername);
SAFE_FREE(prt_dn);
@@ -1674,7 +1577,7 @@ static int net_ads_printer_publish(struct net_context *c, int argc, const char *
return 0;
}
-static int net_ads_printer_remove(struct net_context *c, int argc, const char **argv)
+static int net_ads_printer_remove(int argc, const char **argv)
{
ADS_STRUCT *ads;
ADS_STATUS rc;
@@ -1682,17 +1585,12 @@ static int net_ads_printer_remove(struct net_context *c, int argc, const char **
char *prt_dn;
LDAPMessage *res = NULL;
- if (argc < 1 || c->display_usage) {
- d_printf("Usage:\n"
- "net ads printer remove <printername> [servername]\n"
- " Remove a printer from the AD\n"
- " printername\tName of the printer\n"
- " servername\tName of the print server\n");
+ if (!ADS_ERR_OK(ads_startup(True, &ads))) {
return -1;
}
- if (!ADS_ERR_OK(ads_startup(c, true, &ads))) {
- return -1;
+ if (argc < 1) {
+ return net_ads_printer_usage(argc, argv);
}
if (argc > 1) {
@@ -1732,68 +1630,32 @@ static int net_ads_printer_remove(struct net_context *c, int argc, const char **
return 0;
}
-static int net_ads_printer(struct net_context *c, int argc, const char **argv)
+static int net_ads_printer(int argc, const char **argv)
{
struct functable func[] = {
- {
- "search",
- net_ads_printer_search,
- NET_TRANSPORT_ADS,
- "Search for a printer",
- "net ads printer search\n"
- " Search for a printer"
- },
- {
- "info",
- net_ads_printer_info,
- NET_TRANSPORT_ADS,
- "Display printer information",
- "net ads printer info\n"
- " Display printer information"
- },
- {
- "publish",
- net_ads_printer_publish,
- NET_TRANSPORT_ADS,
- "Publish a printer",
- "net ads printer publish\n"
- " Publish a printer"
- },
- {
- "remove",
- net_ads_printer_remove,
- NET_TRANSPORT_ADS,
- "Delete a printer",
- "net ads printer remove\n"
- " Delete a printer"
- },
- {NULL, NULL, 0, NULL, NULL}
+ {"SEARCH", net_ads_printer_search},
+ {"INFO", net_ads_printer_info},
+ {"PUBLISH", net_ads_printer_publish},
+ {"REMOVE", net_ads_printer_remove},
+ {NULL, NULL}
};
- return net_run_function(c, argc, argv, "net ads printer", func);
+ return net_run_function(argc, argv, func, net_ads_printer_usage);
}
-static int net_ads_password(struct net_context *c, int argc, const char **argv)
+static int net_ads_password(int argc, const char **argv)
{
ADS_STRUCT *ads;
- const char *auth_principal = c->opt_user_name;
- const char *auth_password = c->opt_password;
+ const char *auth_principal = opt_user_name;
+ const char *auth_password = opt_password;
char *realm = NULL;
char *new_password = NULL;
- char *chr, *prompt;
+ char *c, *prompt;
const char *user;
ADS_STATUS ret;
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads password <username>\n"
- " Change password for user\n"
- " username\tName of user to change password for\n");
- return 0;
- }
-
- if (c->opt_user_name == NULL || c->opt_password == NULL) {
+ if (opt_user_name == NULL || opt_password == NULL) {
d_fprintf(stderr, "You must supply an administrator username/password\n");
return -1;
}
@@ -1805,21 +1667,21 @@ static int net_ads_password(struct net_context *c, int argc, const char **argv)
user = argv[0];
if (!strchr_m(user, '@')) {
- asprintf(&chr, "%s@%s", argv[0], lp_realm());
- user = chr;
+ asprintf(&c, "%s@%s", argv[0], lp_realm());
+ user = c;
}
use_in_memory_ccache();
- chr = strchr_m(auth_principal, '@');
- if (chr) {
- realm = ++chr;
+ c = strchr_m(auth_principal, '@');
+ if (c) {
+ realm = ++c;
} else {
realm = lp_realm();
}
/* use the realm so we can eventually change passwords for users
in realms other than default */
- if (!(ads = ads_init(realm, c->opt_workgroup, c->opt_host))) {
+ if (!(ads = ads_init(realm, opt_workgroup, opt_host))) {
return -1;
}
@@ -1854,30 +1716,23 @@ static int net_ads_password(struct net_context *c, int argc, const char **argv)
return 0;
}
-int net_ads_changetrustpw(struct net_context *c, int argc, const char **argv)
+int net_ads_changetrustpw(int argc, const char **argv)
{
ADS_STRUCT *ads;
char *host_principal;
fstring my_name;
ADS_STATUS ret;
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads changetrustpw\n"
- " Change the machine account's trust password\n");
- return 0;
- }
-
if (!secrets_init()) {
DEBUG(1,("Failed to initialise secrets database\n"));
return -1;
}
- net_use_krb_machine_account(c);
+ net_use_krb_machine_account();
use_in_memory_ccache();
- if (!ADS_ERR_OK(ads_startup(c, true, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(True, &ads))) {
return -1;
}
@@ -1913,16 +1768,16 @@ int net_ads_changetrustpw(struct net_context *c, int argc, const char **argv)
/*
help for net ads search
*/
-static int net_ads_search_usage(struct net_context *c, int argc, const char **argv)
+static int net_ads_search_usage(int argc, const char **argv)
{
d_printf(
- "\nnet ads search <expression> <attributes...>\n"
- "\nPerform a raw LDAP search on a ADS server and dump the results.\n"
- "The expression is a standard LDAP search expression, and the\n"
- "attributes are a list of LDAP fields to show in the results.\n\n"
+ "\nnet ads search <expression> <attributes...>\n"\
+ "\nperform a raw LDAP search on a ADS server and dump the results\n"\
+ "The expression is a standard LDAP search expression, and the\n"\
+ "attributes are a list of LDAP fields to show in the results\n\n"\
"Example: net ads search '(objectCategory=group)' sAMAccountName\n\n"
);
- net_common_flags_usage(c, argc, argv);
+ net_common_flags_usage(argc, argv);
return -1;
}
@@ -1930,7 +1785,7 @@ static int net_ads_search_usage(struct net_context *c, int argc, const char **ar
/*
general ADS search function. Useful in diagnosing problems in ADS
*/
-static int net_ads_search(struct net_context *c, int argc, const char **argv)
+static int net_ads_search(int argc, const char **argv)
{
ADS_STRUCT *ads;
ADS_STATUS rc;
@@ -1938,11 +1793,11 @@ static int net_ads_search(struct net_context *c, int argc, const char **argv)
const char **attrs;
LDAPMessage *res = NULL;
- if (argc < 1 || c->display_usage) {
- return net_ads_search_usage(c, argc, argv);
+ if (argc < 1) {
+ return net_ads_search_usage(argc, argv);
}
- if (!ADS_ERR_OK(ads_startup(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(False, &ads))) {
return -1;
}
@@ -1973,17 +1828,17 @@ static int net_ads_search(struct net_context *c, int argc, const char **argv)
/*
help for net ads search
*/
-static int net_ads_dn_usage(struct net_context *c, int argc, const char **argv)
+static int net_ads_dn_usage(int argc, const char **argv)
{
d_printf(
- "\nnet ads dn <dn> <attributes...>\n"
- "\nperform a raw LDAP search on a ADS server and dump the results\n"
- "The DN standard LDAP DN, and the attributes are a list of LDAP fields \n"
- "to show in the results\n\n"
+ "\nnet ads dn <dn> <attributes...>\n"\
+ "\nperform a raw LDAP search on a ADS server and dump the results\n"\
+ "The DN standard LDAP DN, and the attributes are a list of LDAP fields \n"\
+ "to show in the results\n\n"\
"Example: net ads dn 'CN=administrator,CN=Users,DC=my,DC=domain' sAMAccountName\n\n"
"Note: the DN must be provided properly escaped. See RFC 4514 for details\n\n"
);
- net_common_flags_usage(c, argc, argv);
+ net_common_flags_usage(argc, argv);
return -1;
}
@@ -1991,7 +1846,7 @@ static int net_ads_dn_usage(struct net_context *c, int argc, const char **argv)
/*
general ADS search function. Useful in diagnosing problems in ADS
*/
-static int net_ads_dn(struct net_context *c, int argc, const char **argv)
+static int net_ads_dn(int argc, const char **argv)
{
ADS_STRUCT *ads;
ADS_STATUS rc;
@@ -1999,11 +1854,11 @@ static int net_ads_dn(struct net_context *c, int argc, const char **argv)
const char **attrs;
LDAPMessage *res = NULL;
- if (argc < 1 || c->display_usage) {
- return net_ads_dn_usage(c, argc, argv);
+ if (argc < 1) {
+ return net_ads_dn_usage(argc, argv);
}
- if (!ADS_ERR_OK(ads_startup(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(False, &ads))) {
return -1;
}
@@ -2033,16 +1888,16 @@ static int net_ads_dn(struct net_context *c, int argc, const char **argv)
/*
help for net ads sid search
*/
-static int net_ads_sid_usage(struct net_context *c, int argc, const char **argv)
+static int net_ads_sid_usage(int argc, const char **argv)
{
d_printf(
- "\nnet ads sid <sid> <attributes...>\n"
- "\nperform a raw LDAP search on a ADS server and dump the results\n"
- "The SID is in string format, and the attributes are a list of LDAP fields \n"
- "to show in the results\n\n"
+ "\nnet ads sid <sid> <attributes...>\n"\
+ "\nperform a raw LDAP search on a ADS server and dump the results\n"\
+ "The SID is in string format, and the attributes are a list of LDAP fields \n"\
+ "to show in the results\n\n"\
"Example: net ads sid 'S-1-5-32' distinguishedName\n\n"
);
- net_common_flags_usage(c, argc, argv);
+ net_common_flags_usage(argc, argv);
return -1;
}
@@ -2050,7 +1905,7 @@ static int net_ads_sid_usage(struct net_context *c, int argc, const char **argv)
/*
general ADS search function. Useful in diagnosing problems in ADS
*/
-static int net_ads_sid(struct net_context *c, int argc, const char **argv)
+static int net_ads_sid(int argc, const char **argv)
{
ADS_STRUCT *ads;
ADS_STATUS rc;
@@ -2059,11 +1914,11 @@ static int net_ads_sid(struct net_context *c, int argc, const char **argv)
LDAPMessage *res = NULL;
DOM_SID sid;
- if (argc < 1 || c->display_usage) {
- return net_ads_sid_usage(c, argc, argv);
+ if (argc < 1) {
+ return net_ads_sid_usage(argc, argv);
}
- if (!ADS_ERR_OK(ads_startup(c, false, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(False, &ads))) {
return -1;
}
@@ -2094,19 +1949,35 @@ static int net_ads_sid(struct net_context *c, int argc, const char **argv)
return 0;
}
-static int net_ads_keytab_flush(struct net_context *c, int argc, const char **argv)
+
+static int net_ads_keytab_usage(int argc, const char **argv)
+{
+ d_printf(
+ "net ads keytab <COMMAND>\n"\
+"<COMMAND> can be either:\n"\
+" ADD Adds new service principal\n"\
+" CREATE Creates a fresh keytab\n"\
+" FLUSH Flushes out all keytab entries\n"\
+" HELP Prints this help message\n"\
+" LIST List the keytab\n"\
+"The ADD and LIST command will take arguments, the other commands\n"\
+"will not take any arguments. The arguments given to ADD\n"\
+"should be a list of principals to add. For example, \n"\
+" net ads keytab add srv1 srv2\n"\
+"will add principals for the services srv1 and srv2 to the\n"\
+"system's keytab.\n"\
+"The LIST command takes a keytabname.\n"\
+"\n"
+ );
+ return -1;
+}
+
+static int net_ads_keytab_flush(int argc, const char **argv)
{
int ret;
ADS_STRUCT *ads;
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads keytab flush\n"
- " Delete the whole keytab\n");
- return 0;
- }
-
- if (!ADS_ERR_OK(ads_startup(c, true, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(True, &ads))) {
return -1;
}
ret = ads_keytab_flush(ads);
@@ -2114,23 +1985,14 @@ static int net_ads_keytab_flush(struct net_context *c, int argc, const char **ar
return ret;
}
-static int net_ads_keytab_add(struct net_context *c, int argc, const char **argv)
+static int net_ads_keytab_add(int argc, const char **argv)
{
int i;
int ret = 0;
ADS_STRUCT *ads;
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads keytab add <principal> [principal ...]\n"
- " Add principals to local keytab\n"
- " principal\tKerberos principal to add to "
- "keytab\n");
- return 0;
- }
-
d_printf("Processing principals to add...\n");
- if (!ADS_ERR_OK(ads_startup(c, true, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(True, &ads))) {
return -1;
}
for (i = 0; i < argc; i++) {
@@ -2140,19 +2002,12 @@ static int net_ads_keytab_add(struct net_context *c, int argc, const char **argv
return ret;
}
-static int net_ads_keytab_create(struct net_context *c, int argc, const char **argv)
+static int net_ads_keytab_create(int argc, const char **argv)
{
ADS_STRUCT *ads;
int ret;
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads keytab create\n"
- " Create new default keytab\n");
- return 0;
- }
-
- if (!ADS_ERR_OK(ads_startup(c, true, &ads))) {
+ if (!ADS_ERR_OK(ads_startup(True, &ads))) {
return -1;
}
ret = ads_keytab_create_default(ads);
@@ -2160,18 +2015,10 @@ static int net_ads_keytab_create(struct net_context *c, int argc, const char **a
return ret;
}
-static int net_ads_keytab_list(struct net_context *c, int argc, const char **argv)
+static int net_ads_keytab_list(int argc, const char **argv)
{
const char *keytab = NULL;
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads keytab list [keytab]\n"
- " List a local keytab\n"
- " keytab\tKeytab to list\n");
- return 0;
- }
-
if (argc >= 1) {
keytab = argv[0];
}
@@ -2180,42 +2027,15 @@ static int net_ads_keytab_list(struct net_context *c, int argc, const char **arg
}
-int net_ads_keytab(struct net_context *c, int argc, const char **argv)
+int net_ads_keytab(int argc, const char **argv)
{
struct functable func[] = {
- {
- "add",
- net_ads_keytab_add,
- NET_TRANSPORT_ADS,
- "Add a service principal",
- "net ads keytab add\n"
- " Add a service principal"
- },
- {
- "create",
- net_ads_keytab_create,
- NET_TRANSPORT_ADS,
- "Create a fresh keytab",
- "net ads keytab create\n"
- " Create a fresh keytab"
- },
- {
- "flush",
- net_ads_keytab_flush,
- NET_TRANSPORT_ADS,
- "Remove all keytab entries",
- "net ads keytab flush\n"
- " Remove all keytab entries"
- },
- {
- "list",
- net_ads_keytab_list,
- NET_TRANSPORT_ADS,
- "List a keytab",
- "net ads keytab list\n"
- " List a keytab"
- },
- {NULL, NULL, 0, NULL, NULL}
+ {"ADD", net_ads_keytab_add},
+ {"CREATE", net_ads_keytab_create},
+ {"FLUSH", net_ads_keytab_flush},
+ {"HELP", net_ads_keytab_usage},
+ {"LIST", net_ads_keytab_list},
+ {NULL, NULL}
};
if (!lp_use_kerberos_keytab()) {
@@ -2223,21 +2043,26 @@ int net_ads_keytab(struct net_context *c, int argc, const char **argv)
use keytab functions.\n");
}
- return net_run_function(c, argc, argv, "net ads keytab", func);
+ return net_run_function(argc, argv, func, net_ads_keytab_usage);
}
-static int net_ads_kerberos_renew(struct net_context *c, int argc, const char **argv)
+static int net_ads_kerberos_usage(int argc, const char **argv)
{
- int ret = -1;
+ d_printf(
+ "net ads kerberos <COMMAND>\n"\
+ "<COMMAND> can be either:\n"\
+ " RENEW Renew TGT from existing credential cache\n"\
+ " PAC Dumps the Kerberos PAC\n"\
+ " KINIT Retrieve Ticket Granting Ticket (TGT)\n"\
+ "\n"
+ );
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads kerberos renew\n"
- " Renew TGT from existing credential cache\n");
- return 0;
- }
+ return -1;
+}
- ret = smb_krb5_renew_ticket(NULL, NULL, NULL, NULL);
+static int net_ads_kerberos_renew(int argc, const char **argv)
+{
+ int ret = smb_krb5_renew_ticket(NULL, NULL, NULL, NULL);
if (ret) {
d_printf("failed to renew kerberos ticket: %s\n",
error_message(ret));
@@ -2245,7 +2070,7 @@ static int net_ads_kerberos_renew(struct net_context *c, int argc, const char **
return ret;
}
-static int net_ads_kerberos_pac(struct net_context *c, int argc, const char **argv)
+static int net_ads_kerberos_pac(int argc, const char **argv)
{
struct PAC_DATA *pac = NULL;
struct PAC_LOGON_INFO *info = NULL;
@@ -2253,29 +2078,22 @@ static int net_ads_kerberos_pac(struct net_context *c, int argc, const char **ar
NTSTATUS status;
int ret = -1;
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads kerberos pac\n"
- " Dump the Kerberos PAC\n");
- return 0;
- }
-
mem_ctx = talloc_init("net_ads_kerberos_pac");
if (!mem_ctx) {
goto out;
}
- c->opt_password = net_prompt_pass(c, c->opt_user_name);
+ opt_password = net_prompt_pass(opt_user_name);
status = kerberos_return_pac(mem_ctx,
- c->opt_user_name,
- c->opt_password,
+ opt_user_name,
+ opt_password,
0,
NULL,
NULL,
NULL,
- true,
- true,
+ True,
+ True,
2592000, /* one month */
&pac);
if (!NT_STATUS_IS_OK(status)) {
@@ -2297,34 +2115,27 @@ static int net_ads_kerberos_pac(struct net_context *c, int argc, const char **ar
return ret;
}
-static int net_ads_kerberos_kinit(struct net_context *c, int argc, const char **argv)
+static int net_ads_kerberos_kinit(int argc, const char **argv)
{
TALLOC_CTX *mem_ctx = NULL;
int ret = -1;
NTSTATUS status;
- if (c->display_usage) {
- d_printf("Usage:\n"
- "net ads kerberos kinit\n"
- " Get Ticket Granting Ticket (TGT) for the user\n");
- return 0;
- }
-
mem_ctx = talloc_init("net_ads_kerberos_kinit");
if (!mem_ctx) {
goto out;
}
- c->opt_password = net_prompt_pass(c, c->opt_user_name);
+ opt_password = net_prompt_pass(opt_user_name);
- ret = kerberos_kinit_password_ext(c->opt_user_name,
- c->opt_password,
+ ret = kerberos_kinit_password_ext(opt_user_name,
+ opt_password,
0,
NULL,
NULL,
NULL,
- true,
- true,
+ True,
+ True,
2592000, /* one month */
&status);
if (ret) {
@@ -2335,198 +2146,67 @@ static int net_ads_kerberos_kinit(struct net_context *c, int argc, const char **
return ret;
}
-int net_ads_kerberos(struct net_context *c, int argc, const char **argv)
+int net_ads_kerberos(int argc, const char **argv)
{
struct functable func[] = {
- {
- "kinit",
- net_ads_kerberos_kinit,
- NET_TRANSPORT_ADS,
- "Retrieve Ticket Granting Ticket (TGT)",
- "net ads kerberos kinit\n"
- " Receive Ticket Granting Ticket (TGT)"
- },
- {
- "renew",
- net_ads_kerberos_renew,
- NET_TRANSPORT_ADS,
- "Renew Ticket Granting Ticket from credential cache"
- "net ads kerberos renew\n"
- " Renew Ticket Granting Ticket from credential cache"
- },
- {
- "pac",
- net_ads_kerberos_pac,
- NET_TRANSPORT_ADS,
- "Dump Kerberos PAC",
- "net ads kerberos pac\n"
- " Dump Kerberos PAC"
- },
- {NULL, NULL, 0, NULL, NULL}
+ {"KINIT", net_ads_kerberos_kinit},
+ {"RENEW", net_ads_kerberos_renew},
+ {"PAC", net_ads_kerberos_pac},
+ {"HELP", net_ads_kerberos_usage},
+ {NULL, NULL}
};
- return net_run_function(c, argc, argv, "net ads kerberos", func);
+ return net_run_function(argc, argv, func, net_ads_kerberos_usage);
}
-int net_ads(struct net_context *c, int argc, const char **argv)
+
+int net_ads_help(int argc, const char **argv)
{
struct functable func[] = {
- {
- "info",
- net_ads_info,
- NET_TRANSPORT_ADS,
- "Display details on remote ADS server",
- "net ads info\n"
- " Display details on remote ADS server"
- },
- {
- "join",
- net_ads_join,
- NET_TRANSPORT_ADS,
- "Join the local machine to ADS realm",
- "net ads join\n"
- " Join the local machine to ADS realm"
- },
- {
- "testjoin",
- net_ads_testjoin,
- NET_TRANSPORT_ADS,
- "Validate machine account",
- "net ads testjoin\n"
- " Validate machine account"
- },
- {
- "leave",
- net_ads_leave,
- NET_TRANSPORT_ADS,
- "Remove the local machine from ADS",
- "net ads leave\n"
- " Remove the local machine from ADS"
- },
- {
- "status",
- net_ads_status,
- NET_TRANSPORT_ADS,
- "Display machine account details",
- "net ads status\n"
- " Display machine account details"
- },
- {
- "user",
- net_ads_user,
- NET_TRANSPORT_ADS,
- "List/modify users",
- "net ads user\n"
- " List/modify users"
- },
- {
- "group",
- net_ads_group,
- NET_TRANSPORT_ADS,
- "List/modify groups",
- "net ads group\n"
- " List/modify groups"
- },
- {
- "dns",
- net_ads_dns,
- NET_TRANSPORT_ADS,
- "Issue dynamic DNS update",
- "net ads dns\n"
- " Issue dynamic DNS update"
- },
- {
- "password",
- net_ads_password,
- NET_TRANSPORT_ADS,
- "Change user passwords",
- "net ads password\n"
- " Change user passwords"
- },
- {
- "changetrustpw",
- net_ads_changetrustpw,
- NET_TRANSPORT_ADS,
- "Change trust account password",
- "net ads changetrustpw\n"
- " Change trust account password"
- },
- {
- "printer",
- net_ads_printer,
- NET_TRANSPORT_ADS,
- "List/modify printer entries",
- "net ads printer\n"
- " List/modify printer entries"
- },
- {
- "search",
- net_ads_search,
- NET_TRANSPORT_ADS,
- "Issue LDAP search using filter",
- "net ads search\n"
- " Issue LDAP search using filter"
- },
- {
- "dn",
- net_ads_dn,
- NET_TRANSPORT_ADS,
- "Issue LDAP search by DN",
- "net ads dn\n"
- " Issue LDAP search by DN"
- },
- {
- "sid",
- net_ads_sid,
- NET_TRANSPORT_ADS,
- "Issue LDAP search by SID",
- "net ads sid\n"
- " Issue LDAP search by SID"
- },
- {
- "workgroup",
- net_ads_workgroup,
- NET_TRANSPORT_ADS,
- "Display workgroup name",
- "net ads workgroup\n"
- " Display the workgroup name"
- },
- {
- "lookup",
- net_ads_lookup,
- NET_TRANSPORT_ADS,
- "Perfom CLDAP query on DC",
- "net ads lookup\n"
- " Find the ADS DC using CLDAP lookups"
- },
- {
- "keytab",
- net_ads_keytab,
- NET_TRANSPORT_ADS,
- "Manage local keytab file",
- "net ads keytab\n"
- " Manage local keytab file"
- },
- {
- "gpo",
- net_ads_gpo,
- NET_TRANSPORT_ADS,
- "Manage group policy objects",
- "net ads gpo\n"
- " Manage group policy objects"
- },
- {
- "kerberos",
- net_ads_kerberos,
- NET_TRANSPORT_ADS,
- "Manage kerberos keytab",
- "net ads kerberos\n"
- " Manage kerberos keytab"
- },
- {NULL, NULL, 0, NULL, NULL}
+ {"USER", net_ads_user_usage},
+ {"GROUP", net_ads_group_usage},
+ {"PRINTER", net_ads_printer_usage},
+ {"SEARCH", net_ads_search_usage},
+ {"INFO", net_ads_info},
+ {"JOIN", net_ads_join_usage},
+ {"DNS", net_ads_dns_usage},
+ {"LEAVE", net_ads_leave},
+ {"STATUS", net_ads_status},
+ {"PASSWORD", net_ads_password},
+ {"CHANGETRUSTPW", net_ads_changetrustpw},
+ {NULL, NULL}
};
- return net_run_function(c, argc, argv, "net ads", func);
+ return net_run_function(argc, argv, func, net_ads_usage);
+}
+
+int net_ads(int argc, const char **argv)
+{
+ struct functable func[] = {
+ {"INFO", net_ads_info},
+ {"JOIN", net_ads_join},
+ {"TESTJOIN", net_ads_testjoin},
+ {"LEAVE", net_ads_leave},
+ {"STATUS", net_ads_status},
+ {"USER", net_ads_user},
+ {"GROUP", net_ads_group},
+ {"DNS", net_ads_dns},
+ {"PASSWORD", net_ads_password},
+ {"CHANGETRUSTPW", net_ads_changetrustpw},
+ {"PRINTER", net_ads_printer},
+ {"SEARCH", net_ads_search},
+ {"DN", net_ads_dn},
+ {"SID", net_ads_sid},
+ {"WORKGROUP", net_ads_workgroup},
+ {"LOOKUP", net_ads_lookup},
+ {"KEYTAB", net_ads_keytab},
+ {"GPO", net_ads_gpo},
+ {"KERBEROS", net_ads_kerberos},
+ {"HELP", net_ads_help},
+ {NULL, NULL}
+ };
+
+ return net_run_function(argc, argv, func, net_ads_usage);
}
#else
@@ -2537,50 +2217,60 @@ static int net_ads_noads(void)
return -1;
}
-int net_ads_keytab(struct net_context *c, int argc, const char **argv)
+int net_ads_keytab(int argc, const char **argv)
+{
+ return net_ads_noads();
+}
+
+int net_ads_kerberos(int argc, const char **argv)
{
return net_ads_noads();
}
-int net_ads_kerberos(struct net_context *c, int argc, const char **argv)
+int net_ads_usage(int argc, const char **argv)
{
return net_ads_noads();
}
-int net_ads_changetrustpw(struct net_context *c, int argc, const char **argv)
+int net_ads_help(int argc, const char **argv)
{
return net_ads_noads();
}
-int net_ads_join(struct net_context *c, int argc, const char **argv)
+int net_ads_changetrustpw(int argc, const char **argv)
{
return net_ads_noads();
}
-int net_ads_user(struct net_context *c, int argc, const char **argv)
+int net_ads_join(int argc, const char **argv)
{
return net_ads_noads();
}
-int net_ads_group(struct net_context *c, int argc, const char **argv)
+int net_ads_user(int argc, const char **argv)
+{
+ return net_ads_noads();
+}
+
+int net_ads_group(int argc, const char **argv)
{
return net_ads_noads();
}
/* this one shouldn't display a message */
-int net_ads_check(struct net_context *c)
+int net_ads_check(void)
{
return -1;
}
-int net_ads_check_our_domain(struct net_context *c)
+int net_ads_check_our_domain(void)
{
return -1;
}
-int net_ads(struct net_context *c, int argc, const char **argv)
+int net_ads(int argc, const char **argv)
{
- return net_ads_noads();
+ return net_ads_usage(argc, argv);
}
#endif /* WITH_ADS */