Print this page
1693 persistent 'comment' field for a zpool

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libzfs/common/libzfs_pool.c
          +++ new/usr/src/lib/libzfs/common/libzfs_pool.c
↓ open down ↓ 227 lines elided ↑ open up ↑
 228  228                          (void) strlcpy(buf, "FAULTED", len);
 229  229                          break;
 230  230  
 231  231                  case ZPOOL_PROP_GUID:
 232  232                          intval = zpool_get_prop_int(zhp, prop, &src);
 233  233                          (void) snprintf(buf, len, "%llu", intval);
 234  234                          break;
 235  235  
 236  236                  case ZPOOL_PROP_ALTROOT:
 237  237                  case ZPOOL_PROP_CACHEFILE:
      238 +                case ZPOOL_PROP_COMMENT:
 238  239                          if (zhp->zpool_props != NULL ||
 239  240                              zpool_get_all_props(zhp) == 0) {
 240  241                                  (void) strlcpy(buf,
 241  242                                      zpool_get_prop_string(zhp, prop, &src),
 242  243                                      len);
 243  244                                  if (srctype != NULL)
 244  245                                          *srctype = src;
 245  246                                  return (0);
 246  247                          }
 247  248                          /* FALLTHROUGH */
↓ open down ↓ 129 lines elided ↑ open up ↑
 377  378   */
 378  379  static nvlist_t *
 379  380  zpool_valid_proplist(libzfs_handle_t *hdl, const char *poolname,
 380  381      nvlist_t *props, uint64_t version, prop_flags_t flags, char *errbuf)
 381  382  {
 382  383          nvpair_t *elem;
 383  384          nvlist_t *retprops;
 384  385          zpool_prop_t prop;
 385  386          char *strval;
 386  387          uint64_t intval;
 387      -        char *slash;
      388 +        char *slash, *check;
 388  389          struct stat64 statbuf;
 389  390          zpool_handle_t *zhp;
 390  391          nvlist_t *nvroot;
 391  392  
 392  393          if (nvlist_alloc(&retprops, NV_UNIQUE_NAME, 0) != 0) {
 393  394                  (void) no_memory(hdl);
 394  395                  return (NULL);
 395  396          }
 396  397  
 397  398          elem = NULL;
↓ open down ↓ 138 lines elided ↑ open up ↑
 536  537                                  zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
 537  538                                      "'%s' is not a valid directory"),
 538  539                                      strval);
 539  540                                  (void) zfs_error(hdl, EZFS_BADPATH, errbuf);
 540  541                                  goto error;
 541  542                          }
 542  543  
 543  544                          *slash = '/';
 544  545                          break;
 545  546  
      547 +                case ZPOOL_PROP_COMMENT:
      548 +                        for (check = strval; *check != '\0'; check++) {
      549 +                                if (!isprint(*check)) {
      550 +                                        zfs_error_aux(hdl,
      551 +                                            dgettext(TEXT_DOMAIN,
      552 +                                            "comment may only have printable "
      553 +                                            "characters"));
      554 +                                        (void) zfs_error(hdl, EZFS_BADPROP,
      555 +                                            errbuf);
      556 +                                        goto error;
      557 +                                }
      558 +                        }
      559 +                        if (strlen(strval) > ZPROP_MAX_COMMENT) {
      560 +                                zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
      561 +                                    "comment must not exceed %d characters"),
      562 +                                    ZPROP_MAX_COMMENT);
      563 +                                (void) zfs_error(hdl, EZFS_BADPROP, errbuf);
      564 +                                goto error;
      565 +                        }
      566 +                        break;
 546  567                  case ZPOOL_PROP_READONLY:
 547  568                          if (!flags.import) {
 548  569                                  zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
 549  570                                      "property '%s' can only be set at "
 550  571                                      "import time"), propname);
 551  572                                  (void) zfs_error(hdl, EZFS_BADPROP, errbuf);
 552  573                                  goto error;
 553  574                          }
 554  575                          break;
 555  576                  }
↓ open down ↓ 3270 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX