mirror of
https://github.com/samba-team/samba.git
synced 2025-03-27 22:50:26 +03:00
Try to catch up on the code I've put into HEAD that should be in 3.0:
- vorlan's hosts allow with DNS names patch - use x_fileno() in debug.c, not the struct directly. - check for server timeout on password change (was reporting success) - better error/status loggin in both the pam_winbind client and winbindd_pam server code. - (pdb_ldap) don't set the ldap version twice - we do it on every bind anyway. (This used to be commit 9fa1863d8e7788eda83911ca2610754486b33069)
This commit is contained in:
parent
0e7938ab5d
commit
35ac9d287f
@ -316,20 +316,20 @@ BOOL check_access(int sock, char **allow_list, char **deny_list)
|
||||
else
|
||||
{
|
||||
DEBUG (3, ("check_access: hostnames in host allow/deny list.\n"));
|
||||
ret = allow_access(deny_list,allow_list, get_socket_name(sock),
|
||||
ret = allow_access(deny_list,allow_list, get_socket_name(sock,True),
|
||||
get_socket_addr(sock));
|
||||
}
|
||||
|
||||
if (ret)
|
||||
{
|
||||
DEBUG(2,("Allowed connection from %s (%s)\n",
|
||||
only_ip ? "" : get_socket_name(sock),
|
||||
only_ip ? "" : get_socket_name(sock,True),
|
||||
get_socket_addr(sock)));
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG(0,("Denied connection from %s (%s)\n",
|
||||
only_ip ? "" : get_socket_name(sock),
|
||||
only_ip ? "" : get_socket_name(sock,True),
|
||||
get_socket_addr(sock)));
|
||||
}
|
||||
}
|
||||
|
@ -603,7 +603,7 @@ BOOL reopen_logs( void )
|
||||
(void)umask(oldumask);
|
||||
|
||||
/* Take over stderr to catch ouput into logs */
|
||||
if (dbf && sys_dup2(dbf->fd, 2) == -1) {
|
||||
if (dbf && sys_dup2(x_fileno(dbf), 2) == -1) {
|
||||
close_low_fds(True); /* Close stderr too, if dup2 can't point it
|
||||
at the logfile */
|
||||
}
|
||||
|
@ -832,7 +832,7 @@ void client_setfd(int fd)
|
||||
|
||||
char *client_name(void)
|
||||
{
|
||||
return get_socket_name(client_fd);
|
||||
return get_socket_name(client_fd,False);
|
||||
}
|
||||
|
||||
char *client_addr(void)
|
||||
@ -890,7 +890,7 @@ static BOOL matchname(char *remotehost,struct in_addr addr)
|
||||
/*******************************************************************
|
||||
return the DNS name of the remote end of a socket
|
||||
******************************************************************/
|
||||
char *get_socket_name(int fd)
|
||||
char *get_socket_name(int fd, BOOL force_lookup)
|
||||
{
|
||||
static pstring name_buf;
|
||||
static fstring addr_buf;
|
||||
@ -902,7 +902,7 @@ char *get_socket_name(int fd)
|
||||
situations won't work because many networks don't link dhcp
|
||||
with dns. To avoid the delay we avoid the lookup if
|
||||
possible */
|
||||
if (!lp_hostname_lookups()) {
|
||||
if (!lp_hostname_lookups() && (force_lookup == False)) {
|
||||
return get_socket_addr(fd);
|
||||
}
|
||||
|
||||
|
@ -343,13 +343,17 @@ BOOL cli_oem_change_password(struct cli_state *cli, const char *user, const char
|
||||
return False;
|
||||
}
|
||||
|
||||
if (cli_receive_trans(cli,SMBtrans,
|
||||
if (!cli_receive_trans(cli,SMBtrans,
|
||||
&rparam, &rprcnt,
|
||||
&rdata, &rdrcnt)) {
|
||||
if (rparam)
|
||||
cli->rap_error = SVAL(rparam,0);
|
||||
DEBUG(0,("cli_oem_change_password: Failed to recieve reply to password change for user %s\n",
|
||||
user ));
|
||||
return False;
|
||||
}
|
||||
|
||||
|
||||
if (rparam)
|
||||
cli->rap_error = SVAL(rparam,0);
|
||||
|
||||
SAFE_FREE(rparam);
|
||||
SAFE_FREE(rdata);
|
||||
|
||||
|
@ -134,22 +134,15 @@ static int pam_winbind_request(enum winbindd_cmd req_type,
|
||||
return PAM_SUCCESS;
|
||||
}
|
||||
|
||||
/* talk to winbindd */
|
||||
static int winbind_auth_request(const char *user, const char *pass, int ctrl)
|
||||
static int pam_winbind_request_log(enum winbindd_cmd req_type,
|
||||
struct winbindd_request *request,
|
||||
struct winbindd_response *response,
|
||||
int ctrl,
|
||||
const char *user)
|
||||
{
|
||||
struct winbindd_request request;
|
||||
struct winbindd_response response;
|
||||
int retval;
|
||||
|
||||
ZERO_STRUCT(request);
|
||||
|
||||
strncpy(request.data.auth.user, user,
|
||||
sizeof(request.data.auth.user)-1);
|
||||
|
||||
strncpy(request.data.auth.pass, pass,
|
||||
sizeof(request.data.auth.pass)-1);
|
||||
|
||||
retval = pam_winbind_request(WINBINDD_PAM_AUTH, &request, &response);
|
||||
retval = pam_winbind_request(req_type, request, response);
|
||||
|
||||
switch (retval) {
|
||||
case PAM_AUTH_ERR:
|
||||
@ -178,8 +171,16 @@ static int winbind_auth_request(const char *user, const char *pass, int ctrl)
|
||||
}
|
||||
return retval;
|
||||
case PAM_SUCCESS:
|
||||
/* Otherwise, the authentication looked good */
|
||||
_pam_log(LOG_NOTICE, "user '%s' granted acces", user);
|
||||
if (req_type == WINBINDD_PAM_AUTH) {
|
||||
/* Otherwise, the authentication looked good */
|
||||
_pam_log(LOG_NOTICE, "user '%s' granted acces", user);
|
||||
} else if (req_type == WINBINDD_PAM_CHAUTHTOK) {
|
||||
/* Otherwise, the authentication looked good */
|
||||
_pam_log(LOG_NOTICE, "user '%s' password changed", user);
|
||||
} else {
|
||||
/* Otherwise, the authentication looked good */
|
||||
_pam_log(LOG_NOTICE, "user '%s' OK", user);
|
||||
}
|
||||
return retval;
|
||||
default:
|
||||
/* we don't know anything about this return value */
|
||||
@ -187,12 +188,29 @@ static int winbind_auth_request(const char *user, const char *pass, int ctrl)
|
||||
retval, user);
|
||||
return retval;
|
||||
}
|
||||
/* should not be reached */
|
||||
}
|
||||
|
||||
/* talk to winbindd */
|
||||
static int winbind_auth_request(const char *user, const char *pass, int ctrl)
|
||||
{
|
||||
struct winbindd_request request;
|
||||
struct winbindd_response response;
|
||||
|
||||
ZERO_STRUCT(request);
|
||||
|
||||
strncpy(request.data.auth.user, user,
|
||||
sizeof(request.data.auth.user)-1);
|
||||
|
||||
strncpy(request.data.auth.pass, pass,
|
||||
sizeof(request.data.auth.pass)-1);
|
||||
|
||||
|
||||
return pam_winbind_request_log(WINBINDD_PAM_AUTH, &request, &response, ctrl, user);
|
||||
}
|
||||
|
||||
/* talk to winbindd */
|
||||
static int winbind_chauthtok_request(const char *user, const char *oldpass,
|
||||
const char *newpass)
|
||||
const char *newpass, int ctrl)
|
||||
{
|
||||
struct winbindd_request request;
|
||||
struct winbindd_response response;
|
||||
@ -218,7 +236,7 @@ static int winbind_chauthtok_request(const char *user, const char *oldpass,
|
||||
request.data.chauthtok.newpass[0] = '\0';
|
||||
}
|
||||
|
||||
return pam_winbind_request(WINBINDD_PAM_CHAUTHTOK, &request, &response);
|
||||
return pam_winbind_request_log(WINBINDD_PAM_CHAUTHTOK, &request, &response, ctrl, user);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -665,7 +683,7 @@ PAM_EXTERN int pam_sm_chauthtok(pam_handle_t * pamh, int flags,
|
||||
* rebuild the password database file.
|
||||
*/
|
||||
|
||||
retval = winbind_chauthtok_request(user, pass_old, pass_new);
|
||||
retval = winbind_chauthtok_request(user, pass_old, pass_new, ctrl);
|
||||
_pam_overwrite(pass_new);
|
||||
_pam_overwrite(pass_old);
|
||||
pass_old = pass_new = NULL;
|
||||
|
@ -354,5 +354,12 @@ done:
|
||||
fstrcpy(state->response.data.auth.error_string, nt_errstr(result));
|
||||
state->response.data.auth.pam_error = nt_status_to_pam(result);
|
||||
|
||||
DEBUG(NT_STATUS_IS_OK(result) ? 5 : 2,
|
||||
("Password change for user [%s]\\[%s] returned %s (PAM: %d)\n",
|
||||
domain,
|
||||
user,
|
||||
state->response.data.auth.nt_status_string,
|
||||
state->response.data.auth.pam_error));
|
||||
|
||||
return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
|
||||
}
|
||||
|
@ -1420,13 +1420,6 @@ static NTSTATUS ldapsam_modify_entry(LDAP *ldap_struct,SAM_ACCOUNT *newpwd,char
|
||||
char *retoid;
|
||||
struct berval *retdata;
|
||||
|
||||
if (ldap_get_option(ldap_struct, LDAP_OPT_PROTOCOL_VERSION, &version) == LDAP_OPT_SUCCESS) {
|
||||
if (version != LDAP_VERSION3) {
|
||||
version = LDAP_VERSION3;
|
||||
ldap_set_option (ldap_struct, LDAP_OPT_PROTOCOL_VERSION, &version);
|
||||
}
|
||||
}
|
||||
|
||||
if ((ber = ber_alloc_t(LBER_USE_DER))==NULL) {
|
||||
DEBUG(0,("ber_alloc_t returns NULL\n"));
|
||||
return ret;
|
||||
|
@ -636,7 +636,7 @@ return the hostname of the client
|
||||
char *cgi_remote_host(void)
|
||||
{
|
||||
if (inetd_server) {
|
||||
return get_socket_name(1);
|
||||
return get_socket_name(1,False);
|
||||
}
|
||||
return getenv("REMOTE_HOST");
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user