diff options
Diffstat (limited to 'usr/src/lib')
-rw-r--r-- | usr/src/lib/brand/bhyve/zone/boot.c | 2 | ||||
-rw-r--r-- | usr/src/lib/cfgadm_plugins/ac/common/mema.c | 40 | ||||
-rw-r--r-- | usr/src/lib/cfgadm_plugins/sysctrl/common/cfga.c | 41 | ||||
-rw-r--r-- | usr/src/lib/fm/libldom/sparc/ldom_xmpp_client.c | 4 | ||||
-rw-r--r-- | usr/src/lib/fm/topo/modules/sun4v/sun4vpi/pi_walker.c | 4 | ||||
-rw-r--r-- | usr/src/lib/libdemangle/common/cxx.c | 2 | ||||
-rw-r--r-- | usr/src/lib/libzonecfg/common/libzonecfg.c | 9 | ||||
-rw-r--r-- | usr/src/lib/pam_modules/list/list.c | 56 |
8 files changed, 107 insertions, 51 deletions
diff --git a/usr/src/lib/brand/bhyve/zone/boot.c b/usr/src/lib/brand/bhyve/zone/boot.c index 645958d14a..3d26e350d4 100644 --- a/usr/src/lib/brand/bhyve/zone/boot.c +++ b/usr/src/lib/brand/bhyve/zone/boot.c @@ -286,6 +286,8 @@ add_disk(char *disk, char *path, char *slotconf, size_t slotconf_len) strcmp(guest_block_size, "0") == 0) { guest_block_size = NULL; } + } else if (is_env_string("device", disk, "model", "nvme")) { + model = "nvme"; } else if (is_env_string("device", disk, "model", "ahci")) { if (is_env_string("device", disk, "media", "cdrom")) { model = "ahci-cd"; diff --git a/usr/src/lib/cfgadm_plugins/ac/common/mema.c b/usr/src/lib/cfgadm_plugins/ac/common/mema.c index 1b08d13f92..3e97bc622e 100644 --- a/usr/src/lib/cfgadm_plugins/ac/common/mema.c +++ b/usr/src/lib/cfgadm_plugins/ac/common/mema.c @@ -24,8 +24,6 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include <stddef.h> #include <stdlib.h> #include <unistd.h> @@ -465,7 +463,7 @@ ap_stat( if ((bank = ap_bk_idx(bank_spec)) == -1) { __fmt_errstring(errstring, strlen(bank_spec), - dgettext(TEXT_DOMAIN, ap_invalid), bank_spec); + dgettext(TEXT_DOMAIN, ap_invalid), bank_spec); return (CFGA_ERROR); } @@ -831,7 +829,7 @@ mtest_run( if (ret == -1) { if (ret_errno == ENOTSUP) { mema_err(&cmd, ret_errno, errstring, - CMD_MEM_TEST_START); + CMD_MEM_TEST_START); return (CFGA_OPNOTSUPP); } if (ret_errno == EBUSY && test_start.tester_pid > 0) { @@ -1131,14 +1129,14 @@ cfga_test( hlp = subopt_help_str(opts); if (hlp != NULL) { __fmt_errstring(errstring, - strlen(value) + strlen(hlp), - dgettext(TEXT_DOMAIN, unk_test), - value, hlp); + strlen(value) + strlen(hlp), + dgettext(TEXT_DOMAIN, unk_test), + value, hlp); free((void *)hlp); } else { __fmt_errstring(errstring, 20, - dgettext(TEXT_DOMAIN, calloc_fail), - strlen(options) + 1, 1); + dgettext(TEXT_DOMAIN, calloc_fail), + strlen(options) + 1, 1); } /* Free after printing value. */ free((void *)free_cp); @@ -1161,18 +1159,18 @@ cfga_test( if (max_errors != -1 && subopt == maxerr_idx) { __fmt_errstring(errstring, - strlen(opts[subopt]), - dgettext(TEXT_DOMAIN, dup_num), - opts[subopt]); + strlen(opts[subopt]), + dgettext(TEXT_DOMAIN, dup_num), + opts[subopt]); free((void *)free_cp); return (CFGA_ERROR); } if (value == NULL) { __fmt_errstring(errstring, - 0, - dgettext(TEXT_DOMAIN, no_num), - ""); + 0, + dgettext(TEXT_DOMAIN, no_num), + ""); free((void *)free_cp); return (CFGA_ERROR); } @@ -1181,9 +1179,9 @@ cfga_test( if ((ret_p == value) || (*ret_p != '\0') || (max_errors < 0)) { __fmt_errstring(errstring, - strlen(value), - dgettext(TEXT_DOMAIN, no_num), - value); + strlen(value), + dgettext(TEXT_DOMAIN, no_num), + value); free((void *)free_cp); return (CFGA_ERROR); } @@ -1300,7 +1298,7 @@ info_set(ac_stat_t *asp, mema_bank_t *bkp, cfga_info_t info) char *end; end = &info[sizeof (cfga_info_t)]; - *info = NULL; + *info = '\0'; board = bkp->board; @@ -1370,8 +1368,8 @@ mema_cvt(ac_stat_t *ac, mema_bank_t *bkp, cfga_stat_data_t *cs) cs->ap_busy = (cfga_busy_t)ac->busy; cs->ap_status_time = ac->status_time; info_set(ac, bkp, cs->ap_info); - cs->ap_log_id[0] = NULL; - cs->ap_phys_id[0] = NULL; + cs->ap_log_id[0] = '\0'; + cs->ap_phys_id[0] = '\0'; } /*ARGSUSED*/ diff --git a/usr/src/lib/cfgadm_plugins/sysctrl/common/cfga.c b/usr/src/lib/cfgadm_plugins/sysctrl/common/cfga.c index 1dca716564..81245635d2 100644 --- a/usr/src/lib/cfgadm_plugins/sysctrl/common/cfga.c +++ b/usr/src/lib/cfgadm_plugins/sysctrl/common/cfga.c @@ -24,8 +24,6 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include <stddef.h> #include <locale.h> #include <ctype.h> @@ -611,7 +609,10 @@ sim_open(char *a, int b, int c) } static int -sim_close(int a) { return (0); } +sim_close(int a) +{ + return (0); +} static int sim_ioctl(int fd, int cmd, void *a) @@ -750,7 +751,7 @@ dlist_find(int board, char **dlist, int *disabled) static int dlist_update(int board, int disable, char *dlist, struct cfga_msg *msgp, - int verbose) + int verbose) { int i, j, n; int err; @@ -941,7 +942,7 @@ cfga_change_state( cfga_err(NULL, errstring, ERR_TRANS, 0); else if (disabled && !(force || (options && !disable))) cfga_err(NULL, errstring, CMD_CONNECT, - ERR_DISABLED, DIAG_FORCE, 0); + ERR_DISABLED, DIAG_FORCE, 0); else if (!(*confp->confirm)(confp->appdata_ptr, cfga_str(ASK_CONNECT))) { (void) close(fd); @@ -949,7 +950,7 @@ cfga_change_state( } else if (ioctl(fd, SYSC_CFGA_CMD_CONNECT, sc) == -1) cfga_err(sc, errstring, CMD_CONNECT, 0); else if (options && (opterr = dlist_update(idx, disable, - dlist, msgp, verbose))) { + dlist, msgp, verbose))) { err = disable ? OPT_DISABLE : OPT_ENABLE; cfga_err(NULL, errstring, err, opterr, 0); } else @@ -982,7 +983,7 @@ cfga_change_state( if (rs == SYSC_CFGA_RSTATE_DISCONNECTED) if (disabled && !(force || (options && !disable))) { cfga_err(NULL, errstring, CMD_CONFIGURE, - ERR_DISABLED, DIAG_FORCE, 0); + ERR_DISABLED, DIAG_FORCE, 0); (void) close(fd); return (CFGA_ERROR); } else if (!(*confp->confirm)(confp->appdata_ptr, @@ -1000,7 +1001,7 @@ cfga_change_state( if (ioctl(fd, SYSC_CFGA_CMD_CONFIGURE, sc) == -1) cfga_err(sc, errstring, CMD_CONFIGURE, 0); else if (options && (opterr = dlist_update(idx, - disable, dlist, msgp, verbose))) { + disable, dlist, msgp, verbose))) { err = disable ? OPT_DISABLE : OPT_ENABLE; cfga_err(NULL, errstring, err, opterr, 0); } else @@ -1015,7 +1016,7 @@ cfga_change_state( else if (ioctl(fd, SYSC_CFGA_CMD_UNCONFIGURE, sc) == -1) cfga_err(sc, errstring, CMD_UNCONFIGURE, 0); else if (options && (opterr = dlist_update(idx, disable, - dlist, msgp, verbose))) { + dlist, msgp, verbose))) { err = disable ? OPT_DISABLE : OPT_ENABLE; cfga_err(NULL, errstring, err, opterr, 0); } else @@ -1124,14 +1125,14 @@ cfga_private_func( if ((idx = ap_idx(ap_id)) == -1) cfga_err(NULL, errstring, ERR_AP_INVAL, ap_id, 0); else if (((fd = open(ap_id, O_RDWR, 0)) == -1) || - (ioctl(fd, cmd, sc) == -1)) + (ioctl(fd, cmd, sc) == -1)) cfga_err(NULL, errstring, err, 0); else rc = CFGA_OK; if (options) { opterr = (dlist_find(idx, &dlist, &disabled) || - dlist_update(idx, disable, dlist, msgp, verbose)); + dlist_update(idx, disable, dlist, msgp, verbose)); if (opterr) { err = disable ? OPT_DISABLE : OPT_ENABLE; if (verbose) @@ -1274,7 +1275,7 @@ info_set(sysc_cfga_stat_t *sc, cfga_info_t info, int disabled) struct cpu_info *cpu; union bd_un *bd = &sc->bd; - *info = NULL; + *info = '\0'; switch (sc->type) { case CPU_BOARD: @@ -1282,11 +1283,11 @@ info_set(sysc_cfga_stat_t *sc, cfga_info_t info, int disabled) if (cpu->cpu_speed > 1) { info += sprintf(info, "cpu %d: ", i); info += sprintf(info, "%3d MHz ", - cpu->cpu_speed); + cpu->cpu_speed); if (cpu->cache_size) info += sprintf(info, "%0.1fM ", - (float)cpu->cache_size / - (float)(1024 * 1024)); + (float)cpu->cache_size / + (float)(1024 * 1024)); } } break; @@ -1312,7 +1313,7 @@ info_set(sysc_cfga_stat_t *sc, cfga_info_t info, int disabled) for (i = 0; i < 2; i++) if (bd->dsk.disk_pres[i]) info += sprintf(info, "target: %2d ", - bd->dsk.disk_id[i]); + bd->dsk.disk_id[i]); else info += sprintf(info, "no disk "); break; @@ -1338,8 +1339,8 @@ sysc_cvt(sysc_cfga_stat_t *sc, cfga_stat_data_t *cs, int disabled) cs->ap_busy = (cfga_busy_t)sc->in_transition; cs->ap_status_time = sc->last_change; info_set(sc, cs->ap_info, disabled); - cs->ap_log_id[0] = NULL; - cs->ap_phys_id[0] = NULL; + cs->ap_log_id[0] = '\0'; + cs->ap_phys_id[0] = '\0'; } /*ARGSUSED*/ @@ -1426,8 +1427,8 @@ cfga_stat( rc = CFGA_OK; if (options && options[0] && ((opterr != 0) || - ((opterr = dlist_update(idx, disable, dlist, NULL, 0)) - != 0))) { + ((opterr = dlist_update(idx, disable, dlist, NULL, 0)) + != 0))) { err = disable ? OPT_DISABLE : OPT_ENABLE; cfga_err(NULL, errstring, err, opterr, 0); } diff --git a/usr/src/lib/fm/libldom/sparc/ldom_xmpp_client.c b/usr/src/lib/fm/libldom/sparc/ldom_xmpp_client.c index f183b5b7f9..b12cd868e9 100644 --- a/usr/src/lib/fm/libldom/sparc/ldom_xmpp_client.c +++ b/usr/src/lib/fm/libldom/sparc/ldom_xmpp_client.c @@ -252,7 +252,7 @@ xmpp_connect(xmpp_conn_t *conn) conn->tls_started = B_FALSE; conn->parser = xmlCreatePushParserCtxt(&xml_handler, (void *) conn, - NULL, NULL, NULL); + NULL, 0, NULL); if (conn->parser == NULL) { return (-1); } @@ -417,7 +417,7 @@ xmpp_client_thr(void *data) * It should only be reset once after the ssl is opened * in the start_tls(). */ - (void) xmlCtxtResetPush(conn.parser, NULL, NULL, NULL, + (void) xmlCtxtResetPush(conn.parser, NULL, 0, NULL, NULL); } xmpp_close(&conn); diff --git a/usr/src/lib/fm/topo/modules/sun4v/sun4vpi/pi_walker.c b/usr/src/lib/fm/topo/modules/sun4v/sun4vpi/pi_walker.c index c762e5e5c0..a767df54d6 100644 --- a/usr/src/lib/fm/topo/modules/sun4v/sun4vpi/pi_walker.c +++ b/usr/src/lib/fm/topo/modules/sun4v/sun4vpi/pi_walker.c @@ -308,7 +308,7 @@ pi_walker(pi_enum_t *pip, tnode_t *t_parent, const char *hc_name, * by calling an appropriate creation routine for the node type. * * Output: - * This routine returns MDE_WALK_NEXT, MDE_WALK_DONE or MDE_WALK_ERROR + * This routine returns MDE_WALK_NEXT, MDE_WALK_DONE or MDE_WALK_ERROR * only. */ static int @@ -704,7 +704,7 @@ pi_walkerlist_create(topo_mod_t *mod) /* Initialize the uutil list structure */ walker_pool = uu_list_pool_create("pi_walker_pool", sizeof (pi_walkernode_t), offsetof(pi_walkernode_t, walker_node), - pi_walkerlist_compare, NULL); + pi_walkerlist_compare, 0); if (walker_pool == NULL) { (void) topo_mod_seterrno(mod, EMOD_NOMEM); return (-1); diff --git a/usr/src/lib/libdemangle/common/cxx.c b/usr/src/lib/libdemangle/common/cxx.c index af5f549f78..c89bd2ac7b 100644 --- a/usr/src/lib/libdemangle/common/cxx.c +++ b/usr/src/lib/libdemangle/common/cxx.c @@ -167,7 +167,7 @@ size_t cpp_name_max_depth = 1024; /* max depth of name stack */ char * cpp_demangle(const char *src, size_t srclen, sysdem_ops_t *ops) { - char *result = NULL; + char *volatile result = NULL; cpp_db_t db; if (!db_init(&db, ops)) diff --git a/usr/src/lib/libzonecfg/common/libzonecfg.c b/usr/src/lib/libzonecfg/common/libzonecfg.c index e709b7dba8..7dc3f9ccb8 100644 --- a/usr/src/lib/libzonecfg/common/libzonecfg.c +++ b/usr/src/lib/libzonecfg/common/libzonecfg.c @@ -6066,9 +6066,16 @@ new_zone_did() int len; int val; struct flock lck; + char pathbuf[PATH_MAX]; char buf[80]; - if ((fd = open(DEBUGID_FILE, O_RDWR | O_CREAT, + if (snprintf(pathbuf, sizeof (pathbuf), "%s%s", zonecfg_get_root(), + DEBUGID_FILE) >= sizeof (pathbuf)) { + printf(gettext("alternate root path is too long")); + return (-1); + } + + if ((fd = open(pathbuf, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) < 0) { perror("new_zone_did open failed"); return (-1); diff --git a/usr/src/lib/pam_modules/list/list.c b/usr/src/lib/pam_modules/list/list.c index 185a451246..234f709a36 100644 --- a/usr/src/lib/pam_modules/list/list.c +++ b/usr/src/lib/pam_modules/list/list.c @@ -33,6 +33,7 @@ #include <malloc.h> #include <unistd.h> #include <errno.h> +#include <grp.h> #include <security/pam_appl.h> #include <security/pam_modules.h> #include <security/pam_impl.h> @@ -68,24 +69,34 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) char buf[BUFSIZ]; char hostname[MAXHOSTNAMELEN]; char *username = NULL; + char *grbuf = NULL; char *bufp; char *rhost; - char *limit; + char *limit; int userok = 0; int hostok = 0; int i; int allow_deny_test = 0; + long grbuflen = 0; boolean_t debug = B_FALSE; boolean_t allow = B_FALSE; boolean_t matched = B_FALSE; boolean_t check_user = B_TRUE; + boolean_t check_group = B_FALSE; boolean_t check_host = B_FALSE; boolean_t check_exact = B_FALSE; pam_list_mode_t op_mode = LIST_PLUS_CHECK; + // group reentrant interfaces limits + if ((grbuflen = sysconf(_SC_GETGR_R_SIZE_MAX)) <= 0) + return (PAM_BUF_ERR); + for (i = 0; i < argc; ++i) { if (strncasecmp(argv[i], "debug", sizeof ("debug")) == 0) { debug = B_TRUE; + } else if (strncasecmp(argv[i], "group", + sizeof ("group")) == 0) { + check_group = B_TRUE; } else if (strncasecmp(argv[i], "user", sizeof ("user")) == 0) { check_user = B_TRUE; } else if (strncasecmp(argv[i], "nouser", @@ -140,8 +151,8 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) } } - if (((check_user || check_host || check_exact) == B_FALSE) || - (allow_deny_test > 1)) { + if (((check_user || check_group || check_host || + check_exact) == B_FALSE) || (allow_deny_test > 1)) { __pam_log(LOG_AUTH | LOG_ERR, ILLEGAL_COMBINATION); return (PAM_SERVICE_ERR); } @@ -151,6 +162,11 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) return (PAM_SERVICE_ERR); } + if ((op_mode == LIST_COMPAT_MODE) && (check_group == B_TRUE)) { + log_illegal_combination("compat", "group"); + return (PAM_SERVICE_ERR); + } + if (debug) { __pam_log(LOG_AUTH | LOG_DEBUG, "pam_list: check_user = %d, check_host = %d," @@ -165,7 +181,7 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) (void) pam_get_item(pamh, PAM_USER, (void**)&username); - if ((check_user || check_exact) && ((username == NULL) || + if ((check_user || check_group || check_exact) && ((username == NULL) || (*username == '\0'))) { __pam_log(LOG_AUTH | LOG_ERR, "pam_list: username not supplied, critical error"); @@ -203,6 +219,12 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) return (PAM_SERVICE_ERR); } + if (check_group && ((grbuf = calloc(1, grbuflen)) == NULL)) { + __pam_log(LOG_AUTH | LOG_ERR, + "pam_list: could not allocate memory for group"); + return (PAM_BUF_ERR); + } + while (fgets(buf, BUFSIZ, fd) != NULL) { /* lines longer than BUFSIZ-1 */ if ((strlen(buf) == (BUFSIZ - 1)) && @@ -242,6 +264,7 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) "pam_list: simple minus unknown, " "illegal line in " PF_PATH); (void) fclose(fd); + free(grbuf); return (PAM_SERVICE_ERR); } @@ -251,6 +274,7 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) "pam_list: @ is not allowed on the first " "position in " PF_PATH); (void) fclose(fd); + free(grbuf); return (PAM_SERVICE_ERR); } @@ -282,6 +306,7 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) /* * if -> netgroup line + * else if -> group line * else -> user line */ if ((bufp[0] == '@') && (bufp[1] != '\0')) { @@ -311,6 +336,28 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) break; } } + } else if ((bufp[0] == '%') && (bufp[1] != '\0')) { + char **member; + struct group grp; + + if (check_group == B_FALSE) + continue; + + bufp++; + + if (getgrnam_r(bufp, &grp, grbuf, grbuflen) != NULL) { + for (member = grp.gr_mem; *member != NULL; + member++) { + if (strcmp(*member, username) == 0) { + matched = B_TRUE; + break; + } + } + } else { + __pam_log(LOG_AUTH | LOG_ERR, + "pam_list: %s is not a known group", + bufp); + } } else { if (check_user) { if (strcmp(bufp, username) == 0) { @@ -331,6 +378,7 @@ pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) } } (void) fclose(fd); + free(grbuf); if (debug) { __pam_log(LOG_AUTH | LOG_DEBUG, |