diff options
| -rw-r--r-- | zebra/ChangeLog | 11 | ||||
| -rw-r--r-- | zebra/if_ioctl_solaris.c | 4 | ||||
| -rw-r--r-- | zebra/ioctl.c | 23 | ||||
| -rw-r--r-- | zebra/ioctl_solaris.c | 22 | ||||
| -rw-r--r-- | zebra/ipforward_solaris.c | 4 | ||||
| -rw-r--r-- | zebra/irdp_main.c | 4 | 
6 files changed, 36 insertions, 32 deletions
diff --git a/zebra/ChangeLog b/zebra/ChangeLog index a7286f9d..0ebe7052 100644 --- a/zebra/ChangeLog +++ b/zebra/ChangeLog @@ -1,5 +1,16 @@  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> +  	* rt_netlink.c: (netlink_socket,netlink_request,netlink_parse_info,  	  netlink_talk) Save errno before calling zserv_privs.change. diff --git a/zebra/if_ioctl_solaris.c b/zebra/if_ioctl_solaris.c index 1cbf555e..38ac5a71 100644 --- a/zebra/if_ioctl_solaris.c +++ b/zebra/if_ioctl_solaris.c @@ -50,6 +50,7 @@ interface_list_ioctl (int af)    struct lifconf lifconf;    struct interface *ifp;    int n; +  int save_errno;    size_t needed, lastneeded = 0;    char *buf = NULL; @@ -72,6 +73,7 @@ calculate_lifc_len:     /* must hold privileges to enter here */    lifn.lifn_family = af;    lifn.lifn_flags = 0;    ret = ioctl (sock, SIOCGLIFNUM, &lifn); +  save_errno = errno;    if (zserv_privs.change(ZPRIVS_LOWER))      zlog (NULL, LOG_ERR, "Can't lower privileges"); @@ -79,7 +81,7 @@ calculate_lifc_len:     /* must hold privileges to enter here */    if (ret < 0)      {        zlog_warn ("interface_list_ioctl: SIOCGLIFNUM failed %s", -                 safe_strerror (errno)); +                 safe_strerror (save_errno));        close (sock);        return -1;      } diff --git a/zebra/ioctl.c b/zebra/ioctl.c index eca0e769..e28d359e 100644 --- a/zebra/ioctl.c +++ b/zebra/ioctl.c @@ -46,8 +46,8 @@ int  if_ioctl (u_long request, caddr_t buffer)  {    int sock; -  int ret = 0; -  int err = 0; +  int ret; +  int err;    if (zserv_privs.change(ZPRIVS_RAISE))      zlog (NULL, LOG_ERR, "Can't raise privileges"); @@ -59,13 +59,10 @@ if_ioctl (u_long request, caddr_t buffer)        perror ("socket");        exit (1);      } -  ret = ioctl (sock, request, buffer); +  if ((ret = ioctl (sock, request, buffer)) < 0) +    err = errno;    if (zserv_privs.change(ZPRIVS_LOWER))      zlog (NULL, LOG_ERR, "Can't lower privileges"); -  if (ret < 0) -    { -      err = errno; -    }    close (sock);    if (ret < 0)  @@ -81,8 +78,8 @@ int  if_ioctl_ipv6 (u_long request, caddr_t buffer)  {    int sock; -  int ret = 0; -  int err = 0; +  int ret; +  int err;    if (zserv_privs.change(ZPRIVS_RAISE))      zlog (NULL, LOG_ERR, "Can't raise privileges"); @@ -95,14 +92,10 @@ if_ioctl_ipv6 (u_long request, caddr_t buffer)        exit (1);      } -  ret = ioctl (sock, request, buffer); +  if ((ret = ioctl (sock, request, buffer)) < 0) +    err = errno;    if (zserv_privs.change(ZPRIVS_LOWER))      zlog (NULL, LOG_ERR, "Can't lower privileges"); -  -  if (ret < 0) -    { -      err = errno; -    }    close (sock);    if (ret < 0)  diff --git a/zebra/ioctl_solaris.c b/zebra/ioctl_solaris.c index 8ebd0f41..5ec327ac 100644 --- a/zebra/ioctl_solaris.c +++ b/zebra/ioctl_solaris.c @@ -46,8 +46,8 @@ int  if_ioctl (u_long request, caddr_t buffer)  {    int sock; -  int ret = 0; -  int err = 0; +  int ret; +  int err;    if (zserv_privs.change(ZPRIVS_RAISE))      zlog (NULL, LOG_ERR, "Can't raise privileges"); @@ -61,15 +61,12 @@ if_ioctl (u_long request, caddr_t buffer)        exit (1);      } -  ret = ioctl (sock, request, buffer); +  if ((ret = ioctl (sock, request, buffer)) < 0) +    err = errno;    if (zserv_privs.change(ZPRIVS_LOWER))      zlog (NULL, LOG_ERR, "Can't lower privileges"); -  if (ret < 0) -    { -      err = errno; -    }    close (sock);    if (ret < 0) @@ -86,8 +83,8 @@ if_ioctl_ipv6 (u_long request, caddr_t buffer)  {  #ifdef HAVE_IPV6    int sock; -  int ret = 0; -  int err = 0; +  int ret; +  int err;    if (zserv_privs.change(ZPRIVS_RAISE))      zlog (NULL, LOG_ERR, "Can't raise privileges"); @@ -101,15 +98,12 @@ if_ioctl_ipv6 (u_long request, caddr_t buffer)        exit (1);      } -  ret = ioctl (sock, request, buffer); +  if ((ret = ioctl (sock, request, buffer)) < 0) +    err = errno;    if (zserv_privs.change(ZPRIVS_LOWER))      zlog (NULL, LOG_ERR, "Can't lower privileges"); -  if (ret < 0) -    { -      err = errno; -    }    close (sock);    if (ret < 0) diff --git a/zebra/ipforward_solaris.c b/zebra/ipforward_solaris.c index 2eaf3416..3ad2c400 100644 --- a/zebra/ipforward_solaris.c +++ b/zebra/ipforward_solaris.c @@ -87,10 +87,12 @@ solaris_nd(const int cmd, const char* parameter, const int value)      }    if (ioctl (fd, I_STR, &strioctl) < 0)       { +      int save_errno = errno;        if ( zserv_privs.change (ZPRIVS_LOWER) )          zlog_err ("solaris_nd: Can't lower privileges");        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;      }    close(fd); diff --git a/zebra/irdp_main.c b/zebra/irdp_main.c index 8c164486..0db2a54d 100644 --- a/zebra/irdp_main.c +++ b/zebra/irdp_main.c @@ -101,19 +101,21 @@ int  irdp_sock_init (void)  {    int ret, i; +  int save_errno;    if ( zserv_privs.change (ZPRIVS_RAISE) )         zlog_err ("irdp_sock_init: could not raise privs, %s",                    safe_strerror (errno) );    irdp_sock = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP); +  save_errno = errno;    if ( zserv_privs.change (ZPRIVS_LOWER) )         zlog_err ("irdp_sock_init: could not lower privs, %s",               safe_strerror (errno) );    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;    };  | 
