aboutsummaryrefslogtreecommitdiff
path: root/src/pam-freerdp.c
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2012-08-29 08:46:03 +0000
committerTarmac <>2012-08-29 08:46:03 +0000
commit0f1fce81e56f13852b79db0ca40879547cb1a6af (patch)
tree68c0e57e95959e4aa5257779a4a6c461ec06e73a /src/pam-freerdp.c
parentc1d37b4bf2191349d7836a4ddfd7b851328e9684 (diff)
parent829831debae6d31f199056444739f90b0f9e996d (diff)
downloadlibpam-x2go-0f1fce81e56f13852b79db0ca40879547cb1a6af.tar.gz
libpam-x2go-0f1fce81e56f13852b79db0ca40879547cb1a6af.tar.bz2
libpam-x2go-0f1fce81e56f13852b79db0ca40879547cb1a6af.zip
Change internal API to do less memory allocation.. Approved by Albert Astals Cid, jenkins.
Diffstat (limited to 'src/pam-freerdp.c')
-rw-r--r--src/pam-freerdp.c43
1 files changed, 19 insertions, 24 deletions
diff --git a/src/pam-freerdp.c b/src/pam-freerdp.c
index 02524fb..4714165 100644
--- a/src/pam-freerdp.c
+++ b/src/pam-freerdp.c
@@ -50,14 +50,14 @@ get_item (pam_handle_t * pamh, int type)
if (type != PAM_TYPE_DOMAIN) {
char * value = NULL;
if (pam_get_item(pamh, type, (const void **)&value) == PAM_SUCCESS && value != NULL) {
- return strdup(value);
+ return value;
}
if (type == PAM_AUTHTOK && global_password != NULL) {
- return strdup(global_password);
+ return global_password;
}
} else {
if (global_domain != NULL) {
- return strdup(global_domain);
+ return global_domain;
}
}
/* Now we need to prompt */
@@ -100,13 +100,13 @@ get_item (pam_handle_t * pamh, int type)
return NULL;
}
- char * retval = responses->resp;
+ char * promptval = responses->resp;
free(responses);
if (type == PAM_RHOST) {
- char * subloc = strstr(retval, "://");
+ char * subloc = strstr(promptval, "://");
if (subloc != NULL) {
- char * original = retval;
+ char * original = promptval;
char * newish = subloc + strlen("://");
char * endslash = strstr(newish, "/");
@@ -114,19 +114,23 @@ get_item (pam_handle_t * pamh, int type)
endslash[0] = '\0';
}
- retval = strdup(newish);
+ promptval = strdup(newish);
free(original);
}
}
- if (retval != NULL) { /* Can't believe it really would be at this point, but let's be sure */
+ char * retval = NULL;
+ if (promptval != NULL) { /* Can't believe it really would be at this point, but let's be sure */
if (type != PAM_TYPE_DOMAIN) {
- pam_set_item(pamh, type, (const void *)retval);
+ pam_set_item(pamh, type, (const void *)promptval);
+ /* We're returning the value saved by PAM so we can clear promptval */
+ pam_get_item(pamh, type, (const void **)&retval);
} else {
if (global_domain != NULL) {
free(global_domain);
}
- global_domain = strdup(retval);
+ global_domain = strdup(promptval);
+ retval = global_domain;
}
if (type == PAM_AUTHTOK) {
if (global_password != NULL) {
@@ -134,9 +138,12 @@ get_item (pam_handle_t * pamh, int type)
munlock(global_password, strlen(global_password));
free(global_password);
}
- global_password = strdup(retval);
+ global_password = strdup(promptval);
mlock(global_password, strlen(global_password));
+ retval = global_password;
}
+
+ free(promptval);
}
return retval;
@@ -227,14 +234,8 @@ pam_sm_authenticate (pam_handle_t *pamh, int flags, int argc, const char **argv)
}
}
- /* Free Memory and return our status */
+ /* Return our status */
done:
- if (username != NULL) { free(username); }
- if (password != NULL) { free(password); }
- if (ruser != NULL) { free(ruser); }
- if (rhost != NULL) { free(rhost); }
- if (rdomain != NULL) { free(rdomain); }
-
return retval;
}
@@ -365,12 +366,6 @@ pam_sm_open_session (pam_handle_t *pamh, int flags, int argc, const char ** argv
free(buffer);
done:
- if (username != NULL) { free(username); }
- if (password != NULL) { free(password); }
- if (ruser != NULL) { free(ruser); }
- if (rhost != NULL) { free(rhost); }
- if (rdomain != NULL) { free(rdomain); }
-
return retval;
}