Print this page
OS-2837 lx brand only works with shared IP stacks

*** 19,28 **** --- 19,29 ---- * CDDL HEADER END */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2014, Joyent, Inc. All rights reserved. */ /* * Main door handler functions used by ipmgmtd to process the different door * call requests, issued by the library libipadm.so.
*** 110,120 **** ipmgmt_log(LOG_ERR, "Invalid door command specified"); err = EINVAL; goto fail; } ! /* check for solaris.network.interface.config authorization */ if (infop->idi_set) { uid_t uid; struct passwd pwd; char buf[1024]; --- 111,123 ---- ipmgmt_log(LOG_ERR, "Invalid door command specified"); err = EINVAL; goto fail; } ! /* ! * if not root, check for solaris.network.interface.config authorization ! */ if (infop->idi_set) { uid_t uid; struct passwd pwd; char buf[1024];
*** 122,150 **** err = errno; ipmgmt_log(LOG_ERR, "Could not get user credentials."); goto fail; } uid = ucred_getruid(cred); if ((int)uid < 0) { err = errno; ipmgmt_log(LOG_ERR, "Could not get user id."); goto fail; } ! if (getpwuid_r(uid, &pwd, buf, sizeof (buf)) == ! NULL) { err = errno; ! ipmgmt_log(LOG_ERR, "Could not get password entry."); goto fail; } if (chkauthattr(NETWORK_INTERFACE_CONFIG_AUTH, pwd.pw_name) != 1) { err = EPERM; ! ipmgmt_log(LOG_ERR, "Not authorized for operation."); goto fail; } - ucred_free(cred); } /* individual handlers take care of calling door_return */ infop->idi_handler((void *)argp); return; fail: --- 125,161 ---- err = errno; ipmgmt_log(LOG_ERR, "Could not get user credentials."); goto fail; } uid = ucred_getruid(cred); + ucred_free(cred); if ((int)uid < 0) { err = errno; ipmgmt_log(LOG_ERR, "Could not get user id."); goto fail; } ! ! /* ! * Branded zones may have different auth, but root always ! * allowed. ! */ ! if (uid != 0) { ! if (getpwuid_r(uid, &pwd, buf, sizeof (buf)) == NULL) { err = errno; ! ipmgmt_log(LOG_ERR, ! "Could not get password entry."); goto fail; } if (chkauthattr(NETWORK_INTERFACE_CONFIG_AUTH, pwd.pw_name) != 1) { err = EPERM; ! ipmgmt_log(LOG_ERR, ! "Not authorized for operation."); goto fail; } } + } /* individual handlers take care of calling door_return */ infop->idi_handler((void *)argp); return; fail: