2005-01-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

* if_ioctl_solaris.c: (interface_list_ioctl) Save errno before calling
	  zserv_privs.change.
	* ioctl{,_solaris}.c: (if_ioctl,if_ioctl_ipv6) Save errno before calling
	  zserv_privs.change.
	* ipforward_solaris.c: (solaris_nd) Save errno before calling
	  zserv_privs.change.
	* irdp_main.c: (irdp_sock_init) Save errno before calling
	  zserv_privs.change.

	[backport candidate]
This commit is contained in:
ajs 2005-01-29 17:07:40 +00:00
parent 4be019d553
commit 4460e7a4cf
6 changed files with 36 additions and 32 deletions

View File

@ -1,3 +1,14 @@
2005-01-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* if_ioctl_solaris.c: (interface_list_ioctl) Save errno before calling
zserv_privs.change.
* ioctl{,_solaris}.c: (if_ioctl,if_ioctl_ipv6) Save errno before calling
zserv_privs.change.
* ipforward_solaris.c: (solaris_nd) Save errno before calling
zserv_privs.change.
* irdp_main.c: (irdp_sock_init) Save errno before calling
zserv_privs.change.
2005-01-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu> 2005-01-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* rt_netlink.c: (netlink_socket,netlink_request,netlink_parse_info, * rt_netlink.c: (netlink_socket,netlink_request,netlink_parse_info,

View File

@ -50,6 +50,7 @@ interface_list_ioctl (int af)
struct lifconf lifconf; struct lifconf lifconf;
struct interface *ifp; struct interface *ifp;
int n; int n;
int save_errno;
size_t needed, lastneeded = 0; size_t needed, lastneeded = 0;
char *buf = NULL; char *buf = NULL;
@ -72,6 +73,7 @@ calculate_lifc_len: /* must hold privileges to enter here */
lifn.lifn_family = af; lifn.lifn_family = af;
lifn.lifn_flags = 0; lifn.lifn_flags = 0;
ret = ioctl (sock, SIOCGLIFNUM, &lifn); ret = ioctl (sock, SIOCGLIFNUM, &lifn);
save_errno = errno;
if (zserv_privs.change(ZPRIVS_LOWER)) if (zserv_privs.change(ZPRIVS_LOWER))
zlog (NULL, LOG_ERR, "Can't lower privileges"); zlog (NULL, LOG_ERR, "Can't lower privileges");
@ -79,7 +81,7 @@ calculate_lifc_len: /* must hold privileges to enter here */
if (ret < 0) if (ret < 0)
{ {
zlog_warn ("interface_list_ioctl: SIOCGLIFNUM failed %s", zlog_warn ("interface_list_ioctl: SIOCGLIFNUM failed %s",
safe_strerror (errno)); safe_strerror (save_errno));
close (sock); close (sock);
return -1; return -1;
} }

View File

@ -46,8 +46,8 @@ int
if_ioctl (u_long request, caddr_t buffer) if_ioctl (u_long request, caddr_t buffer)
{ {
int sock; int sock;
int ret = 0; int ret;
int err = 0; int err;
if (zserv_privs.change(ZPRIVS_RAISE)) if (zserv_privs.change(ZPRIVS_RAISE))
zlog (NULL, LOG_ERR, "Can't raise privileges"); zlog (NULL, LOG_ERR, "Can't raise privileges");
@ -59,13 +59,10 @@ if_ioctl (u_long request, caddr_t buffer)
perror ("socket"); perror ("socket");
exit (1); exit (1);
} }
ret = ioctl (sock, request, buffer); if ((ret = ioctl (sock, request, buffer)) < 0)
err = errno;
if (zserv_privs.change(ZPRIVS_LOWER)) if (zserv_privs.change(ZPRIVS_LOWER))
zlog (NULL, LOG_ERR, "Can't lower privileges"); zlog (NULL, LOG_ERR, "Can't lower privileges");
if (ret < 0)
{
err = errno;
}
close (sock); close (sock);
if (ret < 0) if (ret < 0)
@ -81,8 +78,8 @@ int
if_ioctl_ipv6 (u_long request, caddr_t buffer) if_ioctl_ipv6 (u_long request, caddr_t buffer)
{ {
int sock; int sock;
int ret = 0; int ret;
int err = 0; int err;
if (zserv_privs.change(ZPRIVS_RAISE)) if (zserv_privs.change(ZPRIVS_RAISE))
zlog (NULL, LOG_ERR, "Can't raise privileges"); zlog (NULL, LOG_ERR, "Can't raise privileges");
@ -95,14 +92,10 @@ if_ioctl_ipv6 (u_long request, caddr_t buffer)
exit (1); exit (1);
} }
ret = ioctl (sock, request, buffer); if ((ret = ioctl (sock, request, buffer)) < 0)
err = errno;
if (zserv_privs.change(ZPRIVS_LOWER)) if (zserv_privs.change(ZPRIVS_LOWER))
zlog (NULL, LOG_ERR, "Can't lower privileges"); zlog (NULL, LOG_ERR, "Can't lower privileges");
if (ret < 0)
{
err = errno;
}
close (sock); close (sock);
if (ret < 0) if (ret < 0)

View File

@ -46,8 +46,8 @@ int
if_ioctl (u_long request, caddr_t buffer) if_ioctl (u_long request, caddr_t buffer)
{ {
int sock; int sock;
int ret = 0; int ret;
int err = 0; int err;
if (zserv_privs.change(ZPRIVS_RAISE)) if (zserv_privs.change(ZPRIVS_RAISE))
zlog (NULL, LOG_ERR, "Can't raise privileges"); zlog (NULL, LOG_ERR, "Can't raise privileges");
@ -61,15 +61,12 @@ if_ioctl (u_long request, caddr_t buffer)
exit (1); exit (1);
} }
ret = ioctl (sock, request, buffer); if ((ret = ioctl (sock, request, buffer)) < 0)
err = errno;
if (zserv_privs.change(ZPRIVS_LOWER)) if (zserv_privs.change(ZPRIVS_LOWER))
zlog (NULL, LOG_ERR, "Can't lower privileges"); zlog (NULL, LOG_ERR, "Can't lower privileges");
if (ret < 0)
{
err = errno;
}
close (sock); close (sock);
if (ret < 0) if (ret < 0)
@ -86,8 +83,8 @@ if_ioctl_ipv6 (u_long request, caddr_t buffer)
{ {
#ifdef HAVE_IPV6 #ifdef HAVE_IPV6
int sock; int sock;
int ret = 0; int ret;
int err = 0; int err;
if (zserv_privs.change(ZPRIVS_RAISE)) if (zserv_privs.change(ZPRIVS_RAISE))
zlog (NULL, LOG_ERR, "Can't raise privileges"); zlog (NULL, LOG_ERR, "Can't raise privileges");
@ -101,15 +98,12 @@ if_ioctl_ipv6 (u_long request, caddr_t buffer)
exit (1); exit (1);
} }
ret = ioctl (sock, request, buffer); if ((ret = ioctl (sock, request, buffer)) < 0)
err = errno;
if (zserv_privs.change(ZPRIVS_LOWER)) if (zserv_privs.change(ZPRIVS_LOWER))
zlog (NULL, LOG_ERR, "Can't lower privileges"); zlog (NULL, LOG_ERR, "Can't lower privileges");
if (ret < 0)
{
err = errno;
}
close (sock); close (sock);
if (ret < 0) if (ret < 0)

View File

@ -87,10 +87,12 @@ solaris_nd(const int cmd, const char* parameter, const int value)
} }
if (ioctl (fd, I_STR, &strioctl) < 0) if (ioctl (fd, I_STR, &strioctl) < 0)
{ {
int save_errno = errno;
if ( zserv_privs.change (ZPRIVS_LOWER) ) if ( zserv_privs.change (ZPRIVS_LOWER) )
zlog_err ("solaris_nd: Can't lower privileges"); zlog_err ("solaris_nd: Can't lower privileges");
close (fd); close (fd);
zlog_warn("ioctl I_STR failed on device %s - %s", device,safe_strerror(errno)); zlog_warn("ioctl I_STR failed on device %s - %s",
device, safe_strerror(save_errno));
return -1; return -1;
} }
close(fd); close(fd);

View File

@ -101,19 +101,21 @@ int
irdp_sock_init (void) irdp_sock_init (void)
{ {
int ret, i; int ret, i;
int save_errno;
if ( zserv_privs.change (ZPRIVS_RAISE) ) if ( zserv_privs.change (ZPRIVS_RAISE) )
zlog_err ("irdp_sock_init: could not raise privs, %s", zlog_err ("irdp_sock_init: could not raise privs, %s",
safe_strerror (errno) ); safe_strerror (errno) );
irdp_sock = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP); irdp_sock = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP);
save_errno = errno;
if ( zserv_privs.change (ZPRIVS_LOWER) ) if ( zserv_privs.change (ZPRIVS_LOWER) )
zlog_err ("irdp_sock_init: could not lower privs, %s", zlog_err ("irdp_sock_init: could not lower privs, %s",
safe_strerror (errno) ); safe_strerror (errno) );
if (irdp_sock < 0) { if (irdp_sock < 0) {
zlog_warn ("IRDP: can't create irdp socket %s", safe_strerror(errno)); zlog_warn ("IRDP: can't create irdp socket %s", safe_strerror(save_errno));
return irdp_sock; return irdp_sock;
}; };