dnscrypto-proxy: Support files updated.
[tomato.git] / release / src / router / samba / source / libsmb / passchange.c
blob335d9a7d1ab9bdd230bf5c015c67ffaffdce2f5d
1 /*
2 Unix SMB/Netbios implementation.
3 Version 1.9.
4 SMB client password change routine
5 Copyright (C) Andrew Tridgell 1994-1998
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 #include "includes.h"
25 extern pstring global_myname;
27 /*************************************************************
28 change a password on a remote machine using IPC calls
29 *************************************************************/
30 BOOL remote_password_change(const char *remote_machine, const char *user_name,
31 const char *old_passwd, const char *new_passwd,
32 char *err_str, size_t err_str_len)
34 struct nmb_name calling, called;
35 struct cli_state cli;
36 struct in_addr ip;
38 *err_str = '\0';
40 if(!resolve_name( remote_machine, &ip, 0x20)) {
41 slprintf(err_str, err_str_len-1, "unable to find an IP address for machine %s.\n",
42 remote_machine );
43 return False;
46 ZERO_STRUCT(cli);
48 if (!cli_initialise(&cli) || !cli_connect(&cli, remote_machine, &ip)) {
49 slprintf(err_str, err_str_len-1, "unable to connect to SMB server on machine %s. Error was : %s.\n",
50 remote_machine, cli_errstr(&cli) );
51 return False;
54 make_nmb_name(&calling, global_myname , 0x0);
55 make_nmb_name(&called , remote_machine, 0x20);
57 if (!cli_session_request(&cli, &calling, &called)) {
58 slprintf(err_str, err_str_len-1, "machine %s rejected the session setup. Error was : %s.\n",
59 remote_machine, cli_errstr(&cli) );
60 cli_shutdown(&cli);
61 return False;
64 cli.protocol = PROTOCOL_NT1;
66 if (!cli_negprot(&cli)) {
67 slprintf(err_str, err_str_len-1, "machine %s rejected the negotiate protocol. Error was : %s.\n",
68 remote_machine, cli_errstr(&cli) );
69 cli_shutdown(&cli);
70 return False;
74 * We should connect as the anonymous user here, in case
75 * the server has "must change password" checked...
76 * Thanks to <Nicholas.S.Jenkins@cdc.com> for this fix.
79 if (!cli_session_setup(&cli, "", "", 0, "", 0, "")) {
80 slprintf(err_str, err_str_len-1, "machine %s rejected the session setup. Error was : %s.\n",
81 remote_machine, cli_errstr(&cli) );
82 cli_shutdown(&cli);
83 return False;
86 if (!cli_send_tconX(&cli, "IPC$", "IPC", "", 1)) {
87 slprintf(err_str, err_str_len-1, "machine %s rejected the tconX on the IPC$ share. Error was : %s.\n",
88 remote_machine, cli_errstr(&cli) );
89 cli_shutdown(&cli);
90 return False;
93 if(!cli_oem_change_password(&cli, user_name, new_passwd, old_passwd)) {
94 slprintf(err_str, err_str_len-1, "machine %s rejected the password change: Error was : %s.\n",
95 remote_machine, cli_errstr(&cli) );
96 cli_shutdown(&cli);
97 return False;
100 cli_shutdown(&cli);
101 return True;