16 char *usage="Usage: %s [-v] [-t timeout] key desc";
19 #define IDMAP_NAMESZ 128
24 * Find either a user or group id based on the name@domain string
26 int id_lookup(char *name_at_domain, key_serial_t key, int type)
34 rc = nfs4_owner_to_uid(name_at_domain, &uid);
35 sprintf(id, "%u", uid);
37 rc = nfs4_group_owner_to_gid(name_at_domain, &gid);
38 sprintf(id, "%u", gid);
41 xlog_err("id_lookup: %s: failed: %m",
42 (type == USER ? "nfs4_owner_to_uid" : "nfs4_group_owner_to_gid"));
45 rc = keyctl_instantiate(key, id, strlen(id) + 1, 0);
47 xlog_err("id_lookup: keyctl_instantiate failed: %m");
54 * Find the name@domain string from either a user or group id
56 int name_lookup(char *id, key_serial_t key, int type)
58 char name[IDMAP_NAMESZ];
59 char domain[NFS4_MAX_DOMAIN_LEN];
64 rc = nfs4_get_default_domain(NULL, domain, NFS4_MAX_DOMAIN_LEN);
67 xlog_err("name_lookup: nfs4_get_default_domain failed: %m");
73 rc = nfs4_uid_to_name(uid, domain, name, IDMAP_NAMESZ);
76 rc = nfs4_gid_to_name(gid, domain, name, IDMAP_NAMESZ);
79 xlog_err("name_lookup: %s: failed: %m",
80 (type == USER ? "nfs4_uid_to_name" : "nfs4_gid_to_name"));
83 rc = keyctl_instantiate(key, &name, strlen(name), 0);
85 xlog_err("name_lookup: keyctl_instantiate failed: %m");
91 int main(int argc, char **argv)
101 /* Set the basename */
102 if ((progname = strrchr(argv[0], '/')) != NULL)
111 while ((opt = getopt(argc, argv, "t:v")) != -1) {
117 timeout = atoi(optarg);
120 xlog_warn(usage, progname);
125 if ((argc - optind) != 2) {
126 xlog_err("Bad arg count. Check /etc/request-key.conf");
127 xlog_warn(usage, progname);
132 nfs4_set_debug(verbose, NULL);
134 key = strtol(argv[optind++], NULL, 10);
136 arg = strdup(argv[optind]);
138 xlog_err("strdup failed: %m");
141 type = strtok(arg, ":");
142 value = strtok(NULL, ":");
145 xlog_warn("key: %ld type: %s value: %s timeout %ld",
146 key, type, value, timeout);
149 if (strcmp(type, "uid") == 0)
150 rc = id_lookup(value, key, USER);
151 else if (strcmp(type, "gid") == 0)
152 rc = id_lookup(value, key, GROUP);
153 else if (strcmp(type, "user") == 0)
154 rc = name_lookup(value, key, USER);
155 else if (strcmp(type, "group") == 0)
156 rc = name_lookup(value, key, GROUP);
158 /* Set timeout to 10 (600 seconds) minutes */
160 keyctl_set_timeout(key, timeout);