Whamcloud - gitweb
LU-5030 utils: migrate most lustre utils to use cfs_get_paths()
[fs/lustre-release.git] / lustre / utils / gss / lgss_keyring.c
index 0b6aa54..c50f4b8 100644 (file)
@@ -51,6 +51,7 @@
 #include <keyutils.h>
 #include <gssapi/gssapi.h>
 
+#include <libcfs/util/param.h>
 #include <libcfs/util/string.h>
 #include "lsupport.h"
 #include "lgss_utils.h"
@@ -117,17 +118,17 @@ struct keyring_upcall_param {
  * 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");
 
@@ -149,23 +150,28 @@ int do_nego_rpc(struct lgss_nego_data *lnd,
         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, &param, sizeof(param));
-        if (ret != sizeof(param)) {
+       ret = write(fd, &param, 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) {
@@ -177,10 +183,11 @@ int do_nego_rpc(struct lgss_nego_data *lnd,
                  * 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++;
@@ -200,7 +207,9 @@ int do_nego_rpc(struct lgss_nego_data *lnd,
 
        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;
 }
 
 /*
@@ -605,26 +614,31 @@ static int parse_callout_info(const char *coinfo,
        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);
 }
 
 /****************************************