mirror of
https://github.com/PowerShell/openssh-portable.git
synced 2025-07-31 01:35:11 +02:00
upstream: use asprintf to construct .rhosts paths
OpenBSD-Commit-ID: 8286e8d3d2c6ff916ff13d041d1713073f738a8b
This commit is contained in:
parent
c07e154fbd
commit
bf114d6f0a
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: auth-rhosts.c,v 1.54 2022/02/01 23:32:51 djm Exp $ */
|
/* $OpenBSD: auth-rhosts.c,v 1.55 2022/02/23 11:15:57 djm Exp $ */
|
||||||
/*
|
/*
|
||||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||||
@ -34,6 +34,7 @@
|
|||||||
#include "pathnames.h"
|
#include "pathnames.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
#include "sshbuf.h"
|
#include "sshbuf.h"
|
||||||
#include "sshkey.h"
|
#include "sshkey.h"
|
||||||
#include "servconf.h"
|
#include "servconf.h"
|
||||||
@ -189,12 +190,13 @@ int
|
|||||||
auth_rhosts2(struct passwd *pw, const char *client_user, const char *hostname,
|
auth_rhosts2(struct passwd *pw, const char *client_user, const char *hostname,
|
||||||
const char *ipaddr)
|
const char *ipaddr)
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char *path = NULL;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
static const char * const rhosts_files[] = {".shosts", ".rhosts", NULL};
|
static const char * const rhosts_files[] = {".shosts", ".rhosts", NULL};
|
||||||
u_int rhosts_file_index;
|
u_int rhosts_file_index;
|
||||||
|
int r;
|
||||||
|
|
||||||
debug2("auth_rhosts2: clientuser %s hostname %s ipaddr %s",
|
debug2_f("clientuser %s hostname %s ipaddr %s",
|
||||||
client_user, hostname, ipaddr);
|
client_user, hostname, ipaddr);
|
||||||
|
|
||||||
/* Switch to the user's uid. */
|
/* Switch to the user's uid. */
|
||||||
@ -208,9 +210,11 @@ auth_rhosts2(struct passwd *pw, const char *client_user, const char *hostname,
|
|||||||
for (rhosts_file_index = 0; rhosts_files[rhosts_file_index];
|
for (rhosts_file_index = 0; rhosts_files[rhosts_file_index];
|
||||||
rhosts_file_index++) {
|
rhosts_file_index++) {
|
||||||
/* Check users .rhosts or .shosts. */
|
/* Check users .rhosts or .shosts. */
|
||||||
snprintf(buf, sizeof buf, "%.500s/%.100s",
|
xasprintf(&path, "%s/%s",
|
||||||
pw->pw_dir, rhosts_files[rhosts_file_index]);
|
pw->pw_dir, rhosts_files[rhosts_file_index]);
|
||||||
if (stat(buf, &st) >= 0)
|
r = stat(path, &st);
|
||||||
|
free(path);
|
||||||
|
if (r >= 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* Switch back to privileged uid. */
|
/* Switch back to privileged uid. */
|
||||||
@ -275,10 +279,12 @@ auth_rhosts2(struct passwd *pw, const char *client_user, const char *hostname,
|
|||||||
for (rhosts_file_index = 0; rhosts_files[rhosts_file_index];
|
for (rhosts_file_index = 0; rhosts_files[rhosts_file_index];
|
||||||
rhosts_file_index++) {
|
rhosts_file_index++) {
|
||||||
/* Check users .rhosts or .shosts. */
|
/* Check users .rhosts or .shosts. */
|
||||||
snprintf(buf, sizeof buf, "%.500s/%.100s",
|
xasprintf(&path, "%s/%s",
|
||||||
pw->pw_dir, rhosts_files[rhosts_file_index]);
|
pw->pw_dir, rhosts_files[rhosts_file_index]);
|
||||||
if (stat(buf, &st) == -1)
|
if (stat(path, &st) == -1) {
|
||||||
|
free(path);
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure that the file is either owned by the user or by
|
* Make sure that the file is either owned by the user or by
|
||||||
@ -289,9 +295,10 @@ auth_rhosts2(struct passwd *pw, const char *client_user, const char *hostname,
|
|||||||
if (options.strict_modes &&
|
if (options.strict_modes &&
|
||||||
((st.st_uid != 0 && st.st_uid != pw->pw_uid) ||
|
((st.st_uid != 0 && st.st_uid != pw->pw_uid) ||
|
||||||
(st.st_mode & 022) != 0)) {
|
(st.st_mode & 022) != 0)) {
|
||||||
logit("Rhosts authentication refused for %.100s: bad modes for %.200s",
|
logit("Rhosts authentication refused for %.100s: "
|
||||||
pw->pw_name, buf);
|
"bad modes for %.200s", pw->pw_name, path);
|
||||||
auth_debug_add("Bad file modes for %.200s", buf);
|
auth_debug_add("Bad file modes for %.200s", path);
|
||||||
|
free(path);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@ -303,10 +310,11 @@ auth_rhosts2(struct passwd *pw, const char *client_user, const char *hostname,
|
|||||||
strcmp(rhosts_files[rhosts_file_index], ".shosts") != 0)) {
|
strcmp(rhosts_files[rhosts_file_index], ".shosts") != 0)) {
|
||||||
auth_debug_add("Server has been configured to "
|
auth_debug_add("Server has been configured to "
|
||||||
"ignore %.100s.", rhosts_files[rhosts_file_index]);
|
"ignore %.100s.", rhosts_files[rhosts_file_index]);
|
||||||
|
free(path);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/* Check if authentication is permitted by the file. */
|
/* Check if authentication is permitted by the file. */
|
||||||
if (check_rhosts_file(buf, hostname, ipaddr,
|
if (check_rhosts_file(path, hostname, ipaddr,
|
||||||
client_user, pw->pw_name)) {
|
client_user, pw->pw_name)) {
|
||||||
auth_debug_add("Accepted by %.100s.",
|
auth_debug_add("Accepted by %.100s.",
|
||||||
rhosts_files[rhosts_file_index]);
|
rhosts_files[rhosts_file_index]);
|
||||||
@ -315,8 +323,10 @@ auth_rhosts2(struct passwd *pw, const char *client_user, const char *hostname,
|
|||||||
auth_debug_add("Accepted host %s ip %s client_user "
|
auth_debug_add("Accepted host %s ip %s client_user "
|
||||||
"%s server_user %s", hostname, ipaddr,
|
"%s server_user %s", hostname, ipaddr,
|
||||||
client_user, pw->pw_name);
|
client_user, pw->pw_name);
|
||||||
|
free(path);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
free(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Restore the privileged uid. */
|
/* Restore the privileged uid. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user