You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.1 KiB
69 lines
2.1 KiB
diff --git a/utils/gssd/gssd_proc.c b/utils/gssd/gssd_proc.c |
|
index 646d7e3..14cf7b8 100644 |
|
--- a/utils/gssd/gssd_proc.c |
|
+++ b/utils/gssd/gssd_proc.c |
|
@@ -728,10 +728,18 @@ handle_gssd_upcall(struct clnt_upcall_info *info) |
|
char *target = NULL; |
|
char *service = NULL; |
|
char *enctypes = NULL; |
|
+ char *upcall_str; |
|
+ char *pbuf = info->lbuf; |
|
|
|
printerr(2, "\n%s: '%s' (%s)\n", __func__, info->lbuf, clp->relpath); |
|
|
|
- for (p = strtok(info->lbuf, " "); p; p = strtok(NULL, " ")) { |
|
+ upcall_str = strdup(info->lbuf); |
|
+ if (upcall_str == NULL) { |
|
+ printerr(0, "ERROR: malloc failure\n"); |
|
+ goto out_nomem; |
|
+ } |
|
+ |
|
+ while ((p = strsep(&pbuf, " "))) { |
|
if (!strncmp(p, "mech=", strlen("mech="))) |
|
mech = p + strlen("mech="); |
|
else if (!strncmp(p, "uid=", strlen("uid="))) |
|
@@ -747,7 +755,7 @@ handle_gssd_upcall(struct clnt_upcall_info *info) |
|
if (!mech || strlen(mech) < 1) { |
|
printerr(0, "WARNING: handle_gssd_upcall: " |
|
"failed to find gss mechanism name " |
|
- "in upcall string '%s'\n", info->lbuf); |
|
+ "in upcall string '%s'\n", upcall_str); |
|
goto out; |
|
} |
|
|
|
@@ -760,7 +768,7 @@ handle_gssd_upcall(struct clnt_upcall_info *info) |
|
if (!uidstr) { |
|
printerr(0, "WARNING: handle_gssd_upcall: " |
|
"failed to find uid " |
|
- "in upcall string '%s'\n", info->lbuf); |
|
+ "in upcall string '%s'\n", upcall_str); |
|
goto out; |
|
} |
|
|
|
@@ -773,7 +781,7 @@ handle_gssd_upcall(struct clnt_upcall_info *info) |
|
if (target && strlen(target) < 1) { |
|
printerr(0, "WARNING: handle_gssd_upcall: " |
|
"failed to parse target name " |
|
- "in upcall string '%s'\n", info->lbuf); |
|
+ "in upcall string '%s'\n", upcall_str); |
|
goto out; |
|
} |
|
|
|
@@ -788,7 +796,7 @@ handle_gssd_upcall(struct clnt_upcall_info *info) |
|
if (service && strlen(service) < 1) { |
|
printerr(0, "WARNING: handle_gssd_upcall: " |
|
"failed to parse service type " |
|
- "in upcall string '%s'\n", info->lbuf); |
|
+ "in upcall string '%s'\n", upcall_str); |
|
goto out; |
|
} |
|
|
|
@@ -801,6 +809,8 @@ handle_gssd_upcall(struct clnt_upcall_info *info) |
|
do_error_downcall(clp->gssd_fd, uid, -EACCES); |
|
} |
|
out: |
|
+ free(upcall_str); |
|
+out_nomem: |
|
free(info); |
|
return; |
|
}
|
|
|