diff options
author | cvs2svn Import User <samba-bugs@samba.org> | 2001-05-31 14:41:55 +0000 |
---|---|---|
committer | cvs2svn Import User <samba-bugs@samba.org> | 2001-05-31 14:41:55 +0000 |
commit | 4905806659c79fdcf28103a16afb9a30dfdd8afb (patch) | |
tree | 7e96d244cbabd9499f08e15d1ed71d4a28180aba | |
parent | d9eae486e05d53d1e38647f8673dc5cc8287c769 (diff) | |
parent | a5470a6bce218533bdbd238f21f216d7f76b1f88 (diff) | |
download | samba-4905806659c79fdcf28103a16afb9a30dfdd8afb.tar.gz samba-4905806659c79fdcf28103a16afb9a30dfdd8afb.tar.xz samba-4905806659c79fdcf28103a16afb9a30dfdd8afb.zip |
This commit was manufactured by cvs2svn to create branch
'SAMBA_2_2_RELEASE'.
-rw-r--r-- | examples/libsmbclient/README | 8 | ||||
-rw-r--r-- | source/include/util_getent.h | 45 | ||||
-rw-r--r-- | source/libsmb/cli_netlogon.c | 128 | ||||
-rw-r--r-- | source/libsmb/cli_srvsvc.c | 128 | ||||
-rw-r--r-- | testsuite/nsswitch/login.exp | 102 |
5 files changed, 411 insertions, 0 deletions
diff --git a/examples/libsmbclient/README b/examples/libsmbclient/README new file mode 100644 index 00000000000..d9a9f829174 --- /dev/null +++ b/examples/libsmbclient/README @@ -0,0 +1,8 @@ +Some simple example programs for libsmbclient ... + +testsmbc.c is kinda broken as it has many hardcoded bits in it + +tree.c is an example of how you might do some of these things with GTK+ +It needs lots of work but shows you some ways to use libsmbclient. + +Richard Sharpe, 17-May-2001 ... diff --git a/source/include/util_getent.h b/source/include/util_getent.h new file mode 100644 index 00000000000..11926b89641 --- /dev/null +++ b/source/include/util_getent.h @@ -0,0 +1,45 @@ +/* + Unix SMB/Netbios implementation. + Version 3.0 + Samba utility functions + Copyright (C) Simo Sorce 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. +*/ + +/* element for a single linked list of group entries */ +/* replace the use of struct group in some cases */ +/* used by getgrent_list() */ +struct sys_grent { + char *gr_name; + char *gr_passwd; + gid_t gr_gid; + char **gr_mem; + struct sys_grent *next; +}; + +/* element for a single linked list of passwd entries */ +/* replace the use of struct passwd in some cases */ +/* used by getpwent_list() */ +struct sys_pwent { + char *pw_name; + char *pw_passwd; + uid_t pw_uid; + gid_t pw_gid; + char *pw_gecos; + char *pw_dir; + char *pw_shell; + struct sys_pwent *next; +}; diff --git a/source/libsmb/cli_netlogon.c b/source/libsmb/cli_netlogon.c new file mode 100644 index 00000000000..47b7c2f22ec --- /dev/null +++ b/source/libsmb/cli_netlogon.c @@ -0,0 +1,128 @@ +/* + Unix SMB/Netbios implementation. + Version 1.9. + NT Domain Authentication SMB / MSRPC client + Copyright (C) Andrew Tridgell 1994-2000 + Copyright (C) Luke Kenneth Casson Leighton 1996-2000 + 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" + +/* Opens a SMB connection to the netlogon pipe */ + +struct cli_state *cli_netlogon_initialise(struct cli_state *cli, + char *system_name, + struct ntuser_creds *creds) +{ + struct in_addr dest_ip; + struct nmb_name calling, called; + fstring dest_host; + extern pstring global_myname; + struct ntuser_creds anon; + + /* Initialise cli_state information */ + + if (!cli_initialise(cli)) { + return NULL; + } + + if (!creds) { + ZERO_STRUCT(anon); + anon.pwd.null_pwd = 1; + creds = &anon; + } + + cli_init_creds(cli, creds); + + /* Establish a SMB connection */ + + if (!resolve_srv_name(system_name, dest_host, &dest_ip)) { + return NULL; + } + + make_nmb_name(&called, dns_to_netbios_name(dest_host), 0x20); + make_nmb_name(&calling, dns_to_netbios_name(global_myname), 0); + + if (!cli_establish_connection(cli, dest_host, &dest_ip, &calling, + &called, "IPC$", "IPC", False, True)) { + return NULL; + } + + /* Open a NT session thingy */ + + if (!cli_nt_session_open(cli, PIPE_NETLOGON)) { + cli_shutdown(cli); + return NULL; + } + + return cli; +} + +/* Shut down a SMB connection to the netlogon pipe */ + +void cli_netlogon_shutdown(struct cli_state *cli) +{ + if (cli->fd != -1) cli_ulogoff(cli); + cli_shutdown(cli); +} + +/* Logon Control 2 */ + +uint32 cli_netlogon_logon_ctrl2(struct cli_state *cli, TALLOC_CTX *mem_ctx, + uint32 query_level) +{ + prs_struct qbuf, rbuf; + NET_Q_LOGON_CTRL2 q; + NET_R_LOGON_CTRL2 r; + uint32 result = NT_STATUS_UNSUCCESSFUL; + + ZERO_STRUCT(q); + ZERO_STRUCT(r); + + /* Initialise parse structures */ + + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); + + /* Initialise input parameters */ + + init_net_q_logon_ctrl2(&q, cli->srv_name_slash, query_level); + + /* Marshall data and send request */ + + if (!net_io_q_logon_ctrl2("", &q, &qbuf, 0) || + !rpc_api_pipe_req(cli, NET_LOGON_CTRL2, &qbuf, &rbuf)) { + result = NT_STATUS_UNSUCCESSFUL; + goto done; + } + + /* Unmarshall response */ + + if (!net_io_r_logon_ctrl2("", &r, &rbuf, 0)) { + result = NT_STATUS_UNSUCCESSFUL; + goto done; + } + + result = r.status; + + done: + prs_mem_free(&qbuf); + prs_mem_free(&rbuf); + + return result; +} diff --git a/source/libsmb/cli_srvsvc.c b/source/libsmb/cli_srvsvc.c new file mode 100644 index 00000000000..8209d9301f1 --- /dev/null +++ b/source/libsmb/cli_srvsvc.c @@ -0,0 +1,128 @@ +/* + Unix SMB/Netbios implementation. + Version 1.9. + NT Domain Authentication SMB / MSRPC client + Copyright (C) Andrew Tridgell 1994-2000 + Copyright (C) Luke Kenneth Casson Leighton 1996-2000 + 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" + +/* Opens a SMB connection to the svrsvc pipe */ + +struct cli_state *cli_svrsvc_initialise(struct cli_state *cli, + char *system_name, + struct ntuser_creds *creds) +{ + struct in_addr dest_ip; + struct nmb_name calling, called; + fstring dest_host; + extern pstring global_myname; + struct ntuser_creds anon; + + /* Initialise cli_state information */ + + if (!cli_initialise(cli)) { + return NULL; + } + + if (!creds) { + ZERO_STRUCT(anon); + anon.pwd.null_pwd = 1; + creds = &anon; + } + + cli_init_creds(cli, creds); + + /* Establish a SMB connection */ + + if (!resolve_srv_name(system_name, dest_host, &dest_ip)) { + return NULL; + } + + make_nmb_name(&called, dns_to_netbios_name(dest_host), 0x20); + make_nmb_name(&calling, dns_to_netbios_name(global_myname), 0); + + if (!cli_establish_connection(cli, dest_host, &dest_ip, &calling, + &called, "IPC$", "IPC", False, True)) { + return NULL; + } + + /* Open a NT session thingy */ + + if (!cli_nt_session_open(cli, PIPE_SRVSVC)) { + cli_shutdown(cli); + return NULL; + } + + return cli; +} + +/* Shut down a SMB connection to the srvsvc pipe */ + +void cli_srvsvc_shutdown(struct cli_state *cli) +{ + if (cli->fd != -1) cli_ulogoff(cli); + cli_shutdown(cli); +} + +uint32 cli_srvsvc_net_srv_get_info(struct cli_state *cli, TALLOC_CTX *mem_ctx, + uint32 switch_value, SRV_INFO_CTR *ctr) +{ + prs_struct qbuf, rbuf; + SRV_Q_NET_SRV_GET_INFO q; + SRV_R_NET_SRV_GET_INFO r; + uint32 result; + + ZERO_STRUCT(q); + ZERO_STRUCT(r); + + /* Initialise parse structures */ + + prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); + prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); + + /* Initialise input parameters */ + + init_srv_q_net_srv_get_info(&q, cli->srv_name_slash, switch_value); + + /* Marshall data and send request */ + + if (!srv_io_q_net_srv_get_info("", &q, &qbuf, 0) || + !rpc_api_pipe_req(cli, SRV_NET_SRV_GET_INFO, &qbuf, &rbuf)) { + result = NT_STATUS_UNSUCCESSFUL; + goto done; + } + + /* Unmarshall response */ + + r.ctr = ctr; + + if (!srv_io_r_net_srv_get_info("", &r, &rbuf, 0)) { + result = NT_STATUS_UNSUCCESSFUL; + goto done; + } + + result = r.status; + + done: + prs_mem_free(&qbuf); + prs_mem_free(&rbuf); + + return result; +} diff --git a/testsuite/nsswitch/login.exp b/testsuite/nsswitch/login.exp new file mode 100644 index 00000000000..c2bb0e5a40a --- /dev/null +++ b/testsuite/nsswitch/login.exp @@ -0,0 +1,102 @@ +# +# @(#) Test logins using pam_winbind.so module using telnet +# + +load_lib util-defs.exp +load_lib nsswitch-config.exp + +# +# @(#) Test user can login +# + +spawn telnet localhost + +set test_desc "telnet localhost (login)" + +expect { + "login:" { } + timeout { fail "timed out in $test_desc"; return } + eof { fail "end of file in $test_desc"; return } +} + +send "$domain/$USER\r" + +set test_desc "telnet localhost (password)" + +expect { + "Password:" { } + timeout { fail "timed out in $test_desc"; return } + eof { fail "end of file in $test_desc"; return } +} + +send "$PASSWORD\r" + +expect { + "$ " { } + "Login incorrect" { fail "login incorrect"; return } + timeout { fail "timed out in $test_desc"; return } + eof { fail "end of file in $test_desc"; return } +} + +pass "login $domain/$USER" + +# +# @(#) Check supplementary group membership +# + +set test_desc "supplementary groups" + +# Get list of groups + +send "id -G\r" + +expect { + -re "((\[0-9]+ )*\[0-9]+\r)" { exp_continue; } + "$ " { } + timeout { fail "timed out in $test_desc"; return } + eof { fail "end of file in $test_desc"; return } +} + +set groups $expect_out(1,string) +set wb_groups [util_start "bin/wbinfo" "-r $domain/$USER"] + +verbose "id groups are $groups" +verbose "wbinfo groups are $wb_groups" + +# Check all groups from id are in wbinfo and vice-versa + +set failed 0 + +foreach { group } $groups { + set got_group 0 + foreach { wb_group } $wb_groups { + if { $wb_group == $group } { + set got_group 1 + break + } + } + + if { !$got_group } { + fail "group $group not in output of wbinfo -r" + set failed 1 + } +} + +foreach { wb_group } $wb_groups { + set got_group 0 + foreach { group } $groups { + if { $group == $wb_group } { + set got_group 1 + break + } + } + + if { !$got_group } { + fail "group $group not in output of id -G" + set failed 1 + } +} + +if { !$failed } { + pass "id/wbinfo groups match" +} |