예제 #1
0
파일: secret.c 프로젝트: Psingh2/ceph
int get_secret_option(const char *secret, const char *key_name, char *secret_option, size_t max_len)
{
  int ret;
  int olen = strlen(secret) + strlen(key_name) + 7;
  char option[olen+1];
  char error_buf[80];

  option[olen] = '\0';

  ret = add_secret_to_kernel(secret, key_name);
  if (ret < 0) {
    if (ret == -ENODEV || ret == -ENOSYS) {
      /* running against older kernel; fall back to secret= in options */
      snprintf(option, olen, "secret=%s", secret);
      ret = 0;
    } else {
      fprintf(stderr, "adding ceph secret key to kernel failed: %s.\n",
	      strerror_r(-ret, error_buf, sizeof(error_buf)));
      return ret;
    }
  } else {
    /* add key= option to identify key to use */
    snprintf(option, olen, "key=%s", key_name);
  }

  if (strlen(option) + 1 > max_len) {
    ret = -ERANGE;
  } else {
    secret_option[max_len-1] = '\0';
    strncpy(secret_option, option, max_len-1);
  }

  return ret;
}
예제 #2
0
파일: secret.c 프로젝트: tcloud/ceph
int get_secret_option(const char *secret, const char *key_name, char *secret_option, size_t max_len)
{
  int ret;
  char option[strlen(secret) + strlen(key_name) + 7];

  ret = add_secret_to_kernel(secret, key_name);
  if (ret < 0) {
    if (ret == -ENODEV || ret == -ENOSYS) {
      /* running against older kernel; fall back to secret= in options */
      sprintf(option, "secret=%s", secret);
      ret = 0;
    } else {
      fprintf(stderr, "adding ceph secret key to kernel failed: %s.\n", strerror(-ret));
      return ret;
    }
  } else {
    /* add key= option to identify key to use */
    sprintf(option, "key=%s", key_name);
  }

  if (strlen(option) + 1 > max_len) {
    ret = -ERANGE;
  } else {
    strcpy(secret_option, option);
  }

  return ret;
}