#include <keyutils.h>
#include <gssapi/gssapi.h>
+#include <libcfs/util/param.h>
#include <libcfs/util/string.h>
#include "lsupport.h"
#include "lgss_utils.h"
* child process: gss negotiation *
****************************************/
-#define INIT_CHANNEL "/proc/fs/lustre/sptlrpc/gss/init_channel"
-
int do_nego_rpc(struct lgss_nego_data *lnd,
gss_buffer_desc *gss_token,
struct lgss_init_res *gr)
{
- struct lgssd_ioctl_param param;
- struct passwd *pw;
- int fd, ret, res;
- char outbuf[8192];
- unsigned int *p;
+ struct lgssd_ioctl_param param;
+ struct passwd *pw;
+ int fd, ret, res;
+ char outbuf[8192];
+ unsigned int *p;
+ glob_t path;
+ int rc;
logmsg(LL_TRACE, "start negotiation rpc\n");
param.reply_buf_size = sizeof(outbuf);
param.reply_buf = outbuf;
- logmsg(LL_TRACE, "to open " INIT_CHANNEL "\n");
+ rc = cfs_get_param_paths(&path, "sptlrpc/gss/init_channel");
+ if (rc != 0)
+ return rc;
+
+ logmsg(LL_TRACE, "to open %s\n", path.gl_pathv[0]);
- fd = open(INIT_CHANNEL, O_WRONLY);
+ fd = open(path.gl_pathv[0], O_WRONLY);
if (fd < 0) {
- logmsg(LL_ERR, "can't open " INIT_CHANNEL "\n");
- return -EACCES;
+ logmsg(LL_ERR, "can't open %s\n", path.gl_pathv[0]);
+ rc = -EACCES;
+ goto out_params;
}
- logmsg(LL_TRACE, "to down-write\n");
+ logmsg(LL_TRACE, "to down-write\n");
- ret = write(fd, ¶m, sizeof(param));
- if (ret != sizeof(param)) {
+ ret = write(fd, ¶m, sizeof(param));
+ close(fd);
+ if (ret != sizeof(param)) {
logmsg(LL_ERR, "lustre ioctl err: %s\n", strerror(errno));
- close(fd);
- return -EACCES;
- }
- close(fd);
+ rc = -EACCES;
+ goto out_params;
+ }
logmsg(LL_TRACE, "do_nego_rpc: to parse reply\n");
if (param.status) {
* returning -ERESTART
*/
if (param.status == -ETIMEDOUT)
- return -ERESTART;
- else
- return param.status;
- }
+ rc = -ERESTART;
+ else
+ rc = param.status;
+ goto out_params;
+ }
p = (unsigned int *)outbuf;
res = *p++;
logmsg(LL_DEBUG, "do_nego_rpc: receive handle len %zu, token len %zu, "
"res %d\n", gr->gr_ctx.length, gr->gr_token.length, res);
- return 0;
+out_params:
+ cfs_free_param_data(&path);
+ return rc;
}
/*
return 0;
}
-#define LOG_LEVEL_PATH "/proc/fs/lustre/sptlrpc/gss/lgss_keyring/debug_level"
-
static void set_log_level()
{
- FILE *file;
- unsigned int level;
-
- file = fopen(LOG_LEVEL_PATH, "r");
- if (file == NULL)
- return;
-
- if (fscanf(file, "%u", &level) != 1)
- goto out;
-
- if (level >= LL_MAX)
- goto out;
-
- lgss_set_loglevel(level);
+ unsigned int level;
+ glob_t path;
+ FILE *file;
+
+ if (cfs_get_param_paths(&path,
+ "sptlrpc/gss/lgss_keyring/debug_level") != 0)
+ return;
+ file = fopen(path.gl_pathv[0], "r");
+ if (file == NULL) {
+ cfs_free_param_data(&path);
+ return;
+ }
+
+ if (fscanf(file, "%u", &level) != 1)
+ goto out;
+
+ if (level >= LL_MAX)
+ goto out;
+
+ lgss_set_loglevel(level);
out:
- fclose(file);
+ cfs_free_param_data(&path);
+ fclose(file);
}
/****************************************