r1875: - move 'net' code into a subdir
authorStefan Metzmacher <metze@samba.org>
Wed, 18 Aug 2004 07:56:35 +0000 (07:56 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:58:06 +0000 (12:58 -0500)
- and remove all unneeded files

we'll reimplement the stuff step by step using the functions from
libnet/ which will do the hard work for us

metze
(This used to be commit 8b2d5ec973fde980389bfe03cbcd70274b98b2dc)

12 files changed:
source4/utils/net/net.c [moved from source4/utils/net.c with 100% similarity]
source4/utils/net/net.h [moved from source4/utils/net.h with 100% similarity]
source4/utils/net_ads.c [deleted file]
source4/utils/net_ads_cldap.c [deleted file]
source4/utils/net_cache.c [deleted file]
source4/utils/net_help.c [deleted file]
source4/utils/net_lookup.c [deleted file]
source4/utils/net_rap.c [deleted file]
source4/utils/net_rpc.c [deleted file]
source4/utils/net_rpc_join.c [deleted file]
source4/utils/net_rpc_samsync.c [deleted file]
source4/utils/net_time.c [deleted file]

similarity index 100%
rename from source4/utils/net.c
rename to source4/utils/net/net.c
similarity index 100%
rename from source4/utils/net.h
rename to source4/utils/net/net.h
diff --git a/source4/utils/net_ads.c b/source4/utils/net_ads.c
deleted file mode 100644 (file)
index f7bfdca..0000000
+++ /dev/null
@@ -1,1176 +0,0 @@
-/* 
-   Samba Unix/Linux SMB client library 
-   net ads commands
-   Copyright (C) 2001 Andrew Tridgell (tridge@samba.org)
-   Copyright (C) 2001 Remus Koos (remuskoos@yahoo.com)
-   Copyright (C) 2002 Jim McDonough (jmcd@us.ibm.com)
-
-   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.h"
-
-#ifdef HAVE_ADS
-
-int net_ads_usage(int argc, const char **argv)
-{
-       d_printf(
-"\nnet ads join <org_unit>"\
-"\n\tjoins the local machine to a ADS realm\n"\
-"\nnet ads leave"\
-"\n\tremoves the local machine from a ADS realm\n"\
-"\nnet ads testjoin"\
-"\n\ttests that an exiting join is OK\n"\
-"\nnet ads user"\
-"\n\tlist, add, or delete users in the realm\n"\
-"\nnet ads group"\
-"\n\tlist, add, or delete groups in the realm\n"\
-"\nnet ads info"\
-"\n\tshows some info on the server\n"\
-"\nnet ads status"\
-"\n\tdump the machine account details to stdout\n"
-"\nnet ads lookup"\
-"\n\tperform a CLDAP search on the server\n"
-"\nnet ads password <username@realm> -Uadmin_username@realm%%admin_pass"\
-"\n\tchange a user's password using an admin account"\
-"\n\t(note: use realm in UPPERCASE)\n"\
-"\nnet ads chostpass"\
-"\n\tchange the trust account password of this machine in the AD tree\n"\
-"\nnet ads printer [info | publish | remove] <printername> <servername>"\
-"\n\t lookup, add, or remove directory entry for a printer\n"\
-"\nnet ads search"\
-"\n\tperform a raw LDAP search and dump the results\n"
-"\nnet ads dn"\
-"\n\tperform a raw LDAP search and dump attributes of a particular DN\n"
-               );
-       return -1;
-}
-
-
-/*
-  this implements the CLDAP based netlogon lookup requests
-  for finding the domain controller of a ADS domain
-*/
-static int net_ads_lookup(int argc, const char **argv)
-{
-       ADS_STRUCT *ads;
-
-       ads = ads_init(NULL, NULL, opt_host);
-       if (ads) {
-               ads->auth.flags |= ADS_AUTH_NO_BIND;
-       }
-
-       ads_connect(ads);
-
-       if (!ads || !ads->config.realm) {
-               d_printf("Didn't find the cldap server!\n");
-               return -1;
-       }
-
-       return ads_cldap_netlogon(ads);
-}
-
-
-
-static int net_ads_info(int argc, const char **argv)
-{
-       ADS_STRUCT *ads;
-
-       ads = ads_init(NULL, NULL, opt_host);
-
-       if (ads) {
-               ads->auth.flags |= ADS_AUTH_NO_BIND;
-       }
-
-       ads_connect(ads);
-
-       if (!ads || !ads->config.realm) {
-               d_printf("Didn't find the ldap server!\n");
-               return -1;
-       }
-
-       d_printf("LDAP server: %s\n", inet_ntoa(ads->ldap_ip));
-       d_printf("LDAP server name: %s\n", ads->config.ldap_server_name);
-       d_printf("Realm: %s\n", ads->config.realm);
-       d_printf("Bind Path: %s\n", ads->config.bind_path);
-       d_printf("LDAP port: %d\n", ads->ldap_port);
-       d_printf("Server time: %s\n", timestring(ads->config.current_time));
-
-       return 0;
-}
-
-static void use_in_memory_ccache(void) {
-       /* Use in-memory credentials cache so we do not interfere with
-        * existing credentials */
-       setenv(KRB5_ENV_CCNAME, "MEMORY:net_ads", 1);
-}
-
-static ADS_STRUCT *ads_startup(void)
-{
-       ADS_STRUCT *ads;
-       ADS_STATUS status;
-       BOOL need_password = False;
-       BOOL second_time = False;
-       
-       ads = ads_init(NULL, NULL, opt_host);
-
-       if (!opt_user_name) {
-               opt_user_name = "administrator";
-       }
-
-       if (opt_user_specified) {
-               need_password = True;
-       }
-
-retry:
-       if (!opt_password && need_password) {
-               char *prompt;
-               asprintf(&prompt,"%s password: ", opt_user_name);
-               opt_password = getpass(prompt);
-               free(prompt);
-       }
-
-       if (opt_password) {
-               use_in_memory_ccache();
-               ads->auth.password = strdup(opt_password);
-       }
-
-       ads->auth.user_name = strdup(opt_user_name);
-
-       status = ads_connect(ads);
-       if (!ADS_ERR_OK(status)) {
-               if (!need_password && !second_time) {
-                       need_password = True;
-                       second_time = True;
-                       goto retry;
-               } else {
-                       DEBUG(1,("ads_connect: %s\n", ads_errstr(status)));
-                       return NULL;
-               }
-       }
-       return ads;
-}
-
-
-/*
-  Check to see if connection can be made via ads.
-  ads_startup() stores the password in opt_password if it needs to so
-  that rpc or rap can use it without re-prompting.
-*/
-int net_ads_check(void)
-{
-       ADS_STRUCT *ads;
-
-       ads = ads_startup();
-       if (!ads)
-               return -1;
-       ads_destroy(&ads);
-       return 0;
-}
-
-/* 
-   determine the netbios workgroup name for a domain
- */
-static int net_ads_workgroup(int argc, const char **argv)
-{
-       ADS_STRUCT *ads;
-       TALLOC_CTX *ctx;
-       char *workgroup;
-
-       if (!(ads = ads_startup())) return -1;
-
-       if (!(ctx = talloc_init("net_ads_workgroup"))) {
-               return -1;
-       }
-
-       if (!ADS_ERR_OK(ads_workgroup_name(ads, ctx, &workgroup))) {
-               d_printf("Failed to find workgroup for realm '%s'\n", 
-                        ads->config.realm);
-               talloc_destroy(ctx);
-               return -1;
-       }
-
-       d_printf("Workgroup: %s\n", workgroup);
-
-       talloc_destroy(ctx);
-
-       return 0;
-}
-
-
-
-static BOOL usergrp_display(char *field, void **values, void *data_area)
-{
-       char **disp_fields = (char **) data_area;
-
-       if (!field) { /* must be end of record */
-               if (!strchr_m(disp_fields[0], '$')) {
-                       if (disp_fields[1])
-                               d_printf("%-21.21s %-50.50s\n", 
-                                      disp_fields[0], disp_fields[1]);
-                       else
-                               d_printf("%s\n", disp_fields[0]);
-               }
-               SAFE_FREE(disp_fields[0]);
-               SAFE_FREE(disp_fields[1]);
-               return True;
-       }
-       if (!values) /* must be new field, indicate string field */
-               return True;
-       if (StrCaseCmp(field, "sAMAccountName") == 0) {
-               disp_fields[0] = strdup((char *) values[0]);
-       }
-       if (StrCaseCmp(field, "description") == 0)
-               disp_fields[1] = strdup((char *) values[0]);
-       return True;
-}
-
-static int net_ads_user_usage(int argc, const char **argv)
-{
-       return net_help_user(argc, argv);
-} 
-
-static int ads_user_add(int argc, const char **argv)
-{
-       ADS_STRUCT *ads;
-       ADS_STATUS status;
-       char *upn, *userdn;
-       void *res=NULL;
-       int rc = -1;
-
-       if (argc < 1) return net_ads_user_usage(argc, argv);
-       
-       if (!(ads = ads_startup())) return -1;
-
-       status = ads_find_user_acct(ads, &res, argv[0]);
-
-       if (!ADS_ERR_OK(status)) {
-               d_printf("ads_user_add: %s\n", ads_errstr(status));
-               goto done;
-       }
-       
-       if (ads_count_replies(ads, res)) {
-               d_printf("ads_user_add: User %s already exists\n", argv[0]);
-               goto done;
-       }
-
-       status = ads_add_user_acct(ads, argv[0], opt_container, opt_comment);
-
-       if (!ADS_ERR_OK(status)) {
-               d_printf("Could not add user %s: %s\n", argv[0],
-                        ads_errstr(status));
-               goto done;
-       }
-
-       /* if no password is to be set, we're done */
-       if (argc == 1) { 
-               d_printf("User %s added\n", argv[0]);
-               rc = 0;
-               goto done;
-       }
-
-       /* try setting the password */
-       asprintf(&upn, "%s@%s", argv[0], ads->config.realm);
-       status = krb5_set_password(ads->auth.kdc_server, upn, argv[1], ads->auth.time_offset);
-       safe_free(upn);
-       if (ADS_ERR_OK(status)) {
-               d_printf("User %s added\n", argv[0]);
-               rc = 0;
-               goto done;
-       }
-
-       /* password didn't set, delete account */
-       d_printf("Could not add user %s.  Error setting password %s\n",
-                argv[0], ads_errstr(status));
-       ads_msgfree(ads, res);
-       status=ads_find_user_acct(ads, &res, argv[0]);
-       if (ADS_ERR_OK(status)) {
-               userdn = ads_get_dn(ads, res);
-               ads_del_dn(ads, userdn);
-               ads_memfree(ads, userdn);
-       }
-
- done:
-       if (res)
-               ads_msgfree(ads, res);
-       ads_destroy(&ads);
-       return rc;
-}
-
-static int ads_user_info(int argc, const char **argv)
-{
-       ADS_STRUCT *ads;
-       ADS_STATUS rc;
-       void *res;
-       const char *attrs[] = {"memberOf", NULL};
-       char *searchstring=NULL;
-       char **grouplist;
-       char *escaped_user = escape_ldap_string_alloc(argv[0]);
-
-       if (argc < 1) return net_ads_user_usage(argc, argv);
-       
-       if (!(ads = ads_startup())) return -1;
-
-       if (!escaped_user) {
-               d_printf("ads_user_info: failed to escape user %s\n", argv[0]);
-               return -1;
-       }
-
-       asprintf(&searchstring, "(sAMAccountName=%s)", escaped_user);
-       rc = ads_search(ads, &res, searchstring, attrs);
-       safe_free(searchstring);
-
-       if (!ADS_ERR_OK(rc)) {
-               d_printf("ads_search: %s\n", ads_errstr(rc));
-               return -1;
-       }
-       
-       grouplist = ldap_get_values(ads->ld, res, "memberOf");
-
-       if (grouplist) {
-               int i;
-               char **groupname;
-               for (i=0;grouplist[i];i++) {
-                       groupname = ldap_explode_dn(grouplist[i], 1);
-                       d_printf("%s\n", groupname[0]);
-                       ldap_value_free(groupname);
-               }
-               ldap_value_free(grouplist);
-       }
-       
-       ads_msgfree(ads, res);
-
-       ads_destroy(&ads);
-       return 0;
-}
-
-static int ads_user_delete(int argc, const char **argv)
-{
-       ADS_STRUCT *ads;
-       ADS_STATUS rc;
-       void *res;
-       char *userdn;
-
-       if (argc < 1) return net_ads_user_usage(argc, argv);
-       
-       if (!(ads = ads_startup())) return -1;
-
-       rc = ads_find_user_acct(ads, &res, argv[0]);
-       if (!ADS_ERR_OK(rc)) {
-               DEBUG(0, ("User %s does not exist\n", argv[0]));
-               return -1;
-       }
-       userdn = ads_get_dn(ads, res);
-       ads_msgfree(ads, res);
-       rc = ads_del_dn(ads, userdn);
-       ads_memfree(ads, userdn);
-       if (!ADS_ERR_OK(rc)) {
-               d_printf("User %s deleted\n", argv[0]);
-               return 0;
-       }
-       d_printf("Error deleting user %s: %s\n", argv[0], 
-                ads_errstr(rc));
-       return -1;
-}
-
-int net_ads_user(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"ADD", ads_user_add},
-               {"INFO", ads_user_info},
-               {"DELETE", ads_user_delete},
-               {NULL, NULL}
-       };
-       ADS_STRUCT *ads;
-       ADS_STATUS rc;
-       const char *shortattrs[] = {"sAMAccountName", NULL};
-       const char *longattrs[] = {"sAMAccountName", "description", NULL};
-       char *disp_fields[2] = {NULL, NULL};
-       
-       if (argc == 0) {
-               if (!(ads = ads_startup())) return -1;
-
-               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,
-                                         "(objectclass=user)", 
-                                         opt_long_list_entries ? longattrs :
-                                         shortattrs, usergrp_display, 
-                                         disp_fields);
-               ads_destroy(&ads);
-               return 0;
-       }
-
-       return net_run_function(argc, argv, func, net_ads_user_usage);
-}
-
-static int net_ads_group_usage(int argc, const char **argv)
-{
-       return net_help_group(argc, argv);
-} 
-
-static int ads_group_add(int argc, const char **argv)
-{
-       ADS_STRUCT *ads;
-       ADS_STATUS status;
-       void *res=NULL;
-       int rc = -1;
-
-       if (argc < 1) return net_ads_group_usage(argc, argv);
-       
-       if (!(ads = ads_startup())) return -1;
-
-       status = ads_find_user_acct(ads, &res, argv[0]);
-
-       if (!ADS_ERR_OK(status)) {
-               d_printf("ads_group_add: %s\n", ads_errstr(status));
-               goto done;
-       }
-       
-       if (ads_count_replies(ads, res)) {
-               d_printf("ads_group_add: Group %s already exists\n", argv[0]);
-               ads_msgfree(ads, res);
-               goto done;
-       }
-
-       status = ads_add_group_acct(ads, argv[0], opt_container, opt_comment);
-
-       if (ADS_ERR_OK(status)) {
-               d_printf("Group %s added\n", argv[0]);
-               rc = 0;
-       } else {
-               d_printf("Could not add group %s: %s\n", argv[0],
-                        ads_errstr(status));
-       }
-
- done:
-       if (res)
-               ads_msgfree(ads, res);
-       ads_destroy(&ads);
-       return rc;
-}
-
-static int ads_group_delete(int argc, const char **argv)
-{
-       ADS_STRUCT *ads;
-       ADS_STATUS rc;
-       void *res;
-       char *groupdn;
-
-       if (argc < 1) return net_ads_group_usage(argc, argv);
-       
-       if (!(ads = ads_startup())) return -1;
-
-       rc = ads_find_user_acct(ads, &res, argv[0]);
-       if (!ADS_ERR_OK(rc)) {
-               DEBUG(0, ("Group %s does not exist\n", argv[0]));
-               return -1;
-       }
-       groupdn = ads_get_dn(ads, res);
-       ads_msgfree(ads, res);
-       rc = ads_del_dn(ads, groupdn);
-       ads_memfree(ads, groupdn);
-       if (!ADS_ERR_OK(rc)) {
-               d_printf("Group %s deleted\n", argv[0]);
-               return 0;
-       }
-       d_printf("Error deleting group %s: %s\n", argv[0], 
-                ads_errstr(rc));
-       return -1;
-}
-
-int net_ads_group(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"ADD", ads_group_add},
-               {"DELETE", ads_group_delete},
-               {NULL, NULL}
-       };
-       ADS_STRUCT *ads;
-       ADS_STATUS rc;
-       const char *shortattrs[] = {"sAMAccountName", NULL};
-       const char *longattrs[] = {"sAMAccountName", "description", NULL};
-       char *disp_fields[2] = {NULL, NULL};
-
-       if (argc == 0) {
-               if (!(ads = ads_startup())) return -1;
-
-               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, 
-                                         "(objectclass=group)", 
-                                         opt_long_list_entries ? longattrs : 
-                                         shortattrs, usergrp_display, 
-                                         disp_fields);
-
-               ads_destroy(&ads);
-               return 0;
-       }
-       return net_run_function(argc, argv, func, net_ads_group_usage);
-}
-
-static int net_ads_status(int argc, const char **argv)
-{
-       ADS_STRUCT *ads;
-       ADS_STATUS rc;
-       void *res;
-
-       if (!(ads = ads_startup())) return -1;
-
-       rc = ads_find_machine_acct(ads, &res, lp_netbios_name());
-       if (!ADS_ERR_OK(rc)) {
-               d_printf("ads_find_machine_acct: %s\n", ads_errstr(rc));
-               return -1;
-       }
-
-       if (ads_count_replies(ads, res) == 0) {
-               d_printf("No machine account for '%s' found\n", lp_netbios_name());
-               return -1;
-       }
-
-       ads_dump(ads, res);
-
-       return 0;
-}
-
-static int net_ads_leave(int argc, const char **argv)
-{
-       ADS_STRUCT *ads = NULL;
-       ADS_STATUS rc;
-
-       if (!secrets_init()) {
-               DEBUG(1,("Failed to initialise secrets database\n"));
-               return -1;
-       }
-
-       if (!opt_password) {
-               char *user_name;
-               asprintf(&user_name, "%s$", lp_netbios_name());
-               opt_password = secrets_fetch_machine_password();
-               opt_user_name = user_name;
-       }
-
-       if (!(ads = ads_startup())) {
-               return -1;
-       }
-
-       rc = ads_leave_realm(ads, lp_netbios_name());
-       if (!ADS_ERR_OK(rc)) {
-           d_printf("Failed to delete host '%s' from the '%s' realm.\n", 
-                    lp_netbios_name(), ads->config.realm);
-           return -1;
-       }
-
-       d_printf("Removed '%s' from realm '%s'\n", lp_netbios_name(), ads->config.realm);
-
-       return 0;
-}
-
-static int net_ads_join_ok(void)
-{
-       char *user_name;
-       ADS_STRUCT *ads = NULL;
-
-       if (!secrets_init()) {
-               DEBUG(1,("Failed to initialise secrets database\n"));
-               return -1;
-       }
-
-       asprintf(&user_name, "%s$", lp_netbios_name());
-       opt_user_name = user_name;
-       opt_password = secrets_fetch_machine_password();
-
-       if (!(ads = ads_startup())) {
-               return -1;
-       }
-
-       ads_destroy(&ads);
-       return 0;
-}
-
-/*
-  check that an existing join is OK
- */
-int net_ads_testjoin(int argc, const char **argv)
-{
-       use_in_memory_ccache();
-
-       /* Display success or failure */
-       if (net_ads_join_ok() != 0) {
-               fprintf(stderr,"Join to domain is not valid\n");
-               return -1;
-       }
-
-       printf("Join is OK\n");
-       return 0;
-}
-
-/*
-  join a domain using ADS
- */
-int net_ads_join(int argc, const char **argv)
-{
-       ADS_STRUCT *ads;
-       ADS_STATUS rc;
-       char *password;
-       char *tmp_password;
-       const char *org_unit = "Computers";
-       char *dn;
-       void *res;
-       DOM_SID dom_sid;
-       char *ou_str;
-
-       if (argc > 0) org_unit = argv[0];
-
-       if (!secrets_init()) {
-               DEBUG(1,("Failed to initialise secrets database\n"));
-               return -1;
-       }
-
-       tmp_password = generate_random_str(DEFAULT_TRUST_ACCOUNT_PASSWORD_LENGTH);
-       password = strdup(tmp_password);
-
-       if (!(ads = ads_startup())) return -1;
-
-       ou_str = ads_ou_string(org_unit);
-       asprintf(&dn, "%s,%s", ou_str, ads->config.bind_path);
-       free(ou_str);
-
-       rc = ads_search_dn(ads, &res, dn, NULL);
-       ads_msgfree(ads, res);
-
-       if (rc.error_type == ADS_ERROR_LDAP && rc.err.rc == LDAP_NO_SUCH_OBJECT) {
-               d_printf("ads_join_realm: organizational unit %s does not exist (dn:%s)\n", 
-                        org_unit, dn);
-               return -1;
-       }
-       free(dn);
-
-       if (!ADS_ERR_OK(rc)) {
-               d_printf("ads_join_realm: %s\n", ads_errstr(rc));
-               return -1;
-       }       
-
-       rc = ads_join_realm(ads, lp_netbios_name(), org_unit);
-       if (!ADS_ERR_OK(rc)) {
-               d_printf("ads_join_realm: %s\n", ads_errstr(rc));
-               return -1;
-       }
-
-       rc = ads_domain_sid(ads, &dom_sid);
-       if (!ADS_ERR_OK(rc)) {
-               d_printf("ads_domain_sid: %s\n", ads_errstr(rc));
-               return -1;
-       }
-
-       rc = ads_set_machine_password(ads, lp_netbios_name(), password);
-       if (!ADS_ERR_OK(rc)) {
-               d_printf("ads_set_machine_password: %s\n", ads_errstr(rc));
-               return -1;
-       }
-
-       if (!secrets_store_domain_sid(lp_workgroup(), &dom_sid)) {
-               DEBUG(1,("Failed to save domain sid\n"));
-               return -1;
-       }
-
-       if (!secrets_store_machine_password(password)) {
-               DEBUG(1,("Failed to save machine password\n"));
-               return -1;
-       }
-
-       d_printf("Joined '%s' to realm '%s'\n", lp_netbios_name(), ads->config.realm);
-
-       free(password);
-
-       return 0;
-}
-
-int net_ads_printer_usage(int argc, const char **argv)
-{
-       d_printf(
-"\nnet ads printer info <printer> <server>"
-"\n\tlookup info in directory for printer on server"
-"\n\t(note: printer defaults to \"*\", server defaults to local)\n"
-"\nnet ads printer publish <printername>"
-"\n\tpublish printer in directory"
-"\n\t(note: printer name is required)\n"
-"\nnet ads printer remove <printername>"
-"\n\tremove printer from directory"
-"\n\t(note: printer name is required)\n");
-       return -1;
-}
-
-static int net_ads_printer_info(int argc, const char **argv)
-{
-       ADS_STRUCT *ads;
-       ADS_STATUS rc;
-       const char *servername, *printername;
-       void *res = NULL;
-
-       if (!(ads = ads_startup())) return -1;
-
-       if (argc > 0)
-               printername = argv[0];
-       else
-               printername = "*";
-
-       if (argc > 1)
-               servername =  argv[1];
-       else
-               servername = lp_netbios_name();
-
-       rc = ads_find_printer_on_server(ads, &res, printername, servername);
-
-       if (!ADS_ERR_OK(rc)) {
-               d_printf("ads_find_printer_on_server: %s\n", ads_errstr(rc));
-               ads_msgfree(ads, res);
-               return -1;
-       }
-
-       if (ads_count_replies(ads, res) == 0) {
-               d_printf("Printer '%s' not found\n", printername);
-               ads_msgfree(ads, res);
-               return -1;
-       }
-
-       ads_dump(ads, res);
-       ads_msgfree(ads, res);
-
-       return 0;
-}
-
-void do_drv_upgrade_printer(int msg_type, pid_t src, void *buf, size_t len)
-{
-       return;
-}
-
-static int net_ads_printer_publish(int argc, const char **argv)
-{
-        ADS_STRUCT *ads;
-        ADS_STATUS rc;
-       const char *servername;
-       struct smbcli_state *cli;
-       struct in_addr          server_ip;
-       NTSTATUS nt_status;
-       TALLOC_CTX *mem_ctx = talloc_init("net_ads_printer_publish");
-       ADS_MODLIST mods = ads_init_mods(mem_ctx);
-       char *prt_dn, *srv_dn, **srv_cn;
-       void *res = NULL;
-
-       if (!(ads = ads_startup())) return -1;
-
-       if (argc < 1)
-               return net_ads_printer_usage(argc, argv);
-       
-       if (argc == 2)
-               servername = argv[1];
-       else
-               servername = lp_netbios_name();
-               
-       ads_find_machine_acct(ads, &res, servername);
-       srv_dn = ldap_get_dn(ads->ld, res);
-       srv_cn = ldap_explode_dn(srv_dn, 1);
-       asprintf(&prt_dn, "cn=%s-%s,%s", srv_cn[0], argv[0], srv_dn);
-
-       resolve_name(servername, &server_ip, 0x20);
-
-       nt_status = smbcli_full_connection(&cli, lp_netbios_name(), servername, 
-                                       &server_ip, 0,
-                                       "IPC$", "IPC",  
-                                       opt_user_name, opt_workgroup,
-                                       opt_password ? opt_password : "", 
-                                       SMBCLI_FULL_CONNECTION_USE_KERBEROS, 
-                                       NULL);
-
-       smbcli_nt_session_open(cli, PI_SPOOLSS);
-       get_remote_printer_publishing_data(cli, mem_ctx, &mods, argv[0]);
-
-        rc = ads_add_printer_entry(ads, prt_dn, mem_ctx, &mods);
-        if (!ADS_ERR_OK(rc)) {
-                d_printf("ads_publish_printer: %s\n", ads_errstr(rc));
-                return -1;
-        }
-        d_printf("published printer\n");
-       return 0;
-}
-
-static int net_ads_printer_remove(int argc, const char **argv)
-{
-       ADS_STRUCT *ads;
-       ADS_STATUS rc;
-       const char *servername;
-       char *prt_dn;
-       void *res = NULL;
-
-       if (!(ads = ads_startup())) return -1;
-
-       if (argc < 1)
-               return net_ads_printer_usage(argc, argv);
-
-       if (argc > 1)
-               servername = argv[1];
-       else
-               servername = lp_netbios_name();
-
-       rc = ads_find_printer_on_server(ads, &res, argv[0], servername);
-
-       if (!ADS_ERR_OK(rc)) {
-               d_printf("ads_find_printer_on_server: %s\n", ads_errstr(rc));
-               ads_msgfree(ads, res);
-               return -1;
-       }
-
-       if (ads_count_replies(ads, res) == 0) {
-               d_printf("Printer '%s' not found\n", argv[1]);
-               ads_msgfree(ads, res);
-               return -1;
-       }
-
-       prt_dn = ads_get_dn(ads, res);
-       ads_msgfree(ads, res);
-       rc = ads_del_dn(ads, prt_dn);
-       ads_memfree(ads, prt_dn);
-
-       if (!ADS_ERR_OK(rc)) {
-               d_printf("ads_del_dn: %s\n", ads_errstr(rc));
-               return -1;
-       }
-
-       return 0;
-}
-
-static int net_ads_printer(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"INFO", net_ads_printer_info},
-               {"PUBLISH", net_ads_printer_publish},
-               {"REMOVE", net_ads_printer_remove},
-               {NULL, NULL}
-       };
-       
-       return net_run_function(argc, argv, func, net_ads_printer_usage);
-}
-
-
-static int net_ads_password(int argc, const char **argv)
-{
-    ADS_STRUCT *ads;
-    const char *auth_principal = opt_user_name;
-    const char *auth_password = opt_password;
-    char *realm = NULL;
-    char *new_password = NULL;
-    char *c;
-    char *prompt;
-    ADS_STATUS ret;
-
-    
-    if ((argc != 1) || (opt_user_name == NULL) || 
-       (opt_password == NULL) || (strchr(opt_user_name, '@') == NULL) ||
-       (strchr(argv[0], '@') == NULL)) {
-       return net_ads_usage(argc, argv);
-    }
-
-    use_in_memory_ccache();    
-    c = strchr(auth_principal, '@');
-    realm = ++c;
-
-    /* use the realm so we can eventually change passwords for users 
-    in realms other than default */
-    if (!(ads = ads_init(realm, NULL, NULL))) return -1;
-
-    asprintf(&prompt, "Enter new password for %s:", argv[0]);
-
-    new_password = getpass(prompt);
-
-    ret = kerberos_set_password(ads->auth.kdc_server, auth_principal, 
-                               auth_password, argv[0], new_password, ads->auth.time_offset);
-    if (!ADS_ERR_OK(ret)) {
-       d_printf("Password change failed :-( ...\n");
-       ads_destroy(&ads);
-       free(prompt);
-       return -1;
-    }
-
-    d_printf("Password change for %s completed.\n", argv[0]);
-    ads_destroy(&ads);
-    free(prompt);
-
-    return 0;
-}
-
-
-static int net_ads_change_localhost_pass(int argc, const char **argv)
-{    
-    ADS_STRUCT *ads;
-    char *host_principal;
-    char *hostname;
-    ADS_STATUS ret;
-    char *user_name;
-
-    if (!secrets_init()) {
-           DEBUG(1,("Failed to initialise secrets database\n"));
-           return -1;
-    }
-
-    asprintf(&user_name, "%s$", lp_netbios_name());
-    opt_user_name = user_name;
-
-    opt_password = secrets_fetch_machine_password();
-
-    use_in_memory_ccache();
-
-    if (!(ads = ads_startup())) {
-           return -1;
-    }
-
-    hostname = strdup(lp_netbios_name());
-    strlower(hostname);
-    asprintf(&host_principal, "%s@%s", hostname, ads->config.realm);
-    SAFE_FREE(hostname);
-    d_printf("Changing password for principal: HOST/%s\n", host_principal);
-    
-    ret = ads_change_trust_account_password(ads, host_principal);
-
-    if (!ADS_ERR_OK(ret)) {
-       d_printf("Password change failed :-( ...\n");
-       ads_destroy(&ads);
-       SAFE_FREE(host_principal);
-       return -1;
-    }
-    
-    d_printf("Password change for principal HOST/%s succeeded.\n", host_principal);
-    ads_destroy(&ads);
-    SAFE_FREE(host_principal);
-
-    return 0;
-}
-
-/*
-  help for net ads search
-*/
-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"\
-               "Example: net ads search '(objectCategory=group)' sAMAccountName\n\n"
-               );
-       net_common_flags_usage(argc, argv);
-       return -1;
-}
-
-
-/*
-  general ADS search function. Useful in diagnosing problems in ADS
-*/
-static int net_ads_search(int argc, const char **argv)
-{
-       ADS_STRUCT *ads;
-       ADS_STATUS rc;
-       const char *exp;
-       const char **attrs;
-       void *res = NULL;
-
-       if (argc < 1) {
-               return net_ads_search_usage(argc, argv);
-       }
-
-       if (!(ads = ads_startup())) {
-               return -1;
-       }
-
-       exp = argv[0];
-       attrs = (argv + 1);
-
-       rc = ads_do_search_all(ads, ads->config.bind_path,
-                              LDAP_SCOPE_SUBTREE,
-                              exp, attrs, &res);
-       if (!ADS_ERR_OK(rc)) {
-               d_printf("search failed: %s\n", ads_errstr(rc));
-               return -1;
-       }       
-
-       d_printf("Got %d replies\n\n", ads_count_replies(ads, res));
-
-       /* dump the results */
-       ads_dump(ads, res);
-
-       ads_msgfree(ads, res);
-       ads_destroy(&ads);
-
-       return 0;
-}
-
-
-/*
-  help for net ads search
-*/
-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"\
-               "Example: net ads dn 'CN=administrator,CN=Users,DC=my,DC=domain' sAMAccountName\n\n"
-               );
-       net_common_flags_usage(argc, argv);
-       return -1;
-}
-
-
-/*
-  general ADS search function. Useful in diagnosing problems in ADS
-*/
-static int net_ads_dn(int argc, const char **argv)
-{
-       ADS_STRUCT *ads;
-       ADS_STATUS rc;
-       const char *dn;
-       const char **attrs;
-       void *res = NULL;
-
-       if (argc < 1) {
-               return net_ads_dn_usage(argc, argv);
-       }
-
-       if (!(ads = ads_startup())) {
-               return -1;
-       }
-
-       dn = argv[0];
-       attrs = (argv + 1);
-
-       rc = ads_do_search_all(ads, dn, 
-                              LDAP_SCOPE_BASE,
-                              "(objectclass=*)", attrs, &res);
-       if (!ADS_ERR_OK(rc)) {
-               d_printf("search failed: %s\n", ads_errstr(rc));
-               return -1;
-       }       
-
-       d_printf("Got %d replies\n\n", ads_count_replies(ads, res));
-
-       /* dump the results */
-       ads_dump(ads, res);
-
-       ads_msgfree(ads, res);
-       ads_destroy(&ads);
-
-       return 0;
-}
-
-
-int net_ads_help(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"USER", net_ads_user_usage},
-               {"GROUP", net_ads_group_usage},
-               {"PRINTER", net_ads_printer_usage},
-               {"SEARCH", net_ads_search_usage},
-#if 0
-               {"INFO", net_ads_info},
-               {"JOIN", net_ads_join},
-               {"LEAVE", net_ads_leave},
-               {"STATUS", net_ads_status},
-               {"PASSWORD", net_ads_password},
-               {"CHOSTPASS", net_ads_change_localhost_pass},
-#endif
-               {NULL, NULL}
-       };
-
-       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},
-               {"PASSWORD", net_ads_password},
-               {"CHOSTPASS", net_ads_change_localhost_pass},
-               {"PRINTER", net_ads_printer},
-               {"SEARCH", net_ads_search},
-               {"DN", net_ads_dn},
-               {"WORKGROUP", net_ads_workgroup},
-               {"LOOKUP", net_ads_lookup},
-               {"HELP", net_ads_help},
-               {NULL, NULL}
-       };
-       
-       return net_run_function(argc, argv, func, net_ads_usage);
-}
-
-#else
-
-static int net_ads_noads(void)
-{
-       d_printf("ADS support not compiled in\n");
-       return -1;
-}
-
-int net_ads_usage(int argc, const char **argv)
-{
-       return net_ads_noads();
-}
-
-int net_ads_help(int argc, const char **argv)
-{
-       return net_ads_noads();
-}
-
-int net_ads_join(int argc, const char **argv)
-{
-       return net_ads_noads();
-}
-
-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(void)
-{
-       return -1;
-}
-
-int net_ads(int argc, const char **argv)
-{
-       return net_ads_usage(argc, argv);
-}
-
-#endif
diff --git a/source4/utils/net_ads_cldap.c b/source4/utils/net_ads_cldap.c
deleted file mode 100644 (file)
index a446418..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-/* 
-   Samba Unix/Linux SMB client library 
-   net ads cldap functions 
-   Copyright (C) 2001 Andrew Tridgell (tridge@samba.org)
-   Copyright (C) 2003 Jim McDonough (jmcd@us.ibm.com)
-
-   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.h"
-
-#ifdef HAVE_ADS
-
-struct netlogon_string {
-       uint32_t comp_len;
-       char **component;
-       uint8_t extra_flag;
-};
-
-struct cldap_netlogon_reply {
-       uint32_t type;
-       uint32_t flags;
-       GUID guid;
-
-       struct netlogon_string forest;
-       struct netlogon_string domain;
-       struct netlogon_string hostname;
-
-       struct netlogon_string netbios_domain;
-       struct netlogon_string netbios_hostname;
-
-       struct netlogon_string user_name;
-       struct netlogon_string site_name;
-
-       struct netlogon_string unk0;
-
-       uint32_t version;
-       uint16_t lmnt_token;
-       uint16_t lm20_token;
-};
-
-/*
-  These strings are rather interesting... They are composed of a series of
-  length encoded strings, terminated by either 1) a zero length string or 2)
-  a 0xc0 byte with what appears to be a one byte flags immediately following.
-*/
-static uint_t pull_netlogon_string(struct netlogon_string *ret,const char *d)
-{
-       char *p = (char *)d;
-
-       ZERO_STRUCTP(ret);
-
-       do {
-               uint_t len = (uint8_t)*p;
-               p++;
-
-               if (len > 0 && len != 0xc0) {
-                       ret->component = realloc(ret->component,
-                                                ++ret->comp_len *
-                                                sizeof(char *));
-
-                       ret->component[ret->comp_len - 1] = 
-                               smb_xstrndup(p, len);
-                       p += len;
-               } else {
-                       if (len == 0xc0) {
-                               ret->extra_flag = *p;
-                               p++;
-                       };
-                       break;
-               }
-       } while (1);
-
-       return (p - d);
-}
-
-/*
-  do a cldap netlogon query
-*/
-static int send_cldap_netlogon(int sock, const char *domain, 
-                              const char *hostname, uint_t ntversion)
-{
-       ASN1_DATA data;
-       char ntver[4];
-
-       SIVAL(ntver, 0, ntversion);
-
-       memset(&data, 0, sizeof(data));
-
-       asn1_push_tag(&data,ASN1_SEQUENCE(0));
-       asn1_write_Integer(&data, 4);
-       asn1_push_tag(&data, ASN1_APPLICATION(3));
-       asn1_write_OctetString(&data, NULL, 0);
-       asn1_write_enumerated(&data, 0);
-       asn1_write_enumerated(&data, 0);
-       asn1_write_Integer(&data, 0);
-       asn1_write_Integer(&data, 0);
-       asn1_write_BOOLEAN2(&data, False);
-       asn1_push_tag(&data, ASN1_CONTEXT(0));
-
-       asn1_push_tag(&data, ASN1_CONTEXT(3));
-       asn1_write_OctetString(&data, "DnsDomain", 9);
-       asn1_write_OctetString(&data, domain, strlen(domain));
-       asn1_pop_tag(&data);
-
-       asn1_push_tag(&data, ASN1_CONTEXT(3));
-       asn1_write_OctetString(&data, "Host", 4);
-       asn1_write_OctetString(&data, hostname, strlen(hostname));
-       asn1_pop_tag(&data);
-
-       asn1_push_tag(&data, ASN1_CONTEXT(3));
-       asn1_write_OctetString(&data, "NtVer", 5);
-       asn1_write_OctetString(&data, ntver, 4);
-       asn1_pop_tag(&data);
-
-       asn1_pop_tag(&data);
-
-       asn1_push_tag(&data,ASN1_SEQUENCE(0));
-       asn1_write_OctetString(&data, "NetLogon", 8);
-       asn1_pop_tag(&data);
-       asn1_pop_tag(&data);
-       asn1_pop_tag(&data);
-
-       if (data.has_error) {
-               d_printf("Failed to build cldap netlogon at offset %d\n", (int)data.ofs);
-               asn1_free(&data);
-               return -1;
-       }
-
-       if (write(sock, data.data, data.length) != data.length) {
-               d_printf("failed to send cldap query (%s)\n", strerror(errno));
-       }
-
-       file_save("cldap_query.dat", data.data, data.length);
-       asn1_free(&data);
-
-       return 0;
-}
-
-
-/*
-  receive a cldap netlogon reply
-*/
-static int recv_cldap_netlogon(int sock, struct cldap_netlogon_reply *reply)
-{
-       int ret;
-       ASN1_DATA data;
-       DATA_BLOB blob;
-       DATA_BLOB os1, os2, os3;
-       uint32_t i1;
-       char *p;
-
-       blob = data_blob(NULL, 8192);
-
-       ret = read(sock, blob.data, blob.length);
-
-       if (ret <= 0) {
-               d_printf("no reply received to cldap netlogon\n");
-               return -1;
-       }
-       blob.length = ret;
-
-       file_save("cldap_reply.dat", blob.data, blob.length);
-
-       asn1_load(&data, blob);
-       asn1_start_tag(&data, ASN1_SEQUENCE(0));
-       asn1_read_Integer(&data, &i1);
-       asn1_start_tag(&data, ASN1_APPLICATION(4));
-       asn1_read_OctetString(&data, &os1);
-       asn1_start_tag(&data, ASN1_SEQUENCE(0));
-       asn1_start_tag(&data, ASN1_SEQUENCE(0));
-       asn1_read_OctetString(&data, &os2);
-       asn1_start_tag(&data, ASN1_SET);
-       asn1_read_OctetString(&data, &os3);
-       asn1_end_tag(&data);
-       asn1_end_tag(&data);
-       asn1_end_tag(&data);
-       asn1_end_tag(&data);
-       asn1_end_tag(&data);
-
-       if (data.has_error) {
-               d_printf("Failed to parse cldap reply\n");
-               return -1;
-       }
-
-       file_save("cldap_reply_core.dat", os3.data, os3.length);
-
-       p = os3.data;
-
-       reply->type = IVAL(p, 0); p += 4;
-       reply->flags = IVAL(p, 0); p += 4;
-
-       memcpy(&reply->guid.info, p, GUID_SIZE);
-       p += GUID_SIZE;
-
-       p += pull_netlogon_string(&reply->forest, p);
-       p += pull_netlogon_string(&reply->domain, p);
-       p += pull_netlogon_string(&reply->hostname, p);
-       p += pull_netlogon_string(&reply->netbios_domain, p);
-       p += pull_netlogon_string(&reply->netbios_hostname, p);
-       p += pull_netlogon_string(&reply->user_name, p);
-       p += pull_netlogon_string(&reply->site_name, p);
-
-       p += pull_netlogon_string(&reply->unk0, p);
-
-       reply->version = IVAL(p, 0);
-       reply->lmnt_token = SVAL(p, 4);
-       reply->lm20_token = SVAL(p, 6);
-
-       data_blob_free(&os1);
-       data_blob_free(&os2);
-       data_blob_free(&os3);
-       data_blob_free(&blob);
-       
-       return 0;
-}
-
-/*
-  free a netlogon string
-*/
-static void netlogon_string_free(struct netlogon_string *str)
-{
-       int i;
-
-       for (i = 0; i < str->comp_len; ++i) {
-               SAFE_FREE(str->component[i]);
-       }
-       SAFE_FREE(str->component);
-}
-
-/*
-  free a cldap reply packet
-*/
-static void cldap_reply_free(struct cldap_netlogon_reply *reply)
-{
-       netlogon_string_free(&reply->forest);
-       netlogon_string_free(&reply->domain);
-       netlogon_string_free(&reply->hostname);
-       netlogon_string_free(&reply->netbios_domain);
-       netlogon_string_free(&reply->netbios_hostname);
-       netlogon_string_free(&reply->user_name);
-       netlogon_string_free(&reply->site_name);
-       netlogon_string_free(&reply->unk0);
-}
-
-static void d_print_netlogon_string(const char *label, 
-                                   struct netlogon_string *str)
-{
-       int i;
-
-       if (str->comp_len) {
-               d_printf("%s", label);
-               if (str->extra_flag) {
-                       d_printf("[%d]", str->extra_flag);
-               }
-               d_printf(": ");
-               for (i = 0; i < str->comp_len; ++i) {
-                       d_printf("%s%s", (i ? "." : ""), str->component[i]);
-               }
-               d_printf("\n");
-       }
-}
-
-/*
-  do a cldap netlogon query
-*/
-int ads_cldap_netlogon(ADS_STRUCT *ads)
-{
-       int sock;
-       int ret;
-       struct cldap_netlogon_reply reply;
-
-       sock = open_udp_socket(inet_ntoa(ads->ldap_ip), ads->ldap_port);
-       if (sock == -1) {
-               d_printf("Failed to open udp socket to %s:%u\n", 
-                        inet_ntoa(ads->ldap_ip), 
-                        ads->ldap_port);
-               return -1;
-       }
-
-       ret = send_cldap_netlogon(sock, ads->config.realm, lp_netbios_name(), 6);
-       if (ret != 0) {
-               return ret;
-       }
-       ret = recv_cldap_netlogon(sock, &reply);
-       close(sock);
-
-       if (ret == -1) {
-               return -1;
-       }
-
-       d_printf("Information for Domain Controller: %s\n\n", 
-                ads->config.ldap_server_name);
-
-       d_printf("Response Type: 0x%x\n", reply.type);
-       d_printf("GUID: "); 
-       print_guid(&reply.guid);
-       d_printf("Flags:\n"
-                "\tIs a PDC:                                   %s\n"
-                "\tIs a GC of the forest:                      %s\n"
-                "\tIs an LDAP server:                          %s\n"
-                "\tSupports DS:                                %s\n"
-                "\tIs running a KDC:                           %s\n"
-                "\tIs running time services:                   %s\n"
-                "\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",
-                (reply.flags & ADS_PDC) ? "yes" : "no",
-                (reply.flags & ADS_GC) ? "yes" : "no",
-                (reply.flags & ADS_LDAP) ? "yes" : "no",
-                (reply.flags & ADS_DS) ? "yes" : "no",
-                (reply.flags & ADS_KDC) ? "yes" : "no",
-                (reply.flags & ADS_TIMESERV) ? "yes" : "no",
-                (reply.flags & ADS_CLOSEST) ? "yes" : "no",
-                (reply.flags & ADS_WRITABLE) ? "yes" : "no",
-                (reply.flags & ADS_GOOD_TIMESERV) ? "yes" : "no",
-                (reply.flags & ADS_NDNC) ? "yes" : "no");
-
-       d_print_netlogon_string("Forest", &reply.forest);
-       d_print_netlogon_string("Domain", &reply.domain);
-       d_print_netlogon_string("Hostname", &reply.hostname);
-
-       d_print_netlogon_string("Pre-Win2k Domain", &reply.netbios_domain);
-       d_print_netlogon_string("Pre-Win2k Hostname", &reply.netbios_hostname);
-
-       d_print_netlogon_string("User name", &reply.user_name);
-       d_print_netlogon_string("Site Name", &reply.site_name);
-       d_print_netlogon_string("Unknown Field", &reply.unk0);
-
-       d_printf("NT Version: %d\n", reply.version);
-       d_printf("LMNT Token: %.2x\n", reply.lmnt_token);
-       d_printf("LM20 Token: %.2x\n", reply.lm20_token);
-
-       cldap_reply_free(&reply);
-       
-       return ret;
-}
-
-
-#endif
diff --git a/source4/utils/net_cache.c b/source4/utils/net_cache.c
deleted file mode 100644 (file)
index 93c4f1a..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-/* 
-   Samba Unix/Linux SMB client library 
-   Distributed SMB/CIFS Server Management Utility 
-   Copyright (C) Rafal Szczesniak    2002
-
-   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 "net.h"
-
-/**
- * @file net_cache.c
- * @brief This is part of the net tool which is basically command
- *        line wrapper for gencache.c functions (mainly for testing)
- *
- **/
-
-
-/*
- * These routines are used via gencache_iterate() to display the cache's contents
- * (print_cache_entry) and to flush it (delete_cache_entry).
- * Both of them are defined by first arg of gencache_iterate() routine.
- */
-static void print_cache_entry(const char* keystr, const char* datastr,
-                              const time_t timeout, void* dptr)
-{
-       char* timeout_str;
-       time_t now_t = time(NULL);
-       struct tm timeout_tm, *now_tm;
-       /* localtime returns statically allocated pointer, so timeout_tm
-          has to be copied somewhere else */
-       memcpy(&timeout_tm, localtime(&timeout), sizeof(struct tm));
-       now_tm = localtime(&now_t);
-
-       /* form up timeout string depending whether it's today's date or not */
-       if (timeout_tm.tm_year != now_tm->tm_year ||
-           timeout_tm.tm_mon != now_tm->tm_mon ||
-           timeout_tm.tm_mday != now_tm->tm_mday) {
-           
-           timeout_str = asctime(&timeout_tm);
-           timeout_str[strlen(timeout_str) - 1] = '\0';        /* remove tailing CR */
-       } else
-               asprintf(&timeout_str, "%.2d:%.2d:%.2d", timeout_tm.tm_hour,
-                        timeout_tm.tm_min, timeout_tm.tm_sec);
-       
-       d_printf("Key: %s\t Timeout: %s\t Value: %s  %s\n", keystr,
-                timeout_str, datastr, timeout > now_t ? "": "(expired)");
-}
-
-static void delete_cache_entry(const char* keystr, const char* datastr,
-                               const time_t timeout, void* dptr)
-{
-       if (!gencache_del(keystr))
-               d_printf("Couldn't delete entry! key = %s", keystr);
-}
-
-
-/**
- * Parse text representation of timeout value
- *
- * @param timeout_str string containing text representation of the timeout
- * @return numeric timeout of time_t type
- **/
-static time_t parse_timeout(const char* timeout_str)
-{
-       char sign = '\0', *number = NULL, unit = '\0';
-       int len, number_begin, number_end;
-       time_t timeout;
-
-       /* sign detection */
-       if (timeout_str[0] == '!' || timeout_str[0] == '+') {
-               sign = timeout_str[0];
-               number_begin = 1;
-       } else {
-               number_begin = 0;
-       }
-       
-       /* unit detection */
-       len = strlen(timeout_str);
-       switch (timeout_str[len - 1]) {
-       case 's':
-       case 'm':
-       case 'h':
-       case 'd':
-       case 'w': unit = timeout_str[len - 1];
-       }
-       
-       /* number detection */
-       len = (sign) ? strlen(&timeout_str[number_begin]) : len;
-       number_end = (unit) ? len - 1 : len;
-       number = strndup(&timeout_str[number_begin], number_end);
-       
-       /* calculate actual timeout value */
-       timeout = (time_t)atoi(number);
-
-       switch (unit) {
-       case 'm': timeout *= 60; break;
-       case 'h': timeout *= 60*60; break;
-       case 'd': timeout *= 60*60*24; break;
-       case 'w': timeout *= 60*60*24*7; break;  /* that's fair enough, I think :) */
-       }
-       
-       switch (sign) {
-       case '!': timeout = time(NULL) - timeout; break;
-       case '+':
-       default:  timeout += time(NULL); break;
-       }
-       
-       if (number) SAFE_FREE(number);
-       return timeout; 
-}
-
-
-/**
- * Add an entry to the cache. If it does exist, then set it.
- * 
- * @param argv key, value and timeout are passed in command line
- * @return 0 on success, otherwise failure
- **/
-static int net_cache_add(int argc, const char **argv)
-{
-       const char *keystr, *datastr, *timeout_str;
-       time_t timeout;
-       
-       if (argc < 3) {
-               d_printf("\nUsage: net cache add <key string> <data string> <timeout>\n");
-               return -1;
-       }
-       
-       keystr = argv[0];
-       datastr = argv[1];
-       timeout_str = argv[2];
-       
-       /* parse timeout given in command line */
-       timeout = parse_timeout(timeout_str);
-       if (!timeout) {
-               d_printf("Invalid timeout argument.\n");
-               return -1;
-       }
-       
-       if (gencache_set(keystr, datastr, timeout)) {
-               d_printf("New cache entry stored successfully.\n");
-               gencache_shutdown();
-               return 0;
-       }
-       
-       d_printf("Entry couldn't be added. Perhaps there's already such a key.\n");
-       gencache_shutdown();
-       return -1;
-}
-
-
-/**
- * Set new value of an existing entry in the cache. Fail If the entry doesn't
- * exist.
- * 
- * @param argv key being searched and new value and timeout to set in the entry
- * @return 0 on success, otherwise failure
- **/
-static int net_cache_set(int argc, const char **argv)
-{
-       const char *keystr, *datastr, *timeout_str;
-       time_t timeout;
-       
-       if (argc < 3) {
-               d_printf("\nUsage: net cache set <key string> <data string> <timeout>\n");
-               return -1;
-       }
-       
-       keystr = argv[0];
-       datastr = argv[1];
-       timeout_str = argv[2];
-       
-       /* parse timeout given in command line */
-       timeout = parse_timeout(timeout_str);
-       if (!timeout) {
-               d_printf("Invalid timeout argument.\n");
-               return -1;
-       }
-       
-       if (gencache_set_only(keystr, datastr, timeout)) {
-               d_printf("Cache entry set successfully.\n");
-               gencache_shutdown();
-               return 0;
-       }
-
-       d_printf("Entry couldn't be set. Perhaps there's no such a key.\n");
-       gencache_shutdown();
-       return -1;
-}
-
-
-/**
- * Delete an entry in the cache
- * 
- * @param argv key to delete an entry of
- * @return 0 on success, otherwise failure
- **/
-static int net_cache_del(int argc, const char **argv)
-{
-       const char *keystr = argv[0];
-       
-       if (argc < 1) {
-               d_printf("\nUsage: net cache add <key string>\n");
-               return -1;
-       }
-       
-       if(gencache_del(keystr)) {
-               d_printf("Entry deleted.\n");
-               return 0;
-       }
-
-       d_printf("Couldn't delete specified entry\n");
-       return -1;
-}
-
-
-/**
- * Get and display an entry from the cache
- * 
- * @param argv key to search an entry of
- * @return 0 on success, otherwise failure
- **/
-static int net_cache_get(int argc, const char **argv)
-{
-       const char* keystr = argv[0];
-       char* valuestr;
-       time_t timeout;
-
-       if (argc < 1) {
-               d_printf("\nUsage: net cache get <key>\n");
-               return -1;
-       }
-       
-       if (gencache_get(keystr, &valuestr, &timeout)) {
-               print_cache_entry(keystr, valuestr, timeout, NULL);
-               return 0;
-       }
-
-       d_printf("Failed to find entry\n");
-       return -1;
-}
-
-
-/**
- * Search an entry/entries in the cache
- * 
- * @param argv key pattern to match the entries to
- * @return 0 on success, otherwise failure
- **/
-static int net_cache_search(int argc, const char **argv)
-{
-       const char* pattern;
-       
-       if (argc < 1) {
-               d_printf("Usage: net cache search <pattern>\n");
-               return -1;
-       }
-       
-       pattern = argv[0];
-       gencache_iterate(print_cache_entry, NULL, pattern);
-       return 0;
-}
-
-
-/**
- * List the contents of the cache
- * 
- * @param argv ignored in this functionailty
- * @return always returns 0
- **/
-static int net_cache_list(int argc, const char **argv)
-{
-       const char* pattern = "*";
-       gencache_iterate(print_cache_entry, NULL, pattern);
-       gencache_shutdown();
-       return 0;
-}
-
-
-/**
- * Flush the whole cache
- * 
- * @param argv ignored in this functionality
- * @return always returns 0
- **/
-static int net_cache_flush(int argc, const char **argv)
-{
-       const char* pattern = "*";
-       gencache_iterate(delete_cache_entry, NULL, pattern);
-       gencache_shutdown();
-       return 0;
-}
-
-
-/**
- * Short help
- *
- * @param argv ignored in this functionality
- * @return always returns -1
- **/
-static int net_cache_usage(int argc, const char **argv)
-{
-       d_printf("  net cache add \t add add new cache entry\n");
-       d_printf("  net cache set \t set new value for existing cache entry\n");
-       d_printf("  net cache del \t delete existing cache entry by key\n");
-       d_printf("  net cache flush \t delete all entries existing in the cache\n");
-       d_printf("  net cache get \t get cache entry by key\n");
-       d_printf("  net cache search \t search for entries in the cache, by given pattern\n");
-       d_printf("  net cache list \t list all cache entries (just like search for \"*\")\n");
-       return -1;
-}
-
-
-/**
- * Entry point to 'net cache' subfunctionality
- *
- * @param argv arguments passed to further called functions
- * @return whatever further functions return
- **/
-int net_cache(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"add", net_cache_add},
-               {"set", net_cache_set},
-               {"del", net_cache_del},
-               {"get", net_cache_get},
-               {"search", net_cache_search},
-               {"list", net_cache_list},
-               {"flush", net_cache_flush},
-               {NULL, NULL}
-       };
-
-       return net_run_function(argc, argv, func, net_cache_usage);
-}
diff --git a/source4/utils/net_help.c b/source4/utils/net_help.c
deleted file mode 100644 (file)
index 4000a24..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/* 
-   Samba Unix/Linux SMB client library 
-   net help commands
-   Copyright (C) 2002 Jim McDonough (jmcd@us.ibm.com)
-
-   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.h"
-
-int net_common_methods_usage(int argc, const char**argv)
-{
-       d_printf("Valid methods: (auto-detected if not specified)\n");
-       d_printf("\tads\t\t\t\tActive Directory (LDAP/Kerberos)\n");
-       d_printf("\trpc\t\t\t\tDCE-RPC\n");
-       d_printf("\trap\t\t\t\tRAP (older systems)\n");
-       d_printf("\n");
-       return 0;
-}
-
-int net_common_flags_usage(int argc, const char **argv)
-{
-       d_printf("Valid targets: choose one (none defaults to localhost)\n");
-       d_printf("\t-S or --server=<server>\t\tserver name\n");
-       d_printf("\t-I or --ipaddress=<ipaddr>\taddress of target server\n");
-       d_printf("\t-w or --workgroup=<wg>\t\ttarget workgroup or domain\n");
-
-       d_printf("\n");
-       d_printf("Valid miscellaneous options are:\n"); /* misc options */
-       d_printf("\t-p or --port=<port>\t\tconnection port on target\n");
-       d_printf("\t-W or --myworkgroup=<wg>\tclient workgroup\n");
-       d_printf("\t-d or --debug=<level>\t\tdebug level (0-10)\n");
-       d_printf("\t-n or --myname=<name>\t\tclient name\n");
-       d_printf("\t-U or --user=<name>\t\tuser name\n");
-       d_printf("\t-s or --conf=<path>\t\tpathname of smb.conf file\n");
-       d_printf("\t-l or --long\t\t\tDisplay full information\n");
-       d_printf("\t-P or --machine-pass\t\tAuthenticate as machine account\n");
-       return -1;
-}
-
-static int help_usage(int argc, const char **argv)
-{
-       d_printf(
-"\n"\
-"Usage: net help <function>\n"\
-"\n"\
-"Valid functions are:\n"\
-"  RPC RAP ADS FILE SHARE SESSION SERVER DOMAIN PRINTQ USER GROUP VALIDATE\n"\
-"  GROUPMEMBER ADMIN SERVICE PASSWORD TIME LOOKUP GETLOCALSID SETLOCALSID\n");
-       return -1;
-}
-
-int net_help_user(int argc, const char **argv)
-{
-       d_printf("\nnet [<method>] user [misc. options] [targets]"\
-                "\n\tList users\n\n");
-       d_printf("net [<method>] user DELETE <name> [misc. options] [targets]"\
-                "\n\tDelete specified user\n");
-       d_printf("\nnet [<method>] user INFO <name> [misc. options] [targets]"\
-                "\n\tList the domain groups of the specified user\n");
-       d_printf("\nnet [<method>] user ADD <name> [password] [-c container] "\
-                "[-F user flags] [misc. options]"\
-                " [targets]\n\tAdd specified user\n");
-
-       net_common_methods_usage(argc, argv);
-       net_common_flags_usage(argc, argv);
-       d_printf("\t-C or --comment=<comment>\tdescriptive comment (for add only)\n");
-       d_printf("\t-c or --container=<container>\tLDAP container, defaults to cn=Users (for add in ADS only)\n");
-       return -1;
-}
-
-int net_help_group(int argc, const char **argv)
-{
-       d_printf("net [<method>] group [misc. options] [targets]"\
-                "\n\tList user groups\n\n");
-       d_printf("net [<method>] group DELETE <name> "\
-                "[misc. options] [targets]"\
-                "\n\tDelete specified group\n");
-       d_printf("\nnet [<method>] group ADD <name> [-C comment] [-c container]"\
-                " [misc. options] [targets]\n\tCreate specified group\n");
-       net_common_methods_usage(argc, argv);
-       net_common_flags_usage(argc, argv);
-       d_printf("\t-C or --comment=<comment>\tdescriptive comment (for add only)\n");
-       d_printf("\t-c or --container=<container>\tLDAP container, defaults to cn=Users (for add in ADS only)\n");
-       return -1;
-}
-
-
-int net_help_join(int argc, const char **argv)
-{
-       d_printf("\nnet [<method>] join [misc. options]\n"
-                "\tjoins this server to a domain\n");
-       d_printf("Valid methods: (auto-detected if not specified)\n");
-       d_printf("\tads\t\t\t\tActive Directory (LDAP/Kerberos)\n");
-       d_printf("\trpc\t\t\t\tDCE-RPC\n");
-       net_common_flags_usage(argc, argv);
-       return -1;
-}
-
-int net_help_share(int argc, const char **argv)
-{
-       d_printf(
-        "\nnet [<method>] share [misc. options] [targets] \n"
-        "\tenumerates all exported resources (network shares) "
-        "on target server\n\n"
-        "net [<method>] share ADD <name=serverpath> [misc. options] [targets]"
-        "\n\tAdds a share from a server (makes the export active)\n\n"
-        "net [<method>] share DELETE <sharename> [misc. options] [targets]\n"
-        "\n\tDeletes a share from a server (makes the export inactive)\n");
-       net_common_methods_usage(argc, argv);
-       net_common_flags_usage(argc, argv);
-       d_printf(
-        "\t-C or --comment=<comment>\tdescriptive comment (for add only)\n"
-        "\t-M or --maxusers=<num>\t\tmax users allowed for share\n");
-       return -1;
-}
-
-int net_help_file(int argc, const char **argv)
-{
-       d_printf("net [<method>] file [misc. options] [targets]\n"\
-                "\tlists all open files on file server\n\n");
-       d_printf("net [<method>] file USER <username> "\
-                "[misc. options] [targets]"\
-                "\n\tlists all files opened by username on file server\n\n");
-       d_printf("net [<method>] file CLOSE <id> [misc. options] [targets]\n"\
-                "\tcloses specified file on target server\n\n");
-       d_printf("net [rap] file INFO <id> [misc. options] [targets]\n"\
-                "\tdisplays information about the specified open file\n");
-
-       net_common_methods_usage(argc, argv);
-       net_common_flags_usage(argc, argv);
-       return -1;
-}
-
-static int net_usage(int argc, const char **argv)
-{
-       d_printf("  net time\t\tto view or set time information\n"\
-                "  net lookup\t\tto lookup host name or ip address\n"\
-                "  net user\t\tto manage users\n"\
-                "  net group\t\tto manage groups\n"\
-                "  net join\t\tto join a domain\n"\
-                "  net cache\t\tto operate on cache tdb file\n"\
-                "  net getlocalsid [NAME]\tto get the SID for local name\n"\
-                "  net setlocalsid SID\tto set the local domain SID\n"\
-                "\n"\
-                "  net ads <command>\tto run ADS commands\n"\
-                "  net rap <command>\tto run RAP (pre-RPC) commands\n"\
-                "  net rpc <command>\tto run RPC commands\n"\
-                "\n"\
-                "Type \"net help <option>\" to get more information on that option\n");
-       net_common_flags_usage(argc, argv);
-       return -1;
-}
-
-/*
-  handle "net help *" subcommands
-*/
-int net_help(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"ADS", net_ads_help},  
-               {"RAP", net_rap_help},
-               {"RPC", net_rpc_help},
-
-               {"FILE", net_help_file},
-               {"SHARE", net_help_share},
-               {"SESSION", net_rap_session_usage},
-               {"SERVER", net_rap_server_usage},
-               {"DOMAIN", net_rap_domain_usage},
-               {"PRINTQ", net_rap_printq_usage},
-               {"USER", net_help_user},
-               {"GROUP", net_help_group},
-               {"JOIN", net_help_join},
-               {"VALIDATE", net_rap_validate_usage},
-               {"GROUPMEMBER", net_rap_groupmember_usage},
-               {"ADMIN", net_rap_admin_usage},
-               {"SERVICE", net_rap_service_usage},
-               {"PASSWORD", net_rap_password_usage},
-               {"TIME", net_time_usage},
-               {"LOOKUP", net_lookup_usage},
-
-               {"HELP", help_usage},
-               {NULL, NULL}};
-
-       return net_run_function(argc, argv, func, net_usage);
-}
diff --git a/source4/utils/net_lookup.c b/source4/utils/net_lookup.c
deleted file mode 100644 (file)
index 2710944..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-/* 
-   Samba Unix/Linux SMB client library 
-   net lookup command
-   Copyright (C) 2001 Andrew Tridgell (tridge@samba.org)
-
-   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.h"
-
-int net_lookup_usage(int argc, const char **argv)
-{
-       d_printf(
-"  net lookup host HOSTNAME <type>\n\tgives IP for a hostname\n\n"
-"  net lookup ldap [domain]\n\tgives IP of domain's ldap server\n\n"
-"  net lookup kdc [realm]\n\tgives IP of realm's kerberos KDC\n\n"
-"  net lookup dc [domain]\n\tgives IP of domains Domain Controllers\n\n"
-"  net lookup master [domain|wg]\n\tgive IP of master browser\n\n"
-);
-       return -1;
-}
-
-/* lookup a hostname giving an IP */
-static int net_lookup_host(int argc, const char **argv)
-{
-       struct in_addr ip;
-       int name_type = 0x20;
-
-       if (argc == 0) return net_lookup_usage(argc, argv);
-       if (argc > 1) name_type = strtol(argv[1], NULL, 0);
-
-       if (!resolve_name(argv[0], &ip, name_type)) {
-               /* we deliberately use DEBUG() here to send it to stderr 
-                  so scripts aren't mucked up */
-               DEBUG(0,("Didn't find %s#%02x\n", argv[0], name_type));
-               return -1;
-       }
-
-       d_printf("%s\n", inet_ntoa(ip));
-       return 0;
-}
-
-static void print_ldap_srvlist(char *srvlist)
-{
-       char *cur, *next;
-       struct in_addr ip;
-       BOOL printit;
-
-       cur = srvlist;
-       do {
-               next = strchr(cur,':');
-               if (next) *next++='\0';
-               printit = resolve_name(cur, &ip, 0x20);
-               cur=next;
-               next=cur ? strchr(cur,' ') :NULL;
-               if (next)
-                       *next++='\0';
-               if (printit)
-                       d_printf("%s:%s\n", inet_ntoa(ip), cur?cur:"");
-               cur = next;
-       } while (next);
-}
-               
-
-static int net_lookup_ldap(int argc, const char **argv)
-{
-#ifdef HAVE_LDAP
-       char *srvlist;
-       const char *domain;
-       int rc;
-       struct in_addr addr;
-       struct hostent *hostent;
-
-       if (argc > 0)
-               domain = argv[0];
-       else
-               domain = opt_target_workgroup;
-
-       DEBUG(9, ("Lookup up ldap for domain %s\n", domain));
-       rc = ldap_domain2hostlist(domain, &srvlist);
-       if ((rc == LDAP_SUCCESS) && srvlist) {
-               print_ldap_srvlist(srvlist);
-               return 0;
-       }
-
-       DEBUG(9, ("Looking up DC for domain %s\n", domain));
-       if (!get_pdc_ip(domain, &addr))
-               return -1;
-
-       hostent = gethostbyaddr((char *) &addr.s_addr, sizeof(addr.s_addr),
-                               AF_INET);
-       if (!hostent)
-               return -1;
-
-       DEBUG(9, ("Found DC with DNS name %s\n", hostent->h_name));
-       domain = strchr(hostent->h_name, '.');
-       if (!domain)
-               return -1;
-       domain++;
-
-       DEBUG(9, ("Looking up ldap for domain %s\n", domain));
-       rc = ldap_domain2hostlist(domain, &srvlist);
-       if ((rc == LDAP_SUCCESS) && srvlist) {
-               print_ldap_srvlist(srvlist);
-               return 0;
-       }
-       return -1;
-#endif
-       DEBUG(1,("No LDAP support\n"));
-       return -1;
-}
-
-static int net_lookup_dc(int argc, const char **argv)
-{
-       struct in_addr *ip_list, addr;
-       char *pdc_str = NULL;
-       const char *domain=opt_target_workgroup;
-       int count, i;
-       BOOL list_ordered;
-
-       if (argc > 0)
-               domain=argv[0];
-
-       /* first get PDC */
-       if (!get_pdc_ip(domain, &addr))
-               return -1;
-
-       asprintf(&pdc_str, "%s", inet_ntoa(addr));
-       d_printf("%s\n", pdc_str);
-
-       if (!get_dc_list(domain, &ip_list, &count, &list_ordered)) {
-               SAFE_FREE(pdc_str);
-               return 0;
-       }
-       for (i=0;i<count;i++) {
-               char *dc_str = inet_ntoa(ip_list[i]);
-               if (!strequal(pdc_str, dc_str))
-                       d_printf("%s\n", dc_str);
-       }
-       SAFE_FREE(pdc_str);
-       return 0;
-}
-
-static int net_lookup_master(int argc, const char **argv)
-{
-       struct in_addr master_ip;
-       const char *domain=opt_target_workgroup;
-
-       if (argc > 0)
-               domain=argv[0];
-
-       if (!find_master_ip(domain, &master_ip))
-               return -1;
-       d_printf("%s\n", inet_ntoa(master_ip));
-       return 0;
-}
-
-static int net_lookup_kdc(int argc, const char **argv)
-{
-#ifdef HAVE_KRB5
-       krb5_error_code rc;
-       krb5_context ctx;
-       struct sockaddr_in *addrs;
-       int num_kdcs,i;
-       krb5_data realm;
-       char **realms;
-
-       rc = krb5_init_context(&ctx);
-       if (rc) {
-               DEBUG(1,("krb5_init_context failed (%s)\n", 
-                        error_message(rc)));
-               return -1;
-       }
-
-       if (argc>0) {
-               realm.data = (krb5_pointer) argv[0];
-               realm.length = strlen(argv[0]);
-       } else if (lp_realm() && *lp_realm()) {
-               realm.data = (krb5_pointer) lp_realm();
-               realm.length = strlen(realm.data);
-       } else {
-               rc = krb5_get_host_realm(ctx, NULL, &realms);
-               if (rc) {
-                       DEBUG(1,("krb5_gethost_realm failed (%s)\n",
-                                error_message(rc)));
-                       return -1;
-               }
-               realm.data = (krb5_pointer) *realms;
-               realm.length = strlen(realm.data);
-       }
-
-       rc = krb5_locate_kdc(ctx, &realm, &addrs, &num_kdcs, 0);
-       if (rc) {
-               DEBUG(1, ("krb5_locate_kdc failed (%s)\n", error_message(rc)));
-               return -1;
-       }
-       for (i=0;i<num_kdcs;i++)
-               if (addrs[i].sin_family == AF_INET) 
-                       d_printf("%s:%hd\n", inet_ntoa(addrs[i].sin_addr),
-                                ntohs(addrs[i].sin_port));
-       return 0;
-
-#endif 
-       DEBUG(1, ("No kerberos support\n"));
-       return -1;
-}
-
-
-/* lookup hosts or IP addresses using internal samba lookup fns */
-int net_lookup(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"HOST", net_lookup_host},
-               {"LDAP", net_lookup_ldap},
-               {"DC", net_lookup_dc},
-               {"MASTER", net_lookup_master},
-               {"KDC", net_lookup_kdc},
-               {NULL, NULL}
-       };
-
-       return net_run_function(argc, argv, func, net_lookup_usage);
-}
diff --git a/source4/utils/net_rap.c b/source4/utils/net_rap.c
deleted file mode 100644 (file)
index 77875d3..0000000
+++ /dev/null
@@ -1,1051 +0,0 @@
-/* 
-   Samba Unix/Linux SMB client library 
-   Distributed SMB/CIFS Server Management Utility 
-   Copyright (C) 2001 Steve French  (sfrench@us.ibm.com)
-   Copyright (C) 2001 Jim McDonough (jmcd@us.ibm.com)
-   Copyright (C) 2001 Andrew Tridgell (tridge@samba.org)
-   Copyright (C) 2001 Andrew Bartlett (abartlet@samba.org)
-
-   Originally written by Steve and Jim. Largely rewritten by tridge in
-   November 2001.
-
-   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.h"
-
-/* The following messages were for error checking that is not properly 
-   reported at the moment.  Which should be reinstated? */
-#define ERRMSG_TARGET_WG_NOT_VALID      "\nTarget workgroup option not valid "\
-                                       "except on net rap server command, ignored"
-#define ERRMSG_INVALID_HELP_OPTION     "\nInvalid help option\n"
-
-#define ERRMSG_BOTH_SERVER_IPADDRESS    "\nTarget server and IP address both "\
-  "specified. Do not set both at the same time.  The target IP address was used\n"
-
-const char *share_type[] = {
-  "Disk",
-  "Print",
-  "Dev",
-  "IPC"
-};
-
-static int errmsg_not_implemented(void)
-{
-       d_printf("\nNot implemented\n");
-       return 0;
-}
-
-int net_rap_file_usage(int argc, const char **argv)
-{
-       return net_help_file(argc, argv);
-}
-
-/***************************************************************************
-  list info on an open file
-***************************************************************************/
-static void file_fn(const char * pPath, const char * pUser, uint16_t perms, 
-                   uint16_t locks, uint32_t id)
-{
-       d_printf("%-7.1d %-20.20s 0x%-4.2x %-6.1d %s\n",
-                id, pUser, perms, locks, pPath);
-}
-
-static void one_file_fn(const char *pPath, const char *pUser, uint16_t perms, 
-                       uint16_t locks, uint32_t id)
-{
-       d_printf("File ID          %d\n"\
-                "User name        %s\n"\
-                "Locks            0x%-4.2x\n"\
-                "Path             %s\n"\
-                "Permissions      0x%x\n",
-                id, pUser, locks, pPath, perms);
-}
-
-
-static int rap_file_close(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       if (argc == 0) {
-               d_printf("\nMissing fileid of file to close\n\n");
-               return net_rap_file_usage(argc, argv);
-       }
-
-       if (!(cli = net_make_ipc_connection(0))) 
-                return -1;
-
-       ret = smbcli_NetFileClose(cli, atoi(argv[0]));
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-static int rap_file_info(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       if (argc == 0)
-               return net_rap_file_usage(argc, argv);
-       
-       if (!(cli = net_make_ipc_connection(0))) 
-                return -1;
-
-       ret = smbcli_NetFileGetInfo(cli, atoi(argv[0]), one_file_fn);
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-static int rap_file_user(int argc, const char **argv)
-{
-       if (argc == 0)
-               return net_rap_file_usage(argc, argv);
-
-       d_printf("net rap file user not implemented yet\n");
-       return -1;
-}
-
-int net_rap_file(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"CLOSE", rap_file_close},
-               {"USER", rap_file_user},
-               {"INFO", rap_file_info},
-               {NULL, NULL}
-       };
-       
-       if (argc == 0) {
-               struct smbcli_state *cli;
-               int ret;
-               
-               if (!(cli = net_make_ipc_connection(0))) 
-                        return -1;
-
-               /* list open files */
-               d_printf(
-                "\nEnumerating open files on remote server:\n\n"\
-                "\nFileId  Opened by            Perms  Locks  Path \n"\
-                "------  ---------            -----  -----  ---- \n");
-               ret = smbcli_NetFileEnum(cli, NULL, NULL, file_fn);
-               smbcli_shutdown(cli);
-               return ret;
-       }
-       
-       return net_run_function(argc, argv, func, net_rap_file_usage);
-}
-                      
-int net_rap_share_usage(int argc, const char **argv)
-{
-       return net_help_share(argc, argv);
-}
-
-static void long_share_fn(const char *share_name, uint32_t type, 
-                         const char *comment, void *state)
-{
-       d_printf("%-12.12s %-8.8s %-50.50s\n",
-                share_name, share_type[type], comment);
-}
-
-static void share_fn(const char *share_name, uint32_t type, 
-                    const char *comment, void *state)
-{
-       d_printf("%-12.12s\n", share_name);
-}
-
-static int rap_share_delete(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       
-       if (argc == 0) {
-               d_printf("\n\nShare name not specified\n");
-               return net_rap_share_usage(argc, argv);
-       }
-
-       if (!(cli = net_make_ipc_connection(0))) 
-                return -1;
-
-       ret = smbcli_NetShareDelete(cli, argv[0]);
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-static int rap_share_add(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       
-       RAP_SHARE_INFO_2 sinfo;
-       char *p;
-       char *sharename;
-
-       if (argc == 0) {
-               d_printf("\n\nShare name not specified\n");
-               return net_rap_share_usage(argc, argv);
-       }
-                       
-       if (!(cli = net_make_ipc_connection(0))) 
-                return -1;
-
-       sharename = strdup(argv[0]);
-       p = strchr(sharename, '=');
-       *p = 0;
-       strlcpy(sinfo.share_name, sharename, sizeof(sinfo.share_name));
-       sinfo.reserved1 = '\0';
-       sinfo.share_type = 0;
-       sinfo.comment = smb_xstrdup(opt_comment);
-       sinfo.perms = 0;
-       sinfo.maximum_users = opt_maxusers;
-       sinfo.active_users = 0;
-       sinfo.path = p+1;
-       memset(sinfo.password, '\0', sizeof(sinfo.password));
-       sinfo.reserved2 = '\0';
-       
-       ret = smbcli_NetShareAdd(cli, &sinfo);
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-
-int net_rap_share(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"DELETE", rap_share_delete},
-               {"CLOSE", rap_share_delete},
-               {"ADD", rap_share_add},
-               {NULL, NULL}
-       };
-
-       if (argc == 0) {
-               struct smbcli_state *cli;
-               int ret;
-               
-               if (!(cli = net_make_ipc_connection(0))) 
-                       return -1;
-               
-               if (opt_long_list_entries) {
-                       d_printf(
-       "\nEnumerating shared resources (exports) on remote server:\n\n"\
-       "\nShare name   Type     Description\n"\
-       "----------   ----     -----------\n");
-                       ret = smbcli_RNetShareEnum(cli, long_share_fn, NULL);
-               }
-               ret = smbcli_RNetShareEnum(cli, share_fn, NULL);
-               smbcli_shutdown(cli);
-               return ret;
-       }
-
-       return net_run_function(argc, argv, func, net_rap_share_usage);
-}
-                   
-               
-int net_rap_session_usage(int argc, const char **argv)
-{
-       d_printf(
-        "\nnet rap session [misc. options] [targets]"\
-        "\n\tenumerates all active SMB/CIFS sessions on target server\n");
-       d_printf(
-        "\nnet rap session DELETE <client_name> [misc. options] [targets] \n"\
-        "\tor"\
-        "\nnet rap session CLOSE <client_name> [misc. options] [targets]"\
-        "\n\tDeletes (closes) a session from specified client to server\n");
-
-       net_common_flags_usage(argc, argv);
-       return -1;
-}
-    
-static void list_sessions_func(char *wsname, char *username, uint16_t conns,
-                       uint16_t opens, uint16_t users, uint32_t sess_time,
-                       uint32_t idle_time, uint32_t user_flags, char *clitype)
-{
-       int hrs = idle_time / 3600;
-       int min = (idle_time / 60) % 60;
-       int sec = idle_time % 60;
-       
-       d_printf("\\\\%-18.18s %-20.20s %-18.18s %5d %2.2d:%2.2d:%2.2d\n",
-                wsname, username, clitype, opens, hrs, min, sec);
-}
-
-static void display_session_func(const char *wsname, const char *username, 
-                                uint16_t conns, uint16_t opens, uint16_t users, 
-                                uint32_t sess_time, uint32_t idle_time, 
-                                uint32_t user_flags, const char *clitype)
-{
-       int ihrs = idle_time / 3600;
-       int imin = (idle_time / 60) % 60;
-       int isec = idle_time % 60;
-       int shrs = sess_time / 3600;
-       int smin = (sess_time / 60) % 60;
-       int ssec = sess_time % 60;
-       d_printf("User name       %-20.20s\n"\
-                "Computer        %-20.20s\n"\
-                "Guest logon     %-20.20s\n"\
-                "Client Type     %-40.40s\n"\
-                "Sess time       %2.2d:%2.2d:%2.2d\n"\
-                "Idle time       %2.2d:%2.2d:%2.2d\n", 
-                username, wsname, 
-                (user_flags&0x0)?"yes":"no", clitype,
-                shrs, smin, ssec, ihrs, imin, isec);
-}
-
-static void display_conns_func(uint16_t conn_id, uint16_t conn_type, uint16_t opens,
-                              uint16_t users, uint32_t conn_time,
-                              const char *username, const char *netname)
-{
-       d_printf("%-14.14s %-8.8s %5d\n",
-                netname, share_type[conn_type], opens);
-}
-
-static int rap_session_info(int argc, const char **argv)
-{
-       const char *sessname;
-       struct smbcli_state *cli;
-       int ret;
-       
-       if (!(cli = net_make_ipc_connection(0))) 
-                return -1;
-
-       if (argc == 0) 
-                return net_rap_session_usage(argc, argv);
-
-       sessname = argv[0];
-
-       ret = smbcli_NetSessionGetInfo(cli, sessname, display_session_func);
-       if (ret < 0) {
-               smbcli_shutdown(cli);
-                return ret;
-       }
-
-       d_printf("Share name     Type     # Opens\n-------------------------"\
-                "-----------------------------------------------------\n");
-       ret = smbcli_NetConnectionEnum(cli, sessname, display_conns_func);
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-static int rap_session_delete(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       
-       if (!(cli = net_make_ipc_connection(0))) 
-                return -1;
-
-       if (argc == 0) 
-                return net_rap_session_usage(argc, argv);
-
-       ret = smbcli_NetSessionDel(cli, argv[0]);
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-int net_rap_session(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"INFO", rap_session_info},
-               {"DELETE", rap_session_delete},
-               {"CLOSE", rap_session_delete},
-               {NULL, NULL}
-       };
-
-       if (argc == 0) {
-               struct smbcli_state *cli;
-               int ret;
-               
-               if (!(cli = net_make_ipc_connection(0))) 
-                       return -1;
-
-               d_printf("Computer             User name            "\
-                        "Client Type        Opens Idle time\n"\
-                        "------------------------------------------"\
-                        "------------------------------------\n");
-               ret = smbcli_NetSessionEnum(cli, list_sessions_func);
-
-               smbcli_shutdown(cli);
-               return ret;
-       }
-
-       return net_run_function(argc, argv, func, net_rap_session_usage);
-}
-       
-/****************************************************************************
-list a server name
-****************************************************************************/
-static void display_server_func(const char *name, uint32_t m,
-                               const char *comment, void * reserved)
-{
-       d_printf("\t%-16.16s     %s\n", name, comment);
-}
-
-
-int net_rap_server_usage(int argc, const char **argv)
-{
-       d_printf("net rap server [misc. options] [target]\n\t"\
-                "lists the servers in the specified domain or workgroup.\n");
-       d_printf("\n\tIf domain is not specified, it uses the current"\
-                " domain or workgroup as\n\tthe default.\n");
-
-       net_common_flags_usage(argc, argv);
-       return -1;
-}
-                   
-int net_rap_server(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       
-       if (!(cli = net_make_ipc_connection(0))) 
-                return -1;
-
-       d_printf("\nEnumerating servers in this domain or workgroup: \n\n"\
-                "\tServer name          Server description\n"\
-                "\t-------------        ----------------------------\n");
-
-       ret = smbcli_NetServerEnum(cli, cli->server_domain, SV_TYPE_ALL, 
-                               display_server_func,NULL); 
-       smbcli_shutdown(cli);
-       return ret;     
-}
-                     
-int net_rap_domain_usage(int argc, const char **argv)
-{
-       d_printf("net rap domain [misc. options] [target]\n\tlists the"\
-                " domains or workgroups visible on the current network\n");
-
-       net_common_flags_usage(argc, argv);
-       return -1;
-}
-
-                 
-int net_rap_domain(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       
-       if (!(cli = net_make_ipc_connection(0))) 
-                return -1;
-
-       d_printf("\nEnumerating domains:\n\n"\
-                "\tDomain name          Server name of Browse Master\n"\
-                "\t-------------        ----------------------------\n");
-
-       ret = smbcli_NetServerEnum(cli, cli->server_domain, SV_TYPE_DOMAIN_ENUM,
-                               display_server_func,NULL);      
-       smbcli_shutdown(cli);
-       return ret;     
-}
-                     
-int net_rap_printq_usage(int argc, const char **argv)
-{
-       d_printf(
-        "net rap printq [misc. options] [targets]\n"\
-        "\tor\n"\
-        "net rap printq list [<queue_name>] [misc. options] [targets]\n"\
-        "\tlists the specified queue and jobs on the target server.\n"\
-        "\tIf the queue name is not specified, all queues are listed.\n\n");
-       d_printf(
-        "net rap printq delete [<queue name>] [misc. options] [targets]\n"\
-        "\tdeletes the specified job number on the target server, or the\n"\
-        "\tprinter queue if no job number is specified\n");
-
-       net_common_flags_usage(argc, argv);
-        d_printf("\t-j or --jobid=<job id>\t\tjob id\n");
-
-       return -1;
-}      
-
-static void enum_queue(const char *queuename, uint16_t pri, uint16_t start, 
-                      uint16_t until, const char *sep, const char *pproc, 
-                      const char *dest, const char *qparms, 
-                      const char *qcomment, uint16_t status, uint16_t jobcount) 
-{
-       d_printf("%-17.17s Queue %5d jobs                      ",
-                queuename, jobcount);
-
-       switch (status) {
-       case 0:
-               d_printf("*Printer Active*\n");
-               break;
-       case 1:
-               d_printf("*Printer Paused*\n");
-               break;
-       case 2:
-               d_printf("*Printer error*\n");
-               break;
-       case 3:
-               d_printf("*Delete Pending*\n");
-               break;
-       default:
-               d_printf("**UNKNOWN STATUS**\n");
-       }
-}
-
-static void enum_jobs(uint16_t jobid, const char *ownername, 
-                     const char *notifyname, const char *datatype,
-                     const char *jparms, uint16_t pos, uint16_t status, 
-                     const char *jstatus, uint_t submitted, uint_t jobsize, 
-                     const char *comment)
-{
-       d_printf("     %-23.23s %5d %9d            ",
-                ownername, jobid, jobsize);
-       switch (status) {
-       case 0:
-               d_printf("Waiting\n");
-               break;
-       case 1:
-               d_printf("Held in queue\n");
-               break;
-       case 2:
-               d_printf("Spooling\n");
-               break;
-       case 3:
-               d_printf("Printing\n");
-               break;
-       default:
-               d_printf("**UNKNOWN STATUS**\n");
-       }
-}
-
-#define PRINTQ_ENUM_DISPLAY \
-    "Print queues at \\\\%s\n\n"\
-    "Name                         Job #      Size            Status\n\n"\
-    "------------------------------------------------------------------"\
-    "-------------\n"
-
-static int rap_printq_info(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       
-       if (argc == 0) 
-                return net_rap_printq_usage(argc, argv);
-
-       if (!(cli = net_make_ipc_connection(0))) 
-                return -1;
-
-       d_printf(PRINTQ_ENUM_DISPLAY, cli->desthost); /* list header */
-       ret = smbcli_NetPrintQGetInfo(cli, argv[0], enum_queue, enum_jobs);
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-static int rap_printq_delete(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       
-       if (argc == 0) 
-                return net_rap_printq_usage(argc, argv);
-
-       if (!(cli = net_make_ipc_connection(0))) 
-                return -1;
-
-       ret = smbcli_printjob_del(cli, atoi(argv[0]));
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-int net_rap_printq(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       
-       struct functable func[] = {
-               {"INFO", rap_printq_info},
-               {"DELETE", rap_printq_delete},
-               {NULL, NULL}
-       };
-
-       if (argc == 0) {
-               if (!(cli = net_make_ipc_connection(0))) 
-                       return -1;
-
-               d_printf(PRINTQ_ENUM_DISPLAY, cli->desthost); /* list header */
-               ret = smbcli_NetPrintQEnum(cli, enum_queue, enum_jobs);
-               smbcli_shutdown(cli);
-               return ret;
-       }
-
-       return net_run_function(argc, argv, func, net_rap_printq_usage);
-}
-
-       
-static int net_rap_user_usage(int argc, const char **argv)
-{
-       return net_help_user(argc, argv);
-} 
-       
-static void user_fn(const char *user_name, const char *comment,
-                   const char * home_dir, const char * logon_script,
-                   void *state)
-{
-       d_printf("%-21.21s\n", user_name);
-}
-
-static void long_user_fn(const char *user_name, const char *comment,
-                        const char * home_dir, const char * logon_script, 
-                        void *state)
-{
-       d_printf("%-21.21s %-50.50s\n",
-                user_name, comment);
-}
-
-static void group_member_fn(const char *user_name, void *state)
-{
-       d_printf("%-21.21s\n", user_name);
-}
-
-static int rap_user_delete(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       
-       if (argc == 0) {
-               d_printf("\n\nUser name not specified\n");
-                return net_rap_user_usage(argc, argv);
-       }
-
-       if (!(cli = net_make_ipc_connection(0))) 
-                return -1;
-
-       ret = smbcli_NetUserDelete(cli, argv[0]);
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-static int rap_user_add(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       RAP_USER_INFO_1 userinfo;
-
-       if (argc == 0) {
-               d_printf("\n\nUser name not specified\n");
-                return net_rap_user_usage(argc, argv);
-       }
-
-       if (!(cli = net_make_ipc_connection(0)))
-                return -1;
-                       
-       safe_strcpy(userinfo.user_name, argv[0], sizeof(userinfo.user_name));
-       if (opt_flags == -1) 
-                opt_flags = 0x21; 
-                       
-       userinfo.userflags = opt_flags;
-       userinfo.reserved1 = '\0';
-       userinfo.comment = smb_xstrdup(opt_comment);
-       userinfo.priv = 1; 
-       userinfo.home_dir = NULL;
-       userinfo.logon_script = NULL;
-
-       ret = smbcli_NetUserAdd(cli, &userinfo);
-
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-static int rap_user_info(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       if (argc == 0) {
-               d_printf("\n\nUser name not specified\n");
-                return net_rap_user_usage(argc, argv);
-       }
-
-       if (!(cli = net_make_ipc_connection(0)))
-                return -1;
-
-       ret = smbcli_NetUserGetGroups(cli, argv[0], group_member_fn, NULL);
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-int net_rap_user(int argc, const char **argv)
-{
-       int ret = -1;
-       struct functable func[] = {
-               {"ADD", rap_user_add},
-               {"INFO", rap_user_info},
-               {"DELETE", rap_user_delete},
-               {NULL, NULL}
-       };
-
-       if (argc == 0) {
-               struct smbcli_state *cli;
-               if (!(cli = net_make_ipc_connection(0)))
-                        goto done;
-               if (opt_long_list_entries) {
-                       d_printf("\nUser name             Comment"\
-                                "\n-----------------------------\n");
-                       ret = smbcli_RNetUserEnum(cli, long_user_fn, NULL);
-                       smbcli_shutdown(cli);
-                       goto done;
-               }
-               ret = smbcli_RNetUserEnum(cli, user_fn, NULL); 
-               smbcli_shutdown(cli);
-               goto done;
-       }
-
-       ret = net_run_function(argc, argv, func, net_rap_user_usage);
- done:
-       if (ret != 0) {
-               DEBUG(1, ("Net user returned: %d\n", ret));
-       }
-       return ret;
-}
-
-
-int net_rap_group_usage(int argc, const char **argv)
-{
-       return net_help_group(argc, argv);
-}
-
-static void long_group_fn(const char *group_name, const char *comment,
-                         void *state)
-{
-       d_printf("%-21.21s %-50.50s\n", group_name, comment);
-}
-
-static void group_fn(const char *group_name, const char *comment, void *state)
-{
-       d_printf("%-21.21s\n", group_name);
-}
-
-static int rap_group_delete(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       if (argc == 0) {
-               d_printf("\n\nGroup name not specified\n");
-                return net_rap_group_usage(argc, argv);
-       }
-
-       if (!(cli = net_make_ipc_connection(0)))
-                return -1;
-
-       ret = smbcli_NetGroupDelete(cli, argv[0]);
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-static int rap_group_add(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       RAP_GROUP_INFO_1 grinfo;
-
-       if (argc == 0) {
-               d_printf("\n\nGroup name not specified\n");
-                return net_rap_group_usage(argc, argv);
-       }
-
-       if (!(cli = net_make_ipc_connection(0)))
-                return -1;
-                       
-       /* BB check for length 21 or smaller explicitly ? BB */
-       safe_strcpy(grinfo.group_name, argv[0], sizeof(grinfo.group_name));
-       grinfo.reserved1 = '\0';
-       grinfo.comment = smb_xstrdup(opt_comment);
-       
-       ret = smbcli_NetGroupAdd(cli, &grinfo);
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-int net_rap_group(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"ADD", rap_group_add},
-               {"DELETE", rap_group_delete},
-               {NULL, NULL}
-       };
-
-       if (argc == 0) {
-               struct smbcli_state *cli;
-               int ret;
-               if (!(cli = net_make_ipc_connection(0)))
-                        return -1;
-               if (opt_long_list_entries) {
-                       d_printf("Group name            Comment\n");
-                       d_printf("-----------------------------\n");
-                       ret = smbcli_RNetGroupEnum(cli, long_group_fn, NULL);
-                       smbcli_shutdown(cli);
-                       return ret;
-               }
-               ret = smbcli_RNetGroupEnum(cli, group_fn, NULL); 
-               smbcli_shutdown(cli);
-               return ret;
-       }
-
-       return net_run_function(argc, argv, func, net_rap_group_usage);
-}
-
-int net_rap_groupmember_usage(int argc, const char **argv)
-{
-       d_printf(
-        "net rap groupmember LIST <group> [misc. options] [targets]"\
-        "\n\t Enumerate users in a group\n"\
-        "\nnet rap groupmember DELETE <group> <user> [misc. options] "\
-        "[targets]\n\t Delete sepcified user from specified group\n"\
-        "\nnet rap groupmember ADD <group> <user> [misc. options] [targets]"\
-        "\n\t Add specified user to specified group\n");
-
-       net_common_flags_usage(argc, argv);
-       return -1;
-}
-
-
-static int rap_groupmember_add(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       if (argc != 2) {
-               d_printf("\n\nGroup or user name not specified\n");
-                return net_rap_groupmember_usage(argc, argv);
-       }
-
-       if (!(cli = net_make_ipc_connection(0)))
-                return -1;
-
-       ret = smbcli_NetGroupAddUser(cli, argv[0], argv[1]);
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-static int rap_groupmember_delete(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       if (argc != 2) {
-               d_printf("\n\nGroup or user name not specified\n");
-                return net_rap_groupmember_usage(argc, argv);
-       }
-       
-       if (!(cli = net_make_ipc_connection(0)))
-                return -1;
-
-       ret = smbcli_NetGroupDelUser(cli, argv[0], argv[1]);
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-static int rap_groupmember_list(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       if (argc == 0) {
-               d_printf("\n\nGroup name not specified\n");
-                return net_rap_groupmember_usage(argc, argv);
-       }
-
-       if (!(cli = net_make_ipc_connection(0)))
-                return -1;
-
-       ret = smbcli_NetGroupGetUsers(cli, argv[0], group_member_fn, NULL ); 
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-int net_rap_groupmember(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"ADD", rap_groupmember_add},
-               {"LIST", rap_groupmember_list},
-               {"DELETE", rap_groupmember_delete},
-               {NULL, NULL}
-       };
-       
-       return net_run_function(argc, argv, func, net_rap_groupmember_usage);
-}
-
-int net_rap_validate_usage(int argc, const char **argv)
-{
-       d_printf("net rap validate <username> [password]\n"\
-                "\tValidate user and password to check whether they"\
-                " can access target server or domain\n");
-
-       net_common_flags_usage(argc, argv);
-       return -1;
-}
-
-int net_rap_validate(int argc, const char **argv)
-{
-       return errmsg_not_implemented();
-}
-
-int net_rap_service_usage(int argc, const char **argv)
-{
-       d_printf("net rap service [misc. options] [targets] \n"\
-                "\tlists all running service daemons on target server\n");
-       d_printf("\nnet rap service START <name> [service startup arguments]"\
-                " [misc. options] [targets]"\
-                "\n\tStart named service on remote server\n");
-       d_printf("\nnet rap service STOP <name> [misc. options] [targets]\n"\
-                "\n\tStop named service on remote server\n");
-    
-       net_common_flags_usage(argc, argv);
-       return -1;
-}
-
-static int rap_service_start(int argc, const char **argv)
-{
-       return errmsg_not_implemented();
-}
-
-static int rap_service_stop(int argc, const char **argv)
-{
-       return errmsg_not_implemented();
-}
-
-int net_rap_service(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"START", rap_service_start},
-               {"STOP", rap_service_stop},
-               {NULL, NULL}
-       };
-
-       if (argc == 0) {
-               struct smbcli_state *cli;
-               int ret;
-               if (!(cli = net_make_ipc_connection(0))) 
-                       return -1;
-
-               if (opt_long_list_entries) {
-                       d_printf("Service name          Comment\n");
-                       d_printf("-----------------------------\n");
-                       ret = smbcli_RNetServiceEnum(cli, long_group_fn, NULL);
-               }
-               ret = smbcli_RNetServiceEnum(cli, group_fn, NULL); 
-               smbcli_shutdown(cli);
-               return ret;
-       }
-
-       return net_run_function(argc, argv, func, net_rap_service_usage);
-}
-
-int net_rap_password_usage(int argc, const char **argv)
-{
-       d_printf(
-        "net rap password <user> <oldpwo> <newpw> [misc. options] [target]\n"\
-        "\tchanges the password for the specified user at target\n"); 
-       
-       return -1;
-}
-
-
-int net_rap_password(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       int ret;
-       
-       if (argc < 3) 
-                return net_rap_password_usage(argc, argv);
-
-       if (!(cli = net_make_ipc_connection(0))) 
-                return -1;
-
-       /* BB Add check for password lengths? */
-       ret = smbcli_oem_change_password(cli, argv[0], argv[2], argv[1]);
-       smbcli_shutdown(cli);
-       return ret;
-}
-
-int net_rap_admin_usage(int argc, const char **argv)
-{
-       d_printf(
-   "net rap admin <remote command> [cmd args [env]] [misc. options] [targets]"\
-   "\n\texecutes a remote command on an os/2 target server\n"); 
-       
-       return -1;
-}
-
-
-int net_rap_admin(int argc, const char **argv)
-{
-       return errmsg_not_implemented();
-}
-
-/* The help subsystem for the RAP subcommand */
-
-int net_rap_usage(int argc, const char **argv)
-{
-       d_printf("  net rap domain \tto list domains \n"\
-                "  net rap file \t\tto list open files on a server \n"\
-                "  net rap group \tto list user groups  \n"\
-                "  net rap groupmember \tto list users in a group \n"\
-                "  net rap password \tto change the password of a user\n"\
-                "  net rap printq \tto list the print queues on a server\n"\
-                "  net rap server \tto list servers in a domain\n"\
-                "  net rap session \tto list clients with open sessions to a server\n"\
-                "  net rap share \tto list shares exported by a server\n"\
-                "  net rap user \t\tto list users\n"\
-                "  net rap validate \tto check whether a user and the corresponding password are valid\n"\
-                "  net rap help\n"\
-                "\nType \"net help <option>\" to get more information on that option\n\n");
-
-       net_common_flags_usage(argc, argv);
-       return -1;
-}
-
-/*
-  handle "net rap help *" subcommands
-*/
-int net_rap_help(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"FILE", net_rap_file_usage},
-               {"SHARE", net_rap_share_usage},
-               {"SESSION", net_rap_session_usage},
-               {"SERVER", net_rap_server_usage},
-               {"DOMAIN", net_rap_domain_usage},
-               {"PRINTQ", net_rap_printq_usage},
-               {"USER", net_rap_user_usage},
-               {"GROUP", net_rap_group_usage},
-               {"VALIDATE", net_rap_validate_usage},
-               {"GROUPMEMBER", net_rap_groupmember_usage},
-               {"ADMIN", net_rap_admin_usage},
-               {"SERVICE", net_rap_service_usage},
-               {"PASSWORD", net_rap_password_usage},
-               {NULL, NULL}};
-
-       return net_run_function(argc, argv, func, net_rap_usage);
-}
-
-/* Entry-point for all the RAP functions. */
-
-int net_rap(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"FILE", net_rap_file},
-               {"SHARE", net_rap_share},
-               {"SESSION", net_rap_session},
-               {"SERVER", net_rap_server},
-               {"DOMAIN", net_rap_domain},
-               {"PRINTQ", net_rap_printq},
-               {"USER", net_rap_user},
-               {"GROUP", net_rap_group},
-               {"VALIDATE", net_rap_validate},
-               {"GROUPMEMBER", net_rap_groupmember},
-               {"ADMIN", net_rap_admin},
-               {"SERVICE", net_rap_service},   
-               {"PASSWORD", net_rap_password},
-               {"HELP", net_rap_help},
-               {NULL, NULL}
-       };
-       
-       return net_run_function(argc, argv, func, net_rap_usage);
-}
-
diff --git a/source4/utils/net_rpc.c b/source4/utils/net_rpc.c
deleted file mode 100644 (file)
index 2d1120e..0000000
+++ /dev/null
@@ -1,2262 +0,0 @@
-/* 
-   Samba Unix/Linux SMB client library 
-   Distributed SMB/CIFS Server Management Utility 
-   Copyright (C) 2001 Andrew Bartlett (abartlet@samba.org)
-   Copyright (C) 2002 Jim McDonough (jmcd@us.ibm.com)
-
-   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.h"
-
-/**
- * @file net_rpc.c
- *
- * @brief RPC based subcommands for the 'net' utility.
- *
- * This file should contain much of the functionality that used to
- * be found in rpcclient, execpt that the commands should change 
- * less often, and the fucntionality should be sane (the user is not 
- * expected to know a rid/sid before they conduct an operation etc.)
- *
- * @todo Perhaps eventually these should be split out into a number
- * of files, as this could get quite big.
- **/
-
-
-/* A function of this type is passed to the 'run_rpc_command' wrapper */
-typedef NTSTATUS (*rpc_command_fn)(const DOM_SID *, struct smbcli_state *, TALLOC_CTX *, int, const char **);
-
-/**
- * Many of the RPC functions need the domain sid.  This function gets
- *  it at the start of every run 
- *
- * @param cli A smbcli_state already connected to the remote machine
- *
- * @return The Domain SID of the remote machine.
- **/
-
-static DOM_SID *net_get_remote_domain_sid(struct smbcli_state *cli)
-{
-       DOM_SID *domain_sid;
-       POLICY_HND pol;
-       NTSTATUS result = NT_STATUS_OK;
-       uint32_t info_class = 5;
-       fstring domain_name;
-       TALLOC_CTX *mem_ctx;
-       
-       if (!(domain_sid = malloc(sizeof(DOM_SID)))){
-               DEBUG(0,("net_get_remote_domain_sid: malloc returned NULL!\n"));
-               goto error;
-       }
-           
-       if (!(mem_ctx=talloc_init("net_get_remote_domain_sid")))
-       {
-               DEBUG(0,("net_get_remote_domain_sid: talloc_init returned NULL!\n"));
-               goto error;
-       }
-
-
-       if (!smbcli_nt_session_open (cli, PI_LSARPC)) {
-               fprintf(stderr, "could not initialise lsa pipe\n");
-               goto error;
-       }
-       
-       result = smbcli_lsa_open_policy(cli, mem_ctx, True, 
-                                    SEC_RIGHTS_MAXIMUM_ALLOWED,
-                                    &pol);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto error;
-       }
-
-       result = smbcli_lsa_query_info_policy(cli, mem_ctx, &pol, info_class, 
-                                          domain_name, domain_sid);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto error;
-       }
-
-       smbcli_lsa_close(cli, mem_ctx, &pol);
-       smbcli_nt_session_close(cli);
-       talloc_destroy(mem_ctx);
-
-       return domain_sid;
-
- error:
-       fprintf(stderr, "could not obtain sid for domain %s\n", cli->domain);
-
-       if (!NT_STATUS_IS_OK(result)) {
-               fprintf(stderr, "error: %s\n", nt_errstr(result));
-       }
-
-       exit(1);
-}
-
-/**
- * Run a single RPC command, from start to finish.
- *
- * @param pipe_name the pipe to connect to (usually a PIPE_ constant)
- * @param conn_flag a NET_FLAG_ combination.  Passed to 
- *                   net_make_ipc_connection.
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped
- * @return A shell status integer (0 for success)
- */
-
-static int run_rpc_command(struct smbcli_state *smbcli_arg, const int pipe_idx, int conn_flags,
-                           rpc_command_fn fn,
-                           int argc, const char **argv) 
-{
-       struct smbcli_state *cli = NULL;
-       TALLOC_CTX *mem_ctx;
-       NTSTATUS nt_status;
-       DOM_SID *domain_sid;
-
-       /* make use of smbcli_state handed over as an argument, if possible */
-       if (!smbcli_arg)
-               cli = net_make_ipc_connection(conn_flags);
-       else
-               cli = smbcli_arg;
-
-       if (!cli) {
-               return -1;
-       }
-
-       domain_sid = net_get_remote_domain_sid(cli);
-
-       /* Create mem_ctx */
-       
-       if (!(mem_ctx = talloc_init("run_rpc_command"))) {
-               DEBUG(0, ("talloc_init() failed\n"));
-               smbcli_shutdown(cli);
-               return -1;
-       }
-       
-       if (!smbcli_nt_session_open(cli, pipe_idx)) {
-               DEBUG(0, ("Could not initialise pipe\n"));
-       }
-       
-       nt_status = fn(domain_sid, cli, mem_ctx, argc, argv);
-       
-       if (!NT_STATUS_IS_OK(nt_status)) {
-               DEBUG(1, ("rpc command function failed! (%s)\n", nt_errstr(nt_status)));
-       } else {
-               DEBUG(5, ("rpc command function succedded\n"));
-       }
-               
-           
-       if (cli->nt_pipe_fnum)
-               smbcli_nt_session_close(cli);
-       
-       /* close the connection only if it was opened here */
-       if (!smbcli_arg)
-               smbcli_shutdown(cli);
-       
-       talloc_destroy(mem_ctx);
-
-       return (!NT_STATUS_IS_OK(nt_status));
-}
-
-
-/****************************************************************************/
-
-
-/** 
- * Force a change of the trust acccount password.
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid aquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on compleation of the function.
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-
-static NTSTATUS rpc_changetrustpw_internals(const DOM_SID *domain_sid, struct smbcli_state *cli, TALLOC_CTX *mem_ctx, 
-                                      int argc, const char **argv) {
-       
-       return trust_pw_find_change_and_store_it(cli, mem_ctx, opt_target_workgroup);
-}
-
-/** 
- * Force a change of the trust acccount password.
- *
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return A shell status integer (0 for success)
- **/
-
-static int rpc_changetrustpw(int argc, const char **argv) 
-{
-       return run_rpc_command(NULL, PI_NETLOGON, NET_FLAGS_ANONYMOUS | NET_FLAGS_PDC, rpc_changetrustpw_internals,
-                              argc, argv);
-}
-
-
-/****************************************************************************/
-
-
-/** 
- * Join a domain, the old way.
- *
- * This uses 'machinename' as the inital password, and changes it. 
- *
- * The password should be created with 'server manager' or eqiv first.
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid aquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on compleation of the function.
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-
-static NTSTATUS rpc_join_oldstyle_internals(const DOM_SID *domain_sid, struct smbcli_state *cli, TALLOC_CTX *mem_ctx, 
-                                      int argc, const char **argv) {
-       
-       fstring trust_passwd;
-       uint8_t orig_trust_passwd_hash[16];
-       NTSTATUS result;
-
-       fstrcpy(trust_passwd, lp_netbios_name());
-       strlower(trust_passwd);
-
-       /*
-        * Machine names can be 15 characters, but the max length on
-        * a password is 14.  --jerry
-        */
-
-       trust_passwd[14] = '\0';
-
-       E_md4hash(trust_passwd, orig_trust_passwd_hash);
-
-       result = trust_pw_change_and_store_it(cli, mem_ctx, orig_trust_passwd_hash);
-
-       if (NT_STATUS_IS_OK(result))
-               printf("Joined domain %s.\n",lp_workgroup());
-
-       return result;
-}
-
-/** 
- * Join a domain, the old way.
- *
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return A shell status integer (0 for success)
- **/
-
-static int net_rpc_join_oldstyle(int argc, const char **argv) 
-{
-       return run_rpc_command(NULL, PI_NETLOGON, NET_FLAGS_ANONYMOUS | NET_FLAGS_PDC, rpc_join_oldstyle_internals,
-                              argc, argv);
-}
-
-/** 
- * Basic usage function for 'net rpc join'
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped
- **/
-
-static int rpc_join_usage(int argc, const char **argv) 
-{      
-       d_printf("net rpc join -U <username>[%%password] [options]\n"\
-                "\t to join a domain with admin username & password\n"\
-                "\t\t password will be prompted if none is specified\n");
-       d_printf("net rpc join [options except -U]\n"\
-                "\t to join a domain created in server manager\n\n\n");
-
-       net_common_flags_usage(argc, argv);
-       return -1;
-}
-
-/** 
- * 'net rpc join' entrypoint.
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * Main 'net_rpc_join()' (where the admain username/password is used) is 
- * in net_rpc_join.c
- * Assume if a -U is specified, it's the new style, otherwise it's the
- * old style.  If 'oldstyle' is specfied explicity, do it and don't prompt.
- **/
-
-int net_rpc_join(int argc, const char **argv) 
-{
-       struct functable func[] = {
-               {"oldstyle", net_rpc_join_oldstyle},
-               {NULL, NULL}
-       };
-
-       if (argc == 0) {
-               if ((net_rpc_join_oldstyle(argc, argv) == 0))
-                       return 0;
-               
-               return net_rpc_join_newstyle(argc, argv);
-       }
-
-       return net_run_function(argc, argv, func, rpc_join_usage);
-}
-
-
-
-/** 
- * display info about a rpc domain
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid acquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on completion of the function.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-
-static NTSTATUS 
-rpc_info_internals(const DOM_SID *domain_sid, struct smbcli_state *cli,
-                  TALLOC_CTX *mem_ctx, int argc, const char **argv)
-{
-       POLICY_HND connect_pol, domain_pol;
-       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-       SAM_UNK_CTR ctr;
-       fstring sid_str;
-
-       sid_to_string(sid_str, domain_sid);
-
-       /* Get sam policy handle */     
-       result = smbcli_samr_connect(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
-                                 &connect_pol);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-       
-       /* Get domain policy handle */
-       result = smbcli_samr_open_domain(cli, mem_ctx, &connect_pol,
-                                     MAXIMUM_ALLOWED_ACCESS,
-                                     domain_sid, &domain_pol);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-
-       ZERO_STRUCT(ctr);
-       result = smbcli_samr_query_dom_info(cli, mem_ctx, &domain_pol,
-                                        2, &ctr);
-       if (NT_STATUS_IS_OK(result)) {
-               TALLOC_CTX *ctx = talloc_init("rpc_info_internals");
-               d_printf("Domain Name: %s\n", unistr2_tdup(ctx, &ctr.info.inf2.uni_domain));
-               d_printf("Domain SID: %s\n", sid_str);
-               d_printf("Sequence number: %u\n", ctr.info.inf2.seq_num);
-               d_printf("Num users: %u\n", ctr.info.inf2.num_domain_usrs);
-               d_printf("Num domain groups: %u\n", ctr.info.inf2.num_domain_grps);
-               d_printf("Num local groups: %u\n", ctr.info.inf2.num_local_grps);
-               talloc_destroy(ctx);
-       }
-
- done:
-       return result;
-}
-
-
-/** 
- * 'net rpc info' entrypoint.
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped
- **/
-int net_rpc_info(int argc, const char **argv) 
-{
-       return run_rpc_command(NULL, PI_SAMR, NET_FLAGS_ANONYMOUS | NET_FLAGS_PDC, 
-                              rpc_info_internals,
-                              argc, argv);
-}
-
-
-/** 
- * Fetch domain SID into the local secrets.tdb
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid acquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on completion of the function.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-
-static NTSTATUS 
-rpc_getsid_internals(const DOM_SID *domain_sid, struct smbcli_state *cli,
-                  TALLOC_CTX *mem_ctx, int argc, const char **argv)
-{
-       fstring sid_str;
-
-       sid_to_string(sid_str, domain_sid);
-       d_printf("Storing SID %s for Domain %s in secrets.tdb\n",
-                sid_str, lp_workgroup());
-
-       if (!secrets_store_domain_sid(lp_netbios_name(), domain_sid)) {
-               DEBUG(0,("Can't store domain SID\n"));
-               return NT_STATUS_UNSUCCESSFUL;
-       }
-
-       return NT_STATUS_OK;
-}
-
-
-/** 
- * 'net rpc getsid' entrypoint.
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped
- **/
-int net_rpc_getsid(int argc, const char **argv) 
-{
-       return run_rpc_command(NULL, PI_SAMR, NET_FLAGS_ANONYMOUS | NET_FLAGS_PDC, 
-                              rpc_getsid_internals,
-                              argc, argv);
-}
-
-
-/****************************************************************************/
-
-/**
- * Basic usage function for 'net rpc user'
- * @param argc Standard main() style argc.
- * @param argv Standard main() style argv.  Initial components are already
- *             stripped.
- **/
-
-static int rpc_user_usage(int argc, const char **argv)
-{
-       return net_help_user(argc, argv);
-}
-
-/** 
- * Add a new user to a remote RPC server
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid acquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on completion of the function.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-
-static NTSTATUS rpc_user_add_internals(const DOM_SID *domain_sid, struct smbcli_state *cli, TALLOC_CTX *mem_ctx, 
-                                      int argc, const char **argv) {
-       
-       POLICY_HND connect_pol, domain_pol, user_pol;
-       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-       const char *acct_name;
-       uint16_t acb_info;
-       uint32_t unknown, user_rid;
-
-       if (argc != 1) {
-               d_printf("User must be specified\n");
-               rpc_user_usage(argc, argv);
-               return NT_STATUS_OK;
-       }
-
-       acct_name = argv[0];
-
-       /* Get sam policy handle */
-       
-       result = smbcli_samr_connect(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
-                                 &connect_pol);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-       
-       /* Get domain policy handle */
-       
-       result = smbcli_samr_open_domain(cli, mem_ctx, &connect_pol,
-                                     MAXIMUM_ALLOWED_ACCESS,
-                                     domain_sid, &domain_pol);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-
-       /* Create domain user */
-
-       acb_info = ACB_NORMAL;
-       unknown = 0xe005000b; /* No idea what this is - a permission mask? */
-
-       result = smbcli_samr_create_dom_user(cli, mem_ctx, &domain_pol,
-                                         acct_name, acb_info, unknown,
-                                         &user_pol, &user_rid);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-
- done:
-       if (!NT_STATUS_IS_OK(result)) {
-               d_printf("Failed to add user %s - %s\n", acct_name, 
-                        nt_errstr(result));
-       } else {
-               d_printf("Added user %s\n", acct_name);
-       }
-       return result;
-}
-
-/** 
- * Add a new user to a remote RPC server
- *
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return A shell status integer (0 for success)
- **/
-
-static int rpc_user_add(int argc, const char **argv) 
-{
-       return run_rpc_command(NULL, PI_SAMR, 0, rpc_user_add_internals,
-                              argc, argv);
-}
-
-/** 
- * Delete a user from a remote RPC server
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid acquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on completion of the function.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-
-static NTSTATUS rpc_user_del_internals(const DOM_SID *domain_sid, 
-                                      struct smbcli_state *cli, 
-                                      TALLOC_CTX *mem_ctx, 
-                                      int argc, const char **argv)
-{
-       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-       POLICY_HND connect_pol, domain_pol, user_pol;
-
-       if (argc < 1) {
-               d_printf("User must be specified\n");
-               rpc_user_usage(argc, argv);
-               return NT_STATUS_OK;
-       }
-       /* Get sam policy and domain handles */
-
-       result = smbcli_samr_connect(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
-                                 &connect_pol);
-
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-
-       result = smbcli_samr_open_domain(cli, mem_ctx, &connect_pol,
-                                     MAXIMUM_ALLOWED_ACCESS,
-                                     domain_sid, &domain_pol);
-
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-
-       /* Get handle on user */
-
-       {
-               uint32_t *user_rids, num_rids, *name_types;
-               uint32_t flags = 0x000003e8; /* Unknown */
-
-               result = smbcli_samr_lookup_names(cli, mem_ctx, &domain_pol,
-                                              flags, 1, &argv[0],
-                                              &num_rids, &user_rids,
-                                              &name_types);
-
-               if (!NT_STATUS_IS_OK(result)) {
-                       goto done;
-               }
-
-               result = smbcli_samr_open_user(cli, mem_ctx, &domain_pol,
-                                           MAXIMUM_ALLOWED_ACCESS,
-                                           user_rids[0], &user_pol);
-
-               if (!NT_STATUS_IS_OK(result)) {
-                       goto done;
-               }
-       }
-
-       /* Delete user */
-
-       result = smbcli_samr_delete_dom_user(cli, mem_ctx, &user_pol);
-
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-
-       /* Display results */
-
- done:
-       return result;
-
-}      
-
-/** 
- * Delete a user from a remote RPC server
- *
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return A shell status integer (0 for success)
- **/
-
-static int rpc_user_delete(int argc, const char **argv) 
-{
-       return run_rpc_command(NULL, PI_SAMR, 0, rpc_user_del_internals,
-                              argc, argv);
-}
-
-/** 
- * List user's groups on a remote RPC server
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid acquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on completion of the function.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-
-static NTSTATUS 
-rpc_user_info_internals(const DOM_SID *domain_sid, struct smbcli_state *cli,
-                       TALLOC_CTX *mem_ctx, int argc, const char **argv)
-{
-       POLICY_HND connect_pol, domain_pol, user_pol;
-       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-       uint32_t *rids, num_rids, *name_types, num_names;
-       uint32_t flags = 0x000003e8; /* Unknown */
-       int i;
-       char **names;
-       DOM_GID *user_gids;
-
-       if (argc < 1) {
-               d_printf("User must be specified\n");
-               rpc_user_usage(argc, argv);
-               return NT_STATUS_OK;
-       }
-       /* Get sam policy handle */
-       
-       result = smbcli_samr_connect(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
-                                 &connect_pol);
-       if (!NT_STATUS_IS_OK(result)) goto done;
-       
-       /* Get domain policy handle */
-       
-       result = smbcli_samr_open_domain(cli, mem_ctx, &connect_pol,
-                                     MAXIMUM_ALLOWED_ACCESS,
-                                     domain_sid, &domain_pol);
-       if (!NT_STATUS_IS_OK(result)) goto done;
-
-       /* Get handle on user */
-
-       result = smbcli_samr_lookup_names(cli, mem_ctx, &domain_pol,
-                                      flags, 1, &argv[0],
-                                      &num_rids, &rids, &name_types);
-
-       if (!NT_STATUS_IS_OK(result)) goto done;
-
-       result = smbcli_samr_open_user(cli, mem_ctx, &domain_pol,
-                                   MAXIMUM_ALLOWED_ACCESS,
-                                   rids[0], &user_pol);
-       if (!NT_STATUS_IS_OK(result)) goto done;
-
-       result = smbcli_samr_query_usergroups(cli, mem_ctx, &user_pol,
-                                          &num_rids, &user_gids);
-
-       /* Look up rids */
-
-       rids = (uint32_t *)talloc(mem_ctx, sizeof(uint32_t) * num_rids);
-
-       for (i = 0; i < num_rids; i++)
-                rids[i] = user_gids[i].g_rid;
-
-       result = smbcli_samr_lookup_rids(cli, mem_ctx, &domain_pol,
-                                     flags, num_rids, rids,
-                                     &num_names, &names, &name_types);
-
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-
-       /* Display results */
-
-       for (i = 0; i < num_names; i++)
-               printf("%s\n", names[i]);
-
- done:
-       return result;
-}
-
-/** 
- * List a user's groups from a remote RPC server
- *
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return A shell status integer (0 for success)
- **/
-
-static int rpc_user_info(int argc, const char **argv) 
-{
-       return run_rpc_command(NULL, PI_SAMR, 0, rpc_user_info_internals,
-                              argc, argv);
-}
-
-/** 
- * List users on a remote RPC server
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid acquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on completion of the function.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-
-static NTSTATUS 
-rpc_user_list_internals(const DOM_SID *domain_sid, struct smbcli_state *cli,
-                       TALLOC_CTX *mem_ctx, int argc, const char **argv)
-{
-       POLICY_HND connect_pol, domain_pol;
-       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-       uint32_t start_idx=0, num_entries, i, loop_count = 0;
-       SAM_DISPINFO_CTR ctr;
-       SAM_DISPINFO_1 info1;
-
-       /* Get sam policy handle */
-       
-       result = smbcli_samr_connect(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
-                                 &connect_pol);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-       
-       /* Get domain policy handle */
-       
-       result = smbcli_samr_open_domain(cli, mem_ctx, &connect_pol,
-                                     MAXIMUM_ALLOWED_ACCESS,
-                                     domain_sid, &domain_pol);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-
-       /* Query domain users */
-       ZERO_STRUCT(ctr);
-       ZERO_STRUCT(info1);
-       ctr.sam.info1 = &info1;
-       if (opt_long_list_entries)
-               d_printf("\nUser name             Comment"\
-                        "\n-----------------------------\n");
-       do {
-               fstring user, desc;
-               uint32_t max_entries, max_size;
-
-               get_query_dispinfo_params(
-                       loop_count, &max_entries, &max_size);
-
-               result = smbcli_samr_query_dispinfo(cli, mem_ctx, &domain_pol,
-                                                &start_idx, 1, &num_entries,
-                                                max_entries, max_size, &ctr);
-               loop_count++;
-
-               for (i = 0; i < num_entries; i++) {
-                       unistr2_to_ascii(user, &(&ctr.sam.info1->str[i])->uni_acct_name, sizeof(user)-1);
-                       if (opt_long_list_entries) 
-                               unistr2_to_ascii(desc, &(&ctr.sam.info1->str[i])->uni_acct_desc, sizeof(desc)-1);
-                       
-                       if (opt_long_list_entries)
-                               printf("%-21.21s %-50.50s\n", user, desc);
-                       else
-                               printf("%s\n", user);
-               }
-       } while (!NT_STATUS_IS_OK(result));
-
- done:
-       return result;
-}
-
-/** 
- * 'net rpc user' entrypoint.
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped
- **/
-
-int net_rpc_user(int argc, const char **argv) 
-{
-       struct functable func[] = {
-               {"add", rpc_user_add},
-               {"info", rpc_user_info},
-               {"delete", rpc_user_delete},
-               {NULL, NULL}
-       };
-       
-       if (argc == 0) {
-               if (opt_long_list_entries) {
-               } else {
-               }
-                       return run_rpc_command(NULL,PI_SAMR, 0, 
-                                              rpc_user_list_internals,
-                                              argc, argv);
-       }
-
-       return net_run_function(argc, argv, func, rpc_user_usage);
-}
-
-
-/****************************************************************************/
-
-/**
- * Basic usage function for 'net rpc group'
- * @param argc Standard main() style argc.
- * @param argv Standard main() style argv.  Initial components are already
- *             stripped.
- **/
-
-static int rpc_group_usage(int argc, const char **argv)
-{
-       return net_help_group(argc, argv);
-}
-
-/** 
- * List groups on a remote RPC server
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid acquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on completion of the function.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-
-static NTSTATUS 
-rpc_group_list_internals(const DOM_SID *domain_sid, struct smbcli_state *cli,
-                        TALLOC_CTX *mem_ctx, int argc, const char **argv)
-{
-       POLICY_HND connect_pol, domain_pol;
-       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-       uint32_t start_idx=0, max_entries=250, num_entries, i;
-       struct acct_info *groups;
-       DOM_SID global_sid_Builtin;
-
-       string_to_sid(&global_sid_Builtin, "S-1-5-32");
-
-       /* Get sam policy handle */
-       
-       result = smbcli_samr_connect(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS, 
-                                 &connect_pol);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-       
-       /* Get domain policy handle */
-       
-       result = smbcli_samr_open_domain(cli, mem_ctx, &connect_pol,
-                                     MAXIMUM_ALLOWED_ACCESS,
-                                     domain_sid, &domain_pol);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-
-       /* Query domain groups */
-       if (opt_long_list_entries)
-               d_printf("\nGroup name            Comment"\
-                        "\n-----------------------------\n");
-       do {
-               result = smbcli_samr_enum_dom_groups(cli, mem_ctx, &domain_pol,
-                                                 &start_idx, max_entries,
-                                                 &groups, &num_entries);
-                                                
-               for (i = 0; i < num_entries; i++) {
-                       if (opt_long_list_entries)
-                               printf("%-21.21s %-50.50s\n", 
-                                      groups[i].acct_name,
-                                      groups[i].acct_desc);
-                       else
-                               printf("%-21.21s\n", groups[i].acct_name);
-               }
-       } while (!NT_STATUS_IS_OK(result));
-       /* query domain aliases */
-       do {
-               result = smbcli_samr_enum_als_groups(cli, mem_ctx, &domain_pol,
-                                                 &start_idx, max_entries,
-                                                 &groups, &num_entries);
-                                                
-               for (i = 0; i < num_entries; i++) {
-                       if (opt_long_list_entries)
-                               printf("%-21.21s %-50.50s\n", 
-                                      groups[i].acct_name,
-                                      groups[i].acct_desc);
-                       else
-                               printf("%-21.21s\n", groups[i].acct_name);
-               }
-       } while (!NT_STATUS_IS_OK(result));
-       smbcli_samr_close(cli, mem_ctx, &domain_pol);
-       /* Get builtin policy handle */
-       
-       result = smbcli_samr_open_domain(cli, mem_ctx, &connect_pol,
-                                     MAXIMUM_ALLOWED_ACCESS,
-                                     &global_sid_Builtin, &domain_pol);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-       /* query builtin aliases */
-       do {
-               result = smbcli_samr_enum_als_groups(cli, mem_ctx, &domain_pol,
-                                                 &start_idx, max_entries,
-                                                 &groups, &num_entries);
-                                                
-               for (i = 0; i < num_entries; i++) {
-                       if (opt_long_list_entries)
-                               printf("%-21.21s %-50.50s\n", 
-                                      groups[i].acct_name,
-                                      groups[i].acct_desc);
-                       else
-                               printf("%s\n", groups[i].acct_name);
-               }
-       } while (!NT_STATUS_IS_OK(result));
-
- done:
-       return result;
-}
-
-/** 
- * 'net rpc group' entrypoint.
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped
- **/
-
-int net_rpc_group(int argc, const char **argv) 
-{
-       struct functable func[] = {
-#if 0
-               {"add", rpc_group_add},
-               {"delete", rpc_group_delete},
-#endif
-               {NULL, NULL}
-       };
-       
-       if (argc == 0) {
-               if (opt_long_list_entries) {
-               } else {
-               }
-               return run_rpc_command(NULL, PI_SAMR, 0, 
-                                      rpc_group_list_internals,
-                                      argc, argv);
-       }
-
-       return net_run_function(argc, argv, func, rpc_group_usage);
-}
-
-/****************************************************************************/
-
-static int rpc_share_usage(int argc, const char **argv)
-{
-       return net_help_share(argc, argv);
-}
-
-/** 
- * Add a share on a remote RPC server
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid acquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on completion of the function.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-static NTSTATUS 
-rpc_share_add_internals(const DOM_SID *domain_sid, struct smbcli_state *cli,
-                       TALLOC_CTX *mem_ctx,int argc, const char **argv)
-{
-       WERROR result;
-       char *sharename=talloc_strdup(mem_ctx, argv[0]);
-       char *path;
-       uint32_t type=0; /* only allow disk shares to be added */
-       uint32_t num_users=0, perms=0;
-       char *password=NULL; /* don't allow a share password */
-
-       path = strchr(sharename, '=');
-       if (!path)
-               return NT_STATUS_UNSUCCESSFUL;
-       *path++ = '\0';
-
-       result = smbcli_srvsvc_net_share_add(cli, mem_ctx, sharename, type,
-                                         opt_comment, perms, opt_maxusers,
-                                         num_users, path, password);
-       return W_ERROR_IS_OK(result) ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
-}
-
-static int rpc_share_add(int argc, const char **argv)
-{
-       if ((argc < 1) || !strchr(argv[0], '=')) {
-               DEBUG(1,("Sharename or path not specified on add\n"));
-               return rpc_share_usage(argc, argv);
-       }
-       return run_rpc_command(NULL, PI_SRVSVC, 0, 
-                              rpc_share_add_internals,
-                              argc, argv);
-}
-
-/** 
- * Delete a share on a remote RPC server
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid acquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on completion of the function.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-static NTSTATUS 
-rpc_share_del_internals(const DOM_SID *domain_sid, struct smbcli_state *cli,
-                       TALLOC_CTX *mem_ctx,int argc, const char **argv)
-{
-       WERROR result;
-
-       result = smbcli_srvsvc_net_share_del(cli, mem_ctx, argv[0]);
-       return W_ERROR_IS_OK(result) ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
-}
-
-/** 
- * Delete a share on a remote RPC server
- *
- * @param domain_sid The domain sid acquired from the remote server
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return A shell status integer (0 for success)
- **/
-static int rpc_share_delete(int argc, const char **argv)
-{
-       if (argc < 1) {
-               DEBUG(1,("Sharename not specified on delete\n"));
-               return rpc_share_usage(argc, argv);
-       }
-       return run_rpc_command(NULL, PI_SRVSVC, 0, 
-                              rpc_share_del_internals,
-                              argc, argv);
-}
-
-/**
- * Formatted print of share info
- *
- * @param info1  pointer to SRV_SHARE_INFO_1 to format
- **/
-static void display_share_info_1(SRV_SHARE_INFO_1 *info1)
-{
-       fstring netname = "", remark = "";
-
-       rpcstr_pull_unistr2_fstring(netname, &info1->info_1_str.uni_netname);
-       rpcstr_pull_unistr2_fstring(remark, &info1->info_1_str.uni_remark);
-
-       if (opt_long_list_entries) {
-               d_printf("%-12.12s %-8.8s %-50.50s\n",
-                        netname, share_type[info1->info_1.type], remark);
-       } else {
-               d_printf("%-12.12s\n", netname);
-       }
-
-}
-
-/** 
- * List shares on a remote RPC server
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid acquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on completion of the function.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-
-static NTSTATUS 
-rpc_share_list_internals(const DOM_SID *domain_sid, struct smbcli_state *cli,
-                        TALLOC_CTX *mem_ctx, int argc, const char **argv)
-{
-       SRV_SHARE_INFO_CTR ctr;
-       WERROR result;
-       ENUM_HND hnd;
-       uint32_t preferred_len = 0xffffffff, i;
-
-       init_enum_hnd(&hnd, 0);
-
-       result = smbcli_srvsvc_net_share_enum(
-               cli, mem_ctx, 1, &ctr, preferred_len, &hnd);
-
-       if (!W_ERROR_IS_OK(result))
-               goto done;
-
-       /* Display results */
-
-       if (opt_long_list_entries) {
-               d_printf(
-       "\nEnumerating shared resources (exports) on remote server:\n\n"\
-       "\nShare name   Type     Description\n"\
-       "----------   ----     -----------\n");
-       }
-       for (i = 0; i < ctr.num_entries; i++)
-               display_share_info_1(&ctr.share.info1[i]);
- done:
-       return W_ERROR_IS_OK(result) ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
-}
-
-/** 
- * 'net rpc share' entrypoint.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- **/
-
-int net_rpc_share(int argc, const char **argv) 
-{
-       struct functable func[] = {
-               {"add", rpc_share_add},
-               {"delete", rpc_share_delete},
-               {NULL, NULL}
-       };
-
-       if (argc == 0)
-               return run_rpc_command(NULL, PI_SRVSVC, 0, 
-                                      rpc_share_list_internals,
-                                      argc, argv);
-
-       return net_run_function(argc, argv, func, rpc_share_usage);
-}
-
-/****************************************************************************/
-
-static int rpc_file_usage(int argc, const char **argv)
-{
-       return net_help_file(argc, argv);
-}
-
-/** 
- * Close a file on a remote RPC server
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid acquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on completion of the function.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-static NTSTATUS 
-rpc_file_close_internals(const DOM_SID *domain_sid, struct smbcli_state *cli,
-                        TALLOC_CTX *mem_ctx, int argc, const char **argv)
-{
-       WERROR result;
-       result = smbcli_srvsvc_net_file_close(cli, mem_ctx, atoi(argv[0]));
-       return W_ERROR_IS_OK(result) ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
-}
-
-/** 
- * Close a file on a remote RPC server
- *
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return A shell status integer (0 for success)
- **/
-static int rpc_file_close(int argc, const char **argv)
-{
-       if (argc < 1) {
-               DEBUG(1, ("No fileid given on close\n"));
-               return(rpc_file_usage(argc, argv));
-       }
-
-       return run_rpc_command(NULL, PI_SRVSVC, 0, 
-                              rpc_file_close_internals,
-                              argc, argv);
-}
-
-/** 
- * Formatted print of open file info 
- *
- * @param info3  FILE_INFO_3 contents
- * @param str3   strings for FILE_INFO_3
- **/
-
-static void display_file_info_3(FILE_INFO_3 *info3, FILE_INFO_3_STR *str3)
-{
-       fstring user = "", path = "";
-
-       rpcstr_pull_unistr2_fstring(user, &str3->uni_user_name);
-       rpcstr_pull_unistr2_fstring(path, &str3->uni_path_name);
-
-       d_printf("%-7.1d %-20.20s 0x%-4.2x %-6.1d %s\n",
-                info3->id, user, info3->perms, info3->num_locks, path);
-}
-
-/** 
- * List open files on a remote RPC server
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid acquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on completion of the function.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-
-static NTSTATUS 
-rpc_file_list_internals(const DOM_SID *domain_sid, struct smbcli_state *cli,
-                       TALLOC_CTX *mem_ctx, int argc, const char **argv)
-{
-       SRV_FILE_INFO_CTR ctr;
-       WERROR result;
-       ENUM_HND hnd;
-       uint32_t preferred_len = 0xffffffff, i;
-       const char *username=NULL;
-
-       init_enum_hnd(&hnd, 0);
-
-       /* if argc > 0, must be user command */
-       if (argc > 0)
-               username = smb_xstrdup(argv[0]);
-               
-       result = smbcli_srvsvc_net_file_enum(
-               cli, mem_ctx, 3, username, &ctr, preferred_len, &hnd);
-
-       if (!W_ERROR_IS_OK(result))
-               goto done;
-
-       /* Display results */
-
-       d_printf(
-                "\nEnumerating open files on remote server:\n\n"\
-                "\nFileId  Opened by            Perms  Locks  Path"\
-                "\n------  ---------            -----  -----  ---- \n");
-       for (i = 0; i < ctr.num_entries; i++)
-               display_file_info_3(&ctr.file.info3[i].info_3, 
-                                   &ctr.file.info3[i].info_3_str);
- done:
-       return W_ERROR_IS_OK(result) ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
-}
-
-
-/** 
- * List files for a user on a remote RPC server
- *
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return A shell status integer (0 for success)
- **/
-static int rpc_file_user(int argc, const char **argv)
-{
-       if (argc < 1) {
-               DEBUG(1, ("No username given\n"));
-               return(rpc_file_usage(argc, argv));
-       }
-
-       return run_rpc_command(NULL, PI_SRVSVC, 0, 
-                              rpc_file_list_internals,
-                              argc, argv);
-}
-
-
-/** 
- * 'net rpc file' entrypoint.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- **/
-
-int net_rpc_file(int argc, const char **argv) 
-{
-       struct functable func[] = {
-               {"close", rpc_file_close},
-               {"user", rpc_file_user},
-#if 0
-               {"info", rpc_file_info},
-#endif
-               {NULL, NULL}
-       };
-
-       if (argc == 0)
-               return run_rpc_command(NULL, PI_SRVSVC, 0, 
-                                      rpc_file_list_internals,
-                                      argc, argv);
-
-       return net_run_function(argc, argv, func, rpc_file_usage);
-}
-
-/****************************************************************************/
-
-
-
-/** 
- * ABORT the shutdown of a remote RPC Server
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passed through. 
- *
- * @param domain_sid The domain sid aquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on compleation of the function.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-
-static NTSTATUS rpc_shutdown_abort_internals(const DOM_SID *domain_sid, struct smbcli_state *cli, TALLOC_CTX *mem_ctx, 
-                                            int argc, const char **argv) 
-{
-       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-       
-       result = smbcli_reg_abort_shutdown(cli, mem_ctx);
-       
-       if (NT_STATUS_IS_OK(result))
-               DEBUG(5,("cmd_reg_abort_shutdown: query succeeded\n"));
-       else
-               DEBUG(5,("cmd_reg_abort_shutdown: query failed\n"));
-       
-       return result;
-}
-
-
-/** 
- * ABORT the Shut down of a remote RPC server
- *
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return A shell status integer (0 for success)
- **/
-
-static int rpc_shutdown_abort(int argc, const char **argv) 
-{
-       return run_rpc_command(NULL, PI_WINREG, 0, rpc_shutdown_abort_internals,
-                              argc, argv);
-}
-
-/** 
- * Shut down a remote RPC Server
- *
- * All parameters are provided by the run_rpc_command function, except for
- * argc, argv which are passes through. 
- *
- * @param domain_sid The domain sid aquired from the remote server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on compleation of the function.
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return Normal NTSTATUS return.
- **/
-
-static NTSTATUS rpc_shutdown_internals(const DOM_SID *domain_sid, struct smbcli_state *cli, TALLOC_CTX *mem_ctx, 
-                                      int argc, const char **argv) 
-{
-       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-        const char *msg = "This machine will be shutdown shortly";
-       uint32_t timeout = 20;
-#if 0
-       poptContext pc;
-       int rc;
-
-       struct poptOption long_options[] = {
-               {"message",    'm', POPT_ARG_STRING, &msg},
-               {"timeout",    't', POPT_ARG_INT,    &timeout},
-               {"reboot",     'r', POPT_ARG_NONE,   &reboot},
-               {"force",      'f', POPT_ARG_NONE,   &force},
-               { 0, 0, 0, 0}
-       };
-
-       pc = poptGetContext(NULL, argc, (const char **) argv, long_options, 
-                           POPT_CONTEXT_KEEP_FIRST);
-
-       rc = poptGetNextOpt(pc);
-       
-       if (rc < -1) {
-               /* an error occurred during option processing */
-               DEBUG(0, ("%s: %s\n",
-                         poptBadOption(pc, POPT_BADOPTION_NOALIAS),
-                         poptStrerror(rc)));
-               return NT_STATUS_INVALID_PARAMETER;
-       }
-#endif
-       if (opt_comment) {
-               msg = opt_comment;
-       }
-       if (opt_timeout) {
-               timeout = opt_timeout;
-       }
-
-       /* create an entry */
-       result = smbcli_reg_shutdown(cli, mem_ctx, msg, timeout, opt_reboot, opt_force);
-
-       if (NT_STATUS_IS_OK(result))
-               DEBUG(5,("Shutdown of remote machine succeeded\n"));
-       else
-               DEBUG(0,("Shutdown of remote machine failed!\n"));
-
-       return result;
-}
-
-/** 
- * Shut down a remote RPC server
- *
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return A shell status integer (0 for success)
- **/
-
-static int rpc_shutdown(int argc, const char **argv) 
-{
-       return run_rpc_command(NULL, PI_WINREG, 0, rpc_shutdown_internals,
-                                      argc, argv);
-}
-
-/***************************************************************************
-  NT Domain trusts code (i.e. 'net rpc trustdom' functionality)
-  
- ***************************************************************************/
-
-/**
- * Add interdomain trust account to the RPC server.
- * All parameters (except for argc and argv) are passed by run_rpc_command
- * function.
- *
- * @param domain_sid The domain sid acquired from the server
- * @param cli A smbcli_state connected to the server.
- * @param mem_ctx Talloc context, destoyed on completion of the function.
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped
- *
- * @return normal NTSTATUS return code
- */
-
-static NTSTATUS rpc_trustdom_add_internals(const DOM_SID *domain_sid, struct smbcli_state *cli, TALLOC_CTX *mem_ctx, 
-                                           int argc, const char **argv) {
-
-       POLICY_HND connect_pol, domain_pol, user_pol;
-       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-       char *acct_name;
-       uint16_t acb_info;
-       uint32_t unknown, user_rid;
-
-       if (argc != 1) {
-               d_printf("Usage: net rpc trustdom add <domain_name>\n");
-               return NT_STATUS_INVALID_PARAMETER;
-       }
-
-       /* 
-        * Make valid trusting domain account (ie. uppercased and with '$' appended)
-        */
-        
-       if (asprintf(&acct_name, "%s$", argv[0]) < 0) {
-               return NT_STATUS_NO_MEMORY;
-       }
-
-       strupper(acct_name);
-
-       /* Get samr policy handle */
-       result = smbcli_samr_connect(cli, mem_ctx, MAXIMUM_ALLOWED_ACCESS,
-                                 &connect_pol);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-       
-       /* Get domain policy handle */
-       result = smbcli_samr_open_domain(cli, mem_ctx, &connect_pol,
-                                     MAXIMUM_ALLOWED_ACCESS,
-                                     domain_sid, &domain_pol);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-
-       /* Create trusting domain's account */
-       acb_info = ACB_DOMTRUST;
-       unknown = 0xe005000b; /* No idea what this is - a permission mask?
-                                mimir: yes, most probably it is */
-
-       result = smbcli_samr_create_dom_user(cli, mem_ctx, &domain_pol,
-                                         acct_name, acb_info, unknown,
-                                         &user_pol, &user_rid);
-       if (!NT_STATUS_IS_OK(result)) {
-               goto done;
-       }
-
- done:
-       SAFE_FREE(acct_name);
-       return result;
-}
-
-/**
- * Create interdomain trust account for a remote domain.
- *
- * @param argc standard argc
- * @param argv standard argv without initial components
- *
- * @return Integer status (0 means success)
- **/
-
-static int rpc_trustdom_add(int argc, const char **argv)
-{
-       return run_rpc_command(NULL, PI_SAMR, 0, rpc_trustdom_add_internals,
-                              argc, argv);
-}
-
-
-/**
- * Delete interdomain trust account for a remote domain.
- *
- * @param argc standard argc
- * @param argv standard argv without initial components
- *
- * @return Integer status (0 means success)
- **/
-static int rpc_trustdom_del(int argc, const char **argv)
-{
-       d_printf("Sorry, not yet implemented.\n");
-       return -1;
-}
-
-/**
- * Establish trust relationship to a trusting domain.
- * Interdomain account must already be created on remote PDC.
- *
- * @param argc standard argc
- * @param argv standard argv without initial components
- *
- * @return Integer status (0 means success)
- **/
-
-static int rpc_trustdom_establish(int argc, const char **argv)
-{
-       struct smbcli_state *cli;
-       struct in_addr server_ip;
-       POLICY_HND connect_hnd;
-       TALLOC_CTX *mem_ctx;
-       NTSTATUS nt_status;
-       DOM_SID domain_sid;
-       WKS_INFO_100 wks_info;
-       
-       char* domain_name;
-       char* acct_name;
-       fstring pdc_name;
-
-       /*
-        * Connect to \\server\ipc$ as 'our domain' account with password
-        */
-
-       if (argc != 1) {
-               d_printf("Usage: net rpc trustdom establish <domain_name>\n");
-               return -1;
-       }
-
-       domain_name = smb_xstrdup(argv[0]);
-       strupper(domain_name);
-
-       /* account name used at first is our domain's name with '$' */
-       asprintf(&acct_name, "%s$", lp_workgroup());
-       strupper(acct_name);
-       
-       /*
-        * opt_workgroup will be used by connection functions further,
-        * hence it should be set to remote domain name instead of ours
-        */
-       if (opt_workgroup) {
-               opt_workgroup = smb_xstrdup(domain_name);
-       };
-       
-       opt_user_name = acct_name;
-
-       /* find the domain controller */
-       if (!net_find_dc(&server_ip, pdc_name, domain_name)) {
-               DEBUG(0, ("Coulnd find domain controller for domain %s\n", domain_name));
-               return -1;
-       }
-
-       /* connect to ipc$ as username/password */
-       nt_status = connect_to_ipc(&cli, &server_ip, pdc_name);
-       if (!NT_STATUS_EQUAL(nt_status, NT_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT)) {
-
-               /* Is it trusting domain account for sure ? */
-               DEBUG(0, ("Couldn't verify trusting domain account. Error was %s\n",
-                       nt_errstr(nt_status)));
-               return -1;
-       }
-       
-       /*
-        * Connect to \\server\ipc$ again (this time anonymously)
-        */
-       
-       nt_status = connect_to_ipc_anonymous(&cli, &server_ip, (char*)pdc_name);
-       
-       if (NT_STATUS_IS_ERR(nt_status)) {
-               DEBUG(0, ("Couldn't connect to domain %s controller. Error was %s.\n",
-                       domain_name, nt_errstr(nt_status)));
-       }
-
-       /*
-        * Use NetServerEnum2 to make sure we're talking to a proper server
-        */
-        
-       if (!smbcli_get_pdc_name(cli, domain_name, (char*)pdc_name)) {
-               DEBUG(0, ("NetServerEnum2 error: Couldn't find primary domain controller\
-                        for domain %s\n", domain_name));
-       }
-        
-       /*
-        * Call WksQueryInfo to check remote server's capabilities
-        * note: It is now used only to get unicode domain name
-        */
-       
-       if (!smbcli_nt_session_open(cli, PI_WKSSVC)) {
-               DEBUG(0, ("Couldn't not initialise wkssvc pipe\n"));
-               return -1;
-       }
-
-       if (!(mem_ctx = talloc_init("establishing trust relationship to domain %s",
-                       domain_name))) {
-               DEBUG(0, ("talloc_init() failed\n"));
-               smbcli_shutdown(cli);
-               return -1;
-       }
-       
-       nt_status = smbcli_wks_query_info(cli, mem_ctx, &wks_info);
-       
-       if (NT_STATUS_IS_ERR(nt_status)) {
-               DEBUG(0, ("WksQueryInfo call failed.\n"));
-               return -1;
-       }
-
-       if (cli->nt_pipe_fnum)
-               smbcli_nt_session_close(cli);
-
-
-       /*
-        * Call LsaOpenPolicy and LsaQueryInfo
-        */
-        
-       if (!(mem_ctx = talloc_init("rpc_trustdom_establish"))) {
-               DEBUG(0, ("talloc_init() failed\n"));
-               smbcli_shutdown(cli);
-               return -1;
-       }
-
-       if (!smbcli_nt_session_open(cli, PI_LSARPC)) {
-               DEBUG(0, ("Could not initialise lsa pipe\n"));
-               smbcli_shutdown(cli);
-               return -1;
-       }
-
-       nt_status = smbcli_lsa_open_policy2(cli, mem_ctx, True, SEC_RIGHTS_QUERY_VALUE,
-                                        &connect_hnd);
-       if (NT_STATUS_IS_ERR(nt_status)) {
-               DEBUG(0, ("Couldn't open policy handle. Error was %s\n",
-                       nt_errstr(nt_status)));
-               return -1;
-       }
-
-       /* Querying info level 5 */
-       
-       nt_status = smbcli_lsa_query_info_policy(cli, mem_ctx, &connect_hnd,
-                                             5 /* info level */, domain_name,
-                                             &domain_sid);
-       if (NT_STATUS_IS_ERR(nt_status)) {
-               DEBUG(0, ("LSA Query Info failed. Returned error was %s\n",
-                       nt_errstr(nt_status)));
-               return -1;
-       }
-
-
-
-
-       /* There should be actually query info level 3 (following nt serv behaviour),
-          but I still don't know if it's _really_ necessary */
-                       
-       /*
-        * Store the password in secrets db
-        */
-
-       if (!secrets_store_trusted_domain_password(domain_name, wks_info.uni_lan_grp.buffer,
-                                                  wks_info.uni_lan_grp.uni_str_len, opt_password,
-                                                  domain_sid)) {
-               DEBUG(0, ("Storing password for trusted domain failed.\n"));
-               return -1;
-       }
-       
-       /*
-        * Close the pipes and clean up
-        */
-        
-       nt_status = smbcli_lsa_close(cli, mem_ctx, &connect_hnd);
-       if (NT_STATUS_IS_ERR(nt_status)) {
-               DEBUG(0, ("Couldn't close LSA pipe. Error was %s\n",
-                       nt_errstr(nt_status)));
-               return -1;
-       }
-
-       if (cli->nt_pipe_fnum)
-               smbcli_nt_session_close(cli);
-        
-       talloc_destroy(mem_ctx);
-        
-       DEBUG(0, ("Success!\n"));
-       return 0;
-}
-
-/**
- * Revoke trust relationship to the remote domain
- *
- * @param argc standard argc
- * @param argv standard argv without initial components
- *
- * @return Integer status (0 means success)
- **/
-
-static int rpc_trustdom_revoke(int argc, const char **argv)
-{
-       char* domain_name;
-
-       if (argc < 1) return -1;
-       
-       /* generate upper cased domain name */
-       domain_name = smb_xstrdup(argv[0]);
-       strupper(domain_name);
-
-       /* delete password of the trust */
-       if (!trusted_domain_password_delete(domain_name)) {
-               DEBUG(0, ("Failed to revoke relationship to the trusted domain %s\n",
-                         domain_name));
-               return -1;
-       };
-       
-       return 0;
-}
-
-/**
- * Usage for 'net rpc trustdom' command
- *
- * @param argc standard argc
- * @param argv standard argv without inital components
- *
- * @return Integer status returned to shell
- **/
-static int rpc_trustdom_usage(int argc, const char **argv)
-{
-       d_printf("  net rpc trustdom add \t\t add trusting domain's account\n");
-       d_printf("  net rpc trustdom del \t\t delete trusting domain's account\n");
-       d_printf("  net rpc trustdom establish \t establish relationship to trusted domain\n");
-       d_printf("  net rpc trustdom revoke \t abandon relationship to trusted domain\n");
-       d_printf("  net rpc trustdom list \t show current interdomain trust relationships\n");
-       return -1;
-}
-
-
-static NTSTATUS rpc_query_domain_sid(const DOM_SID *domain_sid, struct smbcli_state *cli, TALLOC_CTX *mem_ctx,
-                              int argc, const char **argv)
-{
-       fstring str_sid;
-       sid_to_string(str_sid, domain_sid);
-       d_printf("%s\n", str_sid);
-       return NT_STATUS_OK;
-};
-
-
-static int rpc_trustdom_list(int argc, const char **argv)
-{
-       /* common variables */
-       TALLOC_CTX* mem_ctx;
-       struct smbcli_state *cli, *remote_cli;
-       NTSTATUS nt_status;
-       const char *domain_name = NULL;
-       DOM_SID queried_dom_sid;
-       fstring ascii_sid, padding;
-       int ascii_dom_name_len;
-       POLICY_HND connect_hnd;
-       
-       /* trusted domains listing variables */
-       int enum_ctx = 0;
-       int num_domains, i, pad_len, col_len = 20;
-       DOM_SID *domain_sids;
-       char **trusted_dom_names;
-       fstring pdc_name;
-       
-       /* trusting domains listing variables */
-       POLICY_HND domain_hnd;
-       char **trusting_dom_names;
-       uint32_t *trusting_dom_rids;
-       
-       /*
-        * Listing trusted domains (stored in secrets.tdb, if local)
-        */
-
-       mem_ctx = talloc_init("trust relationships listing");
-
-       /*
-        * set domain and pdc name to local samba server (default)
-        * or to remote one given in command line
-        */
-       
-       if (StrCaseCmp(opt_workgroup, lp_workgroup())) {
-               domain_name = opt_workgroup;
-               opt_target_workgroup = opt_workgroup;
-       } else {
-               fstrcpy(pdc_name, lp_netbios_name());
-               domain_name = talloc_strdup(mem_ctx, lp_workgroup());
-               opt_target_workgroup = domain_name;
-       };
-
-       /* open \PIPE\lsarpc and open policy handle */
-       if (!(cli = net_make_ipc_connection(NET_FLAGS_PDC))) {
-               DEBUG(0, ("Couldn't connect to domain controller\n"));
-               return -1;
-       };
-
-       if (!smbcli_nt_session_open(cli, PI_LSARPC)) {
-               DEBUG(0, ("Could not initialise lsa pipe\n"));
-               return -1;
-       };
-
-       nt_status = smbcli_lsa_open_policy2(cli, mem_ctx, True, SEC_RIGHTS_QUERY_VALUE,
-                                       &connect_hnd);
-       if (NT_STATUS_IS_ERR(nt_status)) {
-               DEBUG(0, ("Couldn't open policy handle. Error was %s\n",
-                       nt_errstr(nt_status)));
-               return -1;
-       };
-       
-       /* query info level 5 to obtain sid of a domain being queried */
-       nt_status = smbcli_lsa_query_info_policy(cli, mem_ctx, &connect_hnd,
-                                       5 /* info level */, domain_name, &queried_dom_sid);
-       if (NT_STATUS_IS_ERR(nt_status)) {
-               DEBUG(0, ("LSA Query Info failed. Returned error was %s\n",
-                       nt_errstr(nt_status)));
-               return -1;
-       }
-               
-       /*
-        * Keep calling LsaEnumTrustdom over opened pipe until
-        * the end of enumeration is reached
-        */
-        
-       d_printf("Trusted domains list:\n\n");
-
-       do {
-               nt_status = smbcli_lsa_enum_trust_dom(cli, mem_ctx, &connect_hnd, &enum_ctx,
-                                                  &num_domains,
-                                                  &trusted_dom_names, &domain_sids);
-               
-               if (NT_STATUS_IS_ERR(nt_status)) {
-                       DEBUG(0, ("Couldn't enumerate trusted domains. Error was %s\n",
-                               nt_errstr(nt_status)));
-                       return -1;
-               };
-               
-               for (i = 0; i < num_domains; i++) {
-                       /* convert sid into ascii string */
-                       sid_to_string(ascii_sid, &(domain_sids[i]));
-               
-                       /* calculate padding space for d_printf to look nicer */
-                       pad_len = col_len - strlen(trusted_dom_names[i]);
-                       padding[pad_len] = 0;
-                       do padding[--pad_len] = ' '; while (pad_len);
-                       
-                       d_printf("%s%s%s\n", trusted_dom_names[i], padding, ascii_sid);
-               };
-               
-               /*
-                * in case of no trusted domains say something rather
-                * than just display blank line
-                */
-               if (!num_domains) d_printf("none\n");
-
-       } while (NT_STATUS_EQUAL(nt_status, STATUS_MORE_ENTRIES));
-
-       /* close this connection before doing next one */
-       nt_status = smbcli_lsa_close(cli, mem_ctx, &connect_hnd);
-       if (NT_STATUS_IS_ERR(nt_status)) {
-               DEBUG(0, ("Couldn't properly close lsa policy handle. Error was %s\n",
-                       nt_errstr(nt_status)));
-               return -1;
-       };
-       
-       smbcli_nt_session_close(cli);
-
-       /*
-        * Listing trusting domains (stored in passdb backend, if local)
-        */
-       
-       d_printf("\nTrusting domains list:\n\n");
-
-       /*
-        * Open \PIPE\samr and get needed policy handles
-        */
-       if (!smbcli_nt_session_open(cli, PI_SAMR)) {
-               DEBUG(0, ("Could not initialise samr pipe\n"));
-               return -1;
-       };
-       
-       /* SamrConnect */
-       nt_status = smbcli_samr_connect(cli, mem_ctx, SA_RIGHT_SAM_OPEN_DOMAIN,
-                                                                &connect_hnd);
-       if (!NT_STATUS_IS_OK(nt_status)) {
-               DEBUG(0, ("Couldn't open SAMR policy handle. Error was %s\n",
-                       nt_errstr(nt_status)));
-               return -1;
-       };
-       
-       /* SamrOpenDomain - we have to open domain policy handle in order to be
-          able to enumerate accounts*/
-       nt_status = smbcli_samr_open_domain(cli, mem_ctx, &connect_hnd,
-                                                                        SA_RIGHT_DOMAIN_ENUM_ACCOUNTS,
-                                                                        &queried_dom_sid, &domain_hnd);                                                                         
-       if (!NT_STATUS_IS_OK(nt_status)) {
-               DEBUG(0, ("Couldn't open domain object. Error was %s\n",
-                       nt_errstr(nt_status)));
-               return -1;
-       };
-       
-       /*
-        * perform actual enumeration
-        */
-        
-       enum_ctx = 0;   /* reset enumeration context from last enumeration */
-       do {
-                       
-               nt_status = smbcli_samr_enum_dom_users(cli, mem_ctx, &domain_hnd,
-                                                   &enum_ctx, ACB_DOMTRUST, 0xffff,
-                                                   &trusting_dom_names, &trusting_dom_rids,
-                                                   &num_domains);
-               if (NT_STATUS_IS_ERR(nt_status)) {
-                       DEBUG(0, ("Couldn't enumerate accounts. Error was: %s\n",
-                               nt_errstr(nt_status)));
-                       return -1;
-               };
-               
-               for (i = 0; i < num_domains; i++) {
-
-                       /*
-                        * get each single domain's sid (do we _really_ need this ?):
-                        *  1) connect to domain's pdc
-                        *  2) query the pdc for domain's sid
-                        */
-
-                       /* get rid of '$' tail */
-                       ascii_dom_name_len = strlen(trusting_dom_names[i]);
-                       if (ascii_dom_name_len && ascii_dom_name_len < FSTRING_LEN)
-                               trusting_dom_names[i][ascii_dom_name_len - 1] = '\0';
-                       
-                       /* calculate padding space for d_printf to look nicer */
-                       pad_len = col_len - strlen(trusting_dom_names[i]);
-                       padding[pad_len] = 0;
-                       do padding[--pad_len] = ' '; while (pad_len);
-
-                       /* set opt_* variables to remote domain */
-                       strupper(trusting_dom_names[i]);
-                       opt_workgroup = talloc_strdup(mem_ctx, trusting_dom_names[i]);
-                       opt_target_workgroup = opt_workgroup;
-                       
-                       d_printf("%s%s", trusting_dom_names[i], padding);
-                       
-                       /* connect to remote domain controller */
-                       remote_cli = net_make_ipc_connection(NET_FLAGS_PDC | NET_FLAGS_ANONYMOUS);
-                       if (remote_cli) {                       
-                               /* query for domain's sid */
-                               if (run_rpc_command(remote_cli, PI_LSARPC, 0, rpc_query_domain_sid, argc, argv))
-                                       d_printf("couldn't get domain's sid\n");
-
-                               smbcli_shutdown(remote_cli);
-                       
-                       } else {
-                               d_printf("domain controller is not responding\n");
-                       };
-               };
-               
-               if (!num_domains) d_printf("none\n");
-               
-       } while (NT_STATUS_EQUAL(nt_status, STATUS_MORE_ENTRIES));
-
-       /* close opened samr and domain policy handles */
-       nt_status = smbcli_samr_close(cli, mem_ctx, &domain_hnd);
-       if (!NT_STATUS_IS_OK(nt_status)) {
-               DEBUG(0, ("Couldn't properly close domain policy handle for domain %s\n", domain_name));
-       };
-       
-       nt_status = smbcli_samr_close(cli, mem_ctx, &connect_hnd);
-       if (!NT_STATUS_IS_OK(nt_status)) {
-               DEBUG(0, ("Couldn't properly close samr policy handle for domain %s\n", domain_name));
-       };
-       
-       /* close samr pipe and connection to IPC$ */
-       smbcli_nt_session_close(cli);
-       smbcli_shutdown(cli);
-
-       talloc_destroy(mem_ctx);         
-       return 0;
-}
-
-/**
- * Entrypoint for 'net rpc trustdom' code
- *
- * @param argc standard argc
- * @param argv standard argv without initial components
- *
- * @return Integer status (0 means success)
- */
-
-static int rpc_trustdom(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"add", rpc_trustdom_add},
-               {"del", rpc_trustdom_del},
-               {"establish", rpc_trustdom_establish},
-               {"revoke", rpc_trustdom_revoke},
-               {"help", rpc_trustdom_usage},
-               {"list", rpc_trustdom_list},
-               {NULL, NULL}
-       };
-
-       if (argc == 0) {
-               rpc_trustdom_usage(argc, argv);
-               return -1;
-       }
-
-       return (net_run_function(argc, argv, func, rpc_user_usage));
-}
-
-/**
- * Check if a server will take rpc commands
- * @param flags        Type of server to connect to (PDC, DMB, localhost)
- *             if the host is not explicitly specified
- * @return  BOOL (true means rpc supported)
- */
-BOOL net_rpc_check(uint_t flags)
-{
-       struct smbcli_state cli;
-       BOOL ret = False;
-       struct in_addr server_ip;
-       char *server_name = NULL;
-
-       /* flags (i.e. server type) may depend on command */
-       if (!net_find_server(flags, &server_ip, &server_name))
-               return False;
-
-       ZERO_STRUCT(cli);
-       if (smbcli_initialise(&cli) == False)
-               return False;
-
-       if (!smbcli_connect(&cli, server_name, &server_ip))
-               goto done;
-       if (!attempt_netbios_session_request(&cli, lp_netbios_name(), 
-                                            server_name, &server_ip))
-               goto done;
-       if (!smbcli_negprot(&cli))
-               goto done;
-       if (cli.protocol < PROTOCOL_NT1)
-               goto done;
-
-       ret = True;
- done:
-       smbcli_shutdown(&cli);
-       return ret;
-}
-
-
-/****************************************************************************/
-
-
-/** 
- * Basic usage function for 'net rpc'
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- **/
-
-int net_rpc_usage(int argc, const char **argv) 
-{
-       d_printf("  net rpc info \t\t\tshow basic info about a domain \n");
-       d_printf("  net rpc join \t\t\tto join a domain \n");
-       d_printf("  net rpc testjoin \t\ttests that a join is valid\n");
-       d_printf("  net rpc user \t\t\tto add, delete and list users\n");
-       d_printf("  net rpc group \t\tto list groups\n");
-       d_printf("  net rpc share \t\tto add, delete, and list shares\n");
-       d_printf("  net rpc file \t\t\tto list open files\n");
-       d_printf("  net rpc changetrustpw \tto change the trust account password\n");
-       d_printf("  net rpc getsid \t\tfetch the domain sid into the local secrets.tdb\n");
-       d_printf("  net rpc vampire \t\tsyncronise an NT PDC's users and groups into the local passdb\n");
-       d_printf("  net rpc samdump \t\tdiplay an NT PDC's users, groups and other data\n");
-       d_printf("  net rpc trustdom \t\tto create trusting domain's account\n"
-                "\t\t\t\t\tor establish trust\n");
-       d_printf("  net rpc abortshutdown \tto abort the shutdown of a remote server\n");
-       d_printf("  net rpc shutdown \t\tto shutdown a remote server\n");
-       d_printf("\n");
-       d_printf("'net rpc shutdown' also accepts the following miscellaneous options:\n"); /* misc options */
-       d_printf("\t-r or --reboot\trequest remote server reboot on shutdown\n");
-       d_printf("\t-f or --force\trequest the remote server force its shutdown\n");
-       d_printf("\t-t or --timeout=<timeout>\tnumber of seconds before shutdown\n");
-       d_printf("\t-c or --comment=<message>\ttext message to display on impending shutdown\n");
-       return -1;
-}
-
-
-/**
- * Help function for 'net rpc'.  Calls command specific help if requested
- * or displays usage of net rpc
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- **/
-
-int net_rpc_help(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"join", rpc_join_usage},
-               {"user", rpc_user_usage},
-               {"group", rpc_group_usage},
-               {"share", rpc_share_usage},
-               /*{"changetrustpw", rpc_changetrustpw_usage}, */
-               {"trustdom", rpc_trustdom_usage},
-               /*{"abortshutdown", rpc_shutdown_abort_usage},*/
-               /*{"shutdown", rpc_shutdown_usage}, */
-               {NULL, NULL}
-       };
-
-       if (argc == 0) {
-               net_rpc_usage(argc, argv);
-               return -1;
-       }
-
-       return (net_run_function(argc, argv, func, rpc_user_usage));
-}
-
-
-/** 
- * 'net rpc' entrypoint.
- * @param argc  Standard main() style argc
- * @param argv  Standard main() style argv.  Initial components are already
- *              stripped
- **/
-
-int net_rpc(int argc, const char **argv)
-{
-       struct functable func[] = {
-               {"info", net_rpc_info},
-               {"join", net_rpc_join},
-               {"testjoin", net_rpc_testjoin},
-               {"user", net_rpc_user},
-               {"group", net_rpc_group},
-               {"share", net_rpc_share},
-               {"file", net_rpc_file},
-               {"changetrustpw", rpc_changetrustpw},
-               {"trustdom", rpc_trustdom},
-               {"abortshutdown", rpc_shutdown_abort},
-               {"shutdown", rpc_shutdown},
-               {"samdump", rpc_samdump},
-               {"vampire", rpc_vampire},
-               {"getsid", net_rpc_getsid},
-               {"help", net_rpc_help},
-               {NULL, NULL}
-       };
-       return net_run_function(argc, argv, func, net_rpc_usage);
-}
diff --git a/source4/utils/net_rpc_join.c b/source4/utils/net_rpc_join.c
deleted file mode 100644 (file)
index 9f91555..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-/* 
-   Samba Unix/Linux SMB client library 
-   Distributed SMB/CIFS Server Management Utility 
-   Copyright (C) 2001 Andrew Bartlett (abartlet@samba.org)
-   Copyright (C) Tim Potter     2001
-
-   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.h"
-
-/* Macro for checking RPC error codes to make things more readable */
-
-#define CHECK_RPC_ERR(rpc, msg) \
-        if (!NT_STATUS_IS_OK(result = rpc)) { \
-                DEBUG(0, (msg ": %s\n", nt_errstr(result))); \
-                goto done; \
-        }
-
-#define CHECK_RPC_ERR_DEBUG(rpc, debug_args) \
-        if (!NT_STATUS_IS_OK(result = rpc)) { \
-                DEBUG(0, debug_args); \
-                goto done; \
-        }
-
-
-/**
- * confirm that a domain join is still valid
- *
- * @return A shell status integer (0 for success)
- *
- **/
-int net_rpc_join_ok(const char *domain)
-{
-       struct smbcli_state *cli;
-       uint8_t stored_md4_trust_password[16];
-       int retval = 1;
-       uint32_t channel;
-       NTSTATUS result;
-       uint32_t neg_flags = 0x000001ff;
-
-       /* Connect to remote machine */
-       if (!(cli = net_make_ipc_connection(NET_FLAGS_ANONYMOUS | NET_FLAGS_PDC))) {
-               return 1;
-       }
-
-       if (!smbcli_nt_session_open(cli, PI_NETLOGON)) {
-               DEBUG(0,("Error connecting to NETLOGON pipe\n"));
-               goto done;
-       }
-
-       if (!secrets_fetch_trust_account_password(domain,
-                                                 stored_md4_trust_password, NULL)) {
-               DEBUG(0,("Could not reterive domain trust secret"));
-               goto done;
-       }
-       
-       if (lp_server_role() == ROLE_DOMAIN_BDC || 
-           lp_server_role() == ROLE_DOMAIN_PDC) {
-               channel = SEC_CHAN_BDC;
-       } else {
-               channel = SEC_CHAN_WKSTA;
-       }
-
-       CHECK_RPC_ERR(smbcli_nt_setup_creds(cli, 
-                                        channel,
-                                        stored_md4_trust_password, &neg_flags, 2),
-                         "error in domain join verification");
-       
-       retval = 0;             /* Success! */
-       
-done:
-       /* Close down pipe - this will clean up open policy handles */
-       if (cli->nt_pipe_fnum)
-               smbcli_nt_session_close(cli);
-
-       smbcli_shutdown(cli);
-
-       return retval;
-}
-
-/**
- * Join a domain using the administrator username and password
- *
- * @param argc  Standard main() style argc
- * @param argc  Standard main() style argv.  Initial components are already
- *              stripped.  Currently not used.
- * @return A shell status integer (0 for success)
- *
- **/
-
-int net_rpc_join_newstyle(int argc, const char **argv) 
-{
-
-       /* libsmb variables */
-
-       struct smbcli_state *cli;
-       TALLOC_CTX *mem_ctx;
-        uint32_t acb_info;
-
-       /* rpc variables */
-
-       POLICY_HND lsa_pol, sam_pol, domain_pol, user_pol;
-       DOM_SID domain_sid;
-       uint32_t user_rid;
-
-       /* Password stuff */
-
-       char *clear_trust_password = NULL;
-       fstring ucs2_trust_password;
-       int ucs2_pw_len;
-       uint8_t pwbuf[516], sess_key[16];
-       SAM_USERINFO_CTR ctr;
-       SAM_USER_INFO_24 p24;
-       SAM_USER_INFO_10 p10;
-
-       /* Misc */
-
-       NTSTATUS result;
-       int retval = 1;
-       fstring domain;
-       uint32_t num_rids, *name_types, *user_rids;
-       uint32_t flags = 0x3e8;
-       char *acct_name;
-       const char *const_acct_name;
-
-       /* Connect to remote machine */
-
-       if (!(cli = net_make_ipc_connection(NET_FLAGS_PDC))) 
-               return 1;
-
-       if (!(mem_ctx = talloc_init("net_rpc_join_newstyle"))) {
-               DEBUG(0, ("Could not initialise talloc context\n"));
-               goto done;
-       }
-
-       /* Fetch domain sid */
-
-       if (!smbcli_nt_session_open(cli, PI_LSARPC)) {
-               DEBUG(0, ("Error connecting to SAM pipe\n"));
-               goto done;
-       }
-
-
-       CHECK_RPC_ERR(smbcli_lsa_open_policy(cli, mem_ctx, True,
-                                         SEC_RIGHTS_MAXIMUM_ALLOWED,
-                                         &lsa_pol),
-                     "error opening lsa policy handle");
-
-       CHECK_RPC_ERR(smbcli_lsa_query_info_policy(cli, mem_ctx, &lsa_pol,
-                                               5, domain, &domain_sid),
-                     "error querying info policy");
-
-       smbcli_lsa_close(cli, mem_ctx, &lsa_pol);
-
-       smbcli_nt_session_close(cli); /* Done with this pipe */
-
-       /* Create domain user */
-       if (!smbcli_nt_session_open(cli, PI_SAMR)) {
-               DEBUG(0, ("Error connecting to SAM pipe\n"));
-               goto done;
-       }
-
-       CHECK_RPC_ERR(smbcli_samr_connect(cli, mem_ctx, 
-                                      SEC_RIGHTS_MAXIMUM_ALLOWED,
-                                      &sam_pol),
-                     "could not connect to SAM database");
-
-       
-       CHECK_RPC_ERR(smbcli_samr_open_domain(cli, mem_ctx, &sam_pol,
-                                          SEC_RIGHTS_MAXIMUM_ALLOWED,
-                                          &domain_sid, &domain_pol),
-                     "could not open domain");
-
-       /* Create domain user */
-       acct_name = talloc_asprintf(mem_ctx, "%s$", lp_netbios_name()); 
-       strlower(acct_name);
-       const_acct_name = acct_name;
-
-        acb_info = ((lp_server_role() == ROLE_DOMAIN_BDC) || lp_server_role() == ROLE_DOMAIN_PDC) ? ACB_SVRTRUST : ACB_WSTRUST;
-
-       result = smbcli_samr_create_dom_user(cli, mem_ctx, &domain_pol,
-                                         acct_name, acb_info,
-                                         0xe005000b, &user_pol, 
-                                         &user_rid);
-
-       if (!NT_STATUS_IS_OK(result) && 
-           !NT_STATUS_EQUAL(result, NT_STATUS_USER_EXISTS)) {
-               d_printf("Create of workstation account failed\n");
-
-               /* If NT_STATUS_ACCESS_DENIED then we have a valid
-                  username/password combo but the user does not have
-                  administrator access. */
-
-               if (NT_STATUS_V(result) == NT_STATUS_V(NT_STATUS_ACCESS_DENIED))
-                       d_printf("User specified does not have administrator privileges\n");
-
-               goto done;
-       }
-
-       /* We *must* do this.... don't ask... */
-
-       if (NT_STATUS_IS_OK(result))
-               smbcli_samr_close(cli, mem_ctx, &user_pol);
-
-       CHECK_RPC_ERR_DEBUG(smbcli_samr_lookup_names(cli, mem_ctx,
-                                                 &domain_pol, flags,
-                                                 1, &const_acct_name, 
-                                                 &num_rids,
-                                                 &user_rids, &name_types),
-                           ("error looking up rid for user %s: %s\n",
-                            acct_name, nt_errstr(result)));
-
-       if (name_types[0] != SID_NAME_USER) {
-               DEBUG(0, ("%s is not a user account\n", acct_name));
-               goto done;
-       }
-
-       user_rid = user_rids[0];
-               
-       /* Open handle on user */
-
-       CHECK_RPC_ERR_DEBUG(
-               smbcli_samr_open_user(cli, mem_ctx, &domain_pol,
-                                  SEC_RIGHTS_MAXIMUM_ALLOWED,
-                                  user_rid, &user_pol),
-               ("could not re-open existing user %s: %s\n",
-                acct_name, nt_errstr(result)));
-       
-       /* Create a random machine account password */
-
-       { 
-               char *str;
-               str = generate_random_str(DEFAULT_TRUST_ACCOUNT_PASSWORD_LENGTH);
-               clear_trust_password = strdup(str);
-       }
-
-       ucs2_pw_len = push_ucs2(NULL, ucs2_trust_password, 
-                               clear_trust_password, 
-                               sizeof(ucs2_trust_password), 0);
-                 
-       encode_pw_buffer((char *)pwbuf, ucs2_trust_password,
-                        ucs2_pw_len);
-
-       /* Set password on machine account */
-
-       ZERO_STRUCT(ctr);
-       ZERO_STRUCT(p24);
-
-       init_sam_user_info24(&p24, (char *)pwbuf,24);
-
-       ctr.switch_value = 24;
-       ctr.info.id24 = &p24;
-
-       CHECK_RPC_ERR(smbcli_samr_set_userinfo(cli, mem_ctx, &user_pol, 24, 
-                                           cli->user_session_key, &ctr),
-                     "error setting trust account password");
-
-       /* Why do we have to try to (re-)set the ACB to be the same as what
-          we passed in the samr_create_dom_user() call?  When a NT
-          workstation is joined to a domain by an administrator the
-          acb_info is set to 0x80.  For a normal user with "Add
-          workstations to the domain" rights the acb_info is 0x84.  I'm
-          not sure whether it is supposed to make a difference or not.  NT
-          seems to cope with either value so don't bomb out if the set
-          userinfo2 level 0x10 fails.  -tpot */
-
-       ZERO_STRUCT(ctr);
-       ctr.switch_value = 0x10;
-       ctr.info.id10 = &p10;
-
-       init_sam_user_info10(&p10, acb_info);
-
-       /* Ignoring the return value is necessary for joining a domain
-          as a normal user with "Add workstation to domain" privilege. */
-
-       result = smbcli_samr_set_userinfo2(cli, mem_ctx, &user_pol, 0x10, 
-                                       sess_key, &ctr);
-
-       /* Now store the secret in the secrets database */
-
-       strupper(domain);
-
-       if (!secrets_store_domain_sid(domain, &domain_sid)) {
-               DEBUG(0, ("error storing domain sid for %s\n", domain));
-               goto done;
-       }
-
-       if (!secrets_store_machine_password(clear_trust_password)) {
-               DEBUG(0, ("error storing plaintext domain secrets for %s\n", domain));
-       }
-
-       /* Now check the whole process from top-to-bottom */
-       smbcli_samr_close(cli, mem_ctx, &user_pol);
-       smbcli_nt_session_close(cli); /* Done with this pipe */
-
-       retval = net_rpc_join_ok(domain);
-       
-done:
-       /* Close down pipe - this will clean up open policy handles */
-
-       if (cli->nt_pipe_fnum)
-               smbcli_nt_session_close(cli);
-
-       /* Display success or failure */
-
-       if (retval != 0) {
-               trust_password_delete(domain);
-               fprintf(stderr,"Unable to join domain %s.\n",domain);
-       } else {
-               printf("Joined domain %s.\n",domain);
-       }
-       
-       smbcli_shutdown(cli);
-
-       SAFE_FREE(clear_trust_password);
-
-       return retval;
-}
-
-
-/**
- * check that a join is OK
- *
- * @return A shell status integer (0 for success)
- *
- **/
-int net_rpc_testjoin(int argc, const char **argv) 
-{
-       char *domain = smb_xstrdup(lp_workgroup());
-
-       /* Display success or failure */
-       if (net_rpc_join_ok(domain) != 0) {
-               fprintf(stderr,"Join to domain '%s' is not valid\n",domain);
-               free(domain);
-               return -1;
-       }
-
-       printf("Join to '%s' is OK\n",domain);
-       free(domain);
-       return 0;
-}
diff --git a/source4/utils/net_rpc_samsync.c b/source4/utils/net_rpc_samsync.c
deleted file mode 100644 (file)
index 1b0cbc6..0000000
+++ /dev/null
@@ -1,725 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   dump the remote SAM using rpc samsync operations
-
-   Copyright (C) Andrew Tridgell 2002
-   Copyright (C) Tim Potter 2001,2002
-   Modified by Volker Lendecke 2002
-
-   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.h"
-
-extern DOM_SID global_sid_Builtin; 
-
-static void display_group_mem_info(uint32_t rid, SAM_GROUP_MEM_INFO *g)
-{
-       int i;
-       d_printf("Group mem %u: ", rid);
-       for (i=0;i<g->num_members;i++) {
-               d_printf("%u ", g->rids[i]);
-       }
-       d_printf("\n");
-}
-
-static void display_alias_info(uint32_t rid, SAM_ALIAS_INFO *a)
-{
-       d_printf("Alias '%s' ", unistr2_static(&a->uni_als_name));
-       d_printf("desc='%s' rid=%u\n", unistr2_static(&a->uni_als_desc), a->als_rid);
-}
-
-static void display_alias_mem(uint32_t rid, SAM_ALIAS_MEM_INFO *a)
-{
-       int i;
-       d_printf("Alias rid %u: ", rid);
-       for (i=0;i<a->num_members;i++) {
-               d_printf("%s ", sid_string_static(&a->sids[i].sid));
-       }
-       d_printf("\n");
-}
-
-static void display_account_info(uint32_t rid, SAM_ACCOUNT_INFO *a)
-{
-       fstring hex_nt_passwd, hex_lm_passwd;
-       uint8_t lm_passwd[16], nt_passwd[16];
-       static uint8_t zero_buf[16];
-
-       /* Decode hashes from password hash (if they are not NULL) */
-       
-       if (memcmp(a->pass.buf_lm_pwd, zero_buf, 16) != 0) {
-               sam_pwd_hash(a->user_rid, a->pass.buf_lm_pwd, lm_passwd, 0);
-               smbpasswd_sethexpwd(hex_lm_passwd, lm_passwd, a->acb_info);
-       } else {
-               smbpasswd_sethexpwd(hex_lm_passwd, NULL, 0);
-       }
-
-       if (memcmp(a->pass.buf_nt_pwd, zero_buf, 16) != 0) {
-               sam_pwd_hash(a->user_rid, a->pass.buf_nt_pwd, nt_passwd, 0);
-               smbpasswd_sethexpwd(hex_nt_passwd, nt_passwd, a->acb_info);
-       } else {
-               smbpasswd_sethexpwd(hex_nt_passwd, NULL, 0);
-       }
-       
-       printf("%s:%d:%s:%s:%s:LCT-0\n", unistr2_static(&a->uni_acct_name),
-              a->user_rid, hex_lm_passwd, hex_nt_passwd,
-              smbpasswd_encode_acb_info(a->acb_info));
-}
-
-static void display_domain_info(SAM_DOMAIN_INFO *a)
-{
-       d_printf("Domain name: %s\n", unistr2_static(&a->uni_dom_name));
-}
-
-static void display_group_info(uint32_t rid, SAM_GROUP_INFO *a)
-{
-       d_printf("Group '%s' ", unistr2_static(&a->uni_grp_name));
-       d_printf("desc='%s', rid=%u\n", unistr2_static(&a->uni_grp_desc), rid);
-}
-
-static void display_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta)
-{
-       switch (hdr_delta->type) {
-       case SAM_DELTA_ACCOUNT_INFO:
-               display_account_info(hdr_delta->target_rid, &delta->account_info);
-               break;
-       case SAM_DELTA_GROUP_MEM:
-               display_group_mem_info(hdr_delta->target_rid, &delta->grp_mem_info);
-               break;
-       case SAM_DELTA_ALIAS_INFO:
-               display_alias_info(hdr_delta->target_rid, &delta->alias_info);
-               break;
-       case SAM_DELTA_ALIAS_MEM:
-               display_alias_mem(hdr_delta->target_rid, &delta->als_mem_info);
-               break;
-       case SAM_DELTA_DOMAIN_INFO:
-               display_domain_info(&delta->domain_info);
-               break;
-       case SAM_DELTA_GROUP_INFO:
-               display_group_info(hdr_delta->target_rid, &delta->group_info);
-               break;
-       default:
-               d_printf("Unknown delta record type %d\n", hdr_delta->type);
-               break;
-       }
-}
-
-
-static void dump_database(struct smbcli_state *cli, uint_t db_type, DOM_CRED *ret_creds)
-{
-       uint_t sync_context = 0;
-        NTSTATUS result;
-       int i;
-        TALLOC_CTX *mem_ctx;
-        SAM_DELTA_HDR *hdr_deltas;
-        SAM_DELTA_CTR *deltas;
-        uint32_t num_deltas;
-
-       if (!(mem_ctx = talloc_init("dump_database"))) {
-               return;
-       }
-
-       d_printf("Dumping database %u\n", db_type);
-
-       do {
-               result = smbcli_netlogon_sam_sync(cli, mem_ctx, ret_creds, db_type,
-                                              sync_context,
-                                              &num_deltas, &hdr_deltas, &deltas);
-               clnt_deal_with_creds(cli->sess_key, &(cli->clnt_cred), ret_creds);
-                for (i = 0; i < num_deltas; i++) {
-                       display_sam_entry(&hdr_deltas[i], &deltas[i]);
-                }
-               sync_context += 1;
-       } while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES));
-
-       talloc_destroy(mem_ctx);
-}
-
-/* dump sam database via samsync rpc calls */
-int rpc_samdump(int argc, const char **argv)
-{
-        NTSTATUS result;
-       struct smbcli_state *cli = NULL;
-       uint8_t trust_password[16];
-       DOM_CRED ret_creds;
-       uint32_t neg_flags = 0x000001ff;
-
-
-       ZERO_STRUCT(ret_creds);
-
-       /* Connect to remote machine */
-       if (!(cli = net_make_ipc_connection(NET_FLAGS_ANONYMOUS | NET_FLAGS_PDC))) {
-               return 1;
-       }
-
-       if (!smbcli_nt_session_open(cli, PI_NETLOGON)) {
-               DEBUG(0,("Error connecting to NETLOGON pipe\n"));
-               goto fail;
-       }
-
-       if (!secrets_fetch_trust_account_password(lp_workgroup(), trust_password, NULL)) {
-               d_printf("Could not retrieve domain trust secret\n");
-               goto fail;
-       }
-       
-       result = smbcli_nt_setup_creds(cli, SEC_CHAN_BDC,  trust_password, &neg_flags, 2);
-       if (!NT_STATUS_IS_OK(result)) {
-               d_printf("Failed to setup BDC creds\n");
-               goto fail;
-       }
-
-       dump_database(cli, SAM_DATABASE_DOMAIN, &ret_creds);
-       dump_database(cli, SAM_DATABASE_BUILTIN, &ret_creds);
-       dump_database(cli, SAM_DATABASE_PRIVS, &ret_creds);
-
-       smbcli_nt_session_close(cli);
-        
-        return 0;
-
-fail:
-       if (cli) {
-               smbcli_nt_session_close(cli);
-       }
-       return -1;
-}
-
-/* Convert a SAM_ACCOUNT_DELTA to a SAM_ACCOUNT. */
-
-static NTSTATUS
-sam_account_from_delta(SAM_ACCOUNT *account, SAM_ACCOUNT_INFO *delta)
-{
-       fstring s;
-       uint8_t lm_passwd[16], nt_passwd[16];
-       static uint8_t zero_buf[16];
-
-       /* Username, fullname, home dir, dir drive, logon script, acct
-          desc, workstations, profile. */
-
-       unistr2_to_ascii(s, &delta->uni_acct_name, sizeof(s) - 1);
-       pdb_set_nt_username(account, s, PDB_CHANGED);
-
-       /* Unix username is the same - for sainity */
-       pdb_set_username(account, s, PDB_CHANGED);
-
-       unistr2_to_ascii(s, &delta->uni_full_name, sizeof(s) - 1);
-       pdb_set_fullname(account, s, PDB_CHANGED);
-
-       unistr2_to_ascii(s, &delta->uni_home_dir, sizeof(s) - 1);
-       pdb_set_homedir(account, s, PDB_CHANGED);
-
-       unistr2_to_ascii(s, &delta->uni_dir_drive, sizeof(s) - 1);
-       pdb_set_dir_drive(account, s, PDB_CHANGED);
-
-       unistr2_to_ascii(s, &delta->uni_logon_script, sizeof(s) - 1);
-       pdb_set_logon_script(account, s, PDB_CHANGED);
-
-       unistr2_to_ascii(s, &delta->uni_acct_desc, sizeof(s) - 1);
-       pdb_set_acct_desc(account, s, PDB_CHANGED);
-
-       unistr2_to_ascii(s, &delta->uni_workstations, sizeof(s) - 1);
-       pdb_set_workstations(account, s, PDB_CHANGED);
-
-       unistr2_to_ascii(s, &delta->uni_profile, sizeof(s) - 1);
-       pdb_set_profile_path(account, s, PDB_CHANGED);
-
-       /* User and group sid */
-
-       pdb_set_user_sid_from_rid(account, delta->user_rid, PDB_CHANGED);
-       pdb_set_group_sid_from_rid(account, delta->group_rid, PDB_CHANGED);
-
-       /* Logon and password information */
-
-       pdb_set_logon_time(account, nt_time_to_unix(&delta->logon_time), PDB_CHANGED);
-       pdb_set_logoff_time(account, nt_time_to_unix(&delta->logoff_time),
-                           PDB_CHANGED);
-       pdb_set_logon_divs(account, delta->logon_divs, PDB_CHANGED);
-
-       /* TODO: logon hours */
-       /* TODO: bad password count */
-       /* TODO: logon count */
-
-       pdb_set_pass_last_set_time(
-               account, nt_time_to_unix(&delta->pwd_last_set_time), PDB_CHANGED);
-
-       pdb_set_kickoff_time(account, get_time_t_max(), PDB_CHANGED);
-
-       /* Decode hashes from password hash 
-          Note that win2000 may send us all zeros for the hashes if it doesn't 
-          think this channel is secure enough - don't set the passwords at all
-          in that case
-        */
-       if (memcmp(delta->pass.buf_lm_pwd, zero_buf, 16) != 0) {
-               sam_pwd_hash(delta->user_rid, delta->pass.buf_lm_pwd, lm_passwd, 0);
-               pdb_set_lanman_passwd(account, lm_passwd, PDB_CHANGED);
-       }
-
-       if (memcmp(delta->pass.buf_nt_pwd, zero_buf, 16) != 0) {
-               sam_pwd_hash(delta->user_rid, delta->pass.buf_nt_pwd, nt_passwd, 0);
-               pdb_set_nt_passwd(account, nt_passwd, PDB_CHANGED);
-       }
-
-       /* TODO: account expiry time */
-
-       pdb_set_acct_ctrl(account, delta->acb_info, PDB_CHANGED);
-       return NT_STATUS_OK;
-}
-
-static NTSTATUS
-fetch_account_info(uint32_t rid, SAM_ACCOUNT_INFO *delta)
-{
-       NTSTATUS nt_ret;
-       fstring account;
-       pstring add_script;
-       SAM_ACCOUNT *sam_account=NULL;
-       GROUP_MAP map;
-       struct group *grp;
-       DOM_SID sid;
-       BOOL try_add = False;
-
-       fstrcpy(account, unistr2_static(&delta->uni_acct_name));
-       d_printf("Creating account: %s\n", account);
-
-       if (!NT_STATUS_IS_OK(nt_ret = pdb_init_sam(&sam_account)))
-               return nt_ret;
-
-       if (!pdb_getsampwnam(sam_account, account)) {
-               /* Create appropriate user */
-               if (delta->acb_info & ACB_NORMAL) {
-                       pstrcpy(add_script, lp_adduser_script());
-               } else if ( (delta->acb_info & ACB_WSTRUST) ||
-                           (delta->acb_info & ACB_SVRTRUST) ) {
-                       pstrcpy(add_script, lp_addmachine_script());
-               } else {
-                       DEBUG(1, ("Unknown user type: %s\n",
-                                 smbpasswd_encode_acb_info(delta->acb_info)));
-                       pdb_free_sam(&sam_account);
-                       return NT_STATUS_NO_SUCH_USER;
-               }
-               if (*add_script) {
-                       int add_ret;
-                       all_string_sub(add_script, "%u", account,
-                                      sizeof(account));
-                       add_ret = smbrun(add_script,NULL);
-                       DEBUG(1,("fetch_account: Running the command `%s' "
-                                "gave %d\n", add_script, add_ret));
-               }
-
-               try_add = True;
-       }
-
-       sam_account_from_delta(sam_account, delta);
-
-       if (try_add) { 
-               if (!pdb_add_sam_account(sam_account)) {
-                       DEBUG(1, ("SAM Account for %s failed to be added to the passdb!\n",
-                                 account));
-               }
-       } else {
-               if (!pdb_update_sam_account(sam_account)) {
-                       DEBUG(1, ("SAM Account for %s failed to be updated in the passdb!\n",
-                                 account));
-               }
-       }
-
-       sid = *pdb_get_group_sid(sam_account);
-
-       if (!pdb_getgrsid(&map, sid, False)) {
-               DEBUG(0, ("Primary group of %s has no mapping!\n",
-                         pdb_get_username(sam_account)));
-               pdb_free_sam(&sam_account);
-               return NT_STATUS_NO_SUCH_GROUP;
-       }
-
-       if (!(grp = getgrgid(map.gid))) {
-               DEBUG(0, ("Could not find unix group %d for user %s (group SID=%s)\n", 
-                         map.gid, pdb_get_username(sam_account), sid_string_static(&sid)));
-               pdb_free_sam(&sam_account);
-               return NT_STATUS_NO_SUCH_GROUP;
-       }
-
-       smb_set_primary_group(grp->gr_name, pdb_get_username(sam_account));
-
-       pdb_free_sam(&sam_account);
-       return NT_STATUS_OK;
-}
-
-static NTSTATUS
-fetch_group_info(uint32_t rid, SAM_GROUP_INFO *delta)
-{
-       fstring name;
-       fstring comment;
-       struct group *grp = NULL;
-       DOM_SID group_sid;
-       fstring sid_string;
-       GROUP_MAP map;
-       BOOL insert = True;
-
-       unistr2_to_ascii(name, &delta->uni_grp_name, sizeof(name)-1);
-       unistr2_to_ascii(comment, &delta->uni_grp_desc, sizeof(comment)-1);
-
-       /* add the group to the mapping table */
-       sid_copy(&group_sid, get_global_sam_sid());
-       sid_append_rid(&group_sid, rid);
-       sid_to_string(sid_string, &group_sid);
-
-       if (pdb_getgrsid(&map, group_sid, False)) {
-               grp = getgrgid(map.gid);
-               insert = False;
-       }
-
-       if (grp == NULL)
-       {
-               gid_t gid;
-
-               /* No group found from mapping, find it from its name. */
-               if ((grp = getgrnam(name)) == NULL) {
-                               /* No appropriate group found, create one */
-                       d_printf("Creating unix group: '%s'\n", name);
-                       if (smb_create_group(name, &gid) != 0)
-                               return NT_STATUS_ACCESS_DENIED;
-                       if ((grp = getgrgid(gid)) == NULL)
-                               return NT_STATUS_ACCESS_DENIED;
-               }
-       }
-
-       map.gid = grp->gr_gid;
-       map.sid = group_sid;
-       map.sid_name_use = SID_NAME_DOM_GRP;
-       fstrcpy(map.nt_name, name);
-       fstrcpy(map.comment, comment);
-
-       map.priv_set.count = 0;
-       map.priv_set.set = NULL;
-
-       if (insert)
-               pdb_add_group_mapping_entry(&map);
-       else
-               pdb_update_group_mapping_entry(&map);
-
-       return NT_STATUS_OK;
-}
-
-static NTSTATUS
-fetch_group_mem_info(uint32_t rid, SAM_GROUP_MEM_INFO *delta)
-{
-       int i;
-       TALLOC_CTX *t = NULL;
-       char **nt_members = NULL;
-       char **unix_members;
-       DOM_SID group_sid;
-       GROUP_MAP map;
-       struct group *grp;
-
-       if (delta->num_members == 0) {
-               return NT_STATUS_OK;
-       }
-
-       sid_copy(&group_sid, get_global_sam_sid());
-       sid_append_rid(&group_sid, rid);
-
-       if (!get_domain_group_from_sid(group_sid, &map, False)) {
-               DEBUG(0, ("Could not find global group %d\n", rid));
-               return NT_STATUS_NO_SUCH_GROUP;
-       }
-
-       if (!(grp = getgrgid(map.gid))) {
-               DEBUG(0, ("Could not find unix group %d\n", map.gid));
-               return NT_STATUS_NO_SUCH_GROUP;
-       }
-
-       d_printf("Group members of %s: ", grp->gr_name);
-
-       if (!(t = talloc_init("fetch_group_mem_info"))) {
-               DEBUG(0, ("could not talloc_init\n"));
-               return NT_STATUS_NO_MEMORY;
-       }
-
-       nt_members = talloc_zero(t, sizeof(char *) * delta->num_members);
-
-       for (i=0; i<delta->num_members; i++) {
-               NTSTATUS nt_status;
-               SAM_ACCOUNT *member = NULL;
-               DOM_SID member_sid;
-
-               if (!NT_STATUS_IS_OK(nt_status = pdb_init_sam_talloc(t, &member))) {
-                       talloc_destroy(t);
-                       return nt_status;
-               }
-
-               sid_copy(&member_sid, get_global_sam_sid());
-               sid_append_rid(&member_sid, delta->rids[i]);
-
-               if (!pdb_getsampwsid(member, &member_sid)) {
-                       DEBUG(1, ("Found bogus group member: %d (member_sid=%s group=%s)\n",
-                                 delta->rids[i], sid_string_static(&member_sid), grp->gr_name));
-                       pdb_free_sam(&member);
-                       continue;
-               }
-
-               if (pdb_get_group_rid(member) == rid) {
-                       d_printf("%s(primary),", pdb_get_username(member));
-                       pdb_free_sam(&member);
-                       continue;
-               }
-               
-               d_printf("%s,", pdb_get_username(member));
-               nt_members[i] = talloc_strdup(t, pdb_get_username(member));
-               pdb_free_sam(&member);
-       }
-
-       d_printf("\n");
-
-       unix_members = grp->gr_mem;
-
-       while (*unix_members) {
-               BOOL is_nt_member = False;
-               for (i=0; i<delta->num_members; i++) {
-                       if (nt_members[i] == NULL) {
-                               /* This was a primary group */
-                               continue;
-                       }
-
-                       if (strcmp(*unix_members, nt_members[i]) == 0) {
-                               is_nt_member = True;
-                               break;
-                       }
-               }
-               if (!is_nt_member) {
-                       /* We look at a unix group member that is not
-                          an nt group member. So, remove it. NT is
-                          boss here. */
-                       smb_delete_user_group(grp->gr_name, *unix_members);
-               }
-               unix_members += 1;
-       }
-
-       for (i=0; i<delta->num_members; i++) {
-               BOOL is_unix_member = False;
-
-               if (nt_members[i] == NULL) {
-                       /* This was the primary group */
-                       continue;
-               }
-
-               unix_members = grp->gr_mem;
-
-               while (*unix_members) {
-                       if (strcmp(*unix_members, nt_members[i]) == 0) {
-                               is_unix_member = True;
-                               break;
-                       }
-                       unix_members += 1;
-               }
-
-               if (!is_unix_member) {
-                       /* We look at a nt group member that is not a
-                           unix group member currently. So, add the nt
-                           group member. */
-                       smb_add_user_group(grp->gr_name, nt_members[i]);
-               }
-       }
-       
-       talloc_destroy(t);
-       return NT_STATUS_OK;
-}
-
-static NTSTATUS fetch_alias_info(uint32_t rid, SAM_ALIAS_INFO *delta,
-                                DOM_SID dom_sid)
-{
-       fstring name;
-       fstring comment;
-       struct group *grp = NULL;
-       DOM_SID alias_sid;
-       fstring sid_string;
-       GROUP_MAP map;
-       BOOL insert = True;
-
-       unistr2_to_ascii(name, &delta->uni_als_name, sizeof(name)-1);
-       unistr2_to_ascii(comment, &delta->uni_als_desc, sizeof(comment)-1);
-
-       /* Find out whether the group is already mapped */
-       sid_copy(&alias_sid, &dom_sid);
-       sid_append_rid(&alias_sid, rid);
-       sid_to_string(sid_string, &alias_sid);
-
-       if (pdb_getgrsid(&map, alias_sid, False)) {
-               grp = getgrgid(map.gid);
-               insert = False;
-       }
-
-       if (grp == NULL) {
-               gid_t gid;
-
-               /* No group found from mapping, find it from its name. */
-               if ((grp = getgrnam(name)) == NULL) {
-                               /* No appropriate group found, create one */
-                       d_printf("Creating unix group: '%s'\n", name);
-                       if (smb_create_group(name, &gid) != 0)
-                               return NT_STATUS_ACCESS_DENIED;
-                       if ((grp = getgrgid(gid)) == NULL)
-                               return NT_STATUS_ACCESS_DENIED;
-               }
-       }
-
-       map.gid = grp->gr_gid;
-       map.sid = alias_sid;
-
-       if (sid_equal(&dom_sid, &global_sid_Builtin))
-               map.sid_name_use = SID_NAME_WKN_GRP;
-       else
-               map.sid_name_use = SID_NAME_ALIAS;
-
-       fstrcpy(map.nt_name, name);
-       fstrcpy(map.comment, comment);
-
-       map.priv_set.count = 0;
-       map.priv_set.set = NULL;
-
-       if (insert)
-               pdb_add_group_mapping_entry(&map);
-       else
-               pdb_update_group_mapping_entry(&map);
-
-       return NT_STATUS_OK;
-}
-
-static NTSTATUS
-fetch_alias_mem(uint32_t rid, SAM_ALIAS_MEM_INFO *delta, DOM_SID dom_sid)
-{
-       
-       return NT_STATUS_OK;
-}
-
-static void
-fetch_sam_entry(SAM_DELTA_HDR *hdr_delta, SAM_DELTA_CTR *delta,
-               DOM_SID dom_sid)
-{
-       switch(hdr_delta->type) {
-       case SAM_DELTA_ACCOUNT_INFO:
-               fetch_account_info(hdr_delta->target_rid,
-                                  &delta->account_info);
-               break;
-       case SAM_DELTA_GROUP_INFO:
-               fetch_group_info(hdr_delta->target_rid,
-                                &delta->group_info);
-               break;
-       case SAM_DELTA_GROUP_MEM:
-               fetch_group_mem_info(hdr_delta->target_rid,
-                                    &delta->grp_mem_info);
-               break;
-       case SAM_DELTA_ALIAS_INFO:
-               fetch_alias_info(hdr_delta->target_rid,
-                                &delta->alias_info, dom_sid);
-               break;
-       case SAM_DELTA_ALIAS_MEM:
-               fetch_alias_mem(hdr_delta->target_rid,
-                               &delta->als_mem_info, dom_sid);
-               break;
-       default:
-               d_printf("Unknown delta record type %d\n", hdr_delta->type);
-               break;
-       }
-}
-
-static void
-fetch_database(struct smbcli_state *cli, uint_t db_type, DOM_CRED *ret_creds,
-              DOM_SID dom_sid)
-{
-       uint_t sync_context = 0;
-        NTSTATUS result;
-       int i;
-        TALLOC_CTX *mem_ctx;
-        SAM_DELTA_HDR *hdr_deltas;
-        SAM_DELTA_CTR *deltas;
-        uint32_t num_deltas;
-
-       if (!(mem_ctx = talloc_init("fetch_database"))) {
-               return;
-       }
-
-       d_printf("Fetching database %u\n", db_type);
-
-       do {
-               result = smbcli_netlogon_sam_sync(cli, mem_ctx, ret_creds,
-                                              db_type, sync_context,
-                                              &num_deltas,
-                                              &hdr_deltas, &deltas);
-               clnt_deal_with_creds(cli->sess_key, &(cli->clnt_cred),
-                                    ret_creds);
-                for (i = 0; i < num_deltas; i++) {
-                       fetch_sam_entry(&hdr_deltas[i], &deltas[i], dom_sid);
-                }
-               sync_context += 1;
-       } while (NT_STATUS_EQUAL(result, STATUS_MORE_ENTRIES));
-
-       talloc_destroy(mem_ctx);
-}
-
-/* dump sam database via samsync rpc calls */
-int rpc_vampire(int argc, const char **argv)
-{
-        NTSTATUS result;
-       struct smbcli_state *cli = NULL;
-       uint8_t trust_password[16];
-       DOM_CRED ret_creds;
-       uint32_t neg_flags = 0x000001ff;
-       DOM_SID dom_sid;
-
-       ZERO_STRUCT(ret_creds);
-
-       /* Connect to remote machine */
-       if (!(cli = net_make_ipc_connection(NET_FLAGS_ANONYMOUS |
-                                           NET_FLAGS_PDC))) {
-               return 1;
-       }
-
-       if (!smbcli_nt_session_open(cli, PI_NETLOGON)) {
-               DEBUG(0,("Error connecting to NETLOGON pipe\n"));
-               goto fail;
-       }
-
-       if (!secrets_fetch_trust_account_password(lp_workgroup(),
-                                                 trust_password, NULL)) {
-               d_printf("Could not retrieve domain trust secret\n");
-               goto fail;
-       }
-       
-       result = smbcli_nt_setup_creds(cli, SEC_CHAN_BDC,  trust_password,
-                                   &neg_flags, 2);
-       if (!NT_STATUS_IS_OK(result)) {
-               d_printf("Failed to setup BDC creds\n");
-               goto fail;
-       }
-
-       dom_sid = *get_global_sam_sid();
-       fetch_database(cli, SAM_DATABASE_DOMAIN, &ret_creds, dom_sid);
-
-       sid_copy(&dom_sid, &global_sid_Builtin);
-       fetch_database(cli, SAM_DATABASE_BUILTIN, &ret_creds, dom_sid);
-
-       /* Currently we crash on PRIVS somewhere in unmarshalling */
-       /* Dump_database(cli, SAM_DATABASE_PRIVS, &ret_creds); */
-
-       smbcli_nt_session_close(cli);
-        
-        return 0;
-
-fail:
-       if (cli) {
-               smbcli_nt_session_close(cli);
-       }
-       return -1;
-}
diff --git a/source4/utils/net_time.c b/source4/utils/net_time.c
deleted file mode 100644 (file)
index f7220c9..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/* 
-   Samba Unix/Linux SMB client library 
-   net time command
-   Copyright (C) 2001 Andrew Tridgell (tridge@samba.org)
-
-   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.h"
-
-
-/*
-  return the time on a server. This does not require any authentication
-*/
-static time_t smbcli_servertime(const char *host, struct in_addr *ip, int *zone)
-{
-       struct nmb_name calling, called;
-       time_t ret = 0;
-       struct smbcli_state *cli = NULL;
-
-       cli = smbcli_initialise(NULL);
-       if (!cli) goto done;
-
-       if (!smbcli_connect(cli, host, ip)) {
-               fprintf(stderr,"Can't contact server\n");
-               goto done;
-       }
-
-       make_nmb_name(&calling, lp_netbios_name(), 0x0);
-       if (host) {
-               make_nmb_name(&called, host, 0x20);
-       } else {
-               make_nmb_name(&called, "*SMBSERVER", 0x20);
-       }
-
-       if (!smbcli_session_request(cli, &calling, &called)) {
-               fprintf(stderr,"Session request failed\n");
-               goto done;
-       }
-       if (!smbcli_negprot(cli)) {
-               fprintf(stderr,"Protocol negotiation failed\n");
-               goto done;
-       }
-
-       ret = cli->servertime;
-       if (zone) *zone = cli->serverzone;
-
-done:
-       if (cli) smbcli_shutdown(cli);
-       return ret;
-}
-
-/* find the servers time on the opt_host host */
-static time_t nettime(int *zone)
-{
-       return smbcli_servertime(opt_host, opt_have_ip? &opt_dest_ip : NULL, zone);
-}
-
-/* return a time as a string ready to be passed to /bin/date */
-static char *systime(time_t t)
-{
-       static char s[100];
-       struct tm *tm;
-
-       tm = localtime(&t);
-       
-       snprintf(s, sizeof(s), "%02d%02d%02d%02d%04d.%02d", 
-                tm->tm_mon+1, tm->tm_mday, tm->tm_hour, 
-                tm->tm_min, tm->tm_year + 1900, tm->tm_sec);
-       return s;
-}
-
-int net_time_usage(int argc, const char **argv)
-{
-       d_printf(
-"net time\n\tdisplays time on a server\n\n"\
-"net time system\n\tdisplays time on a server in a format ready for /bin/date\n\n"\
-"net time set\n\truns /bin/date with the time from the server\n\n"\
-"net time zone\n\tdisplays the timezone in hours from GMT on the remote computer\n\n"\
-"\n");
-       net_common_flags_usage(argc, argv);
-       return -1;
-}
-
-/* try to set the system clock using /bin/date */
-static int net_time_set(int argc, const char **argv)
-{
-       time_t t = nettime(NULL);
-       char *cmd;
-
-       if (t == 0) return -1;
-       
-       /* yes, I know this is cheesy. Use "net time system" if you want to 
-          roll your own. I'm putting this in as it works on a large number
-          of systems and the user has a choice in whether its used or not */
-       asprintf(&cmd, "/bin/date %s", systime(t));
-       system(cmd);
-       free(cmd);
-
-       return 0;
-}
-
-/* display the time on a remote box in a format ready for /bin/date */
-static int net_time_system(int argc, const char **argv)
-{
-       time_t t = nettime(NULL);
-
-       if (t == 0) return -1;
-
-       printf("%s\n", systime(t));
-
-       return 0;
-}
-
-/* display the time on a remote box in a format ready for /bin/date */
-static int net_time_zone(int argc, const char **argv)
-{
-       int zone = 0;
-       int hours, mins;
-       char zsign;
-       time_t t;
-
-       t = nettime(&zone);
-
-       if (t == 0) return -1;
-
-       zsign = (zone > 0) ? '-' : '+';
-       if (zone < 0) zone = -zone;
-
-       zone /= 60;
-       hours = zone / 60;
-       mins = zone % 60;
-
-       printf("%c%02d%02d\n", zsign, hours, mins);
-
-       return 0;
-}
-
-/* display or set the time on a host */
-int net_time(int argc, const char **argv)
-{
-       time_t t;
-       struct functable func[] = {
-               {"SYSTEM", net_time_system},
-               {"SET", net_time_set},
-               {"ZONE", net_time_zone},
-               {NULL, NULL}
-       };
-
-       if (!opt_host && !opt_have_ip && 
-           !find_master_ip(opt_target_workgroup, &opt_dest_ip)) {
-               d_printf("Could not locate a time server.  Try "\
-                                "specifying a target host.\n");
-               net_time_usage(argc,argv);
-               return -1;
-       }
-
-       if (argc != 0) {
-               return net_run_function(argc, argv, func, net_time_usage);
-       }
-
-       /* default - print the time */
-       t = smbcli_servertime(opt_host, opt_have_ip? &opt_dest_ip : NULL, NULL);
-       if (t == 0) return -1;
-
-       d_printf("%s", ctime(&t));
-       return 0;
-}